Path: blob/main/Scripts/R8/EggMobile.txt
1319 views
//----------------Sonic CD Egg Mobile 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.XVelocity7#alias Object.Value2 : Object.YVelocity8#alias Object.Value3 : Object.Oscillation9#alias Object.Value4 : Object.WingOffset10#alias Object.Value6 : Object.OscillationValue11#alias Object.Value7 : Object.InvulnerableTimer1213// Helper 1 Aliases14#alias Object[+1].Value0 : Helper1.BossHealth15#alias Object[+1].Value1 : Helper1.Controller // This handles the boss movement16#alias Object[+1].Value2 : Helper1.ControllerState17#alias Object[+1].Value3 : Helper1.ControllerDisabled18#alias Object[+1].Value4 : Helper1.LeftBound19#alias Object[+1].Value5 : Helper1.RightBound20#alias Object[+1].Value6 : Helper1.CenterBound21#alias Object[+1].Value7 : Helper1.TargetPos // Depending of what the boss needs this target is for X or Y Positions2223// Helper 2 Aliases24#alias Object[+2].State : Helper2.BossInvincible // Checks if Eggman can be hit during his patterns25#alias Object[+2].Value0 : Helper2.SecondaryState // Sets the preparation of the Wing Throw Attack26#alias Object[+2].Value1 : Helper2.StopTimer // How much time eggman will stop moving during the intro/ground spin attack27#alias Object[+2].Value2 : Helper2.AnimSpeedState28#alias Object[+2].Value3 : Helper2.WingSpawnXPos29#alias Object[+2].Value4 : Helper2.MaxOscillation30#alias Object[+2].Value6 : Helper2.CutsceneRightBound31#alias Object[+2].Value7 : Helper2.SfxState32#alias Object[+2].AnimationTimer : Helper2.SfxTimer33#alias Object[+2].AnimationSpeed : Helper2.SfxUsed3435// Boss Wing Aliases36#alias Object.XPos : BossWing.XPos37#alias Object.YPos : BossWing.YPos38#alias Object.Value0 : BossWing.Timer39#alias Object.Value1 : BossWing.XVelocity40#alias Object.Value2 : BossWing.YVelocity41#alias Object.Value5 : BossWing.Attached42#alias Object.Frame : BossWing.Frame43#alias Object.Rotation : BossWing.Rotation44#alias Object.State : BossWing.State45#alias Object.Type : BossWing.Type46#alias Object.Priority : BossWing.Priority4748// HUD Alias49#alias Object[24].PropertyValue : HUD.CurrentTimePeriod5051// Helper 2 States52#alias 0 : HELPER2_PREPARE_DETACH53#alias 1 : HELPER2_CENTER_WINGS54#alias 2 : HELPER2_DETACH_WINGS55#alias 3 : HELPER2_PREPARE_THROW56#alias 4 : HELPER2_THROW_WINGS5758// Boss Wing States59#alias 1 : BOSSWING_DETACH60#alias 2 : BOSSWING_FALL_VERTICAL61#alias 5 : BOSSWING_FALL_DIAGONAL6263// Eggman animations64#alias 0 : EGGANI_IDLE65#alias 1 : EGGANI_HURT66#alias 2 : EGGANI_LAUGH67#alias 3 : EGGANI_DEFEAT6869// Cutscene70#alias 1 : CUTSCENE_FINALFEVER7172// Players73#alias 0 : PLAYER_SONIC_A7475// Collision Sides76#alias 0 : CSIDE_FLOOR7778// Ink Effects79#alias 0 : INK_NONE8081// Time Periods82#alias 3 : TIME_BAD_FUTURE8384// Global SFX85#alias 22 : SFX_G_EXPLOSION8687// Stage SFX88#alias 5 : SFX_S_BOSSHIT89#alias 6 : SFX_S_WINGROTATE90#alias 7 : SFX_S_MECHSTEP91#alias 8 : SFX_S_IMPACT192#alias 9 : SFX_S_MSCHARGE9394// Control Mode95#alias -1 : CONTROLMODE_NONE96#alias 0 : CONTROLMODE_NORMAL9798// Priority99#alias 1 : PRIORITY_ACTIVE100101// Function declarations102#function EggMobile_StopMovement103#function EggMobile_MoveToLeft104#function EggMobile_MoveToRight105#function EggMobile_GroundSpinAscend106#function EggMobile_GroundSpinDescend107#function EggMobile_MoveLeftToCenter108#function EggMobile_MoveRightToCenter109#function EggMobile_GroundSpinLeft110#function EggMobile_GroundSpinRight111#function EggMobile_HandleWingThrowATK112#function EggMobile_WingThrowVertical113#function EggMobile_WingThrowDiagonal114#function EggMobile_RestoreWings115#function EggMobile_SetTargetDestiny116#function EggMobile_ApproachPlayer117#function EggMobile_ExtendWings118#function EggMobile_RetractWings119#function EggMobile_Hit120#function EggMobile_PreparePogoAttack121#function EggMobile_PogoAttackDescend122#function EggMobile_PogoAttackAscend123#function EggMobile_PogoAttackMoveLeft124#function EggMobile_PogoAttackMoveRight125126#function Helper1Controller_FourWings127#function Helper1Controller_ThreeWings128#function Helper1Controller_TwoWings129#function Helper1Controller_OneWing130131#function EggMobile_Destroyed132#function EggMobile_Destroyed_FinalFever133#function EggMobile_HandleWingRotation134#function EggMobile_DropDamagedWing135#function EggMobile_HandleAnimations136137function EggMobile_StopMovement138Object.Timer++139if Object.Timer == Helper2.StopTimer140Object.Timer = 0141Helper1.ControllerDisabled = false142end if143end function144145146function EggMobile_MoveToLeft147Object.XPos -= Object.XVelocity148if Object.XPos <= Helper1.LeftBound149Helper1.ControllerDisabled = false150end if151end function152153154function EggMobile_MoveToRight155Object.XPos += Object.XVelocity156if Object.XPos >= Helper1.RightBound157Helper1.ControllerDisabled = false158end if159end function160161162function EggMobile_GroundSpinAscend163Object.YPos -= Object.YVelocity164if Object.YPos <= Helper1.TargetPos165Object.YPos = Helper1.TargetPos166Helper1.ControllerDisabled = false167end if168end function169170171function EggMobile_GroundSpinDescend172Object.YPos += Object.YVelocity173if Object.YPos >= Helper1.TargetPos174Object.YPos = Helper1.TargetPos175Helper1.ControllerDisabled = false176end if177if Object.OscillationValue != 0178if Helper1.BossHealth < 4179TempValue0 = Object.Oscillation180TempValue0 >>= 6181if TempValue0 == Helper2.MaxOscillation182Object.OscillationValue = 0183Object.Oscillation = TempValue0184Object.Oscillation <<= 6185end if186else187TempValue0 = Object.Oscillation188TempValue0 %= 1280189if TempValue0 == 0190Object.OscillationValue = 0191end if192end if193end if194end function195196197function EggMobile_MoveLeftToCenter // Fun fact, the chance of this one triggering is really small198Object.XPos -= Object.XVelocity199if Object.XPos <= Helper1.CenterBound200Object.XPos = Helper1.CenterBound201Helper1.ControllerDisabled = false202end if203end function204205206function EggMobile_MoveRightToCenter207Object.XPos += Object.XVelocity208if Object.XPos >= Helper1.CenterBound209Object.XPos = Helper1.CenterBound210Helper1.ControllerDisabled = false211end if212end function213214215function EggMobile_GroundSpinLeft216Object.XPos -= 0x14CCC217if Object.XPos <= Helper1.TargetPos218Object.XPos = Helper1.TargetPos219Object.OscillationValue = 0220Helper1.ControllerDisabled = false221end if222TempValue0 = Object.Rotation223TempValue0 <<= 1224TempValue0 &= 511225Sin(TempValue1, TempValue0)226if TempValue1 < 0227FlipSign(TempValue1)228end if229TempValue1 >>= 7230TempValue1 += 64231ObjectTileGrip(CSIDE_FLOOR, 0, TempValue1, 0)232end function233234235function EggMobile_GroundSpinRight236Object.XPos += 0x14CCC237if Object.XPos >= Helper1.TargetPos238Object.XPos = Helper1.TargetPos239Object.OscillationValue = 0240Helper1.ControllerDisabled = false241end if242TempValue0 = Object.Rotation243TempValue0 <<= 1244TempValue0 &= 511245Sin(TempValue1, TempValue0)246if TempValue1 < 0247FlipSign(TempValue1)248end if249TempValue1 >>= 7250TempValue1 += 64251ObjectTileGrip(CSIDE_FLOOR, 0, TempValue1, 0)252end function253254255function EggMobile_HandleWingThrowATK256switch Helper2.SecondaryState257case HELPER2_PREPARE_DETACH258Object.Timer++259if Object.Timer == 20260Object.Timer = 0261Helper2.SecondaryState++262end if263break264265case HELPER2_CENTER_WINGS266if Object.OscillationValue != 0267TempValue0 = Object.Oscillation268TempValue0 >>= 7269if TempValue0 == 0270TempValue0 <<= 7271Object.Oscillation = TempValue0272Object.OscillationValue = 0273Helper2.SecondaryState++274end if275end if276break277278case HELPER2_DETACH_WINGS279Object.Timer++280Object.WingOffset += 0x80281if Object.Timer == 22282BossWing[-4].Frame = 1283BossWing[-3].Frame = 1284BossWing[-2].Frame = 1285BossWing[-1].Frame = 1286end if287if Object.Timer == 26288BossWing[-4].Frame = 2289BossWing[-3].Frame = 2290BossWing[-2].Frame = 2291BossWing[-1].Frame = 2292end if293if Object.Timer == 36294Object.Timer = 0295Helper2.SecondaryState++296end if297break298299case HELPER2_PREPARE_THROW300Object.Timer++301if Object.Timer == 10302Object.Timer = 0303Helper2.SecondaryState++304Object.OscillationValue = -64305Helper1.TargetPos = Object[+3].YPos306Helper1.TargetPos -= 0x440000307end if308break309310case HELPER2_THROW_WINGS311TempValue0 = 0312ArrayPos0 = Object.EntityNo313ArrayPos0 -= 4314while TempValue0 < 4315if BossWing[ArrayPos0].Attached == true316TempValue0 = BossWing[ArrayPos0].Rotation317TempValue0 >>= 4318if TempValue0 == 0319BossWing[ArrayPos0].Rotation = 0320BossWing[ArrayPos0].Attached = false321BossWing[ArrayPos0].State = BOSSWING_DETACH322BossWing[ArrayPos0].YVelocity = 0x28000323end if324end if325ArrayPos0++326TempValue0++327loop328if Object.YPos <= Helper1.TargetPos329Object.YPos = Helper1.TargetPos330Object.Timer++331if Object.Timer == 60332Object.Timer = 0333Object.OscillationValue = 0334Object.Oscillation = 0335Helper1.ControllerDisabled = false336end if337else338Object.YPos -= 0x14000339end if340break341end switch342end function343344345function EggMobile_WingThrowVertical346if Helper2.AnimSpeedState < Helper1.BossHealth347if Object.Timer == 0348ArrayPos0 = Object.EntityNo349ArrayPos0 -= 4350ArrayPos0 += Helper2.AnimSpeedState351Object[ArrayPos0].Type = TypeName[Boss Wing]352BossWing[ArrayPos0].State = BOSSWING_FALL_VERTICAL353BossWing[ArrayPos0].Rotation = 0354BossWing[ArrayPos0].Timer = 0355if Helper1.BossHealth > 2356BossWing[ArrayPos0].Frame = 4357else358BossWing[ArrayPos0].Frame = 3359end if360BossWing[ArrayPos0].YPos = Object[+3].YPos361BossWing[ArrayPos0].YPos -= 0x800000362BossWing[ArrayPos0].XVelocity = 0363BossWing[ArrayPos0].YVelocity = 0x38000364switch Helper2.WingSpawnXPos365case 0366BossWing[ArrayPos0].XPos = -0x400000367break368case 1369BossWing[ArrayPos0].XPos = 0x400000370break371case 2372BossWing[ArrayPos0].XPos = 0x800000373break374case 3375BossWing[ArrayPos0].XPos = -0x800000376break377case 4378BossWing[ArrayPos0].XPos = -0x800000379break380case 5381BossWing[ArrayPos0].XPos = -0x400000382break383case 6384BossWing[ArrayPos0].XPos = 0385break386case 7387BossWing[ArrayPos0].XPos = 0x400000388break389case 8390BossWing[ArrayPos0].XPos = 0x800000391break392case 9393BossWing[ArrayPos0].XPos = 0x400000394break395case 10396BossWing[ArrayPos0].XPos = 0397break398case 11399BossWing[ArrayPos0].XPos = -0x800000400break401case 12402BossWing[ArrayPos0].XPos = -0x500000403break404case 13405BossWing[ArrayPos0].XPos = 0x500000406break407case 14408BossWing[ArrayPos0].XPos = -0x300000409break410case 15411BossWing[ArrayPos0].XPos = 0xA0000412break413end switch414BossWing[ArrayPos0].XPos += Object[+3].XPos415Object.Timer++416else417if Object.Timer < 30418Object.Timer++419else420Object.Timer = 0421Helper2.AnimSpeedState++422Helper2.WingSpawnXPos++423end if424end if425else426if Object[-4].Type == TypeName[Blank Object]427if Object[-3].Type == TypeName[Blank Object]428if Object[-2].Type == TypeName[Blank Object]429if Object[-1].Type == TypeName[Blank Object]430Helper1.ControllerDisabled = false431end if432end if433end if434end if435end if436end function437438439function EggMobile_WingThrowDiagonal440if Helper2.AnimSpeedState < 1441Object[-1].Type = TypeName[Boss Wing]442BossWing[-1].State = BOSSWING_FALL_VERTICAL443BossWing[-1].Timer = 0444BossWing[-1].Frame = 3445if Player.XPos < Object[+3].XPos446BossWing[-1].YPos = Object[+3].iXPos447BossWing[-1].YPos += 248448TempValue0 = Player.XPos449TempValue0 >>= 16450BossWing[-1].YPos -= TempValue0451BossWing[-1].YPos *= -0x6A0A452BossWing[-1].YPos >>= 16453BossWing[-1].YPos &= 0xFFFF454BossWing[-1].YPos <<= 16455BossWing[-1].YPos += Object[+3].YPos456BossWing[-1].YPos += 0x600000457BossWing[-1].XPos = Object[+3].XPos458BossWing[-1].XPos += 0xC80000459460BossWing[-1].Rotation = 96461BossWing[-1].XVelocity = -0x33BBA462BossWing[-1].YVelocity = 0x156CF463else464BossWing[-1].YPos = Player.XPos465BossWing[-1].YPos >>= 16466TempValue0 = Object[+3].iXPos467TempValue0 -= 248468BossWing[-1].YPos -= TempValue0469BossWing[-1].YPos *= -0x6A0A470BossWing[-1].YPos >>= 16471BossWing[-1].YPos &= 0xFFFF472BossWing[-1].YPos <<= 16473BossWing[-1].YPos += Object[+3].YPos474BossWing[-1].YPos += 0x600000475BossWing[-1].XPos = Object[+3].XPos476BossWing[-1].XPos -= 0xC80000477478BossWing[-1].Rotation = 416479BossWing[-1].XVelocity = 0x33BBA480BossWing[-1].YVelocity = 0x156CF481end if482Helper2.AnimSpeedState++483else484if Object[-4].Type == TypeName[Blank Object]485if Object[-3].Type == TypeName[Blank Object]486if Object[-2].Type == TypeName[Blank Object]487if Object[-1].Type == TypeName[Blank Object]488Helper1.ControllerDisabled = false489end if490end if491end if492end if493end if494end function495496497function EggMobile_RestoreWings498if Object.Timer == 0499switch Helper1.BossHealth500case 1501Object[-2].Type = TypeName[Boss Wing]502BossWing[-2].Frame = 0503BossWing[-2].Attached = 1504break505case 2506Object[-2].Type = TypeName[Boss Wing]507BossWing[-2].Frame = 0508BossWing[-2].Attached = 1509Object[-1].Type = TypeName[Boss Wing]510BossWing[-1].Frame = 0511BossWing[-1].Attached = 1512break513case 3514Object[-3].Type = TypeName[Boss Wing]515BossWing[-3].Frame = 0516BossWing[-3].Attached = 1517Object[-2].Type = TypeName[Boss Wing]518BossWing[-2].Frame = 0519BossWing[-2].Attached = 1520Object[-1].Type = TypeName[Boss Wing]521BossWing[-1].Frame = 0522BossWing[-1].Attached = 1523break524case 4525Object[-4].Type = TypeName[Boss Wing]526BossWing[-4].Frame = 0527BossWing[-4].Attached = 1528Object[-3].Type = TypeName[Boss Wing]529BossWing[-3].Frame = 0530BossWing[-3].Attached = 1531Object[-2].Type = TypeName[Boss Wing]532BossWing[-2].Frame = 0533BossWing[-2].Attached = 1534Object[-1].Type = TypeName[Boss Wing]535BossWing[-1].Frame = 0536BossWing[-1].Attached = 1537break538end switch539Object.WingOffset = 0540Object.Timer++541else542Object.Timer++543if Object.Timer < 120544Object.WingOffset += 0x70545if Object.WingOffset >= 0x1000546Object.WingOffset = 0x1000547end if548else549Object.Timer = 0550Helper1.ControllerDisabled = false551end if552end if553end function554555556function EggMobile_SetTargetDestiny557Object.XVelocity = Player.XPos558Object.XVelocity -= Object.XPos559Object.XVelocity >>= 16560TempValue0 = Object.XVelocity561if TempValue0 < 0562FlipSign(TempValue0)563end if564565if TempValue0 < 64566Object.XVelocity <<= 4567Object.XVelocity /= 90568Object.XVelocity <<= 12569Object.YVelocity = Object[+3].YPos570Object.YVelocity -= 0x40000571Helper1.TargetPos = Object.YVelocity572Object.YVelocity -= Object.YPos573Object.YVelocity >>= 16574Object.YVelocity <<= 4575Object.YVelocity /= 90576Object.YVelocity <<= 12577if Helper1.BossHealth == 2578Helper2.MaxOscillation = 4480579else580Helper2.MaxOscillation = 3840581end if582else583if Object.XVelocity >= 0584Object.XVelocity -= 16585else586Object.XVelocity += 16587end if588Object.XVelocity <<= 4589Object.XVelocity /= 90590Object.XVelocity <<= 12591Object.YVelocity = Object[+3].YPos592Object.YVelocity += 0xA0000593Helper1.TargetPos = Object.YVelocity594Object.YVelocity -= Object.YPos595Object.YVelocity >>= 16596Object.YVelocity <<= 4597Object.YVelocity /= 90598Object.YVelocity <<= 12599if Helper1.BossHealth == 2600Helper2.MaxOscillation = 4480601else602Helper2.MaxOscillation = 3200603end if604end if605end function606607608function EggMobile_ApproachPlayer609Object.XPos += Object.XVelocity610Object.YPos += Object.YVelocity611if Object.Timer > 10612if Object.Oscillation == Helper2.MaxOscillation613Object.OscillationValue = 0614end if615else616Object.Timer++617end if618619if Object.YPos >= Helper1.TargetPos620Object.Timer = 0621Object.YPos = Helper1.TargetPos622Helper1.TargetPos = Object[+3].YPos623Helper1.TargetPos -= 0x440000624FlipSign(Object.XVelocity)625FlipSign(Object.YVelocity)626Helper1.ControllerDisabled = false627PlayStageSFX(SFX_S_MSCHARGE, false)628end if629end function630631632function EggMobile_ExtendWings633Object.WingOffset += 0x120634if Object.WingOffset > 0x2200635Object.WingOffset = 0x2200636end if637Object.Timer++638if Object.Timer == 120639Object.Timer = 0640Helper1.ControllerDisabled = false641end if642end function643644645function EggMobile_RetractWings646Object.XPos += Object.XVelocity647Object.YPos += Object.YVelocity648Object.WingOffset -= 0x80649if Object.WingOffset < 0x1000650Object.WingOffset = 0x1000651end if652if Object.YPos <= Helper1.TargetPos653Object.YPos = Helper1.TargetPos654Helper1.ControllerDisabled = false655end if656end function657658659function EggMobile_Hit660Object.WingOffset -= 0x80661if Object.WingOffset < 0x1000662Object.WingOffset = 0x1000663end if664Object.YPos -= Object.YVelocity665TempValue0 = Object[+3].YPos666TempValue0 -= 0x440000667if Object.YPos <= TempValue0668Object.YPos = TempValue0669Helper1.ControllerDisabled = false670end if671end function672673674function EggMobile_PreparePogoAttack675if Object.Timer < 20676Object.Timer++677else678TempValue0 = Object.Oscillation679TempValue0 >>= 7680if TempValue0 == 0681Object.Timer = 0682BossWing[-2].Rotation = 256683Object.Oscillation = 0684Object.OscillationValue = 0685Helper1.ControllerDisabled = false686end if687end if688end function689690691function EggMobile_PogoAttackDescend692TempValue0 = Object.Timer693TempValue0 <<= 8694TempValue0 /= 60695Sin(Object.YPos, TempValue0)696Object.YPos *= -0x3200697Object.YPos += Object[+3].YPos698Object.YPos += 0x200000699Object.Timer++700if Object.Timer > 29701Object.Timer = 0702Object.YPos = Object[+3].YPos703Object.YPos -= 0x440000704Helper1.ControllerDisabled = false705end if706end function707708709function EggMobile_PogoAttackAscend710TempValue0 = Object.Timer711TempValue0 += 30712TempValue0 <<= 8713TempValue0 /= 60714Sin(Object.YPos, TempValue0)715Object.YPos *= -0x3200716Object.YPos += Object[+3].YPos717Object.YPos += 0x200000718Object.Timer++719if Object.Timer > 29720Object.Timer = 0721Helper1.ControllerDisabled = false722PlayStageSFX(SFX_S_IMPACT1, false)723end if724end function725726727function EggMobile_PogoAttackMoveLeft728TempValue0 = Object.Timer729TempValue0 <<= 8730TempValue0 /= 60731Cos(Object.XPos, TempValue0)732Object.XPos *= 0x1480733Object.XPos += Helper1.TargetPos734Sin(Object.YPos, TempValue0)735Object.YPos *= -0x3400736Object.YPos += Object[+3].YPos737Object.YPos += 0x200000738TempValue0 = Object[+3].YPos739TempValue0 += 0x200000740TempValue0 -= Object.YPos741TempValue0 >>= 9742Object.WingOffset = 0x1000743Object.WingOffset += TempValue0744if Object.WingOffset > 0x2200745Object.WingOffset = 0x2200746end if747Object.Timer++748if Object.Timer > 59749Object.Timer = 0750Helper1.ControllerDisabled = false751PlayStageSFX(SFX_S_IMPACT1, false)752end if753end function754755756function EggMobile_PogoAttackMoveRight757TempValue0 = Object.Timer758TempValue0 <<= 8759TempValue0 /= 60760Cos(Object.XPos, TempValue0)761Object.XPos *= -0x1480762Object.XPos += Helper1.TargetPos763Sin(Object.YPos, TempValue0)764Object.YPos *= -0x3400765Object.YPos += Object[+3].YPos766Object.YPos += 0x200000767TempValue0 = Object[+3].YPos768TempValue0 += 0x200000769TempValue0 -= Object.YPos770TempValue0 >>= 9771Object.WingOffset = 0x1000772Object.WingOffset += TempValue0773if Object.WingOffset > 0x2200774Object.WingOffset = 0x2200775end if776Object.Timer++777if Object.Timer > 59778Object.Timer = 0779Helper1.ControllerDisabled = false780PlayStageSFX(SFX_S_IMPACT1, false)781end if782end function783784785function Helper1Controller_FourWings786switch Helper1.ControllerState787case 0788Object.State = EggMobile_StopMovement789Helper2.StopTimer = 120790Helper2.BossInvincible = true791break792case 1793Object.State = EggMobile_MoveToRight794Object.OscillationValue = -64795Object.XVelocity = 0x16000796Helper2.BossInvincible = true797break798case 2799Object.State = EggMobile_MoveToLeft800break801case 3802Object.State = EggMobile_MoveRightToCenter803break804case 4805Object.State = EggMobile_GroundSpinDescend806Object.YVelocity = 0xA000807Helper1.TargetPos = Object[+3].YPos808Helper1.TargetPos += 0x200000809Helper2.BossInvincible = false810break811case 5812Object.State = EggMobile_StopMovement813Helper2.StopTimer = 20814break815case 6816if Player.XPos > Object.XPos817Object.Direction = FACING_LEFT818Object.State = EggMobile_GroundSpinRight819Helper1.TargetPos = Helper1.CenterBound820Helper1.TargetPos += 0x680000821Object.OscillationValue = 16822else823Object.Direction = FACING_RIGHT824Object.State = EggMobile_GroundSpinLeft825Helper1.TargetPos = Helper1.CenterBound826Helper1.TargetPos -= 0x680000827Object.OscillationValue = -16828end if829Helper2.SfxState = 1830Helper2.SfxUsed = 0831Helper2.SfxTimer = 0832break833case 7834Object.State = EggMobile_StopMovement835Helper2.StopTimer = 60836Object.OscillationValue = 0837break838case 8839if Object.XPos < Object[+3].XPos840Object.State = EggMobile_GroundSpinRight841Helper1.TargetPos = Helper1.CenterBound842Helper1.TargetPos += 0x680000843Object.OscillationValue = 16844else845Object.State = EggMobile_GroundSpinLeft846Helper1.TargetPos = Helper1.CenterBound847Helper1.TargetPos -= 0x680000848Object.OscillationValue = -16849end if850Helper2.SfxTimer = 0851break852case 9853Object.State = EggMobile_StopMovement854Helper2.StopTimer = 60855Object.OscillationValue = 0856Helper2.SfxState = 0857Helper2.SfxTimer = 0858break859case 10860Object.State = EggMobile_GroundSpinAscend861Object.OscillationValue = -64862Helper1.TargetPos = Object[+3].YPos863Helper1.TargetPos -= 0x240000864break865case 11866Object.State = EggMobile_StopMovement867Helper2.StopTimer = 90868break869case 12870if Object.Direction == FACING_RIGHT871Object.State = EggMobile_MoveToLeft872else873Object.State = EggMobile_MoveToRight874end if875break876case 13877if Object.Direction == FACING_RIGHT878Object.State = EggMobile_MoveToRight879else880Object.State = EggMobile_MoveToLeft881end if882break883case 14884if Object.Direction == FACING_RIGHT885Object.State = EggMobile_MoveLeftToCenter886else887Object.State = EggMobile_MoveRightToCenter888end if889break890case 15891Object.State = EggMobile_HandleWingThrowATK892Helper2.SecondaryState = 0893Helper2.BossInvincible = true894break895case 16896Object.State = EggMobile_WingThrowVertical897Helper2.AnimSpeedState = 0898Helper2.WingSpawnXPos = Player.XPos899Helper2.WingSpawnXPos >>= 16900Helper2.WingSpawnXPos &= 3901Helper2.WingSpawnXPos <<= 2902BossWing[-4].Type = TypeName[Blank Object]903BossWing[-3].Type = TypeName[Blank Object]904BossWing[-2].Type = TypeName[Blank Object]905BossWing[-1].Type = TypeName[Blank Object]906Helper2.BossInvincible = true907break908case 17909Object.State = EggMobile_RestoreWings910Helper2.BossInvincible = true911break912case 18913CallFunction(EggMobile_SetTargetDestiny)914Object.State = EggMobile_ApproachPlayer915Object.OscillationValue = -64916Helper2.BossInvincible = false917break918case 19919Object.State = EggMobile_ExtendWings920break921case 20922Object.State = EggMobile_RetractWings923break924case 21925CallFunction(EggMobile_SetTargetDestiny)926Object.State = EggMobile_ApproachPlayer927Object.OscillationValue = -64928break929case 22930Object.State = EggMobile_ExtendWings931break932case 23933Object.State = EggMobile_RetractWings934break935end switch936937if Helper1.ControllerState < 23938Helper1.ControllerState++939else940Helper1.ControllerState = 1941end if942Helper1.ControllerDisabled = true943end function944945946function Helper1Controller_ThreeWings947switch Helper1.ControllerState948case 0949Object.State = EggMobile_MoveToRight950Object.OscillationValue = -80951Object.XVelocity = 0x18000952Helper2.BossInvincible = true953break954case 1955Object.State = EggMobile_MoveToLeft956break957case 2958Object.State = EggMobile_MoveRightToCenter959break960case 3961if Player.XPos > Object.XPos962Object.State = EggMobile_MoveToLeft963Object.Direction = FACING_LEFT964else965Object.State = EggMobile_MoveToRight966Object.Direction = FACING_RIGHT967end if968break969case 4970Object.Oscillation /= 160971Object.Oscillation *= 160972Object.State = EggMobile_GroundSpinDescend973Object.YVelocity = 0xC000974Helper1.TargetPos = Object[+3].YPos975Helper1.TargetPos += 0x200000976Helper2.BossInvincible = false977TempValue0 = 4978ArrayPos0 = Object.EntityNo979ArrayPos0 -= 4980while TempValue0 > 0981if BossWing[ArrayPos0].Attached == false982Helper2.MaxOscillation = TempValue0983if Object.Direction == FACING_LEFT984Helper2.MaxOscillation += 3985else986Helper2.MaxOscillation++987end if988Helper2.MaxOscillation *= 20989Helper2.MaxOscillation %= 80990TempValue0 = 0991end if992ArrayPos0++993TempValue0--994loop995break996case 5997Object.State = EggMobile_StopMovement998Helper2.StopTimer = 20999break1000case 61001if Object.XPos < Object[+3].XPos1002Object.State = EggMobile_GroundSpinRight1003Helper1.TargetPos = Object[+3].XPos1004Helper1.TargetPos -= 0x1400001005Object.OscillationValue = 161006else1007Object.State = EggMobile_GroundSpinLeft1008Helper1.TargetPos = Object[+3].XPos1009Helper1.TargetPos += 0x1400001010Object.OscillationValue = -161011end if1012Helper2.SfxState = 11013Helper2.SfxUsed = 01014Helper2.SfxTimer = 01015break1016case 71017Object.State = EggMobile_StopMovement1018Helper2.StopTimer = 601019Object.OscillationValue = 01020break1021case 81022if Object.XPos < Helper1.CenterBound1023Object.Direction = FACING_LEFT1024Object.State = EggMobile_GroundSpinLeft1025Helper1.TargetPos = Helper1.LeftBound1026Object.OscillationValue = -161027else1028Object.Direction = FACING_RIGHT1029Object.State = EggMobile_GroundSpinRight1030Helper1.TargetPos = Helper1.RightBound1031Object.OscillationValue = 161032end if1033Helper2.SfxTimer = 01034break1035case 91036Object.State = EggMobile_StopMovement1037Helper2.StopTimer = 601038Object.OscillationValue = 01039Helper2.SfxState = 21040Helper2.SfxTimer = 01041break1042case 101043Object.State = EggMobile_GroundSpinAscend1044Object.OscillationValue = -801045Helper1.TargetPos = Object[+3].YPos1046Helper1.TargetPos -= 0x2400001047break1048case 111049Object.State = EggMobile_StopMovement1050Helper2.StopTimer = 901051break1052case 121053if Object.Direction == FACING_RIGHT1054Object.State = EggMobile_MoveToLeft1055else1056Object.State = EggMobile_MoveToRight1057end if1058break1059case 131060if Object.Direction == FACING_RIGHT1061Object.State = EggMobile_MoveToRight1062else1063Object.State = EggMobile_MoveToLeft1064end if1065break1066case 141067if Object.Direction == FACING_RIGHT1068Object.State = EggMobile_MoveLeftToCenter1069else1070Object.State = EggMobile_MoveRightToCenter1071end if1072break1073case 151074Object.State = EggMobile_HandleWingThrowATK1075Helper2.SecondaryState = 01076Helper2.BossInvincible = true1077break1078case 161079Object.State = EggMobile_WingThrowVertical1080Helper2.AnimSpeedState = 01081Helper2.WingSpawnXPos = Player.XPos1082Helper2.WingSpawnXPos >>= 161083Helper2.WingSpawnXPos &= 31084Helper2.WingSpawnXPos <<= 21085BossWing[-4].Type = TypeName[Blank Object]1086BossWing[-3].Type = TypeName[Blank Object]1087BossWing[-2].Type = TypeName[Blank Object]1088BossWing[-1].Type = TypeName[Blank Object]1089Helper2.BossInvincible = true1090break1091case 171092Object.State = EggMobile_RestoreWings1093Helper2.BossInvincible = true1094break1095case 181096CallFunction(EggMobile_SetTargetDestiny)1097Object.State = EggMobile_ApproachPlayer1098Object.OscillationValue = -641099Helper2.BossInvincible = false1100break1101case 191102Object.State = EggMobile_ExtendWings1103break1104case 201105Object.State = EggMobile_RetractWings1106break1107case 211108CallFunction(EggMobile_SetTargetDestiny)1109Object.State = EggMobile_ApproachPlayer1110Object.OscillationValue = -641111break1112case 221113Object.State = EggMobile_ExtendWings1114break1115case 231116Object.State = EggMobile_RetractWings1117break1118end switch11191120if Helper1.ControllerState < 231121Helper1.ControllerState++1122else1123Helper1.ControllerState = 01124end if1125Helper1.ControllerDisabled = true1126end function112711281129function Helper1Controller_TwoWings1130switch Helper1.ControllerState1131case 01132Object.State = EggMobile_MoveToRight1133Object.OscillationValue = -1061134Object.XVelocity = 0x1A0001135Helper2.BossInvincible = true1136break1137case 11138Object.State = EggMobile_MoveToLeft1139break1140case 21141Object.State = EggMobile_MoveRightToCenter1142break1143case 31144Object.State = EggMobile_HandleWingThrowATK1145Helper2.SecondaryState = 01146break1147case 41148Object.State = EggMobile_WingThrowVertical1149Helper2.AnimSpeedState = 01150Helper2.WingSpawnXPos = Player.XPos1151Helper2.WingSpawnXPos >>= 161152Helper2.WingSpawnXPos &= 31153Helper2.WingSpawnXPos <<= 21154BossWing[-4].Type = TypeName[Blank Object]1155BossWing[-3].Type = TypeName[Blank Object]1156BossWing[-2].Type = TypeName[Blank Object]1157BossWing[-1].Type = TypeName[Blank Object]1158Helper2.BossInvincible = true1159break1160case 51161Object.State = EggMobile_RestoreWings1162Helper2.BossInvincible = true1163break1164case 61165CallFunction(EggMobile_SetTargetDestiny)1166Object.State = EggMobile_ApproachPlayer1167Object.OscillationValue = -641168Helper2.BossInvincible = false1169break1170case 71171Object.State = EggMobile_ExtendWings1172break1173case 81174Object.State = EggMobile_RetractWings1175break1176case 91177CallFunction(EggMobile_SetTargetDestiny)1178Object.State = EggMobile_ApproachPlayer1179Object.OscillationValue = -641180break1181case 101182Object.State = EggMobile_ExtendWings1183break1184case 111185Object.State = EggMobile_RetractWings1186break1187end switch11881189if Helper1.ControllerState < 111190Helper1.ControllerState++1191else1192Helper1.ControllerState = 01193end if1194Helper1.ControllerDisabled = true1195end function119611971198function Helper1Controller_OneWing1199switch Helper1.ControllerState1200case 01201Object.State = EggMobile_MoveToRight1202Object.OscillationValue = -1601203Object.XVelocity = 0x1A0001204Helper2.BossInvincible = true1205break1206case 11207Object.State = EggMobile_MoveToLeft1208break1209case 21210Object.State = EggMobile_MoveRightToCenter1211break1212case 31213Object.State = EggMobile_HandleWingThrowATK1214Helper2.SecondaryState = 41215Object.Oscillation >>= 61216Object.Oscillation <<= 61217Object.Timer = 01218Helper1.TargetPos = Object[+3].YPos1219Helper1.TargetPos -= 0x4400001220break1221case 41222Object.State = EggMobile_WingThrowDiagonal1223Helper2.AnimSpeedState = 01224BossWing[-4].Type = TypeName[Blank Object]1225BossWing[-3].Type = TypeName[Blank Object]1226BossWing[-2].Type = TypeName[Blank Object]1227BossWing[-1].Type = TypeName[Blank Object]1228Object.Timer = 01229Object.WingOffset = 01230break1231case 51232Object.State = EggMobile_RestoreWings1233break1234case 61235Object.State = EggMobile_MoveToRight1236Object.OscillationValue = -1601237break1238case 71239Object.State = EggMobile_MoveToLeft1240break1241case 81242Object.State = EggMobile_MoveRightToCenter1243break1244case 91245if Player.XPos > Object.XPos1246Object.State = EggMobile_MoveToLeft1247Object.Direction = FACING_LEFT1248else1249Object.State = EggMobile_MoveToRight1250Object.Direction = FACING_RIGHT1251end if1252break1253case 101254Object.State = EggMobile_PreparePogoAttack1255break1256case 111257Object.State = EggMobile_PogoAttackAscend1258Helper2.BossInvincible = false1259break1260case 121261if Object.Direction == FACING_RIGHT1262Object.State = EggMobile_PogoAttackMoveLeft1263Helper1.TargetPos = Object.XPos1264Helper1.TargetPos -= 0x2900001265else1266Object.State = EggMobile_PogoAttackMoveRight1267Helper1.TargetPos = Object.XPos1268Helper1.TargetPos += 0x2900001269end if1270break1271case 131272if Object.Direction == FACING_RIGHT1273Object.State = EggMobile_PogoAttackMoveLeft1274Helper1.TargetPos -= 0x5200001275else1276Object.State = EggMobile_PogoAttackMoveRight1277Helper1.TargetPos += 0x5200001278end if1279break1280case 141281if Object.Direction == FACING_RIGHT1282Object.State = EggMobile_PogoAttackMoveLeft1283Helper1.TargetPos -= 0x5200001284else1285Object.State = EggMobile_PogoAttackMoveRight1286Helper1.TargetPos += 0x5200001287end if1288break1289case 151290if Object.Direction == FACING_RIGHT1291Object.State = EggMobile_PogoAttackMoveRight1292else1293Object.State = EggMobile_PogoAttackMoveLeft1294end if1295break1296case 161297if Object.Direction == FACING_RIGHT1298Object.State = EggMobile_PogoAttackMoveRight1299Helper1.TargetPos += 0x5200001300else1301Object.State = EggMobile_PogoAttackMoveLeft1302Helper1.TargetPos -= 0x5200001303end if1304break1305case 171306if Object.Direction == FACING_RIGHT1307Object.State = EggMobile_PogoAttackMoveRight1308Helper1.TargetPos += 0x5200001309else1310Object.State = EggMobile_PogoAttackMoveLeft1311Helper1.TargetPos -= 0x5200001312end if1313break1314case 181315Object.State = EggMobile_PogoAttackDescend1316break1317end switch13181319if Helper1.ControllerState < 181320Helper1.ControllerState++1321else1322Helper1.ControllerState = 01323end if1324Helper1.ControllerDisabled = true1325end function132613271328function EggMobile_Destroyed1329switch Helper2.SecondaryState1330case 01331Object.Timer++1332if Object.Timer == 901333Object.Timer = 01334Object.XVelocity = 0x140001335Helper1.TargetPos = Object.YPos13361337Player.ControlMode = CONTROLMODE_NONE1338Player.JumpHold = false1339Player.Right = true1340Player.Left = false1341Player.Up = false1342Player.Down = false13431344Helper2.SecondaryState++1345if Stage.PlayerListPos == PLAYER_SONIC_A // PLAYER_SONIC in origins1346if Stage.DebugMode == false1347SetAchievement(9, 100)1348end if1349end if1350end if1351break13521353case 11354Object.XPos += Object.XVelocity1355Sin(Object.YPos, Object.Timer)1356Object.YPos <<= 91357Object.YPos += Helper1.TargetPos1358Helper1.TargetPos += 0x40001359Object.Timer += 41360Object.Timer &= 51113611362TempValue0 = Helper1.RightBound1363TempValue0 += 0x8000001364if Object.XPos > TempValue01365Object.Timer = 01366Object[+4].Type = TypeName[Amy Rose]1367Helper2.SecondaryState++1368end if13691370if Player.Right == true1371TempValue0 = Player.CollisionRight1372TempValue0 <<= 161373TempValue0 += Player.XPos13741375TempValue1 = Helper2.CutsceneRightBound1376TempValue1 <<= 161377if TempValue0 > TempValue11378Player.Left = true1379Player.Right = false1380end if1381else1382TempValue0 = Helper1.CenterBound1383TempValue0 += 0x4000001384if Player.XPos < TempValue01385Player.XPos = TempValue01386Player.Speed = 01387Player.Left = false1388end if1389end if1390break13911392case 21393TempValue0 = Helper1.CenterBound1394TempValue0 += 0x4000001395if Player.XPos < TempValue01396Player.XPos = TempValue01397Player.Speed = 01398Player.Left = false1399end if1400break1401end switch14021403TempValue0 = Object.AnimationTimer1404TempValue0 &= 11405if TempValue0 == 01406if Helper2.SecondaryState > 01407Screen.ShakeY = 21408end if1409Rand(TempValue0, 300)1410TempValue0 -= 1501411TempValue0 <<= 161412TempValue0 += Object[+3].XPos1413Rand(TempValue1, 200)1414TempValue1 -= 1001415TempValue1 <<= 161416TempValue1 += Object[+3].YPos1417CreateTempObject(TypeName[Explosion], 0, TempValue0, TempValue1)1418if Object.AnimationTimer == 01419if Object[+5].Type == TypeName[Blank Object]1420PlaySfx(SFX_G_EXPLOSION, false)1421end if1422end if1423end if1424Object.AnimationTimer++1425Object.AnimationTimer &= 71426end function142714281429function EggMobile_Destroyed_FinalFever1430switch Helper2.SecondaryState1431case 01432Object.Timer++1433if Object.Timer == 301434Object.Timer = 01435Object.XVelocity = 0x200001436Helper1.TargetPos = Object.YPos1437Helper2.SecondaryState++1438end if1439break14401441case 11442Object.XPos += Object.XVelocity1443Sin(Object.YPos, Object.Timer)1444Object.YPos <<= 91445Object.YPos += Helper1.TargetPos1446Helper1.TargetPos += 0x40001447Object.Timer += 41448Object.Timer &= 5111449TempValue0 = Helper1.RightBound1450TempValue0 += 0x5800001451if Object.XPos > TempValue01452Helper2.SecondaryState++1453Object.Timer = 01454Helper2.CutsceneRightBound += 641455Player.ControlMode = CONTROLMODE_NONE1456Player.JumpHold = false1457Player.Right = true1458Player.Left = false1459Player.Up = false1460Player.Down = false1461end if1462break14631464case 21465Player.Right = true1466Object.Timer++1467if Object.Timer == 1201468Object[+5].Type = TypeName[Fade Screen]1469Object[+5].PropertyValue = CUTSCENE_FINALFEVER1470end if1471break1472end switch14731474TempValue0 = Object.AnimationTimer1475TempValue0 &= 31476if TempValue0 == 01477Rand(TempValue0, 64)1478TempValue0 -= 321479TempValue0 <<= 161480TempValue0 += Object.XPos14811482Rand(TempValue1, 64)1483TempValue1 -= 321484TempValue1 <<= 161485TempValue1 += Object.YPos1486CreateTempObject(TypeName[Explosion], 0, TempValue0, TempValue1)1487if Object.AnimationTimer == 01488if Object[+5].Type == TypeName[Blank Object]1489PlaySfx(SFX_G_EXPLOSION, false)1490end if1491end if1492end if1493Object.AnimationTimer++1494Object.AnimationTimer &= 71495end function149614971498function EggMobile_HandleWingRotation1499ArrayPos0 = Object.EntityNo1500ArrayPos0 -= 41501TempValue0 = 01502TempValue1 = Object.Rotation1503while TempValue0 < 41504if BossWing[ArrayPos0].Attached == true1505Object[ArrayPos0].Rotation = TempValue11506Sin(Object[ArrayPos0].XPos, TempValue1)1507Object[ArrayPos0].XPos *= Object.WingOffset1508Object[ArrayPos0].XPos &= 0xFFFF0000 // Truncate the value1509Object[ArrayPos0].XPos += Object.XPos1510Cos(Object[ArrayPos0].YPos, TempValue1)1511TempValue2 = Object.WingOffset1512FlipSign(TempValue2)1513Object[ArrayPos0].YPos *= TempValue21514Object[ArrayPos0].YPos &= 0xFFFF0000 // Truncate the value1515Object[ArrayPos0].YPos += Object.YPos1516end if1517TempValue1 += 1281518TempValue1 &= 5111519ArrayPos0++1520TempValue0++1521loop1522end function152315241525function EggMobile_DropDamagedWing1526TempValue6 = Object[ArrayPos0].XPos1527TempValue6 -= Object.XPos1528TempValue6 -= 0x1800001529if TempValue0 < 01530FlipSign(TempValue6)1531end if15321533TempValue7 = Object[ArrayPos0].YPos1534TempValue7 -= Object.YPos1535TempValue7 -= 0x4400001536if TempValue7 < 01537FlipSign(TempValue7)1538end if1539TempValue6 += TempValue71540TempValue6 >>= 161541end function154215431544function EggMobile_HandleAnimations1545TempValue0 = Object[+1].AnimationTimer1546TempValue0 >>= 21547TempValue0 &= 11548if TempValue0 == 11549TempValue0 = Object[+1].AnimationTimer1550TempValue0 >>= 31551TempValue0 += 111552DrawSprite(TempValue0)1553TempValue0 += 51554DrawSprite(TempValue0)1555TempValue0 += 51556DrawSprite(TempValue0)1557TempValue0 += 51558DrawSprite(TempValue0)1559TempValue0 += 51560DrawSprite(TempValue0)1561TempValue0 += 51562DrawSprite(TempValue0)1563TempValue0 += 51564DrawSprite(TempValue0)1565end if1566Object[+1].AnimationTimer++1567Object[+1].AnimationTimer %= 401568end function156915701571sub ObjectMain1572Object.Oscillation += Object.OscillationValue1573if Object.Oscillation < 01574Object.Oscillation += 51201575end if1576Object.Oscillation %= 512015771578Object.Rotation = Object.Oscillation1579Object.Rotation /= 1015801581if Helper1.ControllerDisabled == false1582CallFunction(Helper1.Controller)1583end if15841585CallFunction(Object.State)1586CallFunction(EggMobile_HandleWingRotation)1587if Object.InvulnerableTimer > 01588if Object.InvulnerableTimer > 201589TempValue0 = Object.InvulnerableTimer1590TempValue0 &= 151591if TempValue0 == 015921593Rand(TempValue0, 48)1594TempValue0 -= 241595TempValue0 <<= 161596TempValue0 += Object.XPos15971598Rand(TempValue1, 48)1599TempValue1 -= 321600TempValue1 <<= 161601TempValue1 += Object.YPos16021603CreateTempObject(TypeName[Boss Spark], 0, TempValue0, TempValue1)1604Object[TempObjectPos].InkEffect = INK_NONE1605Object[TempObjectPos].Alpha = 24816061607Rand(TempValue0, 48)1608TempValue0 -= 241609TempValue0 <<= 161610TempValue0 += Object.XPos16111612Rand(TempValue1, 48)1613TempValue1 -= 321614TempValue1 <<= 161615TempValue1 += Object.YPos16161617CreateTempObject(TypeName[Boss Spark], 0, TempValue0, TempValue1)1618Object[TempObjectPos].InkEffect = INK_NONE1619Object[TempObjectPos].Alpha = 2481620end if1621end if1622Object.InvulnerableTimer--1623end if16241625if Object.OscillationValue != 01626switch Helper2.SfxState1627case 01628Helper2.SfxTimer += 61629if Helper2.SfxTimer == 421630PlayStageSFX(SFX_S_WINGROTATE, false)1631end if1632if Helper2.SfxTimer > 591633Helper2.SfxTimer -= 601634PlayStageSFX(SFX_S_WINGROTATE, false)1635end if1636break16371638case 11639Helper2.SfxTimer += 31640if Helper2.SfxTimer > 591641Helper2.SfxTimer -= 601642if Helper2.SfxUsed == 01643PlayStageSFX(SFX_S_WINGROTATE, false)1644Helper2.SfxUsed = 11645else1646PlayStageSFX(SFX_S_MECHSTEP, false)1647Helper2.SfxUsed = 01648end if1649end if1650break16511652case 21653Helper2.SfxTimer += 81654if Helper2.SfxTimer > 591655Helper2.SfxTimer -= 601656PlayStageSFX(SFX_S_WINGROTATE, false)1657end if1658break16591660case 31661Helper2.SfxTimer += 101662if Helper2.SfxTimer > 591663Helper2.SfxTimer -= 601664PlayStageSFX(SFX_S_WINGROTATE, false)1665end if1666break16671668case 41669Helper2.SfxTimer += 161670if Helper2.SfxTimer > 591671Helper2.SfxTimer -= 601672PlayStageSFX(SFX_S_WINGROTATE, false)1673end if1674break1675end switch1676end if1677end sub167816791680sub ObjectPlayerInteraction1681if Helper2.BossInvincible == false1682if Object.InvulnerableTimer == 01683#platform: Use_Standalone1684PlayerObjectCollision(C_TOUCH, -24, -24, 24, 24)1685#endplatform1686#platform: Use_Origins1687PlayerObjectCollision(C_ENEMY, -24, -24, 24, 24)1688#endplatform1689if CheckResult == true1690CheckResult = false1691if Player.Animation == ANI_JUMPING1692CheckResult = true1693end if1694if Player.Animation == ANI_SPINDASH1695CheckResult = true1696end if1697#platform: Use_Origins1698if Stage.PlayerListPos == PLAYER_AMY1699if Player.Animation == ANI_HAMMER_JUMP1700CheckResult = true1701end if1702if Player.Animation == ANI_HAMMER_DASH1703CheckResult = true1704end if1705end if1706TempValue0 = false1707if Stage.PlayerListPos == PLAYER_KNUCKLES1708if Player.Animation == ANI_GLIDING1709CheckResult = true1710TempValue0 = true1711end if1712if Player.Animation == ANI_GLIDING_STOP1713CheckResult = true1714TempValue0 = true1715end if1716end if1717#endplatform1718if CheckResult == false1719CallFunction(Player_Hit)1720if Player.State == Player_State_GotHit1721Object.Animation = EGGANI_LAUGH1722end if1723else1724Object.Oscillation >>= 51725Object.Oscillation <<= 51726#platform: Use_Standalone1727FlipSign(Player.Speed)1728FlipSign(Player.XVelocity)1729FlipSign(Player.YVelocity)1730#endplatform1731#platform: Use_Origins1732if TempValue0 == false1733FlipSign(Player.Speed)1734FlipSign(Player.XVelocity)1735FlipSign(Player.YVelocity)1736else1737FlipSign(Player.YVelocity)1738Player.XVelocity = 0x300001739if Player.XPos < Object.XPos1740FlipSign(Player.XVelocity)1741end if17421743Player.Speed = Player.XVelocity1744if Player.Animation == ANI_GLIDING1745Player.Animation = ANI_GLIDING_DROP1746Player.State = Player_State_GlideDrop1747end if1748end if1749#endplatform1750TempValue0 = 01751ArrayPos0 = Object.EntityNo1752ArrayPos0--1753TempValue1 = 0x100001754while TempValue0 < 41755if BossWing[ArrayPos0].Attached == true1756CallFunction(EggMobile_DropDamagedWing)1757if TempValue6 < TempValue11758ArrayPos1 = ArrayPos01759TempValue1 = TempValue61760end if1761end if1762ArrayPos0--1763TempValue0++1764loop17651766if TempValue1 < 0x100001767BossWing[ArrayPos1].Attached = false1768BossWing[ArrayPos1].State = BOSSWING_FALL_DIAGONAL1769BossWing[ArrayPos1].Priority = PRIORITY_ACTIVE1770if BossWing[ArrayPos1].XPos > Object.XPos1771BossWing[ArrayPos1].XVelocity = 0x100001772else1773BossWing[ArrayPos1].XVelocity = -0x100001774end if1775BossWing[ArrayPos1].YVelocity = -0x300001776end if1777Helper1.BossHealth--1778switch Helper1.BossHealth1779case 01780#platform: Use_Origins1781EngineCallback(NOTIFY_KILL_BOSS)1782#endplatform1783Stage.TimeEnabled = false1784Player.Score += 10001785Helper2.BossInvincible = true1786Object.Animation = EGGANI_DEFEAT1787Object.Timer = 017881789if HUD.CurrentTimePeriod == TIME_BAD_FUTURE1790Object.State = EggMobile_Destroyed1791else1792// Before Final Fever was cut, this would have set the state to EggMobile_Destroyed_FinalFever instead1793// Now there's a redundant time period check, what a shame1794Object.State = EggMobile_Destroyed1795end if17961797Object[+3].State++1798Object[+3].Alpha >>= 11799Object[+3].Alpha <<= 11800Helper2.SecondaryState = 01801Object.AnimationTimer = 01802Helper1.ControllerDisabled = true1803Helper2.SfxState = 518041805#platform: Use_Haptics1806HapticEffect(90, 0, 0, 0)1807#endplatform18081809break1810case 11811Object.InvulnerableTimer = 1201812Helper1.ControllerState = 01813Helper1.ControllerDisabled = true1814Object.State = EggMobile_Hit1815Object.YVelocity = 0x100001816Helper1.Controller = Helper1Controller_OneWing1817Object.Timer = 01818Object.Animation = EGGANI_HURT1819Helper2.SfxState = 41820PlayStageSFX(SFX_S_BOSSHIT, false)18211822#platform: Use_Haptics1823HapticEffect(75, 0, 0, 0)1824#endplatform18251826break1827case 21828Object.InvulnerableTimer = 1201829Helper1.ControllerState = 01830Helper1.ControllerDisabled = true1831Object.State = EggMobile_Hit1832Object.YVelocity = 0xE0001833Helper1.Controller = Helper1Controller_TwoWings1834Object.Timer = 01835Object.Animation = EGGANI_HURT1836Helper2.SfxState = 31837PlayStageSFX(SFX_S_BOSSHIT, false)18381839#platform: Use_Haptics1840HapticEffect(75, 0, 0, 0)1841#endplatform18421843break1844case 31845Object.InvulnerableTimer = 1201846Helper1.ControllerState = 01847Helper1.ControllerDisabled = true1848Object.State = EggMobile_Hit1849Object.YVelocity = 0xC0001850Helper1.Controller = Helper1Controller_ThreeWings1851Object.Timer = 01852Object.Animation = EGGANI_HURT1853Helper2.SfxState = 21854PlayStageSFX(SFX_S_BOSSHIT, false)18551856#platform: Use_Haptics1857HapticEffect(75, 0, 0, 0)1858#endplatform18591860break1861end switch1862end if1863end if1864end if1865end if18661867TempValue0 = Player.CollisionRight1868TempValue0 <<= 161869TempValue0 += Player.XPos1870TempValue1 = Helper2.CutsceneRightBound1871TempValue1 <<= 161872if TempValue0 > TempValue11873Player.XVelocity = 01874Player.Speed = 018751876Player.XPos = TempValue11877TempValue0 = Player.CollisionRight1878TempValue0 <<= 161879Player.XPos -= TempValue01880end if1881end sub188218831884sub ObjectDraw1885TempValue0 = Object.InvulnerableTimer1886TempValue0 &= 11887if TempValue0 == 01888switch Object.Animation1889case EGGANI_IDLE1890DrawSprite(0)1891CallFunction(EggMobile_HandleAnimations)1892if Object.OscillationValue != 01893TempValue0 = Oscillation1894TempValue0 &= 71895TempValue0 >>= 21896TempValue0 += 21897DrawSprite(TempValue0)1898end if1899DrawSprite(6)1900DrawSprite(10)1901break19021903case EGGANI_HURT1904DrawSprite(0)1905CallFunction(EggMobile_HandleAnimations)1906if Object.OscillationValue != 01907TempValue0 = Oscillation1908TempValue0 &= 71909TempValue0 >>= 21910TempValue0 += 21911DrawSprite(TempValue0)1912end if1913DrawSprite(9)1914DrawSprite(10)1915if Object.AnimationTimer < 1201916Object.AnimationTimer++1917else1918Object.AnimationTimer = 01919Object.Animation = EGGANI_IDLE1920end if1921break19221923case EGGANI_LAUGH1924DrawSprite(0)1925CallFunction(EggMobile_HandleAnimations)1926if Object.OscillationValue != 01927TempValue0 = Oscillation1928TempValue0 &= 71929TempValue0 >>= 21930TempValue0 += 21931DrawSprite(TempValue0)1932end if1933TempValue0 = Object.AnimationTimer1934TempValue0 &= 151935TempValue0 >>= 31936TempValue0 += 61937DrawSprite(TempValue0)1938if Object.AnimationTimer < 1201939Object.AnimationTimer++1940else1941Object.AnimationTimer = 01942Object.Animation = EGGANI_IDLE1943end if1944DrawSprite(10)1945break19461947case EGGANI_DEFEAT1948DrawSprite(1)1949DrawSprite(8)1950break1951end switch1952end if1953end sub195419551956sub ObjectStartup1957LoadSpriteSheet("R8/Objects3.gif")1958SpriteFrame(-36, -60, 88, 112, 1, 1) // #0 - Egg Spinner1959SpriteFrame(-36, -36, 72, 72, 1, 114) // #1 - Egg Spinner Destroyed1960SpriteFrame(-36, -36, 32, 16, 90, 1) // #2 - Egg Spinner Details frame 01961SpriteFrame(-36, -36, 32, 16, 123, 1) // #3 - Egg Spinner Details frame 119621963SpriteFrame(-18, -28, 36, 32, 90, 67) // #4 - Eggman Reveal frame 01964SpriteFrame(-18, -28, 36, 32, 127, 67) // #5 - Eggman Reveal frame 11965SpriteFrame(-18, -28, 36, 32, 164, 67) // #6 - Eggman Idle frame 01966SpriteFrame(-18, -28, 36, 32, 201, 67) // #7 - Eggman Idle frame 11967SpriteFrame(-22, -28, 44, 32, 166, 100) // #8 - Eggman Hurt frame 01968SpriteFrame(-22, -28, 44, 32, 211, 100) // #9 - Eggman Hurt frame 11969SpriteFrame(-12, -28, 32, 32, 133, 100) // #10 - Egg Spinner Cockpit19701971SpriteFrame(-8, 28, 25, 17, 26, 237) // #11 - Egg Spinner Bottom Lights frame 01972SpriteFrame(-8, 28, 25, 17, 52, 237) // #12 - Egg Spinner Bottom Lights frame 11973SpriteFrame(-8, 28, 25, 17, 78, 237) // #13 - Egg Spinner Bottom Lights frame 21974SpriteFrame(-8, 28, 25, 17, 104, 237) // #14 - Egg Spinner Bottom Lights frame 31975SpriteFrame(-8, 28, 25, 17, 112, 219) // #15 - Egg Spinner Bottom Lights frame 419761977SpriteFrame(-30, 23, 12, 11, 42, 225) // #16 - Egg Spinner Bottom Left Lights frame 01978SpriteFrame(-30, 23, 12, 11, 55, 225) // #17 - Egg Spinner Bottom Left Lights frame 11979SpriteFrame(-30, 23, 12, 11, 68, 225) // #18 - Egg Spinner Bottom Left Lights frame 21980SpriteFrame(-30, 23, 12, 11, 81, 225) // #19 - Egg Spinner Bottom Left Lights frame 31981SpriteFrame(-30, 23, 12, 11, 94, 225) // #20 - Egg Spinner Bottom Left Lights frame 419821983SpriteFrame(49, -9, 2, 2, 27, 247) // #21 - Egg Spinner Right Lights frame 01984SpriteFrame(49, -9, 2, 2, 53, 247) // #22 - Egg Spinner Right Lights frame 11985SpriteFrame(49, -9, 2, 2, 79, 247) // #23 - Egg Spinner Right Lights frame 21986SpriteFrame(49, -9, 2, 2, 105, 247) // #24 - Egg Spinner Right Lights frame 31987SpriteFrame(49, -9, 2, 2, 113, 229) // #25 - Egg Spinner Right Lights frame 419881989SpriteFrame(-19, -19, 8, 20, 42, 204) // #26 - Egg Spinner Cockpit Left Lights frame 01990SpriteFrame(-19, -19, 8, 20, 51, 204) // #27 - Egg Spinner Cockpit Left Lights frame 11991SpriteFrame(-19, -19, 8, 20, 60, 204) // #28 - Egg Spinner Cockpit Left Lights frame 21992SpriteFrame(-19, -19, 8, 20, 69, 204) // #29 - Egg Spinner Cockpit Left Lights frame 31993SpriteFrame(-19, -19, 8, 20, 78, 204) // #30 - Egg Spinner Cockpit Left Lights frame 419941995SpriteFrame(17, -13, 4, 10, 87, 206) // #31 - Egg Spinner Cockpit Right Lights frame 01996SpriteFrame(17, -13, 4, 10, 92, 206) // #32 - Egg Spinner Cockpit Right Lights frame 11997SpriteFrame(17, -13, 4, 10, 97, 206) // #33 - Egg Spinner Cockpit Right Lights frame 21998SpriteFrame(17, -13, 4, 10, 102, 206) // #34 - Egg Spinner Cockpit Right Lights frame 31999SpriteFrame(17, -13, 4, 10, 107, 206) // #35 - Egg Spinner Cockpit Right Lights frame 420002001SpriteFrame(14, -59, 4, 3, 107, 217) // #36 - Egg Spinner Top Lights frame 02002SpriteFrame(14, -59, 4, 3, 107, 221) // #37 - Egg Spinner Top Lights frame 12003SpriteFrame(14, -59, 4, 3, 107, 225) // #38 - Egg Spinner Top Lights frame 22004SpriteFrame(14, -59, 4, 3, 107, 229) // #39 - Egg Spinner Top Lights frame 32005SpriteFrame(14, -59, 4, 3, 107, 233) // #40 - Egg Spinner Top Lights frame 420062007SpriteFrame(32, -47, 5, 3, 112, 215) // #41 - Egg Spinner Top Right Lights frame 02008SpriteFrame(32, -47, 5, 3, 117, 215) // #42 - Egg Spinner Top Right Lights frame 12009SpriteFrame(32, -47, 5, 3, 122, 215) // #43 - Egg Spinner Top Right Lights frame 22010SpriteFrame(32, -47, 5, 3, 127, 215) // #44 - Egg Spinner Top Right Lights frame 32011SpriteFrame(32, -47, 5, 3, 132, 215) // #45 - Egg Spinner Top Right Lights frame 420122013ArrayPos0 = 322014while ArrayPos0 < 10562015if Object[ArrayPos0].Type == TypeName[Egg Mobile]2016Object[ArrayPos0].DrawOrder = 22017Object[ArrayPos0].Type = TypeName[Blank Object]20182019ArrayPos0--2020Object[ArrayPos0].Type = TypeName[Blank Object]2021BossWing[ArrayPos0].Attached = true2022Object[ArrayPos0].DrawOrder = 220232024ArrayPos0--2025Object[ArrayPos0].Type = TypeName[Blank Object]2026BossWing[ArrayPos0].Attached = true2027Object[ArrayPos0].DrawOrder = 220282029ArrayPos0--2030Object[ArrayPos0].Type = TypeName[Blank Object]2031BossWing[ArrayPos0].Attached = true2032Object[ArrayPos0].DrawOrder = 220332034ArrayPos0--2035Object[ArrayPos0].Type = TypeName[Blank Object]2036BossWing[ArrayPos0].Attached = true2037Object[ArrayPos0].DrawOrder = 22038ArrayPos0 += 42039end if2040ArrayPos0++2041loop2042end sub204320442045// ========================2046// Editor Subs2047// ========================20482049sub RSDKDraw2050DrawSprite(0)2051DrawSprite(2)2052DrawSprite(6)2053DrawSprite(10)2054DrawSprite(11)2055DrawSprite(16)2056DrawSprite(21)2057DrawSprite(26)2058DrawSprite(31)2059DrawSprite(36)2060DrawSprite(41)2061end sub206220632064sub RSDKLoad2065LoadSpriteSheet("R8/Objects3.gif")2066SpriteFrame(-36, -60, 88, 112, 1, 1) // #0 - Egg Spinner2067SpriteFrame(-36, -36, 72, 72, 1, 114) // #1 - Egg Spinner Destroyed2068SpriteFrame(-36, -36, 32, 16, 90, 1) // #2 - Egg Spinner Details frame 02069SpriteFrame(-36, -36, 32, 16, 123, 1) // #3 - Egg Spinner Details frame 120702071SpriteFrame(-18, -28, 36, 32, 90, 67) // #4 - Eggman Reveal frame 02072SpriteFrame(-18, -28, 36, 32, 127, 67) // #5 - Eggman Reveal frame 12073SpriteFrame(-18, -28, 36, 32, 164, 67) // #6 - Eggman Idle frame 02074SpriteFrame(-18, -28, 36, 32, 201, 67) // #7 - Eggman Idle frame 12075SpriteFrame(-22, -28, 44, 32, 166, 100) // #8 - Eggman Hurt frame 02076SpriteFrame(-22, -28, 44, 32, 211, 100) // #9 - Eggman Hurt frame 12077SpriteFrame(-12, -28, 32, 32, 133, 100) // #10 - Egg Spinner Cockpit20782079SpriteFrame(-8, 28, 25, 17, 26, 237) // #11 - Egg Spinner Bottom Lights frame 02080SpriteFrame(-8, 28, 25, 17, 52, 237) // #12 - Egg Spinner Bottom Lights frame 12081SpriteFrame(-8, 28, 25, 17, 78, 237) // #13 - Egg Spinner Bottom Lights frame 22082SpriteFrame(-8, 28, 25, 17, 104, 237) // #14 - Egg Spinner Bottom Lights frame 32083SpriteFrame(-8, 28, 25, 17, 112, 219) // #15 - Egg Spinner Bottom Lights frame 420842085SpriteFrame(-30, 23, 12, 11, 42, 225) // #16 - Egg Spinner Bottom Left Lights frame 02086SpriteFrame(-30, 23, 12, 11, 55, 225) // #17 - Egg Spinner Bottom Left Lights frame 12087SpriteFrame(-30, 23, 12, 11, 68, 225) // #18 - Egg Spinner Bottom Left Lights frame 22088SpriteFrame(-30, 23, 12, 11, 81, 225) // #19 - Egg Spinner Bottom Left Lights frame 32089SpriteFrame(-30, 23, 12, 11, 94, 225) // #20 - Egg Spinner Bottom Left Lights frame 420902091SpriteFrame(49, -9, 2, 2, 27, 247) // #21 - Egg Spinner Right Lights frame 02092SpriteFrame(49, -9, 2, 2, 53, 247) // #22 - Egg Spinner Right Lights frame 12093SpriteFrame(49, -9, 2, 2, 79, 247) // #23 - Egg Spinner Right Lights frame 22094SpriteFrame(49, -9, 2, 2, 105, 247) // #24 - Egg Spinner Right Lights frame 32095SpriteFrame(49, -9, 2, 2, 113, 229) // #25 - Egg Spinner Right Lights frame 420962097SpriteFrame(-19, -19, 8, 20, 42, 204) // #26 - Egg Spinner Cockpit Left Lights frame 02098SpriteFrame(-19, -19, 8, 20, 51, 204) // #27 - Egg Spinner Cockpit Left Lights frame 12099SpriteFrame(-19, -19, 8, 20, 60, 204) // #28 - Egg Spinner Cockpit Left Lights frame 22100SpriteFrame(-19, -19, 8, 20, 69, 204) // #29 - Egg Spinner Cockpit Left Lights frame 32101SpriteFrame(-19, -19, 8, 20, 78, 204) // #30 - Egg Spinner Cockpit Left Lights frame 421022103SpriteFrame(17, -13, 4, 10, 87, 206) // #31 - Egg Spinner Cockpit Right Lights frame 02104SpriteFrame(17, -13, 4, 10, 92, 206) // #32 - Egg Spinner Cockpit Right Lights frame 12105SpriteFrame(17, -13, 4, 10, 97, 206) // #33 - Egg Spinner Cockpit Right Lights frame 22106SpriteFrame(17, -13, 4, 10, 102, 206) // #34 - Egg Spinner Cockpit Right Lights frame 32107SpriteFrame(17, -13, 4, 10, 107, 206) // #35 - Egg Spinner Cockpit Right Lights frame 421082109SpriteFrame(14, -59, 4, 3, 107, 217) // #36 - Egg Spinner Top Lights frame 02110SpriteFrame(14, -59, 4, 3, 107, 221) // #37 - Egg Spinner Top Lights frame 12111SpriteFrame(14, -59, 4, 3, 107, 225) // #38 - Egg Spinner Top Lights frame 22112SpriteFrame(14, -59, 4, 3, 107, 229) // #39 - Egg Spinner Top Lights frame 32113SpriteFrame(14, -59, 4, 3, 107, 233) // #40 - Egg Spinner Top Lights frame 421142115SpriteFrame(32, -47, 5, 3, 112, 215) // #41 - Egg Spinner Top Right Lights frame 02116SpriteFrame(32, -47, 5, 3, 117, 215) // #42 - Egg Spinner Top Right Lights frame 12117SpriteFrame(32, -47, 5, 3, 122, 215) // #43 - Egg Spinner Top Right Lights frame 22118SpriteFrame(32, -47, 5, 3, 127, 215) // #44 - Egg Spinner Top Right Lights frame 32119SpriteFrame(32, -47, 5, 3, 132, 215) // #45 - Egg Spinner Top Right Lights frame 421202121SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")2122end sub212321242125