User talk:Neo: Difference between revisions

From OniGalore
Jump to navigation Jump to search
No edit summary
(Thanks)
Line 450: Line 450:


[[User:Neo]]
[[User:Neo]]
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)
[[User:EdT|EdT]]

Revision as of 04:53, 30 August 2008

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.

Neo

Beta4

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

Neo

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.

Neo

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.

Neo

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.

Neo

  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.).

Neo

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.

EdT

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.

Neo

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

Gumby

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

Neo

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.

Neo

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.

Neo

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

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.

Neo

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.

Neo

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

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.

Neo


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

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.

Neo

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?

EdT

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.

Neo

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.

Neo

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.

Neo

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

OniSplit v0.9.22

Neo

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

Neo

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.

Neo

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 : &#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.

User:Neo

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)

EdT