Path: blob/master/Sonic 1/Scripts/MZ/CFloor.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.yvel2425// ========================26// Function Declarations27// ========================2829reserve function CFloor_DebugDraw30reserve function CFloor_DebugSpawn3132// ========================33// Tables34// ========================3536private table CFloor_collapseTableR3730, 22, 14, 63826, 18, 10, 239end table4041private table CFloor_collapseTableB4222, 30, 26, 18436, 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_collapseTableR59GetBit(temp0, object.direction, 0)60if temp0 == 061object[tempObjectPos].direction = FACING_RIGHT62else63object[tempObjectPos].direction = FACING_LEFT64end if65end function6667// ========================68// Events69// ========================7071event ObjectUpdate72switch object.state73case CFLOOR_ACTIVE74break7576case CFLOOR_COLLAPSE77if object.timer < 1078object.timer++79else80temp5 = 081temp0 = 082temp3 = object.ypos83temp3 -= 0x8000084temp4 = 1085while temp0 < 286temp1 = 087temp2 = object.xpos88if object.direction == 189temp2 -= 0x18000090else91temp2 += 0x18000092end if9394while temp1 < 495CreateTempObject(TypeName[C Floor], 1, temp2, temp3)96object[tempObjectPos].state = CFLOOR_TILEDELAY97GetTableValue(object[tempObjectPos].delay, temp5, object.collapseTable)98temp5++99temp1++100if object.direction == 1101temp2 += 0x100000102else103temp2 -= 0x100000104end if105temp4 += 4106loop107temp4 -= 26108object.frame += 2109temp0++110temp3 += 0x100000111loop112PlaySfx(SfxName[Ledge Break L], false)113SetSfxAttributes(SfxName[Ledge Break L], -1, -100)114PlaySfx(SfxName[Ledge Break R], false)115SetSfxAttributes(SfxName[Ledge Break R], -1, 100)116object.timer = 0117object.state++118end if119break120121case CFLOOR_COLLAPSED122if object.timer < 20123object.timer++124else125object.timer = 0126object.state++127end if128break129130case CFLOOR_NONE131break132133case CFLOOR_TILEDELAY134if object.timer < object.delay135object.timer++136else137object.timer = 0138object.state++139end if140break141142case CFLOOR_TILEFALL143object.ypos += object.yvel144object.yvel += 0x4000145if object.outOfBounds == true146object.type = TypeName[Blank Object]147end if148break149150end switch151152if object.state < CFLOOR_TILEDELAY153if object.outOfBounds == true154object.state = CFLOOR_ACTIVE155object.timer = 0156object.priority = PRIORITY_BOUNDS157end if158end if159160if object.state < CFLOOR_NONE161foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)162if player[currentPlayer].yvel >= 0163BoxCollisionTest(C_PLATFORM, object.entityPos, -32, -16, 32, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)164if checkResult == true165if object.state == CFLOOR_ACTIVE166object.state = CFLOOR_COLLAPSE167object.priority = PRIORITY_ACTIVE168end if169end if170end if171next172end if173end event174175176event ObjectDraw177switch object.state178case CFLOOR_ACTIVE179case CFLOOR_COLLAPSE180DrawSprite(0)181break182183case CFLOOR_COLLAPSED184case CFLOOR_NONE185break186187case CFLOOR_TILEDELAY188case CFLOOR_TILEFALL189DrawSprite(object.propertyValue)190break191192end switch193end event194195196event ObjectStartup197LoadSpriteSheet("MZ/Objects.gif")198SpriteFrame(-32, -16, 64, 32, 317, 363)199SpriteFrame(-8, -8, 16, 16, 317, 363)200201foreach (TypeName[C Floor], arrayPos0, ALL_ENTITIES)202GetBit(temp5, object[arrayPos0].propertyValue, 0)203if temp5 == 0204object[arrayPos0].collapseTable = CFloor_collapseTableR205else206object[arrayPos0].collapseTable = CFloor_collapseTableB207end if208next209210SetTableValue(TypeName[C Floor], DebugMode_ObjCount, DebugMode_TypesTable)211SetTableValue(CFloor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)212SetTableValue(CFloor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)213DebugMode_ObjCount++214end event215216217// ========================218// Editor Events219// ========================220221event RSDKEdit222if editor.returnVariable == true223switch editor.variableID224case EDIT_VAR_PROPVAL // property value225checkResult = object.propertyValue226checkResult &= 1227break228229case 0 // type230GetBit(checkResult, object.propertyValue, 0)231break232233end switch234else235switch editor.variableID236case EDIT_VAR_PROPVAL // property value237object.propertyValue = editor.variableValue238object.propertyValue &= 1239break240241case 0 // type242CheckNotEqual(editor.variableValue, 0)243SetBit(object.propertyValue, 0, checkResult)244break245246end switch247end if248end event249250251event RSDKDraw252DrawSprite(0)253254if editor.showGizmos == true255editor.drawingOverlay = true256257temp0 = object.ixpos; temp0 -= 32258temp1 = object.iypos; temp1 -= 16259DrawRectOutline(temp0, temp1, 64, 32, 255, 255, 255, 255)260261editor.drawingOverlay = false262end if263end event264265266event RSDKLoad267LoadSpriteSheet("MZ/Objects.gif")268SpriteFrame(-32, -16, 64, 32, 317, 363)269270AddEditorVariable("type")271SetActiveVariable("type")272AddEnumVariable("Right", 0)273AddEnumVariable("Bottom", 1)274end event275276277