Path: blob/master/Sonic 2/Scripts/ARZ/CollapsingFloor.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// 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.yvel2425private alias object.value17 : debugMode.currentSelection262728// ========================29// Function Declarations30// ========================3132reserve function CFloor_DebugDraw33reserve function CFloor_DebugSpawn343536// ========================37// Static Values38// ========================3940private value CFloor_debugStartID = 0414243// ========================44// Tables45// ========================4647private table CFloor_tileFramesFlipX481, 2, 3, 4495, 6, 7, 850end table5152private table CFloor_tileFramesNoFlip534, 3, 2, 1548, 7, 6, 555end table5657private table CFloor_collapseTableL5830, 22, 14, 65926, 18, 10, 260end table6162private table CFloor_collapseTableB6322, 30, 26, 18646, 14, 10, 265end table666768// ========================69// Function Definitions70// ========================7172private function CFloor_DebugDraw73DrawSprite(0)74end function757677private function CFloor_DebugSpawn78temp0 = debugMode[0].currentSelection79temp0 -= CFloor_debugStartID80CreateTempObject(TypeName[C Floor], 0, object.xpos, object.ypos)81if temp0 == 082object[tempObjectPos].collapseTable = CFloor_collapseTableB83else84object[tempObjectPos].collapseTable = CFloor_collapseTableL85end if86GetBit(temp0, object.direction, 0)87if temp0 == FACING_RIGHT88object[tempObjectPos].direction = FLIP_NONE89else90object[tempObjectPos].direction = FLIP_X91end if92end function939495// ========================96// Events97// ========================9899event ObjectUpdate100switch object.state101default102case CFLOOR_ACTIVE103break104105case CFLOOR_COLLAPSE106if object.timer < 10107object.timer++108else109temp5 = 0110temp0 = 0111temp3 = object.ypos112temp3 -= 0x80000113temp4 = 10114while temp0 < 2115temp1 = 0116temp2 = object.xpos117if object.direction == FLIP_X118temp2 -= 0x180000119else120temp2 += 0x180000121end if122123while temp1 < 4124if object.direction == FLIP_X125GetTableValue(temp6, temp5, CFloor_tileFramesFlipX)126else127GetTableValue(temp6, temp5, CFloor_tileFramesNoFlip)128end if129130CreateTempObject(TypeName[C Floor], temp6, temp2, temp3)131object[tempObjectPos].state = CFLOOR_TILEDELAY132GetTableValue(object[tempObjectPos].delay, temp5, object.collapseTable)133temp5++134temp6++135temp1++136if object.direction == FLIP_X137temp2 += 0x100000138else139temp2 -= 0x100000140end if141temp4 += 4142loop143temp4 -= 26144object.frame += 2145temp0++146temp3 += 0x100000147loop148PlaySfx(SfxName[Ledge Break], false)149object.timer = 0150object.state++151end if152break153154case CFLOOR_COLLAPSED155if object.timer < 20156object.timer++157else158object.timer = 0159object.state++160end if161break162163case CFLOOR_NONE164break165166case CFLOOR_TILEDELAY167if object.timer < object.delay168object.timer++169else170object.timer = 0171object.state++172end if173break174175case CFLOOR_TILEFALL176object.ypos += object.yvel177object.yvel += 0x4000178if object.outOfBounds == true179object.type = TypeName[Blank Object]180end if181break182183end switch184185if object.state < CFLOOR_TILEDELAY186if object.outOfBounds == true187object.state = CFLOOR_ACTIVE188object.timer = 0189object.priority = PRIORITY_BOUNDS190end if191end if192193if object.state < CFLOOR_NONE194foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)195if object.propertyValue < 2196if player[currentPlayer].yvel >= 0197BoxCollisionTest(C_PLATFORM, object.entityPos, -32, -16, 32, 0, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)198else199checkResult = COL_NONE200end if201else202BoxCollisionTest(C_SOLID, object.entityPos, -32, -16, 32, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)203end if204205if checkResult == COL_TOP206if object.state == CFLOOR_ACTIVE207object.state = CFLOOR_COLLAPSE208object.priority = PRIORITY_ACTIVE209end if210end if211next212end if213end event214215216event ObjectDraw217switch object.state218case CFLOOR_ACTIVE219case CFLOOR_COLLAPSE220DrawSprite(0)221break222223case CFLOOR_COLLAPSED224case CFLOOR_NONE225break226227case CFLOOR_TILEDELAY228case CFLOOR_TILEFALL229DrawSprite(object.propertyValue)230break231232end switch233end event234235236event ObjectStartup237LoadSpriteSheet("ARZ/Objects.gif")238SpriteFrame(-32, -16, 64, 32, 126, 112)239SpriteFrame(-8, -8, 16, 16, 126, 112)240SpriteFrame(-8, -8, 16, 16, 142, 112)241SpriteFrame(-8, -8, 16, 16, 158, 112)242SpriteFrame(-8, -8, 16, 16, 174, 112)243SpriteFrame(-8, -8, 16, 16, 126, 128)244SpriteFrame(-8, -8, 16, 16, 142, 128)245SpriteFrame(-8, -8, 16, 16, 158, 128)246SpriteFrame(-8, -8, 16, 16, 174, 128)247248foreach (TypeName[C Floor], arrayPos0, ALL_ENTITIES)249GetBit(temp5, object[arrayPos0].propertyValue, 0)250if temp5 == false251object[arrayPos0].collapseTable = CFloor_collapseTableB252else253object[arrayPos0].collapseTable = CFloor_collapseTableL254end if255next256257temp0 = 0258CFloor_debugStartID = DebugMode_ObjCount259while temp0 < 2260SetTableValue(TypeName[C Floor], DebugMode_ObjCount, DebugMode_TypesTable)261SetTableValue(CFloor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)262SetTableValue(CFloor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)263DebugMode_ObjCount++264temp0++265loop266end event267268269// ========================270// Editor Events271// ========================272273event RSDKEdit274if editor.returnVariable == true275switch editor.variableID276case EDIT_VAR_PROPVAL // property value277checkResult = object.propertyValue278checkResult &= 1279break280281case 0 // type282GetBit(checkResult, object.propertyValue, 0)283break284285end switch286else287switch editor.variableID288case EDIT_VAR_PROPVAL // property value289object.propertyValue = editor.variableValue290object.propertyValue &= 1291break292293case 0 // type294CheckNotEqual(editor.variableValue, 0)295SetBit(object.propertyValue, 0, checkResult)296break297298end switch299end if300end event301302303event RSDKDraw304DrawSprite(0)305end event306307308event RSDKLoad309LoadSpriteSheet("ARZ/Objects.gif")310SpriteFrame(-32, -16, 64, 32, 126, 112)311312AddEditorVariable("type")313SetActiveVariable("type")314AddEnumVariable("Bottom", 0)315AddEnumVariable("Left", 1)316end event317318319