Path: blob/master/Sonic 1/Scripts/MZ/FallingBlock.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Falling Block Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.drawPos.y12private alias object.value2 : object.collisionOffset.y13private alias object.value3 : object.startPos.y14private alias object.value4 : object.amplitude.y1516private alias 0 : FALLINGBLOCK_IDLE17private alias 1 : FALLINGBLOCK_FLOATING18private alias 2 : FALLINGBLOCK_WAITFORPLAYER19private alias 3 : FALLINGBLOCK_FALLING20private alias 4 : FALLINGBLOCK_FLOATING_LAVA2122// Player Aliases23private alias object.xpos : player.xpos24private alias object.ypos : player.ypos25private alias object.gravity : player.gravity2627private alias object.value17 : debugMode.currentSelection2829// Tile Flag Aliases30private alias 1 : TILE_LAVA3132// Tile Info ID Aliases33private alias 8 : TILEINFO_ANGLEB3435// Path ID Aliases36private alias 0 : PATH_A373839// ========================40// Function Declarations41// ========================4243reserve function FallingBlock_DebugDraw44reserve function FallingBlock_DebugSpawn45reserve function FallingBlock_HandleCollisions4647// ========================48// Static Values49// ========================5051private value FallingBlock_startDebugID = 0525354// ========================55// Function Definitions56// ========================5758private function FallingBlock_DebugDraw59DrawSprite(0)60end function616263private function FallingBlock_DebugSpawn64CreateTempObject(TypeName[Falling Block], 0, object.xpos, object.ypos)65object[tempObjectPos].state = debugMode[0].currentSelection66object[tempObjectPos].state -= FallingBlock_startDebugID6768switch object[tempObjectPos].state69case FALLINGBLOCK_IDLE70object[tempObjectPos].amplitude.y = 0x40071break7273case FALLINGBLOCK_FLOATING74case FALLINGBLOCK_WAITFORPLAYER75object[tempObjectPos].ypos -= 0x8000076object[tempObjectPos].amplitude.y = 0x40077break7879case FALLINGBLOCK_FALLING //Actually FALLINGBLOCK_FLOATING_LAVA but we dont wanna spawn FALLINGBLOCK_FALLING so we just advance80object[tempObjectPos].state++81object[tempObjectPos].amplitude.y = 0x20082break8384end switch85end function868788private function FallingBlock_HandleCollisions89Sin(object.collisionOffset.y, object.angle)90object.collisionOffset.y *= object.amplitude.y91object.collisionOffset.y += object.ypos92object.collisionOffset.y &= 0xFFFF000093object.collisionOffset.y -= object.drawPos.y94temp0 = object.ypos9596object.ypos = object.drawPos.y97foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)98BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)99switch checkResult100case COL_TOP101player[currentPlayer].ypos += object.collisionOffset.y102break103104case COL_BOTTOM105if player[currentPlayer].gravity == GRAVITY_GROUND106CallFunction(Player_Kill)107end if108break109110end switch111next112object.ypos = temp0113114Sin(object.drawPos.y, object.angle)115object.drawPos.y *= object.amplitude.y116object.drawPos.y += object.ypos117object.drawPos.y &= 0xFFFF0000118end function119120121// ========================122// Events123// ========================124125event ObjectUpdate126switch object.state127case FALLINGBLOCK_IDLE128object.drawPos.y = object.ypos129foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)130BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)131next132break133134case FALLINGBLOCK_FLOATING135object.priority = PRIORITY_ACTIVE136object.angle = oscillation137object.angle <<= 2138CallFunction(FallingBlock_HandleCollisions)139break140141case FALLINGBLOCK_WAITFORPLAYER142object.priority = PRIORITY_ACTIVE143object.angle = oscillation144object.angle <<= 2145CallFunction(FallingBlock_HandleCollisions)146147foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)148if player[currentPlayer].ypos > object.ypos149temp0 = object.xpos150temp0 -= player[currentPlayer].xpos151Abs(temp0)152if temp0 < 0x900000153object.state = FALLINGBLOCK_FALLING154object.ypos = object.drawPos.y155object.amplitude.y = 0x200156end if157end if158next159break160161case FALLINGBLOCK_FALLING162object.priority = PRIORITY_ACTIVE163object.yvel += 0x1800164object.ypos += object.yvel165object.drawPos.y = object.ypos166167ObjectTileCollision(CSIDE_FLOOR, 0, 16, PATH_A)168if checkResult == true169temp1 = object.iypos170temp1 += 8171Get16x16TileInfo(temp0, object.ixpos, temp1, TILEINFO_ANGLEB)172if temp0 == TILE_LAVA173object.state = FALLINGBLOCK_FLOATING_LAVA174else175object.state = FALLINGBLOCK_IDLE176end if177end if178179foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)180BoxCollisionTest(C_SOLID, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)181if checkResult == COL_BOTTOM182if player[currentPlayer].gravity == GRAVITY_GROUND183CallFunction(Player_Kill)184end if185end if186next187break188189case FALLINGBLOCK_FLOATING_LAVA190object.priority = PRIORITY_ACTIVE191object.angle = oscillation192object.angle <<= 1193CallFunction(FallingBlock_HandleCollisions)194break195196end switch197198if object.outOfBounds == true199temp0 = object.ypos200object.ypos = object.startPos.y201if object.outOfBounds == true202object.yvel = 0203object.priority = PRIORITY_BOUNDS204object.state = object.propertyValue205object.state &= 7206if object.state > FALLINGBLOCK_FLOATING_LAVA207object.state = FALLINGBLOCK_IDLE208end if209210switch object.state211case FALLINGBLOCK_IDLE212case FALLINGBLOCK_FLOATING213case FALLINGBLOCK_WAITFORPLAYER214object.amplitude.y = 0x400215break216217case FALLINGBLOCK_FLOATING_LAVA218object.amplitude.y = 0x200219break220end switch221else222object.ypos = temp0223end if224end if225end event226227228event ObjectDraw229DrawSpriteXY(0, object.xpos, object.drawPos.y)230end event231232233event ObjectStartup234LoadSpriteSheet("MZ/Objects.gif")235SpriteFrame(-16, -16, 32, 32, 191, 289)236237foreach (TypeName[Falling Block], arrayPos0, ALL_ENTITIES)238object[arrayPos0].state = object[arrayPos0].propertyValue239object[arrayPos0].state &= 7240if object[arrayPos0].state > FALLINGBLOCK_FLOATING_LAVA241object[arrayPos0].state = FALLINGBLOCK_IDLE242end if243244switch object[arrayPos0].state245case FALLINGBLOCK_IDLE246object[arrayPos0].amplitude.y = 0x400247break248249case FALLINGBLOCK_FLOATING250case FALLINGBLOCK_WAITFORPLAYER251object[arrayPos0].ypos -= 0x80000252object[arrayPos0].amplitude.y = 0x400253break254255case FALLINGBLOCK_FALLING256break257258case FALLINGBLOCK_FLOATING_LAVA259object[arrayPos0].amplitude.y = 0x200260break261262end switch263object[arrayPos0].startPos.y = object[arrayPos0].ypos264next265266temp0 = 0267FallingBlock_startDebugID = DebugMode_ObjCount268while temp0 < 4269SetTableValue(TypeName[Falling Block], DebugMode_ObjCount, DebugMode_TypesTable)270SetTableValue(FallingBlock_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)271SetTableValue(FallingBlock_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)272DebugMode_ObjCount++273temp0++274loop275end event276277278// ========================279// Editor Events280// ========================281282event RSDKEdit283if editor.returnVariable == true284switch editor.variableID285case EDIT_VAR_PROPVAL // property value286checkResult = object.propertyValue287checkResult &= 7288break289290case 0 // type291checkResult = object.propertyValue292checkResult &= 7293break294295end switch296else297switch editor.variableID298case EDIT_VAR_PROPVAL // property value299object.propertyValue = editor.variableValue300object.propertyValue &= 7301break302303case 0 // type304object.propertyValue = editor.variableValue305object.propertyValue &= 7306break307308end switch309end if310end event311312313event RSDKDraw314DrawSprite(0)315end event316317318event RSDKLoad319LoadSpriteSheet("MZ/Objects.gif")320SpriteFrame(-16, -16, 32, 32, 191, 289)321322AddEditorVariable("type")323SetActiveVariable("type")324AddEnumVariable("Idle", 0)325AddEnumVariable("Floating (Won't Drop)", 1)326AddEnumVariable("Floating (Will Drop)", 2)327AddEnumVariable("Floating in Lava", 4)328end event329330331