diff options
Diffstat (limited to 'extractor/action_format.gd')
-rw-r--r-- | extractor/action_format.gd | 58 |
1 files changed, 41 insertions, 17 deletions
diff --git a/extractor/action_format.gd b/extractor/action_format.gd index ff2ba64..719bc2d 100644 --- a/extractor/action_format.gd +++ b/extractor/action_format.gd @@ -57,18 +57,22 @@ static func from_bytes(bytes: ByteStream) -> ActionFormat: version.major = bytes.decode_u8() action_format.version = version + if version.major < 2 and version.minor < 3: + print(version) + return action_format + action_format.action_count = bytes.decode_u16() action_format.reserved = bytes.get_buffer(10).bytes action_format.actions = [] as Array[ActionData] for idx in action_format.action_count: - var action = ActionData.from_bytes(bytes) + var action = ActionData.from_bytes(bytes, version) action_format.actions.append(action) action_format.event_count = bytes.decode_u32() action_format.events = [] as Array[Event] for idx in action_format.event_count: - var event = Event.from_bytes(bytes) + var event = Event.from_bytes(bytes, version) action_format.events.append(event) action_format.frame_times = [] as Array[float] @@ -95,13 +99,13 @@ class ActionData: return length - static func from_bytes(bytes: ByteStream) -> ActionData: + static func from_bytes(bytes: ByteStream, version: Version) -> ActionData: var action = ActionData.new() action.motion_count = bytes.decode_u32() action.motions = [] as Array[Motion] for idx in action.motion_count: - var motion = Motion.from_bytes(bytes) + var motion = Motion.from_bytes(bytes, version) action.motions.append(motion) return action @@ -135,7 +139,7 @@ class Motion: return 44 + SpriteLayer.BYTE_LENGTH * sprite_layer_count + SpriteAnchor.BYTE_LENGTH * sprite_anchor_count - static func from_bytes(bytes: ByteStream): + static func from_bytes(bytes: ByteStream, version: Version): var motion = Motion.new() motion.unused = bytes.get_buffer(32).bytes @@ -143,7 +147,7 @@ class Motion: motion.sprite_layer_count = bytes.decode_u32() motion.sprite_layers = [] as Array[SpriteLayer] for idx in motion.sprite_layer_count: - var sprite_layer = SpriteLayer.from_bytes(bytes) + var sprite_layer = SpriteLayer.from_bytes(bytes, version) motion.sprite_layers.append(sprite_layer) motion.event_id = bytes.decode_s32() @@ -151,8 +155,8 @@ class Motion: motion.sprite_anchor_count = bytes.decode_u32() motion.sprite_anchors = [] as Array[SpriteAnchor] for idx in motion.sprite_anchor_count: - var sprite_anchor = SpriteAnchor.from_bytes(bytes) - motion.sprite_anchor_count.append(sprite_anchor) + var sprite_anchor = SpriteAnchor.from_bytes(bytes, version) + motion.sprite_anchors.append(sprite_anchor) return motion @@ -194,10 +198,17 @@ class SpriteLayer: ## Byte Type: f32 [br] ## Byte Length: 4 + ## Versions: [2.3, 2.4] + var scale: float + + ## Byte Type: f32 [br] + ## Byte Length: 4 + ## Versions: [2.5] var scale_u: float ## Byte Type: f32 [br] ## Byte Length: 4 + ## Versions: [2.5] var scale_v: float ## Byte Type: i32 [br] @@ -226,14 +237,20 @@ class SpriteLayer: func get_scale() -> Vector2: - return Vector2(scale_u, scale_v) + if scale: + return Vector2(scale, scale) + else: + return Vector2(scale_u, scale_v) func get_size() -> Vector2: - return Vector2(width, height) + if width and height: + return Vector2(width, height) + else: + return Vector2.ZERO - static func from_bytes(bytes: ByteStream): + static func from_bytes(bytes: ByteStream, version: Version): var sprite_layer = SpriteLayer.new() sprite_layer.position_u = bytes.decode_s32() @@ -244,12 +261,19 @@ class SpriteLayer: sprite_layer.color_g = bytes.decode_u8() sprite_layer.color_b = bytes.decode_u8() sprite_layer.color_a = bytes.decode_u8() - sprite_layer.scale_u = bytes.decode_float() - sprite_layer.scale_v = bytes.decode_float() + + if version.major == 2 and version.minor >= 4: + sprite_layer.scale_u = bytes.decode_float() + sprite_layer.scale_v = bytes.decode_float() + else: + sprite_layer.scale = bytes.decode_float() + sprite_layer.rotation_degrees = bytes.decode_s32() sprite_layer.type = bytes.decode_u32() - sprite_layer.width = bytes.decode_u32() - sprite_layer.height = bytes.decode_u32() + + if version.to_string() == "2.5": + sprite_layer.width = bytes.decode_u32() + sprite_layer.height = bytes.decode_u32() return sprite_layer @@ -278,7 +302,7 @@ class SpriteAnchor: return Vector2(position_u, position_v) - static func from_bytes(bytes: ByteStream): + static func from_bytes(bytes: ByteStream, version: Version): var sprite_anchor = SpriteAnchor.new() sprite_anchor.unused = bytes.get_buffer(4).bytes @@ -297,7 +321,7 @@ class Event: var name: String - static func from_bytes(bytes: ByteStream): + static func from_bytes(bytes: ByteStream, version: Version): var event = Event.new() event.name = bytes.get_string_from_utf8(BYTE_LENGTH) |