Path: blob/master/Sonic 1/Scripts/SBZ/CollapsingFloor.txt
1481 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_TOPSOLID_L16private alias 1 : CFLOOR_TOPSOLID_B17private alias 2 : CFLOOR_ALLSOLID_L18private alias 3 : CFLOOR_ALLSOLID_B1920private alias 0 : CFLOOR_ACTIVE21private alias 1 : CFLOOR_COLLAPSE22private alias 2 : CFLOOR_COLLAPSED23private alias 3 : CFLOOR_NONE24private alias 4 : CFLOOR_TILEDELAY25private alias 5 : CFLOOR_TILEFALL2627// Player Aliases28private alias object.yvel : player.yvel293031// ========================32// Function Declarations33// ========================3435reserve function CFloor_DebugDraw36reserve function CFloor_DebugSpawn373839// ========================40// Tables41// ========================4243private table CFloor_collapseTableL4430, 22, 14, 64526, 18, 10, 246end table4748private table CFloor_collapseTableB4922, 30, 26, 18506, 14, 10, 251end table525354// ========================55// Function Definitions56// ========================5758private function CFloor_DebugDraw59DrawSprite(0)60end function616263private function CFloor_DebugSpawn64CreateTempObject(TypeName[C Floor], 0, object.xpos, object.ypos)65object[tempObjectPos].collapseTable = CFloor_collapseTableL66GetBit(temp0, object.direction, 0)67if temp0 == FACING_RIGHT68object[tempObjectPos].direction = FLIP_NONE69else70object[tempObjectPos].direction = FLIP_X71end if72end function737475// ========================76// Events77// ========================7879event ObjectUpdate80switch object.state81case CFLOOR_ACTIVE82break8384case CFLOOR_COLLAPSE85if object.timer < 1086object.timer++87else88temp5 = 089temp0 = 090temp3 = object.ypos91temp4 = 1092while temp0 < 293temp1 = 094temp2 = object.xpos95if object.direction == FLIP_X96temp2 -= 0x18000097else98temp2 += 0x18000099end if100101while temp1 < 4102CreateTempObject(TypeName[C Floor], 1, temp2, temp3)103object[tempObjectPos].state = CFLOOR_TILEDELAY104GetTableValue(object[tempObjectPos].delay, temp5, object.collapseTable)105temp5++106temp1++107if object.direction == FLIP_X108temp2 += 0x100000109else110temp2 -= 0x100000111end if112temp4 += 4113loop114temp4 -= 26115object.frame += 2116temp0++117temp3 += 0x100000118loop119PlaySfx(SfxName[Ledge Break L], false)120SetSfxAttributes(SfxName[Ledge Break L], -1, -100)121PlaySfx(SfxName[Ledge Break R], false)122SetSfxAttributes(SfxName[Ledge Break R], -1, 100)123object.timer = 0124object.state++125end if126break127128case CFLOOR_COLLAPSED129if object.timer < 20130object.timer++131else132object.timer = 0133object.state++134end if135break136137default138case CFLOOR_NONE139break140141case CFLOOR_TILEDELAY142if object.timer < object.delay143object.timer++144else145object.timer = 0146object.state++147end if148break149150case CFLOOR_TILEFALL151object.ypos += object.yvel152object.yvel += 0x4000153if object.outOfBounds == true154object.type = TypeName[Blank Object]155end if156break157158end switch159160if object.state < CFLOOR_TILEDELAY161if object.outOfBounds == true162object.state = 0163object.timer = 0164object.priority = PRIORITY_BOUNDS165end if166end if167168if object.state < CFLOOR_NONE169foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)170if object.propertyValue < CFLOOR_ALLSOLID_L171if player[currentPlayer].yvel >= 0172BoxCollisionTest(C_PLATFORM, object.entityPos, -32, -8, 32, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)173else174checkResult = COL_NONE175end if176else177BoxCollisionTest(C_SOLID, object.entityPos, -32, -8, 32, 24, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)178end if179180if checkResult == COL_TOP181if object.state == CFLOOR_ACTIVE182object.state = CFLOOR_COLLAPSE183object.priority = PRIORITY_ACTIVE184end if185end if186next187end if188end event189190191event ObjectDraw192switch object.state193case CFLOOR_ACTIVE194case CFLOOR_COLLAPSE195DrawSprite(0)196break197198case CFLOOR_TILEDELAY199case CFLOOR_TILEFALL200DrawSprite(object.propertyValue)201break202203end switch204end event205206207event ObjectStartup208LoadSpriteSheet("SBZ/Objects.gif")209SpriteFrame(-32, -8, 64, 32, 0, 105)210SpriteFrame(-8, -8, 16, 16, 0, 105)211foreach (TypeName[C Floor], arrayPos0, ALL_ENTITIES)212GetBit(temp5, object[arrayPos0].propertyValue, 0) // temp5? when no other temps are used nearby? can if you wanna ig213if temp5 == false214object[arrayPos0].collapseTable = CFloor_collapseTableL215else216object[arrayPos0].collapseTable = CFloor_collapseTableB217end if218next219SetTableValue(TypeName[C Floor], DebugMode_ObjCount, DebugMode_TypesTable)220SetTableValue(CFloor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)221SetTableValue(CFloor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)222DebugMode_ObjCount++223end event224225226// ========================227// Editor Events228// ========================229230event RSDKEdit231if editor.returnVariable == true232switch editor.variableID233case EDIT_VAR_PROPVAL // property value234checkResult = object.propertyValue235break236237case 0 // type238checkResult = object.propertyValue239checkResult &= 1240break241case 1 // solidity242checkResult = object.propertyValue243checkResult >>= 1244checkResult &= 1245break246247end switch248else249switch editor.variableID250case EDIT_VAR_PROPVAL // property value251object.propertyValue = editor.variableValue252break253254case 0 // type255temp0 = 1256Not(temp0)257object.propertyValue &= temp0258259editor.variableValue &= 1260261object.propertyValue |= editor.variableValue262break263case 1 // solidity264temp0 = 1265temp0 <<= 1266Not(temp0)267object.propertyValue &= temp0268269editor.variableValue &= 1270editor.variableValue <<= 1271272object.propertyValue |= editor.variableValue273break274275end switch276end if277end event278279280event RSDKDraw281DrawSprite(0)282end event283284285event RSDKLoad286LoadSpriteSheet("SBZ/Objects.gif")287SpriteFrame(-32, -8, 64, 32, 0, 105)288289AddEditorVariable("type")290SetActiveVariable("type")291AddEnumVariable("Left", CFLOOR_TOPSOLID_L)292AddEnumVariable("Bottom", CFLOOR_TOPSOLID_B)293294AddEditorVariable("solidity")295SetActiveVariable("solidity")296AddEnumVariable("Top Solid", 0)297AddEnumVariable("All Solid", 1)298end event299300301