Path: blob/main/Scripts/Mission/CollisionM093.txt
1319 views
//---------------Sonic CD Collision M093 Script---------------//1//--------Scripted by Christian Whitehead 'The Taxman'--------//2//-------Unpacked By Rubberduckycooly's Script Unpacker-------//3//--------------Used on Mission "M093 - Fast Foes"------------//45// Aliases6// Used in general by all badniks7#alias Object.Value0 : Badnik.Timer8#alias Object.Direction : Badnik.Direction9#alias Object.State : Badnik.State1011// Used by NoroNoro and Sasuri12#alias Object.Value2 : Badnik.SavedTimer1314// Used by KumoKumo and KumoKumo215#alias Object.YPos : Badnik.YPos16#alias Object.Value1 : Badnik.YVelocity17#alias Object.DrawOrder : Badnik.DrawOrder18#alias Object.PropertyValue : Badnik.Quality19#alias Object.Frame : Badnik.Frame2021// Mission Block Alias22#alias Object.PropertyValue : Object.BlocksNo2324// Badniks25#alias 53 : TYPE_NORONORO26#alias 54 : TYPE_SASURI27#alias 57 : TYPE_KUMOKUMO28#alias 76 : TYPE_KUMOKUMO22930// NoroNoro and Sasuri States31#alias 0 : BADNIK_FINDGROUND // Good thing both NoroNoro and Sasuri uses this32#alias 1 : BADNIK_MOVELEFT // CrawlLeft for Sasuri, RollLeft for NoroNoro33#alias 2 : BADNIK_MOVERIGHT // CrawlRight for Sasuri, RollRight for NoroNoro3435// KumoKumo States36#alias 0 : KUMOKUMO_AIRBORNE37#alias 1 : KUMOKUMO_GOOD_GROUND38#alias 2 : KUMOKUMO_BAD_GROUND3940// Badnik Quality / Property Values41#alias 0 : GOOD_QUALITY42#alias 1 : BAD_QUALITY4344// Priority45#alias 1 : PRIORITY_ACTIVE464748sub ObjectMain4950// This object fakes collision between Mission Blocks and Quartz Quadrant Badniks51// specifically for Mission 093, 'Fast Foes'.52// However, none of the badniks present in the level touches a mission block at any point53// that, along with the fact that Sasuri is present here despite never appearing in the level54// makes me think that the layout of the level was totally different when this object was made55// maybe starting from the middle of the level instead of the beginning?5657ArrayPos0 = 3258while ArrayPos0 < 105659CheckResult = false60switch Object[ArrayPos0].Type61case TYPE_NORONORO62case TYPE_SASURI63case TYPE_KUMOKUMO64case TYPE_KUMOKUMO265CheckResult = true66break6768end switch6970if CheckResult == true71ArrayPos1 = 3272Object.XPos = Object[ArrayPos0].XPos73Object.XPos >>= 1674Object.YPos = Object[ArrayPos0].YPos75Object.YPos >>= 1676else77ArrayPos1 = 200078end if7980while ArrayPos1 < 105681if Object[ArrayPos1].Type == TypeName[MissionBlock]82if Object[ArrayPos1].BlocksNo <= 183TempValue3 = -1684else85TempValue3 = -3286TempValue3 *= Object[ArrayPos1].PropertyValue87TempValue3 += 1688end if8990TempValue4 = 169192TempValue0 = Object[ArrayPos1].XPos93TempValue0 >>= 1694TempValue0 -= Object.XPos95CheckGreater(TempValue0, TempValue3)96TempValue1 = CheckResult97CheckLower(TempValue0, TempValue4)98TempValue1 &= CheckResult99if TempValue1 == true100TempValue2 = Object[ArrayPos1].YPos101TempValue2 >>= 16102103TempValue1 = Object.YPos104TempValue1 += 16105106TempValue2 -= TempValue1107CheckGreater(TempValue2, -16)108TempValue1 = CheckResult109CheckLower(TempValue2 ,15)110TempValue1 &= CheckResult111if TempValue1 == true112Object.YPos = Object[ArrayPos1].YPos113Object.YPos >>= 16114Object.YPos -= 32115116Object[ArrayPos0].YPos = Object.YPos117Object[ArrayPos0].YPos <<= 16118119TempValue2 = 16120end if121122if TempValue2 == 16123switch Object[ArrayPos0].Type124case TYPE_NORONORO125case TYPE_SASURI126Badnik[ArrayPos0].Timer = Badnik[ArrayPos0].SavedTimer127switch Badnik[ArrayPos0].State128case BADNIK_FINDGROUND129Badnik[ArrayPos0].State = BADNIK_MOVELEFT130break131132case BADNIK_MOVELEFT133TempValue5 = TempValue3134TempValue5 += 4135if TempValue0 > TempValue5136Badnik[ArrayPos0].Timer++137if Badnik[ArrayPos0].Timer != 320138Badnik[ArrayPos0].State = BADNIK_MOVERIGHT139Badnik[ArrayPos0].Direction = FACING_LEFT140end if141end if142break143144case BADNIK_MOVERIGHT145TempValue5 = TempValue4146TempValue5 -= 4147if TempValue0 < TempValue5148Badnik[ArrayPos0].Timer--149if Badnik[ArrayPos0].Timer != -320150Object[ArrayPos0].State = BADNIK_MOVELEFT151Object[ArrayPos0].Direction = FACING_RIGHT152end if153end if154break155end switch156157Badnik[ArrayPos0].SavedTimer = Badnik[ArrayPos0].Timer158break159160case TYPE_KUMOKUMO161case TYPE_KUMOKUMO2162if Badnik[ArrayPos0].State == KUMOKUMO_AIRBORNE163if Badnik[ArrayPos0].YVelocity > 0164Badnik[ArrayPos0].YPos += 0x80000165Badnik[ArrayPos0].Frame = 0166Badnik[ArrayPos0].DrawOrder = 3167if Badnik[ArrayPos0].Quality == GOOD_QUALITY168Badnik[ArrayPos0].State = KUMOKUMO_GOOD_GROUND169else170Badnik[ArrayPos0].State = KUMOKUMO_BAD_GROUND171Badnik[ArrayPos0].Direction = FACING_LEFT172end if173end if174end if175break176end switch177end if178end if179end if180ArrayPos1++181loop182ArrayPos0++183loop184end sub185186187sub ObjectStartup188ArrayPos0 = 32189while ArrayPos0 < 1056190if Object[ArrayPos0].Type == TypeName[CollisionM093]191Object[ArrayPos0].Priority = PRIORITY_ACTIVE192end if193ArrayPos0++194loop195end sub196197198// ========================199// Editor Subs200// ========================201202sub RSDKDraw203DrawSprite(0)204end sub205206207sub RSDKLoad208LoadSpriteSheet("Global/Display.gif")209SpriteFrame(-16, -16, 32, 32, 1, 143) // #0 - "Script" Icon210211SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")212end sub213214215216217