Path: blob/main/Scripts/R1/Boss_LegJoint.txt
1319 views
//---------------Sonic CD Boss Leg Joint Script---------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//34// Aliases5#alias Object.Value0 : Object.BodyEntity6#alias Object.Value1 : Object.LegsEntity7#alias Object.Value1 : Object.LegREntity // Alt. for Right leg joint8#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// Boss Body aliases15#alias Object.Value0 : Body.FaceEntity16#alias Object.State : Body.State17#alias Object.XPos : Body.XPos18#alias Object.YPos : Body.YPos19#alias Object.Value1 : Body.LegJointREntity20#alias Object.Value2 : Body.LegJointLEntity2122// Boss Face aliases23#alias Object.XPos : Face.XPos24#alias Object.YPos : Face.YPos2526// Boss Foot aliases27#alias Object.XPos : Foot.XPos28#alias Object.YPos : Foot.YPos29#alias Object.State : Foot.State30#alias Object.Value2 : Foot.XOffSet31#alias Object.Value4 : Foot.LegSide3233// Boss Legs aliases34#alias Object.Value1 : Legs.FootEntity35#alias Object.State : Legs.State3637// Boss Foot (Right) aliases38#alias Object.XPos : FootR.XPos39#alias Object.YPos : FootR.YPos40#alias Object.State : FootR.State41#alias Object.Value2 : FootR.XOffSet42#alias Object.Value4 : FootR.LegSide4344// Boss Legs (Right) aliases45#alias Object.Value1 : LegR.FootREntity46#alias Object.State : LegR.State4748// Boss Leg Joint (Right) Aliases49#alias Object.Priority : LegJointR.Priority50#alias Object.Value0 : LegJointR.BodyEntity51#alias Object.Value1 : LegJointR.LegREntity52#alias Object.Value2 : LegJointR.XOffSet53#alias Object.Value4 : LegJointR.LegSide54#alias Object.XPos : LegJointR.XPos55#alias Object.YPos : LegJointR.YPos5657// Boss Leg Joint (Left) Aliases58#alias Object.Priority : LegJointL.Priority59#alias Object.DrawOrder : LegJointL.DrawOrder60#alias Object.Value0 : LegJointL.BodyEntity61#alias Object.Value1 : LegJointL.LegLEntity6263// States64#alias 0 : BOSSLEGJOINT_SETUP65#alias 1 : BOSSLEGJOINT_STEP_START66#alias 2 : BOSSLEGJOINT_STEP67#alias 3 : BOSSLEGJOINT_STEP_END68#alias 4 : BOSSLEGJOINT_WAIT_LEG69#alias 5 : BOSSLEGJOINT_LANDING70#alias 6 : BOSSLEGJOINT_DESCEND71#alias 7 : BOSSLEGJOINT_STAND72#alias 8 : BOSSLEGJOINT_MIMIC_RIGHT73#alias 9 : BOSSLEGJOINT_STEP_START_BW74#alias 10 : BOSSLEGJOINT_STEP_BW75#alias 11 : BOSSLEGJOINT_WAIT_LEG_BW76#alias 12 : BOSSLEGJOINT_DESTROYED7778// Boss Foot States79#alias 1 : BOSSFOOT_STEP80#alias 2 : BOSSFOOT_HANDLE_STEP81#alias 3 : BOSSFOOT_STEP_OPPOSITE82#alias 4 : BOSSFOOT_HANDLE_STEP_OPPOSITE8384// Priority85#alias 0 : PRIORITY_BOUNDS8687// Function declarations88#function BossLegJoint_JointRotation89#function BossLegJoint_HandleMovement90#function BossLegJoint_HandleLanding919293function BossLegJoint_JointRotation94ArrayPos0 = Object.BodyEntity95Object.XPos = Body[ArrayPos0].XPos96Object.XPos += 0xC000097Object.XPos += TempValue798if Object.DrawOrder == 299Object.XPos -= 0xA0000100end if101Object.YPos = Body[ArrayPos0].YPos102Object.YPos += 0x140000103Object.YPos += TempValue6104end function105106107function BossLegJoint_HandleMovement108Sin256(TempValue6, Object.XOffSet)109TempValue6 <<= 12110Cos256(TempValue7, Object.XOffSet)111TempValue7 <<= 12112GetBit(TempValue0, Object.LegSide, 4)113if TempValue0 == false114SetBit(Object.LegSide, 1, 0)115CallFunction(BossLegJoint_JointRotation)116else117GetBit(TempValue0, Object.LegSide, 5)118if TempValue0 == false119CallFunction(BossLegJoint_JointRotation)120else121GetBit(TempValue0, Object.LegSide, 1)122if TempValue0 == false123SetBit(Object.LegSide, 1, 1)124Object.XVelocity = TempValue6125Object.YVelocity = TempValue7126else127ArrayPos0 = Object.BodyEntity128ArrayPos1 = Body[ArrayPos0].FaceEntity129130TempValue0 = TempValue7131TempValue0 -= Object.YVelocity132Object.YVelocity = TempValue7133134Body[ArrayPos0].XPos -= TempValue0135Face[ArrayPos1].XPos -= TempValue0136137TempValue0 = TempValue6138TempValue0 -= Object.XVelocity139Object.XVelocity = TempValue6140141Body[ArrayPos0].YPos -= TempValue0142Face[ArrayPos1].YPos -= TempValue0143end if144end if145end if146end function147148149function BossLegJoint_HandleLanding150ArrayPos0 = Object.LegsEntity151ArrayPos1 = Legs[ArrayPos0].FootEntity152if Foot[ArrayPos1].State == BOSSFOOT_HANDLE_STEP153if Object.XOffSet >= 88154GetBit(TempValue0, Foot[ArrayPos1].LegSide, 0)155156if TempValue0 == true157SetBit(Foot[ArrayPos1].LegSide, 0, 0)158SetBit(Object.LegSide, 0, 1)159end if160161CallFunction(BossLegJoint_HandleMovement)162end if163164else165Foot[ArrayPos1].State = BOSSFOOT_STEP166if Object.XOffSet < 88167Object.XOffSet += Object.YOffSet168end if169CallFunction(BossLegJoint_HandleMovement)170171end if172end function173174175sub ObjectMain176switch Object.State177case BOSSLEGJOINT_SETUP178Object.XOffSet = 88179Object.YOffSet = 2180Object.State = BOSSLEGJOINT_DESCEND181break182183case BOSSLEGJOINT_STEP_START184ArrayPos0 = Object.LegsEntity185ArrayPos1 = Legs[ArrayPos0].FootEntity186if Foot[ArrayPos1].State != BOSSFOOT_STEP_OPPOSITE187if Foot[ArrayPos1].State != BOSSFOOT_HANDLE_STEP_OPPOSITE188SetBit(Foot[ArrayPos1].LegSide, 0, 0)189Foot[ArrayPos1].State = BOSSFOOT_STEP_OPPOSITE190end if191end if192193TempValue0 = false194if Object.XOffSet > 0195Object.XOffSet -= Object.YOffSet196if Object.XOffSet > 0197CallFunction(BossLegJoint_HandleMovement)198TempValue0 = true199end if200end if201202if TempValue0 == false203Object.XOffSet = 0204if Foot[ArrayPos1].State != BOSSFOOT_HANDLE_STEP_OPPOSITE205GetBit(TempValue0, Foot[ArrayPos1].LegSide, 0)206if TempValue0 == false207CallFunction(BossLegJoint_HandleMovement)208else209SetBit(Foot[ArrayPos1].LegSide, 0, 0)210Object.State = BOSSLEGJOINT_STEP211CallFunction(BossLegJoint_HandleMovement)212end if213else214Object.State = BOSSLEGJOINT_STEP215CallFunction(BossLegJoint_HandleMovement)216end if217end if218break219220case BOSSLEGJOINT_STEP221ArrayPos0 = Object.LegsEntity222ArrayPos1 = Legs[ArrayPos0].FootEntity223Object.XOffSet += Object.YOffSet224if Object.XOffSet >= 88225Object.XOffSet = 88226Object.State = BOSSLEGJOINT_STEP_END227Foot[ArrayPos1].State = BOSSFOOT_STEP228end if229CallFunction(BossLegJoint_HandleMovement)230break231232case BOSSLEGJOINT_STEP_END233ArrayPos0 = Object.LegsEntity234ArrayPos1 = Legs[ArrayPos0].FootEntity235GetBit(TempValue0, Foot[ArrayPos1].LegSide, 4)236if TempValue0 == 1237SetBit(Object.LegSide, 0, 1)238end if239CallFunction(BossLegJoint_HandleMovement)240break241242case BOSSLEGJOINT_WAIT_LEG // wait for the other leg to move243GetBit(TempValue0, Object.LegSide, 0)244if TempValue0 == 0245Object.XOffSet -= Object.YOffSet246if Object.XOffSet < 24247Object.XOffSet = 24248SetBit(Object.LegSide, 0, 1)249end if250end if251CallFunction(BossLegJoint_HandleMovement)252break253254case BOSSLEGJOINT_LANDING // Only the right onse uses this, the left mimics255ArrayPos0 = Object.LegREntity256ArrayPos1 = LegR[ArrayPos0].FootREntity257if FootR[ArrayPos1].State == BOSSFOOT_HANDLE_STEP_OPPOSITE258if Object.XOffSet == 0259GetBit(TempValue0, FootR[ArrayPos1].LegSide, 0)260if TempValue0 == true261SetBit(FootR[ArrayPos1].LegSide, 0, 0)262SetBit(Object.LegSide, 0, 1)263end if264265CallFunction(BossLegJoint_HandleMovement)266else267if Object.XOffSet != 0268Object.XOffSet -= Object.YOffSet269end if270271CallFunction(BossLegJoint_HandleMovement)272end if273else274FootR[ArrayPos1].State = BOSSFOOT_STEP_OPPOSITE275276if Object.XOffSet != 0277Object.XOffSet -= Object.YOffSet278end if279280CallFunction(BossLegJoint_HandleMovement)281end if282break283284case BOSSLEGJOINT_DESCEND // Only the right onse uses this, the left mimics285CallFunction(BossLegJoint_HandleLanding)286break287288case BOSSLEGJOINT_STAND289if Object.XOffSet < 24290Object.XOffSet += Object.YOffSet291292ArrayPos0 = Object.LegsEntity293ArrayPos1 = Legs[ArrayPos0].FootEntity294SetBit(Foot[ArrayPos1].LegSide, 7, 1)295296ArrayPos0 = Object.BodyEntity297ArrayPos1 = Body[ArrayPos0].LegJointLEntity298299ArrayPos0 = LegJointL[ArrayPos1].LegLEntity300ArrayPos1 = Body[ArrayPos0].LegJointREntity301SetBit(LegJointR[ArrayPos1].LegSide, 7, 1)302303CallFunction(BossLegJoint_HandleLanding)304else305if Object.XOffSet > 24306307Object.XOffSet -= Object.YOffSet308ArrayPos0 = Object.LegsEntity309ArrayPos1 = Legs[ArrayPos0].FootEntity310if Foot[ArrayPos1].State == BOSSFOOT_HANDLE_STEP_OPPOSITE311312if Object.XOffSet == 0313314GetBit(TempValue0, Foot[ArrayPos1].LegSide, 0)315if TempValue0 == true316SetBit(Foot[ArrayPos1].LegSide, 0, 0)317SetBit(Object.LegSide, 0, 1)318end if319320CallFunction(BossLegJoint_HandleMovement)321else322if Object.XOffSet != 0323Object.XOffSet -= Object.YOffSet324end if325326CallFunction(BossLegJoint_HandleMovement)327end if328329else330Foot[ArrayPos1].State = BOSSFOOT_STEP_OPPOSITE331if Object.XOffSet != 0332Object.XOffSet -= Object.YOffSet333end if334335CallFunction(BossLegJoint_HandleMovement)336end if337338else339ArrayPos0 = Object.LegsEntity340ArrayPos1 = Legs[ArrayPos0].FootEntity341GetBit(TempValue0, Foot[ArrayPos1].LegSide, 0)342if TempValue0 == true343SetBit(Object.LegSide, 0, 1)344end if345346CallFunction(BossLegJoint_HandleMovement)347end if348349end if350break351352case BOSSLEGJOINT_MIMIC_RIGHT // only the left leg uses this353ArrayPos0 = Object.BodyEntity354ArrayPos1 = Body[ArrayPos0].LegJointREntity355Object.XPos = LegJointR[ArrayPos1].XPos356Object.XPos -= 0xA0000357Object.YPos = LegJointR[ArrayPos1].YPos358Object.XOffSet = LegJointR[ArrayPos1].XOffSet359break360361case BOSSLEGJOINT_STEP_START_BW362ArrayPos0 = Object.LegsEntity363ArrayPos1 = Legs[ArrayPos0].FootEntity364TempValue1 = false365if Foot[ArrayPos1].State != BOSSFOOT_STEP_OPPOSITE366367if Foot[ArrayPos1].State != BOSSFOOT_HANDLE_STEP_OPPOSITE368SetBit(Foot[ArrayPos1].LegSide, 0, 0)369Foot[ArrayPos1].State = BOSSFOOT_STEP_OPPOSITE370else371if Object.XOffSet != 32372373Object.XOffSet -= Object.YOffSet374if Object.XOffSet > 0375TempValue1 = true376end if377378end if379380if TempValue1 == false381Object.XOffSet = 32382SetBit(Foot[ArrayPos1].LegSide, 0, 0)383Object.State = BOSSLEGJOINT_STEP_BW384end if385386end if387388end if389390CallFunction(BossLegJoint_HandleMovement)391break392393case BOSSLEGJOINT_STEP_BW394ArrayPos0 = Object.LegsEntity395ArrayPos1 = Legs[ArrayPos0].FootEntity396397Object.XOffSet += Object.YOffSet398if Object.XOffSet >= 48399Object.XOffSet = 48400Object.State = BOSSLEGJOINT_STEP_END401Foot[ArrayPos1].State = BOSSFOOT_STEP402end if403404CallFunction(BossLegJoint_HandleMovement)405break406407case BOSSLEGJOINT_WAIT_LEG_BW408GetBit(TempValue0, Object.LegSide, 0)409if TempValue0 == false410411ArrayPos0 = Object.LegsEntity412ArrayPos1 = Legs[ArrayPos0].FootEntity413if Foot[ArrayPos1].State != BOSSFOOT_STEP414415if Foot[ArrayPos1].State != BOSSFOOT_HANDLE_STEP416Foot[ArrayPos1].State = BOSSFOOT_STEP417else418Object.XOffSet += Object.YOffSet419if Object.XOffSet >= 80420SetBit(Object.LegSide, 0, 1)421end if422423end if424425end if426427end if428CallFunction(BossLegJoint_HandleMovement)429break430431case BOSSLEGJOINT_DESTROYED432GetBit(TempValue0, Object.LegSide, 4)433if TempValue0 == false434Object.XOffSet -= 0x600435else436Object.XOffSet += 0x600437end if438Object.XPos += Object.XOffSet439440Object.YOffSet += 0x1860441Object.YPos += Object.YOffSet442443if Object.OutOfBounds == true444Object.Type = TypeName[Blank Object]445Object.Priority = PRIORITY_BOUNDS446end if447break448449end switch450end sub451452453sub ObjectDraw454DrawSprite(0)455end sub456457458sub ObjectStartup459LoadSpriteSheet("R1/Objects3.gif")460461SpriteFrame(-8, -8, 16, 16, 74, 42) // #0 - Leg Joint462end sub463464465// ========================466// Editor Subs467// ========================468469sub RSDKDraw470DrawSprite(0)471end sub472473474sub RSDKLoad475LoadSpriteSheet("R1/Objects3.gif")476SpriteFrame(-8, -8, 16, 16, 74, 42) // #0 - Leg Joint477478SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")479end sub480481482