Path: blob/main/Scripts/R5/NoroNoro.txt
1319 views
//-----------------Sonic CD Noro Noro 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.Spikes78#alias Object.PropertyValue : Object.Quality910// States11#alias 0 : NORONORO_FINDGROUND12#alias 1 : NORONORO_ROLLLEFT13#alias 2 : NORONORO_ROLLRIGHT1415// Gravity16#alias 1 : GRAVITY_AIR1718// Stage SFX19#alias 1 : SFX_S_SPIKES2021// Collision Sides22#alias 0 : CSIDE_FLOOR2324// Badnik Quality / Property Values25#alias 0 : GOOD_QUALITY26#alias 1 : BAD_QUALITY272829sub ObjectMain3031// Firstly, animate the object32Object.Frame++33Object.Frame %= 603435switch Object.State36case NORONORO_FINDGROUND3738// Check to see if the Noro Noro's on the floor39ObjectTileCollision(CSIDE_FLOOR, 0, 16, 0)4041if CheckResult == true42// If it is, then advance states43Object.State = NORONORO_ROLLLEFT44else45// The Noro Noro's still in the air, so move down a pixel46Object.YPos += 0x1000047end if48break4950case NORONORO_ROLLLEFT5152// Roll 0.25 pixels left53Object.XPos -= 0x40005455Object.Timer--56if Object.Timer == -32057Object.State = NORONORO_ROLLRIGHT58Object.Direction = FACING_LEFT59end if6061ObjectTileGrip(CSIDE_FLOOR, 0, 16, 0)62if CheckResult == 063Object.State = NORONORO_ROLLRIGHT64Object.Timer = 065Object.Direction = FACING_LEFT66end if67break6869case NORONORO_ROLLRIGHT70Object.XPos += 0x400071Object.Timer++72if Object.Timer == 32073Object.State = NORONORO_ROLLLEFT74Object.Direction = FACING_RIGHT75end if7677ObjectTileGrip(CSIDE_FLOOR, 0, 16, 0)78if CheckResult == 079Object.State = NORONORO_ROLLLEFT80Object.Timer = 081Object.Direction = FACING_RIGHT82end if83break8485end switch8687CallFunction(StageSetup_CheckGoodFuture)8889end sub909192sub ObjectPlayerInteraction9394// There's a small difference in interaction based on if the Player is in the air or not95// If in the air - Spikes are checked first, *then* the Noro Noro itself96// In on the ground - the Noro Noro is checked upon first, *then* Spikes are checked9798// This only applies to Spikes Noro Noros, normal ones are just about the same regardless of the Player's aerial state99100if Player.Gravity == GRAVITY_AIR101102if Object.Quality == GOOD_QUALITY103// Spiked Noro Noro variant104105// Make sure this Object hasn't been turned into a Flower yet106if Object.Type == TypeName[Noro Noro]107if Object.State > NORONORO_FINDGROUND108PlayerObjectCollision(C_TOUCH, -96, -256, 96, 256)109110if CheckResult == true111if Object.Spikes == false112// If Spikes aren't already out, then play the SFX113PlayStageSfx(SFX_S_SPIKES, false)114end if115116// Eject the Spikes!117Object.Spikes = true118else119// The Player's out of range, retract the Spikes for now...120Object.Spikes = false121end if122123// Spikes hitbox124if Object.Spikes == true125PlayerObjectCollision(C_TOUCH, -8, -18, 8, -2)126127if CheckResult == true128// Directly damage the Player129CallFunction(Player_Hit)130end if131end if132end if133end if134end if135136// Normal Noro Noro hitbox137#platform: Use_Standalone138PlayerObjectCollision(C_TOUCH, -14, -14, 14, 14)139#endplatform140#platform: Use_Origins141PlayerObjectCollision(C_ENEMY, -14, -14, 14, 14)142#endplatform143if CheckResult == true144CallFunction(Player_BadnikBreak)145end if146else147148// First, check the Noro Noro's hitbox149#platform: Use_Standalone150PlayerObjectCollision(C_TOUCH, -14, -14, 14, 14)151#endplatform152#platform: Use_Origins153PlayerObjectCollision(C_ENEMY, -14, -14, 14, 14)154#endplatform155if CheckResult == true156CallFunction(Player_BadnikBreak)157end if158159if Object.Quality == GOOD_QUALITY160161// Make sure the Noro Noro hasn't already been detroyed yet162if Object.Type == TypeName[Noro Noro]163if Object.State > NORONORO_FINDGROUND164PlayerObjectCollision(C_TOUCH, -96, -256, 96, 256)165166if CheckResult == true167if Object.Spikes == false168// If Spikes aren't out already, then play the SFX for ejected the Spikes169PlayStageSfx(SFX_S_SPIKES, false)170end if171172// Get the Spikes ready173Object.Spikes = true174else175// Bring the Spikes back in for now...176Object.Spikes = false177end if178179// Check for the Spikes hitbox180if Object.Spikes == true181PlayerObjectCollision(C_TOUCH, -8, -18, 8, -2)182183if CheckResult == true184CallFunction(Player_Hit)185end if186end if187end if188end if189end if190191end if192193end sub194195196sub ObjectDraw197if Object.Quality == GOOD_QUALITY198// Spikes Noro Noro199DrawSpriteFX(Object.Spikes, FX_FLIP, Object.XPos, Object.YPos)200else201// Normal Noro Noro202DrawSpriteFX(2, FX_FLIP, Object.XPos, Object.YPos)203end if204205if Object.Frame > 29206DrawSpriteFX(3, FX_FLIP, Object.XPos, Object.YPos)207end if208end sub209210211sub ObjectStartup212LoadSpriteSheet("R5/Objects.gif")213214// Noro Noro Frames215216// Spikes Ejecting Frame217SpriteFrame(-16, -24, 32, 40, 1, 150)218219// Spikes Ejected Frame220SpriteFrame(-16, -24, 32, 40, 34, 150)221222// Spikes Retracted Frame223SpriteFrame(-16, -16, 32, 32, 66, 117)224225// Blinking Frame226SpriteFrame(-16, -8, 16, 8, 67, 18)227228end sub229230231// ========================232// Editor Subs233// ========================234235sub RSDKEdit236if Editor.ReturnVariable == true237switch Editor.VariableID238case EDIT_VAR_PROPVAL // Property Value239CheckResult = Object.PropertyValue240break241case 0 // Type242CheckResult = Object.PropertyValue243break244end switch245else246switch Editor.VariableID247case EDIT_VAR_PROPVAL // Property Value248Object.PropertyValue = Editor.VariableValue249break250case 0 // Type251Object.PropertyValue = Editor.VariableValue252break253end switch254end if255end sub256257258sub RSDKDraw259DrawSprite(Object.PropertyValue)260end sub261262263sub RSDKLoad264LoadSpriteSheet("R5/Objects.gif")265SpriteFrame(-16, -24, 32, 40, 34, 150)266SpriteFrame(-16, -16, 32, 32, 66, 117)267268AddEditorVariable("condition")269SetActiveVariable("condition")270AddEnumVariable("Good Quality", GOOD_QUALITY)271AddEnumVariable("Bad Quality", BAD_QUALITY)272end sub273274275