Path: blob/main/Scripts/R1/Mosqui.txt
1319 views
//-----------------Sonic CD Mosqui 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.XOriginPos7#alias Object.Value2 : Object.YOriginPos89#alias Object.PropertyValue : Object.Quality1011// States12#alias 0 : MOSQUI_MOVE_LEFT13#alias 1 : MOSQUI_MOVE_RIGHT14#alias 2 : MOSQUI_TURN_DOWN15#alias 3 : MOSQUI_DART16#alias 4 : MOSQUI_BLANK17#alias 5 : MOSQUI_RESTORE1819// Collision Sides20#alias 0 : CSIDE_FLOOR2122// Stage SFX23#alias 2 : SFX_S_JAB2425// Badnik Quality / Property Values26#alias 0 : GOOD_QUALITY27#alias 1 : BAD_QUALITY2829// Priority30#alias 0 : PRIORITY_BOUNDS31#alias 1 : PRIORITY_ACTIVE323334sub ObjectMain35if Object.Quality == GOOD_QUALITY36switch Object.State37case MOSQUI_MOVE_LEFT38Object.Priority = PRIORITY_ACTIVE39Object.Frame++40Object.Frame &= 34142Object.XPos -= 0x100004344Object.Timer--45if Object.Timer == -12846Object.State = MOSQUI_MOVE_RIGHT47Object.Direction = FACING_LEFT48end if4950if Player.YPos > Object.YPos // Check that player is below Mosqui51TempValue0 = Player.YPos52TempValue0 -= Object.YPos53if TempValue0 < 0x80000054if Player.XPos > Object.XPos // Check that player is in attack range55TempValue0 = Player.XPos56TempValue0 -= Object.XPos57else58TempValue0 = Object.XPos59TempValue0 -= Player.XPos60end if61if TempValue0 < 0x30000062Object.Timer = 063Object.Frame = 264Object.State = MOSQUI_TURN_DOWN65end if66end if67end if68break6970case MOSQUI_MOVE_RIGHT71Object.Frame++72Object.Frame &= 373Object.XPos += 0x1000074Object.Timer++75if Object.Timer == 12876Object.State = MOSQUI_MOVE_LEFT77Object.Direction = FACING_RIGHT78end if79if Player.YPos > Object.YPos // Check that player is below Mosqui80TempValue0 = Player.YPos81TempValue0 -= Object.YPos82if TempValue0 < 0x80000083if Player.XPos > Object.XPos // Check that player is in attack range84TempValue0 = Player.XPos85TempValue0 -= Object.XPos86else87TempValue0 = Object.XPos88TempValue0 -= Player.XPos89end if90if TempValue0 < 0x30000091Object.Timer = 092Object.Frame = 293Object.State = MOSQUI_TURN_DOWN94end if95end if96end if97break9899case MOSQUI_TURN_DOWN100Object.Timer++101if Object.Timer == 8102Object.Timer = 0103Object.Frame++104if Object.Frame == 5105Object.Frame = 4106Object.State = MOSQUI_DART107end if108end if109break110111case MOSQUI_DART112Object.YPos += 0x60000113ObjectTileCollision(CSIDE_FLOOR, 0, 14, 0)114if CheckResult == true115Object.State = MOSQUI_BLANK116PlayStageSfx(SFX_S_JAB, false)117end if118break119120case MOSQUI_BLANK121break122123case MOSQUI_RESTORE124if Object.OutOfBounds == true125Object.State = MOSQUI_MOVE_LEFT126Object.Direction = FACING_RIGHT127Object.Priority = PRIORITY_BOUNDS128end if129break130131end switch132else133switch Object.State134case MOSQUI_MOVE_LEFT135Object.Priority = PRIORITY_ACTIVE136137Object.Frame++138Object.Frame %= 10139140Object.XPos -= 0x8000141142Object.Timer--143if Object.Timer == -256144Object.State = MOSQUI_MOVE_RIGHT145Object.Direction = FACING_LEFT146end if147148if Player.YPos > Object.YPos // Check that player is below Mosqui149TempValue0 = Player.YPos150TempValue0 -= Object.YPos151if TempValue0 < 0x400000152if Player.XPos > Object.XPos // Check that player is in attack range153TempValue0 = Player.XPos154TempValue0 -= Object.XPos155else156TempValue0 = Object.XPos157TempValue0 -= Player.XPos158end if159if TempValue0 < 0x300000160Object.Timer = 0161Object.Frame = 7162Object.State = MOSQUI_TURN_DOWN163end if164end if165end if166break167168case MOSQUI_MOVE_RIGHT169Object.Frame++170Object.Frame %= 10171172Object.XPos += 0x8000173174Object.Timer++175if Object.Timer == 256176Object.State = MOSQUI_MOVE_LEFT177Object.Direction = FACING_RIGHT178end if179if Player.YPos > Object.YPos // Check that player is below Mosqui180TempValue0 = Player.YPos181TempValue0 -= Object.YPos182if TempValue0 < 0x400000183if Player.XPos > Object.XPos // Check that player is in attack range184TempValue0 = Player.XPos185TempValue0 -= Object.XPos186else187TempValue0 = Object.XPos188TempValue0 -= Player.XPos189end if190if TempValue0 < 0x300000191Object.Timer = 0192Object.Frame = 7193Object.State = MOSQUI_TURN_DOWN194end if195end if196end if197break198199case MOSQUI_TURN_DOWN200Object.Timer++201if Object.Timer == 16202Object.Timer = 0203Object.Frame++204if Object.Frame == 10205Object.Frame = 9206Object.State = MOSQUI_DART207end if208end if209break210211case MOSQUI_DART212Object.YPos += 0x60000213ObjectTileCollision(CSIDE_FLOOR, 0, 14, 0)214if CheckResult == true215Object.State = MOSQUI_BLANK216end if217break218219case MOSQUI_BLANK220break221222case MOSQUI_RESTORE223if Object.OutOfBounds == true224Object.State = MOSQUI_MOVE_LEFT225Object.Priority = PRIORITY_BOUNDS226end if227break228end switch229end if230231if Object.OutOfBounds == true232TempValue0 = Object.XPos233TempValue1 = Object.YPos234235Object.XPos = Object.XOriginPos236Object.YPos = Object.YOriginPos237238if Object.OutOfBounds == true239Object.XPos = Object.XOriginPos240Object.YPos = Object.YOriginPos241242Object.Direction = FACING_RIGHT243Object.Timer = 0244Object.Frame = 0245Object.Priority = PRIORITY_BOUNDS246247Object.State = MOSQUI_MOVE_LEFT248else249Object.XPos = TempValue0250Object.YPos = TempValue1251end if252end if253254CallFunction(StageSetup_CheckGoodFuture) // Check if it should be a flower255end sub256257258sub ObjectPlayerInteraction259if Object.State < MOSQUI_RESTORE260#platform: Use_Standalone261PlayerObjectCollision(C_TOUCH, -15, -10, 15, 10)262#endplatform263#platform: Use_Origins264PlayerObjectCollision(C_ENEMY, -15, -10, 15, 10)265#endplatform266if CheckResult == true267CallFunction(Player_BadnikBreak)268end if269end if270end sub271272273sub ObjectDraw274if Object.State < MOSQUI_RESTORE275if Object.Quality == GOOD_QUALITY276if Object.State < MOSQUI_TURN_DOWN277TempValue0 = Object.Frame278TempValue0 >>= 1279DrawSpriteFX(TempValue0, FX_FLIP, Object.XPos, Object.YPos)280else281DrawSpriteFX(Object.Frame, FX_FLIP, Object.XPos, Object.YPos)282end if283else284if Object.State < MOSQUI_TURN_DOWN285TempValue0 = Object.Frame286TempValue0 /= 5287TempValue0 += 5288DrawSpriteFX(TempValue0, FX_FLIP, Object.XPos, Object.YPos)289else290DrawSpriteFX(Object.Frame, FX_FLIP, Object.XPos, Object.YPos)291end if292end if293end if294end sub295296297sub ObjectStartup298LoadSpriteSheet("R1/Objects.gif")299300// Good Mosqui301SpriteFrame(-16, -11, 32, 24, 51, 1) // #0 - Mosqui Fly Frame 0302SpriteFrame(-16, -3, 32, 16, 51, 26) // #1 - Mosqui Fly Frame 1303SpriteFrame(-16, -14, 32, 32, 51, 43) // #2 - Mosqui Turning Frame 0304SpriteFrame(-6, -13, 24, 32, 117, 43) // #3 - Mosqui Turning Frame 1305SpriteFrame(-10, -14, 24, 32, 142, 43) // #4 - Mosqui Turning Frame 0306307// Bad Mosqui308SpriteFrame(-16, -11, 32, 24, 84, 1) // #5 - Mosqui Fly Frame 0309SpriteFrame(-16, -3, 32, 16, 84, 26) // #6 - Mosqui Fly Frame 1310SpriteFrame(-16, -14, 32, 32, 84, 43) // #7 - Mosqui Turning Frame 0311SpriteFrame(-6, -13, 24, 32, 51, 76) // #8 - Mosqui Turning Frame 1312SpriteFrame(-10, -14, 24, 32, 76, 76) // #9 - Mosqui Turning Frame 2313314// Used to be below LoadSpriteSheet, moved here for consistency315ArrayPos0 = 32316while ArrayPos0 < 1056317if Object[ArrayPos0].Type == TypeName[Mosqui]318Object[ArrayPos0].XOriginPos = Object[ArrayPos0].XPos319Object[ArrayPos0].YOriginPos = Object[ArrayPos0].YPos320end if321ArrayPos0++322loop323end sub324325326// ========================327// Editor Subs328// ========================329330sub RSDKEdit331if Editor.ReturnVariable == true332switch Editor.VariableID333case EDIT_VAR_PROPVAL // Property Value334CheckResult = Object.PropertyValue335CheckResult &= 1336break337case 0 // condition338CheckResult = Object.PropertyValue339CheckResult &= 1340break341end switch342else343switch Editor.VariableID344case EDIT_VAR_PROPVAL // Property Value345Object.PropertyValue = Editor.VariableValue346Object.PropertyValue &= 1347break348case 0 // condition349Object.PropertyValue = Editor.VariableValue350Object.PropertyValue &= 1351break352end switch353end if354end sub355356357sub RSDKDraw358DrawSprite(Object.PropertyValue)359end sub360361362sub RSDKLoad363LoadSpriteSheet("R1/Objects.gif")364365// Good Mosqui366SpriteFrame(-16, -11, 32, 24, 51, 1) // #0 - Mosqui Fly367368// Bad Mosqui369SpriteFrame(-16, -11, 32, 24, 84, 1) // #1 - Mosqui Fly370371AddEditorVariable("condition")372SetActiveVariable("condition")373AddEnumVariable("Good Quality", GOOD_QUALITY)374AddEnumVariable("Bad Quality", BAD_QUALITY)375end sub376377378