Path: blob/main/Scripts/Mission/Boss_LegJoint2.txt
1319 views
//--------------Sonic CD Boss Leg Joint 2 Script--------------//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.BodyEntity7#alias Object.Value1 : Object.LegsEntity8#alias Object.Value1 : Object.LegREntity // Alt. for Right leg joint9#alias Object.Value2 : Object.XOffSet10#alias Object.Value4 : Object.LegSide11#alias Object.Value5 : Object.YOffSet12#alias Object.Value6 : Object.XVelocity13#alias Object.Value7 : Object.YVelocity1415// Boss Body aliases16#alias Object.Value0 : Body.FaceEntity17#alias Object.State : Body.State18#alias Object.XPos : Body.XPos19#alias Object.YPos : Body.YPos20#alias Object.Value1 : Body.LegJointREntity21#alias Object.Value2 : Body.LegJointLEntity2223// Boss Face aliases24#alias Object.XPos : Face.XPos25#alias Object.YPos : Face.YPos2627// Boss Foot aliases28#alias Object.XPos : Foot.XPos29#alias Object.YPos : Foot.YPos30#alias Object.State : Foot.State31#alias Object.Value2 : Foot.XOffSet32#alias Object.Value4 : Foot.LegSide3334// Boss Legs aliases35#alias Object.Value1 : Legs.FootEntity36#alias Object.State : Legs.State3738// Boss Foot (Right) aliases39#alias Object.XPos : FootR.XPos40#alias Object.YPos : FootR.YPos41#alias Object.State : FootR.State42#alias Object.Value2 : FootR.XOffSet43#alias Object.Value4 : FootR.LegSide4445// Boss Legs (Right) aliases46#alias Object.Value1 : LegR.FootREntity47#alias Object.State : LegR.State4849// Boss Leg Joint (Right) Aliases50#alias Object.Priority : LegJointR.Priority51#alias Object.Value0 : LegJointR.BodyEntity52#alias Object.Value1 : LegJointR.LegREntity53#alias Object.Value2 : LegJointR.XOffSet54#alias Object.Value4 : LegJointR.LegSide55#alias Object.XPos : LegJointR.XPos56#alias Object.YPos : LegJointR.YPos5758// Boss Leg Joint (Left) Aliases59#alias Object.Priority : LegJointL.Priority60#alias Object.DrawOrder : LegJointL.DrawOrder61#alias Object.Value0 : LegJointL.BodyEntity62#alias Object.Value1 : LegJointL.LegLEntity6364// States65#alias 0 : BOSSLEGJOINT2_SETUP66#alias 1 : BOSSLEGJOINT2_STEP_START67#alias 2 : BOSSLEGJOINT2_STEP68#alias 3 : BOSSLEGJOINT2_STEP_END69#alias 4 : BOSSLEGJOINT2_WAIT_LEG70#alias 5 : BOSSLEGJOINT2_LANDING71#alias 6 : BOSSLEGJOINT2_DESCEND72#alias 7 : BOSSLEGJOINT2_STAND73#alias 8 : BOSSLEGJOINT2_MIMIC_RIGHT74#alias 9 : BOSSLEGJOINT2_STEP_START_BW75#alias 10 : BOSSLEGJOINT2_STEP_BW76#alias 11 : BOSSLEGJOINT2_WAIT_LEG_BW77#alias 12 : BOSSLEGJOINT2_DESTROYED7879// Boss Foot States80#alias 1 : BOSSFOOT2_STEP81#alias 2 : BOSSFOOT2_HANDLE_STEP82#alias 3 : BOSSFOOT2_STEP_OPPOSITE83#alias 4 : BOSSFOOT2_HANDLE_STEP_OPPOSITE8485// Priority86#alias 0 : PRIORITY_BOUNDS8788// Function declarations89#function BossLegJoint2_JointRotation90#function BossLegJoint2_HandleMovement91#function BossLegJoint2_HandleLanding929394function BossLegJoint2_JointRotation95ArrayPos0 = Object.BodyEntity96Object.XPos = Body[ArrayPos0].XPos97Object.XPos += 0xC000098Object.XPos += TempValue799if Object.DrawOrder == 2100Object.XPos -= 0xA0000101end if102Object.YPos = Body[ArrayPos0].YPos103Object.YPos += 0x140000104Object.YPos += TempValue6105end function106107108function BossLegJoint2_HandleMovement109Sin256(TempValue6, Object.XOffSet)110TempValue6 <<= 12111Cos256(TempValue7, Object.XOffSet)112TempValue7 <<= 12113GetBit(TempValue0, Object.LegSide, 4)114if TempValue0 == false115SetBit(Object.LegSide, 1, 0)116CallFunction(BossLegJoint2_JointRotation)117else118GetBit(TempValue0, Object.LegSide, 5)119if TempValue0 == false120CallFunction(BossLegJoint2_JointRotation)121else122GetBit(TempValue0, Object.LegSide, 1)123if TempValue0 == false124SetBit(Object.LegSide, 1, 1)125Object.XVelocity = TempValue6126Object.YVelocity = TempValue7127else128ArrayPos0 = Object.BodyEntity129ArrayPos1 = Body[ArrayPos0].FaceEntity130131TempValue0 = TempValue7132TempValue0 -= Object.YVelocity133Object.YVelocity = TempValue7134135Body[ArrayPos0].XPos -= TempValue0136Face[ArrayPos1].XPos -= TempValue0137138TempValue0 = TempValue6139TempValue0 -= Object.XVelocity140Object.XVelocity = TempValue6141142Body[ArrayPos0].YPos -= TempValue0143Face[ArrayPos1].YPos -= TempValue0144end if145end if146end if147end function148149150function BossLegJoint2_HandleLanding151ArrayPos0 = Object.LegsEntity152ArrayPos1 = Legs[ArrayPos0].FootEntity153if Foot[ArrayPos1].State == BOSSFOOT2_HANDLE_STEP154if Object.XOffSet >= 88155GetBit(TempValue0, Foot[ArrayPos1].LegSide, 0)156157if TempValue0 == true158SetBit(Foot[ArrayPos1].LegSide, 0, 0)159SetBit(Object.LegSide, 0, 1)160end if161162CallFunction(BossLegJoint2_HandleMovement)163end if164165else166Foot[ArrayPos1].State = BOSSFOOT2_STEP167if Object.XOffSet < 88168Object.XOffSet += Object.YOffSet169if Object.XOffSet > 88170Object.XOffSet = 88171end if172end if173CallFunction(BossLegJoint2_HandleMovement)174175end if176end function177178179sub ObjectMain180switch Object.State181case BOSSLEGJOINT2_SETUP182Object.XOffSet = 88183TempValue0 = 2184TempValue0 *= Object.PropertyValue185TempValue0 /= 10186Object.YOffSet = TempValue0187Object.State = BOSSLEGJOINT2_DESCEND188break189190case BOSSLEGJOINT2_STEP_START191ArrayPos0 = Object.LegsEntity192ArrayPos1 = Legs[ArrayPos0].FootEntity193if Foot[ArrayPos1].State != BOSSFOOT2_STEP_OPPOSITE194if Foot[ArrayPos1].State != BOSSFOOT2_HANDLE_STEP_OPPOSITE195SetBit(Foot[ArrayPos1].LegSide, 0, 0)196Foot[ArrayPos1].State = BOSSFOOT2_STEP_OPPOSITE197end if198end if199200TempValue0 = false201if Object.XOffSet > 0202Object.XOffSet -= Object.YOffSet203if Object.XOffSet > 0204CallFunction(BossLegJoint2_HandleMovement)205TempValue0 = true206end if207end if208209if TempValue0 == false210Object.XOffSet = 0211if Foot[ArrayPos1].State != BOSSFOOT2_HANDLE_STEP_OPPOSITE212GetBit(TempValue0, Foot[ArrayPos1].LegSide, 0)213if TempValue0 == false214CallFunction(BossLegJoint2_HandleMovement)215else216SetBit(Foot[ArrayPos1].LegSide, 0, 0)217Object.State = BOSSLEGJOINT2_STEP218CallFunction(BossLegJoint2_HandleMovement)219end if220else221Object.State = BOSSLEGJOINT2_STEP222CallFunction(BossLegJoint2_HandleMovement)223end if224end if225break226227case BOSSLEGJOINT2_STEP228ArrayPos0 = Object.LegsEntity229ArrayPos1 = Legs[ArrayPos0].FootEntity230Object.XOffSet += Object.YOffSet231if Object.XOffSet >= 88232Object.XOffSet = 88233Object.State = BOSSLEGJOINT2_STEP_END234Foot[ArrayPos1].State = BOSSFOOT2_STEP235end if236CallFunction(BossLegJoint2_HandleMovement)237break238239case BOSSLEGJOINT2_STEP_END240ArrayPos0 = Object.LegsEntity241ArrayPos1 = Legs[ArrayPos0].FootEntity242GetBit(TempValue0, Foot[ArrayPos1].LegSide, 4)243if TempValue0 == 1244SetBit(Object.LegSide, 0, 1)245end if246CallFunction(BossLegJoint2_HandleMovement)247break248249case BOSSLEGJOINT2_WAIT_LEG // wait for the other leg to move250GetBit(TempValue0, Object.LegSide, 0)251if TempValue0 == 0252Object.XOffSet -= Object.YOffSet253if Object.XOffSet < 24254Object.XOffSet = 24255SetBit(Object.LegSide, 0, 1)256end if257end if258CallFunction(BossLegJoint2_HandleMovement)259break260261case BOSSLEGJOINT2_LANDING // Only the right uses this, the left mimics262ArrayPos0 = Object.LegREntity263ArrayPos1 = LegR[ArrayPos0].FootREntity264if FootR[ArrayPos1].State == BOSSFOOT2_HANDLE_STEP_OPPOSITE265if Object.XOffSet == 0266GetBit(TempValue0, FootR[ArrayPos1].LegSide, 0)267if TempValue0 == true268SetBit(FootR[ArrayPos1].LegSide, 0, 0)269SetBit(Object.LegSide, 0, 1)270end if271272CallFunction(BossLegJoint2_HandleMovement)273else274if Object.XOffSet != 0275Object.XOffSet -= Object.YOffSet276if Object.XOffSet < 0277Object.XOffSet = 0278end if279end if280281CallFunction(BossLegJoint2_HandleMovement)282end if283else284FootR[ArrayPos1].State = BOSSFOOT2_STEP_OPPOSITE285286if Object.XOffSet != 0287Object.XOffSet -= Object.YOffSet288if Object.XOffSet < 0289Object.XOffSet = 0290end if291end if292CallFunction(BossLegJoint2_HandleMovement)293end if294break295296case BOSSLEGJOINT2_DESCEND // Only the right uses this, the left mimics297CallFunction(BossLegJoint2_HandleLanding)298break299300case BOSSLEGJOINT2_STAND301if Object.XOffSet < 24302Object.XOffSet += Object.YOffSet303304ArrayPos0 = Object.LegsEntity305ArrayPos1 = Legs[ArrayPos0].FootEntity306SetBit(Foot[ArrayPos1].LegSide, 7, 1)307308ArrayPos0 = Object.BodyEntity309ArrayPos1 = Body[ArrayPos0].LegJointLEntity310311ArrayPos0 = LegJointL[ArrayPos1].LegLEntity312ArrayPos1 = Body[ArrayPos0].LegJointREntity313SetBit(LegJointR[ArrayPos1].LegSide, 7, 1)314315CallFunction(BossLegJoint2_HandleLanding)316if Object.XOffSet > 24317Object.XOffSet = 24318end if319else320if Object.XOffSet > 24321ArrayPos0 = Object.LegsEntity322ArrayPos1 = Legs[ArrayPos0].FootEntity323if Foot[ArrayPos1].State == BOSSFOOT2_HANDLE_STEP_OPPOSITE324325if Object.XOffSet == 0326327GetBit(TempValue0, Foot[ArrayPos1].LegSide, 0)328if TempValue0 == true329SetBit(Foot[ArrayPos1].LegSide, 0, 0)330SetBit(Object.LegSide, 0, 1)331end if332333CallFunction(BossLegJoint2_HandleMovement)334else335if Object.XOffSet != 0336Object.XOffSet -= Object.YOffSet337if Object.XOffSet < 0338Object.XOffSet = 0339end if340end if341342CallFunction(BossLegJoint2_HandleMovement)343end if344345else346Foot[ArrayPos1].State = BOSSFOOT2_STEP_OPPOSITE347if Object.XOffSet != 0348Object.XOffSet -= Object.YOffSet349if Object.XOffSet < 0350Object.XOffSet = 0351end if352end if353354CallFunction(BossLegJoint2_HandleMovement)355end if356357Object.XOffSet -= Object.YOffSet358if Object.XOffSet < 24359Object.XOffSet = 24360end if361362else363ArrayPos0 = Object.LegsEntity364ArrayPos1 = Legs[ArrayPos0].FootEntity365GetBit(TempValue0, Foot[ArrayPos1].LegSide, 0)366if TempValue0 == true367SetBit(Object.LegSide, 0, 1)368end if369370CallFunction(BossLegJoint2_HandleMovement)371end if372373end if374break375376case BOSSLEGJOINT2_MIMIC_RIGHT // only the left leg uses this377ArrayPos0 = Object.BodyEntity378ArrayPos1 = Body[ArrayPos0].LegJointREntity379Object.XPos = LegJointR[ArrayPos1].XPos380Object.XPos -= 0xA0000381Object.YPos = LegJointR[ArrayPos1].YPos382Object.XOffSet = LegJointR[ArrayPos1].XOffSet383break384385case BOSSLEGJOINT2_STEP_START_BW386ArrayPos0 = Object.LegsEntity387ArrayPos1 = Legs[ArrayPos0].FootEntity388TempValue1 = false389if Foot[ArrayPos1].State != BOSSFOOT2_STEP_OPPOSITE390391if Foot[ArrayPos1].State != BOSSFOOT2_HANDLE_STEP_OPPOSITE392SetBit(Foot[ArrayPos1].LegSide, 0, 0)393Foot[ArrayPos1].State = BOSSFOOT2_STEP_OPPOSITE394else395if Object.XOffSet != 32396397Object.XOffSet -= Object.YOffSet398if Object.XOffSet > 0399TempValue1 = true400end if401402end if403404if TempValue1 == false405Object.XOffSet = 32406SetBit(Foot[ArrayPos1].LegSide, 0, 0)407Object.State = BOSSLEGJOINT2_STEP_BW408end if409410end if411412end if413414CallFunction(BossLegJoint2_HandleMovement)415break416417case BOSSLEGJOINT2_STEP_BW418ArrayPos0 = Object.LegsEntity419ArrayPos1 = Legs[ArrayPos0].FootEntity420421Object.XOffSet += Object.YOffSet422if Object.XOffSet >= 48423Object.XOffSet = 48424Object.State = BOSSLEGJOINT2_STEP_END425Foot[ArrayPos1].State = BOSSFOOT2_STEP426end if427428CallFunction(BossLegJoint2_HandleMovement)429break430431case BOSSLEGJOINT2_WAIT_LEG_BW432GetBit(TempValue0, Object.LegSide, 0)433if TempValue0 == false434435ArrayPos0 = Object.LegsEntity436ArrayPos1 = Legs[ArrayPos0].FootEntity437if Foot[ArrayPos1].State != BOSSFOOT2_STEP438439if Foot[ArrayPos1].State != BOSSFOOT2_HANDLE_STEP440Foot[ArrayPos1].State = BOSSFOOT2_STEP441else442Object.XOffSet += Object.YOffSet443if Object.XOffSet >= 80444SetBit(Object.LegSide, 0, 1)445end if446447end if448449end if450451end if452CallFunction(BossLegJoint2_HandleMovement)453break454455case BOSSLEGJOINT2_DESTROYED456GetBit(TempValue0, Object.LegSide, 4)457if TempValue0 == false458Object.XOffSet -= 0x600459else460Object.XOffSet += 0x600461end if462Object.XPos += Object.XOffSet463464Object.YOffSet += 0x1860465Object.YPos += Object.YOffSet466467if Object.OutOfBounds == true468Object.Type = TypeName[Blank Object]469Object.Priority = PRIORITY_BOUNDS470end if471break472473end switch474end sub475476477sub ObjectDraw478DrawSprite(0)479end sub480481482sub ObjectStartup483LoadSpriteSheet("R1/Objects3.gif")484485SpriteFrame(-8, -8, 16, 16, 74, 42) // #0 - Leg Joint486end sub487488489// ========================490// Editor Subs491// ========================492493sub RSDKDraw494DrawSprite(0)495end sub496497498sub RSDKLoad499LoadSpriteSheet("R1/Objects3.gif")500SpriteFrame(-8, -8, 16, 16, 74, 42) // #0 - Leg Joint501502SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")503end sub504505506