Path: blob/main/Scripts/R8/SpikePuzzle.txt
1319 views
//---------------Sonic CD Spike Puzzle 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.YVelocity7#alias Object.Value2 : Object.PieceType // 0 is not an actual piece8#alias Object.Value3 : Object.YOffset9#alias Object.Value4 : Object.PuzzlePiece1011// States12#alias 0 : SPIKEPUZZLE_SETUP13#alias 1 : SPIKEPUZZLE_CHECK_BOUNDS14#alias 2 : SPIKEPUZZLE_CREATE_PIECE1516// Priority17#alias 0 : PRIORITY_BOUNDS18#alias 1 : PRIORITY_ACTIVE1920// Collision21#alias 0 : CSIDE_FLOOR2223#alias 1 : PLAYER_COL_FLOOR24#alias 4 : PLAYER_COL_ROOF2526// Gravity27#alias 0 : GRAVITY_GROUND2829// Property Values30#alias 0 : PUZZLE_A31#alias 1 : PUZZLE_B3233// Function declarations34#function SpikePuzzle_Reset3536function SpikePuzzle_Reset3738Object.Timer = 039Object.PuzzlePiece = 14041Object[+1].Type = TypeName[Spike Puzzle]42Object[+1].XPos = Object.XPos43Object[+1].YPos = Object.YPos44Object[+1].YVelocity = 045Object[+1].YOffset = 164647Object[+2].Type = TypeName[Blank Object]48Object[+2].YVelocity = 049Object[+2].YOffset = 405051Object[+3].Type = TypeName[Blank Object]52Object[+3].YVelocity = 053Object[+3].YOffset = 645455Object[+4].Type = TypeName[Blank Object]56Object[+4].YVelocity = 057Object[+4].YOffset = 885859Object[+5].Type = TypeName[Blank Object]60Object[+5].YVelocity = 061Object[+5].YOffset = 1126263if Object.PropertyValue == PUZZLE_A64Object[+1].PieceType = 165Object[+2].PieceType = 266Object[+3].PieceType = 167Object[+4].PieceType = 368Object[+5].PieceType = 169else70Object[+1].PieceType = 171Object[+2].PieceType = 372Object[+3].PieceType = 173Object[+4].PieceType = 274Object[+5].PieceType = 175end if76end function777879sub ObjectMain80if Object.PieceType == 081if Object.OutOfBounds == true82CallFunction(SpikePuzzle_Reset)83Object.State = SPIKEPUZZLE_CHECK_BOUNDS84Object.Priority = PRIORITY_BOUNDS85end if8687switch Object.State88case SPIKEPUZZLE_SETUP89CallFunction(SpikePuzzle_Reset)90Object.State++91break9293case SPIKEPUZZLE_CHECK_BOUNDS94PlayerObjectCollision(C_TOUCH, -80, -8, 80, 224)95if CheckResult == true96Object.Priority = PRIORITY_ACTIVE97Object.State++98Object[+1].YVelocity = 0x800099end if100break101102case SPIKEPUZZLE_CREATE_PIECE103if Object.Timer < 284104Object.Timer++105else106TempValue0 = Object.YPos107TempValue0 += 0x400000108if Player.YPos > TempValue0109Object.Timer = 0110Object.PuzzlePiece++111if Object.PuzzlePiece < 6112ArrayPos0 = Object.EntityNo113ArrayPos0 += Object.PuzzlePiece114115Object[ArrayPos0].Type = TypeName[Spike Puzzle]116Object[ArrayPos0].XPos = Object.XPos117118Object[ArrayPos0].YPos = Object.YPos119Object[ArrayPos0].YPos -= 0x200000120121Object[ArrayPos0].YVelocity = 0x8000122else123Object.State++124end if125end if126end if127break128129end switch130else131Object.YPos += Object.YVelocity132ObjectTileCollision(CSIDE_FLOOR, 0, Object.YOffset, 0)133if CheckResult == true134Object.YVelocity = 0135end if136end if137end sub138139140sub ObjectPlayerInteraction141switch Object.PieceType142case 1143PlayerObjectCollision(C_BOX, -80, -9, -24, 16)144TempValue0 = CheckResult145PlayerObjectCollision(C_BOX, 24, -9, 80, 16)146TempValue0 += CheckResult147if TempValue0 == PLAYER_COL_FLOOR148Player.YPos += 0x10000149end if150if TempValue0 == PLAYER_COL_ROOF151if Player.Gravity == GRAVITY_GROUND152CallFunction(Player_Kill)153else154CallFunction(Player_Hit)155end if156end if157break158159case 2160PlayerObjectCollision(C_BOX, -80, -9, -56, 16)161TempValue0 = CheckResult162PlayerObjectCollision(C_BOX, -8, -9, 80, 16)163TempValue0 += CheckResult164if TempValue0 == PLAYER_COL_FLOOR165Player.YPos += 0x10000166end if167if TempValue0 == PLAYER_COL_ROOF168if Player.Gravity == GRAVITY_GROUND169CallFunction(Player_Kill)170else171CallFunction(Player_Hit)172end if173end if174break175176case 3177PlayerObjectCollision(C_BOX, -80, -9, 8, 16)178TempValue0 = CheckResult179PlayerObjectCollision(C_BOX, 56, -9, 80, 16)180TempValue0 += CheckResult181if TempValue0 == PLAYER_COL_FLOOR182Player.YPos += 0x10000183end if184if TempValue0 == PLAYER_COL_ROOF185if Player.Gravity == GRAVITY_GROUND186CallFunction(Player_Kill)187else188CallFunction(Player_Hit)189end if190end if191break192end switch193end sub194195196sub ObjectDraw197switch Object.PieceType198case 1199DrawSprite(0)200DrawSprite(1)201DrawSprite(2)202DrawSprite(3)203DrawSprite(4)204DrawSprite(5)205break206case 2207DrawSprite(6)208DrawSprite(7)209DrawSprite(8)210DrawSprite(9)211DrawSprite(10)212DrawSprite(11)213break214case 3215DrawSprite(12)216DrawSprite(13)217DrawSprite(14)218DrawSprite(15)219DrawSprite(16)220DrawSprite(17)221break222end switch223end sub224225226sub ObjectStartup227LoadSpriteSheet("R8/Objects2.gif")228229// First Piece230SpriteFrame(-80, -8, 24, 24, 133, 1) // #0 - Spike Small Chunk231SpriteFrame(-56, -8, 32, 24, 100, 1) // #1 - Spike Medium Chunk232SpriteFrame(-24, -8, 24, 16, 158, 1) // #2 - Spike BG Chunk233SpriteFrame(0, -8, 24, 16, 158, 1) // #3 - Spike BG Chunk234SpriteFrame(24, -8, 32, 24, 100, 1) // #4 - Spike Medium Chunk235SpriteFrame(56, -8, 24, 24, 133, 1) // #5 - Spike Small Chunk236237// Second Piece238SpriteFrame(-80, -8, 24, 24, 133, 1) // #6 - Spike Small Chunk239SpriteFrame(-56, -8, 24, 16, 158, 1) // #7 - Spike BG Chunk240SpriteFrame(-32, -8, 24, 16, 158, 1) // #8 - Spike BG Chunk241SpriteFrame(-8, -8, 32, 24, 100, 1) // #9 - Spike Medium Chunk242SpriteFrame(24, -8, 32, 24, 100, 1) // #10 - Spike Medium Chunk243SpriteFrame(56, -8, 24, 24, 133, 1) // #11 - Spike Small Chunk244245// Third Piece246SpriteFrame(-80, -8, 32, 24, 100, 1) // #12 - Spike Medium Chunk247SpriteFrame(-48, -8, 32, 24, 100, 1) // #13 - Spike Medium Chunk248SpriteFrame(-16, -8, 24, 24, 133, 1) // #14 - Spike Small Chunk249SpriteFrame(8, -8, 24, 16, 158, 1) // #15 - Spike BG Chunk250SpriteFrame(32, -8, 24, 16, 158, 1) // #16 - Spike BG Chunk251SpriteFrame(56, -8, 24, 24, 133, 1) // #17 - Spike Small Chunk252253end sub254255256// ========================257// Editor Subs258// ========================259260sub RSDKEdit261if Editor.ReturnVariable == true262switch Editor.VariableID263case EDIT_VAR_PROPVAL // Property Value264CheckResult = Object.PropertyValue265CheckResult &= 1266break267case 0 // type268CheckResult = Object.PropertyValue269CheckResult &= 1270break271end switch272else273switch Editor.VariableID274case EDIT_VAR_PROPVAL // Property Value275Object.PropertyValue = Editor.VariableValue276Object.PropertyValue &= 1277break278case 0 // type279Object.PropertyValue = Editor.VariableValue280Object.PropertyValue &= 1281break282end switch283end if284end sub285286287sub RSDKDraw288TempValue1 = 0289TempValue2 = TempValue1290TempValue2 += 6291while TempValue1 < TempValue2292DrawSprite(TempValue1)293TempValue1++294loop295296if Editor.ShowGizmos == true297Editor.DrawingOverlay = true298TempValue0 = Object.YPos299TempValue0 += 0x600000300Object.InkEffect = 1301ArrayPos0 = 5302while ArrayPos0 > 1303switch ArrayPos0304case 5305case 3306case 1307TempValue1 = 0308break309case 2310if Object.PropertyValue == PUZZLE_A311TempValue1 = 6312else313TempValue1 = 12314end if315break316case 4317if Object.PropertyValue == PUZZLE_A318TempValue1 = 12319else320TempValue1 = 6321end if322break323end switch324TempValue2 = TempValue1325TempValue2 += 6326while TempValue1 < TempValue2327DrawSpriteFX(TempValue1, FX_INK, Object.XPos, TempValue0)328TempValue1++329loop330TempValue0 -= 0x180000331ArrayPos0 --332loop333ArrayPos0 = Object.EntityNo334ArrayPos1 = ArrayPos0335ArrayPos1 += 5336while ArrayPos0 <= ArrayPos1337if Object[ArrayPos0].Type == TypeName[Blank Object]338DrawLine(Object.XPos, Object.YPos, Object[ArrayPos0].XPos, Object[ArrayPos0].YPos, 255, 255, 0)339end if340ArrayPos0++341loop342Editor.DrawingOverlay = false343end if344end sub345346347sub RSDKLoad348LoadSpriteSheet("R8/Objects2.gif")349350// First Piece351SpriteFrame(-80, -8, 24, 24, 133, 1) // #0 - Spike Small Chunk352SpriteFrame(-56, -8, 32, 24, 100, 1) // #1 - Spike Medium Chunk353SpriteFrame(-24, -8, 24, 16, 158, 1) // #2 - Spike BG Chunk354SpriteFrame(0, -8, 24, 16, 158, 1) // #3 - Spike BG Chunk355SpriteFrame(24, -8, 32, 24, 100, 1) // #4 - Spike Medium Chunk356SpriteFrame(56, -8, 24, 24, 133, 1) // #5 - Spike Small Chunk357358// Second Piece359SpriteFrame(-80, -8, 24, 24, 133, 1) // #6 - Spike Small Chunk360SpriteFrame(-56, -8, 24, 16, 158, 1) // #7 - Spike BG Chunk361SpriteFrame(-32, -8, 24, 16, 158, 1) // #8 - Spike BG Chunk362SpriteFrame(-8, -8, 32, 24, 100, 1) // #9 - Spike Medium Chunk363SpriteFrame(24, -8, 32, 24, 100, 1) // #10 - Spike Medium Chunk364SpriteFrame(56, -8, 24, 24, 133, 1) // #11 - Spike Small Chunk365366// Third Piece367SpriteFrame(-80, -8, 32, 24, 100, 1) // #12 - Spike Medium Chunk368SpriteFrame(-48, -8, 32, 24, 100, 1) // #13 - Spike Medium Chunk369SpriteFrame(-16, -8, 24, 24, 133, 1) // #14 - Spike Small Chunk370SpriteFrame(8, -8, 24, 16, 158, 1) // #15 - Spike BG Chunk371SpriteFrame(32, -8, 24, 16, 158, 1) // #16 - Spike BG Chunk372SpriteFrame(56, -8, 24, 24, 133, 1) // #17 - Spike Small Chunk373374AddEditorVariable("puzzle")375SetActiveVariable("puzzle")376AddEnumVariable("Puzzle A", PUZZLE_A)377AddEnumVariable("Puzzle B", PUZZLE_B)378end sub379380381