|
|
(11 intermediate revisions by 3 users not shown) |
Line 1: |
Line 1: |
| __TOC__
| |
|
| |
| =talk=
| |
| To value types: | | To value types: |
|
| |
|
Line 16: |
Line 13: |
| Thanks for your answer. | | Thanks for your answer. |
|
| |
|
| I've googled a (long) bit for that "InverseNormalTable". It seems to be okay. This table is also called "inverse standardized normal distribution" (see http://files.hanser.de/hanser/docs/20040419_24419112747-75_3-446-21594-8Anhang2.pdf) | | I've googled a (long) bit for that "InverseNormalTable". It seems to be okay. This table is also called "inverse standardized normal distribution" (see http://web.archive.org/web/20151010142712/http://files.hanser.de/hanser/docs/20040419_24419112747-75_3-446-21594-8Anhang2.pdf) |
|
| |
|
| The equation for the inverse normal distribution is: x = σ * z + µ | | The equation for the inverse normal distribution is: x = σ * z + µ |
Line 84: |
Line 81: |
|
| |
|
| [[User:Neo|Neo]] | | [[User:Neo|Neo]] |
| :The term "inverse normal" is apparently not conventional, and also rather confusing because it can be mistaken as referring to either the [[wikipedia:Normal-inverse_Gaussian_distribution|normal-inverse Gaussian distribution]] or the [[wikipedia:Inverse_Gaussian_distribution|inverse Gaussian distribution]], both of which are rather exotic and irrelevant here. | | :The term "inverse normal" is apparently not conventional, and also rather confusing because it can be mistaken as referring to either the [[wp:Normal-inverse Gaussian distribution|normal-inverse Gaussian distribution]] or the [[wp:Inverse Gaussian distribution|inverse Gaussian distribution]], both of which are rather exotic and irrelevant here. |
| :What we have here is the inverse of the [[wikipedia:Error_function|error function]] or rather that of [[wikipedia:Normal_distribution#Standard_deviation_and_confidence_intervals|erfc(x/sqrt(2))]]. If you have Java installed, [http://onlinestatbook.com/analysis_lab/inverse_normal_dist.html HERE] is a nice applet that you can toy around with to see just what the table in your PDF link corresponds to. | | :What we have here is the inverse of the [[wp:Error function|error function]] or rather that of [[wp:Normal distribution#Standard deviation and coverage|erfc(x/sqrt(2))]]. If you have Java installed, [https://onlinestatbook.com/analysis_lab/inverse_normal_dist.html HERE] is a nice applet that you can toy around with to see just what the table in your PDF link corresponds to. |
| :As further pointed out [[wikipedia:Normal_distribution#Generating_values_for_normal_random_variables|HERE]], inverting the [[wikipedia:Normal_distribution#Cumulative_distribution_function|standard normal cdf]] gives you a way to generate ''normally'' distributed random variables from a ''uniformly'' distributed random variable, which is exactly what Oni does (see Neo's code sample above). | | :As further pointed out [[wp:Normal distribution#Generating values from normal distribution|HERE]], inverting the [[wp:Normal distribution#Cumulative distribution function|standard normal cdf]] gives you a way to generate ''normally'' distributed random variables from a ''uniformly'' distributed random variable, which is exactly what Oni does (see Neo's code sample above). |
| :The float r is a ''uniformly'' distributed random variable in (-1.0,1.0) (@ Neo: please check). Same for x except the interval is now [0.0,10.0). z is a first approximation of erfc(0.0998 * x / sqrt(2)), interpolated linearly between erfc(0.0998 * floorf(x) / sqrt(2)) and erfc(0.0998 * (floorf(x) + 1) / sqrt(2)). The table is thus sampled uniformly. | | :The float r is a ''uniformly'' distributed random variable in (-1.0,1.0) (@ Neo: please check). Same for x except the interval is now [0.0,10.0). z is a first approximation of erfc(0.0998 * x / sqrt(2)), interpolated linearly between erfc(0.0998 * floorf(x) / sqrt(2)) and erfc(0.0998 * (floorf(x) + 1) / sqrt(2)). The table is thus sampled uniformly. |
| :The result ( v1 + z * v2 ) is, to a good approximation, a ''normally'' distributed random variable, centered at v1 and with standard mean deviation v2. Apart from the approximation arising from the linear interpolation, the distribution is cut off at 99.8% of expectancy, so all the values will be within 3.09023*v2 of v1. | | :The result ( v1 + z * v2 ) is, to a good approximation, a ''normally'' distributed random variable, centered at v1 and with standard mean deviation v2. Apart from the approximation arising from the linear interpolation, the distribution is cut off at 99.8% of expectancy, so all the values will be within 3.09023*v2 of v1. |
| ::[[User:Geyser|geyser]] 03:12, 7 December 2007 (CET) | | ::[[User:Geyser|geyser]] 03:12, 7 December 2007 (CET) |
|
| |
|
| Boy, what a ton of interest this little function generates :). The interval for r is [-0.999, 0.999] to be precise (it originates as [-1, 1] and it is multiplied with 0.999). And yes, it is supposed to be distributed uniformly. Here is the (pseudo)random number generator: [[wikipedia:Linear_congruential_generator|linear congruential generator]], the one from Numerical Recipes. | | Boy, what a ton of interest this little function generates :). The interval for r is [-0.999, 0.999] to be precise (it originates as [-1, 1] and it is multiplied with 0.999). And yes, it is supposed to be distributed uniformly. Here is the (pseudo)random number generator: [[wp:Linear congruential generator|linear congruential generator]], the one from Numerical Recipes. |
|
| |
|
|
| |
|
Line 211: |
Line 208: |
| :::That is how I learn particles, too. ^_^ [[User:Gumby|Gumby]] 17:20, 22 May 2009 (UTC) | | :::That is how I learn particles, too. ^_^ [[User:Gumby|Gumby]] 17:20, 22 May 2009 (UTC) |
|
| |
|
| | | {{OBD}} |
| =XML section=
| |
| {{Template:XMLModdingHints}} | |
| | |
| ==file structure==
| |
| <?xml version="1.0" encoding="utf-8"?>
| |
| <Oni Version="0.9.30.0">
| |
| <Particle Name="''particle_file_name''">
| |
| <Options>
| |
| <Lifetime></Lifetime>
| |
| <DisableDetailLevel>[... see '''[[#options|HERE]]''' for a possible flag]</DisableDetailLevel>
| |
| <Decorative></Decorative>
| |
| [...]
| |
| </Options>
| |
| <Properties>
| |
| [...]
| |
| </Properties>
| |
| <Appearance>
| |
| <DisplayType>[... see '''[[#appearance|HERE]]''' for a possible flag]</DisplayType>
| |
| [...]
| |
| </Appearance>
| |
| <Attractor>
| |
| <Target>[... see '''[[#attractor|HERE]]''' for a possible flag]</Target>
| |
| <Selector>[... see '''[[#attractor|HERE]]''' for a possible flag]</Selector>
| |
| <Class />
| |
| [...]
| |
| </Attractor>
| |
| '''[[#variable storage types|<Variables>]]'''
| |
| [...]
| |
| </Variables>
| |
| <Emitters>
| |
| <Emitter>
| |
| [... see '''[[#emitter|HERE]]''' for emitter data]
| |
| </Emitter>
| |
| </Emitters>
| |
| <Events>
| |
| [... see '''[[#event types|HERE]]''' for '''''<event_type_tag>''''']
| |
| [... see '''[[#action types: ID and parameter|HERE]]''' for '''<action_type_tag>''']
| |
| [... see '''[[#action types: ID and parameter|HERE]]''' for '''''<parameter_tag>[[#parameter value types|value]]</parameter_tag>''''']
| |
| ''<action_type_tag>''
| |
| ''</event_type_tag>''
| |
| </Events>
| |
| </Particle>
| |
| </Oni>
| |
| | |
| | |
| ==options==
| |
| {{table}}
| |
| !XML tag
| |
| !description
| |
| !value type / flags plus description
| |
| |-
| |
| |valign=top|<Lifetime>
| |
| |width=50%|particle exist for X seconds; X is float value, so you could write 1.25 if a second is to less and 2 too many; 0 means forever
| |
| |float: seconds
| |
| |-
| |
| |valign=top|<DisableDetailLevel>
| |
| |Particle is not created if detail level is too low.
| |
| |
| |
| : Never
| |
| : Medium
| |
| : Low
| |
| |-
| |
| |valign=top|<Decorative>
| |
| |Might not always be updated by the engine.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<CollideWithWalls>
| |
| |Needed if the particle uses the HitWall event type.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<CollideWithChars>
| |
| |Needed if the particle uses the HitCharacter event type.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<InitiallyHidden>
| |
| |Hides the particle on creation.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<DrawAsSky>
| |
| |Draws the particle before everything else, supposedly.
| |
| |
| |
| |-
| |
| |valign=top|<DontAttractThroughWalls>
| |
| |Particle will not detect attracters if there is a wall between it and the potential attracter.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<ExpireOnCutscene>
| |
| |Ends the lifetime of a particle on cutscene start.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<DieOnCutscene>
| |
| |Kills the particle on cutscene start.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<LockPositionToLink>
| |
| |Locks the position of the particle to its link
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<CollisionRadius>
| |
| |Distance from which HitWall and HitCharacter events are activated
| |
| |float: distance
| |
| |-
| |
| |valign=top|<AIDodgeRadius>
| |
| |Distance from which AI will avoid this particle
| |
| |float: distance
| |
| |-
| |
| |valign=top|<AIAlertRadius>
| |
| |Distance from which AI will be aware of the danger of the particle
| |
| |float: distance
| |
| |-
| |
| |valign=top|<FlyBySoundName />
| |
| |Sound used when the particle passes by you. Check: does the engine apply the Doppler effect or is it in the sound file itself?
| |
| |<font color="#777777">OSBD</font>file<font color="#777777">.imp.oni</font>
| |
| |}
| |
| | |
| ==properties==
| |
| {{table}}
| |
| !XML tag
| |
| !description
| |
| !value type / flags plus description
| |
| |-
| |
| |valign=top|<HasVelocity>
| |
| |Needed if the particle is to move.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<HasOrientation>
| |
| |Needed if the particle is to be able to turn around?
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<HasPositionOffset>
| |
| |Used with LockPositionToLink???
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<HasAttachmentMatrix>
| |
| |Used if the particle is to be stuck to a character or wall.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<HasUnknown>
| |
| |???
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<HasDecalState>
| |
| |Used if the particle is a Decal.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<HasTextureStartTick>
| |
| |Used with animated particles. (Documentation Needed).
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<HasTextureTick>
| |
| |Used with animated particles. (Documentation Needed).
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<HasDamageOwner>
| |
| |Used for particles to either:
| |
| :A. Not damage a character
| |
| :B. Credit a character with damage\kills
| |
| For this to work properly, the parent of the character must have this set, and the parent of said parent, etc, up to the original particle.
| |
| |Yes\No
| |
| |}
| |
| | |
| ==appearance==
| |
| {{table}}
| |
| !XML tag
| |
| !description
| |
| !value type / flags plus description
| |
| |-
| |
| |valign=top|<DisplayType>
| |
| |How the particle is displayed. (Please Document)
| |
| |
| |
| : Sprite
| |
| : RotatedSprite
| |
| : Beam - bullet textures and such
| |
| : Arrow
| |
| : Flat
| |
| : OrientedContrail
| |
| : Discuss
| |
| : Decal - sticks to a wall
| |
| : Geometry - uses an M3GM
| |
| |-
| |
| |valign=top|<TexGeom>
| |
| |The texture or model that this particle uses
| |
| |TXMP\M3GM
| |
| |-
| |
| |valign=top|<Invisible>
| |
| |Can't be seen.
| |
| |Yes\No?
| |
| |-
| |
| |valign=top|<IsContrailEmitter>
| |
| |Emits a contrail
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<ScaleToVelocity>
| |
| |Scales the particle based on the speed it is going.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<Scale>
| |
| |The size of the particle.
| |
| |float: scale
| |
| |-
| |
| |valign=top|<UseSeparateYScale>
| |
| |Stretches the particle along the Y axis if set.
| |
| |Yes\No
| |
| |-
| |
| |valign=top|<YScale>
| |
| |needs <UseSeparateYScale>true</UseSeparateYScale> to be enabled
| |
| |float: scale
| |
| |-
| |
| |valign=top|<Rotation>
| |
| |The rotation of the particle
| |
| |?
| |
| |-
| |
| |valign=top|<Alpha>
| |
| |transparency
| |
| |float (0.0-1.0) or int (0-255): transparency<br>0 = Tex/Geom is invisible, 1 = visible
| |
| |-
| |
| |valign=top|<XOffset>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<XShorten>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<Tint>
| |
| |R G B A means red green blue alpha
| |
| |color
| |
| |-
| |
| |valign=top|<FadeOutOnEdge>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<OneSidedEdgeFade>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<EdgeFadeMin>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<EdgeFadeMax>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<MaxContrailDistance>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<LensFlare>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<LensFlareDistance>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<LensFlareFadeInFrames>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<LensFlareFadeOutFrames>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<DecalFullBrightness>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<MaxDecals>
| |
| |Seems to be a bit broken (someone please test this again)
| |
| |int
| |
| |-
| |
| |valign=top|<DecalFadeFrames>
| |
| |The number of frames it takes for a decal particle to fade after it reaches the maximum number of decals.
| |
| |
| |
| |-
| |
| |valign=top|<DecalWrapAngle>
| |
| |Decal isn't cut off when the next plane piece has an angle difference equal or less to this value.
| |
| |float (degrees)
| |
| |}
| |
| | |
| ==attractor==
| |
| {{table}}
| |
| !XML tag
| |
| !description
| |
| !value type / flags plus description
| |
| |-
| |
| |valign=top|<Target>
| |
| |
| |
| |
| |
| : None
| |
| : Link
| |
| : Class
| |
| : Tag
| |
| : Characters
| |
| : Hostiles
| |
| : EmittedTowards
| |
| : ParentAttractor
| |
| : AllCharacters
| |
| |-
| |
| |valign=top|<Selector>
| |
| |
| |
| |
| |
| : Distance
| |
| : Angle
| |
| |-
| |
| |valign=top|<Class />
| |
| |Name of a paritcle that this particle is attracted to.
| |
| |
| |
| |-
| |
| |valign=top|<MaxDistance>
| |
| |Maximum distance the particle will detect an attractor from (if using Distance selection).
| |
| |float: distance
| |
| |-
| |
| |valign=top|<MaxAngle>
| |
| |Maximum angle the particle will detect an attractor from (if using Angle selection).
| |
| |float: angle?
| |
| |-
| |
| |valign=top|<AngleSelectMin>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<AngleSelectMax>
| |
| |
| |
| |
| |
| |-
| |
| |valign=top|<AngleSelectWeight>
| |
| |
| |
| |
| |
| |}
| |
| | |
| ==variable storage types==
| |
| {{table}}
| |
| !XML tag
| |
| !description
| |
| !value type / flags plus description
| |
| |-
| |
| |<Float Name="''variable''">''float_value''</Float>
| |
| |A Float. :)
| |
| |
| |
| |-
| |
| |<Color Name="''variable''">''R G B [A]''</Color>
| |
| |A color. :)
| |
| |
| |
| |-
| |
| |<PingPongState Name="''variable''">''?''</PingPongState>
| |
| |A float from 0-1, describes where in the ping pong state the event is. (If my memory is correct)
| |
| |Float: 0.0-1.0
| |
| |}
| |
| | |
| ==parameter value types==
| |
| Grey is additional for variable section.
| |
| {{table}}
| |
| |
| |
| 0 - variable; variable name follows
| |
| |
| |
| <font color="#777777"><Float Name="''variable''"></font>''variable''<font color="#777777"></Float></font>
| |
| |-
| |
| |
| |
| 1 - none (action parameters use this to indicate an unused parameter)
| |
| |
| |
| ?
| |
| |-
| |
| |
| |
| 3 - float; constant; 1 float value follows
| |
| | |
| 4 - float; random; 2 float values follow (min, max)
| |
| | |
| 5 - float; bell curve; 2 float values follow (mean, stddev)
| |
| |
| |
| <font color="#777777"><Float Name="''variable''"></font>''float_value''<font color="#777777"></Float></font>
| |
| | |
| <font color="#777777"><Float Name="''variable''"></font><Random Min="''float_value''" Max="''float_value''" /><font color="#777777"></Float></font>
| |
| | |
| <font color="#777777"><Float Name="''variable''"></font><BellCurve Mean="''float_value''" StdDev="''float_value''" /><font color="#777777"></Float></font>
| |
| |-
| |
| |
| |
| 6 - instance; instance name follows
| |
| |
| |
| ?
| |
| |-
| |
| |
| |
| 7 - color; constant; 1 color follows
| |
| | |
| 8 - color; random; 2 color follow (min, max)
| |
| | |
| 9 - color; bell curve; 2 color follow (mean, stddev)
| |
| |
| |
| <font color="#777777"><Color Name="''variable''"></font>''R G B''<font color="#777777"></Color></font>
| |
| | |
| <font color="#777777"><Color Name="''variable''"></font><Random Min="''R G B''" Max="''R G B''" /><font color="#777777"></Color></font>
| |
| | |
| <font color="#777777"><Color Name="''variable''"></font><BellCurve Mean="? ? ? ?" StdDev="? ? ? ?" /><font color="#777777"></Color></font>
| |
| |-
| |
| |
| |
| 0A - int32; constant; int32 follows
| |
| |
| |
| ?
| |
| |-
| |
| |
| |
| 0B - time cycle; 2 float values follow (cycle length, scale)
| |
| |
| |
| <TimeCycle Length="..." Scale="..." />
| |
| |}
| |
| | |
| | |
| ==emitter==
| |
| {{table}}
| |
| !XML tag
| |
| !description
| |
| !value type / flags plus description
| |
| |-
| |
| |<Class>
| |
| |valign=top|particle file name without prefix (BINA3RAP) and without suffix (.oni)
| |
| |
| |
| |-
| |
| |valign=top|<Flags>
| |
| |valign=top|
| |
| | |
| | |
| ----
| |
| recherche notes - files with Unknown0020 flag:
| |
| | |
| BINA3RAPw8_mbo_p07, BINA3RAPw8_mbo_e03, BINA3RAPw12_ba2_e03, BINA3RAPw10_sni_p01, BINA3RAPpstream_flicker, BINA3RAPheadlight02, BINA3RAPheadlightStart, BINA3RAPheadlight01
| |
| |
| |
| : InitiallyOn
| |
| : IncreaseParticleCount
| |
| : TurnOffAtTreshold
| |
| : EmitWithParentVelocity
| |
| : Unknown0020
| |
| : OrientToVelocity
| |
| : InheritTint
| |
| : OnePerAttractor
| |
| : AtLeastOne
| |
| : CycleAttractors
| |
| |-
| |
| |valign=top|<TurnOffTreshold>
| |
| |
| |
| Tag contains the number (threshold) of particle which must be reached before emitter becomes turned off. Threshold needs two flags to be set: IncreaseParticleCount and TurnOffAtTreshold.
| |
| |
| |
| |-
| |
| |valign=top|<Probability>
| |
| |
| |
| Let's say threshold was set to 10 and probability to 0.5 then you might get 5 particle emitted, sometimes less, sometime more, it's an average. (threshold * probability = emitted particle)
| |
| |
| |
| |-
| |
| |valign=top|<Copies>
| |
| |
| |
| It's actually a multiplier, set it to 0 and no particle will be emitted. Copies doesn't effects the treshold counting. The copies become emitted at the same place as the original particle so you might not see any difference (because they overlay each other) until they have a random movement.
| |
| |
| |
| |-
| |
| |valign=top|<LinkTo>
| |
| |
| |
| |
| |
| : this
| |
| : 0
| |
| : 1
| |
| : 2
| |
| : 3
| |
| : 4
| |
| : 5
| |
| : 6
| |
| : 7
| |
| : link
| |
| |-
| |
| |valign=top|<Rate>...</Rate>
| |
| |valign=top|Interval in seconds.
| |
| |
| |
| ... can be:
| |
| | |
| <Continous>
| |
| <Interval></Interval>
| |
| </Continous>
| |
| ----
| |
| <Random>
| |
| <MinInterval></MinInterval>
| |
| <MaxInterval></MaxInterval>
| |
| </Random>
| |
| ----
| |
| <Instant />
| |
| ----
| |
| <Distance>
| |
| <Distance></Distance>
| |
| </Distance>
| |
| ----
| |
| <Attractor>
| |
| <RechargeTime></RechargeTime>
| |
| <CheckInterval></CheckInterval>
| |
| </Attractor>
| |
| |-
| |
| |valign=top|<Position>...</Position>
| |
| |
| |
| |
| |
| ... can be:
| |
| | |
| <Point />
| |
| ----
| |
| <Line>
| |
| <Radius></Radius>
| |
| </Line>
| |
| ----
| |
| <Circle>
| |
| <InnerRadius></InnerRadius>
| |
| <OuterRadius></OuterRadius>
| |
| </Circle>
| |
| ----
| |
| <Sphere>
| |
| <InnerRadius></InnerRadius>
| |
| <OuterRadius></OuterRadius>
| |
| </Sphere>
| |
| ----
| |
| cylinder needs to be tested again
| |
| <Cylinder>
| |
| <Height></Height>
| |
| <InnerRadius></InnerRadius>
| |
| <OuterRadius></OuterRadius>
| |
| <Cylinder>
| |
| ----
| |
| <BodySurface>
| |
| <OffsetRadius></OffsetRadius>
| |
| </BodySurface>
| |
| ----
| |
| <BodyBones>
| |
| <OffsetRadius></OffsetRadius>
| |
| </BodyBones>
| |
| |-
| |
| |valign=top|<Direction>...</Direction>
| |
| |
| |
| |
| |
| ... can be:
| |
| | |
| <Straight />
| |
| ----
| |
| <Random />
| |
| ----
| |
| <Cone>
| |
| <Angle></Angle>
| |
| <CenterBias></CenterBias>
| |
| </Cone>
| |
| ----
| |
| <Ring>
| |
| <Angle></Angle>
| |
| <Offset></Offset>
| |
| </Ring>
| |
| ----
| |
| <Offset>
| |
| <X></X>
| |
| <Y></Y>
| |
| <Z></Z>
| |
| </Offset>
| |
| ----
| |
| <Inaccurate>
| |
| <BaseAngle></BaseAngle>
| |
| <Inaccuracy></Inaccuracy>
| |
| <CenterBias></CenterBias>
| |
| </Inaccurate>
| |
| ----
| |
| <Attractor />
| |
| |-
| |
| |valign=top|<Speed>...</Speed>
| |
| |
| |
| |
| |
| ... can be:
| |
| | |
| <Uniform>
| |
| <Speed></Speed>
| |
| </Uniform>
| |
| ----
| |
| <Stratified>
| |
| <Speed1></Speed1>
| |
| <Speed2></Speed2>
| |
| </Stratified>
| |
| |-
| |
| |valign=top|<Orientation>...</Orientation>
| |
| |
| |
| |
| |
| ... can be:
| |
| | |
| : LocalPosX
| |
| : LocalNegX
| |
| : LocalPosY
| |
| : LocalNegY
| |
| : LocalPosZ
| |
| : LocalNegZ
| |
| : WorldPosX
| |
| : WorldNegX
| |
| : WorldPosY
| |
| : WorldNegY
| |
| : WorldPosZ
| |
| : WorldNegZ
| |
| : Velocity
| |
| : ReverseVelocity
| |
| : TowardsEmitter
| |
| : AwayFromEmitter
| |
| |-
| |
| |valign=top|<OrientationUp>...</OrientationUp>
| |
| |
| |
| |
| |
| ... can be:
| |
| | |
| : LocalPosX
| |
| : LocalNegX
| |
| : LocalPosY
| |
| : LocalNegY
| |
| : LocalPosZ
| |
| : LocalNegZ
| |
| : WorldPosX
| |
| : WorldNegX
| |
| : WorldPosY
| |
| : WorldNegY
| |
| : WorldPosZ
| |
| : WorldNegZ
| |
| : Velocity
| |
| : ReverseVelocity
| |
| : TowardsEmitter
| |
| : AwayFromEmitter
| |
| |}
| |
| | |
| | |
| ==event types==
| |
| : Update
| |
| : Pulse
| |
| : Start
| |
| : Stop
| |
| : BackgroundFxStart
| |
| : BackgroundFxStop
| |
| : HitWall
| |
| : HitCharacter
| |
| : Lifetime
| |
| : Explode
| |
| : BrokenLink
| |
| : Create
| |
| : Die
| |
| : NewAttractor
| |
| : DelayStart
| |
| : DelayStop
| |
| | |
| | |
| {|BORDER=1 CELLSPACING=0 CELLPADDING=2 STYLE="border-style:solid; border-collapse:collapse; empty-cells:show; background-color:#f9f9f9;" WIDTH=100% ALIGN=center
| |
| |width=50%|
| |
| '''schemata 1'''
| |
| |
| |
| '''example 1'''
| |
| |-
| |
| |
| |
| <''Event''>
| |
| <''action_ID_tag_'''without_parameter''''' />
| |
| </''Event''>
| |
| |
| |
| <HitWall>
| |
| <Die />
| |
| </HitWall>
| |
| |-
| |
| |
| |
| '''schemata 2'''
| |
| |
| |
| '''example 2'''
| |
| |-
| |
| |valign=top|
| |
| <''Event''>
| |
| <''action_ID_tag_'''with_parameter'''''>
| |
| <''parameter_tag''>''value_or_variable''</parameter_tag>
| |
| </''action_ID_tag_'''with_parameter'''''>
| |
| </''Event''>
| |
| |
| |
| <Update>
| |
| <SuperParticle>
| |
| <Variable>emit_rate</Variable>
| |
| <VaseValue>0.25</VaseValue>
| |
| <DeltaValue>-0.1</DeltaValue>
| |
| <MinValue>0.1</MinValue>
| |
| <MaxValue>20</MaxValue>
| |
| </SuperParticle>
| |
| </Update>
| |
| |}
| |
| | |
| | |
| ==action types: ID and parameter==
| |
| | |
| '''action ID old description|parameter XML action tag XML parameter tag'''
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 0 Linear Change <AnimateLinear>
| |
| float var <Target></Target>
| |
| float rate <Rate></Rate>
| |
| </AnimateLinear>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 1 Acceler. Change <AnimateAccelerated>
| |
| float var <Target></Target>
| |
| float anim_vel <Velocity></Velocity>
| |
| float accel <Acceleration></Acceleration>
| |
| </AnimateAccelerated>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 2 Random Change <AnimateRandom>
| |
| float var <Target></Target>
| |
| float min <Min></Min>
| |
| float max <Max></Max>
| |
| float rate <Rate></Rate>
| |
| </AnimateRandom>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 3 Pingpong Change <AnimatePingPong>
| |
| float var <Target></Target>
| |
| pingpong_state pingpong <State></State>
| |
| float min <Min></Min>
| |
| float max <Max></Max>
| |
| float rate <Rate></Rate>
| |
| </AnimatePingPong>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 4 Looping Change <AnimateLoop>
| |
| float var <Target></Target>
| |
| float min <Min></Min>
| |
| float max <Max></Max>
| |
| float rate <Rate></Rate>
| |
| </AnimateLoop>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 5 Change To Value <AnimateToValue>
| |
| float var <Target></Target>
| |
| float rate <Rate></Rate>
| |
| float endpoint <Value></Value>
| |
| </AnimateToValue>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 6 Color Blend <ColorInterpolate>
| |
| color var <Target></Target>
| |
| color color_0 <Color0></Color0>
| |
| color color_1 <Color1></Color1>
| |
| float blendval <Amount></Amount>
| |
| </ColorInterpolate>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 7 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 8 Fade Out '''<font color="#0000FF" title="particle becomes killed after X seconds, it fades out during that time"><FadeOut></font>'''
| |
| float time_to_die <TimeToDie>''X''</TimeToDie>
| |
| </FadeOut>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 9 Enable Action '''<font color="#0000FF" title="has action X as target in Update event section"><EnableAtTime></font>'''
| |
| action_index action <Action>''X''</Action>
| |
| float lifetime '''<font color="#999999" title="appears to be useless"><Lifetime></Lifetime></font>'''
| |
| </EnableAtTime>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 10 Disable Action '''<font color="#0000FF" title="has action X as target in Update event section"><DisableAtTime></font>'''
| |
| action_index action <Action>''X''</Action>
| |
| float lifetime '''<font color="#999999" title="appears to be useless"><Lifetime></Lifetime></font>'''
| |
| </DisableAtTime>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 11 Die '''<font color="#0000FF" title="particle becomes killed now"><Die /></font>'''
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 12 Set Lifetime '''<font color="#0000FF" title="particle becomes killed after X seconds"><SetLifetime></font>'''
| |
| float time <Time>''X''</Time>
| |
| </SetLifetime>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 13 Enable Emitter '''<font color="#0000FF" title="starts emitter X"><EmitActivate></font>'''
| |
| emitter emitter_num <Emitter>''X''</Emitter>
| |
| </EmitActivate>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 14 Disable Emitter '''<font color="#0000FF" title="stops emitter X"><EmitDeactivate></font>'''
| |
| emitter emitter_num <Emitter>''X''</Emitter>
| |
| </EmitDeactivate>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 15 Emit Particles '''<font color="#0000FF" title="starts emitter X, Y particle becomes emitted"><EmitParticles></font>'''
| |
| emitter emitter_num <Emitter>''X''</Emitter>
| |
| float particles <Particles>''Y''</Particles>
| |
| </EmitParticles>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 16 Change Class <ChangeClass>
| |
| emitter emitter_num <Emitter></Emitter>
| |
| </ChangeClass>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 17 KillLastEmitted <KillLastEmitted>
| |
| emitter emitter_num <Emitter></Emitter>
| |
| </KillLastEmitted>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 18 ExplodeLastEmit <ExplodeLastEmitted>
| |
| emitter emitter_num <Emitter></Emitter>
| |
| </ExplodeLastEmitted>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 19 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 20 Start Amb Sound <AmbientSound>
| |
| string sound <Sound></Sound>
| |
| </AmbientSound>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 21 End Amb Sound <EndAmbientSound />
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 22 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 23 Impulse Sound <ImpulseSound>
| |
| string sound <Sound></Sound>
| |
| </ImpulseSound>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 24 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 25 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 26 Damage Char <DamageChar>
| |
| float damage <Damage></Damage>
| |
| float stun_damage <StunDamage></StunDamage>
| |
| float knockback <KnockBack></KnockBack>
| |
| damage_type damage_type '''<font color="#0000FF" title="0 - normal; 1 - minor stun; 2 - major stun; 3 - minor knockdown; 4 - major knockdown; 5 - blownup; 6 - pickup"><DamageType></DamageType></font>'''
| |
| boolean self_immune <SelfImmune></SelfImmune>
| |
| boolean can_hit_mult '''<font color="#0000FF" title="tag is missing when value is 0"><CanHitMultiple></CanHitMultiple></font>'''
| |
| </DamageChar>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 27 Blast Damage <DamageBlast>
| |
| float damage <Damage></Damage>
| |
| float stun_damage <StunDamage></StunDamage>
| |
| float knockback <KnockBack></KnockBack>
| |
| float radius <Radius></Radius>
| |
| blast_falloff falloff <FallOff></FallOff>
| |
| damage_type damage_type '''<font color="#0000FF" title="0 - normal; 1 - minor stun; 2 - major stun; 3 - minor knockdown; 4 - major knockdown; 5 - blownup; 6 - pickup"><DamageType></DamageType></font>'''
| |
| boolean self_immune <SelfImmune></SelfImmune>
| |
| boolean damage_environ '''<font color="#DD0000">(Was not listed in extracted file. Missing?)</font>'''
| |
| </DamageBlast>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 28 Explode '''<font color="#0000FF" title="this action triggers Explode event"><Explode /></font>'''
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 29 Damage Environ. <DamageEnvironment>
| |
| float damage <Damage></Damage>
| |
| </DamageEnvironment>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 30 Glass Charge <GlassCharge>
| |
| float blast-vel <BlastVelocity></BlastVelocity>
| |
| float radius <Radius></Radius>
| |
| </GlassCharge>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 31 Stop '''<font color="#0000FF" title="calls Stop event"><Stop /></font>'''
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 32 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 33 Rotate X <RotateX>
| |
| coord_frame space <Space></Space>
| |
| float rate <Rate></Rate>
| |
| boolean rotate_velocity <RotateVelocity></RotateVelocity>
| |
| </RotateX>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 34 Rotate Y <RotateY>
| |
| coord_frame space <Space></Space>
| |
| float rate <Rate></Rate>
| |
| boolean rotate_velocity <RotateVelocity></RotateVelocity>
| |
| </RotateY>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 35 Rotate Z <RotateZ>
| |
| coord_frame space <Space></Space>
| |
| float rate <Rate></Rate>
| |
| boolean rotate_velocity <RotateVelocity></RotateVelocity>
| |
| </RotateZ>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 36 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 37 Find Attractor <FindAttractor>
| |
| float delaytime <DelayTime></DelayTime>
| |
| </FindAttractor>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 38 Attract Gravity <AttractGravity>
| |
| float gravity <Gravity></Gravity>
| |
| float max_g <MaxG></MaxG>
| |
| boolean horiz_only <HorizontalOnly></HorizontalOnly>
| |
| </AttractGravity>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 39 Attract Homing <AttractHoming>
| |
| float turn_speed <TurnSpeed></TurnSpeed>
| |
| boolean predict_pos <PredictPosition></PredictPosition>
| |
| boolean horiz_only <HorizontalOnly></HorizontalOnly>
| |
| </AttractHoming>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 40 Attract Spring <AttractSpring>
| |
| float accel_rate <AccelRate></AccelRate>
| |
| float max_accel <MaxAccel></MaxAccel>
| |
| float desired_dist <DesiredDistance></DesiredDistance>
| |
| </AttractSpring>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 47 Apply Velocity <MoveLine />
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 48 Apply Gravity <MoveGravity>
| |
| float fraction <Fraction></Fraction>
| |
| </MoveGravity>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 49 Spiral <MoveSpiral>
| |
| float theta <Theta></Theta>
| |
| float radius <Radius></Radius>
| |
| float rotate_speed <RotateSpeed></RotateSpeed>
| |
| </MoveSpiral>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 50 Air Resistance <MoveResistance>
| |
| float resistance <Resistance></Resistance>
| |
| float minimum_vel <MinimumVelocity></MinimumVelocity>
| |
| <MoveResistance>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 51 Drift <MoveDrift>
| |
| float acceleration <Acceleration></Acceleration>
| |
| float max_speed <MaxSpeed></MaxSpeed>
| |
| float sideways_decay <SidewaysDecay></SidewaysDecay>
| |
| float dir_x <DirX></DirX>
| |
| float dir_y <DirY></DirY>
| |
| float dir_z <DirZ></DirZ>
| |
| coord_frame space <Space></Space>
| |
| </MoveDrift>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 52 Set Speed <SetVelocity>
| |
| float speed <Speed></Speed>
| |
| coord_frame space <Space></Space>
| |
| boolean no_sideways <NoSideways></NoSideways>
| |
| </SetVelocity>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 53 Spiral Tangent <SpiralTangent>
| |
| float theta <Theta></Theta>
| |
| float radius <Radius></Radius>
| |
| float rotate_speed <Rotate_speed></Rotate_speed>
| |
| </SpiralTangent>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 54 KillBeyondPoint <KillBeyondPoint>
| |
| axis direction <Direction></Direction>
| |
| float value <Value></Value>
| |
| </KillBeyondPoint>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 55 Create Effect <CollisionEffect>
| |
| string classname <Effect></Effect>
| |
| float wall_offset <WallOffset></WallOffset>
| |
| collision_orient orientation <Orientation></Orientation>
| |
| boolean attach <Attach></Attach>
| |
| </CollisionEffect>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 56 Stick To Wall <SitckToWall />
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 57 Bounce <Bounce>
| |
| float elastic_direct <ElasticDirect></ElasticDirect>
| |
| float elastic_glancing <ElasticGlancing></ElasticGlancing>
| |
| </Bounce>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 59 Chop Particle <Chop />
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 60 Impact Effect [[OBD_talk:Impt|<ImpactEffect>]]
| |
| string impact_type '''<font color="#0000FF" title="Name of impact, registered in ONIE. The looked up material is known from collided particle. Impt and Mtrl file must exist"><ImpactType></ImpactType></font>'''
| |
| impact_modifier impact_modifier <ImpactModifier></ImpactModifier>
| |
| </ImpactEffect>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 61 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 62 Unhide Particle '''<font color="#0000FF" title="unhide particle"><Show /></font>'''
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 63 Hide Particle '''<font color="#0000FF" title="hide particle, cannot collide with characters anymore, emitters stay active"><Hide /></font>'''
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 64 Set TextureTick <SetTextureTick>
| |
| float tick <Tick></Tick>
| |
| </SetTextureTick>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 65 Random TexFrame <RandomTextureFrame />
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 66 .. 69 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 70 Set Variable <SetVariable>
| |
| float var <Target></Target>
| |
| float value <Value></Value>
| |
| </SetVariable>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 71 Recalculate All <RecalculateAll />
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 72 Enable Above <EnableAbove>
| |
| action_index action <Action></Action>
| |
| float var <Var></Var>
| |
| float threshold <Threshold></Threshold>
| |
| </EnableAbove>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 73 Enable Below <EnableBelow>
| |
| action_index action <Action></Action>
| |
| float var <Var></Var>
| |
| float threshold <Threshold></Threshold>
| |
| </EnableBelow>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 74 Enable Now '''<font color="#0000FF" title="enables action X in Update event section"><EnableNow></font>'''
| |
| action_index action <Action>X</Action>
| |
| </EnableNow>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 75 Disable Now '''<font color="#0000FF" title="disables action X in Update event section"><DisableNow></font>'''
| |
| action_index action <Action>X</Action>
| |
| </DisableNow>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 76 -
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 77 SuperB Trigger <SuperBallTrigger>
| |
| emitter emitter_num <Emitter></Emitter>
| |
| float fuse_time <FuseTime></FuseTime>
| |
| </SuperBallTrigger>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 78 BreakableStop '''<font color="#0000FF" title="It is actually DontStopIfBreakable. See section: glass-piercing bullets"><StopIfBreakable /></font>'''
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 79 Avoid Walls <AvoidWalls>
| |
| float axis_x <AxisX></AxisX>
| |
| float axis_y <AxisY></AxisY>
| |
| float axis_z <AxisZ></AxisZ>
| |
| float cur_angle <CurrentAngle></CurrentAngle>
| |
| float t_until_check <TimeUntilCheck></TimeUntilCheck>
| |
| float sense_dist <SenseDistance></SenseDistance>
| |
| float turning_speed <TurningSpeed></TurningSpeed>
| |
| float turning_decay <TurningDecay></TurningDecay>
| |
| </AvoidWalls>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 80 Random Swirl <RandomSwirl>
| |
| float swirl_angle <SwirlAngle></SwirlAngle>
| |
| float swirl_baserate <SwirlBaseRate></SwirlBaseRate>
| |
| float swirl_deltarate <SwirlDeltaRate></SwirlDeltaRate>
| |
| float swirl_speed <SwirlSpeed></SwirlSpeed>
| |
| </RandomSwirl>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 81 Follow Player <FloatAbovePlayer>
| |
| float height <Height></Height>
| |
| </FloatAbovePlayer>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 82 Stop BelowSpeed <StopIfSlow>
| |
| float speed <Speed></Speed>
| |
| </StopIfSlow>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 83 Super Particle <SuperParticle>
| |
| float variable <Variable></Variable>
| |
| float base_value <VaseValue></VaseValue>
| |
| float delta_value <DeltaValue></DeltaValue>
| |
| float min_value <MinValue></MinValue>
| |
| float max_value <MaxValue></MaxValue>
| |
| </SuperParticle>
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 84 Stop Our Link <StopLink />
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 85 Check Link <CheckLink />
| |
| -------------------------------------------------------------------------------------------------------------
| |
| 86 Break Links To <BreakLink />
| |
| -------------------------------------------------------------------------------------------------------------
| |
| | |
| | |
| =glass-piercing bullets=
| |
| In the original game, w1_tap goes through normal glass and loses its dangerousness while a bullet of w8_mbo stays dangerous.
| |
| | |
| {| class="wikitable" width=100%
| |
| ! BINA3RAPw1_tap_p01.xml
| |
| ! BINA3RAPw8_mbo_p01.xml
| |
| |-
| |
| |valign="top"|
| |
| <HitWall>
| |
| <ImpactEffect>
| |
| <ImpactType>w1_tap</ImpactType>
| |
| <ImpactModifier>3</ImpactModifier>
| |
| </ImpactEffect>
| |
| <DamageEnvironment>
| |
| <Damage>13</Damage>
| |
| </DamageEnvironment>
| |
| <Chop />
| |
| </HitWall>
| |
| |
| |
| <HitWall>
| |
| <DamageEnvironment>
| |
| <Damage>50</Damage>
| |
| </DamageEnvironment>
| |
| '''<StopIfBreakable />'''
| |
| <ImpactEffect>
| |
| <ImpactType>w8_mbo</ImpactType>
| |
| <ImpactModifier>2</ImpactModifier>
| |
| </ImpactEffect>
| |
| <Die />
| |
| </HitWall>
| |
| |}
| |
| | |
| It turned out that <StopIfBreakable /> is actually doing the opposite, hence it should be called <DontStopIfBreakable />.
| |
| | |
| It's also important that <DamageEnvironment> is the first tag otherwise the glass won't break.
| |
| | |
| | |
| =notes on locklights=
| |
| {|BORDER=1 CELLSPACING=0 CELLPADDING=2 STYLE="border-style:solid; border-collapse:collapse; empty-cells:show; background-color:#f9f9f9;" WIDTH=100% ALIGN=center
| |
| |
| |
| [...]
| |
| <Tint>color</Tint>
| |
| [...]
| |
| <Variables>
| |
| <Color Name="color">0 0 0</Color>
| |
| <Float Name="blend">0</Float>
| |
| </Variables>
| |
| <Emitters />
| |
| <Events>
| |
| <Update>
| |
| '''<u><ColorInterpolate></u>'''
| |
| <Target>color</Target>
| |
| <font color="#AA0000"><Color0>255 0 0</Color0></font>
| |
| <font color="#00AA00"><Color1>0 255 0</Color1></font>
| |
| <Amount>blend</Amount>
| |
| </ColorInterpolate>
| |
| '''<font color="#AA0000"><u><SetVariable></u>'''
| |
| <Target>blend</Target>
| |
| <Value>0</Value>
| |
| </SetVariable></font>
| |
| '''<font color="#00AA00"><u><SetVariable></u>'''
| |
| <Target>blend</Target>
| |
| <Value>1</Value>
| |
| </SetVariable></font>
| |
| </Update>
| |
| <Start>
| |
| <font color="#AA0000"><DisableNow>
| |
| <Action>1</Action>
| |
| </DisableNow></font>
| |
| <font color="#00AA00"><EnableNow>
| |
| <Action>2</Action>
| |
| </EnableNow></font>
| |
| </Start>
| |
| <Stop>
| |
| <font color="#00AA00"><DisableNow>
| |
| <Action>2</Action>
| |
| </DisableNow></font>
| |
| <font color="#AA0000"><EnableNow>
| |
| <Action>1</Action>
| |
| </EnableNow></font>
| |
| </Stop>
| |
| </Events>
| |
| |valign=top|
| |
| Locklights are particle which indicate whether a door is locked or not.
| |
| | |
| | |
| They are presented in [[OBD:ONLV|ONLV]] (ENVP section) with different names but are all called from "BINA3RAPlocklight.xml" and "BINA3RAPlocklight2.xml".
| |
| | |
| | |
| The locklight becomes created on level start.
| |
| | |
| | |
| The Update event has three action: '''<u>first one has ID 0</u>''', second has '''<u><font color="#AA0000">ID 1</font></u>''', and third action has '''<u><font color="#00AA00">ID 2</font></u>'''.
| |
| | |
| | |
| <font color="#777777"><Target></font>color<font color="#777777"></Target></font> serves as output and is used by the <tint> tag.
| |
| |}
| |
| | |
| '''The BINA3RAPlocklight.xml original file doesn't allow new events because of its buggy behavior.''' Gumby solved the problem by putting the "SetVariable" code into the start and stop event. During a final test additional code showed accidentally that particles identifies doors as characters. A small vid can be seen [http://www.youtube.com/watch?v=kY8uH5vRt3Q here.]
| |
| | |
| {|{{table}}
| |
| |-BGCOLOR="#E9E9E9"
| |
| |
| |
| | |
| {{divhide|See used code here > }}
| |
| | |
| <?xml version="1.0" encoding="utf-8"?>
| |
| <Oni Version="0.9.52.0">
| |
| <Particle Name="locklight">
| |
| <Options>
| |
| <Lifetime>0</Lifetime>
| |
| <DisableDetailLevel>Never</DisableDetailLevel>
| |
| <Decorative>true</Decorative>
| |
| <CollideWithWalls>false</CollideWithWalls>
| |
| <CollideWithChars>true</CollideWithChars>
| |
| <InitiallyHidden>false</InitiallyHidden>
| |
| <DrawAsSky>false</DrawAsSky>
| |
| <DontAttractThroughWalls>false</DontAttractThroughWalls>
| |
| <ExpireOnCutscene>false</ExpireOnCutscene>
| |
| <DieOnCutscene>false</DieOnCutscene>
| |
| <LockPositionToLink>false</LockPositionToLink>
| |
| <CollisionRadius>7</CollisionRadius>
| |
| <AIDodgeRadius>0</AIDodgeRadius>
| |
| <AIAlertRadius>0</AIAlertRadius>
| |
| <FlyBySoundName />
| |
| </Options>
| |
| <Properties>
| |
| <HasVelocity>false</HasVelocity>
| |
| <HasOrientation>true</HasOrientation>
| |
| <HasPositionOffset>false</HasPositionOffset>
| |
| <HasAttachmentMatrix>true</HasAttachmentMatrix>
| |
| <HasUnknown>false</HasUnknown>
| |
| <HasDecalState>false</HasDecalState>
| |
| <HasTextureStartTick>false</HasTextureStartTick>
| |
| <HasTextureTick>false</HasTextureTick>
| |
| <HasDamageOwner>false</HasDamageOwner>
| |
| <HasContrailData>false</HasContrailData>
| |
| <HasLensFlareState>true</HasLensFlareState>
| |
| <HasAttractor>false</HasAttractor>
| |
| <HasCollisionCache>true</HasCollisionCache>
| |
| </Properties>
| |
| <Appearance>
| |
| <DisplayType>RotatedSprite</DisplayType>
| |
| <TexGeom>lensflare11</TexGeom>
| |
| <Invisible>false</Invisible>
| |
| <IsContrailEmitter>false</IsContrailEmitter>
| |
| <ScaleToVelocity>false</ScaleToVelocity>
| |
| <Scale>2</Scale>
| |
| <UseSeparateYScale>false</UseSeparateYScale>
| |
| <YScale>1</YScale>
| |
| <Rotation>0</Rotation>
| |
| <Alpha>
| |
| <Random Min="0.8" Max="0.9" />
| |
| </Alpha>
| |
| <XOffset>0</XOffset>
| |
| <XShorten>0</XShorten>
| |
| <UseSpecialTint>false</UseSpecialTint>
| |
| <Tint>color</Tint>
| |
| <FadeOutOnEdge>false</FadeOutOnEdge>
| |
| <OneSidedEdgeFade>false</OneSidedEdgeFade>
| |
| <EdgeFadeMin>0.2</EdgeFadeMin>
| |
| <EdgeFadeMax>1</EdgeFadeMax>
| |
| <MaxContrailDistance>0</MaxContrailDistance>
| |
| <LensFlare>true</LensFlare>
| |
| <LensFlareDistance>2</LensFlareDistance>
| |
| <LensFlareFadeInFrames>5</LensFlareFadeInFrames>
| |
| <LensFlareFadeOutFrames>10</LensFlareFadeOutFrames>
| |
| <DecalFullBrightness>false</DecalFullBrightness>
| |
| <MaxDecals>100</MaxDecals>
| |
| <DecalFadeFrames>60</DecalFadeFrames>
| |
| <DecalWrapAngle>60</DecalWrapAngle>
| |
| </Appearance>
| |
| <Attractor>
| |
| <Target>None</Target>
| |
| <Selector>Distance</Selector>
| |
| <Class />
| |
| <MaxDistance>150</MaxDistance>
| |
| <MaxAngle>30</MaxAngle>
| |
| <AngleSelectMin>3</AngleSelectMin>
| |
| <AngleSelectMax>20</AngleSelectMax>
| |
| <AngleSelectWeight>3</AngleSelectWeight>
| |
| </Attractor>
| |
| <Variables>
| |
| <Color Name="color">0 0 0</Color>
| |
| <Float Name="blend">0</Float>
| |
| </Variables>
| |
| <Emitters>
| |
| <Emitter>
| |
| <Class>h2h_ninflash_e01</Class>
| |
| <Flags>IncreaseParticleCount TurnOffAtTreshold</Flags>
| |
| <TurnOffTreshold>1</TurnOffTreshold>
| |
| <Probability>1</Probability>
| |
| <Copies>1</Copies>
| |
| <LinkTo />
| |
| <Rate>
| |
| <Instant />
| |
| </Rate>
| |
| <Position>
| |
| <Point />
| |
| </Position>
| |
| <Direction>
| |
| <Straight />
| |
| </Direction>
| |
| <Speed>
| |
| <Uniform>
| |
| <Speed>0</Speed>
| |
| </Uniform>
| |
| </Speed>
| |
| <Orientation>LocalPosY</Orientation>
| |
| <OrientationUp>LocalPosZ</OrientationUp>
| |
| </Emitter>
| |
| </Emitters>
| |
| <Events>
| |
| <Update>
| |
| <ColorInterpolate>
| |
| <Target>color</Target>
| |
| <Color0>255 0 0</Color0>
| |
| <Color1>0 255 0</Color1>
| |
| <Amount>blend</Amount>
| |
| </ColorInterpolate>
| |
| </Update>
| |
| <Start>
| |
| <SetVariable>
| |
| <Target>blend</Target>
| |
| <Value>1</Value>
| |
| </SetVariable>
| |
| </Start>
| |
| <Stop>
| |
| <SetVariable>
| |
| <Target>blend</Target>
| |
| <Value>0</Value>
| |
| </SetVariable>
| |
| </Stop>
| |
| <HitCharacter>
| |
| <EmitActivate>
| |
| <Emitter>0</Emitter>
| |
| </EmitActivate>
| |
| </HitCharacter>
| |
| </Events>
| |
| </Particle>
| |
| </Oni>
| |
| <!-- from one bug to another, great... -->
| |
| {{divhide|end}}
| |
| |}
| |
| | |
| | |
| =how to set up decorative decals=
| |
| What are decals?
| |
| : Decals are images glued onto a wall or ground.
| |
| : They are used for additional level design and to show weapon damage on surroundings.
| |
| : The following steps will show you how to set up a piece of design (poster/warning sign/whatever) into a level.
| |
| | |
| | |
| ==step 1 - extending the particle collection==
| |
| * [[OBD_talk:BINA/OBJC/PART|Particle collections]] are level specific.
| |
| * <Position> .. Choose a position for your decal.
| |
| : '''The maximal tolerance distance counts 10 units.''' Let's say the ground height (y) is 45 and the particle is spawned at 55 then this is the maximal tolerance; 56 wouldn't work.
| |
| : '''"chr_debug_characters = 1"''' helps you. But note that the y value is not the head's or pelvis' height, it is at the deepest point of your feet.
| |
| * <Rotation> .. '''see [[#decal_facing|"decal facing"]]'''
| |
| * <Class> .. this is your [[#step_2_-_creating_BINA3RAP_file|particle file]]
| |
| * <Tag> .. optional; '''used when you want to activate or deactivate decals or other particle via BSL'''
| |
| * <Flags> .. "not initially created" flag (2) or nothing (1; 4; 8)
| |
| * <XScale> .. Scaling of decal's X dimension on ''individual level'' (you can use the 3RAP's own scaling (<Scale>) for accumulative scaling (this would affect all decals in the collection))
| |
| | |
| <Object Id="11291" Type="PART">
| |
| <Header>
| |
| <Flags>0</Flags>
| |
| <Position>-988 65 1521</Position>
| |
| <Rotation>270 180 0</Rotation>
| |
| </Header>
| |
| <OSD>
| |
| [[#step_2_-_creating_BINA3RAP_file|<Class>]]'''<font color="#00AA00">decal_particle_name</font>'''</Class>
| |
| [[#step_4_-_show_or_hide_decals_via_BSL|<Tag>]]'''<font color="#0000FF">decal_BSL_name</font>'''</Tag>
| |
| <Flags>8</Flags>
| |
| <Decal>
| |
| <XScale>20</XScale>
| |
| <YScale>20</YScale>
| |
| </Decal>
| |
| </OSD>
| |
| </Object>
| |
| | |
| | |
| ===decal facing===
| |
| : Place yourself towards the point where you want to have the decal, face it. It's important that your body stands accurate, not your head. Then type "chr_debug_characters = 1" into the developer console and you will know the facing. Write it down, compare with the right table and chose your xyz rotation.
| |
| : '''PS:''' In matter of spawning/displaing, the exact rotation is not needed. Oni has a 66 degree tolerance.
| |
| : '''PPS:''' <DecalWrapAngle> (in BINA3RAP file) is usually set to 60. For hard edges you might want to increase the value.
| |
| | |
| {| border=0 cellspacing=20 cellpadding=0 align=right
| |
| |
| |
| [http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/DecalWrapAngle.jpg http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/DecalWrapAngle_TN.jpg]
| |
| | |
| Test for a "hard edge".
| |
| |}
| |
| '''wall decals'''
| |
| x y z
| |
| facing 0 degree: 270 | 0 | 0
| |
| facing 90 degree: 270 | 90 | 0
| |
| facing 180 degree: 270 | 180 | 0
| |
| facing 270 degree: 270 | 270 | 0
| |
| '''ground decals'''
| |
| x y z
| |
| facing 0 degree: 0 | 0 | 0
| |
| facing 90 degree: 0 | 90 | 0
| |
| facing 180 degree: 0 | 180 | 0
| |
| facing 270 degree: 0 | 270 | 0
| |
| | |
| | |
| ==step 2 - creating BINA3RAP file==
| |
| * file name in this example: "'''BINA3RAP<font color="#00AA00">decal_particle_name</font>.xml'''"
| |
| * <Version> .. '''<font color="#FF0000">has to be the same version as your own onisplit, change it if necessary</font>
| |
| * <font color="#777777"><CollideWithChars> .. is ignored by decals</font>
| |
| * <HasDecalState>true .. is needed
| |
| * <DisplayType>Decal .. is needed
| |
| * <TexGeom> .. links to [[#step_3_-_creating_TXMP_file|TXMP file]]
| |
| * <font color="#777777"><Alpha> .. alpha level is ignored when TXMP has adaptiveAlpha flag</font>
| |
| * <font color="#777777"><Tint> .. is ignored by decals</font>
| |
| | |
| <?xml version="1.0" encoding="utf-8"?>
| |
| <Oni '''<font color="#FF0000">Version="0.9.41.0"</font>>'''
| |
| <Particle Name="'''<font color="#00AA00">decal_particle_name</font>'''">
| |
| <Options>
| |
| <Lifetime>0</Lifetime>
| |
| <DisableDetailLevel>Never</DisableDetailLevel>
| |
| <Decorative>true</Decorative>
| |
| <CollideWithWalls>false</CollideWithWalls>
| |
| <CollideWithChars>false</CollideWithChars>
| |
| <InitiallyHidden>false</InitiallyHidden>
| |
| <DrawAsSky>false</DrawAsSky>
| |
| <DontAttractThroughWalls>false</DontAttractThroughWalls>
| |
| <ExpireOnCutscene>false</ExpireOnCutscene>
| |
| <DieOnCutscene>false</DieOnCutscene>
| |
| <LockPositionToLink>false</LockPositionToLink>
| |
| <CollisionRadius>0</CollisionRadius>
| |
| <AIDodgeRadius>0</AIDodgeRadius>
| |
| <AIAlertRadius>0</AIAlertRadius>
| |
| <FlyBySoundName />
| |
| </Options>
| |
| <Properties>
| |
| <HasVelocity>false</HasVelocity>
| |
| <HasOrientation>false</HasOrientation>
| |
| <HasPositionOffset>false</HasPositionOffset>
| |
| <HasAttachmentMatrix>false</HasAttachmentMatrix>
| |
| <HasUnknown>false</HasUnknown>
| |
| '''<HasDecalState>true</HasDecalState>'''
| |
| <HasTextureStartTick>false</HasTextureStartTick>
| |
| <HasTextureTick>false</HasTextureTick>
| |
| <HasDamageOwner>false</HasDamageOwner>
| |
| <HasContrailData>false</HasContrailData>
| |
| <HasLensFlareState>false</HasLensFlareState>
| |
| <HasAttractor>false</HasAttractor>
| |
| <HasCollisionCache>false</HasCollisionCache>
| |
| </Properties>
| |
| <Appearance>
| |
| '''<DisplayType>Decal</DisplayType>'''
| |
| [[#step_3_-_creating_TXMP_file|<TexGeom>]]'''<font color="#AA00AA">animated_texture</font>'''</TexGeom>
| |
| <Invisible>false</Invisible>
| |
| <IsContrailEmitter>false</IsContrailEmitter>
| |
| <ScaleToVelocity>false</ScaleToVelocity>
| |
| <Scale>1</Scale>
| |
| <UseSeparateYScale>false</UseSeparateYScale>
| |
| <YScale>1</YScale>
| |
| <Rotation>0</Rotation>
| |
| <Alpha>1</Alpha>
| |
| <XOffset>0</XOffset>
| |
| <XShorten>0</XShorten>
| |
| <UseSpecialTint>false</UseSpecialTint>
| |
| <Tint>255 255 255</Tint>
| |
| <FadeOutOnEdge>false</FadeOutOnEdge>
| |
| <OneSidedEdgeFade>false</OneSidedEdgeFade>
| |
| <EdgeFadeMin>0</EdgeFadeMin>
| |
| <EdgeFadeMax>0.5</EdgeFadeMax>
| |
| <MaxContrailDistance>0</MaxContrailDistance>
| |
| <LensFlare>false</LensFlare>
| |
| <LensFlareDistance>0</LensFlareDistance>
| |
| <LensFlareFadeInFrames>0</LensFlareFadeInFrames>
| |
| <LensFlareFadeOutFrames>0</LensFlareFadeOutFrames>
| |
| <DecalFullBrightness>false</DecalFullBrightness>
| |
| <MaxDecals>100</MaxDecals>
| |
| <DecalFadeFrames>60</DecalFadeFrames>
| |
| <DecalWrapAngle>60</DecalWrapAngle>
| |
| </Appearance>
| |
| <Attractor>
| |
| <Target>None</Target>
| |
| <Selector>Distance</Selector>
| |
| <Class />
| |
| <MaxDistance>150</MaxDistance>
| |
| <MaxAngle>30</MaxAngle>
| |
| <AngleSelectMin>3</AngleSelectMin>
| |
| <AngleSelectMax>20</AngleSelectMax>
| |
| <AngleSelectWeight>3</AngleSelectWeight>
| |
| </Attractor>
| |
| <Variables />
| |
| <Emitters />
| |
| <Events />
| |
| </Particle>
| |
| </Oni>
| |
| | |
| | |
| ==step 3 - creating TXMP file==
| |
| * file name in this example: "'''TXMP<font color="#AA00AA">animated_texture</font>.xml'''"
| |
| : Of cause the particle file doesn't has to contain an animated image. It's just meant to remind you that this possibility exist.
| |
| * <Version> .. '''<font color="#FF0000">has to be the same version as your own onisplit, change it if necessary</font>
| |
| | |
| {| border=0 cellspacing=20 cellpadding=0 align=right
| |
| |
| |
| [http://www.youtube.com/watch?v=ifHv5S-npqw&feature=channel_page http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/animated_decal.jpg]
| |
| |}
| |
| | |
| <?xml version="1.0" encoding="utf-8"?>
| |
| <Oni '''<font color="#FF0000">Version="0.9.41.0"</font>>'''
| |
| <Texture>
| |
| <Flags>HasMipMaps AnimUseLocalTime AnimBackToBack AdditiveBlend</Flags>
| |
| <Format>RGB555</Format>
| |
| <Speed>4</Speed>
| |
| <Image>TXMPanimated_tex_part_000.tga</Image>
| |
| <Image>TXMPanimated_tex_part_001.tga</Image>
| |
| <Image>TXMPanimated_tex_part_002.tga</Image>
| |
| <Image>TXMPanimated_tex_part_003.tga</Image>
| |
| <Image>TXMPanimated_tex_part_004.tga</Image>
| |
| <Image>TXMPanimated_tex_part_005.tga</Image>
| |
| <Image>TXMPanimated_tex_part_006.tga</Image>
| |
| <Image>TXMPanimated_tex_part_007.tga</Image>
| |
| <Image>TXMPanimated_tex_part_008.tga</Image>
| |
| <Image>TXMPanimated_tex_part_009.tga</Image>
| |
| <Image>TXMPanimated_tex_part_010.tga</Image>
| |
| </Texture>
| |
| </Oni>
| |
| | |
| | |
| ==step 4 - show or hide decals via BSL==
| |
| fork respawnable_decals in your main function
| |
| var bool first = 1;
| |
|
| |
| func respawnable_decals
| |
| {
| |
| chr_debug_characters = 1
| |
| dmsg "( punch to hide a few decals now )"
| |
| ### decal is already presented so we begin with stop function
| |
| fork kill_decal
| |
| }
| |
|
| |
| func kill_decal
| |
| {
| |
| sleep 30
| |
| chr_wait_animtype 0 punch
| |
| dmsg "( punch detected; [r.deactivating decals now] )"
| |
| '''### has effect at all particle with chosen tag'''
| |
| ### in the vid, obviously the two decals use the same tag
| |
| particle '''<font color="#0000FF">decal_BSL_name</font>''' kill
| |
| if (first eq 1)
| |
| {
| |
| dmsg "( kick to show a few decals now )"
| |
| first = 0;
| |
| sleep 60
| |
| }
| |
| fork create_decal
| |
| }
| |
|
| |
| func create_decal
| |
| {
| |
| sleep 30
| |
| chr_wait_animtype 0 kick
| |
| dmsg "( kick detected; [b.activating decals now] )"
| |
| particle '''<font color="#0000FF">decal_BSL_name</font>''' create
| |
| fork kill_decal
| |
| }
| |
| | |
| | |
| =how to set up decorative character items=
| |
| (Based on geyser's "silly world" experiment.)
| |
| | |
| Marks, bags, goggles, decorative LSI, flash lights and other equipment could individualize characters by using a (BSL-triggered) particle workaround.
| |
| | |
| | |
| ==step 1: ONCC modifications==
| |
| First we need to create a connection to the character. For this, we use the Daodan particle system to some degree.
| |
| <HasDaodanPowers>'''1'''</HasDaodanPowers>
| |
| Now it's enabled for this character. Next we register our item (hold by particle) in the ONCP section.
| |
| <ONCPParticle>
| |
| <Name>'''super'''_shades</Name>
| |
| <Type>silly_shades</Type>
| |
| [[OBD:TRIA#Bones|<BodyPart>]]10</BodyPart>
| |
| </ONCPParticle>
| |
| <Name> As long as '''super''' stands at beginning, the further naming is unimportant.<br><Type> This is a link to the particle file.<br><BodyPart> This is the body part where the particle is attached to. Position fine tuning can be done in M3GM's PNTA section, <Positions>.
| |
| | |
| | |
| ==step 2: creating the item files==
| |
| * BINA3RAPsilly_glasses.xml
| |
| : Needed modifications:
| |
| <Lifetime>0</Lifetime>
| |
|
| |
| <HasAttachmentMatrix>true</HasAttachmentMatrix>
| |
|
| |
| <DisplayType>Geometry</DisplayType>
| |
|
| |
| <TexGeom>'''silly_shades'''</TexGeom>
| |
|
| |
| <Events>
| |
| <Start>
| |
| <Show />
| |
| </Start>
| |
| <Stop>
| |
| <Hide />
| |
| </Stop>
| |
| </Events>
| |
| * M3GM'''silly_shades'''.xml
| |
| <Texture>TXMP'''silly_shades_tex'''</Texture>
| |
| * TXMP'''silly_shades_tex'''.xml
| |
| | |
| | |
| ==step 3: preparing the BSL stuff==
| |
| * BINACJBOCharacter.xml
| |
| <Spawn>silly_setup</Spawn>
| |
| | |
| * shpadoinkle.bsl
| |
| #character spawn function
| |
| func silly_setup(string name) {
| |
| chr_lock_active(name)
| |
| chr_super(name, 1)
| |
| sleep 2
| |
| chr_super(name, 0)
| |
| }
| |
| | |
| {| border=0 cellspacing=20 cellpadding=0 align=right
| |
| |
| |
| [http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/silly_shades.png http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XML_modding/silly_shades_TN.png]<br>Karen: "Ready for Matrix. HAR-HAR"
| |
| |}
| |
| : silly_setup will be triggered every time a character is spawned with this link in BINACJBOCharacter.xml
| |
| : Only AI would need chr_lock_active.
| |
| : chr_super becomes disabled again to prevent other Daodan effects (in case our character would had a chenille or other visuals). We don't have to worry about the item, its live time was set to 0 (infinity). (chr_super 0 only hides the particle, it doesn't kill it.)
| |
| :
| |
| | |
| func main {
| |
| # [...]
| |
| p3_callevent silly_glasses '''2'''
| |
| # [...]
| |
| }
| |
| | |
| '''2''' corresponds to <Start> tag and '''3''' corresponds to <Stop> tag in BINA3RAPsilly_shades.xml
| |
| This can ''switch on and off'' the item. Other effects could be triggered by the free remaining numbers. A collection of events and their numbers can be seen [[OBD_talk:BINA/OBJC/PART|HERE]].
| |
| | |
| ==extra demo==
| |
| ''For all Gundam Seed fans out there: Phase Shift shades.'' ^_^
| |
| Nah, the texture of such object cannot become replaced by another. But by using three different shades, we can create this illusion. There are blue shades. A ''pair'' that uses an animated texture. And a red pair. The animated pair is only temporary used. [http://www.youtube.com/watch?v=XbOb0i5StDk Here's a vid.]
| |
| | |
| func spawn_karen {
| |
| chr_super karen 1
| |
| ### all three shades particle created
| |
| sleep 2
| |
| ### now but we need to hide them
| |
| chr_super karen 0
| |
| ### show only blue shades for the start
| |
| p3_callevent shades_blue 2
| |
| }
| |
|
| |
| func phase_shift_shades {
| |
| p3_callevent shades_blue 3
| |
| p3_callevent shades_blue_red 2
| |
| sleep 20
| |
| p3_callevent shades_blue_red 3
| |
| p3_callevent shades_red 2
| |
| }
| |