OBD:TRAM: Difference between revisions

erroneous res_id – we ignore the '1' flag when converting it
(flags: brought in notes from Loser on the talk page, plus elaborations of my own)
(erroneous res_id – we ignore the '1' flag when converting it)
 
(3 intermediate revisions by the same user not shown)
Line 2: Line 2:




[[image:tram_all.gif]]
[[Image:Tram_all.gif]]




{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x000 | res_id  |FF0000| 01 49 07 00 | 1532       | 01865-KONCOMpunch_heavy.TRAM }}
{{OBDtr| 0x000 | res_id  |FF0000| 01 49 07 00 | 1865       | 01865-KONCOMpunch_heavy.TRAM }}
{{OBDtr| 0x004 | lev_id  |FFFF00| 01 00 00 00 | 0          | level 0 }}
{{OBDtr| 0x004 | lev_id  |FFFF00| 01 00 00 00 | 0          | level 0 }}
{{OBDtr| 0x008 | int32    |FFC8C8| 00 00 00 00 | 0          | runtime only; pointer to animation name }}
{{OBDtr| 0x008 | int32    |FFC8C8| 00 00 00 00 | 0          | runtime only; pointer to animation name }}
{{OBDtr| 0x00C | offset  |FFFFC8| A0 B4 80 00 | 0x0080B4A0  | .raw-address of the [[OBD:TRAM/raw0x0C|height]] track (Y-position of the pelvis above the root) }}
{{OBDtr| 0x00C | offset  |FFFFC8| A0 B4 80 00 | 0x0080B4A0  | raw file offset of the [[OBD:TRAM/raw0x0C|height]] track (Y-position of the pelvis above the root) }}
{{OBDtr| 0x010 | offset  |FFFFC8| E0 B5 80 00 | 0x0080B5E0  | .raw-address of the [[OBD:TRAM/raw0x10|horizontal velocities]] of the character root }}
{{OBDtr| 0x010 | offset  |FFFFC8| E0 B5 80 00 | 0x0080B5E0  | raw file offset of the [[OBD:TRAM/raw0x10|horizontal velocities]] of the character root }}
{{OBDtr| 0x014 | offset  |FFFFC8| 60 B8 80 00 | 0x0080B860  | .raw-address of the [[OBD:TRAM/raw0x14|attack part]] }}
{{OBDtr| 0x014 | offset  |FFFFC8| 60 B8 80 00 | 0x0080B860  | raw file offset of the [[OBD:TRAM/raw0x14|attack part]] }}
{{OBDtr| 0x018 | offset  |FFFFC8| 00 00 00 00 | unused      | .raw-address of the [[OBD:TRAM/raw0x18|damage part]] (used only by "_tgt" animations (throw targets/victims) }}
{{OBDtr| 0x018 | offset  |FFFFC8| 00 00 00 00 | unused      | raw file offset of the [[OBD:TRAM/raw0x18|damage part]] (used only by "_tgt" animations (throw targets/victims) }}
{{OBDtr| 0x01C | offset  |FFFFC8| A0 B8 80 00 | 0x0080B8A0  | .raw-address of the [[OBD:TRAM/raw0x1C|motion blur part]] }}
{{OBDtr| 0x01C | offset  |FFFFC8| A0 B8 80 00 | 0x0080B8A0  | raw file offset of the [[OBD:TRAM/raw0x1C|motion blur part]] }}
{{OBDtr| 0x020 | offset  |FFFFC8| C0 B8 80 00 | 0x0080B8C0  | .raw-address of the [[OBD:TRAM/raw0x20|shortcut data]] }}
{{OBDtr| 0x020 | offset  |FFFFC8| C0 B8 80 00 | 0x0080B8C0  | raw file offset of the [[OBD:TRAM/raw0x20|shortcut data]] }}
{{OBDtr| 0x024 | offset  |FFFFC8| 00 00 00 00 | unused      | .raw-address of the [[OBD:TRAM/raw0x24|throw data]] }}
{{OBDtr| 0x024 | offset  |FFFFC8| 00 00 00 00 | unused      | raw file offset of the [[OBD:TRAM/raw0x24|throw data]] (including effective distance of throw) }}
{{OBDtr| 0x028 | offset  |FFFFC8| E0 B8 80 00 | 0x0080B8E0  | .raw-address of the [[OBD:TRAM/raw0x28|footstep data]] }}
{{OBDtr| 0x028 | offset  |FFFFC8| E0 B8 80 00 | 0x0080B8E0  | raw file offset of the [[OBD:TRAM/raw0x28|footstep data]] }}
{{OBDtr| 0x02C | offset  |FFFFC8| 00 B9 80 00 | 0x0080B900  | .raw-address of the [[OBD:TRAM/raw0x2C|particle data]] (trails, dust, etc.) }}
{{OBDtr| 0x02C | offset  |FFFFC8| 00 B9 80 00 | 0x0080B900  | raw file offset of the [[OBD:TRAM/raw0x2C|particle data]] (trails, dust, etc.) }}
{{OBDtr| 0x030 | offset  |FFFFC8| 60 B9 80 00 | 0x0080B960  | .raw-address of the [[OBD:TRAM/raw0x30|position data]] (for basic prediction) }}
{{OBDtr| 0x030 | offset  |FFFFC8| 60 B9 80 00 | 0x0080B960  | raw file offset of the [[OBD:TRAM/raw0x30|position data]] (for basic prediction) }}
{{OBDtr| 0x034 | offset  |FFFFC8| 00 BD 80 00 | 0x0080BD00  | .raw-address of the [[OBD:TRAM/raw0x34|rotations]] (of all body parts) }}
{{OBDtr| 0x034 | offset  |FFFFC8| 00 BD 80 00 | 0x0080BD00  | raw file offset of the [[OBD:TRAM/raw0x34|rotations]] (of all body parts) }}
{{OBDtr| 0x038 | offset  |FFFFC8| 00 00 00 00 | unused      | .raw-address of the [[OBD:TRAM/raw0x38|sound data]] }}
{{OBDtr| 0x038 | offset  |FFFFC8| 00 00 00 00 | unused      | raw file offset of the [[OBD:TRAM/raw0x38|sound data]] }}
{{OBDtr| 0x03C | bitset32 |C8FFC8| 90 00 08 00 | attack, atomic, dontAim| flags; same as listed in [[OBD:StNA|StNA]]anim_flags; the bits are as follows:
{{OBDtr| 0x03C | bitset32 |C8FFC8| 90 00 08 00 | attack, atomic, dontAim| flags; same as listed in [[OBD:StNA|StNA]]anim_flags; the bits are as follows:
:0x'''01''' 00 00 00 - prepared (used at runtime only; marks that the animation was loaded)
:0x'''01''' 00 00 00 - prepared (used at runtime only; marks that the animation was loaded)
Line 85: Line 85:
}}
}}
{{OBDtr| 0x040 | link    |C8FFFF| 00 00 00 00 | unused      | direct animation 0 (link to another TRAM file) }}
{{OBDtr| 0x040 | link    |C8FFFF| 00 00 00 00 | unused      | direct animation 0 (link to another TRAM file) }}
{{OBDtr| 0x044 | link    |C8FFFF| 00 00 00 00 | unused      | direct animation 1 (link to another TRAM file) }}
{{OBDtr| 0x044 | link    |C8FFFF| 00 00 00 00 | unused      | direct animation 1 (link to another TRAM file); see {{SectionLink||Direct links}} }}
{{OBDtr| 0x048 | bitset32 |FFC8FF| 00 00 00 00 | 0          | used body parts; for original 19-bone hierarchy the bit layout is as follows:
{{OBDtr| 0x048 | bitset32 |FFC8FF| 00 00 00 00 | 0          | used body parts; for original 19-bone hierarchy the bit layout is as follows:
:0x000000'''01''' - pelvis
:0x000000'''01''' - pelvis
Line 106: Line 106:
:0x00'''02'''0000 - right wrist
:0x00'''02'''0000 - right wrist
:0x00'''04'''0000 - right fist
:0x00'''04'''0000 - right fist
Aiming screen TRAMs "use" several bones here. Other overlay TRAMs use only "chest". Non-overlay TRAMs use none.
Aiming screen TRAMs use several bones here. Other overlay TRAMs use only "chest". Non-overlay TRAMs use none.
}}
}}
{{OBDtr| 0x04C | bitset32 |FFC8FF| 00 00 00 00 | 0          | replaced parts; same bitset layout as above; only overlay TRAMs other than aiming-screen ones "replace" parts. }}
{{OBDtr| 0x04C | bitset32 |FFC8FF| 00 00 00 00 | 0          | replaced parts; same bitset layout as above; only overlay TRAMs other than aiming-screen ones replace parts. }}
{{OBDtr| 0x050 | float    |FFC800| 00 00 00 00 | 0.000000    | final rotation in radians (for anims that make you turn) }}
{{OBDtr| 0x050 | float    |FFC800| 00 00 00 00 | 0.000000    | final rotation in radians (for anims that make you turn) }}
{{OBDtr| 0x054 | int16    |C800C8| 01 00      | 1          | main moving direction; the following directions are possible:
{{OBDtr| 0x054 | int16    |C800C8| 01 00      | 1          | main moving direction; the following directions are possible:
Line 116: Line 116:
:3 - left
:3 - left
:4 - right
:4 - right
:5 - 360 (unused?)
:5 - 360 (unused? even Devil Spin Kick uses "forward")
}}
}}
{{OBDtr| 0x056 | uint16  |C87C64| 06 00    | 6 <nowiki>=</nowiki> superpunch | vocalization type (-1 if unused); references one of the 10 vocalization slots in [[OBD:ONCC|ONCC]]
{{OBDtr| 0x056 | uint16  |C87C64| 06 00    | 6 | vocalization type (-1 if unused); references one of the 10 vocalization slots in [[OBD:ONCC|ONCC]]
:0 - taunt
:0 - taunt
:1 - alert
:1 - alert
Line 130: Line 130:
:9 - super4
:9 - super4
In this case the value 6 triggers Konoko's "superpunch" vocalization, "Rising fury!" }}
In this case the value 6 triggers Konoko's "superpunch" vocalization, "Rising fury!" }}
{{OBDtrBK|Extent info}}
{{OBDtrBK|Extent info}}<br>See {{SectionLink||Extent info}} for explanation
{{OBDtr| 0x058 | float    |B0C3D4| 8D 87 CF 41 | 25.941187  | max horizontal extent of the attack }}
{{OBDtr| 0x058 | float    |B0C3D4| 8D 87 CF 41 | 25.941187  | max horizontal extent of the attack }}
{{OBDtr| 0x05C | float    |B0C3D4| DE E9 1A 40 | 2.420524    | min Y of the attack }}
{{OBDtr| 0x05C | float    |B0C3D4| DE E9 1A 40 | 2.420524    | min Y of the attack }}
Line 174: Line 174:
{{OBDtr| 0x152 | uint16  |C8C864| 12 00      | 18          | soft pause in game ticks (1/60 seconds) }}
{{OBDtr| 0x152 | uint16  |C8C864| 12 00      | 18          | soft pause in game ticks (1/60 seconds) }}
{{OBDtr| 0x154 | int32    |0096C8| 00 00 00 00 | 0          | number of elements in the sound part }}
{{OBDtr| 0x154 | int32    |0096C8| 00 00 00 00 | 0          | number of elements in the sound part }}
{{OBDtr| 0x158 | int32    |FF80C0| 00 00 00 00 | 0          | runtime only; pointer to the sound for this animation (initialised from [[OBD:BINA/SABD|SABD]])}}
{{OBDtr| 0x158 | int32    |FF80C0| 00 00 00 00 | 0          | runtime only; pointer to the sound for this animation (from [[OBD:BINA/SABD|SABD]])}}
{{OBDtr| 0x15C | int16    |D0C0AF| 00 00      | 0          | runtime only; sound start frame (initialised from SABD) }}
{{OBDtr| 0x15C | int16    |D0C0AF| 00 00      | 0          | runtime only; sound start frame (from SABD) }}
{{OBDtr| 0x15E | int16    |D0C0AF| 3C 00      | 60          | animation frame rate (typically 60 frames per second) }}
{{OBDtr| 0x15E | int16    |D0C0AF| 3C 00      | 60          | animation frame rate (always 60?) }}
{{OBDtr| 0x160 | int16    |EEDDFF| 06 00      | 6          | compression size }}
{{OBDtr| 0x160 | int16    |EEDDFF| 06 00      | 6          | compression size }}
{{OBDtr| 0x162 | int16    |EEDDFF| 16 00      | 22          | animation type (from anim_types.[[OBD:StNA|StNA]]) }}
{{OBDtr| 0x162 | int16    |EEDDFF| 16 00      | 22          | animation type (from [[XML:StNA|StNA]]) }}
{{OBDtr| 0x164 | int16    |C5FF8A| 16 00      | 22          | aiming type }}
{{OBDtr| 0x164 | int16    |C5FF8A| 16 00      | 22          | aiming type from StNA }}
{{OBDtr| 0x166 | int16    |C5FF8A| 00 00      | 0          | from state }}
{{OBDtr| 0x166 | int16    |C5FF8A| 00 00      | 0          | from state; see {{SectionLink||From state, to state, animation type, variant, shortcuts}} }}
{{OBDtr| 0x168 | int16    |C0C0C0| 07 00      | 7          | to state }}
{{OBDtr| 0x168 | int16    |C0C0C0| 07 00      | 7          | to state }}
{{OBDtr| 0x16A | int16    |C0C0C0| 13 00      | 19          | number of bodyparts }}
{{OBDtr| 0x16A | int16    |C0C0C0| 13 00      | 19          | number of body parts }}
{{OBDtr| 0x16C | int16    |FF0080| 50 00      | 80          | number of frames (at possibly custom frame rate) }}
{{OBDtr| 0x16C | int16    |FF0080| 50 00      | 80          | number of frames }}
{{OBDtr| 0x16E | int16    |FF0080| 50 00      | 80          | duration in game ticks (1/60 seconds) }}
{{OBDtr| 0x16E | int16    |FF0080| 50 00      | 80          | duration in game ticks (1/60 seconds) }}
{{OBDtr| 0x170 | bitset16 |FFFFA6| 00 02      | 0x0200 <nowiki>=</nowiki> COM| variant, the following bits are possible (values in hex):
{{OBDtr| 0x170 | bitset16 |FFFFA6| 00 02      | 0x0200 <nowiki>=</nowiki> COM| variant, the following bits are possible (values in hex):
:0x'''01'''00 - "sprint" ('''SPR'''int animation)
:0x'''01'''00 - "sprint" ('''SPR'''int animation)
:0x'''02'''00 - "fight" ('''COM'''bat animation)
:0x'''02'''00 - "fight" ('''COM'''bat animation)
:0x'''04'''00 - "shoulder" (not used by the engine; possibly for [[:Image:Pre-beta enigma 5.png|rocket launchers]])
:0x'''04'''00 - "shoulder" (not used by the engine; apparently used at one time for weapons like [[:Image:Pre-beta enigma 5.png|rocket launchers]])
:0x'''08'''00 - "righty pistol" ('''PIS'''tol animation)
:0x'''08'''00 - "righty pistol" ('''PIS'''tol animation)
:0x'''10'''00 - "lefty pistol" ('''NIN'''ja '''PIS'''tol animation)
:0x'''10'''00 - "lefty pistol" ('''NIN'''ja '''PIS'''tol animation)
Line 199: Line 199:
{{OBDtr| 0x176 | uint16  |71FFB8| FF FF      | 65535      | atomic end }}
{{OBDtr| 0x176 | uint16  |71FFB8| FF FF      | 65535      | atomic end }}
{{OBDtr| 0x178 | uint16  |0000BF| 00 00      | 0          | end interpolation }}
{{OBDtr| 0x178 | uint16  |0000BF| 00 00      | 0          | end interpolation }}
{{OBDtr| 0x17A | uint16  |0000BF| FF FF      | 65535      | maximal interpolation }}
{{OBDtr| 0x17A | uint16  |0000BF| FF FF      | 65535      | maximum interpolation }}
{{OBDtr| 0x17C | uint16  |804040| FF FF      | 65535      | action frame }}
{{OBDtr| 0x17C | uint16  |804040| FF FF      | 65535      | action frame; e.g. when weapon theft occurs in a disarm anim }}
{{OBDtr| 0x17E | uint16  |804040| 0A 00      | 10          | first level where the animation is available }}
{{OBDtr| 0x17E | uint16  |804040| 0A 00      | 10          | first level where the animation is available }}
{{OBDtr| 0x180 | uint8    |FF22FF| 01          | 1          | first "invulnerable" frame }}
{{OBDtr| 0x180 | uint8    |FF22FF| 01          | 1          | first "invulnerable" frame }}
{{OBDtr| 0x181 | uint8    |FF22FF| 1C          | 28          | last "invulnerable" frame }}
{{OBDtr| 0x181 | uint8    |FF22FF| 1C          | 28          | last "invulnerable" frame }}
{{OBDtr| 0x182 | uint8    |808080| 02          | 2          | number of elements in the attack part }}
{{OBDtr| 0x182 | uint8    |808080| 02          | 2          | number of elements in the attack part above }}
{{OBDtr| 0x183 | uint8    |808080| 00          | 0          | number of elements in the take damage part }}
{{OBDtr| 0x183 | uint8    |808080| 00          | 0          | number of elements in the take damage part above }}
{{OBDtr| 0x184 | uint8    |FFAA82| 01          | 1          | number of elements in the motion blur part }}
{{OBDtr| 0x184 | uint8    |FFAA82| 01          | 1          | number of elements in the motion blur part above }}
{{OBDtr| 0x185 | uint8    |FFAA82| 01          | 1          | number of elements in the shortcut part }}
{{OBDtr| 0x185 | uint8    |FFAA82| 01          | 1          | number of elements in the shortcut part above }}
{{OBDtr| 0x186 | uint8    |00D900| 02          | 2          | number of elements in the footstep part }}
{{OBDtr| 0x186 | uint8    |00D900| 02          | 2          | number of elements in the footstep part above }}
{{OBDtr| 0x187 | uint8    |00D900| 04          | 4          | number of elements in the particle part }}
{{OBDtr| 0x187 | uint8    |00D900| 04          | 4          | number of elements in the particle part above }}
{{OBDtr| 0x188 | char[24] |CACAFF| AD DE      | dead        | unused (not part of the template) }}
{{OBDtr| 0x188 | char[24] |CACAFF| AD DE      | dead        | unused (not part of the template) }}
|}
|}
Line 248: Line 248:
==Limitations on animation length==
==Limitations on animation length==
Frame counts in Oni's TRAM are either absolute frame counts since the beginning of the animation, or intervals between events or keyframes.
Frame counts in Oni's TRAM are either absolute frame counts since the beginning of the animation, or intervals between events or keyframes.
:(The following analysis assumes 60fps as an animation's frame rate. If the framerate can be reduced, the limiting time amounts will increase accordingly.)
:(The following analysis assumes 60 fps as an animation's frame rate. If the frame rate can be reduced, the limiting time amounts will increase accordingly.)
 
===16-bit frame counts===
===16-bit frame counts===
Most typically a frame count is an unsigned 16-bit integer, which allows for a comfortable range of 65535 frames = 1092.25 seconds = 18 m 12.25 s. Even if the integer is accidentally parsed as 16-bit ''signed'', the wraparound to negative values only happens after 32767 frames = 546.1<span style="text-decoration:overline;">3</span> seconds = 9 m 6.1<span style="text-decoration:overline;">3</span> s. Oni has other contexts where frame counts are stored as 16-bit integers, e.g., [[OBD:SNDD|SNDD]] and [[OBD:OBAN|OBAN]].
Most typically a frame count is an unsigned 16-bit integer, which allows for a comfortable range of 65535 frames = 1092.25 seconds = 18 m 12.25 s. Even if the integer is accidentally parsed as 16-bit ''signed'', the wraparound to negative values only happens after 32767 frames = 546.13̅ seconds = 9 m 6.13̅ s. Oni has other contexts where frame counts are stored as 16-bit integers, e.g., [[OBD:SNDD|SNDD]] and [[OBD:OBAN|OBAN]].


===8-bit frame counts===
===8-bit frame counts===
Some of the frame counts inside a TRAM are stored as 8-bit integers (unsigned), which reduces the range to 255 frames = 4.25 seconds (or, in the event of signed interpretation, 127 frames = 2.11<span style="text-decoration:overline;">6</span> seconds).<br />The contexts where 8-bit frame counts occur are as follows.
Some of the frame counts inside a TRAM are stored as 8-bit integers (unsigned), which reduces the range to 255 frames = 4.25 seconds (or, in the event of signed interpretation, 127 frames = 2.116̅ seconds).<br>
The contexts where 8-bit frame counts occur are as follows.
*[[OBD:TRAM/raw0x1C|Motion blur]], "Lifetime" and "Interval", meaning that "ghosts" can be spawned no more than 4.25 seconds apart and can last no more than 4.25 seconds before disappearing (LIMITATION SEVERITY: MINOR)
*[[OBD:TRAM/raw0x1C|Motion blur]], "Lifetime" and "Interval", meaning that "ghosts" can be spawned no more than 4.25 seconds apart and can last no more than 4.25 seconds before disappearing (LIMITATION SEVERITY: MINOR)
*[[OBD:TRAM/raw0x34|Rotation data]], intervals between a bone's keyframes, meaning that rotation keyframes for a bone cannot be more than 4.25 seconds apart. (LIMITATION SEVERITY: MINOR)
*[[OBD:TRAM/raw0x34|Rotation data]], intervals between a bone's keyframes, meaning that rotation keyframes for a bone cannot be more than 4.25 seconds apart. (LIMITATION SEVERITY: MINOR)
Line 268: Line 270:
For a size-6 animation, the "average N" for the first 18 tracks cannot exceed 518.96, so that 126N+108 stays below 65497. For a size-16 animation, this "average N" for the first 18 tracks must not exceed 213.1013, so that 306N+288 stays below 65497.
For a size-6 animation, the "average N" for the first 18 tracks cannot exceed 518.96, so that 126N+108 stays below 65497. For a size-16 animation, this "average N" for the first 18 tracks must not exceed 213.1013, so that 306N+288 stays below 65497.


For an animation that has a keyframe for every bone at each game tick, a 518-frame duration corresponds to 8.6<span style="text-decoration:overline;">3</span> seconds, whereas 213 frames = 3.55 seconds. Typically, however, rotation tracks will have significant keyframe reduction, e.g., Konoko's "Rising Fury!" lasts 80 frames but the pelvis rotation has only 23 keyframe intervals. Assuming 4:1 keyframe reduction for typical animations, this means that the 16-bit offset won't be an issue (for size-6 animations) unless the animation is longer than about 30 seconds.
For an animation that has a keyframe for every bone at each game tick, a 518-frame duration corresponds to 8.63̅ seconds, whereas 213 frames = 3.55 seconds. Typically, however, rotation tracks will have significant keyframe reduction, e.g., Konoko's "Rising Fury!" lasts 80 frames but the pelvis rotation has only 23 keyframe intervals. Assuming 4:1 keyframe reduction for typical animations, this means that the 16-bit offset won't be an issue (for size-6 animations) unless the animation is longer than about 30 seconds.


==PS2 implementation==
==PS2 implementation==
Line 325: Line 327:
{{OBDtr| 0x008 | link    |00FF00| 01 45 06 00 | 1605        | link to 01605-.TREX (combat-relevant data) }}
{{OBDtr| 0x008 | link    |00FF00| 01 45 06 00 | 1605        | link to 01605-.TREX (combat-relevant data) }}
{{OBDtr| 0x00C | int32    |FFC8C8| 00 00 00 00 | 0          | runtime only; pointer to animation name }}
{{OBDtr| 0x00C | int32    |FFC8C8| 00 00 00 00 | 0          | runtime only; pointer to animation name }}
{{OBDtr| 0x010 | offset  |FFFFC8| E0 EE 0F 00 | 0x000FEEE0  | .raw-address of the [[OBD:TRAM/raw0x0C|height]] track (Y-position of the pelvis above the root) }}
{{OBDtr| 0x010 | offset  |FFFFC8| E0 EE 0F 00 | 0x000FEEE0  | raw file offset of the [[OBD:TRAM/raw0x0C|height]] track (Y-position of the pelvis above the root) }}
{{OBDtr| 0x014 | offset  |FFFFC8| 20 F0 0F 00 | 0x000FF020  | .raw-address of the [[OBD:TRAM/raw0x10|horizontal velocities]] of the character root }}
{{OBDtr| 0x014 | offset  |FFFFC8| 20 F0 0F 00 | 0x000FF020  | raw file offset of the [[OBD:TRAM/raw0x10|horizontal velocities]] of the character root }}
{{OBDtr| 0x018 | offset  |FFFFC8| 80 F4 0F 00 | 0x000FF480  | .raw-address of the [[OBD:TRAM/raw0x20|shortcut data]] }}
{{OBDtr| 0x018 | offset  |FFFFC8| 80 F4 0F 00 | 0x000FF480  | raw file offset of the [[OBD:TRAM/raw0x20|shortcut data]] }}
{{OBDtr| 0x01C | offset  |FFFFC8| A0 F4 0F 00 | 0x000FF4A0  | .raw-address of the [[OBD:TRAM/raw0x28|footstep data]] }}
{{OBDtr| 0x01C | offset  |FFFFC8| A0 F4 0F 00 | 0x000FF4A0  | raw file offset of the [[OBD:TRAM/raw0x28|footstep data]] }}
{{OBDtr| 0x020 | offset  |FFFFC8| C0 F4 0F 00 | 0x000FF4C0  | .raw-address of the [[OBD:TRAM/raw0x30|position data]] (for basic prediction) }}
{{OBDtr| 0x020 | offset  |FFFFC8| C0 F4 0F 00 | 0x000FF4C0  | raw file offset of the [[OBD:TRAM/raw0x30|position data]] (for basic prediction) }}
{{OBDtr| 0x024 | offset  |FFFFC8| 40 F7 0F 00 | 0x000FF740  | .raw-address of the [[OBD:TRAM/raw0x34|rotations]] (of all body parts) }}
{{OBDtr| 0x024 | offset  |FFFFC8| 40 F7 0F 00 | 0x000FF740  | raw file offset of the [[OBD:TRAM/raw0x34|rotations]] (of all body parts) }}
{{OBDtr| 0x028 | bitset32 |C8FFC8| 90 00 08 00 | attack, atomic, dontAim| flags (same as PC/Mac 0x03C) }}
{{OBDtr| 0x028 | bitset32 |C8FFC8| 90 00 08 00 | attack, atomic, dontAim | flags (same as PC/Mac 0x03C) }}
{{OBDtr| 0x02C | bitset32 |FFC8FF| 00 00 00 00 | 0          | used body parts; used mostly by aiming overlays (same as PC/Mac 0x048) }}
{{OBDtr| 0x02C | bitset32 |FFC8FF| 00 00 00 00 | 0          | used body parts; used mostly by aiming overlays (same as PC/Mac 0x048) }}
{{OBDtr| 0x030 | bitset32 |FFC8FF| 00 00 00 00 | 0          | replaced parts; used by non-aiming overlays (same as PC/Mac 0x04C) }}
{{OBDtr| 0x030 | bitset32 |FFC8FF| 00 00 00 00 | 0          | replaced parts; used by non-aiming overlays (same as PC/Mac 0x04C) }}
Line 337: Line 339:
{{OBDtr| 0x036 | int16    |FF00FF| 00 00      | 1          | unknown }}
{{OBDtr| 0x036 | int16    |FF00FF| 00 00      | 1          | unknown }}
{{OBDtr| 0x038 | int16    |EEDDFF| 06 00      | 6          | compression size }}
{{OBDtr| 0x038 | int16    |EEDDFF| 06 00      | 6          | compression size }}
{{OBDtr| 0x03A | int16    |EEDDFF| 16 00      | 22          | animation type (from anim_types.[[OBD:StNA|StNA]]) }}
{{OBDtr| 0x03A | int16    |EEDDFF| 16 00      | 22          | animation type (from [[XML:StNA|StNA]]) }}
{{OBDtr| 0x03C | int16    |C5FF8A| 16 00      | 22          | aiming type }}
{{OBDtr| 0x03C | int16    |C5FF8A| 16 00      | 22          | aiming type }}
{{OBDtr| 0x03E | int16    |C5FF8A| 00 00      | 0          | from state }}
{{OBDtr| 0x03E | int16    |C5FF8A| 00 00      | 0          | from state }}
{{OBDtr| 0x040 | int16    |C0C0C0| 07 00      | 7          | to state }}
{{OBDtr| 0x040 | int16    |C0C0C0| 07 00      | 7          | to state }}
{{OBDtr| 0x042 | int16    |FF0080| 50 00      | 80          | number of frames (frame rate hardcoded at 60 Hz) }}
{{OBDtr| 0x042 | int16    |FF0080| 50 00      | 80          | number of frames (animations are locked to 60 fps) }}
{{OBDtr| 0x044 | bitset16 |FFFFA6| 00 02      | 0x0200 <nowiki>=</nowiki> COM| variant (same as PC/Mac 0x170) }}
{{OBDtr| 0x044 | bitset16 |FFFFA6| 00 02      | 0x0200 <nowiki>=</nowiki> COM| variant (same as PC/Mac 0x170) }}
{{OBDtr| 0x046 | char[2]  |FFFFA6| AD DE      | dead        | "varient end"; ignored by the engine }}
{{OBDtr| 0x046 | char[2]  |FFFFA6| AD DE      | dead        | "varient end"; ignored by the engine }}
Line 349: Line 351:
{{OBDtr| 0x04D | uint8    |FFAA82| 01          | 1          | number of elements in the shortcut part }}
{{OBDtr| 0x04D | uint8    |FFAA82| 01          | 1          | number of elements in the shortcut part }}
{{OBDtr| 0x04E | uint8    |00D900| 02          | 2          | number of elements in the footstep part }}
{{OBDtr| 0x04E | uint8    |00D900| 02          | 2          | number of elements in the footstep part }}
{{OBDtr| 0x04F | uint8    |C0C0C0| 13          | 19          | number of bodyparts? }}
{{OBDtr| 0x04F | uint8    |C0C0C0| 13          | 19          | number of body parts? }}
{{OBDtr| 0x050 | char[16] |CACAFF| AD DE      | dead        | unused (not part of the template) }}
{{OBDtr| 0x050 | char[16] |CACAFF| AD DE      | dead        | unused (not part of the template) }}
|}
|}
Line 364: Line 366:
|00|00|00|00|FF|FF|FF|FF|C3|C3|C3|C3|C3|C3|C3|C3|
|00|00|00|00|FF|FF|FF|FF|C3|C3|C3|C3|C3|C3|C3|C3|
|00|00|00|00|00|00|00|00|D4|D4|D4|D4|D4|D4|D4|D4|
|00|00|00|00|00|00|00|00|D4|D4|D4|D4|D4|D4|D4|D4|
|°E°°°°°° ÏAÞé°@
|ºEºººººº ÏAÞéº@
}}
}}
{{HexRow|0x010|
{{HexRow|0x010|
Line 378: Line 380:
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
ÏA°°°°°°°°°°°°
ÏAºººººººººººº
}}
}}
{{HexRow|0x030|
{{HexRow|0x030|
Line 385: Line 387:
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x040|
{{HexRow|0x040|
Line 392: Line 394:
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x050|
{{HexRow|0x050|
Line 399: Line 401:
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x0060|
{{HexRow|0x0060|
Line 406: Line 408:
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x070|
{{HexRow|0x070|
Line 413: Line 415:
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x080|
{{HexRow|0x080|
Line 420: Line 422:
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x090|
{{HexRow|0x090|
Line 427: Line 429:
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|C3|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|D4|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x0A0|
{{HexRow|0x0A0|
Line 434: Line 436:
|C3|C3|C3|C3|CE|CE|DD|DD|AA|AA|AA|AA|AA|AA|AA|AA|
|C3|C3|C3|C3|CE|CE|DD|DD|AA|AA|AA|AA|AA|AA|AA|AA|
|D4|D4|D4|D4|A5|A5|DD|DD|AA|AA|AA|AA|AA|AA|AA|AA|
|D4|D4|D4|D4|A5|A5|DD|DD|AA|AA|AA|AA|AA|AA|AA|AA|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x0B0|
{{HexRow|0x0B0|
Line 441: Line 443:
|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|
|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|
|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|
|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|AA|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x0C0|
{{HexRow|0x0C0|
Line 448: Line 450:
|AA|AA|AA|AA|EB|EB|8C|00|F0|F0|F0|F0|F0|F0|F0|F0|
|AA|AA|AA|AA|EB|EB|8C|00|F0|F0|F0|F0|F0|F0|F0|F0|
|AA|AA|AA|AA|EB|EB|CC|C8|96|96|96|96|96|96|96|96|
|AA|AA|AA|AA|EB|EB|CC|C8|96|96|96|96|96|96|96|96|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x0D0|
{{HexRow|0x0D0|
Line 455: Line 457:
|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|
|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|F0|
|96|96|96|96|96|96|96|96|96|96|96|96|96|96|96|96|
|96|96|96|96|96|96|96|96|96|96|96|96|96|96|96|96|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x0E0|
{{HexRow|0x0E0|
Line 462: Line 464:
|F0|F0|F0|F0|C8|C8|C8|C8|C8|C8|C8|C8|00|00|00|00|
|F0|F0|F0|F0|C8|C8|C8|C8|C8|C8|C8|C8|00|00|00|00|
|96|96|96|96|64|64|64|64|FF|FF|FF|FF|40|40|40|40|
|96|96|96|96|64|64|64|64|FF|FF|FF|FF|40|40|40|40|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x0F0|
{{HexRow|0x0F0|
Line 469: Line 471:
|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|
|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|FF|
|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|
|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|C8|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x100|
{{HexRow|0x100|
Line 476: Line 478:
|FF|FF|FF|FF|FF|FF|FF|FF|CD|CD|CD|CD|CD|CD|CD|CD|
|FF|FF|FF|FF|FF|FF|FF|FF|CD|CD|CD|CD|CD|CD|CD|CD|
|C8|C8|C8|C8|C8|C8|C8|C8|96|96|96|96|96|96|96|96|
|C8|C8|C8|C8|C8|C8|C8|C8|96|96|96|96|96|96|96|96|
|°°°°°°°°konflash
|ººººººººkonflash
}}
}}
{{HexRow|0x110|
{{HexRow|0x110|
Line 483: Line 485:
|CD|CD|CD|CD|CD|CD|CD|CD|FF|FF|FF|FF|FF|FF|FF|FF|
|CD|CD|CD|CD|CD|CD|CD|CD|FF|FF|FF|FF|FF|FF|FF|FF|
|96|96|96|96|96|96|96|96|FF|FF|FF|FF|FF|FF|FF|FF|
|96|96|96|96|96|96|96|96|FF|FF|FF|FF|FF|FF|FF|FF|
|1°°°°°°°°°°°°°°°
|1ººººººººººººººº
}}
}}
{{HexRow|0x120|
{{HexRow|0x120|
Line 490: Line 492:
|C8|C8|C8|C8|96|96|96|96|80|80|80|80|C8|C8|C8|C8|
|C8|C8|C8|C8|96|96|96|96|80|80|80|80|C8|C8|C8|C8|
|00|00|00|00|C8|C8|C8|C8|C0|C0|C0|C0|64|64|64|64|
|00|00|00|00|C8|C8|C8|C8|C0|C0|C0|C0|64|64|64|64|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
{{HexRow|0x130|
{{HexRow|0x130|
Line 497: Line 499:
|40|40|40|40|7C|7C|80|80|AA|D9|22|22|CA|CA|CA|CA|
|40|40|40|40|7C|7C|80|80|AA|D9|22|22|CA|CA|CA|CA|
|40|40|40|40|64|64|80|80|82|00|FF|FF|FF|FF|FF|FF|
|40|40|40|40|64|64|80|80|82|00|FF|FF|FF|FF|FF|FF|
|°°°°°°°°°°°°°°°°
|ºººººººººººººººº
}}
}}
|}
|}
Line 538: Line 540:
{{OBDtr| 0x0E4 | int32    |00C864| 00 00 00 00 | 0          | alternative move direction; used only when the previous move direction field is 0, that means never }}
{{OBDtr| 0x0E4 | int32    |00C864| 00 00 00 00 | 0          | alternative move direction; used only when the previous move direction field is 0, that means never }}
{{OBDtr| 0x0E8 | int32    |00C8FF| 18 00 00 00 | 24          | number of elements in the extent part }}
{{OBDtr| 0x0E8 | int32    |00C8FF| 18 00 00 00 | 24          | number of elements in the extent part }}
{{OBDtr| 0x0EC | offset  |C80040| 60 F3 0F 00 | 0x000FF360  | .raw-address of the [[OBD:TRAM/raw0x13C|extent part]] }}
{{OBDtr| 0x0EC | offset  |C80040| 60 F3 0F 00 | 0x000FF360  | raw file offset of the [[OBD:TRAM/raw0x13C|extent part]] }}
{{OBDtrBK|End extent info}}
{{OBDtrBK|End extent info}}
{{OBDtr| 0x0F0 | offset  |FFFFC8| E0 F2 0F 00 | 0x000FF2E0  | .raw-address of the [[OBD:TRAM/raw0x1C|motion blur part]] }}
{{OBDtr| 0x0F0 | offset  |FFFFC8| E0 F2 0F 00 | 0x000FF2E0  | raw file offset of the [[OBD:TRAM/raw0x1C|motion blur part]] }}
{{OBDtr| 0x0F4 | offset  |FFFFC8| 00 00 00 00 | unused      | .raw-address of the [[OBD:TRAM/raw0x24|throw data]] }}
{{OBDtr| 0x0F4 | offset  |FFFFC8| 00 00 00 00 | unused      | raw file offset of the [[OBD:TRAM/raw0x24|throw data]] }}
{{OBDtr| 0x0F8 | offset  |FFFFC8| A0 F2 0F 00 | 0x000FF2A0  | .raw-address of the [[OBD:TRAM/raw0x14|attack part]] }}
{{OBDtr| 0x0F8 | offset  |FFFFC8| A0 F2 0F 00 | 0x000FF2A0  | raw file offset of the [[OBD:TRAM/raw0x14|attack part]] }}
{{OBDtr| 0x0FC | offset  |FFFFC8| 00 00 00 00 | unused      | .raw-address of the [[OBD:TRAM/raw0x18|damage part]] (used only by "_tgt" animations (throw targets/victims) }}
{{OBDtr| 0x0FC | offset  |FFFFC8| 00 00 00 00 | unused      | raw file offset of the [[OBD:TRAM/raw0x18|damage part]] (used only by "_tgt" animations (throw targets/victims) }}
{{OBDtr| 0x100 | offset  |FFFFC8| 00 F3 0F 00 | 0x000F0F00  | .raw-address of the [[OBD:TRAM/raw0x2C|particle data]] (trails, dust, etc.) }}
{{OBDtr| 0x100 | offset  |FFFFC8| 00 F3 0F 00 | 0x000F0F00  | raw file offset of the [[OBD:TRAM/raw0x2C|particle data]] (trails, dust, etc.) }}
{{OBDtr| 0x104 | offset  |FFFFC8| 00 00 00 00 | unused      | .raw-address of the [[OBD:TRAM/raw0x38|sound data]] }}
{{OBDtr| 0x104 | offset  |FFFFC8| 00 00 00 00 | unused      | raw file offset of the [[OBD:TRAM/raw0x38|sound data]] }}
{{OBDtr2|0x108 | char[16] |FFCD96| konflash1                | impact particle name (reference to 01018-.[[OBD:ONIA|ONIA]], which is called up in the [[OBD:ONCC|ONCC]] file) }}
{{OBDtr2|0x108 | char[16] |FFCD96| konflash1                | impact particle name (reference to 01018-.[[OBD:ONIA|ONIA]], which is called up in the [[OBD:ONCC|ONCC]] file) }}
{{OBDtr| 0x118 | link    |C8FFFF| 00 00 00 00 | unused      | direct animation 0 (link to a TRAM file) }}
{{OBDtr| 0x118 | link    |C8FFFF| 00 00 00 00 | unused      | direct animation 0 (link to a TRAM file) }}