This community is the manifested pain of Herodotus...
Idea
To convert an extracted ONLV into a new project file you need even more in-depth knowledge about the file structure than for simply building a level project file from scratch.
Therefore, it would be nice if we could provide a tool to automate necessary work as much as possible.
One-click operation:
- Level extraction.
- Post-edit dae files to make them compatible with blender. The onisplit arg -blender seems to work for character import/export only.
- Conversion of ONLV into an actual project file.
- Recycling of physics and locklights.
- Preserving as much vertex shading as possible by preferring DAE over CJBO linked meshes.
- BSL analysis to create FILM and cut scene sections?
AE package
mods.oni2.net
|
+-- LevelRecycler.zip
|
+-- #####packageName
|
+-- Mod_Info.cfg
+-- plain
|
+--win_only
|
+--Tools
|
+-- LevelRecycler
|
+-- icon.png (32 x 32 px)
+-- LevelRecycler.exe
Mod_Info.cfg
AEInstallVersion -> 2.0 NameOfMod -> Level Recycler Creator -> ModVersion -> Readme -> ExeName -> Tools/LevelRecycler/LevelRecycler.exe WorkingDir -> Exe IconName -> Tools/LevelRecycler/icon.png
Startup
Oni
|
+-- AE
|
+-- Tools
| |
| +-- OniSplit.exe
| +-- LevelRecycler
| |
| +-- icon.png
| +-- LevelRecycler.exe
|
+-- GameDataFolder
|
+-- level0_Final.dat
+-- level0_Final.raw
+-- level1_Final.dat
+-- level1_Final.raw
+-- ...
+-- IGMD
|
+-- BSL script folders
The "on load" event of the LevelRecycler should automatically update an overview of existing levels:
- Level0_Final.dat stores all ONLD with more meaningful level names.
- Each non-zero level DAT-archive stores an ONLV file.
- With those extracted files, a list for modders can be built to easily identify the level they want to recycle.
// shortened paths
OniSplit -export:ONLD* ONLD level0_Final.dat
OniSplit -extract:xml ONLD ONLD/*.oni
for each non-zero DAT
OniSplit -export:ONLV* ONLV ....dat
OniSplit -extract:xml ONLV ONLV/*.oni
dat file name, BSL script folder, level name ---------------------------------------------- level1_Final.dat, ONLV<Name>, ONLD<DisplayName>
As soon as the modder has selected the preferred level, it should be a one-click operation to carry out the recycling.
Less write operations
With each onload event the ONLV and ONLD would get extracted. To reduce somewhat the amount of write operations an xml cache file could be used to feed the program's overview table. If the DAT files are older then no new extractions are done.
Blender add-ons
Import
- Blender-v5-DAE-Importer-Add-on (broken but fixable)
- At first glance, positions of individual objects from collective files like lab_furn.dae are all set to 0, 0, 0. So, until that is fixed too, we should only support Blender 4.x. As for April 2026, the latest LTS blender version is 4.5.8 which also supports drag and drop of dae. DnD was for long time an unsupported feature.
- BetterCollada (untested)
Export
GenAI wrote dae addons to import and export dae. Unexpectedly, the problem with technique tag and missing attributes seems to be go by now. Works right now, but onisplit compatibility remains untested.
CLI support?
To establish full modding support, blender needs to be able to load dae when called from CLI. Untested. This probably requires source code changes as we don’t simply want to call new blender instances with each import. In order to keep up full modding support one would need to always fork ans update the new blender versions.
XSI addon replacement?
For this the implementation of displaying custom values (from oni xmls) must be tested first.
Oni asset panel?
If this is also possible, there is no more reason left why Blender should not become the community’s editor.
Reviving demo level Alpha Helix?
History
When you work on a level, you need to constantly test it ingame so possible errors are caught as early as possible. For that reason the tool around Helix had a plugin-based workflow. An AE package takes much longer to install and the AEI doesn't start Oni automatically.
To not confuse novice modders with two different workflows, the new Helix should be package-based. The advantage would be that the package structure is ready from first second and interdependencies can better be dealt with during level development.
Dev notes
Scaling
Round-tripping the old helix through Blender caused an upscaling.
Old code:
<unit meter="0.1" name="decimetre"></unit> <up_axis>Y_UP</up_axis>
New code:
<unit name="meter" meter="1"/> <up_axis>Z_UP</up_axis>
The scaling can be reverted to normal by setting meter value.
New code:
<unit name="meter" meter="0.1"/>
Up axis
A different up axis matters for character development. For levels, it was not yet testet.
Gunk flag textures
Based on previous tests, collision boxes seem to need an exception rule in the master file.
So, OFGA imports should result in uneditable proxies (changes in position and rotation allowed only) and then create exception rules. To surpass the limit of original OFGA, you either need to create a new object class as shared resource or incorporate it into the AKEV core geometry. For special texture treatment, you would still need an exception rule.