OBD:TRAM: Difference between revisions

2,245 bytes added ,  27 October 2023
m
wording, formatting, added some section links
(→‎PS2 implementation: notes about what's left to document)
m (wording, formatting, added some section links)
 
(6 intermediate revisions by 3 users not shown)
Line 2: Line 2:




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




Line 23: Line 23:
{{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-address 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 - private1 (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)
:0x'''02''' 00 00 00 - invulnerable
:0x'''02''' 00 00 00 - invulnerable
:0x'''04''' 00 00 00 - blockHigh
:0x'''04''' 00 00 00 - blockHigh
Line 29: Line 29:
:0x'''10''' 00 00 00 - attack
:0x'''10''' 00 00 00 - attack
:0x'''20''' 00 00 00 - dropWeapon
:0x'''20''' 00 00 00 - dropWeapon
:0x'''40''' 00 00 00 - inAir
:0x'''40''' 00 00 00 - inAir (unused)
:0x'''80''' 00 00 00 - atomic
:0x'''80''' 00 00 00 - atomic
:0x00 '''01''' 00 00 - noTurn
:0x00 '''01''' 00 00 - noTurn
Line 46: Line 46:
:0x00 00 '''20''' 00 - aim360
:0x00 00 '''20''' 00 - aim360
:0x00 00 '''40''' 00 - disableShield
:0x00 00 '''40''' 00 - disableShield
:0x00 00 '''80''' 00 - noAIPickup
:0x00 00 '''80''' 00 - noAIPickup
 
;invulnerable
This animation makes the character impervious to melee damage and throws. He can still take damage from particles and falls.
 
;blockHigh, blockLow
An animation with one of these flags can block attacks coming from the front if they have the high/low attack bit on in [[OBD:TRAM/raw0x14|0x14]].
 
;attack, throwSource, throwTarget, realWorld as proxy flags
These flags were looked at by Importer, Bungie West's authoring tool, which assigned the dontAim flag to an animation if any of them were found. Additionally, Importer used throwSource and throwTarget as indicators that an animation should be flagged as noTurn, but Oni itself also refuses to allow turning when it sees these flags. Within Oni, the attack flag has no effect.
 
;throwSource, throwTarget
Besides serving as proxies, throwSource and throwTarget are used in numerous places in the code to handle throws properly, so they should always be assigned appropriately to throw anims. throwTarget in particular allows your teammates to be hurt by an enemy you throw.
 
;realWorld
This flag only served a purpose when the animation was imported from 3ds Max. Animations without this flag had their extents prepared by Importer. Has no effect within Oni except signifying a lack of attack extents data for visual debugging purposes.
 
;atomic
Has no effect within Oni. When seen by Importer during authoring, however, it set the entire animation to atomic by maxing out the range of the atomic start and end frames (0x174, 0x176).
 
;noTurn
This refers to the user's ability to turn with the controls.
 
;attackForward, attackLeft, attackRight, attackBackward
Have no effect within Oni. Used by Importer to set the movement direction at 0x54.
 
;doAim
Applies aiming screen (PIS/RIF) if character has a weapon.
 
;dontAim
Prevents aiming screen from being applied.
 
;aim360
No effect in Oni. Was used by Importer as a cue to mark the attack's direction (0x54) as 360° (but only Forward, Backward, Left and Right seem to be used in the game data).
 
;disableShield
Used on certain Mutant Muro attacks to temporarily remove his supershield (the anims are listed on [[XML:TRAM]] under its DisableShield documentation).
}}
}}
{{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 70: 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 80: Line 116:
:3 - left
:3 - left
:4 - right
:4 - right
: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 93: 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 137: 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 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 162: 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 211: 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 231: 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 294: Line 333:
{{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-address 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-address 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 300: 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 312: 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 320: Line 359:
The TREX file has all the combat-relevant stuff as well as some stuff that isn't necessary combat-related (e.g., vocalizations, turning angle, moving direction).
The TREX file has all the combat-relevant stuff as well as some stuff that isn't necessary combat-related (e.g., vocalizations, turning angle, moving direction).


The block between 0x008 and 0x0F0 is exactly the extent block between 0x058 and 0x140 in the PC/Mac TRAM. After that come the other 6 .raw links that were stripped from the reduced TRAM, the impact particle name, and the two direct TRAM links, which accounts for all the data up to 0x150 in the PC/TRAM. Some data fields from the end of PC/Mac TRAM are confirmed to be missing on PS2 (e.g., the frame rate is implied to be 60 Hz), but some of the correspondence is still not documented or thoroughly confirmed.
The block between 0x008 and 0x0F0 is exactly the extent block between 0x058 and 0x140 in the PC/Mac TRAM. After that come the other 6 .raw links that were stripped from the reduced TRAM, the impact particle name, and the two direct TRAM links, which accounts for all the data up to 0x150 in the PC/Mac TRAM. Some data fields from the end of PC/Mac TRAM are confirmed to be missing on PS2 (e.g., the frame rate is implied to be 60 Hz), but some of the correspondence is still not documented or thoroughly confirmed.
{|cellpadding=3 cellspacing=0 style="line-height:13px"
{|cellpadding=3 cellspacing=0 style="line-height:13px"
{{HexRow|0x000|
{{HexRow|0x000|
Line 327: 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 341: 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 348: 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 355: 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 362: 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 369: 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 376: 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 383: 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 390: 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 397: 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 404: 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 411: 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 418: 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 425: 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 432: 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 439: 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 446: 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 453: 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 460: 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 467: Line 506:
{{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 | 1532        | 01865-KONCOMpunch_heavy.TREX }}
{{OBDtr| 0x004 | lev_id  |FFFF00| 01 00 00 00 | 0          | level 0 }}
{{OBDtr| 0x004 | lev_id  |FFFF00| 01 00 00 00 | 0          | level 0 }}
{{OBDtrBK|Extent info}}
{{OBDtrBK|Extent info}}
Line 501: 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| E0 BB 80 00 | 00 80 BB E0 | at this position starts the [[OBD:TRAM/raw0x13C|extent part]] in the raw file }}
{{OBDtr| 0x0EC | offset  |C80040| 60 F3 0F 00 | 0x000FF360  | .raw-address of the [[OBD:TRAM/raw0x13C|extent part]] }}
{{OBDtrBK|End extent info}}
{{OBDtrBK|End extent info}}
{{OBDtr| 0x0F0 | offset  |FFFFC8| 60 B8 80 00 | 0x0080B860 | .raw-address of the [[OBD:TRAM/raw0x14|attack part]] }}
{{OBDtr| 0x0F0 | offset  |FFFFC8| E0 F2 0F 00 | 0x000FF2E0 | .raw-address of the [[OBD:TRAM/raw0x1C|motion blur part]] }}
{{OBDtr| 0x0F4 | 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| 0x0F4 | offset  |FFFFC8| 00 00 00 00 | unused      | .raw-address of the [[OBD:TRAM/raw0x24|throw data]] }}
{{OBDtr| 0x0F8 | offset  |FFFFC8| A0 B8 80 00 | 0x0080B8A0 | .raw-address of the [[OBD:TRAM/raw0x1C|motion blur part]] }}
{{OBDtr| 0x0F8 | offset  |FFFFC8| A0 F2 0F 00 | 0x000FF2A0 | .raw-address of the [[OBD:TRAM/raw0x14|attack part]] }}
{{OBDtr| 0x0FC | offset  |FFFFC8| 00 00 00 00 | unused      | .raw-address of the [[OBD:TRAM/raw0x24|throw data]] }}
{{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| 0x100 | offset  |FFFFC8| 00 B9 80 00 | 0x0080B900 | .raw-address of the [[OBD:TRAM/raw0x2C|particle data]] (trails, dust, etc.) }}
{{OBDtr| 0x100 | offset  |FFFFC8| 00 F3 0F 00 | 0x000F0F00 | .raw-address 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-address 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) }}