Path: blob/master/Sonic 1/Scripts/MZ/LavaFlow.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Lava Flow Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.startPos.x12private alias object.value2 : object.spriteSprX1314private alias 0 : LAVAFLOW_AWAITPLAYER15private alias 1 : LAVAFLOW_FLOWING16private alias 2 : LAVAFLOW_FINISHEDFLOWING1718// Player Aliases19private alias object.state : player.state20private alias object.xpos : player.xpos21private alias object.ixpos : player.ixpos22private alias object.collisionLeft: player.collisionLeft2324// MZSetup aliases25private alias object.value3 : mzSetup.lavaAnimTimer2627// Reserved object slots28private alias 10 : SLOT_ZONESETUP293031// ========================32// Function Declarations33// ========================3435reserve function LavaFlow_DebugDraw36reserve function LavaFlow_DebugSpawn373839// ========================40// Function Definitions41// ========================4243private function LavaFlow_DebugDraw44DrawSprite(0)45end function464748private function LavaFlow_DebugSpawn49CreateTempObject(TypeName[Lava Flow], 0, object.xpos, object.ypos)50end function515253// ========================54// Events55// ========================5657event ObjectUpdate58switch object.state59case LAVAFLOW_AWAITPLAYER60foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)61BoxCollisionTest(C_TOUCH, object.entityPos, -128, -33, 160, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)62if checkResult == true63CallFunction(Player_FireHit)64end if6566BoxCollisionTest(C_SOLID, object.entityPos, -128, -31, 128, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)6768BoxCollisionTest(C_TOUCH, object.entityPos, 256, -32, 288, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)69if checkResult == true70object.state++71object.priority = PRIORITY_ACTIVE72end if73next74break7576case LAVAFLOW_FLOWING77if player[0].state != Player_State_Death78if player[0].state != Player_State_Hurt79object.xpos += 0x1800080if object.xpos >= 0x648000081object.xpos = 0x648000082object.state++83end if84end if85end if8687foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)88BoxCollisionTest(C_TOUCH, object.entityPos, -128, -32, 160, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)89if checkResult == true90CallFunction(Player_FireHit)91end if9293BoxCollisionTest(C_SOLID, object.entityPos, -128, -31, 128, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)9495BoxCollisionTest(C_TOUCH, object.entityPos, -128, -23, 128, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)96if checkResult == true97player[currentPlayer].ixpos = player[currentPlayer].collisionLeft98FlipSign(player[currentPlayer].xpos)99if object.xpos < 0x5800000100player[currentPlayer].xpos += 0x800000101else102player[currentPlayer].xpos += 0x600000103end if104105player[currentPlayer].xpos += object.xpos106end if107next108break109110case LAVAFLOW_FINISHEDFLOWING111foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)112BoxCollisionTest(C_TOUCH, object.entityPos, -128, -32, 160, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)113if checkResult == true114CallFunction(Player_FireHit)115end if116117BoxCollisionTest(C_SOLID, object.entityPos, -128, -24, 160, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)118119BoxCollisionTest(C_TOUCH, object.entityPos, -128, -23, 128, 32, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)120if checkResult == true121player[currentPlayer].ixpos = player[currentPlayer].collisionLeft122FlipSign(player[currentPlayer].xpos)123player[currentPlayer].xpos += 0x600000124player[currentPlayer].xpos += object.xpos125end if126next127128if object.outOfBounds == true129temp0 = object.xpos130object.xpos = object.startPos.x131if object.outOfBounds == true132object.state = LAVAFLOW_AWAITPLAYER133else134object.xpos = temp0135end if136end if137break138139end switch140141Sin(object.spriteSprX, mzSetup[SLOT_ZONESETUP].lavaAnimTimer)142object.spriteSprX += 512143object.spriteSprX >>= 2144object.spriteSprX &= 31145object.spriteSprX++146147object.frame = object.animationTimer148object.frame /= 10149object.frame += 4150object.animationTimer++151object.animationTimer %= 40152153// Lava is synced across the entire stage, via the [MZ Setup] Object's frame154switch object[SLOT_ZONESETUP].frame155case 0156EditFrame(0, -160, -32, 160, 32, object.spriteSprX, 405)157EditFrame(1, 0, -32, 124, 32, object.spriteSprX, 405)158EditFrame(2, -160, 0, 160, 32, object.spriteSprX, 405)159EditFrame(3, 0, 0, 156, 32, object.spriteSprX, 405)160break161162case 1163EditFrame(0, -160, -32, 160, 32, object.spriteSprX, 438)164EditFrame(1, 0, -32, 124, 32, object.spriteSprX, 438)165EditFrame(2, -160, 0, 160, 32, object.spriteSprX, 438)166EditFrame(3, 0, 0, 156, 32, object.spriteSprX, 438)167break168169case 2170EditFrame(0, -160, -32, 160, 32, object.spriteSprX, 471)171EditFrame(1, 0, -32, 124, 32, object.spriteSprX, 471)172EditFrame(2, -160, 0, 160, 32, object.spriteSprX, 471)173EditFrame(3, 0, 0, 156, 32, object.spriteSprX, 471)174break175176end switch177end event178179180event ObjectDraw181DrawSprite(0)182DrawSprite(1)183DrawSprite(2)184DrawSprite(3)185DrawSprite(object.frame)186end event187188189event ObjectStartup190LoadSpriteSheet("MZ/Objects.gif")191SpriteFrame(-128, -32, 128, 32, 1, 405)192SpriteFrame(0, -32, 128, 32, 1, 405)193SpriteFrame(-128, 0, 256, 32, 1, 405)194SpriteFrame(0, 0, 256, 32, 1, 405)195SpriteFrame(124, -32, 60, 64, 1, 194)196SpriteFrame(124, -32, 60, 64, 62, 194)197SpriteFrame(124, -32, 60, 64, 1, 259)198SpriteFrame(124, -32, 60, 64, 62, 259)199200foreach (TypeName[Lava Flow], arrayPos0, ALL_ENTITIES)201object[arrayPos0].startPos.x = object[arrayPos0].xpos202object[arrayPos0].drawOrder = 4203next204205SetTableValue(TypeName[Lava Flow], DebugMode_ObjCount, DebugMode_TypesTable)206SetTableValue(LavaFlow_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)207SetTableValue(LavaFlow_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)208DebugMode_ObjCount++209end event210211212// ========================213// Editor Events214// ========================215216event RSDKDraw217DrawSprite(0)218DrawSprite(1)219DrawSprite(2)220DrawSprite(3)221DrawSprite(object.frame)222end event223224225event RSDKLoad226LoadSpriteSheet("MZ/Objects.gif")227SpriteFrame(-128, -32, 128, 32, 1, 405)228SpriteFrame(0, -32, 128, 32, 1, 405)229SpriteFrame(-128, 0, 256, 32, 1, 405)230SpriteFrame(0, 0, 256, 32, 1, 405)231SpriteFrame(124, -32, 60, 64, 1, 194)232SpriteFrame(124, -32, 60, 64, 62, 194)233SpriteFrame(124, -32, 60, 64, 1, 259)234SpriteFrame(124, -32, 60, 64, 62, 259)235236SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")237end event238239240