EvilEngine/PLAT: Difference between revisions

no edit summary
Battlepedia>Igorseabra4
No edit summary
No edit summary
 
(14 intermediate revisions by 6 users not shown)
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==
PLAT are [[PlaceableEvilEngine/Assets#Entity AssetAssets|placeableentity assets]], so they start with their 0x54 byte header, then are followed by:
 
{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x54 || byte || '''Subtypetype''' -|| 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
* 13 - Fully Manipulable
|-
| 0x55 || byte || Unknown'''pad''' -|| Padding (always 0)
|-
| 0x56 || ushort || '''flags''' ||
*1 - Shake - Shakes when player mounts/dismounts
*4 - Solid
|-
! colspan="4" | Extend/Retract only
|-
| 0x560x58 || shortint || '''Collision typenodata''' - 0,|| 1, 4, or 5''null''
|-
| 0x5C || byte[0x34] || - || ''null'' (Padding)
! colspan="3" | Platform only
|-
! colspan="4" | Orbit only
| 0x58 || int || null
|-
| 0x5C0x58 || int || '''nodata''' || ''null''
|-
| 0x600x5C || intbyte[0x34] || - || ''null'' (Padding)
|-
! colspan="4" | Spline only
| 0x64 || int || null
|-
| 0x58 || int || '''nodata''' || ''null''
! colspan="3" | Mechanism only
|-
| 0x580x5C || intbyte[0x34] || - || ''null'' (Padding)
|-
! colspan="4" | Move Point only
| 0x5C || int || null
|-
| 0x600x58 || int || null'''nodata''' ||
|-
| 0x640x5C || intbyte[0x34] || - || ''null'' (Padding)
|-
! colspan="34" | Conveyor BeltMechanism only
|-
| 0x58 || floatint || '''Speednodata''' || ''null''
|-
| 0x5C || intbyte[0x34] || - || ''null'' (Padding)
|-
! colspan="4" | Pendulum only
| 0x60 || int || null
|-
| 0x640x58 || int || '''nodata''' || ''null''
|-
| 0x5C || byte[0x34] || - || ''null'' (Padding)
! colspan="3" | Breakaway Platform only
|-
! colspan="4" | Conveyor Belt only
| 0x58 || float || '''Break Delay''' - Time in seconds to fall down after player stands on it
|-
| 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 || int || '''Unknown''' - Always 0 or 0xCE7F8131 (hash of "--Choose One--")
|-
| 0x5C || byte[0x34] || - || ''null'' (Padding)
| 0x60 || float || '''Reset Delay''' - Time in seconds after falling down to reset back to normal position
|-
! colspan="4" | Falling Platform only
| 0x64 || int || '''Unknown''' - Always 0 or 1
|-
| 0x58 || float || '''speed''' ||
! colspan="3" | Springboard only
|-
| 0x5C || [[AssetID]] || '''bustModelID''' || [[EvilEngine/MODL|Model]] ID
| 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
|-
| 0x5C0x60 || floatbyte[0x30] || '''Bounce- Height|| 2''null'' (Padding)
|-
! colspan="4" | FR only
| 0x60 || float || '''Bounce Height 3'''
|-
| 0x640x58 || float || '''Slam Heightfspeed''' - SpongeBob only||
|-
| 0x5C || float || '''rspeed''' ||
! colspan="3" | Teeter-Totter only
|-
| 0x580x60 || float || '''Unknownret_delay''' - in radians||
|-
| 0x5C0x64 || float || '''Max Tilt Anglepost_ret_delay''' - in radians||
|-
| 0x600x68 || floatbyte[0x28] || '''Tilt- || Speed''null'' (Padding)
|-
! colspan="4" | Breakaway Platform only
| 0x64 || int || null
|-
| 0x58 || float || '''ba_delay''' || Time in seconds to fall down after player stands on it
! colspan="3" | Paddle only
|-
| 0x5C || [[AssetID]] || '''bustModelID''' || [[EvilEngine/MODL|Model]] ID - Always 0 or 0xCE7F8131 (hash of "--Choose One--")
| 0x58 || float || '''Current Spin Index''' - Which spin position to start at. Zero-indexed. Range is 0 ... Number of Spins - 1.
|-
| 0x5C0x60 || float || '''Number of Spinsreset_delay''' -|| TotalTime numberin ofseconds spinsafter infalling thedown paddle'sto reset back to normal range.position
|-
| 0x600x64 || floatuint || '''Unknownbreakflags''' - in degrees?||
* 1 - Allow Sneak - Won't break if player is sneaking
|-
| 0x640x68 || intbyte[0x28] || - || ''null'' (Padding)
|-
! colspan="34" | 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
| 0x68 || [[Asset ID]] || [[ANIM]]
|-
| 0x64 || float || '''jmpbounce''' || Bounce height when using the Bubble Bounce (SpongeBob only)
| 0x6C || [[Asset ID]] || [[ANIM]]
|-
| 0x68 || [[AssetID]][3] || '''animID''' || Bounce animations?
| 0x70 || float || Unknown
|-
| 0x74 || float[[Vector3]] || Launch'''jmpdir''' Direction|| Bounce direction (unit Xvector)
|-
| 0x780x80 || floatuint || Launch'''springflags''' Direction Y||
*1 - Lock view (look down)
*2 - ?
*4 - Lock movement (doesn't let you move)
|-
| 0x7C0x84 || floatbyte[0xC] || Launch- Direction|| ''null'' Z(Padding)
|-
! colspan="4" | Teeter-Totter only
| 0x80 || int || Movement lock mode
|-
| 0x840x58 || float || Unknown'''itilt''' || Initial tilt, in radians
|-
| 0x880x5C || float || Unknown'''maxtilt''' || In radians
|-
| 0x8C0x60 || float || Unknown'''invmass''' || Determines tilt speed
|-
| 0x900x64 || byte[40x2C] || Unknown- || ''null'' (Padding)
|-
! colspan="4" | Paddle only
| 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
|-
| 0x58 || int || '''startOrient''' || Array index of Orients to start at (zero-indexed). Range is 0 ... Orient Count - 1.
| 0x95 || byte || Movement Loop Type:
*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
|-
| 0x5C || int || '''countOrient''' || Number of rotations the paddle can be in (up to 6).
| 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
|-
| 0x60 || float || '''orientLoop''' || Max rotation? (In degrees)
| 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
|-
| 0x64 || float[6] || '''orient''' || Array of yaw rotations (in degrees) for the paddle (up to 6).
| 0x98 || [[Asset ID]] || [[MVPT]]
|-
| 0x7C || uint || '''paddleFlags''' ||
| 0x98 || float || Movement Translation Distance (shared offset with previous field)
|-
| 0x9C0x80 || float || Movement'''rotateSpeed''' Translation Time||
|-
| 0xA00x84 || float || Movement'''accelTime''' Translation Ease In Start||
|-
| 0xA40x88 || float || Movement'''decelTime''' Translation Ease In End||
|-
| 0xA80x8C || float || Movement'''hubRadius''' Rotation|| collision Degreesradius?
|-
! colspan="4" | Fully Manipulable only
| 0xAC || float || Movement Rotation Time
|-
| 0x58 || int || '''nothingyet''' || ''null''
| 0xB0 || float || Movement Rotation Ease In Start
|-
| 0x5C || byte[0x34] || - || ''null'' (Padding)
| 0xB4 || float || Movement Rotation Ease In End
|-
! colspan="4" |
| 0xB8 || float || Movement End Wait Time
|-
| 0xBC0x90 || float[[Motion]] || Movement- Start Wait Time||
|-
! colspan="34" | Events
|-
| 0xC0 || Event[numberOfEvents] || [[EvilEngine/Events|'''[[Events]]''']] ||
|}
 
==Format: The Spongebob Squarepants Movie==
PLAT are [[PlaceableEvilEngine/Assets#Entity AssetAssets|placeableentity assets]], so they start with their 0x50 byte header, then are followed by:
 
{| class="wikitable"
! Offset !! Type !! Variable !! Description
|-
| 0x50 || byte || '''Subtypetype''' -|| 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
* 13 - Fully Manipulable
|-
| 0x51 || byte || Unknown'''pad''' -|| always''null'' 0(Padding)
|-
| 0x52 || short || '''Collision typeflags''' -|| 0,Collision 1, 4, or 5type
*0, 1, 2, 3, 8, 9 - Nonsolid
*4, 6 - Normal collision
*5, 7 - Bouncy collision
|-
! colspan="34" | PlatformExtend/Retract only
|-
| 0x54 || int || null'''nodata''' ||
|-
| 0x58 || intbyte[0x34] || - || ''null'' (Padding)
|-
! colspan="4" | Orbit only
| 0x5C || int || null
|-
| 0x600x54 || int || null'''nodata''' ||
|-
| 0x58 || byte[0x34] || - || ''null'' (Padding)
! colspan="3" | Mechanism only
|-
! colspan="4" | Spline only
| 0x54 || int || null
|-
| 0x580x54 || int || null'''nodata''' ||
|-
| 0x5C0x58 || intbyte[0x34] || - || ''null'' (Padding)
|-
! colspan="4" | Move Point only
| 0x60 || int || null
|-
| 0x54 || int || '''nodata''' ||
! colspan="3" | Conveyor Belt only
|-
| 0x540x58 || floatbyte[0x34] || - || '''Speed'null'' (Padding)
|-
! colspan="4" | Mechanism only
| 0x58 || int || null
|-
| 0x5C0x54 || int || null'''nodata''' ||
|-
| 0x600x58 || intbyte[0x34] || - || ''null'' (Padding)
|-
! colspan="34" | Breakaway PlatformPendulum only
|-
| 0x54 || floatint || '''Break Delaynodata''' - Time in seconds to fall down after player stands on it||
|-
| 0x58 || intbyte[0x34] || - || '''Unknown'null'' - Always 0 or 0xCE7F8131 (hash of "--Choose One--"Padding)
|-
! colspan="4" | Conveyor Belt only
| 0x5C || float || '''Reset Delay''' - Time in seconds after falling down to reset back to normal position
|-
| 0x600x54 || intfloat || '''Unknownspeed''' - Always 0 or 1||
|-
| 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
|-
| 0x580x54 || float || '''Bounce Height 2speed''' ||
|-
| 0x5C0x58 || float[[AssetID]] || '''Bounce Height 3bustModelID''' ||
|-
| 0x600x5C || floatbyte[0x30] || - || ''null'Slam Height''' - SpongeBob only(Padding)
|-
! colspan="34" | Teeter-TotterFR only
|-
| 0x54 || float || '''Unknownfspeed''' - in radians||
|-
| 0x58 || float || '''Max Tilt Anglerspeed''' - in radians||
|-
| 0x5C || float || '''Tilt Speedret_delay''' ||
|-
| 0x60 || intfloat || null'''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.
|-
| 0x580x54 || float || '''Number of SpinswarningTime''' -|| TotalTime numberin ofseconds spinsto infall thedown paddle'safter player stands on range.it
|-
| 0x5C0x58 || float || '''UnknowncollapseIdleTime''' -|| Time in degrees?seconds after falling down to reset back to normal position
|-
| 0x600x5C || intuint || null'''breakflags''' ||
|-
| 0x60 || float || '''collisionOffTime''' ||
! colspan="3" |
|-
| 0x64 || byte[[Asset ID]0x28] || [[ANIM]]- || ''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 || intuint || Movement'''springflags''' lock mode||
|-
| 0x80 || floatbyte[0xC] || Unknown- || ''null'' (Padding)
|-
! colspan="4" | Teeter-Totter only
| 0x84 || float || Unknown
|-
| 0x880x54 || float || Unknown'''itilt''' || Initial tilt, in radians
|-
| 0x8C0x58 || byte[4]float || Unknown'''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
|-
| 0x910x60 || byte[0x28] || Movement- Loop|| ''null'' Type:(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]]
|-
| 0x980x5C || float || Movement'''orientLoop''' Translation|| Max rotation? (In Distancedegrees)
|-
| 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
|-
| 0xA40x7C || float || Movement'''rotateSpeed''' Translation Ease In End||
|-
| 0xA80x80 || float || Movement'''accelTime''' Rotation Degrees||
|-
| 0xAC0x84 || float || Movement'''decelTime''' Rotation Time||
|-
| 0xB00x88 || float || Movement'''hubRadius''' Rotation Ease|| Incollision Startradius?
|-
! colspan="4" | Fully Manipulable only
| 0xB4 || float || Movement Rotation Ease In End
|-
| 0xB80x54 || floatint || Movement'''nothingyet''' End Wait|| Time''null''
|-
| 0xBC0x58 || floatbyte[0x34] || Movement- Start|| Wait''null'' Time(Padding)
|-
! colspan="4" |
| 0xC0 || float || '''Unknown'''
|-
| 0xC40x8C || float[[Motion]] || '''Unknown'''- ||
|-
! colspan="34" | Events
|-
| 0xC8 || Event[numberOfEvents] || [[EvilEngine/Events|'''[[Events]]''']] ||
|}
 
Line 348 ⟶ 439:
* 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)'''
 
{{Assets}}
== Events ==
{{AutoGameNavs}}
* Forward
* Reverse
* Run
* Arrive
 
[[Category:Asset]]
2,079

edits