Path: blob/main/Scripts/Mission/Boss_Leg2.txt
1319 views
//----------------Sonic CD Boss Leg Script 2------------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//3//---------Used on Mission "M099 - Eggman: Speed Up"----------//45// Aliases6#alias Object.Value0 : Object.LegJointEntity7#alias Object.Value1 : Object.FootEntity8#alias Object.Value2 : Object.XOffSet9#alias Object.Value4 : Object.LegSide10#alias Object.Value5 : Object.YOffSet11#alias Object.Value6 : Object.XVelocity12#alias Object.Value7 : Object.YVelocity1314// Foot Aliases15#alias Object.Value4 : Foot.LegSide1617// Leg Joint Aliases18#alias Object.XPos : LegJoint.XPos19#alias Object.YPos : LegJoint.YPos20#alias Object.Value0 : LegJoint.BodyEntity2122#alias Object.Value1 : LegJointR.LegREntity2324// Leg Aliases25#alias Object.XPos : LegR.XPos26#alias Object.YPos : LegR.YPos2728// Body Aliases29#alias Object.Value0 : Body.FaceEntity30#alias Object.Value1 : Body.LegJointREntity31#alias Object.XPos : Body.XPos32#alias Object.YPos : Body.YPos3334// Face Aliases35#alias Object.XPos : Face.XPos36#alias Object.YPos : Face.YPos37#alias Object.Animation : Face.Animation38#alias Object.Direction : Face.FaceTimer3940// Player Aliases41#alias Player.Value4 : Player.InvincibleTimer4243// States44#alias 0 : BOSSLEG2_SETUP45#alias 1 : BOSSLEG2_LANDING46#alias 2 : BOSSLEG2_L_MIMIC_R47#alias 3 : BOSSLEG2_MOVE48#alias 4 : BOSSLEG2_MOVE_OPPOSITE49#alias 5 : BOSSLEG2_MOVE_C // Charged version50#alias 6 : BOSSLEG2_MOVE_OPPOSITE_C // Charged version51#alias 7 : BOSSLEG2_DESTROYED5253// Eggman Animations54#alias 1 : EGGANI_LAUGH5556// Priority57#alias 0 : PRIORITY_BOUNDS5859// Function declarations60#function BossLeg2_SaveLegPosition61#function BossLeg2_HandleMovement6263function BossLeg2_SaveLegPosition64GetBit(TempValue0, Object.LegSide, 5)65if TempValue0 == true66ArrayPos0 = Object.LegJointEntity67LegJoint[ArrayPos0].XPos += TempValue168LegJoint[ArrayPos0].YPos += TempValue26970ArrayPos1 = LegJoint[ArrayPos0].BodyEntity71Body[ArrayPos1].XPos += TempValue172Body[ArrayPos1].YPos += TempValue27374ArrayPos0 = Body[ArrayPos1].FaceEntity75Face[ArrayPos0].XPos += TempValue176Face[ArrayPos0].YPos += TempValue277end if78end function798081function BossLeg2_HandleMovement82ArrayPos0 = Object.LegJointEntity83Object.XPos = LegJoint[ArrayPos0].XPos84Object.XPos += 0x4000085Object.XPos += Object.XVelocity8687Object.YPos = LegJoint[ArrayPos0].YPos88Object.YPos += 0x10000089Object.YPos += Object.YVelocity90end function919293sub ObjectMain94switch Object.State95case BOSSLEG2_SETUP96TempValue0 = 0x400097TempValue0 *= Object.PropertyValue // Set the XOffset value based on it's property value98TempValue0 /= 1099100Object.XOffSet = TempValue0101Object.XOffSet <<= 1102Object.YOffSet = TempValue0103104Object.State = BOSSLEG2_LANDING105break106107case BOSSLEG2_LANDING108ArrayPos0 = Object.LegJointEntity109110Object.XPos = LegJoint[ArrayPos0].XPos111Object.XPos += 0x40000112113Object.YPos = LegJoint[ArrayPos0].YPos114Object.YPos += 0x100000115break116117case BOSSLEG2_L_MIMIC_R118// No matter the leg, it will end up picking the right leg here119ArrayPos0 = Object.LegJointEntity120ArrayPos1 = LegJoint[ArrayPos0].BodyEntity121ArrayPos0 = Body[ArrayPos1].LegJointREntity122ArrayPos1 = LegJointR[ArrayPos0].LegREntity123124Object.XPos = LegR[ArrayPos1].XPos125Object.XPos -= 0xA0000126Object.YPos = LegR[ArrayPos1].YPos127break128129case BOSSLEG2_MOVE130// Whatever leg this is, it will move131ArrayPos0 = Object.FootEntity132if Object.XVelocity < 0x80000133TempValue1 = Object.XOffSet134Object.XVelocity += TempValue1135136GetBit(TempValue0, Object.LegSide, 4)137if TempValue0 == true138FlipSign(TempValue1)139TempValue2 = false140CallFunction(BossLeg2_SaveLegPosition)141else142CallFunction(BossLeg2_HandleMovement)143end if144145else146CallFunction(BossLeg2_HandleMovement)147end if148break149150case BOSSLEG2_MOVE_OPPOSITE151// Whatever leg this is, it will wait for the opposite to move152ArrayPos0 = Object.FootEntity153if Object.XVelocity > -0x80000154TempValue1 = Object.XOffSet155Object.XVelocity -= TempValue1156157GetBit(TempValue0, Object.LegSide, 4)158if TempValue0 == true159TempValue2 = false160CallFunction(BossLeg2_SaveLegPosition)161else162CallFunction(BossLeg2_HandleMovement)163end if164165else166CallFunction(BossLeg2_HandleMovement)167end if168break169170case BOSSLEG2_MOVE_C171// whatever leg this is, it will move172if Object.XVelocity > -0x80000173TempValue1 = Object.XOffSet174Object.XVelocity -= TempValue1175else176TempValue1 = 0177end if178179if Object.YVelocity > -0x40000180TempValue2 = Object.YOffSet181Object.YVelocity -= TempValue2182else183TempValue2 = 0184end if185186GetBit(TempValue0, Object.LegSide, 4)187if TempValue0 == true188CallFunction(BossLeg2_SaveLegPosition)189else190CallFunction(BossLeg2_HandleMovement)191end if192break193194case BOSSLEG2_MOVE_OPPOSITE_C195// whatever leg this is, it will wait for it's opposite to move196if Object.XVelocity > -0x80000197TempValue1 = Object.XOffSet198Object.XVelocity -= TempValue1199else200TempValue1 = 0201end if202203if Object.YVelocity < 0x40000204TempValue2 = Object.YOffSet205Object.YVelocity += TempValue2206else207TempValue2 = 0208end if209210GetBit(TempValue0, Object.LegSide, 4)211if TempValue0 == true212FlipSign(TempValue2)213CallFunction(BossLeg2_SaveLegPosition)214else215CallFunction(BossLeg2_HandleMovement)216end if217break218219case BOSSLEG2_DESTROYED220GetBit(TempValue0, Object.LegSide, 4)221if TempValue0 == false222Object.XOffSet -= 0x600223else224Object.XOffSet += 0x600225end if226Object.YOffSet += 0x1A60227228Object.XPos += Object.XOffSet229Object.YPos += Object.YOffSet230231if Object.OutOfBounds == true232Object.Type = TypeName[Blank Object]233Object.Priority = PRIORITY_BOUNDS234end if235break236end switch237end sub238239240sub ObjectPlayerInteraction241if Object.State < BOSSLEG2_DESTROYED242if Player.InvincibleTimer == 0243PlayerObjectCollision(C_TOUCH, -12, -20, 12, -20)244if CheckResult == true245246Player.State = Player_State_GotHit247248ArrayPos0 = Object.LegJointEntity249ArrayPos1 = LegJoint[ArrayPos0].BodyEntity250ArrayPos0 = Body[ArrayPos1].FaceEntity251252Face[ArrayPos0].Animation = EGGANI_LAUGH253Face[ArrayPos0].FaceTimer = 180254255if Player.XPos > Object.XPos256Player.Speed = 0x20000257else258Player.Speed = -0x20000259end if260end if261end if262end if263end sub264265266sub ObjectDraw267DrawSprite(0)268end sub269270271sub ObjectStartup272LoadSpriteSheet("R1/Objects3.gif")273274SpriteFrame(-12, -20, 24, 40, 74, 1) // #0 - EGG-HVC-001 Leg275end sub276277278// ========================279// Editor Subs280// ========================281282sub RSDKDraw283DrawSprite(0)284end sub285286287sub RSDKLoad288LoadSpriteSheet("R1/Objects3.gif")289SpriteFrame(-12, -20, 24, 40, 74, 1) // #0 - EGG-HVC-001 Leg290291SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")292end sub293294