Path: blob/main/Scripts/R3/MetalSonic.txt
1319 views
//----------------Sonic CD Metal Sonic Script-----------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.Timer6#alias Object.Value1 : Object.BaseY // (Metal Sonic's Y position without the oscillating effect)7// (Value2 is unused)8#alias Object.Value3 : Object.Speed9#alias Object.Value4 : Object.FrameTimer1011// Spike Debris Aliases12#alias Object.iXPos : Debris.iXPos13#alias Object.iYPos : Debris.iYPos14#alias Object.Value0 : Debris.XVelocity15#alias Object.Value1 : Debris.YVelocity1617// Amy Aliases18#alias Object[-1].XPos : Amy.XPos19#alias Object[-1].YPos : Amy.YPos20#alias Object[-1].Direction : Amy.Direction21#alias Object[-1].Frame : Amy.Frame22#alias Object[-1].State : Amy.State2324// States25#alias 0 : METALSONIC_WAIT26#alias 1 : METALSONIC_APPROACH27#alias 2 : METALSONIC_CATCH_AMY28#alias 3 : METALSONIC_RISE29#alias 4 : METALSONIC_HOVER30#alias 5 : METALSONIC_FLEE3132// Amy States33#alias 4 : AMY_KIDNAP3435// Stage SFX36#alias 8 : SFX_S_CRUMBLE37#alias 9 : SFX_S_AMYCAPTURED383940sub ObjectMain41switch Object.State42case METALSONIC_WAIT // Starts in this state, gets switched to METALSONIC_APPROACH by Amy43break4445case METALSONIC_APPROACH46Object.XPos -= 0x3000047Object.Frame++48Object.Frame &= 14950TempValue0 = 05152ArrayPos0 = Object.EntityNo53ArrayPos0++54while TempValue0 < 355if Object[ArrayPos0].Type > TypeName[Blank Object]56TempValue1 = Object[ArrayPos0].XPos57TempValue1 += 0x2400005859if Object.XPos < TempValue160// Destroy Spikes61Object[ArrayPos0].Type = TypeName[Blank Object]62TempValue2 = Object[ArrayPos0].PropertyValue63TempValue2 <<= 26465// Create Debris66CreateTempObject(TypeName[Spike Debris], TempValue2, Object[ArrayPos0].XPos, Object[ArrayPos0].YPos)67Debris[TempObjectPos].iXPos -= 968Debris[TempObjectPos].iYPos -= 969Debris[TempObjectPos].XVelocity = -0x1000070Debris[TempObjectPos].YVelocity = -0x3000071TempValue2++7273CreateTempObject(TypeName[Spike Debris], TempValue2, Object[ArrayPos0].XPos, Object[ArrayPos0].YPos)74Debris[TempObjectPos].iXPos += 875Debris[TempObjectPos].iYPos -= 976Debris[TempObjectPos].XVelocity = 0x1000077Debris[TempObjectPos].YVelocity = -0x3000078TempValue2++7980CreateTempObject(TypeName[Spike Debris], TempValue2, Object[ArrayPos0].XPos, Object[ArrayPos0].YPos)81Debris[TempObjectPos].iXPos -= 982Debris[TempObjectPos].iYPos += 883Debris[TempObjectPos].XVelocity = -0x1000084Debris[TempObjectPos].YVelocity = -0x1800085TempValue2++8687CreateTempObject(TypeName[Spike Debris], TempValue2, Object[ArrayPos0].XPos, Object[ArrayPos0].YPos)88Debris[TempObjectPos].iXPos += 889Debris[TempObjectPos].iYPos += 890Debris[TempObjectPos].XVelocity = 0x1000091Debris[TempObjectPos].YVelocity = -0x1800092TempValue2++939495PlayStageSfx(SFX_S_CRUMBLE, false)9697#platform: Use_Haptics98HapticEffect(96, 0, 0, 0)99#endplatform100end if101end if102103ArrayPos0++104TempValue0++105loop106107TempValue0 = Amy.XPos108TempValue0 += 0x200000109if Object.XPos < TempValue0110Object.State = METALSONIC_CATCH_AMY111Object.Frame = 2112Object.BaseY = Object.YPos113Amy.Frame = 8114Amy.State = AMY_KIDNAP115PlayStageSfx(SFX_S_AMYCAPTURED, false)116end if117break118119case METALSONIC_CATCH_AMY120if Object.Timer > 8121if Player.XPos < Object.XPos122Object.Direction = FACING_LEFT123else124Object.Direction = FACING_RIGHT125end if126end if127128Sin(Object.YPos, Object.Timer)129Object.YPos <<= 9130Object.YPos += Object.BaseY131132Object.Timer += 8133if Object.Timer > 607134Object.State = METALSONIC_RISE135Object.Timer = 0136end if137break138139case METALSONIC_RISE140if Player.XPos < Object.XPos141Object.Direction = FACING_LEFT142else143Object.Direction = FACING_RIGHT144end if145146if Object.Timer < 40147Object.Timer++148Object.BaseY -= 0x20000149Object.YPos -= 0x20000150else151Object.State = METALSONIC_HOVER152Object.Timer = 256153end if154break155156case METALSONIC_HOVER157if Player.XPos < Object.XPos158Object.Direction = FACING_LEFT159else160Object.Direction = FACING_RIGHT161end if162163Sin(Object.YPos, Object.Timer)164Object.YPos <<= 9165Object.YPos += Object.BaseY166167Object.Timer += 8168if Object.Timer > 976169Object.State = METALSONIC_FLEE170Object.Direction = FACING_RIGHT171end if172break173174case METALSONIC_FLEE175if Object.Speed < 0x60000176Object.Speed += 0x2000177end if178Object.XPos += Object.Speed179180if Object.OutOfBounds == true181// Erase Metal182TempValue0 = Object.EntityNo183ResetObjectEntity(TempValue0, TypeName[Blank Object], 0, 0, 0)184// Erase Amy185TempValue0--186ResetObjectEntity(TempValue0, TypeName[Blank Object], 0, 0, 0)187end if188break189end switch190end sub191192193sub ObjectDraw194if Object.State < METALSONIC_CATCH_AMY195DrawSprite(Object.Frame)196else197Amy.XPos = Object.XPos198Amy.YPos = Object.YPos199Amy.Direction = Object.Direction200201TempValue0 = Object.FrameTimer202TempValue0 >>= 1203TempValue0 += 3204DrawSpriteFX(TempValue0, FX_FLIP, Object.XPos, Object.YPos)205206Object.FrameTimer++207Object.FrameTimer &= 7208DrawSpriteFX(Object.Frame, FX_FLIP, Object.XPos, Object.YPos)209end if210end sub211212213sub ObjectStartup214LoadSpriteSheet("R3/Objects.gif")215216// Overdrive Attack217SpriteFrame(-24, -16, 48, 32, 67, 68) // #0 - Overdrive Attack Frame 0218SpriteFrame(-24, -16, 48, 32, 116, 68) // #1 - Overdrive Attack Frame 1219220// Metal Idle221SpriteFrame(-16, -24, 32, 48, 1, 108) // #2 - Idle222223// Booster224SpriteFrame(-24, -12, 24, 24, 214, 43) // #3 - Booster Frame 0225SpriteFrame(0, 0, 2, 2, 165, 68) // #4 - Booster Frame 1 / Cheat Sprite226SpriteFrame(-28, -16, 32, 32, 165, 68) // #5 - Booster Frame 2227SpriteFrame(0, 0, 2, 2, 165, 68) // #6 - Booster Frame 3 / Cheat Sprite228end sub229230231// ========================232// Editor Subs233// ========================234235sub RSDKDraw236DrawSprite(0)237end sub238239240sub RSDKLoad241LoadSpriteSheet("R3/Objects.gif")242243SpriteFrame(-24, -16, 48, 32, 67, 68) // #0 - Overdrive Attack Frame 0244245SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")246end sub247248249