XML:Advanced tutorial

From OniGalore
Revision as of 16:47, 28 July 2009 by Paradox-01 (talk | contribs) (... this)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
New resources are also recognized in BSL.

XML modding can be used to extend your possibilities in BSL.

Animations, characters, flags, functions from binaries (CONS, CHAR, etc.), lasers, sounds, text pages, trigger volumes, turrets, weapons, etc., they all are recognized by their name or ID in BSL.

That means that you must not modify everything, you can also add new content and it will work together with the old stuff.

Resources depend on each other.

For example:

"ai2_movetoflag CharacterNameOrID FlagID" is a BSL command, it tells a character to move to a specific flag. This command makes use of one resource.

"ai2_dopath CharacterNameOrID PathName" is also a BSL command, it tells a character to walk or run on a specific path formed by several flags. The path is one resource that contain actually several other resources. So it depend on them, right? A much more complex example is ONCC ...

I think we should try something together now.
  • Let's play in window mode, then we can change to a notepad when we need to.
  • We need someone that act as a guinea pig. Let's load level 1, first savepoint, activate developer mode (try typing "x" or "thedayismine"). On my PC I have to press key "^" now. That opens the developer console for me. Find the key that does the same for you. Now let's type "ai2_shownames = 1". You can't see the dev console? Try a more native resolution 640x480. You know Oni is a bit buggy.
  • Aha, his name is "A_t48". Let's remember that later. Key F6 will kill him. Now we won't get interrupted by him ...
  • We need new flags. "chr_debug_characters = 1" displays player character's current position. That can be used to set them up.
  • We goto three points. First, beneath the edge (-600 0 -640). Second, to the always closed door (-650 0 -750). Third, at the opposite side is a electro thingy (-650 0 -475).
  • Now our XML work begins. We need to extract "BINACJBOFlag.oni" and "BINACJBOPatrol Path.oni" from level1_Final folder. Use "BINACJBOPatrol*.oni when you can't extract the Patrol Path file. (* replaces everything what comes after it.)
  • End file's end we see. "<FlagId>7056</FlagId>" So 7056 is very probably the last flag.
  • Now we copy a block three times and insert our new data.
       <Object Id="11568" Type="FLAG">
           <Header>
               <Flags>0</Flags>
               <Position>-600 0 -640</Position>
               <Rotation>0 200.5907 0</Rotation>
           </Header>
           <OSD>
               <Color>255 255 0</Color>
               <Prefix>17228</Prefix>
               <FlagId>7057</FlagId>
               <Notes>under the edge</Notes>
           </OSD>
       </Object>
       <Object Id="11568" Type="FLAG">
           <Header>
               <Flags>0</Flags>
               <Position>-650 0 -750</Position>
               <Rotation>0 200.5907 0</Rotation>
           </Header>
           <OSD>
               <Color>255 255 0</Color>
               <Prefix>17228</Prefix>
               <FlagId>7058</FlagId>
               <Notes>closed door</Notes>
           </OSD>
       </Object>
       <Object Id="11568" Type="FLAG">
           <Header>
               <Flags>0</Flags>
               <Position>-650 0 -475</Position>
               <Rotation>0 200.5907 0</Rotation>
           </Header>
           <OSD>
               <Color>255 255 0</Color>
               <Prefix>17228</Prefix>
               <FlagId>7059</FlagId>
               <Notes>electro thingy</Notes>
           </OSD>
       </Object>
  • Let's save flag file, convert it back into .oni formate and continueing with the patrol path file. Documentation can be found here. (XML basic tutorial page has an overview whether docus are available or not.)
       <Object Id="11569" Type="PATR">
           <Header>
               <Flags>0</Flags>
               <Position>80.96647 15.1689625 -536.0079</Position>
               <Rotation>0 0 0</Rotation>
           </Header>
           <OSD>
               <Name>patrol_63</Name>
               <PatrolId>63</PatrolId>
               <ReturnToNearest>1</ReturnToNearest>
               <Points>
                   <Loop>
                       <MovementMode Mode="Run" />
                       <MoveToFlag FlagId="7057" />
                       <MoveToFlag FlagId="7058" />
                       <MoveToFlag FlagId="7059" />
                   </Loop>
               </Points>
           </OSD>
       </Object>
OniAE_TN.gif
XML_advanced_tutorial_TN.png
  • Convert it back to .oni format.
  • Remember the test package from XML basic tutorial? Create this directory "Oni\Edition\install\packages\90000Test\oni\level1_Final\level1_Final", put your oni files into there and reinstall the test package.


  • Hohoho, we are done? Almost. Still a BSL file needs to be written. Let's kick out all BSL files from "Oni\Edition\GameDataFolder\IGMD\EnvWarehouse" and insert only this as BSL file. (It's a txt file, suffix changed to bsl.)


func main
{
	chr_location 0 -577 0 -640
	ai2_shownames = 1
	chr_debug_characters = 1
	ai2_spawn A_t48
	chr_changeteam A_t48 TCTF
	chr_wait_animtype 0 kick
	### Do a kick. Engine will continue with following lines.
	dmsg "[r.Hey man, try new path now.]"
	ai2_dopath A_t48 patrol_63
}