User talk:Neo/Archive3

From OniGalore
< User talk:Neo
Revision as of 15:16, 7 May 2023 by Iritscen (talk | contribs) (marked dead links)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Neo, if you have time, can you look at this thread: Loser has developed a wall collision particle that works on the retail and demo PC version. However, when I tried it on the Mac, it did not work.


EdT 20:59, 16 June 2008 (CEST)

I'll take a look, it doesn't work for me either.

PS: Is there anything interesting on this page to be saved or I can delete all the content?


Thanks for looking at it. The concept of Loser's wall collision is cool

I think that the content regarding the various versions of OniSplit be moved to the talk page Talk:OniSplit The current stuff on that page can be deleted.

As for the rest of the stuff on your talk page, its up to you to keep or delete :-)

EdT 22:47, 16 June 2008 (CEST)

I tried again the wall collision stuff and it worked. First time when I tried I was using the wrong ONCC.

I'm not aware of any difference between Mac exe and PC exe in this regard. What I know is that there can be at most 16 particles attached by an animation but from what I've seen those animations only attach 3 so there is no problem.

I noticed that the message you are seeing is something like

 no particle found for anim##; particle ##

and Loser thinks this is PAR3 related. It's not, this is displayed when it doesn't find the particle in ONCP.


It was all my fault. When I tested it I only used the striker_easy class ONCC, since I was testing in level 1. However, I was playing the game on the HARD level, so it was using the harder variants which I did not update. That's why I was getting the errors. Once I installed all of Loser's modified ONCCs, his wall collision feature worked.

Sorry to have bothered you on this matter.

EdT 01:35, 18 June 2008 (CEST)

Sorry to bother you. I want to add some more characters to level 19, but I'm not sure how to write the hex number correctly, since it is 5 digits.

In the BINACJBOCharacter.oni for level 19 at offset 0x68 currently its 8CDC, I want to add 17 more CHAR data (x2464) so doing the math xDC8C + x2464 = x100F0.

What is the correct way to write x100F0 in little endian at offset 0x68?

Of course, I'll have to make a similar change for 84DC offset xC4.

It will be great once/if we're able to export/import BINACJBOCharacter.oni as .xml files!

Many thanks.

EdT 06:54, 20 June 2008 (CEST)

I'm not sure what's supposed to be at 0x68, maybe you mean 0x88 (where the size of the raw/sep part is)?

Anyway 0xA1B1C1D1 is stored as:

  • A1 B1 C1 D1 - big endian (bytes are stored in the same order)
  • D1 C1 B1 A1 - little endian (bytes are stored in reverse order)

So 0x100F0 aka 0x000100F0 stored as little endian is F0 00 01 00.

PS: I'm almost done with OBJC export. Hopefully I'll do the import soon too.


I am sorry to bother, but this can help to make h2w system look better. When character collides with wall, what REALLY collide ??? For me it seems that for char->wall collision there is some invisible bounding box. Where is this bounding box, if you know (or correct me if I am wrong). How can I change it? I ask because for me (it is my guess in next sentence, nothing proven ) it seems that this "bounding box" looks like invisible sphere which is around pelvis bone. That is why you can fall and stick your torso/head/legs into next room. Engine ignores bones in char->wall coll. Is this correct? + please answer if you know how to change it. Thanks a lot in any case

P.S.:Just a curious question, no explanation needed: I know that AI2 powered characters can push away weapons which are on ground. Can it be (from engine-possibilities point of view) that in ONI we should have movable furniture (objects which can be pushed by chars)?

--Loser 11:34, 20 June 2008 (CEST)

Umm... many questions, time for a brain dump :)

Character - Wall collision
this is always sphere tree-quad collision. You probably know that the sphere tree can be seen with "chr_debug_sphere=1". One thing to note about that sphere tree is that it always "stays up" (even when the character is fallen). That's why fallen characters pass through walls, their body gets outside the sphere when that happens.
As for changing the radius of that sphere tree: it may be possible but it won't solve anything.
Character - Floor collision
characters also have a special function to detect floor collision which checks if a 3x3 quad intersects the floor. This is done to avoid "strange" sinking when the sphere's lowest point goes outside the floor. This is the probable cause why sometimes fallen characters hang on an edge (their 3x3 quad still intersects the floor) or fall of the edge even if their feet or head are still on the floor (the 3x3 quad is too small to cover the feet and head when the character is fallen).
Particle - Wall collision
this is always point-quad collision (the point is the position of the particle)
Particle - Object collision (where object is anything with a physics context that supports collision
characters, OBOA objects, powerups, weapons)
this can be sphere-obbox or sphere-sphere collision depending on what the object has (obbox or sphere tree). The radius of the particle sphere is taken from Collision Radius property of the particle class. It can be 0 and then the collision degenerates to point-obbox/point-sphere collision.
Environment collision (general)
The engine can only do point-quad and spheretree-quad collision detection.
Object collision (general)
All objects (that have a physics context) have a sphere tree attached to them and some objects created through OBOA also have an obbox.
Moveable furniture
Yes and no. It can be done to some extent using OBOA.
Basically an OBOA object can be pushed if it's not animated (no OBAN link) and it has "physics type" 2 or 4 (I don't know what's the difference).
What doesn't work:
  • characters fall through objects (the character-floor collision function does not see objects)
  • since the environment only supports sphere-quad collision you tipically cannot push an object very close to the wall (unless of course the object itself is a sphere or close enough to one)
  • objects can fall but because of sphere-quad collision detection they'll get stuck somewhere above the floor
  • an object can fall on another object but a third object will fall through both of them; in general multiple object interaction is buggy
  • if I remember correctly there is 128 physics context limit. That means the number of active characters + objects + powerups and whatever else needs a physics context is limited to 128. Anyway it will very likely crawl before you reach that limit.


Thank you, now I understand, I need to add leading zeros to the result. Also, a user at OCF asked if it was possible to do division and multiplication in BSL, is it possible?

I look forward to trying out the OBJC export.


You can try this (|_v0.9.18|, dead link) beta for OBJC export. Mostly works as far as I know except that the resulting XML for MELE kind of sucks.


I got this error when extracting BINACJBOMelee Profile:

 System.NotImplementedException: Argument value is System.Single[]
 at System.Xml.XmlWriter.WriteValue (System.Object value) [0x00000] 
 at Oni.XmlExporter.Oni.Metadata.IMetaTypeVisitor.VisitVector3 (Oni.Metadata.MetaVector3 type) [0x00000] 
 at Oni.Metadata.MetaVector3.Accept (IMetaTypeVisitor visitor) [0x00000] 
 at Oni.XmlExporter.WriteFields (Oni.Metadata.Field[] fields) [0x00000] 
 at Oni.XmlExporter.Oni.Metadata.IMetaTypeVisitor.VisitStruct (Oni.Metadata.MetaStruct type) [0x00000] 
 at Oni.Metadata.MetaStruct.Accept (IMetaTypeVisitor visitor) [0x00000] 
 at Oni.Objects.CollectionExporter.ExportInstance (Oni.InstanceDescriptor descriptor) [0x00000] 
 at Oni.XmlExporter.ExportInstance (Oni.InstanceDescriptor descriptor) [0x00000] 
 at Oni.Exporter.ExportInstanceList (System.Collections.Generic.List`1 descriptors) [0x00000] 
 at Oni.Exporter.Export (Oni.FileManager fileManager, System.String sourceFilePath, System.String filter) [0x00000] 
 at Oni.Program.ExtractXml (System.String[] args) [0x00000] 
 at Oni.Program.Main (System.String[] args) [0x00000]  (1)

Also the .xml file looks like this:

 <?xml version="1.0" encoding="utf-8"?>
 <ObjectCollection version="">
   <Object Id="630" Type="MELE">
           <Position />


Beta2 (|_v0.9.18|, dead link)


Yes!!!! Thanks


Beta3 (|_v0.9.18|, dead link)

Import done. You should be able to create BINACJBO*.oni files from xml files.


Wonderful. Now my scripting can continue. Good job Neo.

Gumby 20:07, 21 June 2008 (CEST)

I got this error, I exported BINACJBOCharacter.oni from level 3 and then imported again with no changes:

 System.ArgumentException: Specified type 'System.Single[]' is not supported.
 at System.Xml.XmlReader.ValueAs (System.String text, System.Type type, IXmlNamespaceResolver resolver) [0x00000] 
 at System.Xml.XmlReader.ReadElementContentAs (System.Type type, IXmlNamespaceResolver resolver) [0x00000] 
 at Oni.Xml.RawXmlImporter.Oni.Metadata.IMetaTypeVisitor.VisitVector3 (Oni.Metadata.MetaVector3 type) [0x00000] 
 at Oni.Metadata.MetaVector3.Accept (IMetaTypeVisitor visitor) [0x00000] 
 at Oni.Xml.RawXmlImporter.ReadFields (Oni.Metadata.Field[] fields) [0x00000] 
 at Oni.Xml.RawXmlImporter.Oni.Metadata.IMetaTypeVisitor.VisitStruct (Oni.Metadata.MetaStruct type) [0x00000] 
 at Oni.Metadata.MetaStruct.Accept (IMetaTypeVisitor visitor) [0x00000] 
 at Oni.Xml.ObjcXmlImporter.ReadObject () [0x00000] 
 at Oni.Xml.ObjcXmlImporter.Import () [0x00000] 
 at Oni.Xml.ObjcXmlImporter.Import (System.Xml.XmlReader reader) [0x00000] 
 at Oni.Xml.XmlImporter.ReadObjectCollection () [0x00000] 
 at Oni.Xml.XmlImporter.Import (System.String filePath, System.String outputDirPath) [0x00000] 
 at Oni.Program.CreateFromXml (System.String[] args) [0x00000] 
 at Oni.Program.Main (System.String[] args) [0x00000]  (1)


Beta4 (|_v0.9.18|, dead link)

Oh boy, were Mono developers lazy or not... :)


Thank you! BINACJBOCharacter.oni works fine, now to take a look at the melee profile file...


The melee profile is much more understandable. The moves are clearly identified. So I assume, now we will be able to create a new melee profile or at the very least add new techniques to an existing profile.

Again, THANK YOU on your awesome work on OniSplit.

EdT 06:17, 22 June 2008 (CEST)

2 notes about melee:

  • I've yet to make move types to show up as names instead of numbers. Remebering all those is not fun.
  • The original melee files contain what appears to be orphaned moves. Since currently moves are exported as children of techniques the orphaned moves are not exported. I don't think those moves are used by the engine but if someone knows otherwise I'll see what can be done to export them too.

Other stuff:

  • The general xml export was updated to export names instead of number for several enum and flags fields. For example the class of a dialog item in WMDD was previously exported as a number but now it's a string like Button, Edit etc. Flags fields are exported as a list of names (names separated by whitespace) like in this WMDD state field:
  <State>Visible Disabled</State>

This simplifies editing but currently there is now way to discover what names are available (unless you take a look at the source code :)). I'll try to make OniSplit display such a list as part of the help or something.


Hey Neo, do you have any idea what the flag "Boss" does?

Gumby 18:02, 22 June 2008 (CEST)

Not sure. It mai be connected to ai2_boss_battle script variable. And I'm not sure those flags are 100% correct, it looks to me that Boss/NoAutoDrop/Omniscient are mixed up.


Hello again. I am thinking of writing the Windows GUI for Onisplit. What scripting language would you suggest I write it in?

Gumby 02:55, 23 June 2008 (CEST)

Hmm... the only scripting language to do a Windows GUI that comes to mind is Tcl/Tk but you really don't want to use that :). There are Perl/Python/Ruby etc. implementations for Windows but I have no idea if they can be used to make a GUI. It's likely that you'll have to use one of the "usual" languages: C/C++/C#/VB/Java/Delphi...

Maybe I'll do a GUI one day but it's not on my priority list, I'm more interested in making importers/exporters for now.


  the only scripting language to do a Windows GUI that comes to mind is Tcl/Tk but you really don't want to use that :)

You can also try AutoIt3:

It's easy to create a GUI with both of them, but AutoIt3 can't work with binary files, only text files (as far as I know). And in case of tcl/tk: It's a pain to install it. I tried and failed.

Ssg 11:44, 23 June 2008 (CEST)

I've worked with AutoIt3 before and I would recommend it. The GUI creation functions are both powerful and easy to use. It can work with binary files using:

FileOpen("filename", 16)

If you need any help with AutoIt post a message on my talk page. rossy 12:55, 23 June 2008 (CEST)

Why would I want to open binary files? O_o. For detecting the type of .oni file I give it? I have not worked with AutoIt3 before, but it doesn't look too hard, and I'm sure my conglamerated knowledge of random scripting languages will help me...

Gumby 16:57, 23 June 2008 (CEST) (dead link)

Look, its a GUI! That doesn't do anything...

...and needs properly aligned and formatted...:D

Gumby 02:23, 24 June 2008 (CEST)

One more beta for OBJC: Beta 5 (|_v0.9.18|, dead link).

Fixed character flags and added move type names and parameters names to melee (instead of numbers and Param0, Param1 etc.).


This makes reading the melee much easier. I wish I had some time to play around with making a new melee profile.

Is this a bug or just an error in the original code. In the NINJA_Easy profile I found this technique:

<Name>Back Kick</Name>
<Flags />
<Position Type="CloseBack" MinRunInDist="0" MaxRunInDist="10" ToleranceRange="4.5" />
<Attack Type="PB" />

Even though it says Back Kick, the attack is Punch Back.


The wiki has some pages about various melee profiles and it contains the same thing: OBD:BINA/OBJC/MELE/NINJA. So either it is just a mistake in the melee profile or the move type wiki tables are wrong, I'll have to check with the executable.


Hey. I got a bit of the Windows GUI done. It wasn't too hard...and tell me if the icons arent there (either for the explorer icon, or the one in the top right corner)


Yes, the icons are OK. But is it supposed to do anything? That recombine button appears to have no effect.


I was looking at the attack moves on this page: OBD:BINA/OBJC/MELE/MoveList And I gave one a try, Attack Move #28 KF KF, but got an error in OniSplit.

Edit: Cleaning up.

EdT 03:56, 30 June 2008 (CEST)

It's KF_KF, I cannot have spaces in those names.


Thanks, now do you think the names of the moves on the MoveList page should match the ones in OniSplit? For example on the MoveList page it has Throw-P Behind Disarm but OniSplit has it as P_BehindDisarm. There are many differences between the MoveList and OniSplit syntax.

I'm sure others will have the same issue as they start modifying the melee profile.

EdT 16:16, 30 June 2008 (CEST)

Well, spaces and - are not allowed in there. As for the Throw- prefix I just removed because it's kind of dumb to write <Throw Type="Throw_P_BehindDisarn".../>.

The best I can do is to make sure that space is consistenly converted to _ so instead of RunLeft you get Run_Left which is closer to that table.


I think we should change the syntax on the wiki to match OniSplit. Like for example change the wiki entry Throw-P Behind Disarm to P_BehindDisarm. The reason for this is when we want to modify the melee profile, we will look at the wiki and use the syntax there and put it in OniSplit, then we get errors. But if the wiki has the syntax the OniSplit will use, that will eliminate the problem.

Is there a way to get the moves syntax from OniSplit? Then I can start updating the wiki.

EdT 22:48, 30 June 2008 (CEST)

OniSplit 0.9.18 (|, dead link)

I added a "-help enums" option which dumps a list with all enums and flags used in XML files. Since otherwise it seems to work fine I dropped the "beta" label.

Feel free to update the wiki if you want but I'd say to leave it like it is. The wiki is about Oni internals, not about OniSplit.


Thanks for the -help enums. I found a difference between the wiki movelist and the OniSplit enums.

Wiki: Attack#43 KKP and Attack#51 HK, OniSplit does not have them. Thus the wiki has a total of 83 attacks and OniSplit has 81 attacks.

I was in the process of making a movelist page for OniSplit users.

EdT 01:59, 2 July 2008 (CEST)

Oops. Fixed: OniSplit 0.9.19 (|, dead link)


I had an interesting idea today. If the only difference between a .dat file and a .oni file is that in a .oni file the .raw entries and .sep entries are stored at the end of the file, it might be possible to write a small engine hack which allows Oni to load .oni files directly as level plugins. The problem is, I'm not sure whether it would be useful or possible yet.

rossy 12:56, 2 July 2008 (CEST)

Well, in theory it is possible but: - we may need to add the raw/sep parts at the end of existing .dat files too because supporting both styles of loading raw/sep is more difficult to implement - what about Mac? I may as well rewrite all the .dat loader and replace the original one by means of vtuneapi.dll/daodan but I don't know how new code can be loaded on Macs.


I got this error message while importing an ONCC.xml file using version 0.9.19. However, the file is created and works fine in Oni.

System.ArgumentNullException: Argument cannot be null.
Parameter name: Byte buffer is a null reference.
 at System.IO.BinaryWriter.Write (System.Byte[] value) [0x00000] 
 at Oni.Xml.XmlImporter.WriteRawParts (Oni.FileWriter writer) [0x00000] 
 at Oni.Importer.Write (System.String filePath, System.Byte[] data, Boolean hasRawParts) [0x00000] 
 at Oni.Importer.WriteFile (System.String outputDirPath, System.Byte[] data, Boolean hasRawParts) [0x00000] 
 at Oni.Xml.XmlImporter.Import (System.String filePath, System.String outputDirPath) [0x00000] 
 at Oni.Program.CreateFromXml (System.String[] args) [0x00000] 
 at Oni.Program.Main (System.String[] args) [0x00000]  (1)

This happens even with an unmodified ONCC file.

EdT 19:55, 2 July 2008 (CEST)

Fixed: OniSplit 0.9.20 (|, dead link)

And yes, the created files are OK even if it throws error.


So what will you be working on next?

EdT 06:23, 3 July 2008 (CEST)

Don't know, it depends on how much free time I have and my mood :).


Neo, I remember you wrote about having a folder inside the levelX_Final folder that will not be included when recompiling, I must be blind, I can't seem to find it. What was the name for it?

Any chance that you can find out how to add more level plugins for the Mac version. Since Oni originally was going to have more levels, the Mac engine should be able to handle more levels without crashing.


EdT 07:48, 10 July 2008 (CEST)

That directory is called noimport or _noimport.

Oni may very well had more than 16 levels. For Bungie, who had the source code, it was a matter of changing one line of code to adjust the max number of levels. The story is quite different if you want to change the compiled thing.


Hi there Neo, again I am here to seek your advice, this time it is about AI2, ONCC and MELE.

First of all, I have tested it and it seems that AI2 powered characters can jump (they have attacks from air) but they can do only basic tap jump(ONCC, offset 0x010), like if you just tap spacebar. Question is: is there possibility to make them use jetpack timer(to make them 'hold spacebar') in order to jump higher/further ?

Second, if AI2 character is far from you, it runs to you and uses pathfinding mode. With help of pathfinding grid it moves in space, avoids obstacles etc. Question is: Do AI2 characters ignore grid when they have MELE mode on? Do they ignore it completely/partially/they don't ignore it? I ask because when in MELE mode active, AI2 characters can pursue you even outside area with pathfinding grid, but then they won't move if you run away from them, but start attacking you(and moving) if you come close to them again. Also, in MELE mode AI2 characters can run across red pathfinding tiles (impassable) but if you get away they get stuck as if they were outside the grid (won't move until you get close). BUT, there are pathfinding tiles which look like they could be used only for jumping (border 1/2/3/4). And jumping is avilable (as far as I know) only when in MELE mode ^_~. Also, I have tested this: player is in BNV1, standing on top of some box (so he is surrounded by red tiles). AI2 is in BNV2, which is next to BNV1 but there is NO direct transition quad between those two BNVs, only there are 'border' tiles in BNV1 near the line between BNV1 and BNV2. Now tell AI2 to attack player. If player is too far from AI2 character, AI2 will use pathfinding and it will take some long way in order to get to the player. But if player is close enough AND AI2 has in MELE some jumping attack, this AI2 will run towards border and JUMP directly to the player. So it looks like border tiles indicate space where jump attacks are prefered in order to reach enemy. Also, in devmode if you bring MELE debugging window, you can see(if AI2 is in 'border' tiles) that next to other info about technique (like DELAY, UNBLOCKED etc.) there are also informations WORRY-FWD and DANGER-FWD which looks like they correspond to blue (border) and then orange (danger) grids.

So question(s) for this part once again: is pathfinding grid ignored by AI2 when in MELE? If not, is there relation between some pathfinding tiles (border, danger) and MELE messages WORRY-FWD, DANGER-FWD ??? Next, how these tiles affect (if they affect) MELE attacks selection? Do they make AI2 prefer jumping attacks?

All these questions have their sense. I am tired of being able to escape unarmed enemy just by simple jump onto nearest obstacle. I have tried to make AI2s jump, but they can do only tap jump which is not too high and they cannot jump too far + if you escape from them, they get stuck. So if You can answer me, I will see what I can do. I have done some exeriments already (see THIS video) but it is not enough IMO. Thanks for any info.

--Loser 21:03, 14 July 2008 (CEST)

The short answer: I don't know.

The long answer: I haven't looked too much into Oni's AI code partly because it is quite large and complex (in fact it's probably the largest piece of code in Oni). I don't think AI can do more than simple tap jump but that really depends on how the AI controls the character:

  • simply tell the character to execute an animation: that makes doing more than tap jumps impossible because there isn't a special animation for "jetpack" jump.
  • simulate keypresses and mouse input: that means that it might possible but the AI needs to simulate holding the jump key which I have no idea if it can.

The "simulate keypresses" method is more likely to be used in Oni. In fact I know for sure it does simulate some keypresses but I don't know if that's the only way.

Pathfinding & stuff: I know there is something called "local movement" which may be what happens when the character is close by. This code seems to do character - environment collision detection so it may be true the pathfinding grid is ignored sometimes bacause there's not much point in AI doing collision detection if it always used the grid.

Nice video anyway :)


Neo, can you program OniSplit so that it can import ONWC? Let's say I wanted to change the 3D model of a current weapon, how could I import that 3D model? Also, didn't you at one time mention about importing of M3GM with its texture map in an easier fashion?


EdT 06:38, 24 July 2008 (CEST)

M3GM/ONWC: you can do that already. Export the ONWC to xml, remove all the M3GM related stuff (M3GM, PNTA, VCRA, TXCA) and replace the M3GM id in ONWC with a name of your choice:


instead of


Now you can create M3GM files to be used with ONWC as usual.

M3GM/TXMP: yes, I have some plans but right now nothing is implemented.


Thank you!

If you have some time... In the Mac Oni engine, there are a few strings I've always wondered about: at offset 0x1D9D55InitializeDeveloperKeys, 0x1D9f2C UnbindDeveloperKeys, 0x1DE24C DeveloperAccess, 0x173BBC, bad parameters on chr_location. Do the first 3 refer to Developer Mode or something else? The last one about chr_location, could that script command could somehow be enabled?


You probably mean: _LIrInitializeDeveloperKeys, _LIrUnbindDeveloperKeys and _ONgDeveloperAccess. The _LIr* names are functions that are supposed to be called from the "cheater" code. _ONgDevloperAccess is a variable that controls the calling of those 2 functions, it's basically the equivalent of "the day is mine" cheat.

bad parameters on chr_location is printed from the function that set the location of a character (_iSetAnyCharacterLocation or something like that). In theory it can be made to work by registering it with the scripting engine but it's rather complicated.


Thank you. Oh well, I guess the Mac engine will remain limited compared to the PC engine.

EdT 04:40, 25 July 2008 (CEST)

There is a user on OCF that has a problem with OniSplit Can you take a look and post the answer here, then I'll make a reply on OCF.


EdT 15:53, 25 July 2008 (CEST)

Umm... absolutely no idea. Since it works for me and others I assume it's something about his game files. Maybe some file is corrupted or he has some strange version I have never seen before.


Sorry to bother you. I exported ONWCw1_tap as .xml, and I was comparing the output with ONWC. One thing I can't find are the weapon options 0x0D4 to 0x0D6 in the xml. I want to enable secondary fire but can't figure that out. Not for this weapon, but a new one. I got the model for the assault rifle from Halo, I used as a base the chaingun weapon, but now want to add grenades as secondary fire.

EdT 07:10, 27 July 2008 (CEST)

I found it: <Flags>180272</Flags>

EdT 05:04, 28 July 2008 (CEST)

OniSplit v0.9.21

XML export/import for particles added.


I've a bug for you. I converted BINA3RAPsuperglow_e01 into xml and back into oni again. The link "h2h_murglow_e02" is missing now. Here are the files (, dead link). (The blue glow can be seen only for one or two seconds.)

Paradox-01 17:04, 10 August 2008 (CEST)


OniSplit v0.9.22 (|, dead link)


Hm, it wasn't the murglow-thingy but you fixed it whatever it was, thanks.

Paradox-01 17:54, 10 August 2008 (CEST)

The particle are still a bit too big. Here are the files and screenshots (, dead link). (Only converted to xml and back again.)

Paradox-01 18:34, 11 August 2008 (CEST)

Paradox, it might help if you provided a proper link ^_^. Have you tried reducing the size? >_> (Though that is probably the issue you are having, not being able to do that :P)

Gumby 18:47, 11 August 2008 (CEST)

I forgot the file suffix. Thanks for checking. ^_^

Paradox-01 19:08, 11 August 2008 (CEST)

Just noticed there is a new version 0.9.23, what has changed?

EdT 04:59, 12 August 2008 (CEST)

There was an erroneous field type in OBAN, which I discovered in XML while setting up the DeLorean for the trailer.
geyser 05:57, 12 August 2008 (CEST)

Particle size fixed: OniSplit v0.9.24 (|, dead link)


Just curious, do you have a list of binary data files that can be exported and imported as .xml?

EdT 07:15, 25 August 2008 (CEST)

That's quite simple: all object collections and particles.


Sorry to bother you, but, I'd appreciate it if/when you have time to look into this. I got an error when trying to export BINACJBOFlag.oni from level3. I have been able to export the same file from other levels. I wanted to add a few more flags, since the Mac doesn't support chr_location.

Here is my level3 file:

The error message:

 System.ArgumentException: Input contains invalid character at 94 : &#x1B;
 at System.Xml.XmlTextWriter.WriteCheckedBuffer (System.Char[] text, Int32 idx, Int32 length) [0x00000] 
 at System.Xml.XmlTextWriter.WriteCheckedString (System.String s) [0x00000] 
 at System.Xml.XmlTextWriter.WriteEscapedString (System.String text, Boolean isAttribute) [0x00000] 
 at System.Xml.XmlTextWriter.WriteString (System.String text) [0x00000] 
 at System.Xml.XmlWriter.WriteValue (System.String value) [0x00000] 
 at Oni.Xml.RawXmlExporter.Oni.Metadata.IMetaTypeVisitor.VisitString (Oni.Metadata.MetaString type) [0x00000] 
 at Oni.Metadata.MetaString.Accept (IMetaTypeVisitor visitor) [0x00000] 
 at Oni.Xml.RawXmlExporter.WriteFields (Oni.Metadata.Field[] fields) [0x00000] 
 at Oni.Xml.RawXmlExporter.Oni.Metadata.IMetaTypeVisitor.VisitStruct (Oni.Metadata.MetaStruct type) [0x00000] 
 at Oni.Metadata.MetaStruct.Accept (IMetaTypeVisitor visitor) [0x00000] 
 at Oni.Xml.ObjcXmlExporter.WriteFlag () [0x00000] 
 at Oni.Xml.ObjcXmlExporter.Export () [0x00000] 
 at Oni.Xml.ObjcXmlExporter.Export (Oni.FileReader reader, System.Xml.XmlWriter writer) [0x00000] 
 at Oni.Xml.XmlExporter.ExportBINAInstance (Oni.InstanceDescriptor descriptor) [0x00000] 
 at Oni.Xml.XmlExporter.ExportDescriptors (System.Collections.Generic.List`1 referencedDescriptors, System.Xml.XmlWriter writer) [0x00000] 
 at Oni.Xml.XmlExporter.ExportInstance (Oni.InstanceDescriptor descriptor) [0x00000] 
 at Oni.Exporter.ExportInstanceList (System.Collections.Generic.List`1 descriptors) [0x00000] 
 at Oni.Exporter.Export (Oni.FileManager fileManager, System.String sourceFilePath, System.String filter) [0x00000] 
 at Oni.Program.ExtractXml (System.String[] args) [0x00000] 
 at Oni.Program.Main (System.String[] args) [0x00000]  (1)

Thanks again. EdT 04:52, 30 August 2008 (CEST)

Well...My level 3 flag file works. Yours sounds like it is corrupted. Here is what I get when I use your file:

Reading file C:\Users\Franz Media Center\Desktop\BINACJBOFlag.oni
Exporting 1 instance(s) to C:\xml
System.ArgumentException: '←', hexadecimal value 0x1B, is an invalid character.
  at System.Xml.XmlUtf8RawTextWriter.InvalidXmlChar(Int32 ch, Byte* pDst, Boolean entitize)
  at System.Xml.XmlUtf8RawTextWriter.WriteElementTextBlock(Char* pSrc, Char* pSrcEnd)
  at System.Xml.XmlUtf8RawTextWriter.WriteString(String text)
  at System.Xml.XmlUtf8RawTextWriterIndent.WriteString(String text)
  at System.Xml.XmlRawWriter.WriteValue(String value)
  at System.Xml.XmlWellFormedWriter.WriteValue(String value)
  at Oni.Xml.RawXmlExporter.Oni.Metadata.IMetaTypeVisitor.VisitString(MetaString type)
  at Oni.Metadata.MetaString.Accept(IMetaTypeVisitor visitor)
  at Oni.Xml.RawXmlExporter.WriteFields(Field[] fields)
  at Oni.Xml.RawXmlExporter.Oni.Metadata.IMetaTypeVisitor.VisitStruct(MetaStruct type)
  at Oni.Metadata.MetaStruct.Accept(IMetaTypeVisitor visitor)
  at Oni.Xml.ObjcXmlExporter.WriteFlag()
  at Oni.Xml.ObjcXmlExporter.Export()
  at Oni.Xml.XmlExporter.ExportBINAInstance(InstanceDescriptor descriptor)
  at Oni.Xml.XmlExporter.ExportDescriptors(List`1 referencedDescriptors, XmlWriter writer)
  at Oni.Xml.XmlExporter.ExportInstance(InstanceDescriptor descriptor)
  at Oni.Exporter.ExportInstanceList(List`1 descriptors)
  at Oni.Exporter.Export(FileManager fileManager, String sourceFilePath, String filter)
  at Oni.Program.ExtractXml(String[] args)
  at Oni.Program.Main(String[] args)

Between the two error messages, I think you can see what went wrong. :) Gumby 05:48, 30 August 2008 (CEST)

Gumby, can you post your file for comparison? All I can see is that there is an invalid character somewhere in my file. EdT 06:00, 30 August 2008 (CEST)

Yes, there is an invalid character (from XML point of view) in a flag description:

 only one of these end office thingys needs to exist.  Snip one and change the stairwell too?  �2 hrs

That � (0x1B) is the problem because XML does not allow for such characters. I'll make a fix but I have to figure out if there are any other cases where this characters is actually needed and cannot be discarded. Until then you can use a hex editor to replace it with a space.


Thanks for the help. How did you know where to find the character? In my hexeditor, it simply looked like a period. There are some funny notes in the flag description:

This is not the access point you seek, move on (A quote from Star Wars... These are not the droids you seek)


Use your hexeditor to search for "1B"

Gumby 07:42, 30 August 2008 (CEST)

Hey, what about adding ieroglyphic support? All ieroglyphic symbols (or hebrew, or hindi) are replaced with '3F' (question mark). --demos_kratos 20:53, 30 August 2008 (CEST)

In theory it is possible if we create new font files (TSFF, TSFT, TSFL, TSGA) for each language. In practice I don't know if this really works. You'd need some sort of tool to generate all those font files and currenly I don't think such a tool exists. I'd like to add this to OniSplit in the future but currently it is not on my priority list.


OK. Thanx. I'll be waitin'. --demos_kratos 21:37, 30 August 2008 (CEST)

Well, I've started a simple GUI for OniSplit, check it - OniSplit Gui (, dead link)

demos_kratos 19:16, 31 August 2008 (CEST)

I have not run the above application, but I thought someone might appreciate having it more easily-accessible, without the Russian and the obligatory visiting of a sponsor page: (dead link)
You can add other files there, too, demos kratos. Hopefully it works fine for you, because it is a much easier solution for us poor English speakers :-) --Iritscen 21:52, 31 August 2008 (CEST)

OniSplit 0.9.25

OniSplit v0.9.25 (|, dead link)

Added support for exporting/importing animation to/from XML. The usual commands:

 onisplit -extract:xml xml_dir TRAMKONCOMcombo_k_k.oni

This will write a TRAMKONCOMcombo_k_k.xml file in the directory xml_dir which you can more or less edit. Obviously this won't load in a 3D application like Softimage or Blender but you can change shortcuts, attacks, damage, particles etc.

To create an .oni file from the .xml file:

 onisplit -create oni_dir TRAMKONCOMcombo_k_k.xml

Exporting/importing the actual animation to/from Collada files will come in a future version.

PS: the FLAG exporting/importing bug reported above is supposed to be fixed too


OniSplit 0.9.26

OniSplit v0.9.26 (|, dead link)

Added XML support for TXMP/TXAN. Texture extraction/creation works like before but now you can also use the standard xml commands -extract:xml and -create.

Extracting a texture with -extract:xml produces an xml file and one or more tga files. The xml file will contains texture options like format and flags and a list of tga file names. More than one tga file is produced for animated textures and the filenames look like TXMPsmoke_001.tga, TXMPsmoke_002.tga etc.

Using the -create option with such an xml file will produce a normal TXMP.oni file but without the need to specify additional parameters on the command line like with -create:txmp. This comes in handy if you want to edit a bunch of textures:

- put all the xml and tga files in a single directory - edit tga image files as you need - in the directory you can run the command: onisplit -create oni *.xml to create all TXMP.oni files in the subdirectory oni.

Tip: The exported xml file does not contain the witdh and height of the texture, this is obtained from the tga file. If you resize the tga file the texture will be resized too.


This is awesome! Thanks for the updates!

Now do think it will be possible to export/import ONIE as .xml? We're never satisfied are we? :-)

EdT 22:58, 9 September 2008 (CEST)

I'll do that too sooner or later. The current problem with ONIE is that I'm not 100% sure how it works, I need to do a bit of hacking :)