XML:BINA/OBJC/PART: Difference between revisions

From OniGalore
< XML:BINA‎ | OBJC
No edit summary
No edit summary
 
(19 intermediate revisions by 3 users not shown)
Line 1: Line 1:
'''general information'''
{{XML_OBJC_Header | prev=NEUT | type=PART | next=PATR | name=Particle}}
* '''BINACJBOParticle.oni''' is level specific. (It can be found in edition/GameDataFolder/level''XX''_... )
* See [[XML basic tutorial|HERE]] if you don't know how to convert an oni file into XML and vice versa.
* See [[OBD_talk:BINA/OBJC|HERE]] if you are searching for more general information such as how to handle object coordinates.


==General information==
* The XML on this page is based on OniSplit '''v0.9.61.0'''.
* BINACJBOParticle is level-specific (level''x''_Final.dat).


'''BSL support'''
==BSL support==
* http://ssg.oni2.net/commands.htm#dev-p3
* http://ssg.oni2.net/commands.htm#dev-p3


following command can kill different particle with same tag at once but only one of each, so don't double spawn
The following command kills a particle with a given name, but only the first one of that name, so don't double-spawn the particle:
* particle ''particle_name'' kill (kill counts also as die event)
* particle ''BSL_name'' kill (kill counts also as die event)
following command reset particle
* particle ''particle_name'' reset
following commands depend on [[User:Paradox-01/for_WIP_pages#event_types|particle events]]
* particle ''particle_name'' update
* particle ''particle_name'' pulse
* particle ''particle_name'' start
* particle ''particle_name'' stop
* particle ''particle_name'' bgfx_start
* particle ''particle_name'' bgfx_stop
* particle ''particle_name'' hit_wall
* particle ''particle_name'' hit_char
* particle ''particle_name'' lifetime
* particle ''particle_name'' explode
* particle ''particle_name'' brokenlink
* particle ''particle_name'' create (create counts also as update event)
* particle ''particle_name'' die
* particle ''particle_name'' newattractor
* particle ''particle_name'' delay_start
* particle ''particle_name'' delay_stop


The following command resets a particle:
* particle ''BSL_name'' reset


'''note about ''wannabe-damaging'' particle'''
The following commands utilize the defined [[XML:BINA/PAR3#Event_types|particle events]].
 
{|class="wikitable" width="100%"
|width=50%|
: <font color="#777777">BSL_name = <Tag> in BINACJBOParticle.xml / <Name> in [[XML:ENVP|ENVP]]</font>
|
: <font color="#777777">file_name = <Class> in BINACJBOParticle.xml / <ParticleClass> in [[XML:ENVP|ENVP]]</font>
|-
| particle ''BSL_name'' update
| p3_callevent ''file_name'' 0
|-
| particle ''BSL_name'' pulse
| p3_callevent ''file_name'' 1
|-
| particle ''BSL_name'' start
| p3_callevent ''file_name'' 2
|-
| particle ''BSL_name'' stop
| p3_callevent ''file_name'' 3
|-
| particle ''BSL_name'' bgfx_start
| p3_callevent ''file_name'' 4
|-
| particle ''BSL_name'' bgfx_stop
| p3_callevent ''file_name'' 5
|-
| particle ''BSL_name'' hit_wall
| p3_callevent ''file_name'' 6
|-
| particle ''BSL_name'' hit_char
| p3_callevent ''file_name'' 7
|-
| particle ''BSL_name'' lifetime
| p3_callevent ''file_name'' 8
|-
| particle ''BSL_name'' explode
| p3_callevent ''file_name'' 9
|-
| particle ''BSL_name'' brokenlink
| p3_callevent ''file_name'' 10
|-
| particle ''BSL_name'' create <font color="#777777">(create counts also as update event)</font>
| p3_callevent ''file_name'' 11
|-
| particle ''BSL_name'' die
| p3_callevent ''file_name'' 12
|-
| particle ''BSL_name'' newattractor
| p3_callevent ''file_name'' 13
|-
| particle ''BSL_name'' delay_start
| p3_callevent ''file_name'' 14
|-
| particle ''BSL_name'' delay_stop
| p3_callevent ''file_name'' 15
|}
 
==Note about damaging particles==
Damaging particles will make characters "flinch" no matter how little the damage. So particles are responsible for visualizing the danger and a trigger volume is responsible for dealing the damage.


Fire and gas particle alone are useless until you try inserting a damage effect right there. In original game it's made with a trigger volume.
  particle auto1fire start
  particle auto1fire start
  ### TV inside function
  ### TV inside function
Line 46: Line 85:
  }
  }


 
==File structure==
'''XML structure'''
 
  <?xml version="1.0" encoding="utf-8"?>
  <?xml version="1.0" encoding="utf-8"?>
  <Oni Version="0.9.28.0">
  <Oni>
     <ObjectCollection>
     <Objects>
         '''''[...]'''''
         '''''[...]'''''
     </ObjectCollection>
     </Objects>
  </Oni>
  </Oni>


'''''[...]''''' means at least one particle. Paste all particle data into there (this includes '''<font color="#0A0"><Object ...></font>''' and '''<font color="#0A0"></Object></font>''' tag).
'''''[...]''''' means at least one particle. Paste all your particle data in there (this includes '''<font color="#0A0"><PART Id="..."></font>''' and '''<font color="#0A0"></PART></font>''' tag).
 
'''Example'''


'''example'''
[[Image:fire_particle.jpg|right|thumb]]
{| border=0 cellspacing=20 cellpadding=0 align=right
 
|
         '''<font color="#0A0"><PART Id="8463"></font>'''
[http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/fire.png http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/fire_preview.png]
|}
         '''<font color="#0A0"><Object Id="8463" Type="PART"></font>'''
             <Header>
             <Header>
                 <Flags>0</Flags>
                 <Flags></Flags>
                 <Position>-1050 45 1610</Position>
                 <Position>-1050 45 1610</Position>
                 <Rotation>0 0 0</Rotation>
                 <Rotation>0 0 0</Rotation>
Line 73: Line 109:
                 <Tag>auto1fire</Tag>
                 <Tag>auto1fire</Tag>
                 <Flags>13</Flags>
                 <Flags>13</Flags>
                 <Decal>
                 <DecalScale>1 1</DecalScale>
                    <XScale>1</XScale>
                    <YScale>1</YScale>
                </Decal>
             </OSD>
             </OSD>
         '''<font color="#0A0"></Object></font>'''
         '''<font color="#0A0"></PART></font>'''
 
'''tags'''
* <Flags> : (unknown, usually 0)
* <Position> : (particle is created at this xyz-position)
* <Rotation> : (particle has xyz-rotation (in degrees))
* <Class> : (file name, can have up to 64 characters)
* <Tag> : (name for BSL use, can have up to 48 characters)
* <Flags> : (? = meaning is unknown)
:: 4 - ?
::: used by <Class>env_shinzom_sound</Class> <Tag>zombient</Tag>
:: 5 - ?
::: used only once and that's in compound and it doesn't even work because the file is missing (<Class>env_sturm_sound</Class> <Tag>sturm_ambient</Tag>) but nevertheless used in the BSL file
:: 7  -  not initially created and maybe something else
::: used by yellow objective circles, mad bomber particle in level 3 bio lab, dish elavator red warning env_emlite_e01
:: 12 - ?
::: used for non-animated particles (e.g. lamp lights, images and captions like the level 1 training room captions)
:: 13 - initially create and maybe something else
::: used for animated images (e.g. fire) and moving particles (e.g. falling snow, forcefield and compound dish particle)
:: 15 - ?
::: used for <Class>objective_e01</Class> <Tag>fight</Tag> and <Class>env_splash_e02</Class> <Tag>OutroSplash</Tag>
* <Decal>
:: <XScale> : (horizontal scaling; float value ("1" seems to show image in original size))
:: <YScale> : (vertical scaling; float value)
 
Paradox, remember this is a bitset.


So...
==Tags==
4 = 4 = ?
* <Flags>: unknown, usually empty
5 = 4 + 1 = ?
* <Position>: particle is created at this XYZ position
7 = 4 + 2 + 1 = ?
* <Rotation>: particle has this XYZ rotation in degrees
12 = 8 + 4 = ?
* <Class>: file name, can have up to 64 characters
13 = 8 + 4 + 1 = ?
* <Tag>: name for use in BSL, can have up to 48 characters
15 = 8 + 4 + 2 + 1 = ?
* <Flags>:
So...
: NotInitiallyCreated
1 = Animated/Moving? Probably attaches the particle
* <Decal>: first comes the X (horizontal) scaling (float value), then a space, then the Y (vertical) scaling (float value); "1" seems to show the image at its original size, which can be rather small in-game if the actual decal file uses also a small scale
2 = ?
4 = ?
8 = ?


:) [[User:Gumby|Gumby]] 17:27, 22 May 2009 (UTC)
{{XML}}

Latest revision as of 01:14, 3 April 2021

PART : Particle
XML modding tips
See HERE to start learning about XML modding.
See HERE if you are searching for information on how to handle object coordinates.
See HERE for some typical modding errors and their causes.
XML.png
XML

AKEV << Other file types >> CONS

TMBD << Other BINA >> ONIE

NEUT << Other OBJC >> PATR

switch to OBD page

General information

  • The XML on this page is based on OniSplit v0.9.61.0.
  • BINACJBOParticle is level-specific (levelx_Final.dat).

BSL support

The following command kills a particle with a given name, but only the first one of that name, so don't double-spawn the particle:

  • particle BSL_name kill (kill counts also as die event)

The following command resets a particle:

  • particle BSL_name reset

The following commands utilize the defined particle events.

BSL_name = <Tag> in BINACJBOParticle.xml / <Name> in ENVP
file_name = <Class> in BINACJBOParticle.xml / <ParticleClass> in ENVP
particle BSL_name update p3_callevent file_name 0
particle BSL_name pulse p3_callevent file_name 1
particle BSL_name start p3_callevent file_name 2
particle BSL_name stop p3_callevent file_name 3
particle BSL_name bgfx_start p3_callevent file_name 4
particle BSL_name bgfx_stop p3_callevent file_name 5
particle BSL_name hit_wall p3_callevent file_name 6
particle BSL_name hit_char p3_callevent file_name 7
particle BSL_name lifetime p3_callevent file_name 8
particle BSL_name explode p3_callevent file_name 9
particle BSL_name brokenlink p3_callevent file_name 10
particle BSL_name create (create counts also as update event) p3_callevent file_name 11
particle BSL_name die p3_callevent file_name 12
particle BSL_name newattractor p3_callevent file_name 13
particle BSL_name delay_start p3_callevent file_name 14
particle BSL_name delay_stop p3_callevent file_name 15

Note about damaging particles

Damaging particles will make characters "flinch" no matter how little the damage. So particles are responsible for visualizing the danger and a trigger volume is responsible for dealing the damage.

particle auto1fire start
### TV inside function
func void fire_damage(string ai_name)
{
	dprint fire_hurt_konoko
	### ignore the "fire_hurt_konoko"
	### all characters get damage because the TV is registered for all teams (255)
	### ps: this damage cannot be absorbed by a shield
	chr_poison (ai_name, 5, 30, 30);
}

File structure

<?xml version="1.0" encoding="utf-8"?>
<Oni>
   <Objects>
       [...]
   </Objects>
</Oni>

[...] means at least one particle. Paste all your particle data in there (this includes <PART Id="..."> and </PART> tag).

Example

Fire particle.jpg
       <PART Id="8463">
           <Header>
               <Flags></Flags>
               <Position>-1050 45 1610</Position>
               <Rotation>0 0 0</Rotation>
           </Header>
           <OSD>
               <Class>env_fire9_e01</Class>
               <Tag>auto1fire</Tag>
               <Flags>13</Flags>
               <DecalScale>1 1</DecalScale>
           </OSD>
       </PART>

Tags

  • <Flags>: unknown, usually empty
  • <Position>: particle is created at this XYZ position
  • <Rotation>: particle has this XYZ rotation in degrees
  • <Class>: file name, can have up to 64 characters
  • <Tag>: name for use in BSL, can have up to 48 characters
  • <Flags>:
NotInitiallyCreated
  • <Decal>: first comes the X (horizontal) scaling (float value), then a space, then the Y (vertical) scaling (float value); "1" seems to show the image at its original size, which can be rather small in-game if the actual decal file uses also a small scale