Path: blob/master/Sonic 2/Scripts/MCZ/RockCrusher.txt
1487 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Rock Crusher 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.origin.y // Unused1314private alias 0 : ROCKCRUSHER_RISE15private alias 1 : ROCKCRUSHER_FALL1617// Player aliases18private alias object.type : player.type19private alias object.ypos : player.ypos20private alias object.gravity : player.gravity212223// ========================24// Function Declarations25// ========================2627reserve function RockCrusher_DebugDraw28reserve function RockCrusher_DebugSpawn293031// ========================32// Function Definitions33// ========================3435private function RockCrusher_DebugDraw36DrawSprite(0)37end function383940private function RockCrusher_DebugSpawn41CreateTempObject(TypeName[Rock Crusher], 0, object.xpos, object.ypos)42object[tempObjectPos].origin.y = object[tempObjectPos].ypos43object[tempObjectPos].yvel = -0x1000044end function454647// ========================48// Events49// ========================5051event ObjectUpdate52if object.state == ROCKCRUSHER_RISE53object.timer++54if object.timer == 9655object.timer = 056object.yvel = 0x8000057object.state = ROCKCRUSHER_FALL58end if59else60object.timer++61if object.timer == 1262object.timer = 063object.yvel = -0x1000064object.state = ROCKCRUSHER_RISE65end if6667if object.timer == 668PlaySfx(SfxName[Ground Impact], false)69end if70end if7172foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)73BoxCollisionTest(C_SOLID2, object.entityPos, -15, -64, 15, 64, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)74switch checkResult75case COL_TOP76player[currentPlayer].ypos += object.yvel77break7879case COL_BOTTOM80if player[currentPlayer].gravity == GRAVITY_GROUND81#platform: USE_STANDALONE82if object.yvel > 083#endplatform84// If the rock's going down, then crush the player!85CallFunction(Player_Kill)86#platform: USE_ORIGINS87// If we're in a mission and P2 was just killed, then force P1 to die too88// (Part of the Bodyguard mission)89if game.playMode == BOOT_PLAYMODE_MISSION90if player[1].type == TypeName[Player 2 Object]91game.forceKillPlayer = true92end if93end if94#endplatform95#platform: USE_STANDALONE96end if97#endplatform98end if99break100101end switch102next103104object.ypos += object.yvel105end event106107108event ObjectDraw109DrawSprite(0)110end event111112113event ObjectStartup114LoadSpriteSheet("MCZ/Objects.gif")115SpriteFrame(-15, -74, 30, 148, 201, 0)116117foreach (TypeName[Rock Crusher], arrayPos0, ALL_ENTITIES)118object[arrayPos0].origin.y = object[arrayPos0].ypos // even if this is stored, it's never referenced again119object[arrayPos0].yvel = -0x10000120next121122// Add this object to the debug object list123SetTableValue(TypeName[Rock Crusher], DebugMode_ObjCount, DebugMode_TypesTable)124SetTableValue(RockCrusher_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)125SetTableValue(RockCrusher_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)126DebugMode_ObjCount++127end event128129130// ========================131// Editor Events132// ========================133134event RSDKDraw135DrawSprite(0)136137if editor.showGizmos == true138editor.drawingOverlay = true139140object.inkEffect = INK_BLEND141temp0 = object.ypos142temp0 -= 0x5F0000143DrawSpriteFX(0, FX_INK, object.xpos, temp0)144145editor.drawingOverlay = false146end if147end event148149150event RSDKLoad151LoadSpriteSheet("MCZ/Objects.gif")152SpriteFrame(-15, -74, 30, 148, 201, 0)153154SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")155end event156157158