EvilEngine/PLAT: Difference between revisions

From Heavy Iron Modding
Content added Content deleted
Battlepedia>TetraxZ
mNo edit summary
No edit summary
 
(11 intermediate revisions by 5 users not shown)
Line 1: Line 1:
<onlyinclude>
{{AssetInfobox
{{#vardefine:typeid|PLAT}}<nowiki/>
|subtitle=Platform
{{#vardefine:name|Platform}}<nowiki/>
|type=[[Placeable]]
{{#vardefine:type|[[Entity]]}}<nowiki/>
|objectid=0x06
{{#vardefine:basetype|0x06}}<nowiki/>
|games=Night of 100 Frights<br>Battle for Bikini Bottom<br>The SpongeBob SquarePants Movie<br>The Incredibles<br>Rise of the Underminer}}
{{#vardefine:games|Scooby BFBB TSSM Incredibles ROTU RatProto}}<nowiki/>
{{#vardefine:sourcecode|[https://github.com/bfbbdecomp/bfbb/blob/master/src/Game/zPlatform.h zPlatform.h]}}<nowiki/>
{{#vardefine:image|}}<nowiki/>
</onlyinclude>
{{AutoAssetInfobox}}

This asset defines an entry for a moving object.

==Format: Night of 100 Frights==
PLAT are [[EvilEngine/Assets#Entity Assets|entity assets]], so they start with their 0x50 byte header, then are followed by:
{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x50 || byte || '''type''' || This is always the same as the [[#Types (0x09)|Type at 0x09]] for every type except Platform, which can be one of the following subtypes:
* 0 - Extend/Retract
* 1 - Orbit
* 2 - Spline
* 3 - Move Point
|-
| 0x51 || byte || '''pad''' || ''null'' (Padding)
|-
| 0x52 || ushort || '''flags''' ||
|-
! colspan="4" | Extend/Retract only
|-
| 0x54 || int || '''nodata''' || ''null''
|-
| 0x58 || byte[0x20] || - || ''null'' (Padding)
|-
! colspan="4" | Orbit only
|-
| 0x54 || int || '''nodata''' || ''null''
|-
| 0x58 || byte[0x20] || - || ''null'' (Padding)
|-
! colspan="4" | Spline only
|-
| 0x54 || int || '''nodata''' || ''null''
|-
| 0x58 || byte[0x20] || - || ''null'' (Padding)
|-
! colspan="4" | Move Point only
|-
| 0x54 || int || '''nodata''' || ''null''
|-
| 0x58 || byte[0x20] || - || ''null'' (Padding)
|-
! colspan="4" | Mechanism only
|-
| 0x54 || int || '''nodata''' || ''null''
|-
| 0x58 || byte[0x20] || - || ''null'' (Padding)
|-
! colspan="4" | Pendulum only
|-
| 0x54 || int || '''nodata''' || ''null''
|-
| 0x58 || byte[0x20] || - || ''null'' (Padding)
|-
! colspan="4" | Conveyor Belt only
|-
| 0x54 || float || '''speed''' ||
|-
| 0x58 || byte[0x20] || - || ''null'' (Padding)
|-
! colspan="4" | Falling Platform only
|-
| 0x54 || float || '''speed''' ||
|-
| 0x58 || [[AssetID]] || '''bustModelID''' ||
|-
| 0x5C || byte[0x1C] || - || ''null'' (Padding)
|-
! colspan="4" | FR only
|-
| 0x54 || float || '''fspeed''' ||
|-
| 0x58 || float || '''rspeed''' ||
|-
| 0x5C || float || '''ret_delay''' ||
|-
| 0x60 || float || '''post_ret_delay''' ||
|-
| 0x64 || byte[0x14] || - || ''null'' (Padding)
|-
! colspan="4" | Breakaway Platform only
|-
| 0x54 || float || '''ba_delay''' ||
|-
| 0x58 || [[AssetID]] || '''bustModelID''' ||
|-
| 0x5C || float || '''reset_delay''' ||
|-
| 0x60 || byte[0x18] || - || ''null'' (Padding)
|-
! colspan="4" | Springboard only
|-
| 0x54 || float[3] || '''jmph''' ||
|-
| 0x60 || [[AssetID]][3] || '''animID''' ||
|-
| 0x6C || [[Vector3]] || '''jmpdir''' ||
|-
! colspan="4" | Teeter-Totter only
|-
| 0x54 || float || '''itilt''' ||
|-
| 0x58 || float || '''maxtilt''' ||
|-
| 0x5C || float || '''invmass''' ||
|-
| 0x60 || byte[0x18] || - || ''null'' (Padding)
|-
! colspan="4" |
|-
| 0x78 || [[Motion]] || - ||
|-
! colspan="4" | Events
|-
| 0xA8 || Events[numberOfEvents] || [[EvilEngine/Events|'''Events''']] ||
|}


This asset usually defines an entry for a moving object.


==Format: Battle For Bikini Bottom==
==Format: Battle For Bikini Bottom==
PLAT are [[Placeable Asset|placeable assets]], so they start with their 0x54 byte header, then are followed by:
PLAT are [[EvilEngine/Assets#Entity Assets|entity assets]], so they start with their 0x54 byte header, then are followed by:


{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x54 || byte || '''Subtype''' - This is always the same as the [[#Types (0x09)|Type at 0x09]] for every type except Platform, which can be one of the following subtypes:
| 0x54 || byte || '''type''' || This is always the same as the [[#Types (0x09)|Type at 0x09]] for every type except Platform, which can be one of the following subtypes:
* 0 - Extend/Retract
* 0 - Extend/Retract
* 1 - Orbit
* 1 - Orbit
* 2 - Spline
* 3 - Move Point
* 3 - Move Point
* 13 - Fully Manipulable
* 13 - Fully Manipulable
|-
|-
| 0x55 || byte || Unknown - always 0
| 0x55 || byte || '''pad''' || Padding (always 0)
|-
|-
| 0x56 || short || '''Collision type'''
| 0x56 || ushort || '''flags''' ||
*1 - Shake - Shakes when player mounts/dismounts
*0, 1, 2, 3, 8, 9 - Nonsolid
*4, 6 - Normal collision
*4 - Solid
*5, 7 - Bouncy collision
|-
|-
! colspan="3" | Platform only
! colspan="4" | Extend/Retract only
|-
|-
| 0x58 || int || null
| 0x58 || int || '''nodata''' || ''null''
|-
|-
| 0x5C || int || null
| 0x5C || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Orbit only
| 0x60 || int || null
|-
|-
| 0x64 || int || null
| 0x58 || int || '''nodata''' || ''null''
|-
|-
| 0x5C || byte[0x34] || - || ''null'' (Padding)
! colspan="3" | Mechanism only
|-
|-
! colspan="4" | Spline only
| 0x58 || int || null
|-
|-
| 0x5C || int || null
| 0x58 || int || '''nodata''' || ''null''
|-
|-
| 0x60 || int || null
| 0x5C || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Move Point only
| 0x64 || int || null
|-
|-
| 0x58 || int || '''nodata''' ||
! colspan="3" | Conveyor Belt only
|-
|-
| 0x58 || float || '''Speed'''
| 0x5C || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Mechanism only
| 0x5C || int || null
|-
|-
| 0x60 || int || null
| 0x58 || int || '''nodata''' || ''null''
|-
|-
| 0x64 || int || null
| 0x5C || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="3" | Breakaway Platform only
! colspan="4" | Pendulum only
|-
|-
| 0x58 || float || '''Break Delay''' - Time in seconds to fall down after player stands on it
| 0x58 || int || '''nodata''' || ''null''
|-
|-
| 0x5C || int || '''Unknown''' - Always 0 or 0xCE7F8131 (hash of "--Choose One--")
| 0x5C || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Conveyor Belt only
| 0x60 || float || '''Reset Delay''' - Time in seconds after falling down to reset back to normal position
|-
|-
| 0x58 || float || '''speed''' || The player slides along the platform's X axis at this speed (in units per second) when standing on top of it
| 0x64 || int || '''Unknown''' - Always 0 or 1
|-
|-
| 0x5C || byte[0x34] || - || ''null'' (Padding)
! colspan="3" | Springboard only
|-
|-
! colspan="4" | Falling Platform only
| 0x58 || float || '''Bounce Height 1''' - there are 3 of these, the reason is unknown since they all seem to do the same thing and the game picks the highest one of the 3
|-
|-
| 0x5C || float || '''Bounce Height 2'''
| 0x58 || float || '''speed''' ||
|-
|-
| 0x60 || float || '''Bounce Height 3'''
| 0x5C || [[AssetID]] || '''bustModelID''' || [[EvilEngine/MODL|Model]] ID
|-
|-
| 0x64 || float || '''Slam Height''' - SpongeBob only
| 0x60 || byte[0x30] || - || ''null'' (Padding)
|-
|-
! colspan="3" | Teeter-Totter only
! colspan="4" | FR only
|-
|-
| 0x58 || float || '''Unknown''' - in radians
| 0x58 || float || '''fspeed''' ||
|-
|-
| 0x5C || float || '''Max Tilt Angle''' - in radians
| 0x5C || float || '''rspeed''' ||
|-
|-
| 0x60 || float || '''Tilt Speed'''
| 0x60 || float || '''ret_delay''' ||
|-
|-
| 0x64 || int || null
| 0x64 || float || '''post_ret_delay''' ||
|-
|-
| 0x68 || byte[0x28] || - || ''null'' (Padding)
! colspan="3" | Paddle only
|-
|-
! colspan="4" | Breakaway Platform only
| 0x58 || float || '''Current Spin Index''' - Which spin position to start at. Zero-indexed. Range is 0 ... Number of Spins - 1.
|-
|-
| 0x5C || float || '''Number of Spins''' - Total number of spins in the paddle's range.
| 0x58 || float || '''ba_delay''' || Time in seconds to fall down after player stands on it
|-
|-
| 0x5C || [[AssetID]] || '''bustModelID''' || [[EvilEngine/MODL|Model]] ID - Always 0 or 0xCE7F8131 (hash of "--Choose One--")
| 0x60 || float || '''Unknown''' - in degrees?
|-
|-
| 0x60 || float || '''reset_delay''' || Time in seconds after falling down to reset back to normal position
| 0x64 || int || null
|-
|-
| 0x64 || uint || '''breakflags''' ||
! colspan="3" |
* 1 - Allow Sneak - Won't break if player is sneaking
|-
|-
| 0x68 || [[Asset ID]] || [[ANIM]]
| 0x68 || byte[0x28] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Springboard only
| 0x6C || [[Asset ID]] || [[ANIM]]
|-
|-
| 0x58 || float[3] || '''jmph''' || Jump height array, unknown why it's an array. The game seems to pick the highest of the 3 heights in this array
| 0x70 || float || Unknown
|-
|-
| 0x64 || float || '''jmpbounce''' || Bounce height when using the Bubble Bounce (SpongeBob only)
| 0x74 || float || Launch Direction X
|-
|-
| 0x68 || [[AssetID]][3] || '''animID''' || Bounce animations?
| 0x78 || float || Launch Direction Y
|-
|-
| 0x74 || [[Vector3]] || '''jmpdir''' || Bounce direction (unit vector)
| 0x7C || float || Launch Direction Z
|-
|-
| 0x80 || int || Movement lock mode
| 0x80 || uint || '''springflags''' ||
*1 - Lock view (look down)
*2 - ?
*4 - Lock movement (doesn't let you move)
|-
|-
| 0x84 || float || Unknown
| 0x84 || byte[0xC] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Teeter-Totter only
| 0x88 || float || Unknown
|-
|-
| 0x8C || float || Unknown
| 0x58 || float || '''itilt''' || Initial tilt, in radians
|-
|-
| 0x90 || byte[4] || Unknown
| 0x5C || float || '''maxtilt''' || In radians
|-
|-
| 0x60 || float || '''invmass''' || Determines tilt speed
| 0x94 || byte || Movement Mode:
*0 - Move only
*1 - Rotate only
*2 - Move and rotate at the same time
*3 - Move, then rotate, then wait
*4 - Move, then wait, then rotate
*5 - Faster rotate only
To do: investigate more values
|-
|-
| 0x95 || byte || Movement Loop Type:
| 0x64 || byte[0x2C] || - || ''null'' (Padding)
*0 - Single direction (never return)
*1 - Move back and forth
*2 - Move on event
*3 - Move on event
To do: investigate more values and difference between 2 and 3
|-
|-
! colspan="4" | Paddle only
| 0x96 || byte || Movement Translation Direction:
*0 - X
*1 - Y
*2 - Z
*3 - Z?
To do: investigate more values and see how some PLATs move in more than one direction
|-
|-
| 0x58 || int || '''startOrient''' || Array index of Orients to start at (zero-indexed). Range is 0 ... Orient Count - 1.
| 0x97 || byte || Movement Rotation Axis:
*0 - X
*1 - Y
*2 - Z
*3 - Z?
To do: investigate more values and see how some PLATs rotate in more than one direction
|-
|-
| 0x5C || int || '''countOrient''' || Number of rotations the paddle can be in (up to 6).
| 0x98 || [[Asset ID]] || [[MVPT]]
|-
|-
| 0x98 || float || Movement Translation Distance (shared offset with previous field)
| 0x60 || float || '''orientLoop''' || Max rotation? (In degrees)
|-
|-
| 0x64 || float[6] || '''orient''' || Array of yaw rotations (in degrees) for the paddle (up to 6).
| 0x9C || float || Movement Translation Time
|-
|-
| 0x7C || uint || '''paddleFlags''' ||
| 0xA0 || float || Movement Translation Ease In Start
|-
|-
| 0xA4 || float || Movement Translation Ease In End
| 0x80 || float || '''rotateSpeed''' ||
|-
|-
| 0xA8 || float || Movement Rotation Degrees
| 0x84 || float || '''accelTime''' ||
|-
|-
| 0xAC || float || Movement Rotation Time
| 0x88 || float || '''decelTime''' ||
|-
|-
| 0xB0 || float || Movement Rotation Ease In Start
| 0x8C || float || '''hubRadius''' || collision radius?
|-
|-
! colspan="4" | Fully Manipulable only
| 0xB4 || float || Movement Rotation Ease In End
|-
|-
| 0xB8 || float || Movement End Wait Time
| 0x58 || int || '''nothingyet''' || ''null''
|-
|-
| 0xBC || float || Movement Start Wait Time
| 0x5C || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="3" | Events
! colspan="4" |
|-
|-
| 0xC0 || Event[numberOfEvents] || '''[[Events]]'''
| 0x90 || [[Motion]] || - ||
|-
! colspan="4" | Events
|-
| 0xC0 || Event[numberOfEvents] || [[EvilEngine/Events|'''Events''']] ||
|}
|}


==Format: The Spongebob Squarepants Movie==
==Format: The Spongebob Squarepants Movie==
PLAT are [[Placeable Asset|placeable assets]], so they start with their 0x50 byte header, then are followed by:
PLAT are [[EvilEngine/Assets#Entity Assets|entity assets]], so they start with their 0x50 byte header, then are followed by:


{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x50 || byte || '''Subtype''' - This is always the same as the [[#Types (0x09)|Type at 0x09]] for every type except Platform, which can be one of the following subtypes:
| 0x50 || byte || '''type''' || This is always the same as the [[#Types (0x09)|Type at 0x09]] for every type except Platform, which can be one of the following subtypes:
* 0 - Extend/Retract
* 0 - Extend/Retract
* 1 - Orbit
* 1 - Orbit
* 2 - Spline
* 3 - Move Point
* 3 - Move Point
* 13 - Fully Manipulable
* 13 - Fully Manipulable
|-
|-
| 0x51 || byte || Unknown - always 0
| 0x51 || byte || '''pad''' || ''null'' (Padding)
|-
|-
| 0x52 || short || '''Collision type''' - 0, 1, 4, or 5
| 0x52 || short || '''flags''' || Collision type
*0, 1, 2, 3, 8, 9 - Nonsolid
*4, 6 - Normal collision
*5, 7 - Bouncy collision
|-
|-
! colspan="3" | Platform only
! colspan="4" | Extend/Retract only
|-
|-
| 0x54 || int || null
| 0x54 || int || '''nodata''' ||
|-
|-
| 0x58 || int || null
| 0x58 || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Orbit only
| 0x5C || int || null
|-
|-
| 0x60 || int || null
| 0x54 || int || '''nodata''' ||
|-
|-
| 0x58 || byte[0x34] || - || ''null'' (Padding)
! colspan="3" | Mechanism only
|-
|-
! colspan="4" | Spline only
| 0x54 || int || null
|-
|-
| 0x58 || int || null
| 0x54 || int || '''nodata''' ||
|-
|-
| 0x5C || int || null
| 0x58 || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Move Point only
| 0x60 || int || null
|-
|-
| 0x54 || int || '''nodata''' ||
! colspan="3" | Conveyor Belt only
|-
|-
| 0x54 || float || '''Speed'''
| 0x58 || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Mechanism only
| 0x58 || int || null
|-
|-
| 0x5C || int || null
| 0x54 || int || '''nodata''' ||
|-
|-
| 0x60 || int || null
| 0x58 || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="3" | Breakaway Platform only
! colspan="4" | Pendulum only
|-
|-
| 0x54 || float || '''Break Delay''' - Time in seconds to fall down after player stands on it
| 0x54 || int || '''nodata''' ||
|-
|-
| 0x58 || int || '''Unknown''' - Always 0 or 0xCE7F8131 (hash of "--Choose One--")
| 0x58 || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Conveyor Belt only
| 0x5C || float || '''Reset Delay''' - Time in seconds after falling down to reset back to normal position
|-
|-
| 0x60 || int || '''Unknown''' - Always 0 or 1
| 0x54 || float || '''speed''' ||
|-
|-
| 0x58 || byte[0x34] || - || ''null'' (Padding)
! colspan="3" | Springboard only
|-
|-
! colspan="4" | Falling Platform only
| 0x54 || float || '''Bounce Height 1''' - there are 3 of these, the reason is unknown since they all seem to do the same thing and the game picks the highest one of the 3
|-
|-
| 0x58 || float || '''Bounce Height 2'''
| 0x54 || float || '''speed''' ||
|-
|-
| 0x5C || float || '''Bounce Height 3'''
| 0x58 || [[AssetID]] || '''bustModelID''' ||
|-
|-
| 0x60 || float || '''Slam Height''' - SpongeBob only
| 0x5C || byte[0x30] || - || ''null'' (Padding)
|-
|-
! colspan="3" | Teeter-Totter only
! colspan="4" | FR only
|-
|-
| 0x54 || float || '''Unknown''' - in radians
| 0x54 || float || '''fspeed''' ||
|-
|-
| 0x58 || float || '''Max Tilt Angle''' - in radians
| 0x58 || float || '''rspeed''' ||
|-
|-
| 0x5C || float || '''Tilt Speed'''
| 0x5C || float || '''ret_delay''' ||
|-
|-
| 0x60 || int || null
| 0x60 || float || '''post_ret_delay''' ||
|-
|-
| 0x64 || byte[0x28] || - || ''null'' (Padding)
! colspan="3" | Paddle only
|-
|-
! colspan="4" | Breakaway Platform only
| 0x54 || float || '''Current Spin Index''' - Which spin position to start at. Zero-indexed. Range is 0 ... Number of Spins - 1.
|-
|-
| 0x58 || float || '''Number of Spins''' - Total number of spins in the paddle's range.
| 0x54 || float || '''warningTime''' || Time in seconds to fall down after player stands on it
|-
|-
| 0x5C || float || '''Unknown''' - in degrees?
| 0x58 || float || '''collapseIdleTime''' || Time in seconds after falling down to reset back to normal position
|-
|-
| 0x60 || int || null
| 0x5C || uint || '''breakflags''' ||
|-
|-
| 0x60 || float || '''collisionOffTime''' ||
! colspan="3" |
|-
|-
| 0x64 || [[Asset ID]] || [[ANIM]]
| 0x64 || byte[0x28] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Springboard only
| 0x68 || [[Asset ID]] || [[ANIM]]
|-
|-
| 0x54 || float[3] || '''jmph''' || Jump height array, unknown why it's an array. The game seems to pick the highest of the 3 heights in this array
| 0x6C || float || Unknown
|-
|-
| 0x60 || float || '''jmpbounce''' || Bounce height when using the Bubble Bounce (SpongeBob only)
| 0x70 || float || Launch Direction X
|-
|-
| 0x64 || [[AssetID]][3] || '''animID''' || Bounce animations?
| 0x74 || float || Launch Direction Y
|-
|-
| 0x70 || [[Vector3]] || '''jmpdir''' || Bounce direction (unit vector)
| 0x78 || float || Launch Direction Z
|-
|-
| 0x7C || int || Movement lock mode
| 0x7C || uint || '''springflags''' ||
|-
|-
| 0x80 || float || Unknown
| 0x80 || byte[0xC] || - || ''null'' (Padding)
|-
|-
! colspan="4" | Teeter-Totter only
| 0x84 || float || Unknown
|-
|-
| 0x88 || float || Unknown
| 0x54 || float || '''itilt''' || Initial tilt, in radians
|-
|-
| 0x8C || byte[4] || Unknown
| 0x58 || float || '''maxtilt''' || In radians
|-
|-
| 0x5C || float || '''invmass''' || Determines tilt speed
| 0x90 || byte || Movement Mode:
*0 - Move only
*1 - Rotate only
*2 - Move and rotate at the same time
*3 - Move, then rotate, then wait
*4 - Move, then wait, then rotate
*5 - Faster rotate only
To do: investigate more values
|-
|-
| 0x91 || byte || Movement Loop Type:
| 0x60 || byte[0x28] || - || ''null'' (Padding)
*0 - Single direction (never return)
*1 - Move back and forth
*2 - Move on event
*3 - Move on event
To do: investigate more values and difference between 2 and 3
|-
|-
! colspan="4" | Paddle only
| 0x92 || byte || Movement Translation Direction:
*0 - X
*1 - Y
*2 - Z
*3 - Z?
To do: investigate more values and see how some PLATs move in more than one direction
|-
|-
| 0x54 || int || '''startOrient''' || Array index of Orients to start at (zero-indexed). Range is 0 ... Orient Count - 1.
| 0x93 || byte || Movement Rotation Axis:
*0 - X
*1 - Y
*2 - Z
*3 - Z?
To do: investigate more values and see how some PLATs rotate in more than one direction
|-
|-
| 0x58 || int || '''countOrient''' || Number of rotations the paddle can be in (up to 6).
| 0x94 || [[Asset ID]] || [[MVPT]]
|-
|-
| 0x98 || float || Movement Translation Distance
| 0x5C || float || '''orientLoop''' || Max rotation? (In degrees)
|-
|-
| 0x60 || float[6] || '''orient''' || Array of yaw rotations (in degrees) for the paddle (up to 6).
| 0x9C || float || Movement Translation Time
|-
|-
| 0x78 || uint || '''paddleFlags''' ||
| 0xA0 || float || Movement Translation Ease In Start
|-
|-
| 0xA4 || float || Movement Translation Ease In End
| 0x7C || float || '''rotateSpeed''' ||
|-
|-
| 0xA8 || float || Movement Rotation Degrees
| 0x80 || float || '''accelTime''' ||
|-
|-
| 0xAC || float || Movement Rotation Time
| 0x84 || float || '''decelTime''' ||
|-
|-
| 0xB0 || float || Movement Rotation Ease In Start
| 0x88 || float || '''hubRadius''' || collision radius?
|-
|-
! colspan="4" | Fully Manipulable only
| 0xB4 || float || Movement Rotation Ease In End
|-
|-
| 0xB8 || float || Movement End Wait Time
| 0x54 || int || '''nothingyet''' || ''null''
|-
|-
| 0xBC || float || Movement Start Wait Time
| 0x58 || byte[0x34] || - || ''null'' (Padding)
|-
|-
! colspan="4" |
| 0xC0 || float || '''Unknown'''
|-
|-
| 0xC4 || float || '''Unknown'''
| 0x8C || [[Motion]] || - ||
|-
|-
! colspan="3" | Events
! colspan="4" | Events
|-
|-
| 0xC8 || Event[numberOfEvents] || '''[[Events]]'''
| 0xC8 || Event[numberOfEvents] || [[EvilEngine/Events|'''Events''']] ||
|}
|}


Line 351: Line 439:
* 0 - Platform
* 0 - Platform
* 4 - Mechanism
* 4 - Mechanism
* 5 - Pendulum
* 6 - Conveyor Belt
* 6 - Conveyor Belt
* 7 - Falling Platform
* 8 - FR? (Forward/Return?)
* 9 - Breakaway Platform
* 9 - Breakaway Platform
* 10 - Springboard
* 10 - Springboard
* 11 - Teeter-Totter
* 11 - Teeter-Totter
* 12 - Paddle
* 12 - Paddle '''(Not present in Scooby)'''


{{Assets}}
== Events ==
{{AutoGameNavs}}
* Forward
* Reverse
* Run
* Arrive


[[Category:Asset]]
[[Category:Asset]]

Latest revision as of 08:09, 6 November 2022

PLAT
Platform
TypeEntity
Base Type0x06
Games usedNight of 100 Frights

Battle for Bikini Bottom
The SpongeBob SquarePants Movie
The Incredibles
Rise of the Underminer

Ratatouille Prototype
Source codezPlatform.h

This asset defines an entry for a moving object.

Format: Night of 100 Frights

PLAT are entity assets, so they start with their 0x50 byte header, then are followed by:

Offset Type Variable Description
0x50 byte type This is always the same as the Type at 0x09 for every type except Platform, which can be one of the following subtypes:
  • 0 - Extend/Retract
  • 1 - Orbit
  • 2 - Spline
  • 3 - Move Point
0x51 byte pad null (Padding)
0x52 ushort flags
Extend/Retract only
0x54 int nodata null
0x58 byte[0x20] - null (Padding)
Orbit only
0x54 int nodata null
0x58 byte[0x20] - null (Padding)
Spline only
0x54 int nodata null
0x58 byte[0x20] - null (Padding)
Move Point only
0x54 int nodata null
0x58 byte[0x20] - null (Padding)
Mechanism only
0x54 int nodata null
0x58 byte[0x20] - null (Padding)
Pendulum only
0x54 int nodata null
0x58 byte[0x20] - null (Padding)
Conveyor Belt only
0x54 float speed
0x58 byte[0x20] - null (Padding)
Falling Platform only
0x54 float speed
0x58 AssetID bustModelID
0x5C byte[0x1C] - null (Padding)
FR only
0x54 float fspeed
0x58 float rspeed
0x5C float ret_delay
0x60 float post_ret_delay
0x64 byte[0x14] - null (Padding)
Breakaway Platform only
0x54 float ba_delay
0x58 AssetID bustModelID
0x5C float reset_delay
0x60 byte[0x18] - null (Padding)
Springboard only
0x54 float[3] jmph
0x60 AssetID[3] animID
0x6C Vector3 jmpdir
Teeter-Totter only
0x54 float itilt
0x58 float maxtilt
0x5C float invmass
0x60 byte[0x18] - null (Padding)
0x78 Motion -
Events
0xA8 Events[numberOfEvents] Events


Format: Battle For Bikini Bottom

PLAT are entity assets, so they start with their 0x54 byte header, then are followed by:

Offset Type Variable Description
0x54 byte type This is always the same as the Type at 0x09 for every type except Platform, which can be one of the following subtypes:
  • 0 - Extend/Retract
  • 1 - Orbit
  • 2 - Spline
  • 3 - Move Point
  • 13 - Fully Manipulable
0x55 byte pad Padding (always 0)
0x56 ushort flags
  • 1 - Shake - Shakes when player mounts/dismounts
  • 4 - Solid
Extend/Retract only
0x58 int nodata null
0x5C byte[0x34] - null (Padding)
Orbit only
0x58 int nodata null
0x5C byte[0x34] - null (Padding)
Spline only
0x58 int nodata null
0x5C byte[0x34] - null (Padding)
Move Point only
0x58 int nodata
0x5C byte[0x34] - null (Padding)
Mechanism only
0x58 int nodata null
0x5C byte[0x34] - null (Padding)
Pendulum only
0x58 int nodata null
0x5C byte[0x34] - null (Padding)
Conveyor Belt only
0x58 float speed The player slides along the platform's X axis at this speed (in units per second) when standing on top of it
0x5C byte[0x34] - null (Padding)
Falling Platform only
0x58 float speed
0x5C AssetID bustModelID Model ID
0x60 byte[0x30] - null (Padding)
FR only
0x58 float fspeed
0x5C float rspeed
0x60 float ret_delay
0x64 float post_ret_delay
0x68 byte[0x28] - null (Padding)
Breakaway Platform only
0x58 float ba_delay Time in seconds to fall down after player stands on it
0x5C AssetID bustModelID Model ID - Always 0 or 0xCE7F8131 (hash of "--Choose One--")
0x60 float reset_delay Time in seconds after falling down to reset back to normal position
0x64 uint breakflags
  • 1 - Allow Sneak - Won't break if player is sneaking
0x68 byte[0x28] - null (Padding)
Springboard only
0x58 float[3] jmph Jump height array, unknown why it's an array. The game seems to pick the highest of the 3 heights in this array
0x64 float jmpbounce Bounce height when using the Bubble Bounce (SpongeBob only)
0x68 AssetID[3] animID Bounce animations?
0x74 Vector3 jmpdir Bounce direction (unit vector)
0x80 uint springflags
  • 1 - Lock view (look down)
  • 2 - ?
  • 4 - Lock movement (doesn't let you move)
0x84 byte[0xC] - null (Padding)
Teeter-Totter only
0x58 float itilt Initial tilt, in radians
0x5C float maxtilt In radians
0x60 float invmass Determines tilt speed
0x64 byte[0x2C] - null (Padding)
Paddle only
0x58 int startOrient Array index of Orients to start at (zero-indexed). Range is 0 ... Orient Count - 1.
0x5C int countOrient Number of rotations the paddle can be in (up to 6).
0x60 float orientLoop Max rotation? (In degrees)
0x64 float[6] orient Array of yaw rotations (in degrees) for the paddle (up to 6).
0x7C uint paddleFlags
0x80 float rotateSpeed
0x84 float accelTime
0x88 float decelTime
0x8C float hubRadius collision radius?
Fully Manipulable only
0x58 int nothingyet null
0x5C byte[0x34] - null (Padding)
0x90 Motion -
Events
0xC0 Event[numberOfEvents] Events

Format: The Spongebob Squarepants Movie

PLAT are entity assets, so they start with their 0x50 byte header, then are followed by:

Offset Type Variable Description
0x50 byte type This is always the same as the Type at 0x09 for every type except Platform, which can be one of the following subtypes:
  • 0 - Extend/Retract
  • 1 - Orbit
  • 2 - Spline
  • 3 - Move Point
  • 13 - Fully Manipulable
0x51 byte pad null (Padding)
0x52 short flags Collision type
  • 0, 1, 2, 3, 8, 9 - Nonsolid
  • 4, 6 - Normal collision
  • 5, 7 - Bouncy collision
Extend/Retract only
0x54 int nodata
0x58 byte[0x34] - null (Padding)
Orbit only
0x54 int nodata
0x58 byte[0x34] - null (Padding)
Spline only
0x54 int nodata
0x58 byte[0x34] - null (Padding)
Move Point only
0x54 int nodata
0x58 byte[0x34] - null (Padding)
Mechanism only
0x54 int nodata
0x58 byte[0x34] - null (Padding)
Pendulum only
0x54 int nodata
0x58 byte[0x34] - null (Padding)
Conveyor Belt only
0x54 float speed
0x58 byte[0x34] - null (Padding)
Falling Platform only
0x54 float speed
0x58 AssetID bustModelID
0x5C byte[0x30] - null (Padding)
FR only
0x54 float fspeed
0x58 float rspeed
0x5C float ret_delay
0x60 float post_ret_delay
0x64 byte[0x28] - null (Padding)
Breakaway Platform only
0x54 float warningTime Time in seconds to fall down after player stands on it
0x58 float collapseIdleTime Time in seconds after falling down to reset back to normal position
0x5C uint breakflags
0x60 float collisionOffTime
0x64 byte[0x28] - null (Padding)
Springboard only
0x54 float[3] jmph Jump height array, unknown why it's an array. The game seems to pick the highest of the 3 heights in this array
0x60 float jmpbounce Bounce height when using the Bubble Bounce (SpongeBob only)
0x64 AssetID[3] animID Bounce animations?
0x70 Vector3 jmpdir Bounce direction (unit vector)
0x7C uint springflags
0x80 byte[0xC] - null (Padding)
Teeter-Totter only
0x54 float itilt Initial tilt, in radians
0x58 float maxtilt In radians
0x5C float invmass Determines tilt speed
0x60 byte[0x28] - null (Padding)
Paddle only
0x54 int startOrient Array index of Orients to start at (zero-indexed). Range is 0 ... Orient Count - 1.
0x58 int countOrient Number of rotations the paddle can be in (up to 6).
0x5C float orientLoop Max rotation? (In degrees)
0x60 float[6] orient Array of yaw rotations (in degrees) for the paddle (up to 6).
0x78 uint paddleFlags
0x7C float rotateSpeed
0x80 float accelTime
0x84 float decelTime
0x88 float hubRadius collision radius?
Fully Manipulable only
0x54 int nothingyet null
0x58 byte[0x34] - null (Padding)
0x8C Motion -
Events
0xC8 Event[numberOfEvents] Events

Types (0x09)

  • 0 - Platform
  • 4 - Mechanism
  • 5 - Pendulum
  • 6 - Conveyor Belt
  • 7 - Falling Platform
  • 8 - FR? (Forward/Return?)
  • 9 - Breakaway Platform
  • 10 - Springboard
  • 11 - Teeter-Totter
  • 12 - Paddle (Not present in Scooby)