XML:ONLV: Difference between revisions

From OniGalore
Jump to navigation Jump to search
mNo edit summary
m (→‎Level files hierarchy: um, what is AKEB? is it AKBA? =^_^=)
 
(243 intermediate revisions by 8 users not shown)
Line 1: Line 1:
{{finish}}
{{XML_File_Header | prev=ONLD | type=ONLV | next=ONSK | name=Oni Game Level}}


__TOC__


Custom levels that have been created so far:
* [http://oni.bungie.org/community/forum/viewtopic.php?id=1506 Maze]
* [http://oni.bungie.org/community/forum/viewtopic.php?id=1736 Arena]
* [http://oni.bungie.org/community/forum/viewtopic.php?id=1957 Hexagon]
* [http://oni.bungie.org/community/forum/viewtopic.php?id=1938 Junkyard]
* [http://oni.bungie.org/community/forum/viewtopic.php?id=2001 Mini-Partenon]


OCF threads about level creation:
ONLV and AKEV should not be extracted as XML unless it is for the purpose of trouble shooting or research. The extracted XMLs cannot be used for level creation.
* '''[http://oni.bungie.org/community/forum/viewtopic.php?id=2087 "Creating the Lair - A level tutorial"]'''
* [http://oni.bungie.org/community/forum/viewtopic.php?id=1515 "Creating new levels"]
* [http://oni.bungie.org/community/forum/viewtopic.php?pid=33838 "Create levels with pathfinding grids"]
* [http://oni.bungie.org/community/forum/viewtopic.php?id=2000 "More questions about levels"]
* [http://oni.bungie.org/community/forum/viewtopic.php?id=2003 "Sketchup tutorials for making levels"]
* [http://oni.bungie.org/community/forum/viewtopic.php?pid=37252#p37252 "Modding Existing levels - Beta" ("Moveable furniture" post)]


wiki pages about levels:
If you want to create a new level check out the '''[[Creating a level|corresponding tutorial]]'''.
* [[AE:Levels]]
* [[AE:Lightmapping_levels]]
* [[SketchUp_tutorials_and_tips|SketchUp tutorials and tips]]


==ONLV==
{| class="wikitable" width="100%"
!width=150px| XML tag
!width=120px| Content type
! Description
|-
|valign="top"| <ONLV id="...">
|valign="top"| integer
| ONLV's instance number. Should be 0.
|-
|valign="top"| <Name>
|valign="top"| char[64]
| Name of BSL '''folder'''.
: Save game slot and level number are defined inside [[XML:ONLD|ONLD]].
|-
|valign="top"| <Environment>
|valign="top"| link
| Link to [[XML:AKEV|AKEV]] via '''file''' name (AKEV''name'', don't use file suffix .oni)
: Level geometry.
|-
|valign="top"| <Objects>
|valign="top"| link
| Link to [[#OBOA|OBOA]] via '''instance''' number (#''N'').
: The OBOA instance holds doors, animated objects (usually for cutscenes) and pushable objects (which are not used the original game due to unfinished physics code).
|-
|valign="top"| <SkyBox>
|valign="top"| link
| Link to [[XML:ONSK|ONSK]] via '''file''' name (ONSK''name'', don't use file suffix .oni)
: This is the skybox.
|-
|valign="top"| <Characters>
|valign="top"| link
| Link to [[XML:AISA|AISA]] via '''file''' name (AISA''name'', don't use file suffix .oni)
: This "AI Setup Array" is an alternative character list. [[XML:BINA/OBJC/CHAR|BINACHAR]] is more powerful.
|-
|valign="top"| <ObjectQuadMap>
|valign="top"| link
| Link to [[#ONOA|ONOA]] via '''instance''' number (#''N'').
: This "Object Array" holds functional objects – doors, furniture, turrets, triggers and consoles. In addition, it appears that the engine only searches for door-type objects.
|-
|valign="top"| <Particles>
|valign="top"| link
| Link to [[#ENVP|ENVP]] via '''instance''' number (#''N'').
: These "Environment Particle" are traditionally only used for door lock lights and particles used by [[XML:OFGA|OFGAs]].
|-
|valign="top"| <Corpses>
|valign="top"| link
| Link to [[#CRSA|CRSA]] via '''instance''' number (#''N'').
: This is a "Corpse Array". It's used to spawn dead characters such as Chung in Chapter 1.
|}


For praxis information see: "Creating the Lair - A level tutorial" link.
==OBOA==
Used for movable/moving objects.


{| class="wikitable" width="100%"
!width=150px| XML tag
!width=120px| Content type
! Description
|-
| <OBOA id="...">
| integer
| Instance ID. Should be 1.
|-
| <Objects>
| -
| Array of <OBOAObject> tags.
|-
| <OBOAObject>
| -
| There are always 32 empty objects plus those that are actually used
|-
| <Geometry>
| "#" + integer
| Link to M3GA instance. Doors have two separate models: an animated and a static one. If this <Geometry> links to a door, it will be the animated model.
|-
| <Animation>
| link
| OBAN''name''.
|-
| <Particle>
| # + integer
| Link to ENVP instance. There can be multiple ENVP instances – one for a lock light and others for additional particles.
|-
|valign="top"| <Flags>
|valign="top"| flags
|
: None
: InUse
: NoCollision (any effect? no collision is default behavior)
: NoGravity
: FaceCollision (for doors)
|-
| <DoorGunkId>
| int32
| The index of the door frame GQ (only used for door objects)
|-
| <DoorId>
| int32
| Only used for doors; in the case of double doors, both doors have the same ID and they are flagged as "InUse FaceCollision"
|-
|valign="top"| <PhysicsType>
|valign="top"| flags
|
: None
: Static
: Linear (pushable object)
: Animated (animated via OBAN)
: Newton (same as Linear)
|-
| <ScriptId>
| int32
| Scripting ID; used by BSL function '''obj_create'''; "65535" means not used.
|-
| <Position>
| vector
| Float x3. Not used for animated objects.
|-
| <Rotation>
| quaternion
| Float x4. Not used for animated objects.
|-
| <Scale>
| float
| Not used for animated objects.
|-
| <Transform>
| matrix
| Float 3*3 + 3 more floats for the X Y Z position of the object. For more information on the matrix, see [[OBD:CRSA]]. Used for animated objects.
|-
| <Name>
| char[64]
| Name of the object; informational only.
|}


==ONLV: Oni Level==
==ONOA==
file structure
Used by static objects (imported by object list).


* ONLV instance
{| class="wikitable" width="100%"
: <Name> - this is your BSL folder (save game slot and level number are defined inside [[OBD_talk:ONLD|ONLD]])
!width=150px| XML tag
: <Environment> - link to AKEV file (solid level geometry)
!width=120px| Content type
: <Objects> - link to OBOA instance (animated level geometry, sometimes particles)
! Description
: <SkyBox> - link to skybox file
|-
: <Characters> - link to AISA file (pendant of [[OBD_talk:BINA/OBJC/CHAR#XML|BINACJBOCharacter file]]), holds character spawn collection
| <ONOA id="...">
: <ObjectQuadMap> - link to ONOA instance (maybe spawnable / function holding objects ?)
| integer
: <Particles> - link to ENVP instance (pendant of [[OBD_talk:BINA/OBJC/PART|BINACJBOParticle]]), holds particle spawn collection, door lock lights are typically stored inside ENVP
| Instance ID.
: <Corpses> - link to CRSA instance (corpses consist of 19 body parts)
|-
* OBOA instance
| <Elements>
: ...
| -
* ONOA instance
| This is an int32 array for the <ONOAElement> tags.
: ...
|-
* ENVP instance
| <ONOAElement>
: ...
| -
* CRSA instance
|
: ...
|-
* M3GA
|valign="top"| <ObjectId>
: ...
|valign="top"| integer
* IDXA
| Object ID and type to which this quad belongs (see AKEV's [[XML:AKEV#AGQG|AGQG]] for details).
: ...
: Actual object IDs can also be found in BINA/OBJC/####.
 
|-
 
| <QuadList>
 
| "#" + integer
'''flags in the <OBOAObject> section'''
| Link to IDXA instance. Each object has its own IDXA instance.
 
|}
these are also used for the physics.xml file
: '''<Flags>'''
:: <!-- None -->
:: InUse
:: NoCollision
:: NoGravity
:: FaceCollision
: '''<PhysicsType>'''
:: None
:: Static
:: Linear
:: Animated
:: Newton
 
 
 
Sample code from a trimmed warehouse level.
 
<font color="#FF0000">'''''[...]'''''</font> mean another Corpse code block. There are usually 20 in total. They are somehow needed to prevent bugs.
 
<?xml version="1.0" encoding="utf-8"?>
<Oni>
    <ONLV id="0">
        <Name>EnvWarehouse</Name>
        <Environment>AKEVEnvWarehouse</Environment>
        <Objects>#1</Objects>
        <SkyBox>ONSKafternoon</SkyBox>
        <Characters>AISAlevel1_scripts</Characters>
        <ObjectQuadMap>#2</ObjectQuadMap>
        <Particles>#3</Particles>
        <Corpses>#4</Corpses>
    </ONLV>
    <OBOA id="1">
        <Objects />
    </OBOA>
    <ONOA id="2">
        <Elements />
    </ONOA>
    <ENVP id="3">
        <Particles />
    </ENVP>
    <CRSA id="4">
        <FixedCount>0</FixedCount>
        <UsedCount>0</UsedCount>
        <Corpses>
            <CRSACorpse>
                <CharacterClass></CharacterClass>
                <Transforms>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                    <Matrix4x3>0 0 0 0 0 0 0 0 0 0 0 0</Matrix4x3>
                </Transforms>
                <BoundingBox>
                    <Min>0 0 0</Min>
                    <Max>0 0 0</Max>
                </BoundingBox>
            </CRSACorpse>
          <font color="#FF0000">'''''[...]'''''</font>
        </Corpses>
    </CRSA>
</Oni>
 
'''not empty OBOA - example from level 19'''
 
(exported ONLV files seem to contain 32 empty <OBOAObject> sections)
 
If I remember correctly this one is only an object for the cutscene. Maybe the real floor(s) (those with collision) can be tracked down with the id used by bsl.


Where do the links go to again?


ONOA <ObjectId> -> AKEV AGQG -> BINA/OBJC/#### by type and ID
ONOA <QuadList> -> ONOA IDXA -> AKEV AGQG by order


            <OBOAObject>
==ENVP==
                <Geometry>#347</Geometry>
{| class="wikitable" width="100%"
                <Animation>OBANDishFloor01</Animation>
!width=150px| XML tag
                <Particle></Particle>
!width=120px| Content type
                <Flags>InUse</Flags>
! Description
                <DoorGunkId>0</DoorGunkId>
|-
                <DoorId>0</DoorId>
| <ENVP id="...">
                <PhysicsType>Animated</PhysicsType>
| integer
                <ScriptId>204</ScriptId>
| Instance ID.
                <Position>-183 99.59154 -2501.25</Position>
|-
                <Rotation>0.7071067 -1.545431E-08 1.545431E-08 0.7071068</Rotation>
| <Particles>
                <Scale>1</Scale>
| -
                <Transform>1 -4.371139E-08 -5.21253064E-16 0 1.19248806E-08 -1 4.371139E-08 1 1.19248806E-08 -183 99.5815353 -2501.25</Transform>
| This is an int16 array for the <ENVPParticle> tags. If there's not going to be any contents, you put <Particles /> here.
                <Name>object_DishFloor01</Name>
|-
            </OBOAObject>
| <ENVPParticle>
 
| -
 
|
'''not empty ENVP - example from level 19'''
|-
            <ENVPParticle>
| <Class>
                <Class>locklight</Class>
| char[64]
                <Tag>mainchamber_locklight01</Tag>
| <font color="#777777">BINA3RAP</font>file<font color="#777777">.oni</font> <font color="#777777">(don't use file prefix/suffix)</font>.
                <Transform>1 -4.559326E-08 1.35404189E-05 -1.354042E-05 -2.03512554E-05 1 -4.53176945E-08 -1 -2.03512554E-05 -391.790527 58.0480423 -1364.412</Transform>
|-
                <DecalScale>1 1</DecalScale>
| <Tag>
                <Flags></Flags>
| char[48]
            </ENVPParticle>
| Particle's scripting name for BSL commands; see [[XML:OFGA#XML_tags|OFGA]] for more information on name composition.
 
|-
<Transform> - the last 3 values are the position (x, y, z)
| <Transform>
 
| matrix
<Flags>
| Float 3*3 + 3 more floats for the X Y Z position of the particle. For more information on the matrix, see [[OBD:CRSA]].
: <!-- None -->
|-
| <DecalScale>
| int32, int32
| X Y
|-
|valign="top"| <Flags>
|valign="top"| flag
|
: None
: NotInitiallyCreated  
: NotInitiallyCreated  
|}


==CRSA==
{| class="wikitable" width="100%"
!width=150px| XML tag
!width=120px| Content type
! Description
|-
| <CRSA id="...">
| integer
| Instance ID.
|-
|valign="top"| <FixedCount>
|valign="top"| integer
| The array capacity of <Corpses> is larger than the number of "fixed"/"used" corpses in order to allow the engine to store new corpses at runtime. "Fixed" means that those corpses are never overwritten/deleted at runtime – all new corpses are stored after the "fixed" ones. This means that "fixed" <= "used" <= "capacity".
|-
| <UsedCount>
| integer
|-
|valign="top"| <Corpses>
|valign="top"| -
| This is an int32 array for the <CRSACorpse> tags. By default, Oni wants 20 slots for corpses. Unused corpses have their matrix and bounding box filled with zeroes.
|-
|valign="top"| <CRSACorpse>
|valign="top"| -
| [[Authoring_custom_camera_animations|New corpses]] can be made with the BSL command '''make_corpse filename''' and some hex-editing. The pose of the corpse is taken from the player character. The contents of the files thus created can then be inserted as elements in a level's CRSA.
|-
| <CharacterClass>
| link
| [[XML:ONCC|ONCC]]''name''
|-
| <Transforms>
| -
| There are 19 <Matrix4x3> for each <Transforms> (which represents a body part).
|-
| <Matrix4x3>
| matrix
| Float 3x3 + float x3 for the last 3 values (X Y Z position). For more information about the matrix, see [[OBD:CRSA]].
|-
| <BoundingBox>
| -
| Bounding box of the whole corpse.
|-
| <Min>
| float x3
|
|-
| <Max>
| float x3
|
|}


===spawnable geometry===
==M3GA==
In Oni's last level, the platform of the big satellite dish can be spawned/deleted from BSL. Characters on it will fall down when the platform becomes deleted (tested long time ago).
There can be one M3GA instance per animated object. Animated meshes of doors are embedded in ONLV. All other animated meshes are stored outside it as M3GM files.


If OBOA import is not allowed maybe we can add more such things with the physics.xml and then use the <ScriptId> for BSL?
{| class="wikitable" width="100%"
!width=150px| XML tag
!width=120px| Content type
! Description
|-
| <M3GA id="...">
| integer
| Instance ID.
|-
| <Geometries>
| -
| This is an int32 array for the <Link> tags.
|-
|valign="top"| <Link>
|valign="top"| link
|
: #''N'' (instance number) (for non-door)
: M3GM''name'' (for door)
It can happen that you see here references to DAE files. This happens when the ONLV was created with some older OniSplit version (like 0.9.86.0) and if the ONLV was converted to xml in absence of the resources used by M3GA.
|}


==M3GM==
Read about them here [[XML:M3GM|HERE]]. Note that M3GMs have their own component instances: PNTA, VCRA (x2), TXCA, IDXA (x2). Doors store their animated model in ONLV, while the static model comes from BINACJBODOOR.oni, which also links to M3GM files.


Possible applications:
==IDXA==
* grids in front of ventilation shafts (a little door object should be a good alternative here)
{| class="wikitable" width="100%"
* ground/ceiling/objects for cutscenes that become partially destroyed
!width=150px| XML tag
* destrucable walls [http://www.youtube.com/watch?v=qgJUbPWX5yE like in Deus Ex 3] (trigger volume, replacing punch anim with punch-through-wall anim)
!width=120px| Content type
 
! Description
------ 
|-
 
| <IDXA id="...">
Perhaps this will help: http://oni.bungie.org/community/forum/viewtopic.php?pid=36765#p36765
| integer
 
| Instance ID.
In the textures.xml file you can set the environment's collision info by texture.
|-
| <Indices>
| -
| This is an Int32 array for the <Int32> tags.
|-
|valign="top"| <Int32>
|valign="top"| int32
|
; From ONOA to AGQG elements
: Link to <AGQGQuad>s in [[XML:AKEV#AGQG|AGQG]] by order. (The array in AGQG starts with 0, so for example <Int32>6</Int32> would link to the 7th <AGQGQuad>.)
; From M3GM to PNTA elements
: Read more [[XML:M3GM#PNTA|HERE]].
; From M3GM to VCRA elements
: Read more [[XML:M3GM#VCRA|HERE]].
|}


Also, you can add OBAN in the physics.xml file like this, though I have not fully tested this.
==Level files hierarchy==
 
{| width="100%" style="text-align:center; empty-cells: hide"
        <Object Name="object_Zipthing01">
|width="20%" style="background-color:#CCFFCC;"| (un)colored cell = file
            <ScriptId>71</ScriptId>
|width="20%" style="background-color:#CCFFCC; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| striped cell = embedded instance
            <Geometry>M3GMZipthing01.oni</Geometry>
|width="20%"|
            <Animation>OBANZipthing01.oni</Animation>
|width="20%"|
        </Object>
|width="20%"|
 
If you extract the AKEV for the compound level, the big dish is part of the environment.  env_show is used to show and hide the dish.  However, currently, OniSplit does not support that feature.
 
[[User:EdT|EdT]] 01:11, 6 June 2012 (CEST)
 
 
: Okay, i see, another thing to wait for. Will test the physics.xml a bit during weekend. [[User:Paradox-01|paradox-01]] 12:08, 6 June 2012 (CEST)
 
 
===breakable glass with BSL recognition===
Not tested.
 
BSL command:
: env_broken (ID_1, ID_N)
 
It's used in the training level and determines if glass got shot through or not. How do we set such things up?
 
 
===texture exchange===
Not tested.
 
([[OBD:IDXA_AKEV_2]])
 
BSL command [[BSL:PC_vs._Mac_Comparison_(table)|supported]] by PC and Mac:
: env_texswap ID texture
 
Might be useful to switch on/off static and animated textures. (News screen: running or off or smashed. Lava stream: flowing or stagnating or cooled down. Etc.)
 
 
==AKEV: Akira Environment==
Somehow I would like to have the AKEV and ONLV information on one page (like the sound stuff on SNDD). Let's see how this turns out.
 
 
'''AGQG flags''' - appears to be used by '''textures.xml <GunkFlags>''' (just some or all of them ?)
<!-- : None -->
: DoorFrame (invisible quad that uses the TXMP_DOOR_FRAME texture)
: Ghost (pathfinding volume separator, see [[OBD:AKVA|AKVA]] etc)
: StairsUp
: StairsDown
: Stairs
: Triangle
: Transparent
: TwoSided
: NoCollision
: Invisible
: NoObjectCollision
: NoCharacterCollision
: NoOcclusion
: Danger
: Horizontal (slope > 70°)
: Vertical (slope < 70°)
: GridIgnore
: NoDecals
: Furniture
: ProjectionBit0
: ProjectionBit1
: SoundTransparent
: Impassable
 
 
'''(Copied from hex page. Is this still up to date ?)'''
 
;Triangles
:Many quads are in fact triangles: the last two vertices have the same [[OBD:PNTA|PNTA]] and [[OBD:TXCA|TXCA]] entries, and the ARGB color is (255, 205, 205, 205) (80% gray, 100% opaque). There is also a flag specifying that.
 
;Ghost, StairsUp, StairsDown
:These flags are used for BNV adjacencies, see [[AKAA]]. Stairs up/down are used instead of Ghost when the quad is placed at the bottom/top of the stairs. These quads are not visibile. The script variable env_show_ghostgqs is intended to control the visibility of such quads but it requires "debug" level files.
 
:There are a couple of ghost quads that aren't referenced from [[AKAA]]. It's likely that those quads are useless.
 
;DoorFrame
:This appears to be another type of "ghost" quad (its visibility is controlled by the same env_show_ghostgqs variable). Sometimes it is used together with the Ghost flag but not always. Only the door frames that also have the Ghost flag are used as adjacencies so it's unclear if the rest of the door frames serve any purpose. In fact it appears that this flag has no effect other than making the quad invisible.
 
;Stairs
:This is applied to the invisible ramp quad that covers the stairs. In general this flag is also applied to the visible stairs geometry but there are some exceptions (errors? see level 19 stairs).
 
;NoOcclusion
:This flag tells the octtree raycaster to ignore the quad when doing ray/quad intersections. This is tipically used for small quads that are unlikely to affect the overall environment visibility.
 
;ProjectionBit
:These 2 flags can be 00, 01, 10 and 11. That means the values 0,1,2 and 3 which have the following meanings:
:*0 - No projection plane specified. One can be computed if needed. Never used in files, may slow down the game if used.
:*1 - Project quad on XY plane.
:*2 - Project quad on XZ plane.
:*3 - Project quad on YZ plane.
:The projection plane is used to determine if a point is in a quad (this point is usually the result of an intersection between a ray and the quad plane).
 
;GridIgnore
:Appears to be unused. Its likely purpose is to mark quads that don't count as obstacles in the pathfinding grid.
 
;Danger
:Appears to be unused. Its likely purpose is to create danger areas in the pathfinding grids. Usually there's a trigger volume nearby that hurts/kills the character. This quads are always invisible.
 
;Invisible
:Invisible quads have a couple of different uses:
:* block player access to some parts of the environment
:* stairs ramp
:* collision geometry (used by some "complex" furniture)
:* danger quads (see above)
:* some other apparently useless quads
 
;Furniture
:Set for all quads that belong to a furniture object. It doesn't appear to be used. It is also redundant since all the furniture quads have an object id.
 
;NoDecals
:Prevents the creation of decals on the quad. Set for door quads because the decals would disappear when the door opens. That's why shooting a door doesn't leave a mark.
 
;Impassable
:Probably used by forcefields and end of level boundaries (like in state archive level).
 
 
===import===
* Import doesn't work with empty skybox tag; <Sky>clear</Sky> helps here. (Or maybe onisplit just wants a name and doesn't care if the resource really exists?)
* triangle limit: ca. 520.000 (500.000 to be on save side)
* visible GQs: ca. 16.000, sooner or later higher numbers will cause render bugs and call BSL message "Exceeded max visible GQs ''number''"
 
 
===links to free texture resources===
* [http://www.tutorialsforblender3d.com/Textures/Textures_index.html various game textures]
* [http://forums.epicgames.com/threads/603122-Remus-high-resolution-skydome-texture-pack skies and objects of the solar system]
* [http://blenderartists.org/forum/showthread.php?224065-New-High-resolution-sky-pack-for-Blender skies] <!-- (http://www.wuala.com/Olson/Photos/Optikz_360_Skies/) -->
* [http://blenderartists.org/forum/showthread.php?24038-Free-high-res-skymaps-%28Massive-07-update!%29 skies]
* [http://www.cgtextures.com/ CG Textures for 3D]
* '''''to be expanded'''''
 
==ideas to test out==
None at the moment.
 
==ideas that has been tested==
===sky dome - it's a fail===
{| border=0 cellspacing=20 cellpadding=0 align=right
| sky box<br>[http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/ugly_skybox_lines.jpg http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/ugly_skybox_lines_tn.jpg]
| sky dome<br>[http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/3D_modding/sky_dome_512x512.jpg http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/3D_modding/sky_dome_512x512_tn.jpg]
|}
|}


Maybe it's possible to create a very big sphere or dome that covers the entire level (and let Oni's skybox unused). If it's doable it could avoid ugly lines of the skybox coming from OpenGL rendering.
{|class="wikitable" width="100%" style="text-align:center"
 
|style="background-color:#DDDDDD;"| ONLV
 
|width="20%"|
'''Update:''' 12 June 2012
|width="20%"|
 
|width="20%"|
New issues appeared that need to take care about:
|width="20%"|
 
|-
* brightness:
| [[Image:Chart fork right.gif]]
: The brightness can be somewhat influenced by BSL commands like with gl_fog_..., gs_farclipplane and must be set adequately.
|style="background-color:#CCCCFF;"| AKEV
 
|
* texture size:
|
: The dome seen in the screenshot has a texture size of 512x512 and hence looks quite ''pixelated''.
|
: The problem might be solved by splitting the dome into sectors and giving each sector its own texture.
|-
 
| [[Image:Chart descend.gif]]
 
| [[Image:Chart fork right.gif]]
{| border=0 cellspacing=20 cellpadding=0 align=right
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| PNTA
| gl_fog_start=.99999<br>[http://i305.photobucket.com/albums/nn207/unknownfuture/OCF_Images/sky4sectors_b.jpg http://i305.photobucket.com/albums/nn207/unknownfuture/OCF_Images/sky4sectors_b_tn.jpg]
|
| test level over [http://mods.oni2.net/node/202 HERE]<br>[http://i305.photobucket.com/albums/nn207/unknownfuture/OCF_Images/sky4sectors_a.jpg http://i305.photobucket.com/albums/nn207/unknownfuture/OCF_Images/sky4sectors_a_tn.jpg]
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| PLEA
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| TXCA
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AGQG
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AGQR
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AGQC
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AGQC
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AGDB
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| TXMA
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
| [[Image:Chart turn right.gif]]
| TXMP
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AKVA
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AKBA
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| IDXA
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AKBP
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| ABNA
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AKOT
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| OTIT
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"|OTLF
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| QTNA
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
| [[Image:Chart turn right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| IDXA
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AKAA
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart turn right.gif]]
|style="background-color:#CCCCFF; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| AKDA
|
|
|-
| [[Image:Chart fork right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| OBOA
|
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| M3GA
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
| [[Image:Chart turn right.gif]]
|style="background-color:#FFCCCC;"| M3GM
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
|
| [[Image:Chart fork right.gif]]
|style="background-color:#FFCCCC; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| PNTA
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
|
| [[Image:Chart fork right.gif]]
|style="background-color:#FFCCCC; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| VCRA
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
|
| [[Image:Chart fork right.gif]]
|style="background-color:#FFCCCC; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| TXCA
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
|
| [[Image:Chart fork right.gif]]
|style="background-color:#FFCCCC; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| IDXA
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart descend.gif]]
|
| [[Image:Chart turn right.gif]]
| TXMP
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
| OBAN
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart turn right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| ENVP
|
|
|-
| [[Image:Chart fork right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| ONMA
|
|
|
|-
| [[Image:Chart fork right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| ONFA
|
|
|
|-
| [[Image:Chart fork right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| ONTA
|
|
|
|-
| [[Image:Chart turn right.gif]]
| ONSK
|
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
| TXMP
|
|
|-
| [[Image:Chart fork right.gif]]
| AISA
|
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart fork right.gif]]
| ONCC
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart turn right.gif]]
| ONWC
|
|
|-
| [[Image:Chart fork right.gif]]
| AITR
|
|
|
|-
| [[Image:Chart fork right.gif]]
| ONSA
|
|
|
|-
| [[Image:Chart fork right.gif]]
| OBDC
|
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart turn right.gif]]
|style="background-color:#FFFFAA;"| M3GM
|
|
|-
| [[Image:Chart descend.gif]]
|
| [[Image:Chart fork right.gif]]
|style="background-color:#FFFFAA; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| PNTA
|
|-
| [[Image:Chart descend.gif]]
|
| [[Image:Chart fork right.gif]]
|style="background-color:#FFFFAA; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| VCRA
|
|-
| [[Image:Chart descend.gif]]
|
| [[Image:Chart fork right.gif]]
|style="background-color:#FFFFAA; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| TXCA
|
|-
| [[Image:Chart descend.gif]]
|
| [[Image:Chart fork right.gif]]
|style="background-color:#FFFFAA; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| IDXA
|
|-
| [[Image:Chart descend.gif]]
|
| [[Image:Chart turn right.gif]]
| TXMP
|
|-
| [[Image:Chart fork right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| ONOA
|
|
|
|-
| [[Image:Chart descend.gif]]
| [[Image:Chart turn right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| IDXA
|
|
|-
| [[Image:Chart fork right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| ENVP
|
|
|
|-
| [[Image:Chart turn right.gif]]
|style="background-color:#DDDDDD; background-image: repeating-linear-gradient(-45deg, transparent, transparent 10px, rgba(255,255,255,.5) 10px, rgba(255,255,255,.5) 20px);"| CRSA
|
|
|
|-
|
| [[Image:Chart turn right.gif]]
| ONCC
|
|
|}
|}


'''Update:''' 14 June 2012
{{XML}}
 
* texture boarder and distortions:
: Texture boarders have darker pixels so the UV must not reach them. Also after splitting the textures inside the editor there will be little distortions but they are still noticeable enough to make the sky look odd. Fine-tuning the UVs didn't really help.
 
* The gs_farclipplane max value makes the size of the dome quite limited: I think that the max radius here is somewhere between 2500 and 5000 world units.
 
I consider this as a ''fail''. Oni would need bigger view range and a texture support of 2096x2096.
 
 
==ideas for onisplit==
Neo might update OniSplit so that it is searching specific strings in object names of a dae level file.
 
 
'''Cutscene cams'''
* string "cutscene''N''" (e.g. cutscene231) -> OBAN
 
 
'''Doors'''
* string "door*" (e.g. doorBlastDoorMX2000) -> DOOR + BINACJBODoor + OBAN
** but if the string is "door*clone''N''" then the DOOR and OBAN creation gets skipped (e.g. doorBlastDoorMX2000clone3), only class name, rotation and position get written into BINACJBODoor
 
 
'''Animated objects'''
* string "*_BeforeAnim": that's first static object with collision data (e.g. BlueCar1_BeforeAnim)
* string "*_InAnim": that's the animated cutscene object (e.g. BlueCar1_InAnim)
* string "*_AfterAnim": that's the second static object with collision data (e.g BlueCar1_AfterAnim)
 
 
'''Fake-destructible objects'''
* string "*_BeforeAnim": that's first static object with collision data (e.g. ConcreteWall2_BeforeAnim)
* string "*_Fragment''N''": that's the group of animated cutscene objects (fragments of the static object) (e.g. ConcreteWall2_Frag5)
* string "*_ColFrag''N''": that's the group of static objects with collision data (e.g. ConcreteWall2_ColFrag5)
* string "*_NoColFrag''N''": that's the group of static objects without character collision (e.g. ConcreteWall2_NoColFrag5)<br>NoColFrag would be useful if the fragments are quite numerous and small and hence would pose a problem to the pathfinding

Latest revision as of 18:07, 9 December 2023

ONLV : Oni Game Level
XML modding tips
  • See HERE to start learning about XML modding.
  • See HERE if you are searching for information on how to handle object coordinates.
  • See HERE for some typical modding errors and their causes.
XML.png
XML

ONLD << Other file types >> ONSK

switch to OBD page


ONLV and AKEV should not be extracted as XML unless it is for the purpose of trouble shooting or research. The extracted XMLs cannot be used for level creation.

If you want to create a new level check out the corresponding tutorial.

ONLV

XML tag Content type Description
<ONLV id="..."> integer ONLV's instance number. Should be 0.
<Name> char[64] Name of BSL folder.
Save game slot and level number are defined inside ONLD.
<Environment> link Link to AKEV via file name (AKEVname, don't use file suffix .oni)
Level geometry.
<Objects> link Link to OBOA via instance number (#N).
The OBOA instance holds doors, animated objects (usually for cutscenes) and pushable objects (which are not used the original game due to unfinished physics code).
<SkyBox> link Link to ONSK via file name (ONSKname, don't use file suffix .oni)
This is the skybox.
<Characters> link Link to AISA via file name (AISAname, don't use file suffix .oni)
This "AI Setup Array" is an alternative character list. BINACHAR is more powerful.
<ObjectQuadMap> link Link to ONOA via instance number (#N).
This "Object Array" holds functional objects – doors, furniture, turrets, triggers and consoles. In addition, it appears that the engine only searches for door-type objects.
<Particles> link Link to ENVP via instance number (#N).
These "Environment Particle" are traditionally only used for door lock lights and particles used by OFGAs.
<Corpses> link Link to CRSA via instance number (#N).
This is a "Corpse Array". It's used to spawn dead characters such as Chung in Chapter 1.

OBOA

Used for movable/moving objects.

XML tag Content type Description
<OBOA id="..."> integer Instance ID. Should be 1.
<Objects> - Array of <OBOAObject> tags.
<OBOAObject> - There are always 32 empty objects plus those that are actually used
<Geometry> "#" + integer Link to M3GA instance. Doors have two separate models: an animated and a static one. If this <Geometry> links to a door, it will be the animated model.
<Animation> link OBANname.
<Particle> # + integer Link to ENVP instance. There can be multiple ENVP instances – one for a lock light and others for additional particles.
<Flags> flags
None
InUse
NoCollision (any effect? no collision is default behavior)
NoGravity
FaceCollision (for doors)
<DoorGunkId> int32 The index of the door frame GQ (only used for door objects)
<DoorId> int32 Only used for doors; in the case of double doors, both doors have the same ID and they are flagged as "InUse FaceCollision"
<PhysicsType> flags
None
Static
Linear (pushable object)
Animated (animated via OBAN)
Newton (same as Linear)
<ScriptId> int32 Scripting ID; used by BSL function obj_create; "65535" means not used.
<Position> vector Float x3. Not used for animated objects.
<Rotation> quaternion Float x4. Not used for animated objects.
<Scale> float Not used for animated objects.
<Transform> matrix Float 3*3 + 3 more floats for the X Y Z position of the object. For more information on the matrix, see OBD:CRSA. Used for animated objects.
<Name> char[64] Name of the object; informational only.

ONOA

Used by static objects (imported by object list).

XML tag Content type Description
<ONOA id="..."> integer Instance ID.
<Elements> - This is an int32 array for the <ONOAElement> tags.
<ONOAElement> -
<ObjectId> integer Object ID and type to which this quad belongs (see AKEV's AGQG for details).
Actual object IDs can also be found in BINA/OBJC/####.
<QuadList> "#" + integer Link to IDXA instance. Each object has its own IDXA instance.

Where do the links go to again?

ONOA <ObjectId> -> AKEV AGQG -> BINA/OBJC/#### by type and ID
ONOA <QuadList> -> ONOA IDXA -> AKEV AGQG by order

ENVP

XML tag Content type Description
<ENVP id="..."> integer Instance ID.
<Particles> - This is an int16 array for the <ENVPParticle> tags. If there's not going to be any contents, you put <Particles /> here.
<ENVPParticle> -
<Class> char[64] BINA3RAPfile.oni (don't use file prefix/suffix).
<Tag> char[48] Particle's scripting name for BSL commands; see OFGA for more information on name composition.
<Transform> matrix Float 3*3 + 3 more floats for the X Y Z position of the particle. For more information on the matrix, see OBD:CRSA.
<DecalScale> int32, int32 X Y
<Flags> flag
None
NotInitiallyCreated

CRSA

XML tag Content type Description
<CRSA id="..."> integer Instance ID.
<FixedCount> integer The array capacity of <Corpses> is larger than the number of "fixed"/"used" corpses in order to allow the engine to store new corpses at runtime. "Fixed" means that those corpses are never overwritten/deleted at runtime – all new corpses are stored after the "fixed" ones. This means that "fixed" <= "used" <= "capacity".
<UsedCount> integer
<Corpses> - This is an int32 array for the <CRSACorpse> tags. By default, Oni wants 20 slots for corpses. Unused corpses have their matrix and bounding box filled with zeroes.
<CRSACorpse> - New corpses can be made with the BSL command make_corpse filename and some hex-editing. The pose of the corpse is taken from the player character. The contents of the files thus created can then be inserted as elements in a level's CRSA.
<CharacterClass> link ONCCname
<Transforms> - There are 19 <Matrix4x3> for each <Transforms> (which represents a body part).
<Matrix4x3> matrix Float 3x3 + float x3 for the last 3 values (X Y Z position). For more information about the matrix, see OBD:CRSA.
<BoundingBox> - Bounding box of the whole corpse.
<Min> float x3
<Max> float x3

M3GA

There can be one M3GA instance per animated object. Animated meshes of doors are embedded in ONLV. All other animated meshes are stored outside it as M3GM files.

XML tag Content type Description
<M3GA id="..."> integer Instance ID.
<Geometries> - This is an int32 array for the <Link> tags.
<Link> link
#N (instance number) (for non-door)
M3GMname (for door)

It can happen that you see here references to DAE files. This happens when the ONLV was created with some older OniSplit version (like 0.9.86.0) and if the ONLV was converted to xml in absence of the resources used by M3GA.

M3GM

Read about them here HERE. Note that M3GMs have their own component instances: PNTA, VCRA (x2), TXCA, IDXA (x2). Doors store their animated model in ONLV, while the static model comes from BINACJBODOOR.oni, which also links to M3GM files.

IDXA

XML tag Content type Description
<IDXA id="..."> integer Instance ID.
<Indices> - This is an Int32 array for the <Int32> tags.
<Int32> int32
From ONOA to AGQG elements
Link to <AGQGQuad>s in AGQG by order. (The array in AGQG starts with 0, so for example <Int32>6</Int32> would link to the 7th <AGQGQuad>.)
From M3GM to PNTA elements
Read more HERE.
From M3GM to VCRA elements
Read more HERE.

Level files hierarchy

(un)colored cell = file striped cell = embedded instance
ONLV
Chart fork right.gif AKEV
Chart descend.gif Chart fork right.gif PNTA
Chart descend.gif Chart fork right.gif PLEA
Chart descend.gif Chart fork right.gif TXCA
Chart descend.gif Chart fork right.gif AGQG
Chart descend.gif Chart fork right.gif AGQR
Chart descend.gif Chart fork right.gif AGQC
Chart descend.gif Chart fork right.gif AGQC
Chart descend.gif Chart fork right.gif AGDB
Chart descend.gif Chart fork right.gif TXMA
Chart descend.gif Chart descend.gif Chart turn right.gif TXMP
Chart descend.gif Chart fork right.gif AKVA
Chart descend.gif Chart fork right.gif AKBA
Chart descend.gif Chart fork right.gif IDXA
Chart descend.gif Chart fork right.gif AKBP
Chart descend.gif Chart fork right.gif ABNA
Chart descend.gif Chart fork right.gif AKOT
Chart descend.gif Chart descend.gif Chart fork right.gif OTIT
Chart descend.gif Chart descend.gif Chart fork right.gif OTLF
Chart descend.gif Chart descend.gif Chart fork right.gif QTNA
Chart descend.gif Chart descend.gif Chart turn right.gif IDXA
Chart descend.gif Chart fork right.gif AKAA
Chart descend.gif Chart turn right.gif AKDA
Chart fork right.gif OBOA
Chart descend.gif Chart fork right.gif M3GA
Chart descend.gif Chart descend.gif Chart turn right.gif M3GM
Chart descend.gif Chart descend.gif Chart fork right.gif PNTA
Chart descend.gif Chart descend.gif Chart fork right.gif VCRA
Chart descend.gif Chart descend.gif Chart fork right.gif TXCA
Chart descend.gif Chart descend.gif Chart fork right.gif IDXA
Chart descend.gif Chart descend.gif Chart turn right.gif TXMP
Chart descend.gif Chart fork right.gif OBAN
Chart descend.gif Chart turn right.gif ENVP
Chart fork right.gif ONMA
Chart fork right.gif ONFA
Chart fork right.gif ONTA
Chart turn right.gif ONSK
Chart descend.gif Chart fork right.gif TXMP
Chart fork right.gif AISA
Chart descend.gif Chart fork right.gif ONCC
Chart descend.gif Chart turn right.gif ONWC
Chart fork right.gif AITR
Chart fork right.gif ONSA
Chart fork right.gif OBDC
Chart descend.gif Chart turn right.gif M3GM
Chart descend.gif Chart fork right.gif PNTA
Chart descend.gif Chart fork right.gif VCRA
Chart descend.gif Chart fork right.gif TXCA
Chart descend.gif Chart fork right.gif IDXA
Chart descend.gif Chart turn right.gif TXMP
Chart fork right.gif ONOA
Chart descend.gif Chart turn right.gif IDXA
Chart fork right.gif ENVP
Chart turn right.gif CRSA
Chart turn right.gif ONCC