User talk:Neo
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.
Oh boy, were Mono developers lazy or not... :)
Thank you! BINACJBOCharacter.oni works fine, now to take a look at the melee profile file...
Ed
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: http://www.autoitscript.com/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)
http://gumby701.googlepages.com/gui.exe
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.
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:
<Technique> <Name>Back Kick</Name> <Flags /> <Weight>40</Weight> <Offset_0660>10</Offset_0660> <RepeatDelay>0</RepeatDelay> <Moves> <Position Type="CloseBack" MinRunInDist="0" MaxRunInDist="10" ToleranceRange="4.5" /> <Attack Type="PB" /> </Moves> </Technique>
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)
http://gumby.oni2.net/GUI/LevelRecombine.exe
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: http://wiki.oni2.net/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)
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.
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.
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.
Thanks
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?
Thanks,
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:
<Geometry>M3GMgun_x</Geometry>
instead of
<Geometry>#2</Geometry>
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 http://oni.bungie.org/community/forum/viewtopic.php?pid=8417 Can you take a look and post the answer here, then I'll make a reply on OCF.
Thanks,
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 http://wiki.oni2.net/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. (The blue glow can be seen only for one or two seconds.)
Paradox-01 17:04, 10 August 2008 (CEST)
Fixed
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. (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
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: http://edt.oni2.net/OniSplit/level3BINACJBOFlag.oni.zip
The error message:
System.ArgumentException: Input contains invalid character at 94 :  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
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: http://drop.io/demoskratos
- 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
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
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 :)
Heh, EdT wants explosive barrels, right? Well, me too.
Nah, here comes my request. Is there possibility to increase total amount of spawned PAR3 ? Currently it is 1000. I think like 100 000 would be nice. Or is it short, limited to about 65 000 ??? That would be nice as well.
- REASON: 1000 particles maximum. Each decal is count as particle. We want to make AE shinier. That involves more particles spawned at one time, especially during gang fights. Even in original Oni, when playing arena scripts, sometimes you can see that victim is hit but no flash appears as all decals are used at that moment. So we should increase number of decals for those flashes. But then, when limit (1000) is hit, engine starts removing the oldest particles again.
- 100 000 is maybe overrated, but I think it this way: 200 decals for each fight PAR3, 5 000 for each various bulletholes/burns/shrapnels/casing/shielding/etc.
Thank you in advance.
- P.S.: XML TRAMs? You rock! ^_^
- --Loser 07:23, 10 September 2008 (CEST)
For decals you can try changing this value in the exe:
0x4EAD6: ff 8f 01 00 - int32, decal buffer size in bytes
For particles you can try changing these:
0x55D63: 50 C3 00 00 - int32, particle memory block size 0x55D9F: 50 C3 00 00 0x55DAD: 50 C3 00 00 0x582CF: 50 C3 00 00
The decals hack might work (try double that value) but I'm not sure about particles. It would be simpler to increase the number of 50000 bytes memory blocks (the default is 100) but that cannot be done so we need to increase the block size which can lead to unexpected problems.
And there's no way you can get 100000 particles unless you have a 100GHz processor :)
OniSplit 0.9.27
Bugfixes and xml export/import for TMBD.
Hey, testing out TRAM import right now...using it for an explosive barrel.
I have a 1 frame animation where the pelvis consists of this - <EKey>1 0 0 0</EKey> I know the first part is the number of frames, but what are the others? I need to rotate the barrel 90 degrees upward.
See this:
Gumby 19:25, 11 September 2008 (CEST)
You can take a look here: OBD:TRAM/raw0x34. Appart from the fact that I swapped the number of frames with the rotations it's the same thing. To summarize:
The 3 values after number of frames are:
- rotations around X, Y and Z axes
- stored as signed integers with values between -32768 and 32767
To convert those values to degrees you need to multiply by (180 / 32767.5).
To convert from degrees you need to multiply by (32767.5 / 180).
You probably need to rotate the barrel by 90 degrees around X or Z axis. That probably means <EKey>1 16384 0 0</EKey> or <EKey>1 0 0 16384</EKey>
Hah! It worked. Thank you very much. I was wondering why they were so large, for being rotations. ^_^
Gumby 22:06, 11 September 2008 (CEST)
A mystery: If you set a character to be invulnerable through the TRAM, the refuses to shoot you with the Black Adder. Do you know why?
Gumby 01:16, 12 September 2008 (CEST)
Nope. Are you sure it is because of the invulnerability?
Thanks you for TRAM done. You are No.1
Anyways, here is report on increasing particle memory blocks' size: Failure. Max value that was Oni able to withstand was FF|FF|00|00. Then there was maybe + 10 or so particles, but in exchange it was extremely unstable. More than 65535 resulted in crash when some particle was spawned. Dang it. This is 100% wrong way.
Decal buffer incrementation: Failure as well. Tried 2x original value, then 1.5x. Oni hangs in both cases when there is too much decals. And last decal was weridly deformed.
No use. We need new engine or source... but thank you for informations.
P.S.: How can I find if I caused memory corruption ? I am modyfing throws now, and Geyser told me that in previous version of TRAM modifications, some TRAMs caused mem corruption. I don't want to repeat same mistakes. Thank you in advance.
--Loser 16:12, 12 September 2008 (CEST)
OK, I did some more checks:
- Particles: there's basically no way to have a particle block larger than 65535. However, to my knowledge the maximum size of a particle is 256 bytes so with this increase you should be able to get 600 more particles (60 / per block * 100 blocks).
- Decals: in theory it is possible to increase the decal buffer size but the hack would be rather extensive. Basically you would need something like Daodan dll to replace some function in the exe.
TRAM and memory corruption: tipically you cannot find it until the game crashes. If you manage to make it crash consistently with new animations then give me the animations and I'll see what I can do.
On the invulnerable TRAM: Yes, I am sure. The character has the invulnerable animation as a default. I commmand him to do another animation, he gets shot at. When the animation stops, and his invunerable idle animation starts, the shooting stops again.
On something else:
I thought dangerous particle awareness was fixed, but avoiding them was broken? In this image: It seems that awareness is still broken, look at the blue (or used to be blue, until my image editing program messed up the colors) lines. They still point toward the origin. Aren't they supposed to point toward the danger? However, he does avoid it properly as long as you aren't standing between him and the origin.
Gumby 22:14, 12 September 2008 (CEST)
Invulnerable TRAM: so, if my understanding is correct an AI character won't shoot at another character that runs an invulnerable animation and that happens only with Black Adder? Kind of strange if it happens only with one particular weapon.
Projectile awareness: there's another bug in that function, here's the fix
- file offset 0x9C110, new value 0x6C