AE:Glass: Difference between revisions

From OniGalore
Jump to navigation Jump to search
m (cat.d)
(check)
Line 20: Line 20:
;See it in action
;See it in action
:[http://video.google.com/videoplay?docid=3161530428428979921 Google video] by [[User:EdT|EdT]]
:[http://video.google.com/videoplay?docid=3161530428428979921 Google video] by [[User:EdT|EdT]]
;Get it as a patch
;Get it as a .oni file
:[http://svn.oni2.net/onk/level0_Final/BINA/0/3RAPglass_shard.BINA HERE] (it's not actually there yet ^^)
:http://gumby.oni2.net/AE/oni%20files/glass/BINA3RAPglass_shard.oni (already in AE, does 8 damage)
:When it's there, you'll just import it over the original data of 3RAPglass_shard.BINA, in OUP's '''Binary .raw editor'''
;Get the XML version
:http://gumby.oni2.net/AE/oni%20files/glass/XML/BINA3RAPglass_shard.xml
;Do it yourself
;Do it yourself
* Open '''level0_Final.dat''' with [[OBD:OUP|OniUnPacker]]
* Use the Binary.raw editor to select the file '''3RAPglass_shard.BINA'''
* Find the 0x0B at 0x10B4 (0xB=13 is the ID of the "Die" event)
**change it to 0x1A (0x1A is the ID of the "Damage Char" event)
* Find the 0x00 at 0x117C (unused)
**change it to 0x03 (type of "damage" : float)
* Find the 0x00000000 at 0x1180
**change it to 0x00000040 (value of "damage" : 2.0)
**
http://edt.oni2.net/images/deadlyglass.jpg


#Extract the BINA3RAPglass_shard.oni file as .xml.
#Add the part in red
#Change the "8" in <Damage>8</Damage> to what you want the damage to be.
<Font size = 2>
<?xml version="1.0" encoding="utf-8"?>
<Oni Version="0.9.32.0">
    <Particle Name="glass_shard">
        <Options>
            <Lifetime>10</Lifetime>
            <DisableDetailLevel>Never</DisableDetailLevel>
            <Decorative>true</Decorative>
            <CollideWithWalls>true</CollideWithWalls>
            <CollideWithChars>true</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>true</HasVelocity>
            <HasOrientation>true</HasOrientation>
            <HasPositionOffset>false</HasPositionOffset>
            <HasAttachmentMatrix>false</HasAttachmentMatrix>
            <HasUnknown>false</HasUnknown>
            <HasDecalState>false</HasDecalState>
            <HasTextureStartTick>true</HasTextureStartTick>
            <HasTextureTick>true</HasTextureTick>
            <HasDamageOwner>false</HasDamageOwner>
            <HasContrailData>false</HasContrailData>
            <HasLensFlareState>false</HasLensFlareState>
            <HasAttractor>false</HasAttractor>
            <HasCollisionCache>false</HasCollisionCache>
        </Properties>
        <Appearance>
            <DisplayType>Flat</DisplayType>
            <TexGeom>glass_shard</TexGeom>
            <Invisible>false</Invisible>
            <IsContrailEmitter>false</IsContrailEmitter>
            <ScaleToVelocity>false</ScaleToVelocity>
            <Scale>2.8</Scale>
            <UseSeparateYScale>false</UseSeparateYScale>
            <YScale>1</YScale>
            <Rotation>0</Rotation>
            <Alpha>1</Alpha>
            <XOffset>0</XOffset>
            <XShorten>0</XShorten>
            <UseSpecialTint>false</UseSpecialTint>
            <Tint>128 128 128</Tint>
            <FadeOutOnEdge>false</FadeOutOnEdge>
            <OneSidedEdgeFade>false</OneSidedEdgeFade>
            <EdgeFadeMin>0</EdgeFadeMin>
            <EdgeFadeMax>0</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>
            <Float Name="rotate_x">
                <BellCurve Mean="0" StdDev="50" />
            </Float>
            <Float Name="rotate_z">
                <BellCurve Mean="0" StdDev="50" />
            </Float>
        </Variables>
        <Emitters />
        <Events>
            <Update>
                <MoveLine />
                <MoveGravity>
                    <Fraction>0.4</Fraction>
                </MoveGravity>
                <RotateZ>
                    <Space>0</Space>
                    <Rate>rotate_z</Rate>
                    <RotateVelocity>0</RotateVelocity>
                </RotateZ>
                <RotateX>
                    <Space>0</Space>
                    <Rate>rotate_x</Rate>
                    <RotateVelocity>0</RotateVelocity>
                </RotateX>
            </Update>
            <HitWall>
                <ImpulseSound>
                    <Sound>glass_small</Sound>
                </ImpulseSound>
                <CollisionEffect>
                    <Effect>glass_hit</Effect>
                    <WallOffset>0.01</WallOffset>
                    <Orientation>2</Orientation>
                    <Attach>1</Attach>
                </CollisionEffect>
                <Die />
            </HitWall><FONT COLOR="red">
            <HitCharacter>
                <CollisionEffect>
                    <Effect>glass_hit</Effect>
                    <WallOffset>0.01</WallOffset>
                    <Orientation>2</Orientation>
                    <Attach>1</Attach>
                </CollisionEffect>
                <DamageChar>
                    <Damage>8</Damage>
                </DamageChar>
                <Die />
            </HitCharacter></FONT>
            <Lifetime>
                <FadeOut>
                    <TimeToDie>1</TimeToDie>
                </FadeOut>
            </Lifetime>
        </Events>
    </Particle>
</Oni>
</Font>
If you want to get really fancy, try changing <Damage>8</Damage> into something like...
<Font size = 2>
    <Damage>
        <Random Min="8" Max="10" />
    </Damage>
</Font>
This will make glass do random damage between 8 and 10 health points.


----
----

Revision as of 09:55, 23 November 2008

Oni ni Kanabô
ONK.png

This is for various modifications of Oni's glass and its behaviour.

Glass-breaking combos will be covered here as a specific case of melee modding
Overview

We all know most of Oni's glass can be shot. However :

  • glass can not be broken by combos or thrown/falling enemies
  • glass can not be broken by some weapons (most annoyingly, the Scram Cannon)
  • not all see-through surfaces are flagged as glass : they can't be shot

Ways of improving the above are :

  • to affect glass-breaking particles to TRAM so that specific animations can break glass
  • to modify specific projectiles (e.g. Scram missiles) so that they can break glass
  • to track down specific parts of the environment, and flag them as (breakable) glass

Deadly glass

Description
Glass shards can be modified so that they hurt nearby characters when falling.
See it in action
Google video by EdT
Get it as a .oni file
http://gumby.oni2.net/AE/oni%20files/glass/BINA3RAPglass_shard.oni (already in AE, does 8 damage)
Get the XML version
http://gumby.oni2.net/AE/oni%20files/glass/XML/BINA3RAPglass_shard.xml
Do it yourself
  1. Extract the BINA3RAPglass_shard.oni file as .xml.
  2. Add the part in red
  3. Change the "8" in <Damage>8</Damage> to what you want the damage to be.

<?xml version="1.0" encoding="utf-8"?>
<Oni Version="0.9.32.0">
   <Particle Name="glass_shard">
       <Options>
           <Lifetime>10</Lifetime>
           <DisableDetailLevel>Never</DisableDetailLevel>
           <Decorative>true</Decorative>
           <CollideWithWalls>true</CollideWithWalls>
           <CollideWithChars>true</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>true</HasVelocity>
           <HasOrientation>true</HasOrientation>
           <HasPositionOffset>false</HasPositionOffset>
           <HasAttachmentMatrix>false</HasAttachmentMatrix>
           <HasUnknown>false</HasUnknown>
           <HasDecalState>false</HasDecalState>
           <HasTextureStartTick>true</HasTextureStartTick>
           <HasTextureTick>true</HasTextureTick>
           <HasDamageOwner>false</HasDamageOwner>
           <HasContrailData>false</HasContrailData>
           <HasLensFlareState>false</HasLensFlareState>
           <HasAttractor>false</HasAttractor>
           <HasCollisionCache>false</HasCollisionCache>
       </Properties>
       <Appearance>
           <DisplayType>Flat</DisplayType>
           <TexGeom>glass_shard</TexGeom>
           <Invisible>false</Invisible>
           <IsContrailEmitter>false</IsContrailEmitter>
           <ScaleToVelocity>false</ScaleToVelocity>
           <Scale>2.8</Scale>
           <UseSeparateYScale>false</UseSeparateYScale>
           <YScale>1</YScale>
           <Rotation>0</Rotation>
           <Alpha>1</Alpha>
           <XOffset>0</XOffset>
           <XShorten>0</XShorten>
           <UseSpecialTint>false</UseSpecialTint>
           <Tint>128 128 128</Tint>
           <FadeOutOnEdge>false</FadeOutOnEdge>
           <OneSidedEdgeFade>false</OneSidedEdgeFade>
           <EdgeFadeMin>0</EdgeFadeMin>
           <EdgeFadeMax>0</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>
           <Float Name="rotate_x">
               <BellCurve Mean="0" StdDev="50" />
           </Float>
           <Float Name="rotate_z">
               <BellCurve Mean="0" StdDev="50" />
           </Float>
       </Variables>
       <Emitters />
       <Events>
           <Update>
               <MoveLine />
               <MoveGravity>
                   <Fraction>0.4</Fraction>
               </MoveGravity>
               <RotateZ>
                   <Space>0</Space>
                   <Rate>rotate_z</Rate>
                   <RotateVelocity>0</RotateVelocity>
               </RotateZ>
               <RotateX>
                   <Space>0</Space>
                   <Rate>rotate_x</Rate>
                   <RotateVelocity>0</RotateVelocity>
               </RotateX>
           </Update>
           <HitWall>
               <ImpulseSound>
                   <Sound>glass_small</Sound>
               </ImpulseSound>
               <CollisionEffect>
                   <Effect>glass_hit</Effect>
                   <WallOffset>0.01</WallOffset>
                   <Orientation>2</Orientation>
                   <Attach>1</Attach>
               </CollisionEffect>
               <Die />
           </HitWall>
           <HitCharacter>
               <CollisionEffect>
                   <Effect>glass_hit</Effect>
                   <WallOffset>0.01</WallOffset>
                   <Orientation>2</Orientation>
                   <Attach>1</Attach>
               </CollisionEffect>
               <DamageChar>
                   <Damage>8</Damage>
               </DamageChar>
               <Die />
           </HitCharacter>
           <Lifetime>
               <FadeOut>
                   <TimeToDie>1</TimeToDie>
               </FadeOut>
           </Lifetime>
       </Events>
   </Particle>
</Oni>

If you want to get really fancy, try changing <Damage>8</Damage> into something like...

   <Damage>
       <Random Min="8" Max="10" />
   </Damage>

This will make glass do random damage between 8 and 10 health points.



Glass-breaking combos

Basic hack description
The glass can be broken by kicks after modifying the 3RAPh2h_dust_p01.BINA file.
See it in action
A few movies by geyser (WMV) :
A snapshot by EdT :

ss8.jpg

Get it as a patch
No link so far, but there will be downloadable particle files (trails rather than dust) as well as TRAM particle tracks specifically adapted for them.
Do it yourself (basic hack using the dust spawned by some combos)
  • Open level0_Final.dat with OniUnPacker
  • Use the Binary.raw editor to select the file 3RAPh2h_dust_p01.BINA
  • Look at the chunk between 0x550 and 0x6F8
  • Go to the 0x00 at 0x550 (0x00=0 is the ID of the "Linear Change" event)
    • change it to 0x1E (0x1E=30 is the ID of the "Glass Charge" event)
  • Go to the 0x00 at 0x0x634
    • change it to 0x03 (type for the "radius" parameter of "Glass Charge" : float)
  • Go to the 0x00000000 at 0x0x638
    • change it to 0x00000040 or 0x00000041 (value for the "radius" parameter of "Glass Charge" : 2.0 or 8.0)
NOTE TO EXPERTS : we've left the first argument of set 2 ("blast-vel" for "Glass Charge") as is. "Linear Change"s "rate" was of the right type (float), and the value (6.0) is nothing extreme.
Look at the second variable of h2h_dust_p01 : it's the 0x34=52 byte chunk between 0x340 and 0x374.
There's the name ("alpha") right at the start. The initialisation value you can see at 0x35C (it's a float, since the type at 0x358 is 0x03).
If we just make this float 0.125 (make the 0x00000000 at 0x35C a 0x0000003E) we'll have 12.5%-transparent dust right away.

The changes will look like this:

breakglass.jpg




Glass-breaking Scram Cannon

Getting there... that's almost a weapon-modding issue.




Flagging environment as glass

Getting there too... Hope to find the flag soon ^^