Path: blob/main/Scripts/R1/Amy.txt
1319 views
//-----------------Sonic CD Amy Rose Script-------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// ========================5// Aliases6// ========================78#alias Object.Value0 : Object.XVelocity9#alias Object.Value1 : Object.YVelocity10#alias Object.Value2 : Object.LeftLimit11#alias Object.Value3 : Object.RightLimit12#alias Object.Value4 : Object.SonicHugged13#alias Object.Value5 : Object.Gravity14#alias Object.Value6 : Object.FrameTimer15#alias Object.Value7 : Object.HeartTimer1617// States18#alias 0 : AMY_IDLE19#alias 1 : AMY_CHASE20#alias 2 : AMY_AWAIT_RIGHT21#alias 3 : AMY_CHEER_LEFT22#alias 4 : AMY_CHEER_RIGHT23#alias 5 : AMY_AWAIT_LEFT24#alias 6 : AMY_HEART_STARE25#alias 7 : AMY_HUG26#alias 8 : AMY_REJECTED2728// Priority Aliases29#alias 0 : PRIORITY_BOUNDS30#alias 1 : PRIORITY_ACTIVE3132// Gravity Aliases33#alias 0 : GRAVITY_GROUND34#alias 1 : GRAVITY_AIR3536// Player Aliases37#alias 0 : PLAYER_SONIC_A3839// Collision Side Aliases40#alias 0 : CSIDE_FLOOR4142// Ink Effect Aliases43#alias 2 : INK_ALPHA4445// Stage SFX Aliases46#alias 3 : SFX_S_GIGGLE4748// Game Mode Aliases49#alias 2 : MODE_TIMEATTACK505152// ========================53// Events54// ========================5556sub ObjectMain57Object.Priority = PRIORITY_ACTIVE58if Player.XPos < Object.XPos59Object.Direction = FACING_LEFT60else61Object.Direction = FACING_RIGHT62end if6364switch Object.State65case AMY_IDLE66TempValue0 = Object.FrameTimer67TempValue0 /= 1068TempValue0 += 1169Object.Frame = TempValue070Object.FrameTimer++71if Object.FrameTimer > 13972Object.FrameTimer = 073end if7475// Check to see if Sonic's anywhere near, and if so, start giving chase!76PlayerObjectCollision(C_TOUCH, -96, -360, 96, 360)77if CheckResult == true78Object.XVelocity = 079Object.State = AMY_CHASE80Object.Frame = 481Object.FrameTimer = 082end if83break8485case AMY_CHASE86Object.FrameTimer++87switch Object.Frame88case 489case 690if Object.FrameTimer == 491Object.FrameTimer = 092Object.Frame++93end if94break9596case 597case 798if Object.FrameTimer == 399Object.FrameTimer = 0100Object.Frame++101end if102break103104end switch105106if Object.Frame > 7107Object.Frame = 4108end if109110if Object.Direction == FACING_RIGHT111if Object.XVelocity < 0x20000112Object.XVelocity += 0x1000113end if114115PlayerObjectCollision(C_TOUCH, -32, -360, 4, 360)116if CheckResult == true117if Player.Gravity == GRAVITY_GROUND118if Player.Direction == Object.Direction119PlayerObjectCollision(C_TOUCH, -32, -20, 4, 20)120if CheckResult == true121CheckEqual(Player.Animation, ANI_SPINDASH)122TempValue0 = CheckResult123124// Before commencing the hugging, make sure Sonic's not already being hugged by someone else first125// -> This check was only added in via an update, so it's not present in the Steam version of the game126CheckEqual(Object[2].Type, TypeName[Blue Shield])127TempValue0 |= CheckResult128129if TempValue0 == true130Object.State = AMY_REJECTED131Object.Frame = 9132Object.YVelocity = -0x40000133Object.Gravity = GRAVITY_AIR134Object.XVelocity = -0x10000135else136Object.SonicHugged = true137Object.State = AMY_HUG138Object.Frame = 8139Object.FrameTimer = 0140Player.State = Player_State_Hugged141PlayStageSfx(SFX_S_GIGGLE, false)142143#platform: Use_Haptics144HapticEffect(52, 0, 0, 0)145#endplatform146147// Just one hug is enough unlock criteria148if Stage.DebugMode == false149SetAchievement(1, 100)150end if151end if152else153Object.State = AMY_HEART_STARE154Object.Frame = 0155Object.FrameTimer = 0156Object.XVelocity = 0157end if158159else160Object.State = AMY_HEART_STARE161Object.Frame = 0162Object.FrameTimer = 0163Object.XVelocity = 0164end if // Player.Direction == Object.Direction165end if // Player.Gravity == GRAVITY_GROUND166end if // CheckResult == true (from the box of -32, -360, 4, 360)167168if Object.XPos < Object.RightLimit169Object.XPos += Object.XVelocity170else171Object.XVelocity = 0172Object.XPos = Object.RightLimit173174if Object.SonicHugged == true175Object.State = AMY_CHEER_RIGHT176else177Object.State = AMY_AWAIT_RIGHT178Object.Frame = 0179Object.FrameTimer = 0180end if181182end if183else // Object.Direction == FACING_LEFT184if Object.XVelocity > -0x20000185Object.XVelocity -= 0x1000186end if187188PlayerObjectCollision(C_TOUCH, -4, -360, 32, 360)189if CheckResult == true190if Player.Gravity == GRAVITY_GROUND191if Player.Direction == Object.Direction192PlayerObjectCollision(C_TOUCH, -32, -20, 4, 20)193if CheckResult == true194CheckEqual(Player.Animation, ANI_SPINDASH)195TempValue0 = CheckResult196197// Make sure Sonic isn't wearing a shield before having Amy grab on198// -> This change was only introduced in an update, the Steam version doesn't have this check199CheckEqual(Object[2].Type, TypeName[Blue Shield])200TempValue0 |= CheckResult201202if TempValue0 == true203Object.State = AMY_REJECTED204Object.Frame = 9205Object.YVelocity = -0x40000206Object.Gravity = GRAVITY_AIR207Object.XVelocity = 0x10000208else209Object.SonicHugged = true210Object.State = AMY_HUG211Object.Frame = 8212Object.FrameTimer = 0213Player.State = Player_State_Hugged214PlayStageSfx(SFX_S_GIGGLE, false)215216#platform: Use_Haptics217HapticEffect(52, 0, 0, 0)218#endplatform219220// Just one hug is enough unlock criteria221if Stage.DebugMode == false222SetAchievement(1, 100)223end if224225end if226else227Object.State = AMY_HEART_STARE228Object.Frame = 0229Object.FrameTimer = 0230Object.XVelocity = 0231end if232else233Object.State = AMY_HEART_STARE234Object.Frame = 0235Object.FrameTimer = 0236Object.XVelocity = 0237end if // Player.Direction == Object.Direction238end if // Player.Gravity == GRAVITY_GROUND239end if // CheckResult == true (from the box of -4, -360, 32, 360)240241if Object.XPos > Object.LeftLimit242Object.XPos += Object.XVelocity243else244Object.XVelocity = 0245Object.XPos = Object.LeftLimit246247if Object.SonicHugged == true248Object.State = AMY_AWAIT_LEFT249else250Object.State = AMY_CHEER_LEFT251Object.Frame = 0252Object.FrameTimer = 0253end if254end if255end if256break257258case AMY_AWAIT_RIGHT259Object.FrameTimer++260if Object.FrameTimer == 12261Object.FrameTimer = 0262Object.Frame++263end if264265if Object.Frame > 3266Object.Frame = 0267end if268269if Object.Direction == FACING_LEFT270Object.State = AMY_CHASE271Object.Frame = 4272Object.FrameTimer = 0273end if274break275276case AMY_CHEER_LEFT277Object.FrameTimer++278if Object.FrameTimer == 12279Object.FrameTimer = 0280Object.Frame++281end if282283if Object.Frame > 3284Object.Frame = 0285end if286287if Object.Direction == FACING_RIGHT288Object.State = AMY_CHASE289Object.Frame = 4290Object.FrameTimer = 0291end if292break293294case AMY_CHEER_RIGHT295if Object.FrameTimer < 8296Object.Frame = 0297else298if Object.FrameTimer > 47299if Object.Gravity == GRAVITY_GROUND300if Object.FrameTimer < 120301Object.YVelocity = -0x40000302Object.Gravity = GRAVITY_AIR303Object.Frame = 9304else305Object.FrameTimer = 0306end if307else308if Object.YVelocity > 0309Object.Frame = 0310end if311end if312else313TempValue0 = Object.FrameTimer314TempValue0 -= 8315TempValue0 %= 20316TempValue0 /= 10317318Object.Frame = TempValue0319Object.Frame += 9320end if321end if322323if Object.Gravity == GRAVITY_GROUND324if Object.Direction == FACING_LEFT325Object.State = AMY_CHASE326Object.Frame = 4327Object.FrameTimer = 0328end if329end if330331Object.FrameTimer++332break333334case AMY_AWAIT_LEFT335if Object.FrameTimer < 8336Object.Frame = 0337else338if Object.FrameTimer > 47339if Object.Gravity == GRAVITY_GROUND340if Object.FrameTimer < 120341Object.YVelocity = -0x40000342Object.Gravity = GRAVITY_AIR343Object.Frame = 9344else345Object.FrameTimer = 0346end if347else348if Object.YVelocity > 0349Object.Frame = 0350end if351end if352else353TempValue0 = Object.FrameTimer354TempValue0 -= 8355TempValue0 %= 20356TempValue0 /= 10357358Object.Frame = TempValue0359Object.Frame += 9360end if361end if362363if Object.Gravity == GRAVITY_GROUND364if Object.Direction == FACING_RIGHT365Object.State = AMY_CHASE366Object.Frame = 4367Object.FrameTimer = 0368end if369end if370371Object.FrameTimer++372break373374case AMY_HEART_STARE375Object.FrameTimer++376if Object.FrameTimer == 12377Object.FrameTimer = 0378Object.Frame++379end if380381if Object.Frame > 3382Object.Frame = 0383end if384385PlayerObjectCollision(C_TOUCH, -4, -360, 4, 360)386if CheckResult == false387if Player.Gravity == GRAVITY_GROUND388// If you're not exactly above her, she'll start chasing you again389390Object.State = AMY_CHASE391Object.Frame = 4392Object.FrameTimer = 0393end if394else395if Player.Gravity == GRAVITY_AIR396// If you jump while she waits for you, she'll start chasing you again397398Object.State = AMY_CHASE399Object.Frame = 4400Object.FrameTimer = 0401end if402end if403break404405case AMY_HUG406Player.Speed = 0407Player.XVelocity = 0408Player.Direction = Object.Direction409if Player.Animation == ANI_JUMPING410411Object.State = AMY_REJECTED412Object.Frame = 9413Object.YVelocity = -0x40000414Object.Gravity = GRAVITY_AIR415if Object.Direction == FACING_RIGHT416Object.XVelocity = -0x10000417else418Object.XVelocity = 0x10000419end if420421end if422break423424case AMY_REJECTED425if Object.YVelocity > 0426Object.Frame = 10427end if428429if Object.XVelocity > 0430Object.XVelocity -= 0x800431end if432433if Object.XVelocity < 0434Object.XVelocity += 0x800435end if436437Object.XPos += Object.XVelocity438if Object.Gravity == GRAVITY_GROUND439440if Object.FrameTimer == 16441Object.State = AMY_CHASE442Object.Frame = 4443Object.FrameTimer = 0444else445Object.FrameTimer++446end if447448end if449450if Object.XPos > Object.RightLimit451Object.XPos = Object.RightLimit452end if453break454455end switch456457Object.HeartTimer++458if Object.State == AMY_HUG459if Object.HeartTimer > 15460CreateTempObject(TypeName[Love Heart], 0, Object.XPos, Object.YPos)461Object[TempObjectPos].iYPos -= 6462Object[TempObjectPos].InkEffect = INK_ALPHA463Object[TempObjectPos].Alpha = 255464Object.HeartTimer = 0465end if466else467if Object.HeartTimer > 41468CreateTempObject(TypeName[Love Heart], 0, Object.XPos, Object.YPos)469Object[TempObjectPos].iYPos -= 6470Object[TempObjectPos].InkEffect = INK_ALPHA471Object[TempObjectPos].Alpha = 255472Object.HeartTimer = 0473end if474end if475476if Object.Gravity == GRAVITY_GROUND477ObjectTileGrip(CSIDE_FLOOR, 0, 19, 0)478else479Object.YVelocity += 0x4000480Object.YPos += Object.YVelocity481ObjectTileCollision(CSIDE_FLOOR, 0, 19, 0)482if CheckResult == true483Object.YVelocity = 0484Object.Gravity = GRAVITY_GROUND485end if486end if487488if Object.OutOfBounds == true489Object.Priority = PRIORITY_BOUNDS490Object.State = AMY_IDLE491Object.SonicHugged = false492end if493end sub494495496sub ObjectDraw497DrawSpriteFX(Object.Frame, FX_FLIP, Object.XPos, Object.YPos)498end sub499500501sub ObjectStartup502LoadSpriteSheet("R1/Objects.gif")503504// Idle505SpriteFrame(-11, -20, 22, 40, 34, 208) // #0 - Amy Idle Frame 0506SpriteFrame(-11, -20, 22, 40, 57, 208) // #1 - Amy Idle Frame 1507SpriteFrame(-11, -20, 22, 40, 34, 208) // #2 - Amy Idle Frame 2508SpriteFrame(-11, -20, 22, 40, 126, 167) // #3 - Amy Idle Frame 3509510// Walking511SpriteFrame(-15, -20, 30, 40, 68, 167) // #4 - Amy Walking Frame 0512SpriteFrame(-10, -20, 21, 40, 166, 101) // #5 - Amy Walking Frame 1513SpriteFrame(-13, -20, 26, 40, 99, 167) // #6 - Amy Walking Frame 2514SpriteFrame(-10, -20, 21, 40, 166, 101) // #7 - Amy Walking Frame 3515516// Hug517SpriteFrame(-12, -20, 24, 40, 181, 208) // #8 - Amy Hug518519// Jumping520SpriteFrame(-13, -20, 26, 40, 80, 208) // #9 - Amy Jumping Frame 0521SpriteFrame(-12, -20, 24, 40, 107, 208) // #10 - Amy Jumping Frame 1522523// Looking for Sonic, frames are repeated in place of making the sprite last longer animation-wise524// Amy Looking Frame "0"525SpriteFrame(-12, -20, 22, 40, 158, 208) // #11526SpriteFrame(-12, -20, 22, 40, 158, 208) // #12527SpriteFrame(-12, -20, 22, 40, 158, 208) // #13528SpriteFrame(-12, -20, 22, 40, 158, 208) // #14529SpriteFrame(-12, -20, 22, 40, 158, 208) // #15530531// Amy Looking Frame "1"532SpriteFrame(-14, -20, 25, 40, 132, 208) // #16533SpriteFrame(-14, -20, 25, 40, 132, 208) // #17534SpriteFrame(-14, -20, 25, 40, 132, 208) // #18535536// Amy Looking Frame "2"537SpriteFrame(-12, -20, 22, 40, 158, 208) // #19538SpriteFrame(-12, -20, 22, 40, 158, 208) // #20539SpriteFrame(-12, -20, 22, 40, 158, 208) // #21540541// Amy Looking Frame "3"542SpriteFrame(-14, -20, 25, 40, 132, 208) // #22543SpriteFrame(-14, -20, 25, 40, 132, 208) // #23544SpriteFrame(-14, -20, 25, 40, 132, 208) // #24545546// This used to be below LoadSpriteSheet, moved here for consistency with the rest547ArrayPos0 = 32548while ArrayPos0 < 1056549if Object[ArrayPos0].Type == TypeName[Amy Rose]550//if Stage.PlayerListPos == PLAYER_TAILS_A // Standalones/Preplus check551if Stage.PlayerListPos != PLAYER_SONIC_A // PLAYER_SONIC in origins552Object[ArrayPos0].Type = TypeName[Blank Object]553else554if Options.GameMode == MODE_TIMEATTACK555Object[ArrayPos0].Type = TypeName[Blank Object]556else557Object[ArrayPos0].LeftLimit = Object[ArrayPos0].XPos558Object[ArrayPos0].LeftLimit -= 0x1400000559560Object[ArrayPos0].RightLimit = Object[ArrayPos0].XPos561Object[ArrayPos0].RightLimit += 0x400000562563Object[ArrayPos0].DrawOrder = 4564end if565end if566end if567568ArrayPos0++569loop570end sub571572573// ========================574// Editor Subs575// ========================576577sub RSDKDraw578DrawSprite(0)579end sub580581582sub RSDKLoad583LoadSpriteSheet("R1/Objects.gif")584SpriteFrame(-11, -20, 22, 40, 34, 208) // #0 - Amy Idle585586SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")587end sub588589590