The ROOM format is used to store object layout data in Tropical Freeze.
|
This file format needs more research Still a lot of unknown values and a lot of things that aren't known about how objects interact with each other.
|
Format
| Type
|
Count
|
Name
|
Notes
|
| Form Descriptor
|
1
|
ROOM Form Descriptor
|
Data type is ROOM
|
| Header
|
1
|
Header
|
|
| Layer
|
Varying
|
Layers
|
Each layer is under its own form. Unsure if the format has a layer count anywhere.
|
| Type
|
Count
|
Name
|
Notes
|
| Chunk Descriptor
|
1
|
Room Header Descriptor
|
Data type is RMHD
|
| u16
|
1
|
Unknown
|
Always 3?
|
Performance Groups
| Type
|
Count
|
Name
|
Notes
|
| Chunk Descriptor
|
1
|
Performance Groups Descriptor
|
Data type is PGRP
|
| u16
|
1
|
Performance Group Count
|
|
| Performance Group
|
Performance Group Count
|
Performance Groups
|
|
Performance Group
| Type
|
Count
|
Name
|
Notes
|
| u32
|
1
|
Name Length
|
|
| char
|
Name Length
|
Performance Group Name
|
Not zero-terminated
|
| GUID
|
1
|
PerformanceGroupController Instance GUID
|
|
| bool
|
1
|
Unknown
|
|
| u16
|
1
|
Layer Count
|
|
| GUID
|
Layer Count
|
Layer GUIDs
|
|
Generated Object Map
Generated Object
| Type
|
Count
|
Name
|
Notes
|
| GUID
|
1
|
Generated Object ID
|
|
| GUID
|
1
|
Layer ID
|
This is the ID of the layer that contains the above generated object
|
Load Unit
| Type
|
Count
|
Name
|
Notes
|
| Form Descriptor
|
1
|
Load Unit Descriptor
|
Data type is LUNT
|
| Chunk Descriptor
|
1
|
Load Unit Header Descriptor
|
Data type is LUHD
|
| u32
|
1
|
Name Length
|
|
| char
|
Name Length
|
Load Unit Name
|
For some reason these seem to generally have really short names (sometimes a single character).
|
| GUID
|
1
|
Unknown
|
Probably the GUID for this load unit
|
| u16
|
1
|
Unknown
|
|
| Chunk Descriptor
|
1
|
Load Unit Resources Descriptor
|
Data type is LRES
|
| u32
|
1
|
Resource Count
|
|
| GUID
|
Resource Count
|
Load Unit Resources Array
|
Likely a list of all resources that are used by this load unit.
|
| Chunk Descriptor
|
1
|
Load Unit Layers Descriptor
|
Data type is LLYR
|
| u32
|
1
|
Layer Count
|
|
| GUID
|
Layer Count
|
Load Unit Layers Array
|
Likely a list of all layers that are part of this load unit. (Note that it seems layers can be included in multiple load units.)
|
Layer
| Type
|
Count
|
Name
|
Notes
|
| Form Descriptor
|
1
|
Layer Form Descriptor
|
Data type is LAYR
|
| Chunk Descriptor
|
1
|
Layer Header Descriptor
|
Data type is LHED
|
| u32
|
1
|
Name Length
|
|
| char
|
Name Length
|
Layer Name
|
|
| GUID
|
1
|
Layer ID
|
|
| u32
|
1
|
Unknown
|
|
| GUID
|
1
|
Unknown
|
|
| bool
|
1
|
Unknown
|
|
| Form Descriptor
|
1
|
Generated Script Object Descriptor
|
Data type is GSRP.
|
| Generated Game Object
|
Varies
|
Generated Game Objects
|
Unsure if there is a generated object count.
|
| Form Descriptor
|
1
|
Script Object Descriptor
|
Data type is SRIP
|
| Game Object Component
|
Varies
|
Components
|
Unsure if there is a layer component count.
|
Generated Game Object
Game Object Component
| Type
|
Count
|
Name
|
Notes
|
| Chunk Descriptor
|
1
|
Component Descriptor
|
Data type is COMP
|
| u32
|
1
|
Component Type
|
This appears to be a hash of the component name.
|
| GUID
|
1
|
Instance ID
|
|
| u32
|
1
|
Name Length
|
|
| char
|
Name Length
|
Instance Name
|
|
The remaining data seems to have two structures; one that's used by most objects and one that's specific to GameObject components.
Regular structure:
| Type
|
Count
|
Name
|
Notes
|
| u16
|
1
|
Connection Count
|
|
| Connection
|
Connection Count
|
Connection Array
|
These establish links to other components to allow them to interact
|
| u32
|
1
|
Property Count
|
|
| Property
|
Property Count
|
Object Properties
|
|
GameObject structure:
| Type
|
Count
|
Name
|
Notes
|
| u32
|
1
|
Sub-Component Count
|
|
| Sub-Component
|
Sub-Component Count
|
Sub-Component Array
|
Seems to describe other script components that are children of this one.
|
| bool
|
1
|
Unknown
|
This is likely the Active flag that appears on every object in the previous games.
|
| vector3
|
1
|
Position
|
|
| vector3
|
1
|
Rotation
|
Euler XYZ angles in degrees (presumably in ZYX order like the previous games).
|
| vector3
|
1
|
Scale
|
|
Connection
| Type
|
Count
|
Name
|
Notes
|
| char
|
4
|
Event
|
This is the event that causes the connection to trigger. (These are what were called States in the previous games.)
|
| char
|
4
|
Action
|
Action that the connected object should execute when the connection triggers. (These are what were called Messages in the previous games.)
|
| GUID
|
1
|
Target Instance ID
|
Instance ID of the target object that
|
| u32
|
1
|
Unknown
|
|
Property
| Type
|
Count
|
Name
|
Notes
|
| u32
|
1
|
Property ID
|
32-bit hash of the property name.
|
| u16
|
1
|
Property Size
|
|
|
|
|
Property Data
|
Varies depending on the type of the property (which is hardcoded depending on the property ID).
|
Sub-Component
This structure is used to define sub-components that are attached to GameObject components.
| Type
|
Count
|
Name
|
Notes
|
| char
|
4
|
Type
|
Usually COMP, but sometimes other things like IL00. Not sure what it means.
|
| GUID
|
1
|
Component ID
|
|
| bool
|
1
|
Unknown
|
Might be an Active/Enabled flag.
|
Component Types
| ID
|
Component
|
| 0x749749F1
|
GameObject
|
| 0x4EC5FA3A
|
FakePlayerControls
|
| 0x57153AA4
|
StaticCollision
|
| 0x41956904
|
RenderWorld
|
| 0xB4361E7B
|
ActorCollision
|
| 0x2BE8BC19
|
LightStatic
|
| 0x9EE5541D
|
LightDynamic
|
| 0xCD098F70
|
Effect
|
| 0x8FE0BFC9
|
Relay
|
| 0xA7DB53C1
|
Counter
|
| 0xADA85938
|
SeaLion
|
| 0xAAEBA313
|
WarusKing
|
| 0x05DD288E
|
Switch
|
| 0x9E8A4940
|
Timer
|
| 0xD616EE8B
|
ControllerAction
|
| 0xD898656D
|
Waypoint
|
| 0xF0240D23
|
PathControl
|
| 0x4FE57689
|
CameraHint
|
| 0x97E65DDD
|
TouchableTrigger
|
| 0x1A4117AB
|
Toucher
|
| 0xC49D730E
|
TriggerLogic
|
| 0xD47974E4
|
FiniteStateMachine
|
| 0x1349E5AC
|
CustomInterpolation
|
| 0xC1F64515
|
CameraTarget
|
| 0xDE522669
|
Generator
|
| 0x1383F6D6
|
GeneratorDeleter
|
| 0x2C4F2D31
|
SplineMotion
|
| 0x1223437C
|
Creature
|
| 0x21C57D2B
|
DynamicActorCollision
|
| 0xDF31EC16
|
Render
|
| 0xAE921C3B
|
Player
|
| 0x81A242A0
|
DirectionalIrradianceMap
|
| 0xBDE4AB05
|
TakeDamage
|
| 0x5453C979
|
MasterSlave
|
| 0x07E3137F
|
TraceObject
|
| 0x046FAD23
|
TimerSequence
|
| 0x3175DF36
|
ApplyDamage
|
| 0x65E2349B
|
RelayRandom
|
| 0xABBCFC6A
|
RelayConditional
|
| 0xEA30E0B1
|
SpawnPoint
|
| 0x1FB9AF22
|
ActorKeyframe
|
| 0xCB6D9ACE
|
PlayerProxy
|
| 0x6FB22081
|
BarrelCannon
|
| 0xF4567AD7
|
RumbleEffect
|
| 0x10EA9EC8
|
ObjectFollow
|
| 0x481EA5AF
|
Pickup
|
| 0xBC9A60AE
|
CameraManager
|
| 0xDB38B3FB
|
GroundPoundDetector
|
| 0xBE82DEF3
|
Projectile
|
| 0x43C0D52A
|
ClingPathControl
|
| 0xB85D6790
|
ColorModifier
|
| 0x021C14B0
|
Explosion
|
| 0x16702F15
|
ReloadSetLoader
|
| 0x660FC7C1
|
Checkpoint
|
| 0x8C2CCFAC
|
PlayerRespawn
|
| 0xC0281AE7
|
ImpulseDriver
|
| 0xD4538C9B
|
Bouncer
|
| 0x06E89BE7
|
Health
|
| 0xE0AFAF06
|
PlayerActionHint
|
| 0x1A90271D
|
Grabbable
|
| 0x3C23783B
|
GrabThrow
|
| 0x9373FEC0
|
Respawn
|
| 0xAF565E69
|
SwingRope
|
| 0xC7B43DA6
|
ActorInteraction
|
| 0xC9ED6454
|
WindWaker
|
| 0x78D8893A
|
CameraTargetPlayer
|
| 0xA86E6401
|
PoiObject
|
| 0xFDD83489
|
Sound
|
| 0xCCAD4BD9
|
PerformanceGroupController
|
| 0x502506D6
|
TouchSet
|
| 0x88603CF7
|
MineCartProxy
|
| 0xE1E1C49C
|
WaterVolume
|
| 0x6C5D597D
|
NearVisible
|
| 0x3449A5DF
|
Swimmer
|
| 0x591D8F55
|
CharacterPrimitivesCollision
|
| 0x90D8D3CE
|
RenderMethodResolver
|
| 0xBD4CFA2F
|
TriggerForce
|
| 0x3150D2F6
|
FuseBomb
|
| 0xAF3A06F2
|
PathControlZipline
|
| 0xD32870DF
|
PolarBear
|
| 0x2131C235
|
GroupSpawn
|
| 0x2751EBF2
|
AnimationGridController
|
| 0x18B96D29
|
TimerAnimationGridParamProvider
|
| 0xB9F9F04C
|
ActionDetector
|
| 0x343A47F7
|
CameraShaker
|
| 0x06159C2D
|
RespawnBalloon
|
| 0x7E6063C8
|
PlayerActor
|
| 0x91F22DCF
|
Tippy
|
| 0x89F426F2
|
CinematicCameraShot
|
| 0x1EB2749F
|
ConveyorModifier
|
| 0x73AECD92
|
FogVolume
|
| 0x845E492A
|
Retronome
|
| 0x23C5DFF4
|
WaterRenderVolume
|
| 0x55F80CCE
|
CinematicSkipHandler
|
| 0xAB5C5D7B
|
BonusRoom
|
| 0x3A3A6FAD
|
TireBounce
|
| 0x9D25FE2D
|
BeatUpHandler
|
| 0x9FC07D01
|
Owl
|
| 0xA42F7AB9
|
GrabbableGenerator
|
| 0xF34EDD1F
|
InventoryItem
|
| 0x18C0AD0F
|
EndGame
|
| 0xEBE92100
|
RocketBarrelProxy
|
| 0xB7ADA3EC
|
BurningBranch
|
| 0x59AB515E
|
HotCoals
|
| 0xE21D45CB
|
BarrelBalloon
|
| 0x6302BBB3
|
UVTransform
|
| 0x5FEF037B
|
Baboon
|
| 0x25899782
|
MusicData
|
| 0x1AC8C8FD
|
MusicStateController
|
| 0x47A60DC3
|
MusicSystemTransport
|
| 0x5CF17BFE
|
AdapterManager
|
| 0xCA08C6A4
|
WaterRenderDecal
|
| 0x7F6D1CBA
|
RelayAutoFire
|
| 0x3DAAF68B
|
BaboonManager
|
| 0xD745DC42
|
GraphicalTransition
|
| 0x0FA3899C
|
RetronomeDriver
|
| 0x57E54B9D
|
EndLevel
|
| 0x6780941E
|
SuperCombinedAbilityEmitter
|
| 0xB8B6A22E
|
SuperCombinedAbilityResponder
|
| 0x0AF8D63C
|
MapPlayer
|
| 0x8CB5BF7D
|
MapPathControl
|
| 0xEBE0DAEE
|
WaterCurrentVolume
|
| 0xA7D1C922
|
CausticVolume
|
| 0x35D8F3F0
|
PufferFish
|
| 0xBA796FEF
|
Playlist
|
| 0xC2F2282A
|
WindWakerImpulser
|
| 0xE03DD39F
|
MapNode
|
| 0x55AAB5F1
|
RambiCrate
|
| 0x24D9D323
|
AudioEffect
|
| 0xF7602744
|
DSP
|
| 0x160E9AF9
|
RoomSettings
|
| 0x5746A908
|
DynamicActorControl
|
| 0x59276E0E
|
HUDAnchor
|
| 0xF442A668
|
TimeKeyframe
|
| 0xB6040870
|
RelayProbabilityGameMode
|
| 0xF3847DE3
|
FlyingPickupEffect
|
| 0x212BCDF5
|
SimpleShadow
|
| 0x655C5175
|
AudioBusController
|
| 0xF6751A5D
|
PlayerKeyframe
|
| 0xC04DAF13
|
BreathMonitor
|
| 0x4C7B9FC8
|
DirectionalIrradianceProbes
|
| 0x0BE7FC29
|
SurfaceControl
|
| 0xB6EC1A51
|
SimpleSound
|
| 0xD2CAC9A5
|
LightGroupProxy
|
| 0xDFD2A23A
|
DialogPanel
|
| 0xBCCB1B30
|
MinecartPathManager
|
| 0xD856F6B9
|
Imposter
|
| 0xBD040603
|
LevelDarkener
|
| 0xA72A9926
|
RenderGroup
|
| 0x3258FD44
|
RenderToFlash
|
| 0x3ABCFF68
|
SkinSwap
|
| 0xC532AD25
|
ScreenCaptureToFlash
|
| 0xB152AD59
|
PlayerSound
|
| 0xBFF963D2
|
StreamedMovie
|
| 0x7DCAF170
|
BloomEffect
|
| 0x1243C3E3
|
ProjectedSimpleShadowReceiver
|
| 0x5368FF52
|
ShopData
|
| 0xA04F0C68
|
ShopInstance
|
| 0x5B0C954B
|
UICameraSelector
|
| 0x7CC0B7BF
|
Squawks
|
| 0xB177FA02
|
SquawksProxy
|
| 0x4C53A836
|
UnitController
|
| 0x008E3AF5
|
FlashTextureSwapper
|
| 0xF5D80D1A
|
Extras
|
| 0xBB449D71
|
ExtrasType
|
| 0xA98F9015
|
ExtrasCategory
|
| 0xEE0D6FD4
|
DynamicLoadManager
|
| 0xFDDB58A1
|
MapManagerProxy
|
| 0xA32E718F
|
Achievement
|
| 0x62913993
|
AudioBusMixer
|
| 0xADCD416E
|
Credits
|
| 0xA4E4FE1D
|
HUDFadeDetector
|
| 0xAF9DEA76
|
ProductionFrontEndProxy
|