Path: blob/master/Sonic 2/Scripts/MPZ/LargePiston.txt
1478 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Large Piston 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.startPos.y13private alias object.value2 : object.stoodPlayers14private alias object.value31 : object.wrapOffset.y1516// States17private alias 0 : LARGEPISTON_IDLE_UP18private alias 1 : LARGEPISTON_MOVEDOWN19private alias 2 : LARGEPISTON_IDLE_DOWN20private alias 3 : LARGEPISTON_MOVEUP2122// Player Aliases23private alias object.ypos : player.ypos24private alias object.gravity : player.gravity252627// ========================28// Function Declarations29// ========================3031reserve function LargePiston_Setup32reserve function LargePiston_DebugDraw33reserve function LargePiston_DebugSpawn343536// ========================37// Function Definitions38// ========================3940private function LargePiston_Setup41object[arrayPos0].ypos = object[arrayPos0].startPos.y42object[arrayPos0].ypos += object[arrayPos0].wrapOffset.y43object[arrayPos0].ypos += 0x40000044object[arrayPos0].timer = 9045object[arrayPos0].stoodPlayers = 046object[arrayPos0].state = LARGEPISTON_IDLE_DOWN47object[arrayPos0].priority = PRIORITY_BOUNDS48end function495051private function LargePiston_DebugDraw52temp0 = object.direction53object.direction <<= 154DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)55object.direction = temp056end function575859private function LargePiston_DebugSpawn60CreateTempObject(TypeName[Large Piston], 0, object.xpos, object.ypos)61arrayPos0 = object[tempObjectPos].entityPos62object[arrayPos0].startPos.y = object.ypos63object[arrayPos0].direction = object.direction64object[arrayPos0].direction <<= 165CallFunction(LargePiston_Setup)66end function676869// ========================70// Events71// ========================7273event ObjectUpdate74temp0 = object.ypos75switch object.state76case LARGEPISTON_IDLE_UP77object.timer--78if object.timer == 079object.priority = PRIORITY_ACTIVE80object.timer = 881object.state = LARGEPISTON_MOVEDOWN82end if83break8485case LARGEPISTON_MOVEDOWN86object.ypos += 0x800008788object.timer--89if object.timer == 090object.timer = 9091object.state = LARGEPISTON_IDLE_DOWN92end if93break9495case LARGEPISTON_IDLE_DOWN96object.timer--97if object.timer == 098object.timer = 899object.state = LARGEPISTON_MOVEUP100end if101break102103case LARGEPISTON_MOVEUP104object.ypos -= 0x80000105106object.timer--107if object.timer == 0108object.timer = 90109object.state = LARGEPISTON_IDLE_UP110end if111break112113end switch114115temp1 = object.ypos116temp1 -= temp0117118temp2 = 0119foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)120GetBit(temp0, object.stoodPlayers, temp2)121if temp0 == true122player[currentPlayer].ypos += temp1123end if124125SetBit(object.stoodPlayers, temp2, false)126BoxCollisionTest(C_SOLID, object.entityPos, -64, -12, 64, 12, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)127switch checkResult128case COL_TOP129SetBit(object.stoodPlayers, temp2, true)130break131132case COL_BOTTOM133if player[currentPlayer].gravity == 0134CallFunction(Player_Kill)135end if136break137138end switch139temp2++140next141142if object.outOfBounds == true143arrayPos0 = object.entityPos144CallFunction(LargePiston_Setup)145end if146end event147148149event ObjectDraw150DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)151end event152153154event ObjectStartup155LoadSpriteSheet("MPZ/Objects.gif")156SpriteFrame(-64, -12, 128, 120, 1, 135)157158foreach (TypeName[Large Piston], arrayPos0, ALL_ENTITIES)159object[arrayPos0].startPos.y = object[arrayPos0].ypos160CallFunction(LargePiston_Setup)161next162163SetTableValue(TypeName[Large Piston], DebugMode_ObjCount, DebugMode_TypesTable)164SetTableValue(LargePiston_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)165SetTableValue(LargePiston_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)166DebugMode_ObjCount++167end event168169170// ========================171// Editor Events172// ========================173174event RSDKDraw175// It probably would look better if retracted position was shown normally and then extended position was176// the gizmo, but that would be incorrecty showing how the object actually is placed177178DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)179180if editor.showGizmos == true181editor.drawingOverlay = true182183temp1 = object.ypos184temp1 += 0x400000185186DrawSpriteFX(0, FX_FLIP, object.xpos, temp1)187188DrawArrow(object.xpos, object.ypos, object.xpos, temp1, 0x00, 0xFF, 0x00)189190editor.drawingOverlay = false191end if192end event193194195event RSDKLoad196LoadSpriteSheet("MPZ/Objects.gif")197SpriteFrame(-64, -12, 128, 120, 1, 135)198199SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")200end event201202203