<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.oni2.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mai+X</id>
	<title>OniGalore - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.oni2.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mai+X"/>
	<link rel="alternate" type="text/html" href="https://wiki.oni2.net/Special:Contributions/Mai_X"/>
	<updated>2026-04-22T07:12:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=User:Mai_X&amp;diff=45724</id>
		<title>User:Mai X</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=User:Mai_X&amp;diff=45724"/>
		<updated>2025-10-09T19:12:49Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Corrected occupation...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!About me&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|https://konoko.oni2.net/cila_avatar.PNG&lt;br /&gt;
full version of avatar [http://konoko.oni2.net/%5BImages%5D/%5BSynergia%5D/%5BArts%5D/cila_art.PNG here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!General info&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Nickname:&#039;&#039;&#039; Mai-X, Konoko&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Real name:&#039;&#039;&#039; Cila &amp;lt;code&amp;gt;[&#039;saila]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Age:&#039;&#039;&#039; 18&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Gender:&#039;&#039;&#039; Female&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Orientation:&#039;&#039;&#039; Ficto&lt;br /&gt;
|}&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!Biological info&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Diseases:&#039;&#039;&#039; Epileptic seizures&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Last time occurred:&#039;&#039;&#039; 05.10.2025&lt;br /&gt;
|}&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!Personal info&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Preferences:&#039;&#039;&#039; Acting, Music, 3D-modelling, Archiving data, Digitizing analog audio/video&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Occupation:&#039;&#039;&#039; VGTRK (voiceover actress, camera crew)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Love:&#039;&#039;&#039; [http://konoko.oni2.net/garbage/scaramouche.PNG Scaramouche] (from [https://genshin-impact.fandom.com/wiki/Scaramouche Genshin Impact])&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Contact (e-mail):&#039;&#039;&#039; [mailto:maihasegawa17@gmail.com maihasegawa17@gmail.com]&lt;br /&gt;
|}&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!Current Projects&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Oni related:&#039;&#039;&#039; NG Graphics for Oni (see section below this table for all demos)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Personal:&#039;&#039;&#039; Panasonic NV-M40 complete restoration, Sony VAIO P video playback enhancements&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Work:&#039;&#039;&#039; Voiceovering in VGTRK&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Name:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Okay... it&#039;s true, that my name is Cila... really... Reads as &amp;lt;code&amp;gt;[&#039;saila]&amp;lt;/code&amp;gt; with a stress on first syllable...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Epilepsy:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Yeah... I have seizures... so, my main weakness is flashing light... And after our voiceovering session in InterMediA (at 17.12.2022) we had a &amp;quot;party&amp;quot;... with f**king strobes! Everyone were having fun... before my epileptic seizures occurred...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ah... it&#039;s complicated... excessive emotionality, depression, nightmares... all that are consequences of epilepsy...  whatever, seizures don&#039;t happen too frequently (usually when any conditions affect me), so I can live with them...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Archiving:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
I have a private archiving system of 3 units in 3 independent places... I use it for my digitized copies of VHS/Beta/Video8/MiniDV videos, Compact Cassette audios and some old software (Lightscape, 3D Studio, BFW, MotionDV Studio, etc.)... &lt;br /&gt;
I&#039;ve used it for storing diff... ah... whatever... forget what I said...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Current project:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For now I&#039;m working on graphics update for Oni... It includes lighting system update, normal mapping support, pixel shaders (for camera filter effects), dynamic shadows and unlimited world space... This project is going too slow, because my seizures got worse, but I&#039;ll try to get this project done as fast as I can... Try to guess, how that graphical updates were implemented... I&#039;ll wait for any answers via e-mail or Discussions here... For now I&#039;ve finished demo video of my update ([http://konoko.oni2.net/%5bVideos%5d/OniDemoChief%20(full,%20fixed).MOV Demo video] and [http://konoko.oni2.net/%5bImages%5d/NG_Oni.png Demo image])... I used Master Chief model as a character model, because I&#039;ve not found any high-poly or realistic enough models of Konoko... And Chief is still related to Bungie, so I used him as a player character for my demo...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For now, I&#039;m working on NG-ing the ManPlant level... When it will be ready, I&#039;ll make a video comparison... It&#039;ll show 2 my versions of the engine: Light-weight version with only 2 implemented features (8192x8192 textures and multiplicative-blended OGL lightmaps) and NG version with completely new GFX, procedural animations for characters, IK and &amp;quot;playable&amp;quot; vehicles...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If anybody have &#039;&#039;&#039;any&#039;&#039;&#039; hi-res textures for Oni levels (&#039;&#039;&#039;any&#039;&#039;&#039; level), please send me them through G-Drive (via e-mail or &amp;quot;Discussion&amp;quot; page here)... I&#039;m &#039;&#039;&#039;not&#039;&#039;&#039; speaking about hi-res textures, that are hosted on Mod Depot (I&#039;ve already downloaded all of them)...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Feel free to discuss any of sections (via &amp;quot;Discussion&amp;quot; page or e-mail)... Please, don&#039;t even try to write me in Discord... It is &#039;&#039;&#039;blocked&#039;&#039;&#039; in Russia... If you want to write me something, use e-mail or &amp;quot;Discussion&amp;quot; page here...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Cila&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
19:12, 9 October 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Category:Userspace]]&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=User:Mai_X&amp;diff=45723</id>
		<title>User:Mai X</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=User:Mai_X&amp;diff=45723"/>
		<updated>2025-10-09T19:11:34Z</updated>

		<summary type="html">&lt;p&gt;Mai X: L-T-O + work project...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!About me&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: center;&amp;quot;|https://konoko.oni2.net/cila_avatar.PNG&lt;br /&gt;
full version of avatar [http://konoko.oni2.net/%5BImages%5D/%5BSynergia%5D/%5BArts%5D/cila_art.PNG here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!General info&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Nickname:&#039;&#039;&#039; Mai-X, Konoko&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Real name:&#039;&#039;&#039; Cila &amp;lt;code&amp;gt;[&#039;saila]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Age:&#039;&#039;&#039; 18&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Gender:&#039;&#039;&#039; Female&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Orientation:&#039;&#039;&#039; Ficto&lt;br /&gt;
|}&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!Biological info&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Diseases:&#039;&#039;&#039; Epileptic seizures&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Last time occurred:&#039;&#039;&#039; 05.10.2025&lt;br /&gt;
|}&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!Personal info&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Preferences:&#039;&#039;&#039; Acting, Music, 3D-modelling, Archiving data, Digitizing analog audio/video&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Occupation:&#039;&#039;&#039; InterMediA Studio (voiceover actress, camera crew)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Love:&#039;&#039;&#039; [http://konoko.oni2.net/garbage/scaramouche.PNG Scaramouche] (from [https://genshin-impact.fandom.com/wiki/Scaramouche Genshin Impact])&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Contact (e-mail):&#039;&#039;&#039; [mailto:maihasegawa17@gmail.com maihasegawa17@gmail.com]&lt;br /&gt;
|}&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; align=&amp;quot;center&amp;quot; width=290px&lt;br /&gt;
!Current Projects&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Oni related:&#039;&#039;&#039; NG Graphics for Oni (see section below this table for all demos)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Personal:&#039;&#039;&#039; Panasonic NV-M40 complete restoration, Sony VAIO P video playback enhancements&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left;&amp;quot;| &#039;&#039;&#039;Work:&#039;&#039;&#039; Voiceovering in VGTRK&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Name:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Okay... it&#039;s true, that my name is Cila... really... Reads as &amp;lt;code&amp;gt;[&#039;saila]&amp;lt;/code&amp;gt; with a stress on first syllable...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Epilepsy:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Yeah... I have seizures... so, my main weakness is flashing light... And after our voiceovering session in InterMediA (at 17.12.2022) we had a &amp;quot;party&amp;quot;... with f**king strobes! Everyone were having fun... before my epileptic seizures occurred...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ah... it&#039;s complicated... excessive emotionality, depression, nightmares... all that are consequences of epilepsy...  whatever, seizures don&#039;t happen too frequently (usually when any conditions affect me), so I can live with them...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Archiving:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
I have a private archiving system of 3 units in 3 independent places... I use it for my digitized copies of VHS/Beta/Video8/MiniDV videos, Compact Cassette audios and some old software (Lightscape, 3D Studio, BFW, MotionDV Studio, etc.)... &lt;br /&gt;
I&#039;ve used it for storing diff... ah... whatever... forget what I said...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Current project:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For now I&#039;m working on graphics update for Oni... It includes lighting system update, normal mapping support, pixel shaders (for camera filter effects), dynamic shadows and unlimited world space... This project is going too slow, because my seizures got worse, but I&#039;ll try to get this project done as fast as I can... Try to guess, how that graphical updates were implemented... I&#039;ll wait for any answers via e-mail or Discussions here... For now I&#039;ve finished demo video of my update ([http://konoko.oni2.net/%5bVideos%5d/OniDemoChief%20(full,%20fixed).MOV Demo video] and [http://konoko.oni2.net/%5bImages%5d/NG_Oni.png Demo image])... I used Master Chief model as a character model, because I&#039;ve not found any high-poly or realistic enough models of Konoko... And Chief is still related to Bungie, so I used him as a player character for my demo...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
For now, I&#039;m working on NG-ing the ManPlant level... When it will be ready, I&#039;ll make a video comparison... It&#039;ll show 2 my versions of the engine: Light-weight version with only 2 implemented features (8192x8192 textures and multiplicative-blended OGL lightmaps) and NG version with completely new GFX, procedural animations for characters, IK and &amp;quot;playable&amp;quot; vehicles...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If anybody have &#039;&#039;&#039;any&#039;&#039;&#039; hi-res textures for Oni levels (&#039;&#039;&#039;any&#039;&#039;&#039; level), please send me them through G-Drive (via e-mail or &amp;quot;Discussion&amp;quot; page here)... I&#039;m &#039;&#039;&#039;not&#039;&#039;&#039; speaking about hi-res textures, that are hosted on Mod Depot (I&#039;ve already downloaded all of them)...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Feel free to discuss any of sections (via &amp;quot;Discussion&amp;quot; page or e-mail)... Please, don&#039;t even try to write me in Discord... It is &#039;&#039;&#039;blocked&#039;&#039;&#039; in Russia... If you want to write me something, use e-mail or &amp;quot;Discussion&amp;quot; page here...&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Cila&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
19:24, 30 April 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Category:Userspace]]&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=User_talk:Mai_X&amp;diff=45238</id>
		<title>User talk:Mai X</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=User_talk:Mai_X&amp;diff=45238"/>
		<updated>2025-05-15T20:56:38Z</updated>

		<summary type="html">&lt;p&gt;Mai X: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Projects==&lt;br /&gt;
===Graphical updates===&lt;br /&gt;
That&#039;s an [http://konoko.oni2.net/%5bImages%5d/NG_Oni.png impressive example] you got there. As if it was made in blender. Does it use a HD mod package for the training level?&lt;br /&gt;
&lt;br /&gt;
I can only imaging that you modified the source code and compiled you own executable. Or maybe its part of Oni X or a fork? I didn&#039;t follow the engine modding on discord as they pretty much only (re-)added known bug-fixes?&lt;br /&gt;
&lt;br /&gt;
Anyway, keep us updated, okay? :) --[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 16:39, 24 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Yeah, I used [http://mods.oni2.net/node/92 this] texture pack for my update... I made normal maps from some of textures with [https://www.smart-page.net/smartnormal/ this] service... But I&#039;ve not used Blender for any stage of making my updates (especially, not for rendering)... I&#039;ve used Autodesk Softimage 2015 for assigning materials and shaders... But rendering was done in my own version of engine (BFW-17) with deep code modifications... I don&#039;t support OniX in any way (contributing to it or forking it), so I&#039;ll not be using their engine version or forking it for my modifications...&lt;br /&gt;
:For now, I&#039;m about to finish a small demo video of my graphical updates...&lt;br /&gt;
&lt;br /&gt;
:Of course, I&#039;ll keep you updated... At least, I&#039;ll try to do it as much as I can... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 19:26, 24 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed too! Your work looks very promising. What sort of plans do you have for the future? P.S.: Wasn&#039;t Konoko HD Armor high-poly enough for you? --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 21:59, 28 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:For now, my plan is just to have some rest... Plans for my updates: add better HDR support, implement Autodesk Scaleform for HUD and menus (instead of textures + 9-slice), add JPEG and PNG-ZIP texture compression support, implement GDF compression with LZMA-2... P.S.: Chief model has bundled normal maps with it, has over 60 000 polygons and has 4096x4096 uncompressed textures... HD Konoko is not so HQ as that model... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 07:28, 1 December 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
Today I found the time to watch the video you added. Great work!&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the msVo encoded audio didn&#039;t play so for the fun of it, here&#039;s [http://paradox.oni2.net/wiki/user/Mai_X/talk/Mai_X_OniDemoChief_Mai_X_at_the_new_edge_of_modding.mp4 another version]. ^_^&lt;br /&gt;
&lt;br /&gt;
Like Iritscen said, hopefully you can add Mai (package 26000 [http://paradox.oni2.net/wiki/user/Mai_X/talk/26000_Konoko_HD_Armor.png Konoko HD Armor]) in another iteration of the scene. It&#039;s not super highpoly but for Oni&#039;s standards it&#039;s quite decent. You probably you really wanted to make a point about the high poly count with master chief. Though I cannot stop feeling he is still to much of an &#039;&#039;alien&#039;&#039; there. --[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 19:12, 18 December 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:The original music is called &amp;quot;Velta Theme&amp;quot; from Synergia OST... I&#039;ve re-encoded it to MP3, so you can get it [http://konoko.oni2.net/%5bMusic%5d/Velta%20Theme.MP3 here]...&lt;br /&gt;
:Your version is even better, than mine... Thank you... You&#039;ve got the &amp;quot;atmosphere&amp;quot; of the video completely right...&lt;br /&gt;
:I&#039;ll try to use that model of &amp;quot;HD&amp;quot; Konoko in my next video (featuring ManPlant level; info is on main page)... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 06:43, 6 May 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Let us cheer you up*==&lt;br /&gt;
You enrich society in many ways. But first of all you enrich society by simply being not an ignorant asshole. But for that you need to stay alive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even if nobody tells you - and that proofs even more that your presence is needed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You haven’t founded a family yet? Is that what your parents expect from you? So what? You can still do that later. For now, it means you are still more free to be a [https://www.deviantart.com/ deviant], an unconventional (&amp;quot;eccentric&amp;quot;) and creative person.&lt;br /&gt;
&lt;br /&gt;
I’m not really a friend of geyser, never met him in person, but I know him good enough by our talks to say that I deeply respect him. He was really happy about you when you joined this place and to work with you together. When he said you are a good and capable person, I had no doubt that you are.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Why I’m alive.&amp;quot; That&#039;s the 100 million dollar question most people have to think through at some time point in their life.&lt;br /&gt;
&lt;br /&gt;
Committing suicide helps nobody. If someone tells you so, *punch that &amp;lt;s&amp;gt;asocial&amp;lt;/s&amp;gt; &#039;&#039;&#039;antisocial mobbing bastard&#039;&#039;&#039; hard in the face.&lt;br /&gt;
&lt;br /&gt;
(Of course, this wasn&#039;t an instruction. It was meant to cheer you up and to better let you hold a &#039;&#039;righteous grudge&#039;&#039; against others, than a self-destructive, imaginary one against yourself.)&lt;br /&gt;
--[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 07:58, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
Oh... thank you for that... you and GeySer... only you two can understand me in such moments... Now I feel a little bit better (no suicidal thoughts anymore)... Now I&#039;m trying to stop myself from going to St. Pet. and destroying RAIDs...&lt;br /&gt;
--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 09:32, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
:Sometimes, in order to be true to ourselves, we have to take a course that doesn&#039;t satisfy our parents&#039; wishes. It&#039;s more common than you think. You still have plenty of time to figure out what path you want to take in life. And in the end, your parents probably just want to see you succeed, so if you do that, eventually they&#039;ll be happy. P.S.: I&#039;ve kept all my computer files since my first Mac in 1993 ;-) --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:15, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
::Maybe... maybe that will happen... About archiving: I started it when I was 12, after accidental destruction of Seagate ST32132A (HDD from my first PC)... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 20:40, 30 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::Okay, so starting at the same age as me then :-) I&#039;ve been lucky; I&#039;ve lost HDs but never any data that wasn&#039;t in another place too. These days I have redundant backups of all my data on local HDs and in the cloud. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:28, 30 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
==OBD updates==&lt;br /&gt;
Thanks for your work on those pages, you&#039;ve made some good edits! I was surprised to see so many mistaken inclusions of 0xDEAD space at the ends of types, and had to investigate. It looks like confusion sometimes slipped in during the process of editing a page. For instance [[Special:Permalink/4457|this revision]] of ONCV listed the final bytes starting at 0x4C as 32-byte alignment filler, but the next edit by Ssg wiped out geyser&#039;s description and simply called them &amp;quot;unused&amp;quot;. Perhaps Ssg and other editors knew what they were, but no editors thought to write &amp;quot;alignment padding&amp;quot; instead of &amp;quot;unused&amp;quot; for that range, which is misleading for the reader.&lt;br /&gt;
&lt;br /&gt;
Anyway, I just have one question: are you planning to fill in those offsets where you added a new field but placed &amp;quot;----&amp;quot; for the address? --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 19:36, 12 May 2025 (UTC)&lt;br /&gt;
:I won&#039;t leave those &amp;quot;----&amp;quot; for addresses, of course... I&#039;ll re-calculate those addresses right after I&#039;ll finish cleaning up 0xDEADs and renaming not only paddings back to &amp;quot;padding&amp;quot;, but also all &amp;quot;int&amp;quot; to &amp;quot;&#039;&#039;&#039;u&#039;&#039;&#039;int&amp;quot; where it&#039;s needed...--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 21:51, 12 May 2025 (UTC)&lt;br /&gt;
::Okie. Don&#039;t over-work yourself :-) --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 21:56, 12 May 2025 (UTC)&lt;br /&gt;
::For the record, here are the pages with added fields that have &amp;quot;----&amp;quot; for addresses: OBD:Mtrl, OBD:Impt, &amp;lt;strike&amp;gt;OBD:ENVP&amp;lt;/strike&amp;gt;, OBD:AKEV. Maybe there are others, but those are the ones I noticed. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:02, 13 May 2025 (UTC)&lt;br /&gt;
:::Update: I realized there was room for improvement/clarification on ENVP, so while I was working on that I filled in the offsets as well. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 23:26, 13 May 2025 (UTC)&lt;br /&gt;
::As I&#039;m looking over ONCC, I noticed the note &amp;quot;overridden by char&#039;s MELE profile if possible&amp;quot;, but I&#039;m not seeing that in the code. In fact it looks like the MELE&#039;s &amp;quot;dazed&amp;quot; fields are ignored by Oni entirely. There are various references to them in the editor and importer code, but I don&#039;t see where the game logic looks at them. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 15:54, 14 May 2025 (UTC)&lt;br /&gt;
:::&amp;lt;code&amp;gt;ONI_Character.h, line 167&amp;lt;/code&amp;gt;... It is stated in the dev&#039;s comment...--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 21:29, 14 May 2025 (UTC)&lt;br /&gt;
::::Oh, if only we could rely on developers&#039; comments to be accurate ;-) You&#039;ll notice that the comment right above that one is misleading too, since not all ONCCs have a &amp;lt;code&amp;gt;turning_nimbleness&amp;lt;/code&amp;gt; of 1.0 (see my note on that field on OBD:ONCC). Anyway, BWest&#039;s intention might have been to allow MELE to override the dazed fields, but it seems they never got around to it. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 14:47, 15 May 2025 (UTC)&lt;br /&gt;
:::::I&#039;m sorry... I forgot to trace that field through the code, like I usually do with other fields...--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 20:56, 15 May 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=User_talk:Mai_X&amp;diff=45236</id>
		<title>User talk:Mai X</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=User_talk:Mai_X&amp;diff=45236"/>
		<updated>2025-05-14T21:30:32Z</updated>

		<summary type="html">&lt;p&gt;Mai X: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Projects==&lt;br /&gt;
===Graphical updates===&lt;br /&gt;
That&#039;s an [http://konoko.oni2.net/%5bImages%5d/NG_Oni.png impressive example] you got there. As if it was made in blender. Does it use a HD mod package for the training level?&lt;br /&gt;
&lt;br /&gt;
I can only imaging that you modified the source code and compiled you own executable. Or maybe its part of Oni X or a fork? I didn&#039;t follow the engine modding on discord as they pretty much only (re-)added known bug-fixes?&lt;br /&gt;
&lt;br /&gt;
Anyway, keep us updated, okay? :) --[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 16:39, 24 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Yeah, I used [http://mods.oni2.net/node/92 this] texture pack for my update... I made normal maps from some of textures with [https://www.smart-page.net/smartnormal/ this] service... But I&#039;ve not used Blender for any stage of making my updates (especially, not for rendering)... I&#039;ve used Autodesk Softimage 2015 for assigning materials and shaders... But rendering was done in my own version of engine (BFW-17) with deep code modifications... I don&#039;t support OniX in any way (contributing to it or forking it), so I&#039;ll not be using their engine version or forking it for my modifications...&lt;br /&gt;
:For now, I&#039;m about to finish a small demo video of my graphical updates...&lt;br /&gt;
&lt;br /&gt;
:Of course, I&#039;ll keep you updated... At least, I&#039;ll try to do it as much as I can... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 19:26, 24 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed too! Your work looks very promising. What sort of plans do you have for the future? P.S.: Wasn&#039;t Konoko HD Armor high-poly enough for you? --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 21:59, 28 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:For now, my plan is just to have some rest... Plans for my updates: add better HDR support, implement Autodesk Scaleform for HUD and menus (instead of textures + 9-slice), add JPEG and PNG-ZIP texture compression support, implement GDF compression with LZMA-2... P.S.: Chief model has bundled normal maps with it, has over 60 000 polygons and has 4096x4096 uncompressed textures... HD Konoko is not so HQ as that model... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 07:28, 1 December 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
Today I found the time to watch the video you added. Great work!&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the msVo encoded audio didn&#039;t play so for the fun of it, here&#039;s [http://paradox.oni2.net/wiki/user/Mai_X/talk/Mai_X_OniDemoChief_Mai_X_at_the_new_edge_of_modding.mp4 another version]. ^_^&lt;br /&gt;
&lt;br /&gt;
Like Iritscen said, hopefully you can add Mai (package 26000 [http://paradox.oni2.net/wiki/user/Mai_X/talk/26000_Konoko_HD_Armor.png Konoko HD Armor]) in another iteration of the scene. It&#039;s not super highpoly but for Oni&#039;s standards it&#039;s quite decent. You probably you really wanted to make a point about the high poly count with master chief. Though I cannot stop feeling he is still to much of an &#039;&#039;alien&#039;&#039; there. --[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 19:12, 18 December 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:The original music is called &amp;quot;Velta Theme&amp;quot; from Synergia OST... I&#039;ve re-encoded it to MP3, so you can get it [http://konoko.oni2.net/%5bMusic%5d/Velta%20Theme.MP3 here]...&lt;br /&gt;
:Your version is even better, than mine... Thank you... You&#039;ve got the &amp;quot;atmosphere&amp;quot; of the video completely right...&lt;br /&gt;
:I&#039;ll try to use that model of &amp;quot;HD&amp;quot; Konoko in my next video (featuring ManPlant level; info is on main page)... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 06:43, 6 May 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Let us cheer you up*==&lt;br /&gt;
You enrich society in many ways. But first of all you enrich society by simply being not an ignorant asshole. But for that you need to stay alive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even if nobody tells you - and that proofs even more that your presence is needed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You haven’t founded a family yet? Is that what your parents expect from you? So what? You can still do that later. For now, it means you are still more free to be a [https://www.deviantart.com/ deviant], an unconventional (&amp;quot;eccentric&amp;quot;) and creative person.&lt;br /&gt;
&lt;br /&gt;
I’m not really a friend of geyser, never met him in person, but I know him good enough by our talks to say that I deeply respect him. He was really happy about you when you joined this place and to work with you together. When he said you are a good and capable person, I had no doubt that you are.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Why I’m alive.&amp;quot; That&#039;s the 100 million dollar question most people have to think through at some time point in their life.&lt;br /&gt;
&lt;br /&gt;
Committing suicide helps nobody. If someone tells you so, *punch that &amp;lt;s&amp;gt;asocial&amp;lt;/s&amp;gt; &#039;&#039;&#039;antisocial mobbing bastard&#039;&#039;&#039; hard in the face.&lt;br /&gt;
&lt;br /&gt;
(Of course, this wasn&#039;t an instruction. It was meant to cheer you up and to better let you hold a &#039;&#039;righteous grudge&#039;&#039; against others, than a self-destructive, imaginary one against yourself.)&lt;br /&gt;
--[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 07:58, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
Oh... thank you for that... you and GeySer... only you two can understand me in such moments... Now I feel a little bit better (no suicidal thoughts anymore)... Now I&#039;m trying to stop myself from going to St. Pet. and destroying RAIDs...&lt;br /&gt;
--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 09:32, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
:Sometimes, in order to be true to ourselves, we have to take a course that doesn&#039;t satisfy our parents&#039; wishes. It&#039;s more common than you think. You still have plenty of time to figure out what path you want to take in life. And in the end, your parents probably just want to see you succeed, so if you do that, eventually they&#039;ll be happy. P.S.: I&#039;ve kept all my computer files since my first Mac in 1993 ;-) --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:15, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
::Maybe... maybe that will happen... About archiving: I started it when I was 12, after accidental destruction of Seagate ST32132A (HDD from my first PC)... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 20:40, 30 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::Okay, so starting at the same age as me then :-) I&#039;ve been lucky; I&#039;ve lost HDs but never any data that wasn&#039;t in another place too. These days I have redundant backups of all my data on local HDs and in the cloud. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:28, 30 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
==OBD updates==&lt;br /&gt;
Thanks for your work on those pages, you&#039;ve made some good edits! I was surprised to see so many mistaken inclusions of 0xDEAD space at the ends of types, and had to investigate. It looks like confusion sometimes slipped in during the process of editing a page. For instance [[Special:Permalink/4457|this revision]] of ONCV listed the final bytes starting at 0x4C as 32-byte alignment filler, but the next edit by Ssg wiped out geyser&#039;s description and simply called them &amp;quot;unused&amp;quot;. Perhaps Ssg and other editors knew what they were, but no editors thought to write &amp;quot;alignment padding&amp;quot; instead of &amp;quot;unused&amp;quot; for that range, which is misleading for the reader.&lt;br /&gt;
&lt;br /&gt;
Anyway, I just have one question: are you planning to fill in those offsets where you added a new field but placed &amp;quot;----&amp;quot; for the address? --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 19:36, 12 May 2025 (UTC)&lt;br /&gt;
:I won&#039;t leave those &amp;quot;----&amp;quot; for addresses, of course... I&#039;ll re-calculate those addresses right after I&#039;ll finish cleaning up 0xDEADs and renaming not only paddings back to &amp;quot;padding&amp;quot;, but also all &amp;quot;int&amp;quot; to &amp;quot;&#039;&#039;&#039;u&#039;&#039;&#039;int&amp;quot; where it&#039;s needed...--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 21:51, 12 May 2025 (UTC)&lt;br /&gt;
::Okie. Don&#039;t over-work yourself :-) --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 21:56, 12 May 2025 (UTC)&lt;br /&gt;
::For the record, here are the pages with added fields that have &amp;quot;----&amp;quot; for addresses: OBD:Mtrl, OBD:Impt, &amp;lt;strike&amp;gt;OBD:ENVP&amp;lt;/strike&amp;gt;, OBD:AKEV. Maybe there are others, but those are the ones I noticed. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:02, 13 May 2025 (UTC)&lt;br /&gt;
:::Update: I realized there was room for improvement/clarification on ENVP, so while I was working on that I filled in the offsets as well. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 23:26, 13 May 2025 (UTC)&lt;br /&gt;
::As I&#039;m looking over ONCC, I noticed the note &amp;quot;overridden by char&#039;s MELE profile if possible&amp;quot;, but I&#039;m not seeing that in the code. In fact it looks like the MELE&#039;s &amp;quot;dazed&amp;quot; fields are ignored by Oni entirely. There are various references to them in the editor and importer code, but I don&#039;t see where the game logic looks at them. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 15:54, 14 May 2025 (UTC)&lt;br /&gt;
:::&amp;lt;code&amp;gt;ONI_Character.h, line 167&amp;lt;/code&amp;gt;... It is stated in the dev&#039;s comment...--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 21:29, 14 May 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=User_talk:Mai_X&amp;diff=45235</id>
		<title>User talk:Mai X</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=User_talk:Mai_X&amp;diff=45235"/>
		<updated>2025-05-14T21:29:50Z</updated>

		<summary type="html">&lt;p&gt;Mai X: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Projects==&lt;br /&gt;
===Graphical updates===&lt;br /&gt;
That&#039;s an [http://konoko.oni2.net/%5bImages%5d/NG_Oni.png impressive example] you got there. As if it was made in blender. Does it use a HD mod package for the training level?&lt;br /&gt;
&lt;br /&gt;
I can only imaging that you modified the source code and compiled you own executable. Or maybe its part of Oni X or a fork? I didn&#039;t follow the engine modding on discord as they pretty much only (re-)added known bug-fixes?&lt;br /&gt;
&lt;br /&gt;
Anyway, keep us updated, okay? :) --[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 16:39, 24 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Yeah, I used [http://mods.oni2.net/node/92 this] texture pack for my update... I made normal maps from some of textures with [https://www.smart-page.net/smartnormal/ this] service... But I&#039;ve not used Blender for any stage of making my updates (especially, not for rendering)... I&#039;ve used Autodesk Softimage 2015 for assigning materials and shaders... But rendering was done in my own version of engine (BFW-17) with deep code modifications... I don&#039;t support OniX in any way (contributing to it or forking it), so I&#039;ll not be using their engine version or forking it for my modifications...&lt;br /&gt;
:For now, I&#039;m about to finish a small demo video of my graphical updates...&lt;br /&gt;
&lt;br /&gt;
:Of course, I&#039;ll keep you updated... At least, I&#039;ll try to do it as much as I can... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 19:26, 24 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed too! Your work looks very promising. What sort of plans do you have for the future? P.S.: Wasn&#039;t Konoko HD Armor high-poly enough for you? --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 21:59, 28 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:For now, my plan is just to have some rest... Plans for my updates: add better HDR support, implement Autodesk Scaleform for HUD and menus (instead of textures + 9-slice), add JPEG and PNG-ZIP texture compression support, implement GDF compression with LZMA-2... P.S.: Chief model has bundled normal maps with it, has over 60 000 polygons and has 4096x4096 uncompressed textures... HD Konoko is not so HQ as that model... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 07:28, 1 December 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
Today I found the time to watch the video you added. Great work!&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the msVo encoded audio didn&#039;t play so for the fun of it, here&#039;s [http://paradox.oni2.net/wiki/user/Mai_X/talk/Mai_X_OniDemoChief_Mai_X_at_the_new_edge_of_modding.mp4 another version]. ^_^&lt;br /&gt;
&lt;br /&gt;
Like Iritscen said, hopefully you can add Mai (package 26000 [http://paradox.oni2.net/wiki/user/Mai_X/talk/26000_Konoko_HD_Armor.png Konoko HD Armor]) in another iteration of the scene. It&#039;s not super highpoly but for Oni&#039;s standards it&#039;s quite decent. You probably you really wanted to make a point about the high poly count with master chief. Though I cannot stop feeling he is still to much of an &#039;&#039;alien&#039;&#039; there. --[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 19:12, 18 December 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:The original music is called &amp;quot;Velta Theme&amp;quot; from Synergia OST... I&#039;ve re-encoded it to MP3, so you can get it [http://konoko.oni2.net/%5bMusic%5d/Velta%20Theme.MP3 here]...&lt;br /&gt;
:Your version is even better, than mine... Thank you... You&#039;ve got the &amp;quot;atmosphere&amp;quot; of the video completely right...&lt;br /&gt;
:I&#039;ll try to use that model of &amp;quot;HD&amp;quot; Konoko in my next video (featuring ManPlant level; info is on main page)... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 06:43, 6 May 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Let us cheer you up*==&lt;br /&gt;
You enrich society in many ways. But first of all you enrich society by simply being not an ignorant asshole. But for that you need to stay alive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even if nobody tells you - and that proofs even more that your presence is needed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You haven’t founded a family yet? Is that what your parents expect from you? So what? You can still do that later. For now, it means you are still more free to be a [https://www.deviantart.com/ deviant], an unconventional (&amp;quot;eccentric&amp;quot;) and creative person.&lt;br /&gt;
&lt;br /&gt;
I’m not really a friend of geyser, never met him in person, but I know him good enough by our talks to say that I deeply respect him. He was really happy about you when you joined this place and to work with you together. When he said you are a good and capable person, I had no doubt that you are.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Why I’m alive.&amp;quot; That&#039;s the 100 million dollar question most people have to think through at some time point in their life.&lt;br /&gt;
&lt;br /&gt;
Committing suicide helps nobody. If someone tells you so, *punch that &amp;lt;s&amp;gt;asocial&amp;lt;/s&amp;gt; &#039;&#039;&#039;antisocial mobbing bastard&#039;&#039;&#039; hard in the face.&lt;br /&gt;
&lt;br /&gt;
(Of course, this wasn&#039;t an instruction. It was meant to cheer you up and to better let you hold a &#039;&#039;righteous grudge&#039;&#039; against others, than a self-destructive, imaginary one against yourself.)&lt;br /&gt;
--[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 07:58, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
Oh... thank you for that... you and GeySer... only you two can understand me in such moments... Now I feel a little bit better (no suicidal thoughts anymore)... Now I&#039;m trying to stop myself from going to St. Pet. and destroying RAIDs...&lt;br /&gt;
--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 09:32, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
:Sometimes, in order to be true to ourselves, we have to take a course that doesn&#039;t satisfy our parents&#039; wishes. It&#039;s more common than you think. You still have plenty of time to figure out what path you want to take in life. And in the end, your parents probably just want to see you succeed, so if you do that, eventually they&#039;ll be happy. P.S.: I&#039;ve kept all my computer files since my first Mac in 1993 ;-) --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:15, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
::Maybe... maybe that will happen... About archiving: I started it when I was 12, after accidental destruction of Seagate ST32132A (HDD from my first PC)... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 20:40, 30 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::Okay, so starting at the same age as me then :-) I&#039;ve been lucky; I&#039;ve lost HDs but never any data that wasn&#039;t in another place too. These days I have redundant backups of all my data on local HDs and in the cloud. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:28, 30 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
==OBD updates==&lt;br /&gt;
Thanks for your work on those pages, you&#039;ve made some good edits! I was surprised to see so many mistaken inclusions of 0xDEAD space at the ends of types, and had to investigate. It looks like confusion sometimes slipped in during the process of editing a page. For instance [[Special:Permalink/4457|this revision]] of ONCV listed the final bytes starting at 0x4C as 32-byte alignment filler, but the next edit by Ssg wiped out geyser&#039;s description and simply called them &amp;quot;unused&amp;quot;. Perhaps Ssg and other editors knew what they were, but no editors thought to write &amp;quot;alignment padding&amp;quot; instead of &amp;quot;unused&amp;quot; for that range, which is misleading for the reader.&lt;br /&gt;
&lt;br /&gt;
Anyway, I just have one question: are you planning to fill in those offsets where you added a new field but placed &amp;quot;----&amp;quot; for the address? --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 19:36, 12 May 2025 (UTC)&lt;br /&gt;
:I won&#039;t leave those &amp;quot;----&amp;quot; for addresses, of course... I&#039;ll re-calculate those addresses right after I&#039;ll finish cleaning up 0xDEADs and renaming not only paddings back to &amp;quot;padding&amp;quot;, but also all &amp;quot;int&amp;quot; to &amp;quot;&#039;&#039;&#039;u&#039;&#039;&#039;int&amp;quot; where it&#039;s needed...--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 21:51, 12 May 2025 (UTC)&lt;br /&gt;
::Okie. Don&#039;t over-work yourself :-) --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 21:56, 12 May 2025 (UTC)&lt;br /&gt;
::For the record, here are the pages with added fields that have &amp;quot;----&amp;quot; for addresses: OBD:Mtrl, OBD:Impt, &amp;lt;strike&amp;gt;OBD:ENVP&amp;lt;/strike&amp;gt;, OBD:AKEV. Maybe there are others, but those are the ones I noticed. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:02, 13 May 2025 (UTC)&lt;br /&gt;
:::Update: I realized there was room for improvement/clarification on ENVP, so while I was working on that I filled in the offsets as well. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 23:26, 13 May 2025 (UTC)&lt;br /&gt;
::As I&#039;m looking over ONCC, I noticed the note &amp;quot;overridden by char&#039;s MELE profile if possible&amp;quot;, but I&#039;m not seeing that in the code. In fact it looks like the MELE&#039;s &amp;quot;dazed&amp;quot; fields are ignored by Oni entirely. There are various references to them in the editor and importer code, but I don&#039;t see where the game logic looks at them. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 15:54, 14 May 2025 (UTC)&lt;br /&gt;
:::&amp;lt;code&amp;gt;ONI_Character.h, lines 167-168&amp;lt;/code&amp;gt;... It is stated in the dev&#039;s comment...--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 21:29, 14 May 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=User_talk:Mai_X&amp;diff=45222</id>
		<title>User talk:Mai X</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=User_talk:Mai_X&amp;diff=45222"/>
		<updated>2025-05-12T21:51:45Z</updated>

		<summary type="html">&lt;p&gt;Mai X: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Projects==&lt;br /&gt;
===Graphical updates===&lt;br /&gt;
That&#039;s an [http://konoko.oni2.net/%5bImages%5d/NG_Oni.png impressive example] you got there. As if it was made in blender. Does it use a HD mod package for the training level?&lt;br /&gt;
&lt;br /&gt;
I can only imaging that you modified the source code and compiled you own executable. Or maybe its part of Oni X or a fork? I didn&#039;t follow the engine modding on discord as they pretty much only (re-)added known bug-fixes?&lt;br /&gt;
&lt;br /&gt;
Anyway, keep us updated, okay? :) --[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 16:39, 24 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Yeah, I used [http://mods.oni2.net/node/92 this] texture pack for my update... I made normal maps from some of textures with [https://www.smart-page.net/smartnormal/ this] service... But I&#039;ve not used Blender for any stage of making my updates (especially, not for rendering)... I&#039;ve used Autodesk Softimage 2015 for assigning materials and shaders... But rendering was done in my own version of engine (BFW-17) with deep code modifications... I don&#039;t support OniX in any way (contributing to it or forking it), so I&#039;ll not be using their engine version or forking it for my modifications...&lt;br /&gt;
:For now, I&#039;m about to finish a small demo video of my graphical updates...&lt;br /&gt;
&lt;br /&gt;
:Of course, I&#039;ll keep you updated... At least, I&#039;ll try to do it as much as I can... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 19:26, 24 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
I&#039;m impressed too! Your work looks very promising. What sort of plans do you have for the future? P.S.: Wasn&#039;t Konoko HD Armor high-poly enough for you? --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 21:59, 28 November 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:For now, my plan is just to have some rest... Plans for my updates: add better HDR support, implement Autodesk Scaleform for HUD and menus (instead of textures + 9-slice), add JPEG and PNG-ZIP texture compression support, implement GDF compression with LZMA-2... P.S.: Chief model has bundled normal maps with it, has over 60 000 polygons and has 4096x4096 uncompressed textures... HD Konoko is not so HQ as that model... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 07:28, 1 December 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
Today I found the time to watch the video you added. Great work!&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the msVo encoded audio didn&#039;t play so for the fun of it, here&#039;s [http://paradox.oni2.net/wiki/user/Mai_X/talk/Mai_X_OniDemoChief_Mai_X_at_the_new_edge_of_modding.mp4 another version]. ^_^&lt;br /&gt;
&lt;br /&gt;
Like Iritscen said, hopefully you can add Mai (package 26000 [http://paradox.oni2.net/wiki/user/Mai_X/talk/26000_Konoko_HD_Armor.png Konoko HD Armor]) in another iteration of the scene. It&#039;s not super highpoly but for Oni&#039;s standards it&#039;s quite decent. You probably you really wanted to make a point about the high poly count with master chief. Though I cannot stop feeling he is still to much of an &#039;&#039;alien&#039;&#039; there. --[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 19:12, 18 December 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
:The original music is called &amp;quot;Velta Theme&amp;quot; from Synergia OST... I&#039;ve re-encoded it to MP3, so you can get it [http://konoko.oni2.net/%5bMusic%5d/Velta%20Theme.MP3 here]...&lt;br /&gt;
:Your version is even better, than mine... Thank you... You&#039;ve got the &amp;quot;atmosphere&amp;quot; of the video completely right...&lt;br /&gt;
:I&#039;ll try to use that model of &amp;quot;HD&amp;quot; Konoko in my next video (featuring ManPlant level; info is on main page)... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 06:43, 6 May 2025 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Let us cheer you up*==&lt;br /&gt;
You enrich society in many ways. But first of all you enrich society by simply being not an ignorant asshole. But for that you need to stay alive.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even if nobody tells you - and that proofs even more that your presence is needed.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You haven’t founded a family yet? Is that what your parents expect from you? So what? You can still do that later. For now, it means you are still more free to be a [https://www.deviantart.com/ deviant], an unconventional (&amp;quot;eccentric&amp;quot;) and creative person.&lt;br /&gt;
&lt;br /&gt;
I’m not really a friend of geyser, never met him in person, but I know him good enough by our talks to say that I deeply respect him. He was really happy about you when you joined this place and to work with you together. When he said you are a good and capable person, I had no doubt that you are.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Why I’m alive.&amp;quot; That&#039;s the 100 million dollar question most people have to think through at some time point in their life.&lt;br /&gt;
&lt;br /&gt;
Committing suicide helps nobody. If someone tells you so, *punch that &amp;lt;s&amp;gt;asocial&amp;lt;/s&amp;gt; &#039;&#039;&#039;antisocial mobbing bastard&#039;&#039;&#039; hard in the face.&lt;br /&gt;
&lt;br /&gt;
(Of course, this wasn&#039;t an instruction. It was meant to cheer you up and to better let you hold a &#039;&#039;righteous grudge&#039;&#039; against others, than a self-destructive, imaginary one against yourself.)&lt;br /&gt;
--[[User:Paradox-01|paradox-01]] ([[User talk:Paradox-01|talk]]) 07:58, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
Oh... thank you for that... you and GeySer... only you two can understand me in such moments... Now I feel a little bit better (no suicidal thoughts anymore)... Now I&#039;m trying to stop myself from going to St. Pet. and destroying RAIDs...&lt;br /&gt;
--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 09:32, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
:Sometimes, in order to be true to ourselves, we have to take a course that doesn&#039;t satisfy our parents&#039; wishes. It&#039;s more common than you think. You still have plenty of time to figure out what path you want to take in life. And in the end, your parents probably just want to see you succeed, so if you do that, eventually they&#039;ll be happy. P.S.: I&#039;ve kept all my computer files since my first Mac in 1993 ;-) --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:15, 29 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
::Maybe... maybe that will happen... About archiving: I started it when I was 12, after accidental destruction of Seagate ST32132A (HDD from my first PC)... --[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 20:40, 30 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
:::Okay, so starting at the same age as me then :-) I&#039;ve been lucky; I&#039;ve lost HDs but never any data that wasn&#039;t in another place too. These days I have redundant backups of all my data on local HDs and in the cloud. --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 22:28, 30 March 2023 (CEST)&lt;br /&gt;
&lt;br /&gt;
== OBD updates ==&lt;br /&gt;
&lt;br /&gt;
Thanks for your work on those pages, you&#039;ve made some good edits! I was surprised to see so many mistaken inclusions of 0xDEAD space at the ends of types, and had to investigate. It looks like confusion sometimes slipped in during the process of editing a page. For instance [[Special:Permalink/4457|this revision]] of ONCV listed the final bytes starting at 0x4C as 32-byte alignment filler, but the next edit by Ssg wiped out geyser&#039;s description and simply called them &amp;quot;unused&amp;quot;. Perhaps Ssg and other editors knew what they were, but no editors thought to write &amp;quot;alignment padding&amp;quot; instead of &amp;quot;unused&amp;quot; for that range, which is misleading for the reader.&lt;br /&gt;
&lt;br /&gt;
Anyway, I just have one question: are you planning to fill in those offsets where you added a new field but placed &amp;quot;----&amp;quot; for the address? --[[User:Iritscen|Iritscen]] ([[User talk:Iritscen|talk]]) 19:36, 12 May 2025 (UTC)&lt;br /&gt;
:I won&#039;t leave those &amp;quot;----&amp;quot; for addresses, of course... I&#039;ll re-calculate those addresses right after I&#039;ll finish cleaning up 0xDEADs and renaming not only paddings back to &amp;quot;padding&amp;quot;, but also all &amp;quot;int&amp;quot; to &amp;quot;&#039;&#039;&#039;u&#039;&#039;&#039;int&amp;quot; where it&#039;s needed...--[[User:Mai X|Mai X]] ([[User talk:Mai X|talk]]) 21:51, 12 May 2025 (UTC)&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:QTNA&amp;diff=45218</id>
		<title>OBD:QTNA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:QTNA&amp;diff=45218"/>
		<updated>2025-05-12T19:13:23Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=QTNA | prev=PSUI | next=SNDD | name=Quad Tree Node Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:qtna_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 46 02 00 | 582            | 00582-.QTNA }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3              | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead           | padding }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| C1 1D 00 00 | 7617           | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | uint32hb  |FFC8C8| 3A 09 00 80 | 2362, high bit | negative u, negative v child index }}&lt;br /&gt;
{{OBDtr| 0x04 | uint32hb  |FFFFC8| 3B 09 00 80 | 2363, high bit | positive u, negative v child index }}&lt;br /&gt;
{{OBDtr| 0x08 | uint32hb  |C8FFC8| 01 00 00 00 | 1              | negative u, positive v child index }}&lt;br /&gt;
{{OBDtr| 0x0C | uint32hb  |C8FFFF| 54 09 00 80 | 2388, high bit | positive u, positive v child index }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Child index&lt;br /&gt;
:If the high bit is not set then the child index is the index of another quadtree node (into the same array). Otherwise it is the index of an [[OBD:OTLF|OTLF]] entry.&lt;br /&gt;
;U and V meaning&lt;br /&gt;
:X aligned node - U = Y, V = Z&lt;br /&gt;
:Y aligned node - U = X, V = Z&lt;br /&gt;
:Z aligned node -  U = X, V = Y&lt;br /&gt;
:;Note&lt;br /&gt;
::The alignment of a node depends on the leaf face that referenced it because there is no orientation information in a quadttree node.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=QTNA | prev=PSUI | next=SNDD | name=Quad Tree Node Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:PSUI&amp;diff=45217</id>
		<title>OBD:PSUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:PSUI&amp;diff=45217"/>
		<updated>2025-05-12T19:07:14Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Removing DEAD part... It is NOT a part of the type...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=PSUI | prev=PSpL | next=QTNA | name=Part Specifications UI (User Interface) | family=Interface | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:psui_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 4F 06 00 | 1615  | 01615-psui_g206.PSUI }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 00 | 0     | level 0 }}&lt;br /&gt;
{{OBDtr| 0x08 | link     |FFC8C8| 01 32 06 00 | 1586  | link to 01586-ps_g206_background.[[OBD:PSpc|PSpc]] }}&lt;br /&gt;
{{OBDtrBK|1=Other 42 links }}&lt;br /&gt;
{{OBDtr| 0xB4 | link     |FFC8C8| 01 40 06 00 | 1600  | link to 01600-ps_g206_folder.[[OBD:PSpc|PSpc]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=PSUI | prev=PSpL | next=QTNA | name=Part Specifications UI (User Interface) | family=Interface}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:PSpL&amp;diff=45216</id>
		<title>OBD:PSpL</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:PSpL&amp;diff=45216"/>
		<updated>2025-05-12T19:01:51Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=PSpL | prev=PSpc | next=PSUI | name=Part Specification List | family=Interface | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:pspl_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 71 06 00 | 1649  | 01649-partspec_list.PSpL }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 00 | 0     | level 0 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead  | padding }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| 07 00 00 00 | 7     | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | uint32    |FFC8C8| 00 00 00 00 | 0     | part type }}&lt;br /&gt;
{{OBDtr| 0x04 | link     |FFFFC8| 01 6C 06 00 | 1644  | link to 01644-ps_none_none_none.[[OBD:PSpc|PSpc]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Used part types:&lt;br /&gt;
:0 - Transparent in-game UI background&lt;br /&gt;
:1 - Black out-of-game UI background&lt;br /&gt;
:5 - Sound debug panel background (&amp;lt;tt&amp;gt;sound_show_debug=1&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=PSpL | prev=PSpc | next=PSUI | name=Part Specification List | family=Interface}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:PSpc&amp;diff=45215</id>
		<title>OBD:PSpc</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:PSpc&amp;diff=45215"/>
		<updated>2025-05-12T18:57:10Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=PSpc | prev=PNTA | next=PSpL | name=Part Specification | family=Interface | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:pspc_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 39 00 00 | 57    | 00057-level_3_part.PSpc }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3     | level 3 }}&lt;br /&gt;
{{OBDtrBK|1=Array of 9 point elements: first element }}&lt;br /&gt;
{{OBDtr| 0x08 | int16    |FFC8C8| 00 00       | 0     | x-coordinate of top left corner of top left rectangle }}&lt;br /&gt;
{{OBDtr| 0x0A | int16    |FFC8C8| 00 00       | 0     | y-coordinate of top left corner of top left rectangle }}&lt;br /&gt;
{{OBDtrBK|1=End of array }}&lt;br /&gt;
{{OBDtrBK|1=Array of 9 point elements: first element }}&lt;br /&gt;
{{OBDtr| 0x1A | int16    |FFC8C8| 00 00       | 0     | x-coordinate of bottom right corner of top left rectangle }}&lt;br /&gt;
{{OBDtr| 0x1C | int16    |FFC8C8| 00 00       | 0     | y-coordinate of bottom right corner of top left rectangle }}&lt;br /&gt;
{{OBDtrBK|1=End of array }}&lt;br /&gt;
{{OBDtr| 0x50 | link     |FFFFC8| 01 38 00 00 | 0     | link to 00056-h_03.[[OBD:TXMP|TXMP]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;For a visualization of nine-slice rendering, see [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/windows-media-center-sdk/bb189722(v=msdn.10) HERE] or [[XML:PSpc]].&lt;br /&gt;
&lt;br /&gt;
;What is stored&lt;br /&gt;
:There are 9 rectangles defined in PSpc: 4 corners, 4 sides and one interior rectangle. Typically all 9 are used (to draw buttons for example) or only one is used (the top left corner, to draw checkboxes for example). There are cases where the top left corner and the interior rectangle are both present, which indicates that the code can choose which part to draw.&lt;br /&gt;
:The reason for using 9 rectangles is to allow drawing of buttons (and anything else that has defined corners) in various sizes without distorting the corners.&lt;br /&gt;
:*the corners are never rescaled&lt;br /&gt;
:*horizontal sides can be stretched horizontally&lt;br /&gt;
:*vertical sides can be stretched vertically&lt;br /&gt;
:*the interior can be stretched both ways&lt;br /&gt;
:Of course that means that the sides and the interior must be specially designed to be stretchable without visible distortion.&lt;br /&gt;
&lt;br /&gt;
;How it is stored&lt;br /&gt;
:A pair of int16 fields make a texture coordinate. The first 9 texture coordinates in the file (18 bytes) are the top-left corners of the 9 rectangles. The latter 9 coordinates are the bottom-right corners of the 9 rectangles. When both coordinates are 0 then the rectangle is not used. The order of the coordinates is top to bottom, left to right. Thus the order of the 9 rectangles is: top left, top center, top right, middle left, middle center, middle right, bottom left, bottom center, bottom right.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=PSpc | prev=PNTA | next=PSpL | name=Part Specification | family=Interface}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:PSpc&amp;diff=45214</id>
		<title>OBD:PSpc</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:PSpc&amp;diff=45214"/>
		<updated>2025-05-12T18:53:56Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Removing DEAD part... It is NOT a part of the type...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=PSpc | prev=PNTA | next=PSpL | name=Part Specification | family=Interface | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:pspc_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 39 00 00 | 57    | 00057-level_3_part.PSpc }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3     | level 3 }}&lt;br /&gt;
{{OBDtrBK|1=Array of 18 point elements: first element }}&lt;br /&gt;
{{OBDtr| 0x08 | int16    |FFC8C8| 00 00       | 0     | x-coordinate of top left corner of top left rectangle }}&lt;br /&gt;
{{OBDtr| 0x0A | int16    |FFC8C8| 00 00       | 0     | y-coordinate of top left corner of top left rectangle }}&lt;br /&gt;
{{OBDtrBK|1=End of array }}&lt;br /&gt;
{{OBDtr| 0x50 | link     |FFFFC8| 01 38 00 00 | 0     | link to 00056-h_03.[[OBD:TXMP|TXMP]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;For a visualization of nine-slice rendering, see [https://learn.microsoft.com/en-us/previous-versions/windows/desktop/windows-media-center-sdk/bb189722(v=msdn.10) HERE] or [[XML:PSpc]].&lt;br /&gt;
&lt;br /&gt;
;What is stored&lt;br /&gt;
:There are 9 rectangles defined in PSpc: 4 corners, 4 sides and one interior rectangle. Typically all 9 are used (to draw buttons for example) or only one is used (the top left corner, to draw checkboxes for example). There are cases where the top left corner and the interior rectangle are both present, which indicates that the code can choose which part to draw.&lt;br /&gt;
:The reason for using 9 rectangles is to allow drawing of buttons (and anything else that has defined corners) in various sizes without distorting the corners.&lt;br /&gt;
:*the corners are never rescaled&lt;br /&gt;
:*horizontal sides can be stretched horizontally&lt;br /&gt;
:*vertical sides can be stretched vertically&lt;br /&gt;
:*the interior can be stretched both ways&lt;br /&gt;
:Of course that means that the sides and the interior must be specially designed to be stretchable without visible distortion.&lt;br /&gt;
&lt;br /&gt;
;How it is stored&lt;br /&gt;
:A pair of int16 fields make a texture coordinate. The first 9 texture coordinates in the file (18 bytes) are the top-left corners of the 9 rectangles. The latter 9 coordinates are the bottom-right corners of the 9 rectangles. When both coordinates are 0 then the rectangle is not used. The order of the coordinates is top to bottom, left to right. Thus the order of the 9 rectangles is: top left, top center, top right, middle left, middle center, middle right, bottom left, bottom center, bottom right.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=PSpc | prev=PNTA | next=PSpL | name=Part Specification | family=Interface}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:PNTA&amp;diff=45213</id>
		<title>OBD:PNTA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:PNTA&amp;diff=45213"/>
		<updated>2025-05-12T18:37:07Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=PNTA | prev=PLEA | next=PSpc | name=3D Point Array | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:pnta_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 DA 00 00 | 218   | 00218-.PNTA }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3     | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[12] |00FF00| AD DE       | dead  | padding }}&lt;br /&gt;
{{OBDtr| 0x14 | float    |00FFFF| 00 00 10 C1 | -9.000000 | min. x-coordinate of all elements below }}&lt;br /&gt;
{{OBDtr| 0x18 | float    |00FFFF| 47 BC C9 BE | -0.394015 | min. y-coordinate (height) of all elements below }}&lt;br /&gt;
{{OBDtr| 0x1C | float    |00FFFF| FF FF 6F C1 | -14.999999| min. z-coordinate of all elements below }}&lt;br /&gt;
{{OBDtr| 0x20 | float    |FF00FF| 00 00 10 41 | 9.000000  | max. x-coordinate of all elements below }}&lt;br /&gt;
{{OBDtr| 0x24 | float    |FF00FF| 56 BC C9 3E | 0.394015  | max. y-coordinate (height) of all elements below }}&lt;br /&gt;
{{OBDtr| 0x28 | float    |FF00FF| 70 6E 73 41 | 15.214462 | max. z-coordinate of all elements below }}&lt;br /&gt;
{{OBDtr| 0x2C | float    |FF8000| 00 00 00 00 | 0.000000  | x-coordinate of the center [ ((max. x-coord. - min. x-coord.) ÷ 2) + min x-coord. ] }}&lt;br /&gt;
{{OBDtr| 0x30 | float    |FF8000| 00 00 70 34 |0.000000...| y-coordinate (height) of the center [ ((max. y-coord. - min. y-coord.) ÷ 2) + min y-coord. ] }}&lt;br /&gt;
{{OBDtr| 0x34 | float    |FF8000| 40 9C DB 3D | 0.107232  | z-coordinate of the center [ ((max. z-coord. - min. z-coord.) ÷ 2) + min z-coord. ] }}&lt;br /&gt;
{{OBDtr| 0x38 | float    |FF0080| E6 B6 8C 41 | 17.589306 | distance from the center to each of the both points above }}&lt;br /&gt;
{{OBDtr| 0x3C | uint32    |960096| 10 00 00 00 | 16        | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | float    |FFC8C8| 00 00 10 C1 | -9.000000 | x-coordinate of the first point }}&lt;br /&gt;
{{OBDtr| 0x04 | float    |FFFFC8| 1A BC C9 BE | -0.394013 | y-coordinate (height) of the first point }}&lt;br /&gt;
{{OBDtr| 0x08 | float    |C8FFC8| FF FF 6F C1 | -14.999999| z-coordinate of the first point }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first image below shows the points which are encoded above in the data marked in light blue, lilac and dark orange. In my opinion these points are used to create the bounding box.&lt;br /&gt;
&lt;br /&gt;
The second image gives you an overview of the elements in the coordinate array. Every triad of 32-bit numbers contains the x- y- and z-coordinate of a point. In this example every point exists in duplicate, so that you can only see 8 points. These points are needed to build up the mesh (triangles) for a door.&lt;br /&gt;
&lt;br /&gt;
Image number three is a fusion of the first and the second image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:pnta_0.gif]] &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; [[Image:pnta_1.gif]] &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; [[Image:pnta_2.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=PNTA | prev=PLEA | next=PSpc | name=3D Point Array | family=General}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:PLEA&amp;diff=45212</id>
		<title>OBD:PLEA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:PLEA&amp;diff=45212"/>
		<updated>2025-05-12T18:32:02Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=PLEA | prev=OTLF | next=PNTA | name=Plane Equation Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:plea_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 41 02 00 | 577   | 00577-.PLEA }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3     | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead  | padding }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| 03 00 00 00 | 13554 | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | float    |FFC8C8| 00 00 00 00 | 0.000000 | &#039;a&#039; coefficient of the plane equation (x component of plane&#039;s normal) }}&lt;br /&gt;
{{OBDtr| 0x04 | float    |FFFFC8| 00 00 00 00 | 0.000000 | &#039;b&#039; coefficient of the plane equation (y component of plane&#039;s normal) }}&lt;br /&gt;
{{OBDtr| 0x08 | float    |C8FFC8| 00 00 80 3F | 1.000000 | &#039;c&#039; coefficient of the plane equation (z component of plane&#039;s normal) }}&lt;br /&gt;
{{OBDtr| 0x0C | float    |C8FFFF| 00 00 19 44 |612.000000| &#039;d&#039; coefficient of the plane equation }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Plane equation&lt;br /&gt;
:The canonical equation for a [https://mathworld.wolfram.com/Plane.html plane] in 3D is&lt;br /&gt;
::&#039;&#039;&#039;a * x + b * y + c * z + d = 0,&#039;&#039;&#039;&lt;br /&gt;
:with (a, b, c, d) being 4 real numbers and (a, b, c) forming a nonzero vector (the plane&#039;s &amp;quot;normal&amp;quot;).&lt;br /&gt;
:*The set of points (x, y, z) verifying &#039;&#039;&#039;a * x + b * y + c * z + d = 0&#039;&#039;&#039; are said to be in the plane or at the plane.&lt;br /&gt;
:*The set of points (x, y, z) verifying &#039;&#039;&#039;a * x + b * y + c * z + d &amp;gt; 0&#039;&#039;&#039; are said to be in front of the plane.&lt;br /&gt;
:*The set of points (x, y, z) verifying &#039;&#039;&#039;a * x + b * y + c * z + d &amp;lt; 0&#039;&#039;&#039; are said to be behind the plane.&lt;br /&gt;
:&#039;&#039;&#039;N.B.&#039;&#039;&#039; If a=b=c=0, then the equation is degenerate and applies either to the whole space (if d=0) or to no points at all (if d is non-zero).&lt;br /&gt;
&lt;br /&gt;
:As a further convention, if (a,b,c) is normalized at unit length (i.e., &#039;&#039;&#039;a*a + b*b + c*c = 1&#039;&#039;&#039;) then d is the distance from the plane to the world&#039;s origin, along the normal vector.&lt;br /&gt;
:The four floats in each element of a PLEA are exactly the (a, b, c, d) of the above definition.&lt;br /&gt;
:In the above example, the first element defines the plane (0 * x + 0 * y + 1 * z + 612 = 0), i.e., the vertical plane z = -612.&lt;br /&gt;
&lt;br /&gt;
;What planes are for and how they are referenced&lt;br /&gt;
:Planes are used for environment culling, collision detection and [[wikipedia:Binary_space_partitioning|BSP]].&lt;br /&gt;
:The plane equations stored in PLEA are referenced from such data as [[ABNA]], [[AKBP]], [[AKBA]] and [[AGQC]] by means of a 32-bit array index.&lt;br /&gt;
:However, the high bit of those 32-bit references is not part of the array index, instead it indicates whether the facing of the plane should be flipped.&lt;br /&gt;
:*If the high bit is not set, then the 4 values (a, b, c, d) are used as described above.&amp;lt;br /&amp;gt;(If referencing the above example without a high bit, then any points with z &amp;gt; - 612 will be in front of the plane, whereas points with z &amp;lt; -612 will be behind the plane.)&lt;br /&gt;
:*If the high bit is set, then the plane equation coefficients become (-a, -b, -c, -d).&amp;lt;br /&amp;gt;(If referencing the above example with a high bit, then any point with z &amp;gt; - 612 will be behind the plane, whereas points with z &amp;lt; -612 will be in front of the plane.)&lt;br /&gt;
:This means that the actual array index is a 31-bit value (i.e., there can &amp;quot;only&amp;quot; be up to 2,147,483,648 distinct planes in a level), but the same array element can be used for two different facing directions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=PLEA | prev=OTLF | next=PNTA | name=Plane Equation Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:OTIT&amp;diff=45211</id>
		<title>OBD:OTIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:OTIT&amp;diff=45211"/>
		<updated>2025-05-12T18:30:43Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=OTIT | prev=OSBD | next=OTLF | name=Oct Tree Interior Node Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:otit_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 44 02 00 | 580  | 00580-.OTIT }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3    | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead | padding }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| 6E 0A 00 00 | 2670 | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | uint32hb  |FFC8C8| 01 00 00 00 | 1    | negative x, negative y, negative z child index }}&lt;br /&gt;
{{OBDtr| 0x04 | uint32hb  |FFFFC8| 30 00 00 00 | 48   | positive x, negative y, negative z child index }}&lt;br /&gt;
{{OBDtr| 0x08 | uint32hb  |C8FFC8| 52 01 00 00 | 338  | negative x, positive y, negative z child index }}&lt;br /&gt;
{{OBDtr| 0x0C | uint32hb  |C8FFFF| 93 01 00 00 | 403  | positive x, positive y, negative z child index }}&lt;br /&gt;
{{OBDtr| 0x10 | uint32hb  |FFC8FF| A8 06 00 00 | 1704 | negative x, negative y, positive z child index }}&lt;br /&gt;
{{OBDtr| 0x14 | uint32hb  |FFC800| DC 06 00 00 | 1756 | positive x, negative y, positive z child index }}&lt;br /&gt;
{{OBDtr| 0x18 | uint32hb  |C800C8| F2 07 00 00 | 2034 | negative x, positive y, positive z child index }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32hb  |C87C64| 42 08 00 00 | 2114 | positive x, positive y, positive z child index }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Child index&lt;br /&gt;
:If the child index does not have its high bit set then it is the index of another octtree interior node (in the same array). Otherwise it is the index of an octtree leaf (from [[OBD:OTLF|OTLF]])&lt;br /&gt;
;Example&lt;br /&gt;
:In the above interior node all children are other interior nodes, there are no leafs in this interior node.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=OTIT | prev=OSBD | next=OTLF | name=Oct Tree Interior Node Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:OTLF&amp;diff=45210</id>
		<title>OBD:OTLF</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:OTLF&amp;diff=45210"/>
		<updated>2025-05-12T18:30:23Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=OTLF | prev=OTIT | next=PLEA | name=Oct Tree Leaf Node Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:otlf_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 45 02 00 | 581              | 00581-.OTLF }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3                | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead             | padding }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| 03 49 00 00 | 18691            | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | uint12-20 |FFC8C8| 00 00 00 00 | 0, 0             | bits 0-11 (12 bits) contain the number of gunk quads that intersect this leaf, bits 12-31 (20 bits) contain the index of the gunk quad list; see details below }}&lt;br /&gt;
{{OBDtr| 0x04 | uint32hb  |FFFFC8| FF FF FF FF | -1               | negative x neighbour }}&lt;br /&gt;
{{OBDtr| 0x08 | uint32hb  |C8FFC8| 01 00 00 80 | 1, high bit      | positive x neighbour }}&lt;br /&gt;
{{OBDtr| 0x0C | uint32hb  |C8FFFF| FF FF FF FF | -1               | negative y neighbour }}&lt;br /&gt;
{{OBDtr| 0x10 | uint32hb  |FFC8FF| 02 00 00 80 | 2, high bit      | positive y neighbour }}&lt;br /&gt;
{{OBDtr| 0x14 | uint32hb  |FFC800| FF FF FF FF | -1               | negative z neighbour }}&lt;br /&gt;
{{OBDtr| 0x18 | uint32hb  |C800C8| 04 00 00 80 | 4, high bit      | positive z neighbour }}&lt;br /&gt;
{{OBDtr| 0x1C |uint9-9-9-5|C87C64| 7F FE FC 39 | 127, 127, 127, 7 | bits 0-8 (9 bits) contain the index of max x, bits 9-17 (9 bits) contain the index of max y, bits 18-26 (9 bits) contain the index of max z and bits 27-31 (5 bits) contain the index of the size of this leaf; see details below }}&lt;br /&gt;
{{OBDtr| 0x20 | uint8-24  |B0C3D4| 00 00 00 00 | 0, 0             | bits 0-7 (8 bits) intersected BNV count, bits 8-31 (24 bits) BNV list index; see details below }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:Penny_Arcade_-_EvilCorp_Too.png|thumb|300px]]&lt;br /&gt;
;Intersected gunk quads&lt;br /&gt;
:An octtree leaf (OTLF) stores its size and position and the gunk quads that intersect it. The first field contains an index/count pair that is used to access the first [[OBD:IDXA|IDXA]] field that is stored in the [[OBD:AKOT|AKOT]] that owns this leaf. This [[OBD:IDXA|IDXA]] contains the gunk quad numbers that intersect the leaf. In theory there can be at most 4095 gunk quads that intersect a leaf but in practice this number is much lower (max is 462). In addition the threshold limit used to build the octree seems to be 19 gunk quads per leaf. I.e., in Oni&#039;s levels, only the smallest leaves (with size 16x16x16) have more than 19 quads; larger leaves containing 20 and more quads are subdivided into &amp;quot;other, smaller boxes&amp;quot;.&lt;br /&gt;
;Intersected BNVs&lt;br /&gt;
:An octtree leaf can intersect some BNVs (see [[OBD:AKVA|AKVA]]). The last field contains the index and count of this list in the second [[OBD:IDXA|IDXA]] field of [[OBD:AKOT|AKOT]].&lt;br /&gt;
;Position and size&lt;br /&gt;
:The position (of leaf&#039;s positive corner) is stored as three 9 bit fields. These values are not the x, y and z coordinates themselves but they are indices into a constant table. This constant table has 512 entries starting with -4080.0 and going up to 4096.0 in 16 units increments. &lt;br /&gt;
:The size of leaf is stored in a 5 bit field and it is and index into another constant table. This table has 9 entries starting with 16.0 and going up to 4096.0 (each entry is double the previous one). &lt;br /&gt;
:*Maximum environment size is (8192.0, 8192.0, 8192.0)&lt;br /&gt;
:*Minimum coordinate is (-4096.0, -4096.0, -4096.0) &lt;br /&gt;
:*Maximum coordinate is (4096.0, 4096.0, 4096.0)&lt;br /&gt;
:*Minimum leaf size is 16.0&lt;br /&gt;
:*Maximum leaf size is 4096.0 (this means that there will always be at least 8 leaves because the size of the environment is double).&lt;br /&gt;
;Neighbours&lt;br /&gt;
:A leaf can have 6 neighbours (one for each face). If a face does not have a neighbour (it&#039;s on an environment border) then the coresponding field is -1. If a neighbour field value has its high bit set then the value (without the high bit) is the index of another octtree leaf (this is the case when when the neighbour leaf is equal to or larger than the leaf). If the high bit is not set then the value is an index into a quadtree node array (the [[OBD:QTNA|QTNA]] field of [[OBD:AKOT|AKOT]]) (this is the case when there is more than one leaf neighbour for a face).&lt;br /&gt;
;Example&lt;br /&gt;
:The above leaf does not intersect any quads, has its maximum corner at (-2048.0, -2048.0, -2048.0), a size of 2048.0, no neighbours for all negative faces (it&#039;s right in the negative corner of the environment) and positive faces have leaves as neighbours (no quadtree nodes here).&lt;br /&gt;
;Theoretical limits&lt;br /&gt;
:If the environment (size 8192x8192x8192) is subdivided into minimal cubes (size 16x16x16) in all three directions, the total number of leaves is 512x512x512 = 134,217,728, and with a maximum of 4095 quads per leaf one could expect a theoretical maximum of 549,621,596,160 distinct quads per level. (Half a trillion quads, or a trillion triangles. That&#039;s &#039;&#039;crazy&#039;&#039; much.)&lt;br /&gt;
:However, the maximum size of the AKOT&#039;s first IDXA that can be referenced through a leaf&#039;s 0x00 field is actually 1,052,670 (a combination of the 20-bit index to the start of a leaf&#039;s quad list and the 12-bit length of that list). Thus the maximum number of distinct quads in a level (properly referenced by oct-tree leaves) can not exceed 1,052,670, which is much more comfortable sanity-wise (two million triangles is fairly common for game environments nowadays).&lt;br /&gt;
:In practice, though, the engine imposes even more modest limitations:&lt;br /&gt;
:*only up to 8192 environment triangles are expected to be &#039;&#039;visible&#039;&#039; (rendered) at any given time (they can be packed as 4096 quads, or as 8192 actual triangles, or any combination of tris and quads).&lt;br /&gt;
:*:If you attempt to view more than 8192 triangles at once, Oni will &#039;&#039;not&#039;&#039; crash, but:&lt;br /&gt;
:*:*it will complain with the dev-console message &amp;quot;Exceeded max visible GQs #&amp;quot;, where # is the number of &#039;&#039;triangles&#039;&#039; in excess of 8192;&lt;br /&gt;
:*:*it will start dropping random triangles from the rendering pipeline;&lt;br /&gt;
:*:*collision will start to fail on the &amp;quot;dropped&amp;quot; triangles.&lt;br /&gt;
:*:The amount of other visible geometry (characters, particles etc) does not affect this limit.&lt;br /&gt;
:*only up to 262140 triangles (e.g., as 131070 quads) are allowed in a level&#039;s environment. Attempting to load a level with 262141 environment triangles (as any combination of triangles and quads) will cause Oni to [[Blam]].&lt;br /&gt;
:*:(N.B. This has been identified as a bug that will be fixed in future versions, so that the theoretical maximum of 1,052,670 quads (2,105,340‬ triangles) can be reached: if you cut a level into &amp;quot;sections&amp;quot; (&amp;quot;rooms&amp;quot; or &amp;quot;scenes&amp;quot;) where you can view no more than 8192 triangles at once, then basically you are allowed to have 256 such &amp;quot;sections&amp;quot; in a level. If you add an extra set of environment polygons for cel-shading and/or lightmapping, then the limit will be cut in 2 or 3.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=OTLF | prev=OTIT | next=PLEA | name=Oct Tree Leaf Node Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:OTIT&amp;diff=45209</id>
		<title>OBD:OTIT</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:OTIT&amp;diff=45209"/>
		<updated>2025-05-12T18:21:28Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=OTIT | prev=OSBD | next=OTLF | name=Oct Tree Interior Node Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:otit_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 44 02 00 | 580  | 00580-.OTIT }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3    | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead | unused }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| 6E 0A 00 00 | 2670 | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | uint32hb  |FFC8C8| 01 00 00 00 | 1    | negative x, negative y, negative z child index }}&lt;br /&gt;
{{OBDtr| 0x04 | uint32hb  |FFFFC8| 30 00 00 00 | 48   | positive x, negative y, negative z child index }}&lt;br /&gt;
{{OBDtr| 0x08 | uint32hb  |C8FFC8| 52 01 00 00 | 338  | negative x, positive y, negative z child index }}&lt;br /&gt;
{{OBDtr| 0x0C | uint32hb  |C8FFFF| 93 01 00 00 | 403  | positive x, positive y, negative z child index }}&lt;br /&gt;
{{OBDtr| 0x10 | uint32hb  |FFC8FF| A8 06 00 00 | 1704 | negative x, negative y, positive z child index }}&lt;br /&gt;
{{OBDtr| 0x14 | uint32hb  |FFC800| DC 06 00 00 | 1756 | positive x, negative y, positive z child index }}&lt;br /&gt;
{{OBDtr| 0x18 | uint32hb  |C800C8| F2 07 00 00 | 2034 | negative x, positive y, positive z child index }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32hb  |C87C64| 42 08 00 00 | 2114 | positive x, positive y, positive z child index }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Child index&lt;br /&gt;
:If the child index does not have its high bit set then it is the index of another octtree interior node (in the same array). Otherwise it is the index of an octtree leaf (from [[OBD:OTLF|OTLF]])&lt;br /&gt;
;Example&lt;br /&gt;
:In the above interior node all children are other interior nodes, there are no leafs in this interior node.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=OTIT | prev=OSBD | next=OTLF | name=Oct Tree Interior Node Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:OSBD&amp;diff=45208</id>
		<title>OBD:OSBD</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:OSBD&amp;diff=45208"/>
		<updated>2025-05-12T18:18:26Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Removing DEAD part... It is NOT a part of the type...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | align=center | type=OSBD | prev=OPge | next=OTIT | name=Oni Sound Binary Data | family=General}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:osbd_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 E4 18 00 | 6372        | 06372-AirCon5.amb.OSBD }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 00 | 0           | level 0 }}&lt;br /&gt;
{{OBDtr| 0x08 | uint32    |FFC8C8| D0 00 00 00 | 208         | size of the chunk in the raw/separate file in bytes }}&lt;br /&gt;
{{OBDtr| 0x0C | offset   |FFFFC8| 20 5E B2 01 | 01 B2 5E 20 | start of the chunk in the raw/separate file }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;raw/separate file chunk&lt;br /&gt;
:It has 3 different sub-formats :&lt;br /&gt;
:*[[OBD:OSBD/OSAm|OSAm]] (Oni Sound : Ambient)&lt;br /&gt;
:*[[OBD:OSBD/OSGr|OSGr]] (Oni Sound : Group)&lt;br /&gt;
:*[[OBD:OSBD/OSIm|OSIm]] (Oni Sound : Impulse)&lt;br /&gt;
:The format is not known when following the link at 0x0C above&lt;br /&gt;
::(even if it can be inferred from the name of the OSBD file)&lt;br /&gt;
:The engine knows how to parse the raw/separate file once it&#039;s read the first 4 bytes&lt;br /&gt;
::(same as for [[OBD:BINA|BINA]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=OSBD | prev=OPge | next=OTIT | name=Oni Sound Binary Data | family=General}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:OPge&amp;diff=45207</id>
		<title>OBD:OPge</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:OPge&amp;diff=45207"/>
		<updated>2025-05-12T18:15:06Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=OPge | prev=ONWC | next=OSBD | name=Objective Page | family=Interface | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:opge_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 37 00 00 | 55   | 00055-level_3.OPge }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3    | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[2]  |FFC8C8| AD DE       | dead | padding }}&lt;br /&gt;
{{OBDtr| 0x0A | uint16    |FFFFC8| 03 00       | 3    | level 3 }}&lt;br /&gt;
{{OBDtr| 0x0C | link     |C8FFC8| 01 00 00 00 | 0    | link to 00000-.[[OBD:IGPA|IGPA]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=OPge | prev=ONWC | next=OSBD | name=Objective Page | family=Interface}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:OPge&amp;diff=45206</id>
		<title>OBD:OPge</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:OPge&amp;diff=45206"/>
		<updated>2025-05-12T18:14:54Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Removing DEAD part... It is NOT a part of the type...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=OPge | prev=ONWC | next=OSBD | name=Objective Page | family=Interface | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:opge_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 37 00 00 | 55   | 00055-level_3.OPge }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3    | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[2]  |FFC8C8| AD DE       | dead | padding }}&lt;br /&gt;
{{OBDtr| 0x0A | int16    |FFFFC8| 03 00       | 3    | level 3 }}&lt;br /&gt;
{{OBDtr| 0x0C | link     |C8FFC8| 01 00 00 00 | 0    | link to 00000-.[[OBD:IGPA|IGPA]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=OPge | prev=ONWC | next=OSBD | name=Objective Page | family=Interface}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONWC&amp;diff=45203</id>
		<title>OBD:ONWC</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONWC&amp;diff=45203"/>
		<updated>2025-05-12T16:58:53Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Removing DEAD part... It is NOT a part of the type...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ONWC | prev=ONVL | next=OPge | name=Oni Weapon Class | family=Character | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ONWC files in level[1-19]_Final are 0-byte files. The actual data is in the ONWC files of level 0; below is an example.&lt;br /&gt;
&lt;br /&gt;
Unless specified otherwise, the coordinates are relative to the weapon&#039;s mesh (x = forwards, y = left, z = up).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==0x000 to 0x0D7 - Weapon main part ==&lt;br /&gt;
[[Image:onwc_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x000 | res_id   |FF0000| 01 75 0E 00 | 3701           | 03701-w1_tap.ONWC }}&lt;br /&gt;
{{OBDtr| 0x004 | lev_id   |FFFF00| 01 00 00 00 | 0              | level 0 }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===0x008 to 0x053 - Laser sight parameters===&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x008 | float    |FFC8C8| F5 A4 49 40 | 3.150693       | x-offset of laser sight origin }}&lt;br /&gt;
{{OBDtr| 0x00C | float    |FFC8C8| F4 2C A5 3B | 0.005041       | y-offset of laser sight origin }}&lt;br /&gt;
{{OBDtr| 0x010 | float    |FFC8C8| 21 4E D2 3E | 0.410752       | z-offset of laser sight origin }}&lt;br /&gt;
{{OBDtr| 0x014 | float    |FFC8C8| 23 A6 7F 3F | 0.998629       | x-component of laser sight direction }}&lt;br /&gt;
{{OBDtr| 0x018 | float    |FFC8C8| AA 6C 56 BD | -0.052349      | y-component of laser sight direction }}&lt;br /&gt;
{{OBDtr| 0x01C | float    |FFC8C8| 69 66 AA B7 | -0.000020      | z-component of laser sight direction }}&lt;br /&gt;
{{OBDtr| 0x020 | float    |FFC8C8| 00 40 9C 45 |5000.000000     | maximal length of laser sight vector }}&lt;br /&gt;
{{OBDtr| 0x024 | color    |FFFFC8| 00 00 FF FF | 0, 0, 255; 255 | laser sight color (blue, green, red); laser sight transparency }}&lt;br /&gt;
{{OBDtr| 0x028 | link     |C8FFC8| 01 94 05 00 | 1428           | crosshair texture (link to 01428-target_1A.[[TXMP]]) }}&lt;br /&gt;
{{OBDtr| 0x02C | color    |C8FFC8| FF FF FF 00 |255, 255, 255; 0| crosshair background color (blue, green, red); crosshair background transparency }}&lt;br /&gt;
{{OBDtr| 0x030 | float    |C8FFC8| CD CC 4C 3F | 0.800000       | crosshair scale factor }}&lt;br /&gt;
{{OBDtr| 0x034 | link     |C8FFFF| 01 95 05 00 | 1428           | locked crosshair texture (link to 01429-target_1B.TXMP) }}&lt;br /&gt;
{{OBDtr| 0x038 | color    |C8FFFF| FF FF FF 00 |255, 255, 255; 0| locked crosshair background color (blue, green, red); locked crosshair background transparency }}&lt;br /&gt;
{{OBDtr| 0x03C | float    |C8FFFF| CD CC 4C 3F | 0.800000       | locked crosshair scale factor }}&lt;br /&gt;
{{OBDtr| 0x040 | link     |FFC8FF| 00 00 00 00 | unused         | tunnel texture (link to a TXMP) }}&lt;br /&gt;
{{OBDtr| 0x044 | color    |FFC8FF| FF FF FF 00 |255, 255, 255; 0| tunnel background color (blue, green, red); tunnel background transparency }}&lt;br /&gt;
{{OBDtr| 0x048 | float    |FFC8FF| 00 00 80 3F | 1.000000       | tunnel scale factor }}&lt;br /&gt;
{{OBDtr| 0x04C | uint32    |FFC800| 0F 00 00 00 | 15             | number of tunnel textures }}&lt;br /&gt;
{{OBDtr| 0x050 | float    |C800C8| 00 00 20 41 | 10.000000      | spacing of tunnel textures }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Crosshair&lt;br /&gt;
:Default crosshair appears where the laser sight hits environment, corpses, etc.&lt;br /&gt;
:Locked crosshair appears when the laser sight hits characters (including the shooter)&lt;br /&gt;
:&amp;quot;Tunnel&amp;quot; is used by &#039;&#039;&#039;w8_mbo&#039;&#039;&#039; as a complement to the crosshair&lt;br /&gt;
:&#039;&#039;&#039;w2_sap&#039;&#039;&#039;, &#039;&#039;&#039;w5_sbg&#039;&#039;&#039;, &#039;&#039;&#039;w7_scc&#039;&#039;&#039; and &#039;&#039;&#039;w9_scr&#039;&#039;&#039; use it with no crosshair&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===0x054 to 0x05F - Ammo meter===&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x054 | link     |C87C64| 01 7E 0E 00 | 3710           | link to 03710-tap_icon.[[TXMP]] }}&lt;br /&gt;
{{OBDtr| 0x058 | link     |C87C64| 01 7F 0E 00 | 3711           | link to 03711-tap_empty.TXMP }}&lt;br /&gt;
{{OBDtr| 0x05C | link     |C87C64| 01 80 0E 00 | 3712           | link to 03712-tap_fill.TXMP }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===0x060 to 0x0D7 - Weapon parameters===&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x060 | link     |C87C64| 01 76 0E 00 | 3702           | link to 03702-.[[M3GM]] (3D geometry) }}&lt;br /&gt;
{{OBDtr2|0x064 | char[32] |B0C3D4| w1_tap                       | weapon name }}&lt;br /&gt;
{{OBDtr| 0x084 | float    |E7CEA5| 00 00 80 3F | 1.000000       | weapon mouse sensitivity (applies to AI, too) }}&lt;br /&gt;
{{OBDtr| 0x088 | float    |E7CEA5| A6 92 2B 3D | 0.041888       | recoil base (e.g. for w1_tap and w2_sap) }}&lt;br /&gt;
{{OBDtr| 0x08C | float    |E7CEA5| 92 0A 86 3E | 0.261799       | recoil max }}&lt;br /&gt;
{{OBDtr| 0x090 | float    |E7CEA5| 00 00 A0 40 | 5.000000       | recoil factor }}&lt;br /&gt;
{{OBDtr| 0x094 | float    |E7CEA5| E2 A3 7B 3B | 0.003839       | recoil return speed }}&lt;br /&gt;
{{OBDtr| 0x098 | float    |E7CEA5| 88 C3 E4 3A | 0.001745       | recoil firing return speed }}&lt;br /&gt;
{{OBDtr| 0x09C | float    |E7CEA5| 00 00 00 00 | 0.000000       | secondHandVector X (disabled IK stuff) }}&lt;br /&gt;
{{OBDtr| 0x0A0 | float    |E7CEA5| 00 00 00 00 | 0.000000       | secondHandVector Y}}&lt;br /&gt;
{{OBDtr| 0x0A4 | float    |E7CEA5| 00 00 00 00 | 0.000000       | secondHandVector Z }}&lt;br /&gt;
{{OBDtr| 0x0A8 | float    |E7CEA5| 00 00 00 00 | 0.000000       | secondHandUpVector X}}&lt;br /&gt;
{{OBDtr| 0x0AC | float    |E7CEA5| 00 00 00 00 | 0.000000       | secondHandUpVector Y}}&lt;br /&gt;
{{OBDtr| 0x0B0 | float    |E7CEA5| 00 00 00 00 | 0.000000       | secondHandUpVector Z}}&lt;br /&gt;
{{OBDtr| 0x0B4 | float    |E7CEA5| 00 00 00 00 | 0.000000       | secondHandPosition X}}&lt;br /&gt;
{{OBDtr| 0x0B8 | float    |E7CEA5| 00 00 00 00 | 0.000000       | secondHandPosition Y}}&lt;br /&gt;
{{OBDtr| 0x0BC | float    |E7CEA5| 00 00 00 00 | 0.000000       | secondHandPosition Z}}&lt;br /&gt;
{{OBDtr| 0x0C0 | uint16    |FFDDDD| 00 00       | 0              | freeTime (unused); always zero }}&lt;br /&gt;
{{OBDtr| 0x0C2 | uint16    |FFDDDD| 95 00       | 149            | recoil animation type (149 {{=}} autopistol_recoil) }}&lt;br /&gt;
{{OBDtr| 0x0C4 | uint16    |FFDDDD| A4 00       | 164            | reload animation type (164 {{=}} reload_pistol) }}&lt;br /&gt;
{{OBDtr| 0x0C6 | uint16    |FFDDDD| 19 00       | 25             | pause after reload in 1/60 seconds }}&lt;br /&gt;
{{OBDtr| 0x0C8 | uint16    |FFDDDD| 0A 00       | 10             | amount of shots }}&lt;br /&gt;
{{OBDtr| 0x0CA | uint16    |FFDDDD| 06 00       | 6              | amount of particles }}&lt;br /&gt;
{{OBDtr| 0x0CC | uint16    |FFDDDD| 01 00       | 1              | amount of firing modes }}&lt;br /&gt;
{{OBDtr| 0x0CE | uint16    |FFDDDD| 0A 00       | 10             | pause before reload in 1/60 seconds }}&lt;br /&gt;
{{OBDtr| 0x0D0 | uint16    |FFDDDD| 04 00       | 4              | release delay; delay between the moment the trigger is released and the moment the weapon stops firing }}&lt;br /&gt;
{{OBDtr| 0x0D2 | uint16    |FFDDDD| 00 00       | 0              | padding }}&lt;br /&gt;
{{OBDtr| 0x0D4 | uint32    |FFDDDD| 30          | 0x30 C0 02 00  | weapon options; the following bits are possible (values in hex):&lt;br /&gt;
&lt;br /&gt;
:0x&#039;&#039;&#039;02&#039;&#039;&#039; 00 00 00 - weapon can&#039;t be holstered&lt;br /&gt;
:0x&#039;&#039;&#039;04&#039;&#039;&#039; 00 00 00 - weapon reloads with energy cells&lt;br /&gt;
:0x&#039;&#039;&#039;08&#039;&#039;&#039; 00 00 00 - weapon is a rifle (two-handed)&lt;br /&gt;
:0x&#039;&#039;&#039;10&#039;&#039;&#039; 00 00 00 - recoil affects aiming&lt;br /&gt;
:0x&#039;&#039;&#039;20&#039;&#039;&#039; 00 00 00 - sustained fire (applies only to primary fire)&lt;br /&gt;
:0x&#039;&#039;&#039;40&#039;&#039;&#039; 00 00 00 - runtime only; do not use&lt;br /&gt;
:0x&#039;&#039;&#039;80&#039;&#039;&#039; 00 00 00 - stun switcher; used for w6_vdg, see below&lt;br /&gt;
&lt;br /&gt;
:0x00 &#039;&#039;&#039;01&#039;&#039;&#039; 00 00 - knockdown switcher; used for w4_psm, see below&lt;br /&gt;
:0x00 &#039;&#039;&#039;02&#039;&#039;&#039; 00 00 - explosive; used for w5_sbg and w11_ba1&lt;br /&gt;
:0x00 &#039;&#039;&#039;04&#039;&#039;&#039; 00 00 - secondary fire enabled&lt;br /&gt;
:0x00 &#039;&#039;&#039;08&#039;&#039;&#039; 00 00 - barabbas weapon; see below&lt;br /&gt;
:0x00 &#039;&#039;&#039;10&#039;&#039;&#039; 00 00 - heavy weapon; run, jump and creep disabled&lt;br /&gt;
:0x00 &#039;&#039;&#039;20&#039;&#039;&#039; 00 00 - auto release trigger; used for w11_ba1&lt;br /&gt;
:0x00 &#039;&#039;&#039;40&#039;&#039;&#039; 00 00 - has release delay; see the release delay field above&lt;br /&gt;
:0x00 &#039;&#039;&#039;80&#039;&#039;&#039; 00 00 - laser sight visible&lt;br /&gt;
&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;02&#039;&#039;&#039; 00 - crosshair scaling, used for w1_tap, w2_sap, w3_phr and w8_mbo&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;08&#039;&#039;&#039; 00 - weapon doesn&#039;t fade&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;10&#039;&#039;&#039; 00 - drain ammo; used by w4_psm to decrement ammo while firing because its firing mode is continuous rather than repetitive&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;stun switcher&#039;&#039;&#039; - if enemy is inside shooting distance (between min and max) and is &#039;&#039;&#039;knockdown&#039;&#039;&#039;ed/&#039;&#039;&#039;stun&#039;&#039;&#039;ed or &#039;&#039;&#039;blownup&#039;&#039;&#039;ped, AI with this weapon switches to melee for a time specified in a *fight timer* field&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;knockdown switcher&#039;&#039;&#039; -  if enemy is inside shooting distance (between min and max) and is &#039;&#039;&#039;knockdown&#039;&#039;&#039;ed or &#039;&#039;&#039;blownup&#039;&#039;&#039;ped, AI with this weapon switches to melee for a time specified in a *fight timer* field&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;barabbas weapon&#039;&#039;&#039; - reload disabled; also used for ai2_barabbas_retrievegun (it teleports a weapon to a character); nearest available gun becomes chosen if character had no weapon to begin, then always this weapon is teleported back to character (when command used again)&lt;br /&gt;
&lt;br /&gt;
==0x0D8 to 0x1D7 - Firing modes==&lt;br /&gt;
Every ONWC has 2 firing mode slots (128 = 0x80 bytes each.)&lt;br /&gt;
&lt;br /&gt;
The number of slots actually used by the weapon is specified at 0xCA.&lt;br /&gt;
&lt;br /&gt;
===0x0D8 to 0x157 - Primary firing mode===&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x0D8 | uint32    |64AAAA| 00 00 00 00 | 0              | firing mode options; only the following bit is used (value in hex):&lt;br /&gt;
:0x&#039;&#039;&#039;01&#039;&#039;&#039; 00 00 00 - No wild shots}}&lt;br /&gt;
&lt;br /&gt;
{{OBDtrMatrix4x3|0x0DC|EBEBEB|23 A6 7F 3F|05 6D 56 3D|F4 8D A9 37|05 6D 56 BD|23 A6 7F 3F|D0 1D 0E B5|F4 8D A9 B7|D0 1D 0E B5|00 00 80 3F|00 00 00 00|00 00 00 00|00 00 00 00|0.998629|0.052350|0.000020| -0.052350|0.998629| -0.000001| -0.000020| -0.000001|1.000000|0.000000|0.000000|0.000000| targeting inverse transform matrix - the inverse of the matrix that gives the targeting direction}}&lt;br /&gt;
&lt;br /&gt;
{{OBDtrVector3| 0x10C |EBEBEB| 23 A6 7F 3F | AE 6C 56 BD | AF 8D A9 B7 | 0.998629 | -0.052349 | -0.000020 | targeting direction; sets orientation of firingspread }}&lt;br /&gt;
{{OBDtrVector3| 0x118 |EBEBEB| DC FE 08 3C | 5C 11 23 3E | 39 C6 2A 3F | 0.008362 | 0.159246 | 0.667087 | targeting origin; sets deviation of AI&#039;s aim from target&#039;s origin (target&#039;s origin + this vector {{=}} direction where to aim and fire) }}&lt;br /&gt;
{{OBDtr| 0x124 | float    |EBEBEB| 00 00 61 44 | 900.000000     | prediction speed; the speed of the projectile that AI prediction should take into account when calculating where to fire in order to hit a moving target }}&lt;br /&gt;
{{OBDtr| 0x128 | float    |EBEBEB| 00 00 20 41 | 10.000000      | max. inaccuracy angle; sets max angle between weapon&#039;s aiming vector and target&#039;s position; when AI exceeds this angle (by recoil or target running away), AI stops shooting and aims weapon again straight to the target, then resume shooting }}&lt;br /&gt;
{{OBDtr| 0x12C | float    |EBEBEB| 00 00 20 40 | 2.500000       | aim_radius; always the same; possibly related to the inaccuracy angle above }}&lt;br /&gt;
{{OBDtr| 0x130 | float    |EBEBEB| 00 00 96 43 | 300.000000     | weapon sound sphere radius; defines radius of the AI sound sphere (gunfire type, see {{SectionLink|AI|Vision and hearing}} to learn about AI sound spheres) which is created for a short moment when this weapon is fired }}&lt;br /&gt;
{{OBDtr| 0x134 | float    |EBEBEB| 00 00 40 41 | 12.000000      | minimal shooting distance; if target is closer than this, the AI ceases fire and moves away from the target till at least this distance is achieved; this is a &#039;&#039;&#039;diameter, not a radius&#039;&#039;&#039;, so effective distance from AI to target is half of this value }}&lt;br /&gt;
{{OBDtr| 0x138 | float    |EBEBEB| 00 00 61 44 | 900.000000     | maximum shooting distance; if target is further than this, the AI ceases fire and moves towards the target until it is below this distance }}&lt;br /&gt;
{{OBDtr| 0x13C | uint16    |8C8CCC| 05 00       | 5              | UNUSED; maximum startle misses; the maximum number of shots to which extra inaccuracy can be added when an AI begins firing at the player (always 5, but Oni does not use this field) }}&lt;br /&gt;
{{OBDtr| 0x13E | uint16    |8C8CCC| 01 00       | 1              | skill index (links weapon to the [[ONCC]] shooting skill table); here are the values used by Oni&#039;s ONWCs:&lt;br /&gt;
:0x&#039;&#039;&#039;01&#039;&#039;&#039; 00 - w0_sec (not in game)&lt;br /&gt;
:0x&#039;&#039;&#039;02&#039;&#039;&#039; 00 - w1_tap&lt;br /&gt;
:0x&#039;&#039;&#039;04&#039;&#039;&#039; 00 - w2_sap&lt;br /&gt;
:0x&#039;&#039;&#039;08&#039;&#039;&#039; 00 - w3_phr&lt;br /&gt;
:0x&#039;&#039;&#039;10&#039;&#039;&#039; 00 - w4_psm&lt;br /&gt;
:0x&#039;&#039;&#039;20&#039;&#039;&#039; 00 - w5_sbg&lt;br /&gt;
:0x&#039;&#039;&#039;40&#039;&#039;&#039; 00 - w6_vdg&lt;br /&gt;
:0x&#039;&#039;&#039;80&#039;&#039;&#039; 00 - w7_scc&lt;br /&gt;
:0x00 &#039;&#039;&#039;01&#039;&#039;&#039; - w8_mbo&lt;br /&gt;
:0x00 &#039;&#039;&#039;02&#039;&#039;&#039; - w9_scr&lt;br /&gt;
:0x00 &#039;&#039;&#039;04&#039;&#039;&#039; - w10_sni (not in game)&lt;br /&gt;
:0x00 &#039;&#039;&#039;08&#039;&#039;&#039; - w11_ba1&lt;br /&gt;
:0x00 &#039;&#039;&#039;10&#039;&#039;&#039; - w12_ba2}}&lt;br /&gt;
{{OBDtr| 0x140 | uint32    |8C8CCC| 00 00 00 00 | 0              | fight timer, 240 for w4_psm, 200 for v6_vdg }}&lt;br /&gt;
{{OBDtr| 0x144 | float    |FF00C8| 00 00 00 00 | 0.000000       | ballistic projectile speed for AI prediction purposes; if this field is unused, the projectile is assumed to be infinite speed; field is always zero except 150 for Superball Gun and 160 for Wave Motion Cannon&#039;s secondary trigger }}&lt;br /&gt;
{{OBDtr| 0x148 | float    |FF00C8| 00 00 00 00 | 0.000000       | ballistic projectile gravity for AI prediction purposes; always zero except 0.5 for SBG and 0.3 for WMC&#039;s secondary trigger }}&lt;br /&gt;
{{OBDtr| 0x14C | float    |FF00C8| 00 00 34 43 | 180.000000     | length of a firing spread; AI will perform gunfire dodging when it finds itself inside of a firing spread (see {{SectionLink|AI|Basic combat behaviors}}); can be visualized with *ai2_showfiringspreads{{=}}1* (180 for w1_tap, 150 for w2_sap, 120 for w4_psm) }}&lt;br /&gt;
{{OBDtr| 0x150 | float    |FF00C8| 00 00 40 40 | 3.000000       | width of the firing spread&#039;s base; can be seen by ai2_showfiringspreads{{=}}1 }}&lt;br /&gt;
{{OBDtr| 0x154 | float    |FF00C8| 50 77 D6 3D | 0.104719       | firing spread&#039;s skew; can be seen by ai2_showfiringspreads{{=}}1 (0.1 for w1_tap, 0.21 for w2_sap) }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Transform matrix&lt;br /&gt;
:Probably defines the orientation, scaling and position of the firing spread. It doesn&#039;t appear to be used.&lt;br /&gt;
&lt;br /&gt;
===0x158 to 0x1D7 - Secondary firing mode===&lt;br /&gt;
The only vanilla weapon for which these fields are not all zero is &#039;&#039;&#039;w11_ba1&#039;&#039;&#039;. They are the exact counterparts of the fields at 0xD8 - 0x157.&lt;br /&gt;
&lt;br /&gt;
==0x1D8 to 0x6D7 - Weapon particle array==&lt;br /&gt;
Every ONWC has 16 particle slots (80 at 0x50 bytes each). The number of slots actually used by the weapon is specified at 0xCA. Offsets are relative to the beginning of a slot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtrBK|1=First of 16 elements (black outline).}}&lt;br /&gt;
{{OBDtr| 0x000 | float    |F0F096| AE 6C 56 3D | 0.052349       | transformation matrix, xx term }}&lt;br /&gt;
{{OBDtr| 0x004 | float    |F0F096| 23 A6 7F 3F | 0.998629       | transformation matrix, xy term }}&lt;br /&gt;
{{OBDtr| 0x008 | float    |F0F096| C2 53 90 B3 | -0.000000...   | transformation matrix, xz term }}&lt;br /&gt;
{{OBDtr| 0x00C | float    |F0F096| 23 A6 7F 3F | 0.998629       | transformation matrix, yx term }}&lt;br /&gt;
{{OBDtr| 0x010 | float    |F0F096| AE 6C 56 BD | -0.052349      | transformation matrix, yy term }}&lt;br /&gt;
{{OBDtr| 0x014 | float    |F0F096| AF 8D A9 B7 | -0.000020      | transformation matrix, yz term }}&lt;br /&gt;
{{OBDtr| 0x018 | float    |F0F096| BA 59 A9 B7 | -0.000020      | transformation matrix, zx term }}&lt;br /&gt;
{{OBDtr| 0x01C | float    |F0F096| 5B 02 85 35 | 0.000001       | transformation matrix, zy term }}&lt;br /&gt;
{{OBDtr| 0x020 | float    |F0F096| 00 00 80 BF | -1.000000      | transformation matrix, zz term }}&lt;br /&gt;
{{OBDtr| 0x024 | float    |F0F096| 6F 63 57 40 | 3.365444       | x-offset of particle to weapon }}&lt;br /&gt;
{{OBDtr| 0x028 | float    |F0F096| B3 1D 89 BC | -0.016738      | y-offset of particle to weapon }}&lt;br /&gt;
{{OBDtr| 0x02C | float    |F0F096| C5 C1 2A 3F | 0.667019       | z-offset of particle to weapon }}&lt;br /&gt;
{{OBDtr2|0x030 | char[16] |00C864| w1_tap_e01                   | particle name (reference to 06226-3RAPw1_tap_e01.[[OBD:BINA/PAR3|BINA]]) }}&lt;br /&gt;
{{OBDtr| 0x040 | offset    |00C8FF| 00 00 00 00 | 0              | raw offset of the particle class (raw pointer to it); runtime only }}&lt;br /&gt;
{{OBDtr| 0x044 | uint16    |00C8FF| 01 00       | 1              | ammo decrement (different for the 2 firing modes of w11_ba1) }}&lt;br /&gt;
{{OBDtr| 0x046 | uint16    |00C8FF| 0C 00       | 12             | delay between shots in frames (12 frames {{=}} 0.2 seconds) }}&lt;br /&gt;
{{OBDtr| 0x048 | uint16    |00C8FF| 04 00       | 4              | &#039;roughjustice&#039; delay between shots in frames }}&lt;br /&gt;
{{OBDtr| 0x04A | uint16    |00C8FF| 00 00       | 0              | number in frames for active firing mode (1st frame for activate); Used for w4_psm and w11_ba1 }}&lt;br /&gt;
{{OBDtr| 0x04C | uint16    |00C8FF| 00 00       | 0              | 0 {{=}} particle is triggered by fire1; 1 {{=}} particle is triggered by fire2; -1 {{=}} particle is triggered by both firing modes }}&lt;br /&gt;
{{OBDtr| 0x04E | uint16    |00C8FF| 00 00       | 0              | delay before firing }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Transformation matrix&lt;br /&gt;
:That&#039;s what defines orientation, stretching, etc. See [[OBD:CRSA|CRSA]] for details.&lt;br /&gt;
&lt;br /&gt;
==0x6D8 to 0x71F - End of file==&lt;br /&gt;
[[Image:onwc_e.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr2|0x6D8 | char[32] |C80040| weapon _empty                | empty weapon sound (reference to 08993-weapon_empty.[[OBD:OSBD/OSIm|imp.OSBD]]) }}&lt;br /&gt;
{{OBDtr| 0x6F8 | offset |FFCD96| 00 00 00 00 | 0              | raw offset to the empty weapon sound; runtime only }}&lt;br /&gt;
{{OBDtr| 0x6FC | link     |C8C864| 01 81 0E 00 | 3713           | link to 03713-w1_glow.[[TXMP]] }}&lt;br /&gt;
{{OBDtr| 0x700 | link     |C8C864| 01 82 0E 00 | 3714           | link to 03714-w1_glow_ammo.TXMP }}&lt;br /&gt;
{{OBDtr| 0x704 | float    |0096C8| 00 00 80 3F | 1.000000       | x-scale factor of glow textures }}&lt;br /&gt;
{{OBDtr| 0x708 | float    |0096C8| 00 00 80 3F | 1.000000       | z-scale factor of glow textures }}&lt;br /&gt;
{{OBDtr| 0x70C | float    |0096C8| 76 65 EB 3F | 1.839034       | x-offset of pickup handle }}&lt;br /&gt;
{{OBDtr| 0x710 | float    |0096C8| 96 4C A9 3D | 0.082666       | y-offset of pickup handle }}&lt;br /&gt;
{{OBDtr| 0x714 | float    |0096C8| 06 E2 14 3E | 0.145393       | z-offset of pickup handle }}&lt;br /&gt;
{{OBDtr| 0x718 | float    |0096C8| 00 00 00 00 | 0.000000       | hovering height of dropped weapon }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Glow textures&lt;br /&gt;
:They&#039;re applied to the lower face of the M3GM&#039;s bounding box. The factors above are the ratio between the x/z extent of that face and the half-length/width of the glow textures. So if both factors are 0.5, the glow textures fit the bounding box exactly.&lt;br /&gt;
;Pickup handle&lt;br /&gt;
:The tolerance is hardcoded. The offsets are not relative to the weapon&#039;s axes, but to the world axes (!). This is a rather nasty &amp;quot;feature&amp;quot; because the offsets should be relative to the weapon&#039;s orientation. The way it is now, the pickup volume of a weapon is not necessarily next to the handle. That&#039;s why the WMC is so hard to pick up that some players conclude it&#039;s not possible; being the largest weapon, it has the largest potential discrepancy between its visual handle location and its pickup volume.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONWC | prev=ONVL | next=OPge | name=Oni Weapon Class | family=Character}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONVL&amp;diff=45201</id>
		<title>OBD:ONVL</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONVL&amp;diff=45201"/>
		<updated>2025-05-12T14:36:53Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ONVL | prev=ONTA | next=ONWC | name=Oni Variant List | family=Character | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:onvl_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 8A 06 00 | 1674 | 01674-variant_list.ONVL }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 00 | 0    | level 0 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead | padding }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| 35 00 00 00 | 53   | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | link     |FFC8C8| 01 82 06 00 | 1666 | link to 01666-any.[[OBD:ONCV|ONCV]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Note&lt;br /&gt;
:The lookup of the [[OBD:ONCV|ONCV]] from the [[OBD:ONCC|ONCC]] can be done directly.&lt;br /&gt;
:The ONVL list could be used for security purposes.&lt;br /&gt;
:One way to check if the lookup is made &#039;&#039;via&#039;&#039; ONVL is just to remove links from it.&lt;br /&gt;
:(too lazy to check right now)&lt;br /&gt;
&lt;br /&gt;
;Also note&lt;br /&gt;
:The ONVL contains the IDs of all the 54 [[OBD:ONCV|ONCV]], except &#039;&#039;&#039;bomber&#039;&#039;&#039;, who used to be a variant of &#039;&#039;&#039;striker&#039;&#039;&#039;.&lt;br /&gt;
:It &#039;&#039;does&#039;&#039; contain the obsolete &#039;&#039;&#039;irondemon&#039;&#039;&#039; and &#039;&#039;&#039;tanker_casual&#039;&#039;&#039; [[OBD:ONCV|ONCV]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONVL | prev=ONTA | next=ONWC | name=Oni Variant List | family=Character}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONSK&amp;diff=45200</id>
		<title>OBD:ONSK</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONSK&amp;diff=45200"/>
		<updated>2025-05-12T14:32:15Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header|align=center|type=ONSK|prev=ONSA|next=ONTA|name=Oni Sky Class|family=Level}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:onsk_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 C3 03 00 | 963     | 00963-sunset.ONSK }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3       | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | link     |00FF00| 01 0D 25 00 | 9485    | skybox top; link to sunset_top.[[OBD:TXMP|TXMP]] }}&lt;br /&gt;
{{OBDtr| 0x0C | link     |00FF00| 01 0E 25 00 | 9486    | skybox left; link to 09486-sunset_left.[[OBD:TXMP|TXMP]]; link always used }}&lt;br /&gt;
{{OBDtr| 0x10 | link     |00FF00| 01 0F 25 00 | 9487    | skybox left; link to 09487-sunset_right.[[OBD:TXMP|TXMP]]; link always used }}&lt;br /&gt;
{{OBDtr| 0x14 | link     |00FF00| 01 0C 25 00 | 9484    | skybox front; link to 09484-sunset_front.[[OBD:TXMP|TXMP]]; link always used }}&lt;br /&gt;
{{OBDtr| 0x18 | link     |00FF00| 01 0B 25 00 | 9483    | skybox back; link to 09483-sunset_back.[[OBD:TXMP|TXMP]]; link always used }}&lt;br /&gt;
{{OBDtr| 0x1C | link     |00FF00| 00 00 00 00 | unused  | skybox bottom; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x20 | link     |00FF00| 01 10 25 00 | 9488    | planet 1; link to 09488-sunset_sun.[[OBD:TXMP|TXMP]]; only used in level 2 and 3 }}&lt;br /&gt;
{{OBDtr| 0x24 | link     |00FF00| 00 00 00 00 | unused  | planet 2; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x28 | link     |00FF00| 00 00 00 00 | unused  | planet 3; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x2C | link     |00FF00| 00 00 00 00 | unused  | planet 4; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x30 | link     |00FF00| 00 00 00 00 | unused  | planet 5; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x34 | link     |00FF00| 00 00 00 00 | unused  | planet 6; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x38 | link     |00FF00| 00 00 00 00 | unused  | planet 7; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x3C | link     |00FF00| 00 00 00 00 | unused  | planet 8; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x40 | link     |00FF00| 00 00 00 00 | unused  | sun flare texture; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x44 | link     |00FF00| 01 11 25 00 | 9489    | star 1; link to 09489-lensflare02.[[OBD:TXMP|TXMP]]; always used (see below) }}&lt;br /&gt;
{{OBDtr| 0x48 | link     |00FF00| 00 00 00 00 | unused  | star 2; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x4C | link     |00FF00| 00 00 00 00 | unused  | star 3; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x50 | link     |00FF00| 00 00 00 00 | unused  | star 4; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x54 | link     |00FF00| 00 00 00 00 | unused  | star 5; unused; always the same }}&lt;br /&gt;
{{OBDtr| 0x58 | uint32    |00FFFF| 01 00 00 00 | 1       | number of used planets }}&lt;br /&gt;
{{OBDtr| 0x5C | uint32    |FF00FF| FF FF FF FF | -1      | number of planets with lensflares }}&lt;br /&gt;
{{OBDtr| 0x60 | float  |FFC8C8| 00 00 80 3F | 1.000000| planet 1; U-scaling }}&lt;br /&gt;
{{OBDtr| 0x64 | char[28] |FFC8C8| AD DE       | dead    | planets 2-8; U-scaling }}&lt;br /&gt;
{{OBDtr| 0x80 | float  |FFFFC8| 00 00 80 3F | 1.000000| planet 1; V-scaling }}&lt;br /&gt;
{{OBDtr| 0x84 | char[28] |FFFFC8| AD DE       | dead    | planets 2-8; V-scaling }}&lt;br /&gt;
{{OBDtr| 0xA0 | float  |C8FFC8| 00 00 00 00 | 0.000000| planet 1; elevation in radians }}&lt;br /&gt;
{{OBDtr| 0xA4 | char[28] |C8FFC8| AD DE       | dead    | planets 2-8; elevation in radians }}&lt;br /&gt;
{{OBDtr| 0xC0 | float  |C8FFFF| 00 00 00 00 | 0.000000| planet 1; azimuth in radians }}&lt;br /&gt;
{{OBDtr| 0xC4 | char[28] |C8FFFF| AD DE       | dead    | planets 2-8; azimuth in radians }}&lt;br /&gt;
{{OBDtr| 0xE0 | float  |FFC8FF| 00 00 80 40 | 4.000000| lensflare size }}&lt;br /&gt;
{{OBDtr| 0xE4 | float  |FFC800| 00 00 80 3F | 1.000000| lensflare alpha }}&lt;br /&gt;
{{OBDtr| 0xE8 | uint32    |C800C8| 00 00 00 00 | 0       | number of stars to generate }}&lt;br /&gt;
{{OBDtr| 0xEC | uint32    |C87C64| 45 00 00 00 | 69      | random seed for star generation }}&lt;br /&gt;
{{OBDtr| 0xF0 | uint32    |B0C3D4| 01 00 00 00 | 1       | star textures count; ignored }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Skybox&lt;br /&gt;
:The skybox is just a cube drawn using the skybox textures. The bottom face of the cube is never used/drawn.&lt;br /&gt;
&lt;br /&gt;
;Planets&lt;br /&gt;
:There can be up to 8 &amp;quot;planets&amp;quot; displayed using the specified textures, sizes and positions. Unfortunately there is a bug and they&#039;re no occluded by anything.&lt;br /&gt;
&lt;br /&gt;
;Sun Flare&lt;br /&gt;
:For the first &amp;quot;planet&amp;quot; an optional &amp;quot;flare&amp;quot; can be drawn. It does not appear to work correctly and since planets don&#039;t display correctly the flare is not of much use.&lt;br /&gt;
&lt;br /&gt;
;Stars&lt;br /&gt;
:A fixed number of stars can be displayed at random positions in the sky. Doesn&#039;t appear to work, the stars are not visible and the game crashes when the level ends.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Original ONSK&lt;br /&gt;
*afternoon (level 1)&lt;br /&gt;
*sunset (level 2 and 3)&lt;br /&gt;
*crapsky (level 19)&lt;br /&gt;
*night (all the other levels except level 13, which has no ONSK)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer|type=ONSK|prev=ONSA|next=ONTA|name=Oni Sky Class|family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONOA&amp;diff=45199</id>
		<title>OBD:ONOA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONOA&amp;diff=45199"/>
		<updated>2025-05-12T14:24:34Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ONOA | prev=ONMA | next=ONSA | name=Object Gunk Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:onoa_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 A0 02 00 | 672    | 00672-.ONOA }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3      | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead   | padding }}&lt;br /&gt;
{{OBDtr| 0x0C | uint32    |00FFFF| 22 01 00 00 | 290    | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | uint32    |FFC8C8| 15 19 00 03 | 6421; 3| object ID (first 3 bytes); [[OBD:BINA/OBJC#OBJC types|object type]] (last byte) - the following object types exists:&lt;br /&gt;
&lt;br /&gt;
:0x01 - character&lt;br /&gt;
:0x02 - patrol path&lt;br /&gt;
:0x03 - door&lt;br /&gt;
:0x04 - flag&lt;br /&gt;
:0x05 - furniture&lt;br /&gt;
:0x08 - particle&lt;br /&gt;
:0x09 - powerup&lt;br /&gt;
:0x0A - sound&lt;br /&gt;
:0x0B - trigger volume&lt;br /&gt;
:0x0C - weapon&lt;br /&gt;
:0x0D - trigger&lt;br /&gt;
:0x0E - turret&lt;br /&gt;
:0x0F - console&lt;br /&gt;
:0x10 - combat&lt;br /&gt;
:0x11 - melee&lt;br /&gt;
:0x12 - neutral&lt;br /&gt;
}}&lt;br /&gt;
{{OBDtr| 0x04 | link     |FFFFC8| 01 1A 02 00 | 673  | link to [[OBD:IDXA_ONOA|00673.IDXA]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obviously not all object types have coresponding gunk quads. The only object types that are used in ONOA by the original levels are door, furniture, turret, trigger and console. In addition it appears that the engine only searches for door type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONOA | prev=ONMA | next=ONSA | name=Object Gunk Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONLV&amp;diff=45198</id>
		<title>OBD:ONLV</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONLV&amp;diff=45198"/>
		<updated>2025-05-12T14:21:25Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ref. Oni_Level.h, lines 134-161...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ONLV | prev=ONLD | next=ONMA | name=Oni Game Level | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:onlv_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x000 | res_id   |FF0000| 01 34 02 00 | 564  | 00564-lab.ONLV }}&lt;br /&gt;
{{OBDtr| 0x004 | lev_id   |FFFF00| 01 00 00 06 | 3    | level 3 }}&lt;br /&gt;
{{OBDtr2|0x008 | char[64] |FFC8C8| lab                | level name }}&lt;br /&gt;
{{OBDtr| 0x048 | link     |FFFFC8| 01 3F 02 00 | 575  | link to [[OBD:AKEV|00575-lab.AKEV]] }}&lt;br /&gt;
{{OBDtr| 0x04C | link     |FFFFC8| 01 55 02 00 | 597  | link to [[OBD:OBOA|00597-.OBOA]] }}&lt;br /&gt;
{{OBDtr| 0x050 | link     |FFFFC8| 01 98 02 00 | 664  | link to [[OBD:ONMA|00664-.ONMA]] }}&lt;br /&gt;
{{OBDtr| 0x054 | link     |FFFFC8| 01 99 02 00 | 665  | link to [[OBD:ONFA|00665-.ONFA]] }}&lt;br /&gt;
{{OBDtr| 0x058 | link     |FFFFC8| 01 9A 02 00 | 666  | link to [[OBD:ONTA|00666-.ONTA]] }}&lt;br /&gt;
{{OBDtr| 0x05C | link     |FFFFC8| 01 C3 03 00 | 963  | link to [[OBD:ONSK|00963-sunset.ONSK]] }}&lt;br /&gt;
{{OBDtr| 0x060 | float    |FFFFC8| 00 00 00 00 |  0   | sky height; not used }}&lt;br /&gt;
{{OBDtr| 0x064 | link     |FFFFC8| 01 9C 02 00 | 668  | link to [[OBD:AISA|00668-level3_scripts.AISA]] }}&lt;br /&gt;
{{OBDtr| 0x068 | link     |FFFFC8| 01 9D 02 00 | 669  | link to 00669-level3_scripts.[[OBD:AITR|AITR]] }}&lt;br /&gt;
{{OBDtr| 0x06C | link     |FFFFC8| 01 9E 02 00 | 670  | link to [[OBD:ONSA|00670-level3_scripts.ONSA]] }}&lt;br /&gt;
{{OBDtr| 0x070 | link     |FFFFC8| 01 9F 02 00 | 671  | link to [[OBD:OBDC|00671-level3_scripts.OBDC]] }}&lt;br /&gt;
{{OBDtr| 0x074 | link     |FFFFC8| 01 A0 02 00 | 672  | link to [[OBD:ONOA|00672-.ONOA]] }}&lt;br /&gt;
{{OBDtr| 0x078 | link     |FFFFC8| 01 9B 02 00 | 667  | link to [[OBD:ENVP|00667-.ENVP]] }}&lt;br /&gt;
{{OBDtr| 0x07C | uint32 |C8FFC8| AD DE AD DE | dead | action markers array size; runtime only }}&lt;br /&gt;
{{OBDtrBK|1=Array of 32 action marker elements: first element }}&lt;br /&gt;
{{OBDtr| 0x080 | uint32 |C8FFC8| AD DE AD DE | dead | action marker ID; runtime only }}&lt;br /&gt;
{{OBDtr| 0x084 | float |C8FFC8| AD DE AD DE | dead | action marker X position; runtime only }}&lt;br /&gt;
{{OBDtr| 0x088 | float |C8FFC8| AD DE AD DE | dead | action marker Y position; runtime only }}&lt;br /&gt;
{{OBDtr| 0x08C | float |C8FFC8| AD DE AD DE | dead | action marker Z position; runtime only }}&lt;br /&gt;
{{OBDtr| 0x090 | float |C8FFC8| AD DE AD DE | dead | direction, that char needs to face to use the action marker; runtime only }}&lt;br /&gt;
{{OBDtrBK|1=End of array }}&lt;br /&gt;
{{OBDtr| 0x300 | link     |C8FFFF| 01 35 02 00 | 565  | link to [[OBD:CRSA|00565-.CRSA]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONLV | prev=ONLD | next=ONMA | name=Oni Game Level | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONLD&amp;diff=45197</id>
		<title>OBD:ONLD</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONLD&amp;diff=45197"/>
		<updated>2025-05-12T14:06:20Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ONLD | prev=ONIA | next=ONLV | name=Oni Game Level Descriptor | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:onld_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 D5 05 00 | 1493 | 01493-level_01.ONLD }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 00 | 0    | level 0 }}&lt;br /&gt;
{{OBDtr| 0x08 | uint16    |FFC8C8| 01 00       | 1    | current level number }}&lt;br /&gt;
{{OBDtr| 0x0A | uint16    |FFFFC8| 02 00       | 2    | next level number (ignored; Oni will pick the next highest level number no matter what you place here) }}&lt;br /&gt;
{{OBDtr2|0x0C | char[64] |C8FFC8| TCTF-Training      | name of the level; you&#039;ll find it in the list, when you load a level }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Hardcoded level name&lt;br /&gt;
The name of Chapter 1, &amp;quot;Syndicate Warehouse&amp;quot;, is hardcoded into the engine rather than coming from the ONLD. That&#039;s because [[{{C0}}]] and [[{{C1}}]] share level1_Final.dat, which means that the ONLD could only provide a name for one chapter or the other. The loser was Syndicate Warehouse; BWest hardcoded its name to appear in place of what would have been Save Point 1 of TCTF Training (and shifted the numbering of the other save points down by one). The historical reason for this odd two-levels-in-one situation is that Combat Training was added to Oni in the final rushed month of development.&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONLD | prev=ONIA | next=ONLV | name=Oni Game Level Descriptor | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONIA&amp;diff=45196</id>
		<title>OBD:ONIA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONIA&amp;diff=45196"/>
		<updated>2025-05-12T14:04:18Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | align=center | type=ONIA | prev=ONGS | next=ONLD | name=Oni Character Impact Array | family=Character}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:onia_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 FA 03 00 | 1018 | 01018-.ONIA }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3    | level 0 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[16] |00FF00| AD DE       | dead | padding }}&lt;br /&gt;
{{OBDtr| 0x18 | bool     |00FF00| 00          |      | is loaded (is indices found); must be 0, set to 1 at runtime }}&lt;br /&gt;
{{OBDtr| 0x19 | char[3]  |00FF00| AD DE       | dead | padding }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| 02 00 00 00 | 2    | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr2|0x00 | char[16] |FFC8C8| konflash1          | impact name (looked up from the [[OBD:TRAM|TRAM]] file) }}&lt;br /&gt;
{{OBDtr2|0x10 | char[128]|FFFFC8| Kon_Super_Punch    | impact type name (reference to Kon_Super_Punch.[[OBD:Impt|Impt]]) }}&lt;br /&gt;
{{OBDtr2|0x90 | char[16] |C8FFC8| Heavy              | impact modifier; possible values are Any, Heavy, Medium, Light }}&lt;br /&gt;
{{OBDtr| 0xA0 | uint16    |C8FFFF| FF FF       | -1   | impact type; runtime only }}&lt;br /&gt;
{{OBDtr| 0xA2 | uint16    |FFC8FF| 00 00       | 0    | modifier type; runtime only }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONIA | prev=ONGS | next=ONLD | name=Oni Character Impact Array | family=Character}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONGS&amp;diff=45195</id>
		<title>OBD:ONGS</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONGS&amp;diff=45195"/>
		<updated>2025-05-12T14:00:53Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ONGS | prev=ONFA | next=ONIA | name=Oni Game Settings | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first pic shows the first part of this file. The second pic the second part, the third pic the third part and the last pic the fourth part of it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ongs_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x000 | res_id  |FF0000| 01 00 00 00 | 0                | 00000-game_settings.ONGS }}&lt;br /&gt;
{{OBDtr| 0x004 | file_id |FFFF00| 01 00 00 00 | 0                | level0_Final.dat }}&lt;br /&gt;
{{OBDtr| 0x008 | float   |FFC8C8| 00 00 00 40 | 2.000000         | max overpower HP factor }}&lt;br /&gt;
{{OBDtr| 0x00C | float   |FFC8C8| 00 00 80 3E | 0.250000         | normal hypo strength (see details below) }}&lt;br /&gt;
{{OBDtr| 0x010 | float   |FFC8C8| 00 00 80 3F | 1.000000         | overpower hypo strength }}&lt;br /&gt;
{{OBDtr| 0x014 | float   |FFC8C8| 00 00 C0 3F | 1.500000         | overpower min damage factor (see details below) }}&lt;br /&gt;
{{OBDtr| 0x018 | float   |FFC8C8| 33 33 13 40 | 2.300000         | overpower max damage factor }}&lt;br /&gt;
{{OBDtr| 0x01C | uint32   |FFFFC8| 04 00 00 00 | 4                | number of used key health values for health bar color }}&lt;br /&gt;
{{OBDtr| 0x020 | float   |C8FFC8| 00 00 00 00 | 0.000000         | 0 percent of full health }}&lt;br /&gt;
{{OBDtr| 0x024 | float   |C8FFC8| C2 F5 28 3F | 0.660000         | 66 percent of full health }}&lt;br /&gt;
{{OBDtr| 0x028 | float   |C8FFC8| 47 E1 7A 3F | 0.980000         | 98 percent of full health }}&lt;br /&gt;
{{OBDtr| 0x02C | float   |C8FFC8| 00 00 80 3F | 1.000000         | 100 percent of full health }}&lt;br /&gt;
{{OBDtr| 0x030 | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x034 | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x038 | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x03C | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x040 | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x044 | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x048 | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x04C | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x050 | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x054 | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x058 | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x05C | float   |C8FFC8| AD DE AD DE | unused         | additional space for percent of full health; unused }}&lt;br /&gt;
{{OBDtr| 0x060 | color   |FFC8FF| 00 00 FF FF | 0, 0, 255; 255   | health color at 0 percent of full health (red) (see details below) }}&lt;br /&gt;
{{OBDtr| 0x064 | color   |FFC8FF| 00 FF FF FF | 0, 255, 255; 255 | health color at 66 percent of full health (yellow) }}&lt;br /&gt;
{{OBDtr| 0x068 | color   |FFC8FF| 2B A1 13 FF | 43, 161, 19; 255 | health color at 98 percent of full health (greenish) }}&lt;br /&gt;
{{OBDtr| 0x06C | color   |FFC8FF| 00 FF 00 FF | 0, 255, 0; 255   | health color at 100 percent of full health (green) }}&lt;br /&gt;
{{OBDtr| 0x070 | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x074 | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x078 | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x07C | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x080 | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x084 | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x088 | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x08C | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x090 | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x094 | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x098 | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtr| 0x09C | color   |FFC8FF| AD DE AD DE | unused   | additional space for health color; unused }}&lt;br /&gt;
{{OBDtrBK|Names of the meshes used for powerup items (first entry shown, six used, room for seven)}}&lt;br /&gt;
{{OBDtr2|0x0A0 |char[128]|C800C8| powerup_ammo                   | name of the 3D model of the red ammo clip (M3GMpowerup_ammo) }}&lt;br /&gt;
|}&lt;br /&gt;
;Hypo strength&lt;br /&gt;
:This is the coefficient for how much of the character&#039;s health is healed by a hypo. The numbers specified here mean that 25% of their max health will be restored under normal conditions, but if the character is already at maximum health then 100% of their max HP is added, doubling their health and taking them into overpower. If they are at less than max health, but high enough that the hypo&#039;s 25% effectiveness will take them above max health, then the remainder of the hypo counts at a 100% coefficient. For example, a character with a max of 200 HP and current health of 190 HP uses a hypo: it heals those 10 points and then, because 60% of the hypo&#039;s healing power is remaining, it is applied at a rate of 60% of that character&#039;s max health, taking them into overpower by an additional 120 HP (60% * 200).&lt;br /&gt;
&lt;br /&gt;
;Damage factors&lt;br /&gt;
:The 1.5 and 2.3 figures are multipliers for damage done by melee attacks if the character is capable of overpower mode. For instance, when Konoko is at peak overpower she will do 2.3x damage with each attack, and this will ramp down to 1.5x when she is 1 point above her max HP and about to leave overpower mode.&lt;br /&gt;
&lt;br /&gt;
;Health colors&lt;br /&gt;
:The colors are specified in the order BGRA. These are not only used for the health bar in the HUD but also hit flashes when striking enemies and for any particle that uses the &amp;quot;special tint&amp;quot; flag (e.g. Barabas&#039; regeneration particles). The actual color used in these circumstances will be an interpolation between the specified key values, so for instance at 33% health you should expect to see a color halfway between 0%&#039;s pure red and 66%&#039;s pure yellow (i.e. orange).&lt;br /&gt;
&lt;br /&gt;
;Order of the powerup types&lt;br /&gt;
:Ballistic ammo, energy ammo, hypo, shield, invisibility, [[LSI]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Image:ongs_m1.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtrBK|Names of the &amp;quot;glow&amp;quot; textures displayed for powerups lying on the ground (first entry shown, six used, room for seven}}&lt;br /&gt;
{{OBDtr2| 0x420 |char[128]|C87C64| glowtex_ammo | name of the glow texture for red ammo clips (reference to 01448-glowtex_ammo.[[OBD:TXMP|TXMP]]) }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Image:ongs_m2.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtr| 0x7A0 | float |B0C3D4| 00 00 A0 40 | 5.000000 | red ammo glow x size }}&lt;br /&gt;
{{OBDtr| 0x7A4 | float   |B0C3D4| 00 00 A0 40 | 5.000000 | red ammo glow y size }}&lt;br /&gt;
{{OBDtr| 0x7A8 | float   |B0C3D4| 00 00 A0 40 | 5.000000 | green energy cell glow x size }}&lt;br /&gt;
{{OBDtr| 0x7AC | float   |B0C3D4| 00 00 A0 40 | 5.000000 | green energy cell glow y size }}&lt;br /&gt;
{{OBDtr| 0x7B0 | float   |B0C3D4| 00 00 A0 40 | 5.000000 | hypo glow x size }}&lt;br /&gt;
{{OBDtr| 0x7B4 | float   |B0C3D4| 00 00 A0 40 | 5.000000 | hypo glow y size }}&lt;br /&gt;
{{OBDtr| 0x7B8 | float   |B0C3D4| 00 00 A0 40 | 5.000000 | force shield glow x size }}&lt;br /&gt;
{{OBDtr| 0x7BC | float   |B0C3D4| 00 00 A0 40 | 5.000000 | force shield glow y size }}&lt;br /&gt;
{{OBDtr| 0x7C0 | float   |B0C3D4| 00 00 A0 40 | 5.000000 | phase cloak glow x size }}&lt;br /&gt;
{{OBDtr| 0x7C4 | float   |B0C3D4| 00 00 A0 40 | 5.000000 | phase cloak glow y size  }}&lt;br /&gt;
{{OBDtr| 0x7C8 | float   |B0C3D4| 00 00 C0 40 | 6.000000 | LSI glow x size }}&lt;br /&gt;
{{OBDtr| 0x7CC | float   |B0C3D4| 00 00 C0 40 | 6.000000 | LSI glow y size }}&lt;br /&gt;
{{OBDtr| 0x7D0 | float   |B0C3D4| AD DE AD DE | unused | extra powerup glow x size; unused }}&lt;br /&gt;
{{OBDtr| 0x7D4 | float   |B0C3D4| AD DE AD DE | unused | extra powerup glow y size; unused }}&lt;br /&gt;
{{OBDtrBK|23 links to sounds of various gameplay events }}&lt;br /&gt;
{{OBDtr2|0x7D8 | char[32]|FFDDDD| ...                    | sound name; unused; (reference to an [[OBD:OSBD|OSBD]] file) }}&lt;br /&gt;
|}&lt;br /&gt;
;Glow size&lt;br /&gt;
:In local coordinates, because the orientation of a &#039;&#039;dropped&#039;&#039; powerup can be anything.&lt;br /&gt;
;Event impulse sounds&lt;br /&gt;
:0. (unused) - some missing door sound&lt;br /&gt;
:1. door_fail&lt;br /&gt;
:2. door_lock&lt;br /&gt;
:3. (unused) - door_unlock&lt;br /&gt;
:4. use_hypo&lt;br /&gt;
:5. (unused)&lt;br /&gt;
:6. inventory_fail&lt;br /&gt;
:7. receive_ammo&lt;br /&gt;
:8. receive_cell&lt;br /&gt;
:9. receive_hypo&lt;br /&gt;
:10. receive_lsi&lt;br /&gt;
:11. compass&lt;br /&gt;
:12. objective_new&lt;br /&gt;
:13. objective_prompt&lt;br /&gt;
:14. objective_complete&lt;br /&gt;
:15. autosave&lt;br /&gt;
:16. (unused)&lt;br /&gt;
:17. (unused)&lt;br /&gt;
;Event ambient sounds&lt;br /&gt;
:18. health_low&lt;br /&gt;
:19. health_over&lt;br /&gt;
:20. shield&lt;br /&gt;
:21. invis&lt;br /&gt;
:22. (unused)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Image:ongs_m3.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD_Table_Header}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
{{OBDtrBK| the following 9 factors affect the notice, block and dodge specified in the [[OBD:BINA/OBJC/MELE|melee]] profile }}&lt;br /&gt;
{{OBDtr| 0xAB8 | float   |64AAAA| 33 33 33 3F | 0.700000 | notice factor if you play on easy }}&lt;br /&gt;
{{OBDtr| 0xABC | float   |64AAAA| 00 00 80 3F | 1.000000 | notice factor if you play on normal }}&lt;br /&gt;
{{OBDtr| 0xAC0 | float   |64AAAA| 33 33 B3 3F | 1.400000 | notice factor if you play on hard }}&lt;br /&gt;
{{OBDtr| 0xAC4 | float   |64AAAA| 9A 99 19 3F | 0.600000 | enemy block chance factor if you play on easy }}&lt;br /&gt;
{{OBDtr| 0xAC8 | float   |64AAAA| 00 00 80 3F | 1.000000 | enemy block chance factor if you play on normal }}&lt;br /&gt;
{{OBDtr| 0xACC | float   |64AAAA| 66 66 A6 3F | 1.300000 | enemy block chance factor if you play on hard }}&lt;br /&gt;
{{OBDtr| 0xAD0 | float   |64AAAA| CD CC 4C 3F | 0.800000 | dodge factor if you play on easy }}&lt;br /&gt;
{{OBDtr| 0xAD4 | float   |64AAAA| 00 00 80 3F | 1.000000 | dodge factor if you play on normal }}&lt;br /&gt;
{{OBDtr| 0xAD8 | float   |64AAAA| 00 00 C0 3F | 1.500000 | dodge factor if you play on hard }}&lt;br /&gt;
{{OBDtr| 0xADC | float   |64AAAA| 9A 99 99 3F | 1.200000 | weapon accuracy factor if you play on easy }}&lt;br /&gt;
{{OBDtr| 0xAE0 | float   |64AAAA| 00 00 80 3F | 1.000000 | weapon accuracy factor if you play on normal }}&lt;br /&gt;
{{OBDtr| 0xAE4 | float   |64AAAA| 9A 99 19 3F | 0.600000 | weapon accuracy factor if you play on hard }}&lt;br /&gt;
{{OBDtr| 0xAE8 | float   |64AAAA| 00 00 80 3F | 1.000000 | enemy health factor if you play on easy }}&lt;br /&gt;
{{OBDtr| 0xAEC | float   |64AAAA| 00 00 80 3F | 1.000000 | enemy health factor if you play on normal }}&lt;br /&gt;
{{OBDtr| 0xAF0 | float   |64AAAA| 00 00 A0 3F | 1.250000 | enemy health factor if you play on hard }}&lt;br /&gt;
{{OBDtr| 0xAF4 | float   |64AAAA| 66 66 A6 3F | 1.300000 | player health factor if you play on easy }}&lt;br /&gt;
{{OBDtr| 0xAF8 | float   |64AAAA| 00 00 80 3F | 1.000000 | player health factor if you play on normal }}&lt;br /&gt;
{{OBDtr| 0xAFC | float   |64AAAA| 00 00 80 3F | 1.000000 | player health factor if you play on hard }}&lt;br /&gt;
{{OBDtr| 0xB00 | uint32   |EBEBEB| 10 00 00 00 | 16       | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr2|0x000 | char[32]|8C8CCC| hypo                   | event name }}&lt;br /&gt;
{{OBDtr| 0x020 | uint16   |FF00C8| 01 00       | 1        | first level with autoprompting }}&lt;br /&gt;
{{OBDtr| 0x022 | uint16   |F0F096| 02 00       | 2        | last level with autoprompting }}&lt;br /&gt;
{{OBDtr2|0x024 | char[32]|00C864| autoprompt_hypo        | raw file anchor for the text message (it belongs to the  [[OBD:SUBT|SUBT]] file) }}&lt;br /&gt;
|}&lt;br /&gt;
;Prompts&lt;br /&gt;
:hypo, cell, ammo, invis, shield, lsi (5 different prompts), weapon, useconsole, usealarm, usedoor, usehypo, nci (talk to character).&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONGS | prev=ONFA | next=ONIA | name=Oni Game Settings | family=General}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONCV&amp;diff=45194</id>
		<title>OBD:ONCV</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONCV&amp;diff=45194"/>
		<updated>2025-05-12T13:36:12Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Removing DEAD part... It is NOT a part of the type...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ONCV | prev=ONCP | next=ONFA | name=Oni Character Variant | family=Character | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All ONCV files are 0 byte files. That means that Oni takes the information out of the ONCV files of level 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:oncv_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 99 06 00 | 1689  | 01689-konoko.ONCV }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 00 | 0     | level 0 }}&lt;br /&gt;
{{OBDtr| 0x08 | link     |FFC8C8| 01 82 06 00 | 1666  | link to 01666-any.ONCV (pointer to the parent at runtime) }}&lt;br /&gt;
{{OBDtr2|0x0C | char[32] |FFFFC8| Konoko              | character type name; Oni spawns this type when you start the game}}&lt;br /&gt;
{{OBDtr2|0x2C | char[32] |C8FFC8| unused              | character type name; if the &amp;quot;upgrade difficulty&amp;quot; bit in the [[OBD:BINA/OBJC/CHAR|BINA/CHAR]] is set, Oni spawns this type if you play on Hard }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Note 1: The ONCVs are used for random [[OBD:ONCC|ONCC]] selection (e.g. spawning striker_easy_1, striker_easy_2 or striker_easy_3, at random).&lt;br /&gt;
:If character variants are enabled (in [[OBD:BINA/OBJC/CHAR|BINA/CHAR]]):&lt;br /&gt;
:#The ONCC specified in BINA/CHAR is selected.&lt;br /&gt;
:#The ONCV link in that ONCC is looked up.&lt;br /&gt;
:#The actual ONCC is chosen at random from all ONCCs linking to the ONCV.&lt;br /&gt;
&lt;br /&gt;
In order to experiment with this, you have to change the ONCV links in several ONCCs. For example:&lt;br /&gt;
:Make &#039;&#039;&#039;ONCCstriker_easy_1&#039;&#039;&#039;, &#039;&#039;&#039;ONCCstriker_easy_2&#039;&#039;&#039; and &#039;&#039;&#039;ONCstriker_easy_3&#039;&#039;&#039; link to &#039;&#039;&#039;ONCVstriker_hard&#039;&#039;&#039; and vice versa:&lt;br /&gt;
:Make &#039;&#039;&#039;ONCCstriker_hard_1&#039;&#039;&#039;, &#039;&#039;&#039;ONCCstriker_hard_2&#039;&#039;&#039; and &#039;&#039;&#039;ONCCstriker_hard_3&#039;&#039;&#039; link to &#039;&#039;&#039;ONCVstriker_easy&#039;&#039;&#039;.&lt;br /&gt;
Then you won&#039;t notice any change for those spawns where the character variant was disabled, and for those where it&#039;s enabled, you&#039;ll get hard Strikers instead of easy ones and vice versa.&lt;br /&gt;
&lt;br /&gt;
;Note 2: The ONCV defines the &amp;quot;harder&amp;quot; characters spawned on Hard mode (if enabled in BINA/CHAR). If &amp;quot;harder character variants&amp;quot; are enabled (in BINA/CHAR):&lt;br /&gt;
:#The ONCC specified in BINA/CHAR is selected.&lt;br /&gt;
:#The ONCV link in that ONCC is looked up.&lt;br /&gt;
:#The &amp;quot;harder&amp;quot; ONCV name in that ONCV is looked up.&lt;br /&gt;
:#The actual ONCC is chosen at random from all ONCCs linking to that new ONCV.&lt;br /&gt;
:#In case there is no matching ONCC, the ONCC in step 1 is kept.&lt;br /&gt;
Thus, if you take e.g. &#039;&#039;&#039;ONCVninja_med&#039;&#039;&#039; and replace the string &amp;quot;ninja_hard&amp;quot; with &amp;quot;striker_hard&amp;quot; (not forgetting about the null char), you&#039;ll have a surprise at the start of Rooftops. In fact, anywhere where you used to have a blue Ninja on Easy and Normal,&lt;br /&gt;
and a red one on Hard, you&#039;ll have a red &#039;&#039;Striker&#039;&#039; on Hard. Nice, eh? (If you want a &#039;&#039;real&#039;&#039; challenge, just try &amp;quot;Konoko&amp;quot;....)&lt;br /&gt;
&lt;br /&gt;
;Note 3: ONCVkonoko links to ONCVany, which links to nothing.&lt;br /&gt;
:Inter-ONCV linking can serve the same purpose: in Notes 1.3 and 2.4 above, any ONCC linking to the ONCV via another ONCV could also be selected.&lt;br /&gt;
:In order to play with that, however, you have to rename a level&#039;s ONCV, because originally only the more specific ones are included (not ONCVstriker or ONCVany).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONCV | prev=ONCP | next=ONFA | name=Oni Character Variant | family=Character}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONCP&amp;diff=45193</id>
		<title>OBD:ONCP</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONCP&amp;diff=45193"/>
		<updated>2025-05-12T13:33:55Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ONCP | prev=ONCC | next=ONCV | name=Oni Character Particle Array  | family=Character | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:oncp_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 F9 03 00 | 1017       | 01017-.ONCP }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3          | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[16] |00FF00| AD DE       | dead       | padding }}&lt;br /&gt;
{{OBDtr| 0x18 | bool     |00FF00| 0           | 0          | is loaded; must be 0, set to 1 at runtime }}&lt;br /&gt;
{{OBDtr| 0x19 | char[3]  |00FF00| AD DE       | dead       | padding }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| 0D 00 00 00 | 13         | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr2|0x00 | char[16] |FFC8C8| acid                     | particle name (referenced by [[OBD:TRAM/raw0x2C|TRAM particles]]) }}&lt;br /&gt;
{{OBDtr2|0x10 | char[64] |FFFFC8| env_splash_e01a          | [[OBD:BINA/PAR3|particle class name]] }}&lt;br /&gt;
{{OBDtr| 0x50 | uint16   |C8FFC8| FF FF       | -1         | number of the bodypart; see below }}&lt;br /&gt;
{{OBDtr| 0x52 | char[2]    |C8FFFF| 5F 00       | 95         | padding }}&lt;br /&gt;
{{OBDtr| 0x54 | offset    |FFC8FF| 00 00 00 00 | 0          | raw offset of particle class; runtime only }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Note&lt;br /&gt;
:The ONCP is the list of all the particles (motion trails, combo flashes, etc) that will be available for the [[OBD:ONCC|ONCC]] that links to it.&lt;br /&gt;
:Nothing bad happens if an ONCC doesn&#039;t find a particle required by an animation, you just get a warning at the console.&lt;br /&gt;
:However, [[AE]]&#039;s glass-breaking animations will give you a &#039;&#039;lot&#039;&#039; of warnings without the right ONCP (basically for all combat moves, not just flashy ones).&lt;br /&gt;
&lt;br /&gt;
;Bodypart number&lt;br /&gt;
*0-19 - this is a super particle attached to the specified bodypart when the character has daodan powers; the particle name must start with super for this to work; particle events are as follows:&lt;br /&gt;
**particle is &amp;quot;create&amp;quot;d (if absent) and &amp;quot;start&amp;quot;ed when entering overpower while the character is &amp;quot;active&amp;quot;;&lt;br /&gt;
**particle is &amp;quot;stop&amp;quot;ped when overpower runs out;&lt;br /&gt;
**particle is killed (either is deleted or &amp;quot;die&amp;quot;s on its own) when/if the character goes &amp;quot;inactive&amp;quot;.&lt;br /&gt;
*0xFFFF - the particle is attached by an animation (the animation specifies the bodypart); particle events are as follows:&lt;br /&gt;
**the animation can &amp;quot;create&amp;quot; multiple instances of a particle as necessary (one per bone involved), at the start of the animation;&lt;br /&gt;
**particle is &amp;quot;start&amp;quot;ed and &amp;quot;stop&amp;quot;ped according to the frames specified in [[OBD:TRAM/raw0x2C|TRAM]];&lt;br /&gt;
**particle is killed at the end of the animation&lt;br /&gt;
*0x8000 - the particle is attached by an animation (the animation specifies the bodypart) and it also generates a Self_Damage_Killed impact (user by back breaking animations); particle event rules are same as for 0xFFFF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONCP | prev=ONCC | next=ONCV | name=Oni Character Particle Array  | family=Character}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ONCC&amp;diff=45192</id>
		<title>OBD:ONCC</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ONCC&amp;diff=45192"/>
		<updated>2025-05-12T13:30:02Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ref. ONI_Character.h, lines 448-506...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ONCC | prev=OFGA | next=ONCP | name=Oni Character Class | family=Character | align=center}}&lt;br /&gt;
&lt;br /&gt;
[[Image:oncc_a.gif]]&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x000 | res_id   |FF0000| 01 DF 03 00 | 991         | 00991-konoko_generic.ONCC }}&lt;br /&gt;
{{OBDtr| 0x004 | lev_id   |FFFF00| 01 00 00 06 | 0           | level 3 }}&lt;br /&gt;
{{OBDtr| 0x008 | float    |00FF00| CD CC 0C 3F | 0.550000    | fall speed (always 0.55) (mostly unused, see below) }}&lt;br /&gt;
{{OBDtr| 0x00C | float    |00FF00| 8F C2 75 3D | 0.060000    | strength of gravity for this character }}&lt;br /&gt;
{{OBDtr| 0x010 | float    |00FF00| CD CC 8C 3F | 1.100000    | starting velocity for a simple (tap) JUMP }}&lt;br /&gt;
{{OBDtr| 0x014 | float    |00FF00| 00 00 80 C0 | -4.000000   | maximum velocity for jumping and falling }}&lt;br /&gt;
{{OBDtr| 0x018 | float    |00FF00| 8F C2 F5 3C | 0.030000    | upward acceleration as long as you hold JUMP }}&lt;br /&gt;
{{OBDtr| 0x01C | uint16    |00FFFF| 07 00       | 7           | fall timer (always 7) (mostly unused, see below) }}&lt;br /&gt;
{{OBDtr| 0x01E | uint16    |00FFFF| 14 00       | 20          | how long you can continue holding down JUMP to increase the height of your jump }}&lt;br /&gt;
{{OBDtr| 0x020 | float    |FF00FF| 00 00 34 42 | 45.000000   | maximum falling height without damage }}&lt;br /&gt;
{{OBDtr| 0x024 | float    |FF00FF| 00 00 07 43 | 135.000000  | maximum falling height with damage }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Units&lt;br /&gt;
:times are in frames&lt;br /&gt;
:heights are in world units (0.1m or 4&amp;quot;)&lt;br /&gt;
:velocities are in world units per tick (1/60s)&lt;br /&gt;
:accelerations are in world units per tick squared&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Fall speed and timer&lt;br /&gt;
:These two fields are only looked at when predicting whether an attack will hit a target while the attacker is in midair. They are probably a development relic that is looked at in error, as the actual falling speed is determined by 0x00C and the actual fall timer is 0x01E.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Jetpack timer&lt;br /&gt;
:You can press JUMP multiple times during the time window when it&#039;s large enough. See the [http://mods.oni2.net/node/83 Barabas Jetpack mod] for an application of this principle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Falling height: let FH1 be the height at 0x20&lt;br /&gt;
:let FH2 be the height at 0x24&lt;br /&gt;
:let BH be the base health of the character&lt;br /&gt;
:let FH be the actual falling height&lt;br /&gt;
:then, if FH &amp;gt; FH2, the character is killed&lt;br /&gt;
:if FH &amp;lt; FH1, the character takes no damage&lt;br /&gt;
:if FH1 &amp;lt; FH &amp;lt; FH2, the character takes damage (FH - FH1) / (FH2 - FH1) * BH&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Shadow Constants&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x028 | link     |FF8000| 01 F8 03 00 | 1016        | link to 01016-shadow1.[[OBD:TXMP|TXMP]] }}&lt;br /&gt;
{{OBDtr| 0x02C | float    |FF8000| 00 00 40 41 | 12.000000   | height where the diameter of the shadow shrinks to 0x03C }}&lt;br /&gt;
{{OBDtr| 0x030 | float    |FF8000| 00 00 00 41 | 8.000000    | height range over which the diameter of the shadow decreases from 0x034 to 0x038 and the shadow starts to fades out from 0x040 to 0x042 }}&lt;br /&gt;
{{OBDtr| 0x034 | float    |FF8000| 00 00 C0 40 | 6.000000    | maximum diameter of the shadow }}&lt;br /&gt;
{{OBDtr| 0x038 | float    |FF8000| 00 00 90 40 | 4.500000    | diameter that the shadow shrinks to when 0x030 is reached }}&lt;br /&gt;
{{OBDtr| 0x03C | float    |FF8000| 00 00 40 40 | 3.000000    | minimum diameter of the shadow }}&lt;br /&gt;
{{OBDtr| 0x040 | uint16    |FF8000| 30 00       | 48          | starting transparency of the shadow as the character rises towards 0x030 }}&lt;br /&gt;
{{OBDtr| 0x042 | uint16    |FF8000| 30 00       | 48          | starting transparency of the shadow when the character begins to get above 0x030 }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Jump Constants&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x044 | float    |FF0080| 00 00 C8 41 | 25.000000   | jump distance; unused (always 25) }}&lt;br /&gt;
{{OBDtr| 0x048 | uint8     |FFC8C8| 16          |  22         | jump height; unused (always 22) }}&lt;br /&gt;
{{OBDtr| 0x049 | uint8     |FFC8C8| 06          |  6          | jump distance squares(?); unused (always 6) }}&lt;br /&gt;
{{OBDtr| 0x04A | char[2]  |FFC8C8| AD DE       | dead        | padding }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Cover Constants&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x04C | float    |FFFFC8| 00 00 20 42 | 40.000000   | ray increment(?); unused (always 40) }}&lt;br /&gt;
{{OBDtr| 0x050 | float    |FFFFC8| 00 00 96 43 | 300.000000  | ray max(?); unused (always 300) }}&lt;br /&gt;
{{OBDtr| 0x054 | float    |FFFFC8| 35 FA 8E 3C | 0.017453    | ray angle(?); unused (always π/180) }}&lt;br /&gt;
{{OBDtr| 0x058 | float    |FFFFC8| DB 0F C9 3F | 1.570796    | ray angle max(?);unused (always π/2) }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Autofreeze Constants&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x05C | float    |FFFFC8| 00 00 A0 40 | 5.000000    | distance X+Z(?); unused (always 5) }}&lt;br /&gt;
{{OBDtr| 0x060 | float    |FFFFC8| 00 00 80 3F | 1.000000    | distance Y(?); unused (always 1) }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Inventory Constants&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x064 | uint16    |C8FFC8| 06 00       | 6           | hypo regeneration rate in ticks per hit point restored }}&lt;br /&gt;
{{OBDtr| 0x066 | char[2]  |C8FFC8| AD DE       | dead        | padding }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;LOD Constants&lt;br /&gt;
Squares of the distance from the camera at which each LOD kicks in ([[LOD|this article]] has the full calculation for arriving at the LOD to use)&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x068 | float    |C8FFFF| 00 10 3D 48 |193600.000000| distance squared(?); always 440 squared }}&lt;br /&gt;
{{OBDtr| 0x06C | float    |C8FFFF| 00 10 3D 47 | 48400.000000| distance squared(?); always 220 squared }}&lt;br /&gt;
{{OBDtr| 0x070 | float    |C8FFFF| 00 10 3D 46 | 12100.000000| distance squared(?); always 110 squared }}&lt;br /&gt;
{{OBDtr| 0x074 | float    |C8FFFF| 00 00 00 00 | 0.000000    | distance squared(?); always 0 }}&lt;br /&gt;
{{OBDtr| 0x078 | float    |C8FFFF| 00 00 00 00 | 0.000000    | distance squared(?); always 0 }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Hurt Sound Constants&lt;br /&gt;
&lt;br /&gt;
See [[XML:ONCC#.3CHurtSoundConstants.3E|HERE]] for the full calculation of whether to play a hurt sound and which sound to play.&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x07C | uint16    |FFC8FF| 23 00       | 35          | minimum chance &amp;lt;code&amp;gt;in %&amp;lt;/code&amp;gt; of playing a pain sound (always 35) }}&lt;br /&gt;
{{OBDtr| 0x07E | uint16    |FFC8FF| 5A 00       | 90          | maximum chance &amp;lt;code&amp;gt;in %&amp;lt;/code&amp;gt; of playing a pain sound in % (always 90) }}&lt;br /&gt;
{{OBDtr| 0x080 | uint16    |FFC8FF| 0F 00       | 15          | at least this much damage &amp;lt;code&amp;gt;in %&amp;lt;/code&amp;gt; must be done to play a pain sound (always 15) }}&lt;br /&gt;
{{OBDtr| 0x082 | uint16    |FFC8FF| 78 00       | 120         | time in ticks before the damage tracker used for this AI&#039;s pain sounds resets (always 120) }}&lt;br /&gt;
{{OBDtr| 0x084 | uint16    |FFC8FF| 23 00       | 35          | time in ticks that must pass between pain sounds being played (always 35) }}&lt;br /&gt;
{{OBDtr| 0x086 | uint16    |FFC8FF| 01 00       | 1           | number of times that AI will play light pain sound before &amp;quot;upgrading&amp;quot; to a medium pain sound (always 1) }}&lt;br /&gt;
{{OBDtr| 0x088 | uint16    |FFC8FF| 02 00       | 2           | number of times that AI will play medium pain sound before &amp;quot;upgrading&amp;quot; to a heavy pain sound (always 2) }}&lt;br /&gt;
{{OBDtr| 0x08A | uint16    |FFC8FF| 64 00       | 100         | chance of playing a death sound (always 100) }}&lt;br /&gt;
{{OBDtr| 0x08C | uint16    |FFC8FF| 0A 00       | 10          | minimum damage required for an AI to play the pain sound at maximum volume (always 10) }}&lt;br /&gt;
{{OBDtr| 0x08E | uint16    |FFC8FF| 0C 00       | 12          | cumulative damage before a light pain sound gets upgraded to a medium pain sound (always 12) }}&lt;br /&gt;
{{OBDtr| 0x090 | uint16    |FFC8FF| 16 00       | 22          | cumulative damage before a medium pain sound gets upgraded to a heavy pain sound (always 22) }}&lt;br /&gt;
{{OBDtr| 0x092 | bool     |FFC800| 00          | 0           | runtime only: if sound pointers have been set (if sounds are found) }}&lt;br /&gt;
{{OBDtr| 0x093 | char[1]  |C800C8| DE          | dead        | padding }}&lt;br /&gt;
{{OBDtr| 0x094 | float    |C87C64| 00 00 00 3F | 0.500000    | minimum volume of pain sound (before 0x08C is reached and volume becomes 100%) }}&lt;br /&gt;
{{OBDtr2|0x098 | char[32] |B0C3D4| konoko_hurt_light         | light hurt sound (reference to 08121-konoko_hurt_light.[[OBD:OSBD|imp.OSBD]] of level 0) }}&lt;br /&gt;
{{OBDtr2|0x0B8 | char[32] |B0C3D4| konoko_hurt_medium        | medium hurt sound (reference to 08123-konoko_hurt_medium.imp.OSBD of level 0) }}&lt;br /&gt;
{{OBDtr2|0x0D8 | char[32] |B0C3D4| konoko_hurt_heavy         | heavy hurt sound (reference to 08119-konoko_hurt_heavy.imp.OSBD of level 0) }}&lt;br /&gt;
{{OBDtr2|0x0F8 | char[32] |B0C3D4| konoko_death              | death sound (reference to 08115-konoko_death.imp.OSBD of level 0) }}&lt;br /&gt;
{{OBDtr| 0x118 | offset    |E7CEA5| 00 00 00 00 | 0           | runtime only: raw offset of light hurt sound }}&lt;br /&gt;
{{OBDtr| 0x11C | offset    |E7CEA5| 00 00 00 00 | 0           | runtime only: raw offset of medium hurt sound }}&lt;br /&gt;
{{OBDtr| 0x120 | offset    |E7CEA5| 00 00 00 00 | 0           | runtime only: raw offset of heavy hurt sound }}&lt;br /&gt;
{{OBDtr| 0x124 | offset    |E7CEA5| 00 00 00 00 | 0           | runtime only: raw offset of death sound }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AI Constants&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x128 | bitset   |E7CEA5| 17 00 00 00 | 23          | AI options bitset; see below }}&lt;br /&gt;
{{OBDtr| 0x12C | float    |FFDDDD| 00 00 80 3F | 1.000000    | AI rotation speed factor; always 1.0 }}&lt;br /&gt;
{{OBDtr| 0x130 | uint16    |64AAAA| 06 00       | 6           | minimum number of frames AI remains in fallen position when it is knocked down; overriden by char&#039;s MELE profile if possible }}&lt;br /&gt;
{{OBDtr| 0x132 | uint16    |64AAAA| 18 00       | 24          | maximum number of frames AI remains in fallen position when it is knocked down; overriden by char&#039;s MELE profile if possible }}&lt;br /&gt;
{{OBDtr| 0x134 | uint32   |EBEBEB| 0F 00 00 00 | 15          | number of frames after which AI realizes that it is in the firing spread and it starts dodging }}&lt;br /&gt;
{{OBDtr| 0x138 | float    |8C8CCC| 00 00 80 3F | 1.000000    | minimum dodge time; how long AI should perform dodging/hiding in response to being inside a firing spread (the higher it is, the longer he will hide/dodge even after firing spread disappears) }}&lt;br /&gt;
{{OBDtr| 0x13C | float    |8C8CCC| 00 00 80 3F | 1.000000    | dodge priority dampening; the higher it is, the lower priority the AI gives to dodging }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AI options bitset&lt;br /&gt;
:allows or disables some parts of the AI behavior&lt;br /&gt;
*no flags - startle anim is enabled, rest is disabled&lt;br /&gt;
*0x01 - startle anim disabled&lt;br /&gt;
*0x02 - firing spread/projectile dodge enabled for melee&lt;br /&gt;
*0x04 - requires 0x02; firing spread/projectile dodge enabled for weapons; AI tries to face shooter and shoot back while dodging&lt;br /&gt;
*0x08 - requires 0x02, overrides 0x04 if both are set; firing spread/projectile dodge enabled for weapons; AI isn&#039;t shooting, it just tends to run away, not facing shooter&lt;br /&gt;
*0x10 - bit not used&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AI rotation speed factor&lt;br /&gt;
:reference rotation speed is about 1 turn (360°) per second&lt;br /&gt;
:the setting is only effective if the AI is in control&lt;br /&gt;
:so it&#039;s a bit like the AI&#039;s mouse sensitivity :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AI Targeting Prediction Constants&lt;br /&gt;
&lt;br /&gt;
See [[XML:ONCC#.3CTargeting.3E|HERE]] for how the variables here interact to control the AI&#039;s target prediction.&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x140 | float    |8C8CCC| 00 00 00 3F | 0.500000    | multiplied against target&#039;s distance to get error in AI&#039;s/turret&#039;s first wild shot (always 0.5) }}&lt;br /&gt;
{{OBDtr| 0x144 | float    |8C8CCC| 00 00 C8 41 | 25.000000   | max value for result of multiplication above (always 25) }}&lt;br /&gt;
{{OBDtr| 0x148 | float    |8C8CCC| 00 00 80 3F | 1.000000    | accuracy multiplier for prediction of target&#039;s position (always 1) }}&lt;br /&gt;
{{OBDtr| 0x14C | uint32    |FF00C8| 00 00 00 00 | 0           | maximum allowed frames of lookback to be used for predicting target&#039;s position (always 0) }}&lt;br /&gt;
{{OBDtr| 0x150 | uint32    |FF00C8| 05 00 00 00 | 5           | frames of delay in recognizing target&#039;s current position (always 5) }}&lt;br /&gt;
{{OBDtr| 0x154 | uint32    |FF00C8| 0F 00 00 00 | 15          | number of frames over which AI can average target&#039;s velocity to help predict position (always 15) }}&lt;br /&gt;
{{OBDtr| 0x158 | uint32    |FF00C8| 3C 00 00 00 | 60          | size in frames of target&#039;s history location buffer (always 60) }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;AI Weapon Skills&lt;br /&gt;
&lt;br /&gt;
This is an array of 13 sets of skill variables, one for each weapon. Below is the data for the first element:&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x15C | float    |F0F096| 00 00 00 00 | 0.000000    | recoil compensation amount (0.0 &amp;lt;nowiki&amp;gt;= no compensation, 1.0 =&amp;lt;/nowiki&amp;gt; no recoil) }}&lt;br /&gt;
{{OBDtr| 0x160 | float    |F0F096| 00 00 00 00 | 0.000000    | minimum aiming error as an angle in radians }}&lt;br /&gt;
{{OBDtr| 0x164 | float    |F0F096| 00 00 00 00 | 0.000000    | shot grouping error as a percentage }}&lt;br /&gt;
{{OBDtr| 0x168 | float    |F0F096| 00 00 80 3F | 1.000000    | how quickly aiming inaccuracy decreases or increases while shooting (ranges from 0.0 to 1.0) }}&lt;br /&gt;
{{OBDtr| 0x16C | float    |F0F096| 00 00 80 3F | 1.000000    | shooting inaccuracy multiplier }}&lt;br /&gt;
{{OBDtr| 0x170 | uint16   |00C864| 00 00       | 0           | minimum delay in ticks before pulling the trigger again }}&lt;br /&gt;
{{OBDtr| 0x172 | uint16   |00C864| 00 00       | 0           | maximum delay in ticks before pulling the trigger again }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AI weapon skills can be reviewed with e.g. &#039;&#039;&#039;ai2_skill_select konoko_generic w1_tap&#039;&#039;&#039; and then either &#039;&#039;&#039;ai2_skill_show&#039;&#039;&#039; (prints to console) or &#039;&#039;&#039;ai2_skill_save&#039;&#039;&#039; (prints to file).&lt;br /&gt;
&lt;br /&gt;
The first weapon (weapon 0) is not in the game anymore, whatever it was. Mutant Muro&#039;s thunderbolt is handled as animation-bound particles, although it used to be handled as a weapon (same for Mukade&#039;s Devil Star, except &#039;&#039;&#039;w10_sni&#039;&#039;&#039; is still available). Barabas&#039; Wave Motion Cannon is a bit mixed up since the beam is made of &#039;&#039;&#039;w12_ba2&#039;&#039;&#039; particles and the grenade is a &#039;&#039;&#039;w11_ba1&#039;&#039;&#039; particle.&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
|- bgcolor=&amp;quot;#E9E9E9&amp;quot; align=center&lt;br /&gt;
!Weapon       ||Offset     ||recoil||bestangle||error||decay||inaccuracy||delays&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w0_sec&#039;&#039;&#039; ||0x15C/0x173|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w1_tap&#039;&#039;&#039; ||0x174/0x18B|| 0.0  || 0.000000|| 0.40|| 0.4 || 0.0      || 30 - 45&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w2_sap&#039;&#039;&#039; ||0x18C/0x193|| 0.3  || 0.013962|| 0.13|| 1.0 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w3_phr&#039;&#039;&#039; ||0x194/0x20B|| 0.3  || 0.010472|| 0.05|| 0.5 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w4_psm&#039;&#039;&#039; ||0x20C/0x213|| 0.3  || 0.015707|| 0.03|| 0.2 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w5_sbg&#039;&#039;&#039; ||0x214/0x22B|| 0.3  || 0.001745|| 0.00|| 0.1 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w6_vdg&#039;&#039;&#039; ||0x22C/0x233|| 0.3  || 0.001745|| 0.13|| 0.9 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w7_scc&#039;&#039;&#039; ||0x234/0x24B|| 0.3  || 0.001745|| 0.05|| 0.1 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w8_mbo&#039;&#039;&#039; ||0x24C/0x253|| 0.3  || 0.005236|| 0.01|| 0.5 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w9_scr&#039;&#039;&#039; ||0x254/0x26B|| 0.3  || 0.010472|| 0.04|| 0.5 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w10_sni&#039;&#039;&#039;||0x26C/0x273|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w11_ba1&#039;&#039;&#039;||0x274/0x28B|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0&lt;br /&gt;
|- align=center     &lt;br /&gt;
|&#039;&#039;&#039;w12_ba2&#039;&#039;&#039;||0x28B/0x293|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Other AI Behaviors&lt;br /&gt;
[[Image:oncc_m.gif]]&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x294 | uint32    |00C8FF| 5A 00 00 00 | 90          | how long AI will continue shooting a dead body to make sure it&#039;s dead (always 90) }}&lt;br /&gt;
{{OBDtr| 0x298 | uint32    |00C8FF| F0 00 00 00 | 240         | how long AI will stand over dead body before returning to last job (always 240) }}&lt;br /&gt;
{{OBDtr| 0x29C | uint32    |00C8FF| B4 00 00 00 | 180         | how long after losing sight of target until AI engages pursuit mode (always 180) }}&lt;br /&gt;
{{OBDtr| 0x2A0 | uint32    |00C8FF| 28 00 00 00 | 40          | chance (as a percentage) of AI taunting a dead body }}&lt;br /&gt;
{{OBDtr| 0x2A4 | uint32    |00C8FF| 37 00 00 00 | 55          | chance (as a percentage) of AI running to some weapon to pick it up; can be checked in Dev Mode with the &#039;&#039;&#039;debug_gun_behavior&#039;&#039;&#039; command }}&lt;br /&gt;
{{OBDtr| 0x2A8 | uint32    |00C8FF| 3C 00 00 00 | 60          | chance (as a percentage) of AI performing a running weapon pickup (including acrobatics moves, slides) instead of the normal &amp;quot;stop and pick up&amp;quot;; this is calculated after the engine decides that the AI will go for a gun }}&lt;br /&gt;
{{OBDtr| 0x2AC | uint16    |C80040| 00 00       | 0           | combat profile ID; for example *0D* is for Mutant Muro }}&lt;br /&gt;
{{OBDtr| 0x2AE | uint16    |C80040| 16 00       | 22          | melee profile ID }}&lt;br /&gt;
{{OBDtr| 0x2B0 | uint8     |FFCD96| 64          | 100         | &amp;quot;taunt&amp;quot; sound probability (always) }}&lt;br /&gt;
{{OBDtr| 0x2B1 | uint8     |FFCD96| 00          | 0           | &amp;quot;alert&amp;quot; sound probability (never) }}&lt;br /&gt;
{{OBDtr| 0x2B2 | uint8     |FFCD96| 00          | 0           | &amp;quot;startle&amp;quot; sound probability (never) }}&lt;br /&gt;
{{OBDtr| 0x2B3 | uint8     |FFCD96| 00          | 0           | &amp;quot;checkbody&amp;quot; sound probability (never) }}&lt;br /&gt;
{{OBDtr| 0x2B4 | uint8     |FFCD96| 00          | 0           | &amp;quot;pursue&amp;quot; sound probability (never) }}&lt;br /&gt;
{{OBDtr| 0x2B5 | uint8     |FFCD96| 00          | 0           | &amp;quot;cower&amp;quot; sound probability (never) }}&lt;br /&gt;
{{OBDtr| 0x2B6 | uint8     |FFCD96| 64          | 100         | &amp;quot;superpunch&amp;quot; probability (always) }}&lt;br /&gt;
{{OBDtr| 0x2B7 | uint8     |FFCD96| 64          | 100         | &amp;quot;superkick&amp;quot; probability (always) }}&lt;br /&gt;
{{OBDtr| 0x2B8 | uint8     |FFCD96| 00          | 0           | &amp;quot;super3&amp;quot; sound probability (never) }}&lt;br /&gt;
{{OBDtr| 0x2B9 | uint8     |FFCD96| 00          | 0           | &amp;quot;super4&amp;quot; sound probability (never) }}&lt;br /&gt;
{{OBDtr| 0x2BA | char[2]    |C8C864| 00 00       | 0           | padding }}&lt;br /&gt;
{{OBDtr2|0x2BC | char[32] |0096C8| c17_99_28konoko           | &amp;quot;taunt&amp;quot; sound (reference to 08108-c17_99_28konoko.[[OBD:OSBD|amb.OSBD]] of level 0) }}&lt;br /&gt;
{{OBDtr2|0x2DC | char[32] |0096C8| unused                    | &amp;quot;alert&amp;quot; sound name }}&lt;br /&gt;
{{OBDtr2|0x2FC | char[32] |0096C8| unused                    | &amp;quot;startle&amp;quot; sound name }}&lt;br /&gt;
{{OBDtr2|0x31C | char[32] |0096C8| unused                    | &amp;quot;checkbody&amp;quot; sound name }}&lt;br /&gt;
{{OBDtr2|0x33C | char[32] |0096C8| unused                    | &amp;quot;pursue&amp;quot; sound name }}&lt;br /&gt;
{{OBDtr2|0x35C | char[32] |0096C8| unused                    | &amp;quot;cower&amp;quot; sound name }}&lt;br /&gt;
{{OBDtr2|0x37C | char[32] |0096C8| c18_79_14konoko           | &amp;quot;superpunch&amp;quot; sound name (reference to 08110-c17_99_28konoko.amb.OSBD of level 0) }}&lt;br /&gt;
{{OBDtr2|0x39C | char[32] |0096C8| c18_79_15konoko           | &amp;quot;superkick&amp;quot; sound name (reference to 08112-c17_99_28konoko.amb.OSBD of level 0) }}&lt;br /&gt;
{{OBDtr2|0x3BC | char[32] |0096C8| unused                    | &amp;quot;super3&amp;quot; sound name (only Mukade uses this slot) }}&lt;br /&gt;
{{OBDtr2|0x3DC | char[32] |0096C8| unused                    | &amp;quot;super4&amp;quot; sound name (never used in game data) }}&lt;br /&gt;
{{OBDtrBK|The following 7 vision fields are used to detect if a character can be seen by AI; see Vision Field below for explanation }}&lt;br /&gt;
{{OBDtr| 0x3FC | float    |FF80C0| 00 80 ED 43 | 475.000000  | central vision distance }}&lt;br /&gt;
{{OBDtr| 0x400 | float    |FF80C0| 00 00 16 43 | 150.000000  | peripheral vision distance }}&lt;br /&gt;
{{OBDtr| 0x404 | float    |FF80C0| 7D 1B 44 3F | 0.766044    | vertical vision range }}&lt;br /&gt;
{{OBDtr| 0x408 | float    |FF80C0| F3 B3 51 3F | 0.819152    | central vision range }}&lt;br /&gt;
{{OBDtr| 0x40C | float    |FF80C0| E8 D5 12 3F | 0.573576    | central vision max }}&lt;br /&gt;
{{OBDtr| 0x410 | float    |FF80C0| D5 D0 31 3E | 0.173648    | peripheral vision range }}&lt;br /&gt;
{{OBDtr| 0x414 | float    |FF80C0| 6B 61 D8 BE | 0.422618    | peripheral vision max }}&lt;br /&gt;
{{OBDtr| 0x418 | uint32    |D0C0AF| B4 00 00 00 | 180         | how long will AI know exactly where its enemy is even if it can&#039;t see him with central vision field, and attempt to attack him }}&lt;br /&gt;
{{OBDtr| 0x41C | uint32    |D0C0AF| 84 03 00 00 | 900         | how long will AI remain strongly convinced that there is an enemy, but will investigate his presence rather than attack him }}&lt;br /&gt;
{{OBDtr| 0x420 | uint32    |D0C0AF| 10 0E 00 00 | 3600        | how long an AI will remain weakly convinced of an enemy&#039;s presence, looking around aimlessly to find him (Glance pursuit mode) }}&lt;br /&gt;
{{OBDtr| 0x424 | uint32    |D0C0AF| 10 0E 00 00 | 3600        | decay time for dropping back from high alert to medium alert }}&lt;br /&gt;
{{OBDtr| 0x428 | uint32    |D0C0AF| 50 46 00 00 | 18000       | decay time for dropping back from medium alert to low alert }}&lt;br /&gt;
{{OBDtr| 0x42C | uint32    |D0C0AF| A0 8C 00 00 | 36000       | decay time for dropping back from low alert to no alert status }}&lt;br /&gt;
{{OBDtr| 0x430 | float    |EEDDFF| 00 00 80 3F | 1.000000    | hearing radius; defines size of the sound-detection sphere around an AI }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Vision Field&lt;br /&gt;
See [[XML:ONCC#.3CVisionConstants.3E|HERE]] for details on how this works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;File Links&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x434 | link     |C5FF8A| 01 FB 03 00 | 1019        | link to 01019-konoko.[[OBD:ONCV|ONCV]]; defines variants and upgrades }}&lt;br /&gt;
{{OBDtr| 0x438 | link     |C5FF8A| 01 F9 03 00 | 1017        | link to [[OBD:ONCP|01017-.ONCP]]; lists the particles available for this character (trails, flashes, etc) }}&lt;br /&gt;
{{OBDtr| 0x43C | link     |C5FF8A| 01 FA 03 00 | 1018        | link to [[OBD:ONIA|01018-.ONIA]]; lists the special impact sounds (used for special combat moves) }}&lt;br /&gt;
{{OBDtr| 0x440 | bool     |C5FF8A| 00          | unused      | indices found(?); runtime only }}&lt;br /&gt;
{{OBDtr| 0x441 | uint8     |C5FF8A| 00          | unused      | padding }}&lt;br /&gt;
{{OBDtr| 0x442 | uint16    |C5FF8A| 00 00       | unused      | modifier type; runtime only }}&lt;br /&gt;
{{OBDtr2|0x444 | char[16] |C0C0C0| Light                     | modifier; either hardcoded or defunct (only visible in pm_mod_type.WMM_, level 0)&lt;br /&gt;
edit: WMDD says: Effects found for Impact x on Material y with Modifier: pm_mod_types }}&lt;br /&gt;
{{OBDtrBK|1=Array of 15 impact elements: first element }}&lt;br /&gt;
{{OBDtr2|0x454 | char[128] |FF0080| Footstep_Walk             | walk impact (reference to 04124-Footstep_Walk.Impt of level 0); always the same; without the impacts you can&#039;t hear the steps of a character }}&lt;br /&gt;
{{OBDtr| 0x4D4 | uint16     |FF0080| FF FF | -1 | set at runtime to the value stored at 0x08 in [[OBD:Impt|Impt]] }}&lt;br /&gt;
{{OBDtrBK|1=End of array }}&lt;br /&gt;
{{OBDtr| 0xBF2 | char[2]   |FFFFA5| 00 00 | unused | padding (seen below) }}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:oncc_e.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr2|0xBF4 | char[64] |71FFB8| unused                    | special death particle; only the Mad Bomber uses it }} &lt;br /&gt;
{{OBDtr| 0xC34 | offset     |0000BF| 00 00 00 00 | unused      | runtime: raw offset of death particle class }}&lt;br /&gt;
{{OBDtr| 0xC38 | offset     |0000BF| 00 00 00 00 | unused      | runtime: raw offset of cache of derived information on body model geometry }}&lt;br /&gt;
{{OBDtr| 0xC3C | link     |0000BF| 01 E6 03 00 | 998         | link to [[OBD:TRBS|00998-konoko_body_high.TRBS]] }}&lt;br /&gt;
{{OBDtr| 0xC40 | link     |0000BF| 01 E7 03 00 | 999         | link to [[OBD:TRMA|00999-konoko002_high_texture_generic.TRMA]] }}&lt;br /&gt;
{{OBDtr| 0xC44 | link     |0000BF| 01 E8 03 00 | 1000        | link to [[OBD:CBPM|01000-.CBPM]] }}&lt;br /&gt;
{{OBDtr| 0xC48 | link     |0000BF| 01 EC 03 00 | 1004        | link to [[OBD:CBPI|01004-.CBPI]] }}&lt;br /&gt;
{{OBDtr| 0xC4C | uint32    |804040| 2C 01 00 00 | 300         | how long in ticks before character can leave fight mode }} &lt;br /&gt;
{{OBDtr| 0xC50 | uint32    |804040| 30 75 00 00 | 30000       | how long in ticks before the Idle animation can be played the first time }} &lt;br /&gt;
{{OBDtr| 0xC54 | uint32    |804040| 30 75 00 00 | 30000       | how long in ticks before the Idle animation can be played another time }} &lt;br /&gt;
{{OBDtr| 0xC58 | uint32    |804040| C8 00 00 00 | 200         | base health of the character model; specific health information for every unique character is stored in the [[OBD:BINA/OBJC/CHAR|Character.BINA]] file}} &lt;br /&gt;
{{OBDtr| 0xC5C | uint32    |804040| 48 00 00 00 | 72          | the bits that marks the characters feet; unused }} &lt;br /&gt;
{{OBDtr| 0xC60 | float    |FF22FF| 00 00 80 3F | 1.000000    | minimum body size factor }} &lt;br /&gt;
{{OBDtr| 0xC64 | float    |FF22FF| 00 00 80 3F | 1.000000    | maximum body size factor }} &lt;br /&gt;
{{Anchor|DamageTypes}}&lt;br /&gt;
{{OBDtrBK|The following 7 float values are ONCC-specific multipliers for each of the 7 PAR3 DamageTypes. See [[Particle damage types]] for an explanation of DamageTypes. Values range from 0.0-1.0, with 0 meaning &amp;quot;no immunity&amp;quot; and 1 meaning &amp;quot;total immunity&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Note: These multipliers only affect the stun damage and knockback components of a PAR3 action, not the HP damage dealt.}}&lt;br /&gt;
{{OBDtr| 0xC68 | float    |FF22FF| 00 00 00 00 | 0.000000    | &amp;quot;Normal&amp;quot; DamageType multiplier }} &lt;br /&gt;
{{OBDtr| 0xC6C | float    |FF22FF| 00 00 00 00 | 0.000000    | &amp;quot;MinorStun&amp;quot; DamageType multiplier }} &lt;br /&gt;
{{OBDtr| 0xC70 | float    |FF22FF| 00 00 00 3F | 0.500000    | &amp;quot;MajorStun&amp;quot; DamageType multiplier }} &lt;br /&gt;
{{OBDtr| 0xC74 | float    |FF22FF| 00 00 80 3E | 0.250000    | &amp;quot;MinorKnockdown&amp;quot; DamageType multiplier }} &lt;br /&gt;
{{OBDtr| 0xC78 | float    |FF22FF| 00 00 00 00 | 0.000000    | &amp;quot;MajorKnockdown&amp;quot; DamageType multiplier }} &lt;br /&gt;
{{OBDtr| 0xC7C | float    |FF22FF| 00 00 00 00 | 0.000000    | &amp;quot;Blownup&amp;quot; DamageType multiplier }} &lt;br /&gt;
{{OBDtr| 0xC80 | float    |FF22FF| 00 00 00 00 | 0.000000    | &amp;quot;Pickup&amp;quot; DamageType multiplier }} &lt;br /&gt;
{{OBDtr| 0xC84 | float    |FF22FF| 00 00 00 3F | 0.500000    | damage reducer, employed when the character has a [[boss shield]] (0.0-1.0 &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; 0%-100%) }}&lt;br /&gt;
{{OBDtr| 0xC88 | link     |808080| 01 F6 03 00 | 1014        | link to 01014-konoko_animations.[[OBD:TRAC|TRAC]] }} &lt;br /&gt;
{{OBDtr| 0xC8C | link     |808080| 01 F6 03 00 | 1015        | link to 01015-konoko_screens.[[OBD:TRSC|TRSC]] }} &lt;br /&gt;
{{OBDtr| 0xC90 | uint16    |FFAA82| 1E 00       | 30          | AI rate of firing; unused }} &lt;br /&gt;
{{OBDtr| 0xC92 | uint16    |FFAA82| 00 00       | 0           | time between death and deletion, in frames (0 for all characters except Mad Bomber, who is 190 ticks) }} &lt;br /&gt;
{{OBDtr| 0xC94 | bool   |00D900| 00          | 0           | TRSC bitset; see below }} &lt;br /&gt;
{{OBDtr| 0xC95 | bool     |00D900| 01          | 1           | character has Daodan powers (can overheal with hypos, do more damage in overpower mode) and can display a Daodan aura particle)}} &lt;br /&gt;
{{OBDtr| 0xC96 | bool     |00D900| 00          | 0           | character has [[supershield]] }} &lt;br /&gt;
{{OBDtr| 0xC97 | bool     |00D900| 00          | 0           | knockdown resistant (used by MutantMuro.ONCC) }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;TRSC bitset&lt;br /&gt;
:Determines whether character is left-handed or right-handed (weapon is attached to left or right fist bone). Must be consistent with character&#039;s TRSC or glitches appear. Possibilities are:&lt;br /&gt;
:NONE - Character is right-hander with both pistols and rifles&lt;br /&gt;
:0x01 - Character is left-hander with both pistols and rifles&lt;br /&gt;
:0x02 - Character is left-hander with pistols but &amp;quot;right-hander&amp;quot; with rifles (however, animations for rifles are treated as left-handed)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Body size factor&lt;br /&gt;
{|align=right&lt;br /&gt;
|[[Image:ONCC_body_size_factor-original.jpg|120px]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:ONCC_body_size_factor-spawn_order_change.jpg|120px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:The geometry specified in a character&#039;s [[TRBS]] (Totoro body set) can be multiplied by a scale factor. For example, the &#039;&#039;&#039;minime&#039;&#039;&#039; and &#039;&#039;&#039;behemoth&#039;&#039;&#039; [[cheats]] set that factor to 0.25 or 1.8, and back to 1. The size can be used for specific purposes (mini-Strikers, Mutant Muro, giant Shinatama), or it can be used to add generic variety to Oni&#039;s characters, as a complement to &amp;quot;character variants&amp;quot; ([[ONCV]]).&lt;br /&gt;
:The floats at 0xC60 and 0xC64 define a range in which Oni can pick a random body size factor (if the two values are identical, then the body size factor is effectively fixed instead of random). Konoko, Shinatama (both regular and zombified), Griffin (both variants) and Muro all have a fixed body size of 1. Mini-Strikers have 0.5 and giant Shinatama has 7 (yes, [[seven]]).&lt;br /&gt;
:Everybody else (including Barabas, Mukade and Kerr) has a random body size within 5% of 1 (i.e., the floats at 0xC60 and 0xC64 are 0.95 and 1.05). Mutant Muro is a bit odd because his &amp;quot;minimum&amp;quot; body size 1.75 and the &amp;quot;maximum&amp;quot; is 1.74 (the difference is barely noticeable anyway). In the [[Anniversary Edition]], some characters have altered factors (e.g., [[Shinatama Too]]).&lt;br /&gt;
:The random value is different every time the [[ONCC]] is looked up (e.g., when a character is spawned or shapeshifted) and is not reproducible. Here is a simple script for {{C|6}} a.k.a. [[IGMD/tctf]] (remove all BSL files and leave only the one below):&lt;br /&gt;
 func main&lt;br /&gt;
 {&lt;br /&gt;
   ai2_allpassive 1&lt;br /&gt;
   ai2_spawn a_v3&lt;br /&gt;
   ai2_spawn Lv_40&lt;br /&gt;
   ai2_spawn lobby_victim05&lt;br /&gt;
   chr_location 1 -1255 -1.5 50&lt;br /&gt;
   chr_location 2 -1255 -1.5 60&lt;br /&gt;
   chr_location 3 -1255 -1.5 70&lt;br /&gt;
   chr_location 4 -1255 -1.5 80&lt;br /&gt;
   ai2_lookatme&lt;br /&gt;
 }&lt;br /&gt;
:This script lines up four &amp;quot;usual suspects&amp;quot; against a wall in the parking lot of the TCTF HQ. Load the level repeatedly and note how their heights vary.&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ONCC | prev=OFGA | next=ONCP | name=Oni Character Class | family=Character}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:OFGA&amp;diff=45184</id>
		<title>OBD:OFGA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:OFGA&amp;diff=45184"/>
		<updated>2025-05-12T11:54:25Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=OFGA | prev=OBOA | next=ONCC | name=Object Furn Geom Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ofga_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 C5 02 00 | 709         | 00709-.OFGA }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 00 | 0           | level 0 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[16] |00FF00| AD DE       | dead        | padding }}&lt;br /&gt;
{{OBDtr| 0x18 | link     |00FFFF| 00 00 00 00 |unused       | link to an [[OBD:ENVP|ENVP]] file }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |FF00FF| 05 00 00 00 | 5           | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | uint32   |FFC8C8| 00 80 01 00 | 00 80 01 00 | same flags as used by [[OBD:AGQG|gunk quads]]; used at import time for geometry that needs to be baked into the environment }}&lt;br /&gt;
{{OBDtr| 0x04 | link   |FFFFC8| 01 C6 02 00 | 710     | link to 00710-.[[M3GM]]}}&lt;br /&gt;
{{OBDtr| 0x08 | link   |C8FFC8| 00 00 00 00 | 0       | link to an old [[OBD:OBLS|OBLS]] file, never used in Oni }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Usage&lt;br /&gt;
:OFGA instances are mostly used by the level editing tool. In game they&#039;re rarely used, only to get the bounding box of the geometry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=OFGA | prev=OBOA | next=ONCC | name=Object Furn Geom Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:OBOA&amp;diff=45183</id>
		<title>OBD:OBOA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:OBOA&amp;diff=45183"/>
		<updated>2025-05-12T11:51:06Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=OBOA | prev=OBDC | next=OFGA | name=Starting Object Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:oboa_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 55 02 00 | 597       | 00597-.OBOA }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3         | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[22] |00FF00| AD DE       | dead      | padding }}&lt;br /&gt;
{{OBDtr| 0x1E | uint16    |00FFFF| 62 00       | 98        | array size }}&lt;br /&gt;
{{OBDtrBK| First array element (black outline): &amp;quot;setup&amp;quot; for a door or physical/animated object}}&lt;br /&gt;
{{OBDtr| 0x00 | link    |FFC8C8| 01 56 02 00 | 598       | link to [[OBD:M3GA|00598-.M3GA]] - geometry (or a glued-together set of geometries) displayed for this object }}&lt;br /&gt;
{{OBDtr| 0x04 | link     |FFFFC8| 00 00 00 00 | unused    | link to [[OBD:OBAN|OBAN]] - animation played when the object is created; a different animation can be selected with env_setanim }}&lt;br /&gt;
{{OBDtr| 0x08 | link     |C8FFC8| 00 00 00 00 | unused    | link to [[OBD:ENVP|ENVP]] - particles attached to this object (e.g., vehicle headlights)}}&lt;br /&gt;
{{OBDtr| 0x0C | bitset32 |C8FFFF| 00 12 00 00 | in use, face collision | flags; the bits are as follows:&lt;br /&gt;
:&#039;&#039;&#039;0x02&#039;&#039;&#039; 00 00 00 - never used in Vanilla data (&amp;quot;is door&amp;quot;; set at runtime when creating a level&#039;s doors)&lt;br /&gt;
:&#039;&#039;&#039;0x04&#039;&#039;&#039; 00 00 00 - never used in Vanilla data (&amp;quot;ignore characters&amp;quot;; never used by the engine)&lt;br /&gt;
:&#039;&#039;&#039;0x08&#039;&#039;&#039; 00 00 00 - never used in Vanilla data (&amp;quot;force draw&amp;quot;; can be set at runtime with obj_force_draw)&lt;br /&gt;
:&#039;&#039;&#039;0x10&#039;&#039;&#039; 00 00 00 - never used in Vanilla data (&amp;quot;light source&amp;quot;; never used by the engine)&lt;br /&gt;
:&#039;&#039;&#039;0x40&#039;&#039;&#039; 00 00 00 - never used in Vanilla data (&amp;quot;delete me&amp;quot;; never used by the engine)&lt;br /&gt;
:&#039;&#039;&#039;0x80&#039;&#039;&#039; 00 00 00 - never used in Vanilla data (&amp;quot;notify collision&amp;quot;; set at runtime for a level&#039;s doors)&lt;br /&gt;
:0x00 &#039;&#039;&#039;01&#039;&#039;&#039; 00 00 - never used in Vanilla data (&amp;quot;invisible&amp;quot;; set at runtime with obj_show and obj_hide)&lt;br /&gt;
:0x00 &#039;&#039;&#039;02&#039;&#039;&#039; 00 00 - in use; if disabled, there is no object setup in this element at all (see &amp;quot;Empty array elements&amp;quot; below)&lt;br /&gt;
:0x00 &#039;&#039;&#039;04&#039;&#039;&#039; 00 00 - no collision; used for &amp;quot;blender&amp;quot; machine parts in manplant and for a piece of rope in Airport_III&lt;br /&gt;
:0x00 &#039;&#039;&#039;08&#039;&#039;&#039; 00 00 - never used in Vanilla data (&amp;quot;no gravity&amp;quot;; disables gravity, keeps other forces, if any)&lt;br /&gt;
:0x00 &#039;&#039;&#039;10&#039;&#039;&#039; 00 00 - face collision (actually uses a bounding box); overrides 0x0400 if both are present; used only for doors in Vanilla&lt;br /&gt;
:0x00 &#039;&#039;&#039;20&#039;&#039;&#039; 00 00 - never used in Vanilla data (&amp;quot;particles created&amp;quot;; runtime only)&lt;br /&gt;
:0x00 &#039;&#039;&#039;40&#039;&#039;&#039; 00 00 - never used in Vanilla data (&amp;quot;jello objects&amp;quot;; runtime only)&lt;br /&gt;
:0x00 &#039;&#039;&#039;80&#039;&#039;&#039; 00 00 - never used in Vanilla data (&amp;quot;flat lighting&amp;quot;; used in combination with obj_shade)&lt;br /&gt;
}}&lt;br /&gt;
{{OBDtr| 0x10 | uint32    |FFC8FF| 46 89 00 00 | 35142     | the index of the doorframe GQ; used only for doors (0 for other objects)}}&lt;br /&gt;
{{OBDtr| 0x14 | uint32    |FFC800| 01 00 00 00 | 1         | door ID; used only for doors (0 for other objects); for doors that work in pairs the IDs differ by 4096 (i.e. by the 0x1000 bit)}}&lt;br /&gt;
{{OBDtr| 0x18 | uint32    |C800C8| 00 00 00 00 | 0         | &amp;quot;physics level&amp;quot;; the following values are possible:&lt;br /&gt;
:0 - None; used for doors&lt;br /&gt;
:1 - Static; never used in Vanilla data&lt;br /&gt;
:2 - Linear; response to external forces and collision (if any); never used in Vanilla data&lt;br /&gt;
:3 - Animated; used for non-doors&lt;br /&gt;
:4 - &amp;quot;Newton&amp;quot;; response to external forces and collision (if any); never used in Vanilla data&lt;br /&gt;
}}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |C87C64| FF FF 00 00 | 65535     | script ID (for obj_create, env_setanim etc); doors use 65535 }}&lt;br /&gt;
{{OBDtr| 0x20 | vector   |B0C3D4| 00 00 4F 43 1F 05 F6 42 98 7F CC C3 |207.0 123.010002 -408.996826 | object position }}&lt;br /&gt;
{{OBDtr| 0x2C | quaternion|E7CEA5| F2 04 35 3F 74 BC 82 B9 74 BC 82 B9 F3 04 35 3F | 0.707107 -0.000249 -0.000249 0.707107 | object rotation }}&lt;br /&gt;
{{OBDtr| 0x3C | float    |FFDDDD| 00 00 80 3F | 1.0  | object scale }}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
|0x40||matrix&lt;br /&gt;
|BGCOLOR=&amp;quot;#64aaaa&amp;quot;|&lt;br /&gt;
{|cellspacing=1 style=&amp;quot;white-space:nowrap;width:100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|FC FF 7F 3F || 00 00 00 00 || 8A E3 38 BA&lt;br /&gt;
|-&lt;br /&gt;
|8A E3 38 BA || 2E DE 4C 32 || FC FF 7F BF &lt;br /&gt;
|-&lt;br /&gt;
|C9 F5 13 2D || 00 00 80 3F || 2B DE 4C 32&lt;br /&gt;
|-&lt;br /&gt;
|00 00 4F 43 || 1F 05 F6 42 || 98 7F CC C3&lt;br /&gt;
|} &lt;br /&gt;
|&lt;br /&gt;
{|cellspacing=1 style=&amp;quot;white-space:nowrap;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|0.999999 || 0.0 || -0.000705 &lt;br /&gt;
|-&lt;br /&gt;
| -0.000705 || 0.0 || -0.999999 &lt;br /&gt;
|-&lt;br /&gt;
|0.0 || 1.0 || 0.0 &lt;br /&gt;
|-&lt;br /&gt;
|207.0 || 123.010002 || -408.996826&lt;br /&gt;
|}&lt;br /&gt;
|ALIGN=LEFT|debug origin matrix&lt;br /&gt;
{{OBDtr2|0x70 | char[64] |EBEBEB| object_door_1           | name of the object; informational only }}&lt;br /&gt;
{{OBDtr2|0xB0 | char[64] |8C8CCC| L3_Gunk.ENV             | file name from which this object was created; informational only }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The primary use of this data is to display animated objects in the environment (cars, helis, fans etc.). &amp;quot;Physics&amp;quot; may also work but the implementation is buggy and incomplete: you may be able to add a object that can be pushed around but if you try to jump on it you fall. The two flavors &amp;quot;Linear&amp;quot; and &amp;quot;Newton&amp;quot; are equivalent (if there ever were differences between the two, they are gone now).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Position, rotation and scale are used only when the object is not animated, otherwise the origin matrix is used instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Objects are not automatically created when a level is loaded, they need to be created from scripts using the &#039;&#039;&#039;obj_create&#039;&#039;&#039; command. After that they can be controlled with other commands like &#039;&#039;&#039;obj_show&#039;&#039;&#039;, &#039;&#039;&#039;obj_hide&#039;&#039;&#039;, &#039;&#039;&#039;obj_kill&#039;&#039;&#039;, &#039;&#039;&#039;obj_shade&#039;&#039;&#039;, &#039;&#039;&#039;env_anim&#039;&#039;&#039; and &#039;&#039;&#039;env_setanim&#039;&#039;&#039; (also &#039;&#039;&#039;obj_force_draw&#039;&#039;&#039;, &#039;&#039;&#039;env_anim_block&#039;&#039;&#039; and &#039;&#039;&#039;env_setanim_block&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
In some cases a level&#039;s geometry contains a static duplicate of the object&#039;s polygons, which is typically hidden (through &amp;quot;env_show objectScriptID 0&amp;quot;) while the OBOA object is shown (and vice-versa).&lt;br /&gt;
----&lt;br /&gt;
;Flags&lt;br /&gt;
:Besides the trivial &amp;quot;in use&amp;quot; flag, only two are used in Vanilla game data: &amp;quot;no collision&amp;quot; (possibly useless, because collision is off by default anyway) and &amp;quot;face collision&amp;quot; (used for doors).&lt;br /&gt;
:Some of the other flags (e.g. &amp;quot;particles created&amp;quot;) are reserved for runtime use, others can be specified in game data. Some intriguing ones, like &amp;quot;light source&amp;quot;, are completely defunct.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
;Empty array elements&lt;br /&gt;
:The last 32 elements of a level&#039;s OBOA are always empty (all data values are zero). Below is an overview table for Vanilla levels (OBOA array size vs. number of actual door/object setups).&lt;br /&gt;
{|border=1 cellspacing=0&lt;br /&gt;
!level#_Final&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!6&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
!10&lt;br /&gt;
!11&lt;br /&gt;
!12&lt;br /&gt;
!13&lt;br /&gt;
!14&lt;br /&gt;
!18&lt;br /&gt;
!19&lt;br /&gt;
|-&lt;br /&gt;
!OBOA array size&lt;br /&gt;
|180&lt;br /&gt;
|69&lt;br /&gt;
|98&lt;br /&gt;
|69&lt;br /&gt;
|99&lt;br /&gt;
|146&lt;br /&gt;
|78&lt;br /&gt;
|78&lt;br /&gt;
|106&lt;br /&gt;
|50&lt;br /&gt;
|54&lt;br /&gt;
|116&lt;br /&gt;
|117&lt;br /&gt;
|100&lt;br /&gt;
|-&lt;br /&gt;
!Actual elements&lt;br /&gt;
|148&lt;br /&gt;
|37&lt;br /&gt;
|66&lt;br /&gt;
|37&lt;br /&gt;
|67&lt;br /&gt;
|114&lt;br /&gt;
|46&lt;br /&gt;
|46&lt;br /&gt;
|74&lt;br /&gt;
|18&lt;br /&gt;
|22&lt;br /&gt;
|84&lt;br /&gt;
|85&lt;br /&gt;
|68&lt;br /&gt;
|}&lt;br /&gt;
For a new level built from XML by OniSplit, there are also 32 empty elements at the end of the array. The purpose of these extra elements is not currently documented.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
;M3GA use (single M3GM vs. actual sets of several M3GMs)&lt;br /&gt;
:The link at 0x00 in an object setup is to an M3GA, i.e., an array that can hold several M3GMs - which, in the OBOA context, behave as a single object (driven by the same animation or force - if any), as if glued together.&lt;br /&gt;
:In Vanilla game data, the only OBOA objects to have several M3GMs in their M3GA are doors with glass sections (this is needed because (a) an M3GM can have only one texture, and (b) door frames are required to have a fully opaque texture, or they will have an &amp;quot;inside-out&amp;quot; look because of the front-to-back rendering order). The only exception is door 45 in level6 (Airport Cargo Hangars), which has no transparent parts, and instead just links to the same M3GM twice.&lt;br /&gt;
:One would expect the M3GA feature to be used for large animated objects that consist of several meshes, e.g. the express elevator in Griffin&#039;s office (intro of level18) or the satellite dish in the final chapter - but no, these are set up as separate &amp;quot;objects&amp;quot;, with one M3GM per M3GA, animated synchronously. This is in contrast to the named M3GA found in [[level0_Tools]], which &#039;&#039;are&#039;&#039; actually used to group several M3GMs together, into pieces of &amp;quot;furniture&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
;Script IDs of grouped objects&lt;br /&gt;
:Objects animated synchronously (e.g. a vehicle and its wheels) are typically set up with a continuous range of script IDs: all related script commands, from &#039;&#039;&#039;obj_create&#039;&#039;&#039; to &#039;&#039;&#039;obj_shade&#039;&#039;&#039; to &#039;&#039;&#039;env_anim&#039;&#039;&#039;, can operate both on single objects and on &#039;&#039;ranges&#039;&#039; of objects (e.g., &#039;&#039;&#039;obj_create 10 12&#039;&#039;&#039; creates objects 10 through 12).&lt;br /&gt;
:Contiguous objects can move as a rigid &amp;quot;whole&amp;quot;, or there can be some relative motion within the group (e.g., wheels turning, doors opening, rotors tilting). This is because each object belongs to a separate OBOA element and thus has its own animation, assigned at creation or via script ID.&lt;br /&gt;
:The hierarchy of contiguous objects in the original scene (as modeled by the developers) is typically not known. It would make sense for wheels/doors to be &amp;quot;parented&amp;quot; to a vehicle&#039;s chassis, but at Oni level there is no parenting, i.e., both the chassis and the wheels/doors are animated in world space.&lt;br /&gt;
:The order of script IDs for contiguous groups of objects is not a reliable indicator of hierarchy. Thus, recurrent object sets (e.g., armored truck, motorcycle, Syndicate van) are not ordered consistently in all the levels where they appear:&lt;br /&gt;
:*Armored truck (level1, gunk IDs): cabin 201, trailer 202, wheel pairs 203 to 207 (front to back); no gunk IDs for doors (so they can&#039;t be hidden).&lt;br /&gt;
:*Armored truck (level1, OBOA IDs): cabin 207, trailer 206, wheel pairs 205, 203, 204, 201 and 202 (front to back); no animated door objects.&lt;br /&gt;
:*Armored truck (level19, gunk IDs before ramming): cabin 152, trailer 151, wheel pairs 157, 155, 156, 159 and 158 (front to back), doors 154 (left) and 153 (right).&lt;br /&gt;
:*Armored truck (level19, gunk IDs after ramming): cabin 252, trailer 251, wheel pairs 257, 255, 256, 259 and 258 (front to back), doors 254 (left) and 253 (right).&lt;br /&gt;
:*Armored truck (level19, OBOA IDs): cabin 52, trailer 51, wheel pairs 57, 55, 56, 59 and 58 (front to back), doors 54 (left) and 53 (right).&lt;br /&gt;
:*Motorcycle (level3, gunk IDs and OBOA IDs): bike 10, wheels 8 (front) and 9 (rear)&lt;br /&gt;
:*Motorcycle (level4, gunk IDs and OBOA IDs): bike 10, wheels 11 (front) and 12 (rear)&lt;br /&gt;
:*Motorcycle (level8, gunk IDs): bike 110, wheels 111 (front) and 112 (rear)&lt;br /&gt;
:*Motorcycle (level8, OBOA IDs): bike 10, wheels 11 (front) and 12 (rear)&lt;br /&gt;
:*BlackVan (level3 and level4, OBOA IDs): front/back 2, sides 3, top/bottom 4, wheel pairs 5 (front) and 6 (rear), doors 7&lt;br /&gt;
:*BlackVan (level8, gunk IDs): front/back 101, sides 103, top/bottom 104, wheel pairs 105 (front) and 106 (rear), doors 108 (left) and 107 (right)&lt;br /&gt;
:*BlackVan (level8, OBOA IDs): front/back 1, sides 3, top/bottom 4, wheel pairs 5 (front) and 6 (rear), doors 8 (left) and 7 (right)&lt;br /&gt;
:The bottom line is that there don&#039;t seem to be any rules for the order of script IDs in a group. Possibly the IDs were not auto-assigned during import and were specified more or less manually.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
;Unused or missing object setups&lt;br /&gt;
:Some object setups are left over from early development, completely unused in the game. The most famous example is Konoko&#039;s clothes from Chapter 4 (level4_Final), but hidden doors at the Warehouse also fall into that category.&lt;br /&gt;
:Some object setups are completely missing from Oni, but can be inferred through eponymous OBAN instances (object animations). OBAN are also used for cameras and &amp;quot;env-boxed&amp;quot; character animation (gliding, elevator/motorcycle rides, etc), but camera and/or env-box animations are usually easy to tell apart from object motion.&lt;br /&gt;
:The most significant evidence of missing objects is in level2 a.k.a. Musashi Manufacturing Plant, with the following big set of &amp;quot;orphaned&amp;quot; OBANs:&lt;br /&gt;
:*solarpanel, solarbracket&lt;br /&gt;
:*scanner, scanring, scanlens, scanlens2&lt;br /&gt;
:*weldarm1, weldarm2, weldarm3, weldarm4, weldarm5&lt;br /&gt;
:All 11 animations have a common length of 2400 frames (= 40 seconds) and are located in one of the &amp;quot;engine rooms&amp;quot; where the current &amp;quot;blender&amp;quot; and &amp;quot;fan&amp;quot; OBANs are. It seems to correspond to an elaborate manufacturing sequence (welding) involving a &amp;quot;solar panel&amp;quot; mounted on a moving bracket, a robotic welding arm and a &amp;quot;scanner&amp;quot; analyzing the process&lt;br /&gt;
:level2 also features an unused OBANwoof (299 frames = 5 seconds long), located in the lobby, not clearly intended for a camera or a flying object, as well as a missing env-box for Shinatama.&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=OBOA | prev=OBDC | next=OFGA | name=Starting Object Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:BINA/OBJC&amp;diff=45182</id>
		<title>OBD:BINA/OBJC</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:BINA/OBJC&amp;diff=45182"/>
		<updated>2025-05-12T11:36:29Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD BINA Header|prev=TMBD|type=OBJC|next=ONIE|name=Objects|onistuff=bina}}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&amp;quot;OBJC&amp;quot; is short for &amp;quot;Objects&amp;quot;, which refers to lists of files which are stored in the [[separate file]] when available (Windows demo, Mac) or in the [[raw file]] otherwise (Windows). OBJC is registered as a tag (and is also a sub-tag of [[BINA]]), but it serves as a wrapper for other tags. OBJCs are lists composed of a standard wrapper with a little header data and then elements of specific data types which have their own tags. Objects listed in OBJCs could be edited in-game by the developers using the GUI which was discovered by fans in the [[European Mac releases]] of Oni. Screenshots of the editing interface are shown on the pages of each type which the interface could edit.&lt;br /&gt;
&lt;br /&gt;
==File description==&lt;br /&gt;
;Example file&lt;br /&gt;
:[[OBD:BINA/OBJC/PWRU|BINACJBOPowerUp]] from level3&lt;br /&gt;
;Offsets&lt;br /&gt;
:Offsets are given with respect to the start of the raw file&#039;s data part.&lt;br /&gt;
&lt;br /&gt;
[[Image:Bin r pu.gif]]&lt;br /&gt;
&lt;br /&gt;
{{table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr|0x00|char[4]|FF0000|43 4A 42 4F|OBJC|tag}}&lt;br /&gt;
{{OBDtr|0x04|uint32  |FFFF00|18 02 00 00|536|size to end of object list from 0x08, in bytes}}&lt;br /&gt;
{{OBDtr|0x08|uint32  |00FF00|27 00 00 00|39|object format version}}&lt;br /&gt;
{{OBDtr|0x0C|uint32  |00FFFF|28 00 00 00|40|size of next object (black outline)}}&lt;br /&gt;
{{OBDtrBK|0x10 - 0x37 : first object (40 bytes)}}&lt;br /&gt;
{{OBDtr|0x38|uint32  |FFFFFF|28 00 00 00|40|size of next object}}&lt;br /&gt;
{{OBDtrBK|0x3C - ... : second object (40 bytes), etc.}}&lt;br /&gt;
|}&lt;br /&gt;
;General layout&lt;br /&gt;
:The list&#039;s header (first 16 bytes) and layout is common to all 16 OBJC types (see below).&lt;br /&gt;
:*The size of the whole list is announced at 0x04 (int32), followed by the list.&lt;br /&gt;
:*Unlike ONIE and TMBD (which are arrays), OBJC announces the size of every object (int32).&lt;br /&gt;
:*After the last object, the end of the list is signaled by a null next object size.&lt;br /&gt;
&lt;br /&gt;
;Object header&lt;br /&gt;
:All objects start with the following header:&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | char[4]  |FFC8C8| 52 52 57 50 | PWRU       | object type }}&lt;br /&gt;
{{OBDtr| 0x04 | uint32    |FFFFC8| AC 1C 00 00 | 7340       | object ID }}&lt;br /&gt;
{{OBDtr| 0x08 | bitset32 |C8FFC8| 00 00 00 00 | 0x00       | object flags, only used at runtime in [[Tool mode]]}}&lt;br /&gt;
{{OBDtr| 0x0C | float    |C8FFFF| E8 92 77 44 | 990.254    | x position }}&lt;br /&gt;
{{OBDtr| 0x10 | float    |C8FFFF| 00 00 D8 41 | 27.000000  | y position }}&lt;br /&gt;
{{OBDtr| 0x14 | float    |C8FFFF| 71 DD 98 43 | 305.73     | z position }}&lt;br /&gt;
{{OBDtr| 0x18 | float    |FFC8FF| 00 00 00 00 | 0.000000   | rotation on the x axis in degrees }}&lt;br /&gt;
{{OBDtr| 0x1C | float    |FFC8FF| 00 00 00 00 | 0.000000   | rotation on the y axis in degrees }}&lt;br /&gt;
{{OBDtr| 0x20 | float    |FFC8FF| 00 00 00 00 | 0.000000   | rotation on the z axis in degrees }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==OBJC types==&lt;br /&gt;
A given list can only hold objects of one type, which can be: &lt;br /&gt;
{|&lt;br /&gt;
|&lt;br /&gt;
{|{{OBDtable}}&lt;br /&gt;
|-bgcolor=#E9E9E9&lt;br /&gt;
!Type!!Long name!!File name&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/CHAR|CHAR]]||Character||BINACJBO&#039;&#039;&#039;Character&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/CMBT|CMBT]]||Combat profile||BINACJBO&#039;&#039;&#039;Combat&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/CONS|CONS]]||Console||BINACJBO&#039;&#039;&#039;Console&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/DOOR|DOOR]]||Door||BINACJBO&#039;&#039;&#039;Door&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/FLAG|FLAG]]||Flag||BINACJBO&#039;&#039;&#039;Flag&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/FURN|FURN]]||Furniture||BINACJBO&#039;&#039;&#039;Furniture&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/MELE|MELE]]||Melee profile||BINACJBO&#039;&#039;&#039;Melee Profile&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/NEUT|NEUT]]||Neutral behaviour||BINACJBO&#039;&#039;&#039;Neutral&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/PART|PART]]||Particle||BINACJBO&#039;&#039;&#039;Particle&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/PATR|PATR]]||Patrol path||BINACJBO&#039;&#039;&#039;Patrol_Path&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/PWRU|PWRU]]||Powerup||BINACJBO&#039;&#039;&#039;PowerUp&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/SNDG|SNDG]]||Sound Group||BINACJBO&#039;&#039;&#039;Sound&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/TRGV|TRGV]]||Trigger Volume||BINACJBO&#039;&#039;&#039;Trigger_Volume&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/TRIG|TRIG]]||Trigger||BINACJBO&#039;&#039;&#039;Trigger&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/TURR|TURR]]||Turret||BINACJBO&#039;&#039;&#039;Turret&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[[OBD:BINA/OBJC/WEAP|WEAP]]||Weapon||BINACJBO&#039;&#039;&#039;Weapon&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{OBD BINA Footer|prev=TMBD|type=OBJC|next=ONIE|name=Objects|family=General}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:OBAN&amp;diff=45181</id>
		<title>OBD:OBAN</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:OBAN&amp;diff=45181"/>
		<updated>2025-05-12T11:33:31Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=OBAN | prev=Mtrl | next=OBDC | name=Object Animation | family=General | desc=&#039;&#039;&#039;OBAN&#039;&#039;&#039;s are arrays for storing keyframes in an object or camera animation, as well as basic info like whether the animation loops, and how it does so. | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:oban_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBD Table Header}}&lt;br /&gt;
{{OBDtr|0x00|res_id|FF0000|01 &#039;&#039;&#039;86 00 00&#039;&#039;&#039;|134|00134-Blackvan_FB.OBAN}}&lt;br /&gt;
{{OBDtr|0x04|lev_id|FFFF00|01 00 00 &#039;&#039;&#039;06&#039;&#039;&#039;|3  |level 3}}&lt;br /&gt;
{{OBDtr|0x08|char[12]|00FF00|00 00 00 00    |0  |padding }}&lt;br /&gt;
{{OBDtr|0x14|uint32   |00FF00|00 00 00 00    |0  |flags; used values: &lt;br /&gt;
:0x&#039;&#039;&#039;01&#039;&#039;&#039; 00 00 00 - loop animation normally&lt;br /&gt;
:0x&#039;&#039;&#039;02&#039;&#039;&#039; 00 00 00 - loop animation back to back&lt;br /&gt;
:0x&#039;&#039;&#039;04&#039;&#039;&#039; 00 00 00 - select start frame randomly&lt;br /&gt;
:0x&#039;&#039;&#039;08&#039;&#039;&#039; 00 00 00 - autostart animation (after an animated object is created)&lt;br /&gt;
:0x&#039;&#039;&#039;10&#039;&#039;&#039; 00 00 00 - local animation; this animation does not contain world positioning information, the object position is determined by the origin matrix in [[OBOA]]; local animations also use a Z-up coordinate system&lt;br /&gt;
}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
|0x18||matrix||&lt;br /&gt;
{|border=1 cellspacing=0 style=&amp;quot;white-space:nowrap&amp;quot;&lt;br /&gt;
|-BGCOLOR=&amp;quot;#FFC8C8&amp;quot;&lt;br /&gt;
|C2 F5 E8 3F||AB D7 AA B3||EC 89 13 35&lt;br /&gt;
|-BGCOLOR=&amp;quot;#FFFFC8&amp;quot;&lt;br /&gt;
|EC 89 13 35||ED 89 13 B4||C2 F5 E8 BF&lt;br /&gt;
|-BGCOLOR=&amp;quot;#C8FFC8&amp;quot;&lt;br /&gt;
|B1 D7 AA 33||C2 F5 E8 3F||EB 89 13 B4&lt;br /&gt;
|-BGCOLOR=&amp;quot;#C8FFFF&amp;quot;&lt;br /&gt;
|6B 9A 94 44||97 FD 5B C2||5D 06 DA C2&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|border=1 cellspacing=0 style=&amp;quot;white-space:nowrap&amp;quot;&lt;br /&gt;
|1.819999||-7.955471e-8||5.496247e-7&lt;br /&gt;
|-&lt;br /&gt;
|5.496247e-7||-1.374061e-7||-1.819999&lt;br /&gt;
|-&lt;br /&gt;
|7.955475e-8||1.819999||-1.374061e-7&lt;br /&gt;
|-&lt;br /&gt;
|1188.825561||-54.997646||-109.012428&lt;br /&gt;
|}&lt;br /&gt;
|ALIGN=LEFT|initial position transform matrix&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
|0x48||matrix||&lt;br /&gt;
{|border=1 cellspacing=0 style=&amp;quot;white-space:nowrap&amp;quot;&lt;br /&gt;
|-BGCOLOR=&amp;quot;#FFC8FF&amp;quot;&lt;br /&gt;
|C2 F5 E8 3F||00 00 00 00||00 00 00 00&lt;br /&gt;
|-BGCOLOR=&amp;quot;#FFC800&amp;quot;&lt;br /&gt;
|00 00 00 00||C2 F5 E8 3F||00 00 00 00&lt;br /&gt;
|-BGCOLOR=&amp;quot;#C800C8&amp;quot;&lt;br /&gt;
|00 00 00 00||00 00 00 00||C2 F5 E8 3F&lt;br /&gt;
|-BGCOLOR=&amp;quot;#C87C64&amp;quot;&lt;br /&gt;
|00 00 00 00||00 00 00 00||00 00 00 00&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|border=1 cellspacing=0 style=&amp;quot;white-space:nowrap&amp;quot;&lt;br /&gt;
|1.819999||0.0||0.0&lt;br /&gt;
|-&lt;br /&gt;
|0.0||1.819999||0.0&lt;br /&gt;
|-&lt;br /&gt;
|0.0||0.0||1.819999&lt;br /&gt;
|-&lt;br /&gt;
|0.0||0.0||0.0&lt;br /&gt;
|}&lt;br /&gt;
| ALIGN=LEFT | fixed transform matrix&lt;br /&gt;
{{OBDtr|0x78|uint16|B0C3D4|50 00|80  | ticks per frame; does not work}}&lt;br /&gt;
{{OBDtr|0x7A|uint16|E7CEA5|F5 01|501 | animation length in frames}}&lt;br /&gt;
{{OBDtr|0x7C|uint16|FFDDDD|00 00|0   | stop frame for the first &amp;quot;half&amp;quot; of the animation; used by door animations to distinguish between open and close sequences }}&lt;br /&gt;
{{OBDtr|0x7E|uint16|64AAAA|65 00|101  | number of keyframes}}&lt;br /&gt;
{{OBDtrBK|First keyframe (black outline)}}&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
|0x00||quaternion||&lt;br /&gt;
{|border=1 cellspacing=0 style=&amp;quot;white-space:nowrap&amp;quot;&lt;br /&gt;
|-BGCOLOR=&amp;quot;#EBEBEB&amp;quot;&lt;br /&gt;
| F4 04 35 BF||6A 19 C4 B3||CE 3C 03 B4||F3 04 35 BF&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|border=1 cellspacing=0 style=&amp;quot;white-space:nowrap&amp;quot;&lt;br /&gt;
| -0.7071068|| -9.131584e-8|| -1.222244e-7|| -0.7071067&lt;br /&gt;
|}&lt;br /&gt;
|ALIGN=LEFT|object rotation&lt;br /&gt;
|- ALIGN=CENTER VALIGN=TOP&lt;br /&gt;
|0x10||vector||&lt;br /&gt;
{|border=1 cellspacing=0 style=&amp;quot;white-space:nowrap&amp;quot;&lt;br /&gt;
|-BGCOLOR=&amp;quot;#8C8CCC&amp;quot;&lt;br /&gt;
|C2 F5 E8 3F||AB D7 AA B3||EC 89 13 35&lt;br /&gt;
|}&lt;br /&gt;
|&lt;br /&gt;
{|border=1 cellspacing=0 style=&amp;quot;white-space:nowrap&amp;quot;&lt;br /&gt;
|1188.825561||-54.997646||-109.012428&lt;br /&gt;
|}&lt;br /&gt;
|ALIGN=LEFT|object position&lt;br /&gt;
{{OBDtr|0x1C|uint32|FF00C8|00 00 00 00   |0  |current frame}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Object animations are used to animate [[OBD:OBOA|objects]] (doors included), [[OBD:TRIG|triggers]], cameras and characters. Object animations may be referenced from OBOA but they can also be set using env_setanim script command. Camera animations are never referenced from data files, they&#039;re started from script using cm_anim/cm_interpolate. Because of this the only way to tell if an animation is intended for camera or for an object is to look at the level scripts. &lt;br /&gt;
&lt;br /&gt;
Characters can have an object animation applied to them by using chr_envanim/chr_envanim_block. The object animation controls the movement of the character and it&#039;s normally used together with a [[OBD:TRAM|Totoro animation]] that has the &#039;real world&#039; flag set. This can be used to make the character appear attached to another animated object, for example the motorcycle in the opening of Lab level.&lt;br /&gt;
&lt;br /&gt;
;Transform matrices&lt;br /&gt;
:Like all matrices in Oni, they are composed of 3 vectors defining rotation/scaling/shearing and a 4th vector defining a translation.&lt;br /&gt;
:In the above table the 4 vectors are presented as rows ([[wp:Row-_and_column-major_order|Direct 3D convention]]), although OpenGL and Oni use them as columns.&lt;br /&gt;
:[[wp:Transformation_matrix#Affine_transformations|Affine transformations]] use a 4x4 matrix with 4 extra coefficients (in the presentation above, one would add one column on the right):&lt;br /&gt;
::three [[wp:3D_projection|projection transform]] coefficients (all of them are zero here); one final coefficient (always 1.0 for an affine transform matrix).&lt;br /&gt;
:Alternatively, one can think of the 3x4 matrix as a 3x3 rotation/scaling matrix and a position vector&lt;br /&gt;
::*Let X=(x, y, z) be the position of a vertex in the M3GM&lt;br /&gt;
::*Let M=(m11, m21, m31; m12, m22, m32; m13, m23, m33) be the 3x3 matrix&lt;br /&gt;
::*Let R=(m14, m24, m34) be the translation vector&lt;br /&gt;
::Then the absolute position of the vertex in the 3D world will be: X M + R&lt;br /&gt;
::(left multiplication is used because of the row-major notation above)&lt;br /&gt;
;Initial transform matrix&lt;br /&gt;
:It is used to position the object in the environment before the animation is played, it coresponds to the first animation frame.&lt;br /&gt;
:When the animation is played, they use the fixed transform matrix and a quaternion.&lt;br /&gt;
;Fixed transform matrix&lt;br /&gt;
:This transformation is applied before the quaternion+position transform at every keyframe.&lt;br /&gt;
:The only transform that can&#039;t be handled by the quaternion+position is scaling/mirroring.&lt;br /&gt;
:Thus, the fixed transform is a scaling matrix most of the time (no rotation or translation).&lt;br /&gt;
:In the above example, the fixed transform scales the van up by 1.82 (along all three axes).&lt;br /&gt;
;Quaternions&lt;br /&gt;
:Those are used in Oni whenever interpolation of 3D rotation is involved (e.g., [[OBD_talk:TRAM/raw0x34#Quaternions|TRAM rotation]])&lt;br /&gt;
:In this case, rotation at intermediate frames is interpolated from the keyframe quaternions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
----&lt;br /&gt;
{{OBD_File_Footer | type=OBAN | prev=Mtrl | next=OBDC | name=Object Animation | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:Mtrl&amp;diff=45180</id>
		<title>OBD:Mtrl</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:Mtrl&amp;diff=45180"/>
		<updated>2025-05-12T11:24:42Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Removing DEAD part... It is NOT a part of the type...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=Mtrl | prev=M3GM | next=OBAN | name=Material | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:mtrl_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr|0x00|res_id  |FF0000|01 E5 0F 00|4069   |04069-Armor.Mtrl}}&lt;br /&gt;
{{OBDtr|0x04|lev_id  |FFFF00|01 00 00 00|0      |level 0}}&lt;br /&gt;
{{OBDtr|0x08|uint16   |FFC8C8|FF FF      |-1     |ID; ignored; runtime only}}&lt;br /&gt;
{{OBDtr|0x0A|uint16 |FFFFC8|AD DE      |dead   |depth; unused; runtime only}}&lt;br /&gt;
{{OBDtr| ---- |bool |FFFFC8|AD      |dead   |breakable; unused; runtime only}}&lt;br /&gt;
{{OBDtr| ---- |char[3] |FFFFC8|DE AD DE      |dead   |padding}}&lt;br /&gt;
{{OBDtr|0x10|res_id  |C8FFC8|01 E6 0F 00|4070   |link to 04070-Character.Mtrl (parent material) }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Mtrl usage&lt;br /&gt;
:The materials are looked up from [[OBD:BINA/ONIE|Impact_Effects.BINA]] and [[OBD:BINA/TMBD|Texture_Materials.BINA]] as well as from [[OBD:CBPM|CBPM]] and maybe a few other places ^^&lt;br /&gt;
&lt;br /&gt;
;Mtrl tree&lt;br /&gt;
*Default [5]&lt;br /&gt;
**Character [4]&lt;br /&gt;
**#Armor [0]&lt;br /&gt;
**#Cloth [0]&lt;br /&gt;
**#Flesh [0]&lt;br /&gt;
**#Shield [1]&lt;br /&gt;
**#*Super_Shield [0]&lt;br /&gt;
**Glass [4]&lt;br /&gt;
**#Clear_Glass [0]&lt;br /&gt;
**#Small_Glass [0]&lt;br /&gt;
**#Tinted_Glass [0]&lt;br /&gt;
**#Unbreak_Glass [0]&lt;br /&gt;
**Liquid [0]&lt;br /&gt;
**Mesh [0]&lt;br /&gt;
**Solid [4]&lt;br /&gt;
**#Carpet [0]&lt;br /&gt;
**#Hard [3]&lt;br /&gt;
**#*Metal [3]&lt;br /&gt;
**#**Heavy_Metal&lt;br /&gt;
**#**Light_Metal&lt;br /&gt;
**#**Resonant_Metal&lt;br /&gt;
**#*Stone [2]&lt;br /&gt;
**#**Asphalt&lt;br /&gt;
**#**Concrete&lt;br /&gt;
**#*Stucco [0]&lt;br /&gt;
**#Loose_Ground [2]&lt;br /&gt;
**#*Dirt [0]&lt;br /&gt;
**#*Snow [0]&lt;br /&gt;
**#Plastic [0]&lt;br /&gt;
**#Soft [0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=Mtrl | prev=M3GM | next=OBAN | name=Material | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:M3GM&amp;diff=45179</id>
		<title>OBD:M3GM</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:M3GM&amp;diff=45179"/>
		<updated>2025-05-12T11:17:49Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=M3GM | prev=M3GA | next=Mtrl | name=Geometry | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:m3gm_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr|0x00|res_id  |FF0000|01 D7 00 00|215   | 00215-door_1_0.M3GM}}&lt;br /&gt;
{{OBDtr|0x04|lev_id  |FFFF00|01 00 00 06|3     | level 3}}&lt;br /&gt;
{{OBDtr|0x08|uint32   |FFC8C8|00 00 00 00|0     | geometry flags; runtime only }}&lt;br /&gt;
{{OBDtr|0x0C|link    |FFFFC8|01 DA 00 00|218   | link to [[OBD:PNTA|00218-.PNTA]] (vertex XYZs) }}&lt;br /&gt;
{{OBDtr|0x10|link    |FFFFC8|01 F7 00 00|247   | link to [[OBD:VCRA|00247-.VCRA]] (vertex normals) }}&lt;br /&gt;
{{OBDtr|0x14|link    |FFFFC8|01 F0 00 00|240   | link to 00240-.[[OBD:VCRA|VCRA]] (face normals) }}&lt;br /&gt;
{{OBDtr|0x18|link    |FFFFC8|01 ED 00 00|237   | link to [[OBD:TXCA|00237-.TXCA]] (vertex UVs) }}&lt;br /&gt;
{{OBDtr|0x1C|link    |FFFFC8|01 0C 01 00|268   | link to [[OBD:IDXA_M3GM_1|00268-.IDXA]] (triangle strips) }}&lt;br /&gt;
{{OBDtr|0x20|link    |FFFFC8|01 11 01 00|273   | link to [[OBD:IDXA_M3GM_2|00273-.IDXA]] (face grouping by normal) }}&lt;br /&gt;
{{OBDtr|0x24|link    |FFFFC8|01 D8 00 00|216   | link to 00216-.[[OBD:TXMP|TXMP]] (texture) }}&lt;br /&gt;
{{OBDtr|0x28|link    |C8FFC8|00 00 00 00|unused| obsolete GMAN (geometry animation) link; never used in Oni}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Vertices&lt;br /&gt;
:XYZ and UV coordinates are stored in parallel (same number of entries in PNTA and TXCA).&lt;br /&gt;
;Vertex normals&lt;br /&gt;
:The first VCRA stores the normals for every vertex (same entries as in PNTA and TXCA).&lt;br /&gt;
:Vertex normals are used by Gouraud shading (directional lighting).&lt;br /&gt;
;Face normals&lt;br /&gt;
:The second VCRA stores the normals for every face (groups defined by the second IDXA).&lt;br /&gt;
:Face normals are used for backface culling.&lt;br /&gt;
;Triangle strips&lt;br /&gt;
:The first IDXA lists the triangles as strips. The IDs are the ones in PNTA and IDXA.&lt;br /&gt;
:The start of a new strip is signaled by a high bit in the ID of its first vertex.&lt;br /&gt;
:Strips are more optimal for rendering, they are generated when authoring an M3GM.&lt;br /&gt;
;Face groupings&lt;br /&gt;
:The second IDXA groups the triangles into faces (oriented by the second VCRA).&lt;br /&gt;
;Geometry animation&lt;br /&gt;
:Geometry animation worked in a way similar to texture animation, by picking M3GMs from an array (GMAN) and displaying them at a specified frame rate, optionally with randomization.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
;PS2 implementation&lt;br /&gt;
:PS2 M3GMs have the same data size as PC and Mac ones (0x24 bytes of actual data, 0x2C if counting the instance and level IDs), but the layout is different.&lt;br /&gt;
:*Face normals aren&#039;t stored at all, and vertex normals aren&#039;t stored as VCRA either, therefore both VCRA and the second IDXA are simply missing, which frees up 12 bytes worth of space for data fields unique to the PS2 format.&lt;br /&gt;
:*8 of the 12 freed-up bytes are used by explicitly storing the number of vertices (i.e., the array size common to PNTA and TXCA) and the number of faces (same count as the 2nd VCRA on PC and Mac), as two int32&#039;s.&lt;br /&gt;
:*The other 4 bytes are used to reference the compressed storage of vertex normals in the.raw file. This storage is very compact/lossy, using only 1 byte per normal (instead of 12 bytes per normal in the case of VCRA storage).&lt;br /&gt;
:An an example, consider M3GMaxes of level0_Final.&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr|0x00|res_id  |FF0000|01 63 00 00|99    | 00099-axes.M3GM}}&lt;br /&gt;
{{OBDtr|0x04|lev_id  |FFFF00|01 00 00 00|0     | level 0}}&lt;br /&gt;
{{OBDtr|0x08|uint32   |FFC8C8|00 00 00 00|0     | runtime geometry flags (supposedly the same as for PC and Mac) }}&lt;br /&gt;
{{OBDtr|0x0C|uint32   |FFC8C8|60 00 00 00|96    | number of faces (same as in second VCRA on PC and Mac) }}&lt;br /&gt;
{{OBDtr|0x10|link   |FFFFC8|01 64 00 00|100   | link to [[OBD:PNTA|00100-.PNTA]] (vertex XYZs) }}&lt;br /&gt;
{{OBDtr|0x14|link    |FFFFC8|01 65 00 00|101   | link to [[OBD:TXCA|00101-.TXCA]] (vertex UVs) }}&lt;br /&gt;
{{OBDtr|0x18|link    |FFFFC8|01 66 00 00|102   | link to [[OBD:IDXA_M3GM_1|00102-.IDXA]] (triangle strips) }}&lt;br /&gt;
{{OBDtr|0x1C|uint32   |FFC8C8|6C 00 00 00|108   | number of vertices (same as in PNTA and TXCA); also size of .raw part in bytes }}&lt;br /&gt;
{{OBDtr|0x20|offset  |FFFFC8|A0 8E 01 00| 0x00018EA0 | offset into the .raw file where the the 108 compressed vertex normals are stored:&lt;br /&gt;
 &#039;&#039;&#039;2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D F8 F8 C2 55&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;40 40 10 D4 D4 09 C2 5F 6B 6B 6B 6B 6B 6B 6B 6B&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;6B 82 82 D9 16 E3 E3 00 EB EB 6D 6D 6D 6D 6D 6D&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;6D 6D 6D 6D AB AB EB 80 52 FC 95 30 30 EA EA EA&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;EA EA A7 A7 24 EA EA EA EA 24 02 02 02 A7 A7 A7&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;A7 EF EA EA EA EA 02 02 02 02 24 24 24 24 F8 2D&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;2D 2D 2D A7 A7 A7 A7 EA EA EA EA 16&#039;&#039;&#039;&lt;br /&gt;
See below for a overview of the compression/decompression rule, i.e., how the 256 values of a compressed normal are mapped to the unit sphere.&lt;br /&gt;
}}&lt;br /&gt;
{{OBDtr|0x24|link    |FFFFC8|01 67 00 00|103   | texture link (to the empty 00103-_AXIS.[[OBD:TXMP|TXMP]]; the actually relevant 00104-_axis.TXMP is orphaned) }}&lt;br /&gt;
{{OBDtr|0x28|link    |C8FFC8|00 00 00 00|unused| supposedly the same GMAN link (geometry animation) as for PC and Mac }}&lt;br /&gt;
|}&lt;br /&gt;
;OniBrowser being able to load PS2 M3GMs (a mystery of the modern times)&lt;br /&gt;
:Somehow OniBrowser is able to display M3GMs from PS2 instance files (except those with textures), even though all the links (PNТA, TXCA, IDXA) are in the wrong positions. Apparently, in the case of M3GM, OniBrowser reads in all the fields past 0x0C as a bunch of non-typed instance links, then identifies their types and populates the PNTA, VCRA, TXCA and IDXA references with the first encountered instance of the matching type.&lt;br /&gt;
;Compressed vertex normals&lt;br /&gt;
[[Image:Four-fold tetrahedron.jpg|right|160px]]&lt;br /&gt;
:It is somewhat uncommon to pack a normal vector into a single byte, but it turns out that there is a relatively straightforward way to subdivide the unit sphere into 256 sectors. One starts by splitting the sphere into four large quadrants (based on tetrahedral symmetry), and then each of the big &amp;quot;triangles&amp;quot; is subdivided into 4, then 16, then 64 smaller triangles, like the picture to the right. There is some distortion near the four poles, but other than that it&#039;s a valid way to pack normals if space is an issue (if packing to 2 bytes or more, then one would typically work in plain spherical coordinates instead, i.e. azimuth and elevation).&lt;br /&gt;
:There isn&#039;t much of a point in giving a detailed description of the mapping here, but the basic idea would be to use the lowest 64 values for the first quadrant, the next 64 values for the second quadrant, etc. In actuality the PS2 implementation uses 63 for the first quadrant, 62 for the second, 63 for the third, and 68 for the last - for whatever reason. Within a quadrant the distribution isn&#039;t entirely regular, either. To be documented later if at all.&lt;br /&gt;
;&amp;quot;Bad door lighting&amp;quot;&lt;br /&gt;
:When looking at the .raw part of the M3GM for some doors (level geometry), a striking observation is that there are only three distinct normal values (0xDE, 0x6A and 0x82), rather than the 6 normals that you&#039;d expect for an axis-aligned box. Apparently half of those are bad, inward-pointing normals that no one ever bothered fixing. The regular VCRA normals for the same doors (on PC and Mac) are messed up in exactly the same way. Possibly this is related to the BSL variable &#039;&#039;&#039;door_pop_lighting&#039;&#039;&#039; (&amp;quot;uses bad door lighting&amp;quot;).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=M3GM | prev=M3GA | next=Mtrl | name=Geometry | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:M3GM&amp;diff=45178</id>
		<title>OBD:M3GM</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:M3GM&amp;diff=45178"/>
		<updated>2025-05-12T11:16:56Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=M3GM | prev=M3GA | next=Mtrl | name=Geometry | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:m3gm_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr|0x00|res_id  |FF0000|01 D7 00 00|215   | 00215-door_1_0.M3GM}}&lt;br /&gt;
{{OBDtr|0x04|lev_id  |FFFF00|01 00 00 06|3     | level 3}}&lt;br /&gt;
{{OBDtr|0x08|uint32   |FFC8C8|00 00 00 00|0     | geometry flags; runtime only }}&lt;br /&gt;
{{OBDtr|0x0C|link    |FFFFC8|01 DA 00 00|218   | link to [[OBD:PNTA|00218-.PNTA]] (vertex XYZs) }}&lt;br /&gt;
{{OBDtr|0x10|link    |FFFFC8|01 F7 00 00|247   | link to [[OBD:VCRA|00247-.VCRA]] (vertex normals) }}&lt;br /&gt;
{{OBDtr|0x14|link    |FFFFC8|01 F0 00 00|240   | link to 00240-.[[OBD:VCRA|VCRA]] (face normals) }}&lt;br /&gt;
{{OBDtr|0x18|link    |FFFFC8|01 ED 00 00|237   | link to [[OBD:TXCA|00237-.TXCA]] (vertex UVs) }}&lt;br /&gt;
{{OBDtr|0x1C|link    |FFFFC8|01 0C 01 00|268   | link to [[OBD:IDXA_M3GM_1|00268-.IDXA]] (triangle strips) }}&lt;br /&gt;
{{OBDtr|0x20|link    |FFFFC8|01 11 01 00|273   | link to [[OBD:IDXA_M3GM_2|00273-.IDXA]] (face grouping by normal) }}&lt;br /&gt;
{{OBDtr|0x24|link    |FFFFC8|01 D8 00 00|216   | link to 00216-.[[OBD:TXMP|TXMP]] (texture) }}&lt;br /&gt;
{{OBDtr|0x28|link    |C8FFC8|00 00 00 00|unused| obsolete GMAN (geometry animation) link; never used in Oni}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Vertices&lt;br /&gt;
:XYZ and UV coordinates are stored in parallel (same number of entries in PNTA and TXCA).&lt;br /&gt;
;Vertex normals&lt;br /&gt;
:The first VCRA stores the normals for every vertex (same entries as in PNTA and TXCA).&lt;br /&gt;
:Vertex normals are used by Gouraud shading (directional lighting).&lt;br /&gt;
;Face normals&lt;br /&gt;
:The second VCRA stores the normals for every face (groups defined by the second IDXA).&lt;br /&gt;
:Face normals are used for backface culling.&lt;br /&gt;
;Triangle strips&lt;br /&gt;
:The first IDXA lists the triangles as strips. The IDs are the ones in PNTA and IDXA.&lt;br /&gt;
:The start of a new strip is signaled by a high bit in the ID of its first vertex.&lt;br /&gt;
:Strips are more optimal for rendering, they are generated when authoring an M3GM.&lt;br /&gt;
;Face groupings&lt;br /&gt;
:The second IDXA groups the triangles into faces (oriented by the second VCRA).&lt;br /&gt;
;Geometry animation&lt;br /&gt;
:Geometry animation worked in a way similar to texture animation, by picking M3GMs from an array (GMAN) and displaying them at a specified frame rate, optionally with randomization.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
;PS2 implementation&lt;br /&gt;
:PS2 M3GMs have the same data size as PC and Mac ones (0x24 bytes of actual data, 0x2C if counting the instance and level IDs), but the layout is different.&lt;br /&gt;
:*Face normals aren&#039;t stored at all, and vertex normals aren&#039;t stored as VCRA either, therefore both VCRA and the second IDXA are simply missing, which frees up 12 bytes worth of space for data fields unique to the PS2 format.&lt;br /&gt;
:*8 of the 12 freed-up bytes are used by explicitly storing the number of vertices (i.e., the array size common to PNTA and TXCA) and the number of faces (same count as the 2nd VCRA on PC and Mac), as two int32&#039;s.&lt;br /&gt;
:*The other 4 bytes are used to reference the compressed storage of vertex normals in the.raw file. This storage is very compact/lossy, using only 1 byte per normal (instead of 12 bytes per normal in the case of VCRA storage).&lt;br /&gt;
:An an example, consider M3GMaxes of level0_Final.&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr|0x00|res_id  |FF0000|01 63 00 00|99    | 00099-axes.M3GM}}&lt;br /&gt;
{{OBDtr|0x04|lev_id  |FFFF00|01 00 00 00|0     | level 0}}&lt;br /&gt;
{{OBDtr|0x08|int32   |FFC8C8|00 00 00 00|0     | runtime geometry flags (supposedly the same as for PC and Mac) }}&lt;br /&gt;
{{OBDtr|0x0C|int32   |FFC8C8|60 00 00 00|96    | number of faces (same as in second VCRA on PC and Mac) }}&lt;br /&gt;
{{OBDtr|0x10|int32   |FFFFC8|01 64 00 00|100   | link to [[OBD:PNTA|00100-.PNTA]] (vertex XYZs) }}&lt;br /&gt;
{{OBDtr|0x14|link    |FFFFC8|01 65 00 00|101   | link to [[OBD:TXCA|00101-.TXCA]] (vertex UVs) }}&lt;br /&gt;
{{OBDtr|0x18|link    |FFFFC8|01 66 00 00|102   | link to [[OBD:IDXA_M3GM_1|00102-.IDXA]] (triangle strips) }}&lt;br /&gt;
{{OBDtr|0x1C|int32   |FFC8C8|6C 00 00 00|108   | number of vertices (same as in PNTA and TXCA); also size of .raw part in bytes }}&lt;br /&gt;
{{OBDtr|0x20|offset  |FFFFC8|A0 8E 01 00| 0x00018EA0 | offset into the .raw file where the the 108 compressed vertex normals are stored:&lt;br /&gt;
 &#039;&#039;&#039;2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D F8 F8 C2 55&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;40 40 10 D4 D4 09 C2 5F 6B 6B 6B 6B 6B 6B 6B 6B&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;6B 82 82 D9 16 E3 E3 00 EB EB 6D 6D 6D 6D 6D 6D&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;6D 6D 6D 6D AB AB EB 80 52 FC 95 30 30 EA EA EA&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;EA EA A7 A7 24 EA EA EA EA 24 02 02 02 A7 A7 A7&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;A7 EF EA EA EA EA 02 02 02 02 24 24 24 24 F8 2D&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;2D 2D 2D A7 A7 A7 A7 EA EA EA EA 16&#039;&#039;&#039;&lt;br /&gt;
See below for a overview of the compression/decompression rule, i.e., how the 256 values of a compressed normal are mapped to the unit sphere.&lt;br /&gt;
}}&lt;br /&gt;
{{OBDtr|0x24|link    |FFFFC8|01 67 00 00|103   | texture link (to the empty 00103-_AXIS.[[OBD:TXMP|TXMP]]; the actually relevant 00104-_axis.TXMP is orphaned) }}&lt;br /&gt;
{{OBDtr|0x28|link    |C8FFC8|00 00 00 00|unused| supposedly the same GMAN link (geometry animation) as for PC and Mac }}&lt;br /&gt;
|}&lt;br /&gt;
;OniBrowser being able to load PS2 M3GMs (a mystery of the modern times)&lt;br /&gt;
:Somehow OniBrowser is able to display M3GMs from PS2 instance files (except those with textures), even though all the links (PNТA, TXCA, IDXA) are in the wrong positions. Apparently, in the case of M3GM, OniBrowser reads in all the fields past 0x0C as a bunch of non-typed instance links, then identifies their types and populates the PNTA, VCRA, TXCA and IDXA references with the first encountered instance of the matching type.&lt;br /&gt;
;Compressed vertex normals&lt;br /&gt;
[[Image:Four-fold tetrahedron.jpg|right|160px]]&lt;br /&gt;
:It is somewhat uncommon to pack a normal vector into a single byte, but it turns out that there is a relatively straightforward way to subdivide the unit sphere into 256 sectors. One starts by splitting the sphere into four large quadrants (based on tetrahedral symmetry), and then each of the big &amp;quot;triangles&amp;quot; is subdivided into 4, then 16, then 64 smaller triangles, like the picture to the right. There is some distortion near the four poles, but other than that it&#039;s a valid way to pack normals if space is an issue (if packing to 2 bytes or more, then one would typically work in plain spherical coordinates instead, i.e. azimuth and elevation).&lt;br /&gt;
:There isn&#039;t much of a point in giving a detailed description of the mapping here, but the basic idea would be to use the lowest 64 values for the first quadrant, the next 64 values for the second quadrant, etc. In actuality the PS2 implementation uses 63 for the first quadrant, 62 for the second, 63 for the third, and 68 for the last - for whatever reason. Within a quadrant the distribution isn&#039;t entirely regular, either. To be documented later if at all.&lt;br /&gt;
;&amp;quot;Bad door lighting&amp;quot;&lt;br /&gt;
:When looking at the .raw part of the M3GM for some doors (level geometry), a striking observation is that there are only three distinct normal values (0xDE, 0x6A and 0x82), rather than the 6 normals that you&#039;d expect for an axis-aligned box. Apparently half of those are bad, inward-pointing normals that no one ever bothered fixing. The regular VCRA normals for the same doors (on PC and Mac) are messed up in exactly the same way. Possibly this is related to the BSL variable &#039;&#039;&#039;door_pop_lighting&#039;&#039;&#039; (&amp;quot;uses bad door lighting&amp;quot;).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=M3GM | prev=M3GA | next=Mtrl | name=Geometry | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:M3GM&amp;diff=45177</id>
		<title>OBD:M3GM</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:M3GM&amp;diff=45177"/>
		<updated>2025-05-12T11:14:29Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Removing DEAD part... It is NOT a part of the type...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=M3GM | prev=M3GA | next=Mtrl | name=Geometry | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:m3gm_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr|0x00|res_id  |FF0000|01 D7 00 00|215   | 00215-door_1_0.M3GM}}&lt;br /&gt;
{{OBDtr|0x04|lev_id  |FFFF00|01 00 00 06|3     | level 3}}&lt;br /&gt;
{{OBDtr|0x08|uint32   |FFC8C8|00 00 00 00|0     | geometry flags; runtime only }}&lt;br /&gt;
{{OBDtr|0x0C|link    |FFFFC8|01 DA 00 00|218   | link to [[OBD:PNTA|00218-.PNTA]] (vertex XYZs) }}&lt;br /&gt;
{{OBDtr|0x10|link    |FFFFC8|01 F7 00 00|247   | link to [[OBD:VCRA|00247-.VCRA]] (vertex normals) }}&lt;br /&gt;
{{OBDtr|0x14|link    |FFFFC8|01 F0 00 00|240   | link to 00240-.[[OBD:VCRA|VCRA]] (face normals) }}&lt;br /&gt;
{{OBDtr|0x18|link    |FFFFC8|01 ED 00 00|237   | link to [[OBD:TXCA|00237-.TXCA]] (vertex UVs) }}&lt;br /&gt;
{{OBDtr|0x1C|link    |FFFFC8|01 0C 01 00|268   | link to [[OBD:IDXA_M3GM_1|00268-.IDXA]] (triangle strips) }}&lt;br /&gt;
{{OBDtr|0x20|link    |FFFFC8|01 11 01 00|273   | link to [[OBD:IDXA_M3GM_2|00273-.IDXA]] (face grouping by normal) }}&lt;br /&gt;
{{OBDtr|0x24|link    |FFFFC8|01 D8 00 00|216   | link to 00216-.[[OBD:TXMP|TXMP]] (texture) }}&lt;br /&gt;
{{OBDtr|0x28|link    |C8FFC8|00 00 00 00|unused| obsolete GMAN (geometry animation) link; never used in Oni}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;Vertices&lt;br /&gt;
:XYZ and UV coordinates are stored in parallel (same number of entries in PNTA and TXCA).&lt;br /&gt;
;Vertex normals&lt;br /&gt;
:The first VCRA stores the normals for every vertex (same entries as in PNTA and TXCA).&lt;br /&gt;
:Vertex normals are used by Gouraud shading (directional lighting).&lt;br /&gt;
;Face normals&lt;br /&gt;
:The second VCRA stores the normals for every face (groups defined by the second IDXA).&lt;br /&gt;
:Face normals are used for backface culling.&lt;br /&gt;
;Triangle strips&lt;br /&gt;
:The first IDXA lists the triangles as strips. The IDs are the ones in PNTA and IDXA.&lt;br /&gt;
:The start of a new strip is signaled by a high bit in the ID of its first vertex.&lt;br /&gt;
:Strips are more optimal for rendering, they are generated when authoring an M3GM.&lt;br /&gt;
;Face groupings&lt;br /&gt;
:The second IDXA groups the triangles into faces (oriented by the second VCRA).&lt;br /&gt;
;Geometry animation&lt;br /&gt;
:Geometry animation worked in a way similar to texture animation, by picking M3GMs from an array (GMAN) and displaying them at a specified frame rate, optionally with randomization.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
;PS2 implementation&lt;br /&gt;
:PS2 M3GMs have the same data size as PC and Mac ones (0x24 bytes of actual data, 0x2C if counting the instance and level IDs), but the layout is different.&lt;br /&gt;
:*Face normals aren&#039;t stored at all, and vertex normals aren&#039;t stored as VCRA either, therefore both VCRA and the second IDXA are simply missing, which frees up 12 bytes worth of space for data fields unique to the PS2 format.&lt;br /&gt;
:*8 of the 12 freed-up bytes are used by explicitly storing the number of vertices (i.e., the array size common to PNTA and TXCA) and the number of faces (same count as the 2nd VCRA on PC and Mac), as two int32&#039;s.&lt;br /&gt;
:*The other 4 bytes are used to reference the compressed storage of vertex normals in the.raw file. This storage is very compact/lossy, using only 1 byte per normal (instead of 12 bytes per normal in the case of VCRA storage).&lt;br /&gt;
:An an example, consider M3GMaxes of level0_Final.&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr|0x00|res_id  |FF0000|01 63 00 00|99    | 00099-axes.M3GM}}&lt;br /&gt;
{{OBDtr|0x04|lev_id  |FFFF00|01 00 00 00|0     | level 0}}&lt;br /&gt;
{{OBDtr|0x08|int32   |FFC8C8|00 00 00 00|0     | runtime geometry flags (supposedly the same as for PC and Mac) }}&lt;br /&gt;
{{OBDtr|0x0C|int32   |FFC8C8|60 00 00 00|96    | number of faces (same as in second VCRA on PC and Mac) }}&lt;br /&gt;
{{OBDtr|0x10|int32   |FFFFC8|01 64 00 00|100   | link to [[OBD:PNTA|00100-.PNTA]] (vertex XYZs) }}&lt;br /&gt;
{{OBDtr|0x14|link    |FFFFC8|01 65 00 00|101   | link to [[OBD:TXCA|00101-.TXCA]] (vertex UVs) }}&lt;br /&gt;
{{OBDtr|0x18|link    |FFFFC8|01 66 00 00|102   | link to [[OBD:IDXA_M3GM_1|00102-.IDXA]] (triangle strips) }}&lt;br /&gt;
{{OBDtr|0x1C|int32   |FFC8C8|6C 00 00 00|108   | number of vertices (same as in PNTA and TXCA); also size of .raw part in bytes }}&lt;br /&gt;
{{OBDtr|0x20|offset  |FFFFC8|A0 8E 01 00| 0x00018EA0 | offset into the .raw file where the the 108 compressed vertex normals are stored:&lt;br /&gt;
 &#039;&#039;&#039;2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D F8 F8 C2 55&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;40 40 10 D4 D4 09 C2 5F 6B 6B 6B 6B 6B 6B 6B 6B&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;6B 82 82 D9 16 E3 E3 00 EB EB 6D 6D 6D 6D 6D 6D&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;6D 6D 6D 6D AB AB EB 80 52 FC 95 30 30 EA EA EA&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;EA EA A7 A7 24 EA EA EA EA 24 02 02 02 A7 A7 A7&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;A7 EF EA EA EA EA 02 02 02 02 24 24 24 24 F8 2D&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;2D 2D 2D A7 A7 A7 A7 EA EA EA EA 16&#039;&#039;&#039;&lt;br /&gt;
See below for a overview of the compression/decompression rule, i.e., how the 256 values of a compressed normal are mapped to the unit sphere.&lt;br /&gt;
}}&lt;br /&gt;
{{OBDtr|0x24|link    |FFFFC8|01 67 00 00|103   | texture link (to the empty 00103-_AXIS.[[OBD:TXMP|TXMP]]; the actually relevant 00104-_axis.TXMP is orphaned) }}&lt;br /&gt;
{{OBDtr|0x28|link    |C8FFC8|00 00 00 00|unused| supposedly the same GMAN link (geometry animation) as for PC and Mac }}&lt;br /&gt;
{{OBDtr|0x2C|char[20]|C8FFFF|AD DE      |dead  | unused}}&lt;br /&gt;
|}&lt;br /&gt;
;OniBrowser being able to load PS2 M3GMs (a mystery of the modern times)&lt;br /&gt;
:Somehow OniBrowser is able to display M3GMs from PS2 instance files (except those with textures), even though all the links (PNТA, TXCA, IDXA) are in the wrong positions. Apparently, in the case of M3GM, OniBrowser reads in all the fields past 0x0C as a bunch of non-typed instance links, then identifies their types and populates the PNTA, VCRA, TXCA and IDXA references with the first encountered instance of the matching type.&lt;br /&gt;
;Compressed vertex normals&lt;br /&gt;
[[Image:Four-fold tetrahedron.jpg|right|160px]]&lt;br /&gt;
:It is somewhat uncommon to pack a normal vector into a single byte, but it turns out that there is a relatively straightforward way to subdivide the unit sphere into 256 sectors. One starts by splitting the sphere into four large quadrants (based on tetrahedral symmetry), and then each of the big &amp;quot;triangles&amp;quot; is subdivided into 4, then 16, then 64 smaller triangles, like the picture to the right. There is some distortion near the four poles, but other than that it&#039;s a valid way to pack normals if space is an issue (if packing to 2 bytes or more, then one would typically work in plain spherical coordinates instead, i.e. azimuth and elevation).&lt;br /&gt;
:There isn&#039;t much of a point in giving a detailed description of the mapping here, but the basic idea would be to use the lowest 64 values for the first quadrant, the next 64 values for the second quadrant, etc. In actuality the PS2 implementation uses 63 for the first quadrant, 62 for the second, 63 for the third, and 68 for the last - for whatever reason. Within a quadrant the distribution isn&#039;t entirely regular, either. To be documented later if at all.&lt;br /&gt;
;&amp;quot;Bad door lighting&amp;quot;&lt;br /&gt;
:When looking at the .raw part of the M3GM for some doors (level geometry), a striking observation is that there are only three distinct normal values (0xDE, 0x6A and 0x82), rather than the 6 normals that you&#039;d expect for an axis-aligned box. Apparently half of those are bad, inward-pointing normals that no one ever bothered fixing. The regular VCRA normals for the same doors (on PC and Mac) are messed up in exactly the same way. Possibly this is related to the BSL variable &#039;&#039;&#039;door_pop_lighting&#039;&#039;&#039; (&amp;quot;uses bad door lighting&amp;quot;).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=M3GM | prev=M3GA | next=Mtrl | name=Geometry | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:BINA&amp;diff=45176</id>
		<title>OBD:BINA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:BINA&amp;diff=45176"/>
		<updated>2025-05-12T11:09:38Z</updated>

		<summary type="html">&lt;p&gt;Mai X: Removing DEAD part... It is NOT a part of the type...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=BINA | prev=AKVA | next=CBPI | name=Binary Data | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&amp;quot;BINA&amp;quot; is short for &amp;quot;binary data&amp;quot;, which refers to chunks of data that are stored in the [[separate file]] when available (Windows demo, Mac) or in the [[raw file]] otherwise (Windows). BINA is registered as a tag, but is really a wrapper for other tags. One of those tags, OBJC, is a wrapper for still more tags (see below).&lt;br /&gt;
&lt;br /&gt;
==File description==&lt;br /&gt;
[[image:bina_all.gif]]&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 67 23 00 | 9063      | 09063-CJBOCharacter.BINA }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3         | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | uint32    |FFC8C8| 34 8B 00 00 | 35636     | size of the part in the raw/separate file in bytes }}&lt;br /&gt;
{{OBDtr| 0x0C | offset   |FFFFC8| 40 DD E4 00 |00 E4 DD 40| at this position starts the part in the raw/separate file }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Overview of BINA types==&lt;br /&gt;
The different sub-tags of BINA are:&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
|-BGCOLOR=&amp;quot;#E9E9E9&amp;quot;&lt;br /&gt;
!COLSPAN=8|[[OBD:BINA/OBJC|OBJC]]: Objects...&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
|WIDTH=12%|[[OBD:BINA/OBJC/CHAR|CHAR]]&amp;lt;BR&amp;gt;Character&lt;br /&gt;
|WIDTH=13%|[[OBD:BINA/OBJC/CMBT|CMBT]]&amp;lt;BR&amp;gt;Combat profile&lt;br /&gt;
|WIDTH=12%|[[OBD:BINA/OBJC/CONS|CONS]]&amp;lt;BR&amp;gt;Console&lt;br /&gt;
|WIDTH=13%|[[OBD:BINA/OBJC/DOOR|DOOR]]&amp;lt;BR&amp;gt;Door&lt;br /&gt;
|WIDTH=12%|[[OBD:BINA/OBJC/FLAG|FLAG]]&amp;lt;BR&amp;gt;Flag&lt;br /&gt;
|WIDTH=13%|[[OBD:BINA/OBJC/FURN|FURN]]&amp;lt;BR&amp;gt;Furniture&lt;br /&gt;
|WIDTH=12%|[[OBD:BINA/OBJC/MELE|MELE]]&amp;lt;BR&amp;gt;Melee profile&lt;br /&gt;
|WIDTH=13%|[[OBD:BINA/OBJC/NEUT|NEUT]]&amp;lt;BR&amp;gt;Neutral behaviour&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
|[[OBD:BINA/OBJC/PART|PART]]&amp;lt;BR&amp;gt;Particle&lt;br /&gt;
|[[OBD:BINA/OBJC/PATR|PATR]]&amp;lt;BR&amp;gt;Patrol path&lt;br /&gt;
|[[OBD:BINA/OBJC/PWRU|PWRU]]&amp;lt;BR&amp;gt;Powerup&lt;br /&gt;
|[[OBD:BINA/OBJC/SNDG|SNDG]]&amp;lt;BR&amp;gt;Sound Group&lt;br /&gt;
|[[OBD:BINA/OBJC/TRGV|TRGV]]&amp;lt;BR&amp;gt;Trigger Volume&lt;br /&gt;
|[[OBD:BINA/OBJC/TRIG|TRIG]]&amp;lt;BR&amp;gt;Trigger&lt;br /&gt;
|[[OBD:BINA/OBJC/TURR|TURR]]&amp;lt;BR&amp;gt;Turret&lt;br /&gt;
|[[OBD:BINA/OBJC/WEAP|WEAP]]&amp;lt;BR&amp;gt;Weapon&lt;br /&gt;
|-BGCOLOR=&amp;quot;#E9E9E9&amp;quot;&lt;br /&gt;
!COLSPAN=8|[[OBD:BINA/ONIE|ONIE]]: Oni Impact Effects&lt;br /&gt;
|-BGCOLOR=&amp;quot;#E9E9E9&amp;quot;&lt;br /&gt;
!COLSPAN=8|[[OBD:BINA/PAR3|PAR3]]: 3D Particle&lt;br /&gt;
|-BGCOLOR=&amp;quot;#E9E9E9&amp;quot;&lt;br /&gt;
!COLSPAN=8|[[OBD:BINA/SABD|SABD]]: Sound Animations Binary Data&lt;br /&gt;
|-BGCOLOR=&amp;quot;#E9E9E9&amp;quot;&lt;br /&gt;
!COLSPAN=8|[[OBD:BINA/TMBD|TMBD]]: Texture Materials Binary Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Global BINA types==&lt;br /&gt;
These are stored in &#039;&#039;&#039;level0_Final&#039;&#039;&#039; and are available globally. The file names link to the raw/separate file parts of every BINA type (or object type, for OBJC).&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
|-BGCOLOR=&amp;quot;#E9E9E9&amp;quot;&lt;br /&gt;
! WIDTH=30% | Filename || WIDTH=35% | Meaning || WIDTH=35% | Function&lt;br /&gt;
|-&lt;br /&gt;
| [[OBD:BINA/PAR3|3RAP&#039;&#039;particle_name&#039;&#039;.BINA]]&lt;br /&gt;
| PAR3 = 3D particles&lt;br /&gt;
| Explosions, projectiles, flashes, trails... everything&lt;br /&gt;
|-&lt;br /&gt;
| [[OBD:BINA/OBJC/CMBT|CJBO&#039;&#039;&#039;Combat&#039;&#039;&#039;.BINA]]&lt;br /&gt;
| Combat profile; [[OBD:BINA/OBJC|OBJC]] = Objects&lt;br /&gt;
| Stores specific (non-melee) behavior: weapon logic, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[OBD:BINA/ONIE|EINO&#039;&#039;&#039;impact_effects&#039;&#039;&#039;.BINA]]&lt;br /&gt;
| ONIE = Oni Impact Effects&lt;br /&gt;
| Footsteps, combat sounds, etc.&lt;br /&gt;
|-&lt;br /&gt;
| [[OBD:BINA/OBJC/MELE|CJBO&#039;&#039;&#039;Melee Profile&#039;&#039;&#039;.BINA]]&lt;br /&gt;
| Melee profile; [[OBD:BINA/OBJC|OBJC]] = Objects&lt;br /&gt;
| Melee profiles&lt;br /&gt;
|-&lt;br /&gt;
| [[OBD:BINA/SABD|DBAS&#039;&#039;character_name&#039;&#039;.BINA]]&lt;br /&gt;
| SABD = Sound Animations Binary Data&lt;br /&gt;
| Linked to (by name) from the [[OBD:ONCV|ONCV]] files&lt;br /&gt;
|-&lt;br /&gt;
| [[OBD:BINA/TMBD|DBMT&#039;&#039;&#039;TextureMaterials&#039;&#039;&#039;.BINA]]&lt;br /&gt;
| TMBD = Texture Materials Binary Data&lt;br /&gt;
| Assigns a material to a texture&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Level-specific BINA types (OBJC)==&lt;br /&gt;
Most BINA/OBJC files are stored on a level-by-level basis, though two global OBJCs are listed above. The file names link to the overview of every OBJC type. The table shows whether a BINA/OBJC is present in a certain level.&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
|-BGCOLOR=&amp;quot;#E9E9E9&amp;quot;&lt;br /&gt;
! WIDTH=30% | BINA file / Level || WIDTH=5% | 1 || WIDTH=5% | 2 || WIDTH=5% | 3 || WIDTH=5% | 4 || WIDTH=5% | 6 || WIDTH=5% | 8 || WIDTH=5% | 9 || WIDTH=5% | 10 || WIDTH=5% | 11 || WIDTH=5% | 12 || WIDTH=5% | 13 || WIDTH=5% | 14 || WIDTH=5% | 18 || WIDTH=5% | 19&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/CHAR|CJBO&#039;&#039;&#039;Character&#039;&#039;&#039;.BINA]]      ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/CONS|CJBO&#039;&#039;&#039;Console&#039;&#039;&#039;.BINA]]        ||X||X||X||X||X||X||X||X||X||&amp;amp;nbsp;||&amp;amp;nbsp;||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/DOOR|CJBO&#039;&#039;&#039;Door&#039;&#039;&#039;.BINA]]           ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/FLAG|CJBO&#039;&#039;&#039;Flag&#039;&#039;&#039;.BINA]]           ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/FURN|CJBO&#039;&#039;&#039;Furniture&#039;&#039;&#039;.BINA]]      ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/NEUT|CJBO&#039;&#039;&#039;Neutral&#039;&#039;&#039;.BINA]]        ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/PART|CJBO&#039;&#039;&#039;Particle&#039;&#039;&#039;.BINA]]       ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/PATR|CJBO&#039;&#039;&#039;Patrol_Path&#039;&#039;&#039;.BINA]]    ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/PWRU|CJBO&#039;&#039;&#039;PowerUp&#039;&#039;&#039;.BINA]]        ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/SNDG|CJBO&#039;&#039;&#039;Sound&#039;&#039;&#039;.BINA]]          ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/TRGV|CJBO&#039;&#039;&#039;Trigger_Volume&#039;&#039;&#039;.BINA]] ||X||X||X||X||X||X||X||X||X||X||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/TRIG|CJBO&#039;&#039;&#039;Trigger&#039;&#039;&#039;.BINA]]        ||X||X||&amp;amp;nbsp;||&amp;amp;nbsp;||X||X||&amp;amp;nbsp;||&amp;amp;nbsp;||X||&amp;amp;nbsp;||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/TURR|CJBO&#039;&#039;&#039;Turret&#039;&#039;&#039;.BINA]]         ||&amp;amp;nbsp;||X||&amp;amp;nbsp;||&amp;amp;nbsp;||&amp;amp;nbsp;||X||&amp;amp;nbsp;||&amp;amp;nbsp;||X||&amp;amp;nbsp;||X||X||X||X&lt;br /&gt;
|-ALIGN=CENTER&lt;br /&gt;
| ALIGN=LEFT | [[OBD:BINA/OBJC/WEAP|CJBO&#039;&#039;&#039;Weapon&#039;&#039;&#039;.BINA]]         ||&amp;amp;nbsp;||&amp;amp;nbsp;||X||&amp;amp;nbsp;||&amp;amp;nbsp;||X||X||X||X||X||&amp;amp;nbsp;||&amp;amp;nbsp;||X||X&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=BINA | prev=AKVA | next=CBPI | name=Binary Data | family=General}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:AKDA&amp;diff=45175</id>
		<title>OBD:AKDA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:AKDA&amp;diff=45175"/>
		<updated>2025-05-12T11:08:05Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=AKDA | prev=AKBP | next=AKEV | name=Door Frame Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:akda_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x00 | res_id   |FF0000| 01 C2 03 00 | 962        | 00962-.AKDA }}&lt;br /&gt;
{{OBDtr | 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3          | level 3 }}&lt;br /&gt;
{{OBDtr | 0x08 | char[20] |00FF00| AD DE       | dead       | padding }}&lt;br /&gt;
{{OBDtr | 0x1C | uint32    |00FFFF| 3D 00 00 00 | 61         | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr | 0x00 | uint32    |FFC8C8| BC 88 00 00 | 35004      | [[OBD:AGQG|AGQG]] element ID }}&lt;br /&gt;
{{OBDtr | 0x04 | float    |FFFFC8| 00 00 46 43 | 198.000000 | x-coordinate of the lower left point of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x08 | float    |FFFFC8| 00 00 D8 42 | 108.000000 | y-coordinate (height) of the lower left point of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x0C | float    |FFFFC8| 00 80 CC C3 | -409.000000| z-coordinate of the lower left point of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x10 | float    |C8FFC8| 00 00 58 43 | 216.000000 | x-coordinate of the upper right point of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x14 | float    |C8FFC8| 00 00 0A 43 | 138.000000 | y-coordinate (height) of the upper right point of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x18 | float    |C8FFC8| 60 7E CC C3 | -408.987305| z-coordinate of the upper right point of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x1C | float    |C8FFFF| 00 00 4F 43 | 207.000000 | x-coordinate of the center point of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x20 | float    |C8FFFF| 00 00 F6 42 | 123.000000 | y-coordinate (height) of the center point of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x24 | float    |C8FFFF| 98 7F CC C3 | -408.996826| z-coordinate of the center point of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x28 | float    |FFC8FF| 8C E3 38 3A | 0.000705   | facing of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x2C | float    |FFC8FF| 02 00 90 41 | 18.000004  | width of the doorframe }}&lt;br /&gt;
{{OBDtr | 0x30 | float    |FFC8FF| 00 00 F0 41 | 30.000000  | height of the doorframe }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=AKDA | prev=AKBP | next=AKEV | name=Door Frame Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:AKBP&amp;diff=45174</id>
		<title>OBD:AKBP</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:AKBP&amp;diff=45174"/>
		<updated>2025-05-12T11:07:48Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=AKBP | prev=AKBA | next=AKDA | name=BSP Node Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:akbp_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x00 | res_id   |FF0000| 01 50 02 00 | 592       | 00592-.AKBP }}&lt;br /&gt;
{{OBDtr | 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3         | level 3 }}&lt;br /&gt;
{{OBDtr | 0x08 | char[22] |00FF00| AD DE       | dead      | padding }}&lt;br /&gt;
{{OBDtr | 0x1E | uint16    |00FFFF| C4 06       | 1732      | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr | 0x00 | uint32hb  |FFC8C8| 00 00 00 00 |0, high bit| plane index (in the environment [[PLEA|plane array]], see [[OBD:AKEV|AKEV]]), reverse plane normal if set }}&lt;br /&gt;
{{OBDtr | 0x04 | uint32    |FFFFC8| 01 00 00 00 | 1         | back AKBP package number, -1 if none }}&lt;br /&gt;
{{OBDtr | 0x08 | uint32    |C8FFC8| FF FF FF FF | -1        | front AKBP package number, -1 if none }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AKBP contains one [[wikipedia:Binary_space_partitioning|BSP tree]] for each [[AKVA|BNV]] (the index of the root of the tree is stored in BNV). Such a tree is used to detect if a point is inside a BNV.&lt;br /&gt;
&lt;br /&gt;
It should be noted that for convex BNVs the BSP tree degenerates to a list, only concave BNVs (and there aren&#039;t many of them) need a &amp;quot;real&amp;quot; tree.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=AKBP | prev=AKBA | next=AKDA | name=BSP Node Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:AKBA&amp;diff=45173</id>
		<title>OBD:AKBA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:AKBA&amp;diff=45173"/>
		<updated>2025-05-12T11:07:35Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=AKBA | prev=AKAA | next=AKBP | name=Side Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:akba_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x00 | res_id   |FF0000| 01 4F 02 00 | 591      | 00591-.AKBA }}&lt;br /&gt;
{{OBDtr | 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3        | level 3 }}&lt;br /&gt;
{{OBDtr | 0x08 | char[20] |00FF00| AD DE       | dead     | padding }}&lt;br /&gt;
{{OBDtr | 0x1C | uint32    |00FFFF| B7 06 00 00 | 1719     | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr | 0x00 | uint32hb  |FFC8C8| 00 00 00 00 |0, hig bit| plane index for this &amp;quot;side&amp;quot; (see [[OBD:AKEV|AKEV]] / [[OBD:PLEA|PLEA]]); high bit flips the plane }}&lt;br /&gt;
{{OBDtr | 0x04 | uint32    |FFFFC8| 00 00 00 00 | 0        | [[OBD:AKAA|AKAA]] range start (adjacencies for this side) }}&lt;br /&gt;
{{OBDtr | 0x08 | uint32    |C8FFC8| 01 00 00 00 | 1        | [[OBD:AKAA|AKAA]] range end (adjacencies for this side) }}&lt;br /&gt;
{{OBDtr | 0x0C | uint32    |C8FFFF| 00 00 00 00 | 0        | ghost GQ start index; ignored }}&lt;br /&gt;
{{OBDtr | 0x10 | uint32    |FFC8FF| 01 00 00 00 | 1        | ghost GQ end index; ignored }}&lt;br /&gt;
{{OBDtr | 0x14 | uint32    |FFC800| 00 00 00 00 | 0        | BNV quad start index; ignored }}&lt;br /&gt;
{{OBDtr | 0x18 | uint32    |C800C8| 01 00 00 00 | 1        | BNV quad end index; ignored }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Plane&lt;br /&gt;
It appears that the plane is ignored by the engine. In particular if a side has adjacencies then it has ghost quads and any quad has an associated plane. Sometimes the ghost quads are inside the BNV (instead of being on the edge) and in that case the quad plane is different from the side plane.&lt;br /&gt;
&lt;br /&gt;
;[[OBD:AKAA|AKAA]] range&lt;br /&gt;
:These 2 fields make up a range of &amp;quot;adjacencies&amp;quot; (see [[OBD:AKAA|AKAA]]). If the fields are equal then the range is empty.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=AKBA | prev=AKAA | next=AKBP | name=Side Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:AKAA&amp;diff=45172</id>
		<title>OBD:AKAA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:AKAA&amp;diff=45172"/>
		<updated>2025-05-12T11:05:55Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=AKAA | prev=AITR | next=AKBA | name=Adjacency Array | family=Level |  align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:akaa_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x00 | res_id   |FF0000| 01 52 02 00 | 594   | 00594-.AKAA }}&lt;br /&gt;
{{OBDtr | 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3     | level 3 }}&lt;br /&gt;
{{OBDtr | 0x08 | char[20] |00FF00| AD DE       | dead  | padding }}&lt;br /&gt;
{{OBDtr | 0x1C | uint32    |00FFFF| B3 02 00 00 | 691   | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr | 0x00 | uint32    |FFC8C8| 01 00 00 00 | 1     | adjacent [[OBD:AKVA|AKVA]] element number }}&lt;br /&gt;
{{OBDtr | 0x04 | uint32    |FFFFC8| 88 91 00 00 | 34961 | [[OBD:AGQG|AGQG]] element number. These quads use either TXMPNONE or TXMPBLUEGRID02 textures and have &amp;quot;ghost&amp;quot;, &amp;quot;stairs up&amp;quot; or &amp;quot;stairs down&amp;quot; set. }}&lt;br /&gt;
{{OBDtr | 0x08 | uint32    |C8FFC8| 00 00 00 00 | 0     | flags; ignored; always 0 }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=AKAA | prev=AITR | next=AKBA | name=Adjacency Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:AITR&amp;diff=45171</id>
		<title>OBD:AITR</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:AITR&amp;diff=45171"/>
		<updated>2025-05-12T11:05:42Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=AITR | prev=AISA | next=AKAA | name=AI Script Trigger Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:aitr_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x00 | res_id   |FF0000| 01 F8 02 00 | 760      | 00760-level8_scripts.AITR }}&lt;br /&gt;
{{OBDtr | 0x04 | lev_id   |FFFF00| 01 00 00 10 | 8        | level 8 }}&lt;br /&gt;
{{OBDtr | 0x08 | char[22] |00FF00| 00 00       | dead     | padding }}&lt;br /&gt;
{{OBDtr | 0x1E | uint16    |00FFFF| 03 00       | 3        | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr | 0x00 | int16    |FFC8C8| 13 00       | 19       | ID }}&lt;br /&gt;
{{OBDtr | 0x02 | int16    |FFFFC8| 13 00       | 19       | flag ID }}&lt;br /&gt;
{{OBDtr | 0x04 | uint16    |C8FFC8| 01 00       | 1        | type (Script Trigger Type) }}&lt;br /&gt;
{{OBDtr | 0x06 | uint16    |C8FFFF| 06 00       | 6        | flags (Trigger Class Flags) }}&lt;br /&gt;
{{OBDtr | 0x08 | uint16    |FFC8FF| FF FF       | 65535       | team }}&lt;br /&gt;
{{OBDtr | 0x0A | uint16    |FFC800| 00 00       | 0        | ref restrict }}&lt;br /&gt;
{{OBDtr | 0x0C | float    |C800C8| 00 00 00 00 | 0.000000 | horizontal radius }}&lt;br /&gt;
{{OBDtr | 0x10 | float    |C87C64| 00 00 00 00 | 0.000000 | vertical radius }}&lt;br /&gt;
{{OBDtr2| 0x14 | char[64] |B0C3D4| unused                 | ref name }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is the only level, which contains some packages. The AITR files of the other levels are all zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=AITR | prev=AISA | next=AKAA | name=AI Script Trigger Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:AISA&amp;diff=45170</id>
		<title>OBD:AISA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:AISA&amp;diff=45170"/>
		<updated>2025-05-12T11:05:27Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=AISA | prev=AGQR | next=AITR | name=AI Character Setup Array | family=Level | onistuff=aisa | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:aisa_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x000 | res_id   |FF0000| 01 9C 02 00 | 668  | 00668-level3_scripts.AISA }}&lt;br /&gt;
{{OBDtr | 0x004 | lev_id   |FFFF00| 01 00 00 06 | 3    | level 3 }}&lt;br /&gt;
{{OBDtr | 0x008 | char[22] |00FF00| &amp;amp;nbsp;      | dead | padding }}&lt;br /&gt;
{{OBDtr | 0x01E | uint16    |00FFFF| 0D 00       | 13   | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr2| 0x000 | char[32] |FFC8C8| unused             | name of AISA character }}&lt;br /&gt;
{{OBDtr | 0x020 | uint16    |FFFFC8| 00 00       | 0    | ID of the character, which you can spawn with the script command [[chr_create]] }}&lt;br /&gt;
{{OBDtr | 0x022 | int16    |C8FFC8| 00 00       | 0    | flag where character is spawned; must be a valid flag ID (from the [[OBD:BINA/OBJC/FLAG|BINACJBOFlag]] collection) }}&lt;br /&gt;
{{OBDtr | 0x024 | uint16    |C8FFFF| 00 00       | 0    | flags; ignored }}&lt;br /&gt;
{{OBDtr | 0x026 | uint16    |FFC8FF| 00 00       | 0    | team ID (see [[CHAR]] for possible values) }}&lt;br /&gt;
{{OBDtr | 0x028 | link     |FFC800| 01 DF 03 00 | 991  | link to [[OBD:ONCC|00991-ONCCkonoko_generic]]; must be a valid ONCC; replaced with first available ONCC if missing }}&lt;br /&gt;
{{OBDtr2| 0x02C | char[32] |C87C64| unused             | variable, which is affected on game events; ignored  }}&lt;br /&gt;
{{OBDtr | 0x04C | uint32    |C800C8| 00 00 00 00 | 0    | script flags; ignored  }}&lt;br /&gt;
{{OBDtr2| 0x050 | char[32] |B0C3D4| intro              | script event called when character is created; see [[CHAR]] }}&lt;br /&gt;
{{OBDtr2| 0x070 | char[32] |E7CEA5| unused             | script event called when the character dies; see [[CHAR]]... }}&lt;br /&gt;
{{OBDtr2| 0x090 | char[32] |FFDDDD| unused             | script event called when the character first notices an enemy }}&lt;br /&gt;
{{OBDtr2| 0x0B0 | char[32] |64AAAA| unused             | script event called when the character is alarmed (group event)}}&lt;br /&gt;
{{OBDtr2| 0x0D0 | char[32] |EBEBEB| unused             | script event called when the character is hurt for the first time }}&lt;br /&gt;
{{OBDtr2| 0x0F0 | char[32] |8C8CCC| unused             | script event called when the health of the character reaches 1 for the first time }}&lt;br /&gt;
{{OBDtr2| 0x110 | char[32] |FF00C8| unused             | script event called when the character uses up its initial ammo clips or cells }}&lt;br /&gt;
{{OBDtr2| 0x130 | char[32] |F0F096| unused             | script event supposed to be called when the character can&#039;t pathfind }}&lt;br /&gt;
{{OBDtr | 0x150 | link     |00C864| 00 00 00 00 |unused| link to an [[OBD:ONWC|ONWC]] file }}&lt;br /&gt;
{{OBDtr | 0x154 | uint16    |00C8FF| 00 00       | 0    | weapon ammo (in %?) }}&lt;br /&gt;
{{OBDtr | 0x156 | uint16    |C80040| FF FF       | -1   | number of ammo(?) to drop; ignored  }}&lt;br /&gt;
{{OBDtr | 0x158 | uint16    |FFCD96| 00 00       | 0    | number of clips to drop; ignored  }}&lt;br /&gt;
{{OBDtr | 0x15A | uint16    |FFCD96| 00 00       | 0    | number of hypos to drop; ignored  }}&lt;br /&gt;
{{OBDtr | 0x15C | uint16    |C8C864| 00 00       | 0    | number of cells to drop; ignored  }}&lt;br /&gt;
{{OBDtr | 0x15E | char[2] |C8C864| 00 00         | 0    | padding }}&lt;br /&gt;
|}&lt;br /&gt;
;Player character&lt;br /&gt;
:If the index is 0, the character is spawned as a player character, stealing controls (but not focus) from the current player. Focus is transferred as well if the old player is deleted &#039;&#039;immediately before&#039;&#039; the new one is created.&lt;br /&gt;
;Automatic naming&lt;br /&gt;
:If the name field is left blank, the engine will generate an automatic name &amp;quot;ai_#&amp;quot;, where # is the runtime ID of the character (first empty slot in memory at the time of the spawning). The ID is not zero-padded: &amp;quot;ai_0, &amp;quot;ai_1&amp;quot;, ...&lt;br /&gt;
;Missing [[FLAG]] issue&lt;br /&gt;
:If the flag ID requested by [[chr_create]] is obsolete or otherwise unavailable, chr_create will fail with a message to the console.&lt;br /&gt;
;Missing [[ONCC]] issue&lt;br /&gt;
:Missing ONCCs are resolved by picking the first available ONCC (in ASCII order, i.e., &#039;&#039;&#039;SH_generic&#039;&#039;&#039; comes before &#039;&#039;&#039;barabus&#039;&#039;&#039;). In Vanilla Oni this only happens once (for AISA): &amp;quot;lab&amp;quot; scripts use &amp;lt;tt&amp;gt;chr_create 1004&amp;lt;/tt&amp;gt; in the bomber cutscene (for the cop who talks to Konoko on the radio): the missing ONCC TCL_2 is luckily resolved as the close-enough TCTF_lite_1. In the [[Anniversary Edition]], the custom ONCC Cop_generic was added to take care of this situation (both to prevent the Vanilla &amp;quot;lab&amp;quot; logic from resolving to &#039;&#039;&#039;CopfemA1&#039;&#039;&#039; and to give some screen time to TRBSTCL_2, which is present in Vanilla Oni, but somehow doesn&#039;t have a matching ONCC).&lt;br /&gt;
:If the eventually used ONCC is invalid (e.g., if it has a missing TRAC or if its ONCV is missing from ONVL), Oni will crash. This applies to [[CHAR]] a.k.a. [[ai2_spawn]], [[AISA]] a.k.a. [[chr_create]], and [[ai2_chump]] (hardcoded to spawn ONCCstriker_easy_1; in Vanilla Oni there are three levels where ai2_chump&#039;s ONCC is resolved due to a missing striker_easy_1: to CopfemA1 in &#039;&#039;&#039;state&#039;&#039;&#039; and &#039;&#039;&#039;tctf_II&#039;&#039;&#039;, and to TCTF_swat_blackops_1 in &#039;&#039;&#039;compound&#039;&#039;&#039;; in &#039;&#039;&#039;neuro&#039;&#039;&#039; the full set of Strikers is available, as well as comguys, the mad bomber, and Muro).&lt;br /&gt;
;Missing [[ONWC]] issue&lt;br /&gt;
:Some of the vanilla AISA entries contain a link to an invalid (obsolete) ONWC: two Strikers in &#039;&#039;&#039;tctf&#039;&#039;&#039; (in the cutscene where Barabas kidnaps Shinatama) have a link to ONWCp_rifle; there are eleven more AISA characters (not used in Vanilla scripts) who have links to ONWCautopistol, ONWCsmg, ONWCp_rifle and ONWCp_stream. The engine resolves such bad links by not giving any weapon to the character. (There are no valid ONWC links in Vanilla AISA, but providing a valid link in a modified AISA shows that the weapon field is interpreted by the engine, unlike other inventory fields which are ignored.)&lt;br /&gt;
;Inventory and script events.&lt;br /&gt;
:Since nearly all the inventory fields are ignored, AISA characters can&#039;t be created with inventory items, and so the &amp;quot;out of ammo&amp;quot; script function is irrelevant. The inventory can still be set with scripting (items that the character can use, not what they drop when killed). The &amp;quot;no path&amp;quot; function doesn&#039;t seem to work, neither does it seem to work for [[CHAR]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=AISA | prev=AGQR | next=AITR | name=AI Character Setup Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:AGQR&amp;diff=45169</id>
		<title>OBD:AGQR</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:AGQR&amp;diff=45169"/>
		<updated>2025-05-12T11:05:04Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=AGQR | prev=AGQG | next=AISA | name=Gunk Quad Render Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:agqr_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x00 | res_id  |FF0000| 01 4A 02 00 | 586  | 00586-.AGQR }}&lt;br /&gt;
{{OBDtr | 0x04 | lev_id  |FFFF00| 01 00 00 06 | 3    | level 3 }}&lt;br /&gt;
{{OBDtr | 0x08 | char[20]|00FF00| AD DE       | dead | padding }}&lt;br /&gt;
{{OBDtr | 0x1C | uint32   |00FFFF| 15 A8 00 00 | 35349| array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr | 0x00 | uint16   |FFC8C8| 66 00       | 102  | [[OBD:TXMA|TXMA]] element number }}&lt;br /&gt;
{{OBDtr | 0x02 | uint16 |FFFFC8| AD DE       | dead | alpha; unused; always the same; used at runtime }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35349 is the amount of gunk quads. Two faces (triangles) form a gunk quad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=AGQR | prev=AGQG | next=AISA | name=Gunk Quad Render Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:AGQG&amp;diff=45168</id>
		<title>OBD:AGQG</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:AGQG&amp;diff=45168"/>
		<updated>2025-05-12T11:04:50Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=AGQG | prev=AGQC | next=AGQR | name=Gunk Quad General Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:agqg_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x00 | res_id |FF0000| 01 49 02 00 | 585          | 00585-.AGQG }}&lt;br /&gt;
{{OBDtr | 0x04 | lev_id |FFFF00| 01 00 00 06 | 3            | level 3 }}&lt;br /&gt;
{{OBDtr | 0x08 |char[20]|00FF00| AD DE       | dead         | padding }}&lt;br /&gt;
{{OBDtr | 0x1C | uint32  |00FFFF| 15 A8 00 00 | 35349        | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr | 0x00 | uint32  |FFC8C8| 00 00 00 00 | 0            | [[OBD:PNTA|PNTA]] element for 1st vertex }}&lt;br /&gt;
{{OBDtr | 0x04 | uint32  |FFC8C8| 01 00 00 00 | 1            | [[OBD:PNTA|PNTA]] element for 2nd vertex }}&lt;br /&gt;
{{OBDtr | 0x08 | uint32  |FFC8C8| 02 00 00 00 | 2            | [[OBD:PNTA|PNTA]] element for 3rd vertex }}&lt;br /&gt;
{{OBDtr | 0x0C | uint32  |FFC8C8| 03 00 00 00 | 3            | [[OBD:PNTA|PNTA]] element for 4th vertex }}&lt;br /&gt;
{{OBDtr | 0x10 | uint32  |FFFFC8| F5 0F 00 00 | 4085         | [[OBD:TXCA|TXCA]] element for 1st vertex }}&lt;br /&gt;
{{OBDtr | 0x14 | uint32  |FFFFC8| F3 0F 00 00 | 4083         | [[OBD:TXCA|TXCA]] element for 2nd vertex }}&lt;br /&gt;
{{OBDtr | 0x18 | uint32  |FFFFC8| F4 0F 00 00 | 4084         | [[OBD:TXCA|TXCA]] element for 3rd vertex }}&lt;br /&gt;
{{OBDtr | 0x1C | uint32  |FFFFC8| F6 0F 00 00 | 4086         | [[OBD:TXCA|TXCA]] element for 4th vertex }}&lt;br /&gt;
{{OBDtr | 0x20 | color  |C8FFC8| 00 00 00 00 | 0, 0, 0, 0   | byte-swapped ARGB color for 1st vertex }}&lt;br /&gt;
{{OBDtr | 0x24 | color  |C8FFC8| 00 00 00 00 | 0, 0, 0, 0   | byte-swapped ARGB color for 2nd vertex }}&lt;br /&gt;
{{OBDtr | 0x28 | color  |C8FFC8| 02 07 09 00 | 2, 7, 9, 0   | byte-swapped ARGB color for 3rd vertex }}&lt;br /&gt;
{{OBDtr | 0x2C | color  |C8FFC8| 06 15 1E 00 | 6, 21, 30, 0 | byte-swapped ARGB color for 4th vertex }}&lt;br /&gt;
{{OBDtr | 0x30 |bitset32|C8FFFF| 00 00 08 02 | 0, 0, 8, 2   | flags; used values:&lt;br /&gt;
:0x&#039;&#039;&#039;01&#039;&#039;&#039; 00 00 00 - door frame (invisible quad that uses the TXMP_DOOR_FRAME texture)&lt;br /&gt;
:0x&#039;&#039;&#039;02&#039;&#039;&#039; 00 00 00 - ghost (pathfinding volume separator, see [[OBD:AKVA|AKVA]] etc)&lt;br /&gt;
:0x&#039;&#039;&#039;04&#039;&#039;&#039; 00 00 00 - stairs up&lt;br /&gt;
:0x&#039;&#039;&#039;08&#039;&#039;&#039; 00 00 00 - stairs down&lt;br /&gt;
:0x&#039;&#039;&#039;10&#039;&#039;&#039; 00 00 00 - stairs&lt;br /&gt;
:0x&#039;&#039;&#039;20&#039;&#039;&#039; 00 00 00 - (runtime only) marks quads as [[Jello-cam|jelloed]]; never used in file data&lt;br /&gt;
:0x&#039;&#039;&#039;40&#039;&#039;&#039; 00 00 00 - triangle (see below)&lt;br /&gt;
:0x&#039;&#039;&#039;80&#039;&#039;&#039; 00 00 00 - transparency (if 0 then alpha is ignored, color is just RGB shading)&lt;br /&gt;
:0x00 01 00 00 - unused (&amp;quot;draw flash&amp;quot;)&lt;br /&gt;
:0x00 &#039;&#039;&#039;02&#039;&#039;&#039; 00 00 - two-sided&lt;br /&gt;
:0x00 04 00 00 - unused (&amp;quot;trigger&amp;quot;)&lt;br /&gt;
:0x00 &#039;&#039;&#039;08&#039;&#039;&#039; 00 00 - no collision&lt;br /&gt;
:0x00 10 00 00 - unused (&amp;quot;flash state&amp;quot;)&lt;br /&gt;
:0x00 &#039;&#039;&#039;20&#039;&#039;&#039; 00 00 - invisible&lt;br /&gt;
:0x00 &#039;&#039;&#039;40&#039;&#039;&#039; 00 00 - no object collision&lt;br /&gt;
:0x00 &#039;&#039;&#039;80&#039;&#039;&#039; 00 00 - no character collision&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;01&#039;&#039;&#039; 00 - no occlusion&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;02&#039;&#039;&#039; 00 - danger&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;04&#039;&#039;&#039; 00 - (runtime only) marks quads hidden with [[env_show]]; never used in file data&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;08&#039;&#039;&#039; 00 - vertical collision: slope &amp;lt; 70°&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;10&#039;&#039;&#039; 00 - horizontal collision: slope &amp;gt; 70°&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;20&#039;&#039;&#039; 00 - unused, runtime only (&amp;quot;breakable&amp;quot;)&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;40&#039;&#039;&#039; 00 - grid ignore&lt;br /&gt;
:0x00 00 &#039;&#039;&#039;80&#039;&#039;&#039; 00 - no decal&lt;br /&gt;
:0x00 00 00 &#039;&#039;&#039;01&#039;&#039;&#039; - furniture&lt;br /&gt;
:0x00 00 00 &#039;&#039;&#039;02&#039;&#039;&#039; - projection plan bit 0, see below&lt;br /&gt;
:0x00 00 00 &#039;&#039;&#039;04&#039;&#039;&#039; - projection plan bit 1, see below&lt;br /&gt;
:0x00 00 00 &#039;&#039;&#039;08&#039;&#039;&#039; - sound-transparent&lt;br /&gt;
:0x00 00 00 &#039;&#039;&#039;10&#039;&#039;&#039; - impassable&lt;br /&gt;
}}&lt;br /&gt;
{{OBDtr | 0x34 | uint32  |FFC8FF| FF FF FF FF | -1           | object ID and type to which this quad belongs (see [[ONOA]] for details); -1 if it does not belong to an object }}&lt;br /&gt;
{{OBDtrBK|Data fields exclusive to the PS2 implementation (4 extra bytes at the end of each AGQG array element)}}&lt;br /&gt;
{{OBDtr | 0x38 | int16  |FFC8FF| 00 80 | 32768 (high bit set) | unknown; always the same? }}&lt;br /&gt;
{{OBDtr | 0x3A | int16  |FFC8FF| 00 80 | 32768 (high bit set) | unknown; always the same? }}&lt;br /&gt;
|}&lt;br /&gt;
;Triangles&lt;br /&gt;
: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.&lt;br /&gt;
&lt;br /&gt;
;Ghost, Stairs up, Stairs down&lt;br /&gt;
: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 &amp;quot;debug&amp;quot; level files.&lt;br /&gt;
&lt;br /&gt;
:There are a couple of ghost quads that aren&#039;t referenced from [[AKAA]]. It&#039;s likely that those quads are useless.&lt;br /&gt;
&lt;br /&gt;
;Door frame&lt;br /&gt;
:This appears to be another type of &amp;quot;ghost&amp;quot; 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&#039;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.&lt;br /&gt;
&lt;br /&gt;
;Stairs&lt;br /&gt;
: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).&lt;br /&gt;
&lt;br /&gt;
;No occlusion&lt;br /&gt;
: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.&lt;br /&gt;
&lt;br /&gt;
;Projection plane flags&lt;br /&gt;
:These 2 flags can be 00, 01, 10 and 11. That means the values 0,1,2 and 3 which have the following meanings:&lt;br /&gt;
:*0 - No projection plane specified. One can be computed if needed. Never used in files, may slow down the game if used.&lt;br /&gt;
:*1 - Project quad on XY plane.&lt;br /&gt;
:*2 - Project quad on XZ plane.&lt;br /&gt;
:*3 - Project quad on YZ plane.&lt;br /&gt;
: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).&lt;br /&gt;
&lt;br /&gt;
;Grid ignore&lt;br /&gt;
:Appears to be unused. Its likely purpose is to mark quads that don&#039;t count as obstacles in the pathfinding grid.&lt;br /&gt;
&lt;br /&gt;
;Danger&lt;br /&gt;
:Appears to be unused. Its likely purpose is to create danger areas in the pathfinding grids. Usually there&#039;s a trigger volume nearby that hurts/kills the character. This quads are always invisible.&lt;br /&gt;
&lt;br /&gt;
;Invisible&lt;br /&gt;
:Invisible quads have a couple of different uses:&lt;br /&gt;
:* block player access to some parts of the environment&lt;br /&gt;
:* stairs ramp&lt;br /&gt;
:* collision geometry (used by some &amp;quot;complex&amp;quot; furniture)&lt;br /&gt;
:* danger quads (see above)&lt;br /&gt;
:* some other apparently useless quads&lt;br /&gt;
&lt;br /&gt;
;Furniture&lt;br /&gt;
:Set for all quads that belong to a furniture object. It doesn&#039;t appear to be used. It is also redundant since all the furniture quads have an object id.&lt;br /&gt;
&lt;br /&gt;
;No decal&lt;br /&gt;
:Prevents the creation of decals on the quad. Set for door quads because the decals would disappear when the door opens. That&#039;s why shooting a door doesn&#039;t leave a mark.&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=AGQG | prev=AGQC | next=AGQR | name=Gunk Quad General Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:AGQC&amp;diff=45167</id>
		<title>OBD:AGQC</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:AGQC&amp;diff=45167"/>
		<updated>2025-05-12T11:04:32Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=AGQC | prev=AGDB | next=AGQG | name=Gunk Quad Collision Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:agqc_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x00 | res_id   |FF0000| 01 4B 02 00 | 587             | 00587-.AGQC }}&lt;br /&gt;
{{OBDtr | 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3               | level 3 }}&lt;br /&gt;
{{OBDtr | 0x08 | char[20] |00FF00| AD DE       | dead            | padding }}&lt;br /&gt;
{{OBDtr | 0x1C | uint32    |00FFFF| 15 A8 00 00 | 35349           | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr | 0x00 | uint32hb  |FFC8C8| 22 28 00 80 | 10274, high bit | [[OBD:PLEA|PLEA]] element number; high bit set means that the normal of the plane must be reversed }}&lt;br /&gt;
{{OBDtr | 0x04 | float    |FFFFC8| C8 9F A0 C4 | -1284.993164    | max. neg. x-position of the gunk quad }}&lt;br /&gt;
{{OBDtr | 0x08 | float    |FFFFC8| 00 14 5C C1 | -13.754882      | max. neg. y-position (height) of the gunk quad }}&lt;br /&gt;
{{OBDtr | 0x0C | float    |FFFFC8| 18 92 F8 C4 | -1988.565429    | max. neg. z-position of the gunk quad }}&lt;br /&gt;
{{OBDtr | 0x10 | float    |C8FFC8| 60 CA 94 C4 | -1190.324218    | max. pos. x-position of the gunk quad }}&lt;br /&gt;
{{OBDtr | 0x14 | float    |C8FFC8| 00 40 AB BF | -1.337890       | max. pos. y-position (height) of the gunk quad }}&lt;br /&gt;
{{OBDtr | 0x18 | float    |C8FFC8| 60 5D E7 C4 | -1850.917968    | max. pos. z-position of the gunk quad }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
35349 is the amount of gunk quads. Two faces (triangles) form a gunk quad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=AGQC | prev=AGDB | next=AGQG | name=Gunk Quad Collision Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:ABNA&amp;diff=45166</id>
		<title>OBD:ABNA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:ABNA&amp;diff=45166"/>
		<updated>2025-05-12T11:04:09Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=ABNA | prev=WPge | next=AGDB | name=BSP Tree Node Array | family=Level | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:abna_a.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr | 0x00 | res_id   |FF0000| 01 51 02 00 | 593           | 00593-.ABNA }}&lt;br /&gt;
{{OBDtr | 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3             | level 3 }}&lt;br /&gt;
{{OBDtr | 0x08 | char[20] |00FF00| AD DE       | dead          | padding }}&lt;br /&gt;
{{OBDtr | 0x1C | uint32    |00FFFF| E8 03 00 00 | 1000          | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr | 0x00 | uint32    |FFC8C8| 68 89 00 00 | 35176         | [[OBD:AGQG|AGQG]] element number }}&lt;br /&gt;
{{OBDtr | 0x04 | uint32hb  |FFFFC8| 73 00 00 00 | 115, high bit | [[OBD:PLEA|PLEA]] element number; if high bit set the plane normal must be reversed }}&lt;br /&gt;
{{OBDtr | 0x08 | uint32    |C8FFC8| 01 00 00 00 | 1             | front ABNA child package index; -1 if there is none }}&lt;br /&gt;
{{OBDtr | 0x0C | uint32    |C8FFFF| DB 01 00 00 | 475           | back ABNA child package index; -1 if there is none }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=ABNA | prev=WPge | next=AGDB | name=BSP Tree Node Array | family=Level}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
	<entry>
		<id>https://wiki.oni2.net/w/index.php?title=OBD:M3GA&amp;diff=45165</id>
		<title>OBD:M3GA</title>
		<link rel="alternate" type="text/html" href="https://wiki.oni2.net/w/index.php?title=OBD:M3GA&amp;diff=45165"/>
		<updated>2025-05-12T11:02:42Z</updated>

		<summary type="html">&lt;p&gt;Mai X: ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{OBD_File_Header | type=M3GA | prev=KeyI | next=M3GM | name=Geometry Array | family=General | align=center}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[image:m3ga_all.gif]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Table}}&lt;br /&gt;
{{OBDth}}&lt;br /&gt;
{{OBDtr| 0x00 | res_id   |FF0000| 01 56 02 00 | 1532  | 00598-.M3GA }}&lt;br /&gt;
{{OBDtr| 0x04 | lev_id   |FFFF00| 01 00 00 06 | 3     | level 3 }}&lt;br /&gt;
{{OBDtr| 0x08 | char[20] |00FF00| AD DE       | dead  | padding }}&lt;br /&gt;
{{OBDtr| 0x1C | uint32    |00FFFF| 01 00 00 00 | 1     | array size }}&lt;br /&gt;
{{OBDtrBK}}&lt;br /&gt;
{{OBDtr| 0x00 | link     |FFC8C8| 01 D7 00 00 | 215   | link to [[OBD:M3GM|00215-door_1_0.M3GM]] }}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to attach multiple geometries to an [[OBD:OBOA|object]]. This allows an object to use more than one texture.&lt;br /&gt;
&lt;br /&gt;
{{OBD_File_Footer | type=M3GA | prev=KeyI | next=M3GM | name=Geometry Array | family=General}}&lt;br /&gt;
&lt;br /&gt;
{{OBD}}&lt;/div&gt;</summary>
		<author><name>Mai X</name></author>
	</entry>
</feed>