Path: blob/master/Sonic 1/Scripts/SLZ/CollapsingFloor.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: C Floor Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.timer12private alias object.value1 : object.delay13private alias object.value2 : object.collapseTable1415private alias 0 : CFLOOR_ACTIVE16private alias 1 : CFLOOR_COLLAPSE17private alias 2 : CFLOOR_COLLAPSED18private alias 3 : CFLOOR_NONE19private alias 4 : CFLOOR_TILEDELAY20private alias 5 : CFLOOR_TILEFALL2122// Player Aliases23private alias object.yvel : player.yvel242526// ========================27// Function Declarations28// ========================2930reserve function CFloor_DebugDraw31reserve function CFloor_DebugSpawn323334// ========================35// Tables36// ========================3738private table CFloor_collapseTableL3930, 22, 14, 6, 26, 18, 10, 240end table4142private table CFloor_collapseTableB4322, 30, 26, 18, 6, 14, 10, 244end table454647// ========================48// Function Definitions49// ========================5051private function CFloor_DebugDraw52DrawSprite(0)53end function545556private function CFloor_DebugSpawn57CreateTempObject(TypeName[C Floor], 0, object.xpos, object.ypos)58object[tempObjectPos].collapseTable = CFloor_collapseTableL59GetBit(temp0, object.direction, 0)60if temp0 == 061object[tempObjectPos].direction = FACING_RIGHT62else63object[tempObjectPos].direction = FACING_LEFT64end if65end function666768// ========================69// Events70// ========================7172event ObjectUpdate73switch object.state74case CFLOOR_ACTIVE75break7677case CFLOOR_COLLAPSE78if object.timer < 1079object.timer++80else81temp5 = 082if object.direction == 183object.frame = 184else85object.frame = 286end if8788temp0 = 089temp3 = object.ypos90temp4 = 1091while temp0 < 292temp1 = 093temp2 = object.xpos94if object.direction == 195temp2 -= 0x18000096else97temp2 += 0x18000098end if99100while temp1 < 4101CreateTempObject(TypeName[C Floor], object.frame, temp2, temp3)102object[tempObjectPos].state = CFLOOR_TILEDELAY103GetTableValue(object[tempObjectPos].delay, temp5, object.collapseTable)104temp5++105object.frame -= 1106object.frame ^= 1107object.frame += 1108temp1++109if object.direction == 1110temp2 += 0x100000111else112temp2 -= 0x100000113end if114temp4 += 4115loop116temp4 -= 26117object.frame += 2118temp0++119temp3 += 0x100000120loop121122PlaySfx(SfxName[Ledge Break L], false)123SetSfxAttributes(SfxName[Ledge Break L], -1, -100)124PlaySfx(SfxName[Ledge Break R], false)125SetSfxAttributes(SfxName[Ledge Break R], -1, 100)126object.timer = 0127object.state++128end if129break130131case CFLOOR_COLLAPSED132if object.timer < 20133object.timer++134else135object.timer = 0136object.state++137end if138break139140case CFLOOR_NONE141break142143case CFLOOR_TILEDELAY144if object.timer < object.delay145object.timer++146else147object.timer = 0148object.state++149end if150break151152case CFLOOR_TILEFALL153object.ypos += object.yvel154object.yvel += 0x4000155if object.outOfBounds == true156object.type = TypeName[Blank Object]157end if158break159160end switch161162if object.state < CFLOOR_TILEDELAY163if object.outOfBounds == true164object.state = CFLOOR_ACTIVE165object.timer = 0166object.priority = PRIORITY_BOUNDS167end if168end if169170if object.state < CFLOOR_NONE171foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)172if player[currentPlayer].yvel >= 0173BoxCollisionTest(C_PLATFORM, object.entityPos, -32, -8, 32, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)174if checkResult == true175if object.state == CFLOOR_ACTIVE176object.state = CFLOOR_COLLAPSE177object.priority = PRIORITY_ACTIVE178end if179end if180end if181next182end if183end event184185186event ObjectDraw187switch object.state188case CFLOOR_ACTIVE189case CFLOOR_COLLAPSE190DrawSprite(0)191break192193case CFLOOR_COLLAPSED194case CFLOOR_NONE195break196197case CFLOOR_TILEDELAY198case CFLOOR_TILEFALL199DrawSprite(object.propertyValue)200break201202end switch203end event204205206event ObjectStartup207LoadSpriteSheet("SLZ/Objects.gif")208SpriteFrame(-32, -8, 64, 32, 67, 26)209SpriteFrame(-8, -8, 16, 16, 67, 26)210SpriteFrame(-8, -8, 16, 16, 83, 26)211SpriteFrame(-8, -8, 16, 16, 67, 42)212SpriteFrame(-8, -8, 16, 16, 83, 42)213214foreach (TypeName[C Floor], arrayPos0, ALL_ENTITIES)215GetBit(temp5, object[arrayPos0].propertyValue, 0)216if temp5 == false217object[arrayPos0].collapseTable = CFloor_collapseTableL218else219object[arrayPos0].collapseTable = CFloor_collapseTableB220end if221next222223SetTableValue(TypeName[C Floor], DebugMode_ObjCount, DebugMode_TypesTable)224SetTableValue(CFloor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)225SetTableValue(CFloor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)226DebugMode_ObjCount++227end event228229230// ========================231// Editor Events232// ========================233234event RSDKEdit235if editor.returnVariable == true236switch editor.variableID237case EDIT_VAR_PROPVAL // property value238checkResult = object.propertyValue239checkResult &= 1240break241242case 0 // type243GetBit(checkResult, object.propertyValue, 0)244break245246end switch247else248switch editor.variableID249case EDIT_VAR_PROPVAL // property value250object.propertyValue = editor.variableValue251object.propertyValue &= 1252break253254case 0 // type255CheckNotEqual(editor.variableValue, 0)256SetBit(object.propertyValue, 0, checkResult)257break258259end switch260end if261end event262263264event RSDKDraw265DrawSprite(0)266end event267268269event RSDKLoad270LoadSpriteSheet("SLZ/Objects.gif")271SpriteFrame(-32, -8, 64, 32, 67, 26)272273AddEditorVariable("type")274SetActiveVariable("type")275AddEnumVariable("Left", 0)276AddEnumVariable("Bottom", 1)277end event278279280