ROOM (File Format): Difference between revisions

From Retro Modding Wiki
Jump to navigation Jump to search
>Aruki
No edit summary
>Aruki
 
(8 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"
! Type
! Count
! Name
! Notes
|-
| [[Form Descriptor (Tropical Freeze)|Form Descriptor]]
| 1
| '''Header Descriptor'''
| Data type is <code>HEAD</code>
|-
| [[#Room Header|Room Header]]
| 1
| '''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"
{| class="wikitable"
! Type
! Type
! Size
! Count
! Description
! Name
! Notes
|-
|-
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 0x18
| 1
| '''RMHD chunk descriptor'''
| '''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
|-
|-
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 0x18
| 1
| '''PGRP chunk descriptor'''
| '''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
|-
|-
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 0x18
| 1
| '''LGEN chunk descriptor'''
| '''Generated Object Map Descriptor'''
| Data type is <code>LGEN</code>
|-
|-
| u16
| u16
| 2
| 1
| '''Count'''
| '''Count'''
|
|-
| [[#Generated Object|Generated Object]]
| ''Count''
| '''Generated Object Array'''
|
|}
|}


For count:
===== Generated Object =====


{| class="wikitable"
{| class="wikitable"
! Type
! Type
! Size
! Count
! Description
! Name
! Notes
|-
|-
| u128
| GUID
| 0x10
| 1
| '''ID'''
| '''Generated Object ID'''
|
|-
|-
| u128
| GUID
| 0x10
| 1
| '''ID'''
| '''Layer ID'''
| This is the ID of the layer that contains the above generated object
|}
|}


=== COMP ===
==== 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]]
| [[Chunk Descriptor (Tropical Freeze)|Chunk Descriptor]]
| 0x18
| 1
| '''COMP chunk descriptor'''
| '''Load Unit Header Descriptor'''
| Data type is <code>LUHD</code>
|-
|-
| u32
| u32
| 4
| 1
| '''Object type'''
| '''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|'''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.)
|}
 
=== Layer ===
 
{| class="wikitable"
! Type
! Count
! Name
! Notes
|-
| [[Form Descriptor (Tropical Freeze)|Form Descriptor]]
| 1
| '''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
| 1
| {{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'''
|
|-
|-
| 0x0
| vector3
| char[4]
| 1
| '''Rotation'''
| Euler XYZ angles in degrees (presumably in ZYX order like the previous games).
|-
| vector3
| 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 ==
 
==== Component Types ====


{| class="wikitable"
{| class="wikitable"

Latest revision as of 11:24, 6 June 2016

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.

Header

Type Count Name Notes
Form Descriptor 1 Header Descriptor Data type is HEAD
Room Header 1 Room Header
Performance Groups 1 Performance Groups
Generated Object Map 1 Generated Object Map
Load Unit Varies Load Units Unsure whether there's a count of these

Room Header

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

Type Count Name Notes
Chunk Descriptor 1 Generated Object Map Descriptor Data type is LGEN
u16 1 Count
Generated Object Count Generated Object Array
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

Type Count Name Notes
Chunk Descriptor 1 Generated Game Object Descriptor Data type is GGOB
GUID 1 Generated Game Object ID
u16 1 Unknown
Game Object Component Varies Components

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 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.
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