mirror of
https://github.com/WerWolv/ImHex-Patterns.git
synced 2026-03-27 23:37:04 -05:00
patterns: Add .gmf (Game Maker 3.x Data) pattern file and its test files (#438)
* Add .fas and .was pattern files (Oska DeskMates) * Update .was pattern file * Update .was/.wa3 pattern file * Update README.md * Update README.md * Update .fas & .was pattern files * Update README.md * Update fas_oskasoftware_old.hexpat * Added WAS test file * Update WAS test file * Update was_oskasoftware.hexpat * Update was_oskasoftware.hexpat * Update fas_oskasoftware_old.hexpat * Update fas_oskasoftware.hexpat * Update README.md Replacing backward slashes with forward ones in the `WAS` row. * Update fas_oskasoftware_old.hexpat * Update was_oskasoftware.hexpat * Add files via upload * Add Game Maker 3.x Data pattern * Update gmf.hexpat
This commit is contained in:
229
patterns/gmf.hexpat
Normal file
229
patterns/gmf.hexpat
Normal file
@@ -0,0 +1,229 @@
|
||||
#pragma author DmitriLeon2000
|
||||
#pragma description Game Maker 3.x data
|
||||
#pragma endian little
|
||||
|
||||
import std.mem;
|
||||
import std.io;
|
||||
|
||||
struct Colors {
|
||||
u8 red [[color("FF0000")]];
|
||||
u8 green [[color("00FF00")]];
|
||||
u8 blue [[color("0000FF")]];
|
||||
padding[1];
|
||||
} [[static, color(std::format("{:02X}{:02X}{:02X}", red, green, blue)),
|
||||
hex::inline_visualize("color", red, green, blue, 255)]];
|
||||
|
||||
struct PascalString {
|
||||
u32 length;
|
||||
char data[length];
|
||||
};
|
||||
|
||||
struct BitmapData {
|
||||
u8 type[2];
|
||||
u32 size;
|
||||
u8 data[size-6] [[sealed]];
|
||||
};
|
||||
|
||||
enum BackgroundType : s32 {
|
||||
Solid = 0,
|
||||
Image = 1,
|
||||
Gradient = 2,
|
||||
None = 3
|
||||
};
|
||||
|
||||
enum BackImageStyle : s32 {
|
||||
Tile = 0,
|
||||
Stretch = 1,
|
||||
Scrolling = 2,
|
||||
LeftTop = 3
|
||||
};
|
||||
|
||||
enum Transition : u32 {
|
||||
None = 0,
|
||||
CreateFromLeft = 1,
|
||||
CreateFromRight = 2,
|
||||
CreateFromTop = 3,
|
||||
CreateFromBottom = 4,
|
||||
CreateFromCenter = 5,
|
||||
ShiftFromLeft = 6,
|
||||
ShiftFromRight = 7,
|
||||
ShiftFromTop = 8,
|
||||
ShiftFromBottom = 9,
|
||||
PushFromLeft = 10,
|
||||
PushFromRight = 11,
|
||||
PushFromTop = 12,
|
||||
PushFromBottom = 13
|
||||
};
|
||||
|
||||
struct SpriteBoundingBox {
|
||||
u32 left, right, bottom, top;
|
||||
};
|
||||
|
||||
enum ActionID : s32 {
|
||||
EnumerateActions = 0,
|
||||
EndAction = 1,
|
||||
MoveFixed = 101,
|
||||
ReverseHorizontal = 102,
|
||||
ReverseVertical = 103,
|
||||
JumpPosition = 104,
|
||||
JumpRandom = 105,
|
||||
Bounce = 106,
|
||||
SetSpeedHorizontal = 111,
|
||||
SetSpeedVertical = 112,
|
||||
SetGravity = 121,
|
||||
SetFriction = 122,
|
||||
MoveFree = 131,
|
||||
SetAlarm = 201,
|
||||
InstanceCreate = 311,
|
||||
InstanceDestroy = 312,
|
||||
InstanceChange = 313,
|
||||
PositionDestroy = 321,
|
||||
Sound = 401,
|
||||
ShowMessage = 411,
|
||||
SetScore = 421,
|
||||
DisplayHighscore = 431,
|
||||
GoToRoom = 501,
|
||||
EndGame = 511,
|
||||
Sleep = 521,
|
||||
ExitEvent = 601,
|
||||
CheckPlaceFree = 701,
|
||||
CheckInstanceNumber = 702,
|
||||
CheckPlaceObject = 703,
|
||||
CheckPlaceCollision = 704,
|
||||
CheckQuestion = 721,
|
||||
Else = 751,
|
||||
CheckExpression = 801,
|
||||
ExecuteCode = 811,
|
||||
SetVariable = 821,
|
||||
BlockStart = 901,
|
||||
BlockEnd = 902,
|
||||
DrawImage = 1001,
|
||||
DrawText = 1002,
|
||||
SetFont = 1003
|
||||
};
|
||||
|
||||
struct GameObjectAction {
|
||||
s32 version_verify [[hidden]];
|
||||
ActionID action_id;
|
||||
s32 apply_to; // -1 - self; -2 - not available
|
||||
bool relative;
|
||||
padding[3];
|
||||
u32 param_count;
|
||||
PascalString params[param_count];
|
||||
s32 action_group;
|
||||
};
|
||||
|
||||
struct GameObjectSubEvent {
|
||||
s32 subevent_number;
|
||||
s32 version_verify [[hidden]];
|
||||
u32 action_count;
|
||||
GameObjectAction actions[action_count];
|
||||
};
|
||||
|
||||
struct GameObjectEvent {
|
||||
GameObjectSubEvent subevents[while(std::mem::read_unsigned($, 4) != 0xFFFFFFFF)];
|
||||
padding[4];
|
||||
};
|
||||
|
||||
struct GameSprite {
|
||||
s32 version_verify [[hidden]];
|
||||
s32 width, height;
|
||||
SpriteBoundingBox bounding_box1;
|
||||
u32 image_count;
|
||||
BitmapData images[image_count];
|
||||
SpriteBoundingBox bounding_box2;
|
||||
};
|
||||
|
||||
struct GameObject {
|
||||
s32 version_verify [[hidden]];
|
||||
PascalString name;
|
||||
bool solid;
|
||||
padding[3];
|
||||
bool active;
|
||||
padding[3];
|
||||
if (version_verify >= 320)
|
||||
u32 parent_id;
|
||||
GameObjectEvent events[13];
|
||||
// Events: 0 - Create, 1 - Destroy, 2 - Alarm, 3 - Step, 4 - Collision,
|
||||
// 5 - Meeting, 6 - Mouse, 7 - Keyboard, 8 - Other, 9 - Drawing
|
||||
// 10 - Create duplicate, 11-13 - unused
|
||||
s32 cap [[hidden]];
|
||||
GameSprite sprite;
|
||||
} [[name(name.data)]];
|
||||
|
||||
struct GameRoomView {
|
||||
bool enabled;
|
||||
padding[3];
|
||||
if (parent.version_verify >= 320)
|
||||
s32 left, top, left_cell, top_cell;
|
||||
u32 width;
|
||||
u32 height;
|
||||
if (parent.version_verify >= 320) {
|
||||
u32 border_horiz, border_vert;
|
||||
} else
|
||||
u32 border;
|
||||
u32 object_to_follow;
|
||||
};
|
||||
|
||||
struct GameRoomInstance {
|
||||
s32 left, top, object_index;
|
||||
};
|
||||
|
||||
struct GameRoom {
|
||||
u32 version_verify [[hidden]];
|
||||
PascalString name;
|
||||
Colors back_color1;
|
||||
if (version_verify >= 320) {
|
||||
Colors back_color2;
|
||||
bool vertical_gradient;
|
||||
padding[3];
|
||||
}
|
||||
// specify the name of the external image file from the data folder
|
||||
PascalString back_image_name;
|
||||
BackgroundType back_type;
|
||||
BackImageStyle back_image_style;
|
||||
s32 back_scroll_speed_horizontal, back_scroll_speed_vertical;
|
||||
s32 speed, width, height, cell_size;
|
||||
if (version_verify >= 320) {
|
||||
bool enable_views;
|
||||
padding[3];
|
||||
GameRoomView views[4];
|
||||
} else
|
||||
GameRoomView view;
|
||||
if (version_verify >= 320) {
|
||||
Transition transition;
|
||||
u32 transition_time, transition_steps;
|
||||
}
|
||||
u32 instance_count;
|
||||
GameRoomInstance instances[instance_count];
|
||||
} [[name(name.data)]];
|
||||
|
||||
struct GameSound {
|
||||
u32 version_verify [[hidden]];
|
||||
PascalString name;
|
||||
u32 reserved;
|
||||
// specify the name of the external audio file from the data folder
|
||||
PascalString filename;
|
||||
bool allow_for_sound_effects;
|
||||
padding[3];
|
||||
u32 buffer_count;
|
||||
} [[name(name.data)]];
|
||||
|
||||
struct GMF {
|
||||
u32 version;
|
||||
u32 verification[2];
|
||||
u32 version_verify_options [[hidden]];
|
||||
u32 option_count;
|
||||
PascalString options[option_count];
|
||||
u32 version_verify_objects [[hidden]];
|
||||
u32 object_count;
|
||||
GameObject objects[object_count];
|
||||
u32 version_verify_rooms [[hidden]];
|
||||
u32 room_count;
|
||||
GameRoom rooms[room_count];
|
||||
u32 version_verify_sounds [[hidden]];
|
||||
u32 sound_count;
|
||||
GameSound sounds[sound_count];
|
||||
};
|
||||
|
||||
GMF gmf @ 0x0;
|
||||
BIN
tests/patterns/test_data/gmf.hexpat/gmf.hexpat.gmf
Normal file
BIN
tests/patterns/test_data/gmf.hexpat/gmf.hexpat.gmf
Normal file
Binary file not shown.
BIN
tests/patterns/test_data/gmf.hexpat/gmf.hexpat_data/help
Normal file
BIN
tests/patterns/test_data/gmf.hexpat/gmf.hexpat_data/help
Normal file
Binary file not shown.
Reference in New Issue
Block a user