Path: blob/main/Scripts/R4/CrushBlocks.txt
1319 views
//----------------Sonic CD Crush Blocks 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.XVelocity7#alias Object.Value2 : Object.XOffSet8#alias Object.Value3 : Object.OnObject910// HUD Alias11#alias Object[24].PropertyValue : HUD.CurrentTimePeriod1213//States14#alias 0 : CRUSHBLOCKS_DELAY_115#alias 1 : CRUSHBLOCKS_OPEN16#alias 2 : CRUSHBLOCKS_DELAY_217#alias 3 : CRUSHBLOCKS_CRUSH1819// Time Periods20#alias 0 : TIME_PRESENT21#alias 1 : TIME_PAST22#alias 2 : TIME_GOOD_FUTURE23#alias 3 : TIME_BAD_FUTURE2425// Collision26#alias 1 : PLAYER_COL_FLOOR27#alias 2 : PLAYER_COL_LWALL28#alias 3 : PLAYER_COL_RWALL2930// Gravity31#alias 1 : GRAVITY_AIR323334sub ObjectMain35switch Object.State36case CRUSHBLOCKS_DELAY_137if Object.Timer < 6038Object.Timer++39else40Object.Timer = 041Object.XOffSet = 0x800042Object.State++43end if44break4546case CRUSHBLOCKS_OPEN47if Object.XVelocity < 0x60000048Object.XVelocity += 0x800049else50Object.XOffSet = 051Object.State++52end if53break5455case CRUSHBLOCKS_DELAY_256if Object.Timer < 12057Object.Timer++58else59Object.Timer = 060Object.XOffSet = -0x2000061Object.State++62end if63break6465case CRUSHBLOCKS_CRUSH66if Object.XVelocity > 067Object.XVelocity -= 0x2000068else69Object.XOffSet = 070Object.State = CRUSHBLOCKS_DELAY_171end if72break7374end switch75end sub767778sub ObjectPlayerInteraction79TempValue0 = Object.XPos80TempValue1 = 081TempValue2 = 082Object.XPos -= Object.XVelocity8384PlayerObjectCollision(C_BOX, -80, -64, -48, -32)85switch CheckResult86case PLAYER_COL_FLOOR87Player.XPos -= Object.XOffSet8889if Player.Speed == 090if Object.OnObject == false91Object.OnObject = true9293// Truncate these values94Player.XPos &= 0xFFFF000095Object.XVelocity &= 0xFFFF000096end if97else98Object.OnObject = false99end if100break101102case PLAYER_COL_RWALL103TempValue1 = true104break105106end switch107108PlayerObjectCollision(C_BOX, -80, -32, -16, 0)109switch CheckResult110case PLAYER_COL_FLOOR111Player.XPos -= Object.XOffSet112113if Player.Speed == 0114if Object.OnObject == false115Object.OnObject = true116117Player.XPos &= 0xFFFF0000 // Truncate the value118Object.XVelocity &= 0xFFFF0000 // Truncate the value119end if120else121Object.OnObject = false122end if123break124125case PLAYER_COL_RWALL126TempValue1 = true127break128129end switch130131PlayerObjectCollision(C_BOX, -80, 0, 16, 32)132switch CheckResult133case PLAYER_COL_FLOOR134Player.XPos -= Object.XOffSet135136if Player.Speed == 0137if Object.OnObject == false138Object.OnObject = true139140Player.XPos &= 0xFFFF0000 // Truncate the value141Object.XVelocity &= 0xFFFF0000 // Truncate the value142end if143else144Object.OnObject = false145end if146break147148case PLAYER_COL_RWALL149TempValue1 = true150break151152end switch153154PlayerObjectCollision(C_BOX, -80, 32, 48, 64)155switch CheckResult156case PLAYER_COL_FLOOR157Player.XPos -= Object.XOffSet158159if Player.Speed == 0160if Object.OnObject == false161Object.OnObject = true162163Player.XPos &= 0xFFFF0000 // Truncate the value164Object.XVelocity &= 0xFFFF0000 // Truncate the value165end if166else167Object.OnObject = false168end if169break170171case PLAYER_COL_RWALL172TempValue1 = true173break174175end switch176177Object.XPos = TempValue0178Object.XPos += Object.XVelocity179PlayerObjectCollision(C_BOX, -48, -64, 80, -32)180switch CheckResult181case PLAYER_COL_FLOOR182Player.XPos += Object.XOffSet183184if Player.Speed == 0185if Object.OnObject == false186Object.OnObject = true187188Player.XPos &= 0xFFFF0000 // Truncate the value189Object.XVelocity &= 0xFFFF0000 // Truncate the value190end if191else192Object.OnObject = false193end if194break195196case PLAYER_COL_LWALL197TempValue2 = true198break199200end switch201202PlayerObjectCollision(C_BOX, -16, -32, 80, 0)203switch CheckResult204case PLAYER_COL_FLOOR205Player.XPos += Object.XOffSet206207if Player.Speed == 0208if Object.OnObject == false209Object.OnObject = true210211Player.XPos &= 0xFFFF0000 // Truncate the value212Object.XVelocity &= 0xFFFF0000 // Truncate the value213end if214else215Object.OnObject = false216end if217break218219case PLAYER_COL_LWALL220TempValue2 = true221break222223end switch224225PlayerObjectCollision(C_BOX, 16, 0, 80, 32)226switch CheckResult227case PLAYER_COL_FLOOR228Player.XPos += Object.XOffSet229230if Player.Speed == 0231if Object.OnObject == false232Object.OnObject = true233234Player.XPos &= 0xFFFF0000 // Truncate the value235Object.XVelocity &= 0xFFFF0000 // Truncate the value236end if237else238Object.OnObject = false239end if240break241242case PLAYER_COL_LWALL243TempValue2 = true244break245246end switch247248PlayerObjectCollision(C_BOX, 48, 32, 80, 64)249switch CheckResult250case PLAYER_COL_FLOOR251Player.XPos += Object.XOffSet252253if Player.Speed == 0254if Object.OnObject == false255Object.OnObject = true256257Player.XPos &= 0xFFFF0000 // Truncate the value258Object.XVelocity &= 0xFFFF0000 // Truncate the value259end if260else261Object.OnObject = false262end if263break264265case PLAYER_COL_LWALL266TempValue2 = true267break268269end switch270271Object.XPos = TempValue0272if TempValue1 == true273if TempValue2 == true274CallFunction(Player_Kill)275end if276end if277278if Player.Gravity == GRAVITY_AIR279Object.OnObject = false280end if281end sub282283284sub ObjectDraw285TempValue0 = Object.XPos286TempValue0 -= Object.XVelocity287288TempValue1 = Object.XPos289TempValue1 += Object.XVelocity290291TempValue2 = Object.YPos292TempValue2 -= 0x300000293DrawSpriteXY(0, TempValue0, TempValue2)294295TempValue2 += 0x200000296DrawSpriteXY(0, TempValue0, TempValue2)297DrawSpriteXY(1, TempValue0, TempValue2)298299TempValue2 += 0x200000300DrawSpriteXY(0, TempValue0, TempValue2)301DrawSpriteXY(1, TempValue0, TempValue2)302DrawSpriteXY(2, TempValue0, TempValue2)303304TempValue2 += 0x200000305DrawSpriteXY(0, TempValue0, TempValue2)306DrawSpriteXY(1, TempValue0, TempValue2)307DrawSpriteXY(2, TempValue0, TempValue2)308DrawSpriteXY(3, TempValue0, TempValue2)309310TempValue2 -= 0x600000311DrawSpriteXY(1, TempValue1, TempValue2)312DrawSpriteXY(2, TempValue1, TempValue2)313DrawSpriteXY(3, TempValue1, TempValue2)314DrawSpriteXY(4, TempValue1, TempValue2)315316TempValue2 += 0x200000317DrawSpriteXY(2, TempValue1, TempValue2)318DrawSpriteXY(3, TempValue1, TempValue2)319DrawSpriteXY(4, TempValue1, TempValue2)320321TempValue2 += 0x200000322DrawSpriteXY(3, TempValue1, TempValue2)323DrawSpriteXY(4, TempValue1, TempValue2)324325TempValue2 += 0x200000326DrawSpriteXY(4, TempValue1, TempValue2)327end sub328329330sub ObjectStartup331switch HUD.CurrentTimePeriod332case TIME_PRESENT333LoadSpriteSheet("R4/Objects.gif")334TempValue0 = 163335TempValue1 = 1336TempValue2 = 196337break338339case TIME_PAST340LoadSpriteSheet("R4/Objects2.gif")341TempValue0 = 1342TempValue1 = 157343TempValue2 = 34344break345346case TIME_GOOD_FUTURE347LoadSpriteSheet("R4/Objects2.gif")348TempValue0 = 1349TempValue1 = 190350TempValue2 = 34351break352353case TIME_BAD_FUTURE354LoadSpriteSheet("R4/Objects2.gif")355TempValue0 = 1356TempValue1 = 223357TempValue2 = 34358break359360end switch361362// R4 Crush Blocks363SpriteFrame(-80, -16, 32, 32, TempValue0, TempValue1)364SpriteFrame(-48, -16, 32, 32, TempValue0, TempValue1)365SpriteFrame(-16, -16, 32, 32, TempValue0, TempValue1)366SpriteFrame(16, -16, 32, 32, TempValue0, TempValue1)367SpriteFrame(48, -16, 32, 32, TempValue0, TempValue1)368end sub369370371// ========================372// Editor Subs373// ========================374375sub RSDKDraw376TempValue0 = Object.XPos377378TempValue1 = Object.XPos379380TempValue2 = Object.YPos381TempValue2 -= 0x300000382DrawSpriteXY(0, TempValue0, TempValue2)383384TempValue2 += 0x200000385DrawSpriteXY(0, TempValue0, TempValue2)386DrawSpriteXY(1, TempValue0, TempValue2)387388TempValue2 += 0x200000389DrawSpriteXY(0, TempValue0, TempValue2)390DrawSpriteXY(1, TempValue0, TempValue2)391DrawSpriteXY(2, TempValue0, TempValue2)392393TempValue2 += 0x200000394DrawSpriteXY(0, TempValue0, TempValue2)395DrawSpriteXY(1, TempValue0, TempValue2)396DrawSpriteXY(2, TempValue0, TempValue2)397DrawSpriteXY(3, TempValue0, TempValue2)398399TempValue2 -= 0x600000400DrawSpriteXY(1, TempValue1, TempValue2)401DrawSpriteXY(2, TempValue1, TempValue2)402DrawSpriteXY(3, TempValue1, TempValue2)403DrawSpriteXY(4, TempValue1, TempValue2)404405TempValue2 += 0x200000406DrawSpriteXY(2, TempValue1, TempValue2)407DrawSpriteXY(3, TempValue1, TempValue2)408DrawSpriteXY(4, TempValue1, TempValue2)409410TempValue2 += 0x200000411DrawSpriteXY(3, TempValue1, TempValue2)412DrawSpriteXY(4, TempValue1, TempValue2)413414TempValue2 += 0x200000415DrawSpriteXY(4, TempValue1, TempValue2)416end sub417418419sub RSDKLoad420CallFunction(EditorHelpers_FindTimePeriod)421switch CheckResult422case TIME_PRESENT423LoadSpriteSheet("R4/Objects.gif")424TempValue0 = 163425TempValue1 = 1426TempValue2 = 196427break428429case TIME_PAST430LoadSpriteSheet("R4/Objects2.gif")431TempValue0 = 1432TempValue1 = 157433TempValue2 = 34434break435436case TIME_GOOD_FUTURE437LoadSpriteSheet("R4/Objects2.gif")438TempValue0 = 1439TempValue1 = 190440TempValue2 = 34441break442443case TIME_BAD_FUTURE444LoadSpriteSheet("R4/Objects2.gif")445TempValue0 = 1446TempValue1 = 223447TempValue2 = 34448break449450end switch451452// R4 Crush Blocks453SpriteFrame(-80, -16, 32, 32, TempValue0, TempValue1)454SpriteFrame(-48, -16, 32, 32, TempValue0, TempValue1)455SpriteFrame(-16, -16, 32, 32, TempValue0, TempValue1)456SpriteFrame(16, -16, 32, 32, TempValue0, TempValue1)457SpriteFrame(48, -16, 32, 32, TempValue0, TempValue1)458459SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")460end sub461462463