ROOM (File Format): Difference between revisions

Jump to navigation Jump to search
m
>Aruki
(→‎Object Types: more object types)
>Aruki
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
The '''ROOM format''' is used to store object layout data in Tropical Freeze.
The '''ROOM format''' is used to store object layout data in Tropical Freeze.


{{research|major|Most of this format hasn't been researched yet.}}
{{research|moderate|Still a lot of unknown values and a lot of things that aren't known about how objects interact with each other.}}


__TOC__
__TOC__
Line 7: Line 7:
== Format ==
== Format ==


=== RMHD ===
{| class="wikitable"
! Type
! Count
! Name
! Notes
|-
| [[Form Descriptor (Tropical Freeze)|Form Descriptor]]
| 1
| '''ROOM Form Descriptor'''
| Data type is <code>ROOM</code>
|-
| [[#Header|Header]]
| 1
| '''Header'''
|
|-
| [[#Layer|Layer]]
| Varying
| '''Layers'''
| Each layer is under its own form. Unsure if the format has a layer count anywhere.
|}
 
=== Header ===


{| class="wikitable"
{| class="wikitable"
! Type
! Type
! Size
! Count
! Description
! Name
! Notes
|-
| [[Form Descriptor (Tropical Freeze)|Form Descriptor]]
| 1
| '''Header Descriptor'''
| Data type is <code>HEAD</code>
|-
|-
| [[Section Header (Tropical Freeze)|Section Header]]
| [[#Room Header|Room Header]]
| 0x18
| 1
| '''"RMHD" section header'''
| '''Room Header'''
|
|-
| [[#Performance Groups|Performance Groups]]
| 1
| '''Performance Groups'''
|
|-
| [[#Generated Object Map|Generated Object Map]]
| 1
| '''Generated Object Map'''
|
|-
| [[#Load Unit|Load Unit]]
| Varies
| '''Load Units'''
| Unsure whether there's a count of these
|}
 
==== Room Header ====
 
{| class="wikitable"
! Type
! Count
! Name
! Notes
|-
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 1
| '''Room Header Descriptor'''
| Data type is <code>RMHD</code>
|-
|-
| u16
| u16
| 2
| 1
| {{unknown|'''Unknown''' (Always 3?)}}
| {{unknown|'''Unknown'''}}
| Always 3?
|}
|}


=== PGRP ===
==== Performance Groups ====
 
PGRP likely stands for Performance Group, a term referenced by a few objects.


{| class="wikitable"
{| class="wikitable"
! Type
! Type
! Size
! Count
! Description
! Name
! Notes
|-
|-
| [[Section Header (Tropical Freeze)|Section Header]]
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 0x18
| 1
| '''"PGRP" section header'''
| '''Performance Groups Descriptor'''
| Data type is <code>PGRP</code>
|-
|-
| u16
| u16
| 2
| 1
| '''Count'''
| '''Performance Group Count'''
|
|-
| [[#Performance Group|Performance Group]]
| ''Performance Group Count''
| '''Performance Groups'''
|
|}
|}


For count:
===== Performance Group =====


{| class="wikitable"
{| class="wikitable"
! Type
! Type
! Size
! Count
! Description
! Name
! Notes
|-
|-
| u32
| u32
| 4
| 1
| '''Name length'''
| '''Name Length'''
|
|-
|-
| string
| char
| -
| ''Name Length''
| '''Name''' (not zero-terminated)
| '''Performance Group Name'''
| Not zero-terminated
|-
|-
| u128
| GUID
| 0x10
| 1
| '''ID'''
| '''PerformanceGroupController Instance GUID'''
|
|-
|-
| u8
| bool
| 1
| 1
| {{unknown|'''Unknown'''}}
| {{unknown|'''Unknown'''}}
|
|-
|-
| u16
| u16
| 2
| 1
| '''ID count''' (IC)
| '''Layer Count'''
|
|-
|-
| u128
| GUID
| 0x10 * IC
| ''Layer Count''
| '''IDs'''
| '''Layer GUIDs'''
|
|}
|}


=== LGEN ===
==== Generated Object Map ====


{| class="wikitable"
{| class="wikitable"
! Type
! Type
! Size
! Count
! Description
! Name
! Notes
|-
|-
| [[Section Header (Tropical Freeze)|Section Header]]
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 0x18
| 1
| '''"LGEN" section header'''
| '''Generated Object Map Descriptor'''
| Data type is <code>LGEN</code>
|-
|-
| u16
| u16
| 2
| 1
| '''Count'''
| '''Count'''
|
|-
| [[#Generated Object|Generated Object]]
| ''Count''
| '''Generated Object Array'''
|
|}
===== Generated Object =====
{| class="wikitable"
! 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
|}
|}


For count:
==== Load Unit ====


{| class="wikitable"
{| class="wikitable"
! Type
! Type
! Size
! Count
! Description
! Name
! Notes
|-
| [[Form Descriptor (Tropical Freeze)|Form Descriptor]]
| 1
| '''Load Unit Descriptor'''
| Data type is <code>LUNT</code>
|-
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 1
| '''Load Unit Header Descriptor'''
| Data type is <code>LUHD</code>
|-
|-
| u128
| u32
| 0x10
| 1
| '''ID'''
| '''Name Length'''
|
|-
|-
| u128
| char
| 0x10
| ''Name Length''
| '''ID'''
| '''Load Unit Name'''
| For some reason these seem to generally have really short names (sometimes a single character).
|-
| GUID
| 1
| {{unknown|'''Unknown'''}}
| Probably the GUID for this load unit
|-
| u16
| 1
| {{unknown|'''Unknown'''}}
|
|-
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 1
| '''Load Unit Resources Descriptor'''
| Data type is <code>LRES</code>
|-
| 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 (Tropical Freeze)|Chunk Descriptor]]
| 1
| '''Load Unit Layers Descriptor'''
| Data type is <code>LLYR</code>
|-
| 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.)
|}
|}


=== COMP ===
=== Layer ===


{| class="wikitable"
{| class="wikitable"
! Type
! Type
! Size
! Count
! Description
! Name
! Notes
|-
|-
| [[Section Header (Tropical Freeze)|Section Header]]
| [[Form Descriptor (Tropical Freeze)|Form Descriptor]]
| 0x18
| 1
| '''"COMP" section header'''
| '''Layer Form Descriptor'''
| Data type is <code>LAYR</code>
|-
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 1
| '''Layer Header Descriptor'''
| Data type is <code>LHED</code>
|-
| u32
| 1
| '''Name Length'''
|
|-
| char
| ''Name Length''
| '''Layer Name'''
|
|-
| GUID
| 1
| '''Layer ID'''
|
|-
|-
| u32
| u32
| 4
| 1
| '''Object type'''
| {{unknown|'''Unknown'''}}
|
|-
| GUID
| 1
| {{unknown|'''Unknown'''}}
|
|-
| bool
| 1
| {{unknown|'''Unknown'''}}
|
|-
| [[Form Descriptor (Tropical Freeze)|Form Descriptor]]
| 1
| '''Generated Script Object Descriptor'''
| Data type is <code>GSRP</code>.
|-
| [[#Generated Game Object|Generated Game Object]]
| Varies
| '''Generated Game Objects'''
| Unsure if there is a generated object count.
|-
| [[Form Descriptor (Tropical Freeze)|Form Descriptor]]
| 1
| '''Script Object Descriptor'''
| Data type is <code>SRIP</code>
|-
| [[#Game Object Component|Game Object Component]]
| Varies
| '''Components'''
| Unsure if there is a layer component count.
|}
 
==== Generated Game Object ====
 
{| class="wikitable"
! Type
! Count
! Name
! Notes
|-
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 1
| '''Generated Game Object Descriptor'''
| Data type is <code>GGOB</code>
|-
| GUID
| 1
| '''Generated Game Object ID'''
|
|-
| u16
| 1
| {{unknown|'''Unknown'''}}
|
|-
| [[#Game Object Component|Game Object Component]]
| Varies
| '''Components'''
|
|}
 
==== Game Object Component ====
 
{| class="wikitable"
! Type
! Count
! Name
! Notes
|-
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 1
| '''Component Descriptor'''
| Data type is <code>COMP</code>
|-
| u32
| 1
| '''[[#Component Types|Component Type]]'''
| This appears to be a hash of the component name.
|-
|-
| u128
| GUID
| 0x10
| 1
| '''Instance ID'''
| '''Instance ID'''
|
|-
|-
| u32
| u32
| 4
| 1
| '''Instance name length'''
| '''Name Length'''
|
|-
|-
| string
| char
| -
| ''Name Length''
| '''Instance name''' (not zero-terminated)
| '''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:''
 
{| class="wikitable"
! Type
! Count
! Name
! Notes
|-
|-
| u16
| u16
| 2
| 1
| '''Connection count'''
| '''Connection Count'''
|
|-
| [[#Connection|Connection]]
| ''Connection Count''
| '''Connection Array'''
| These establish links to other components to allow them to interact
|-
| u32
| 1
| '''Property Count'''
|
|-
| [[#Property|Property]]
| ''Property Count''
| '''Object Properties'''
|
|}
|}


Each connection is structured as:
''GameObject structure:''


{| class="wikitable"
{| class="wikitable"
! Offset
! Type
! Type
! Size
! Count
! Description
! Name
! Notes
|-
| u32
| 1
| '''Sub-Component Count'''
|
|-
| [[#Sub-Component|Sub-Component]]
| ''Sub-Component Count''
| '''Sub-Component Array'''
| Seems to describe other script components that are children of this one.
|-
| bool
| 1
| {{unknown|'''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).
|-
|-
| 0x0
| vector3
| char[4]
| 1
| '''Scale'''
|
|}
 
===== Connection =====
 
{| class="wikitable"
! Type
! Count
! Name
! Notes
|-
| char
| 4
| 4
| '''State'''
| '''Event'''
| Event that causes the connection to trigger. (These are what were called States in the previous games.)
|-
|-
| 0x4
| char
| char[4]
| 4
| 4
| '''Message'''
| '''Action'''
| Action that the connected object should execute when the connection triggers. (These are what were called Messages in the previous games.)
|-
|-
| 0x8
| GUID
| u128
| 1
| 0x10
| '''Target Instance ID'''
| '''Target Instance ID'''
| Instance ID of the target object.
|-
| u32
| 1
| {{unknown|'''Unknown'''}}
|
|}
===== Property =====
{| class="wikitable"
! Type
! Count
! Name
! Notes
|-
|-
| 0x18
| u32
| u32
| 1
| '''Property ID'''
| 32-bit hash of the property name.
|-
| u16
| 1
| '''Property Size'''
|
|-
| {{unknown|}}
| {{unknown|}}
| '''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.
{| class="wikitable"
! Type
! Count
! Name
! Notes
|-
| char
| 4
| 4
| '''Type'''
| Usually <code>COMP</code>, but sometimes other things like <code>IL00</code>. Not sure what it means.
|-
| GUID
| 1
| '''Component ID'''
|
|-
| bool
| 1
| {{unknown|'''Unknown'''}}
| {{unknown|'''Unknown'''}}
| Might be an Active/Enabled flag.
|}
|}


Following is property data; size and contents vary by object type.
== Component Types ==
 
==== Object Types ====


{| class="wikitable"
{| class="wikitable"
! ID
! ID
! Object
! Component
|-
| 0x749749F1
| GameObject
|-
| 0x4EC5FA3A
| FakePlayerControls
|-
| 0x57153AA4
| StaticCollision
|-
| 0x41956904
| RenderWorld
|-
| 0xB4361E7B
| ActorCollision
|-
|-
| 0x2BE8BC19
| 0x2BE8BC19
Line 180: Line 565:
| LightDynamic
| LightDynamic
|-
|-
| 0x73AECD92
| 0xCD098F70
| FogVolume
| Effect
|-
| 0x8FE0BFC9
| Relay
|-
| 0xA7DB53C1
| Counter
|-
| 0xADA85938
| SeaLion
|-
| 0xAAEBA313
| WarusKing
|-
| 0x05DD288E
| Switch
|-
| 0x9E8A4940
| Timer
|-
|-
| 0x7DCAF170
| 0xD616EE8B
| BloomEffect
| ControllerAction
|-
|-
| 0x655C5175
| 0xD898656D
| AudioBusController
| Waypoint
|-
|-
| 0x24D9D323
| 0xF0240D23
| AudioEffect
| PathControl
|-
|-
| 0x8FE0BFC9
| 0x4FE57689
| Relay
| CameraHint
|-
|-
| 0x97E65DDD
| 0x97E65DDD
| TouchableTrigger
| TouchableTrigger
|-
| 0x1A4117AB
| Toucher
|-
|-
| 0xC49D730E
| 0xC49D730E
| TriggerLogic
| 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
| 0x3175DF36
| ApplyDamage
| 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
| 0x06E89BE7
| Health
| Health
|-
|-
| 0xBDE4AB05
| 0xE0AFAF06
| TakeDamage
| 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
| 0x6C5D597D
| NearVisible
| NearVisible
|-
|-
| 0xFDD83489
| 0x3449A5DF
| Sound
| Swimmer
|-
|-
| 0xD898656D
| 0x591D8F55
| Waypoint
| CharacterPrimitivesCollision
|-
|-
| 0x90D8D3CE
| 0x90D8D3CE
| RenderMethodResolver
| RenderMethodResolver
|-
|-
| 0xB4361E7B
| 0xBD4CFA2F
| ActorCollision
| 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
|-
|-
| 0x10EA9EC8
| 0x160E9AF9
| ObjectFollow
| RoomSettings
|-
|-
| 0x2C4F2D31
| 0x5746A908
| SplineMotion
| DynamicActorControl
|-
|-
| 0xCD098F70
| 0x59276E0E
| Effect
| HUDAnchor
|-
|-
| 0xF0240D23
| 0xF442A668
| PathControl
| TimeKeyframe
|-
|-
| 0xDE522669
| 0xB6040870
| Generator
| RelayProbabilityGameMode
|-
|-
| 0x07E3137F
| 0xF3847DE3
| TraceObject
| FlyingPickupEffect
|-
|-
| 0x212BCDF5
| 0x212BCDF5
| SimpleShadow
| SimpleShadow
|-
| 0x655C5175
| AudioBusController
|-
| 0xF6751A5D
| PlayerKeyframe
|-
| 0xC04DAF13
| BreathMonitor
|-
| 0x4C7B9FC8
| DirectionalIrradianceProbes
|-
| 0x0BE7FC29
| SurfaceControl
|-
| 0xB6EC1A51
| SimpleSound
|-
| 0xD2CAC9A5
| LightGroupProxy
|-
| 0xDFD2A23A
| DialogPanel
|-
| 0xBCCB1B30
| MinecartPathManager
|-
|-
| 0xD856F6B9
| 0xD856F6B9
| Imposter
| Imposter
|-
|-
| 0x749749F1
| 0xBD040603
| Everything
| 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
|}
|}


[[Category:File Formats]]
[[Category:File Formats]]
[[Category:Donkey Kong Country: Tropical Freeze]]
[[Category:Donkey Kong Country: Tropical Freeze]]
Anonymous user

Navigation menu