Path: blob/master/Sonic 2/Scripts/MCZ/PullSwitch.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Pull Switch Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.propertyValue : object.pulled1213// Player Aliases14private alias object.state : player.state15private alias object.animation : player.animation16private alias object.gravity : player.gravity17private alias object.collisionTop : player.collisionTop18private alias object.xpos : player.xpos19private alias object.ypos : player.ypos20private alias object.xvel : player.xvel21private alias object.yvel : player.yvel22private alias object.speed : player.speed23private alias object.jumpPress : player.jumpPress24private alias object.down : player.down252627// ========================28// Function Declarations29// ========================3031reserve function PullSwitch_DebugDraw32reserve function PullSwitch_DebugSpawn333435// ========================36// Function Definitions37// ========================3839private function PullSwitch_DebugDraw40DrawSprite(0)41end function424344private function PullSwitch_DebugSpawn45CreateTempObject(TypeName[Pull Switch], 0, object.xpos, object.ypos)46end function474849// ========================50// Events51// ========================5253event ObjectUpdate54object.pulled = false5556temp0 = object.ypos57temp0 += 0x30000058foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)59if player[currentPlayer].state != Player_State_Static60if player[currentPlayer].down == false // Can't grab the switch while holding down6162// Different boxes depending on if the player is higher than or lower than the switch63if player[currentPlayer].ypos < temp064BoxCollisionTest(C_TOUCH, object.entityPos, -8, 64, 8, 68, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)65else66BoxCollisionTest(C_TOUCH, object.entityPos, -8, 46, 8, 48, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)67end if6869if checkResult == true70if player[currentPlayer].gravity == GRAVITY_AIR71// Make the player grab on72player[currentPlayer].state = Player_State_Static73player[currentPlayer].animation = ANI_HANGING74player[currentPlayer].speed = 075player[currentPlayer].xvel = 076player[currentPlayer].yvel = 077player[currentPlayer].xpos = object.xpos78player[currentPlayer].ypos = player[currentPlayer].collisionTop79FlipSign(player[currentPlayer].ypos)80player[currentPlayer].ypos += 2681player[currentPlayer].ypos <<= 1682player[currentPlayer].ypos += object.ypos83object.pulled |= true84end if85end if86end if87else88BoxCollisionTest(C_TOUCH, object.entityPos, -8, 0, 8, 64, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)8990if checkResult == true91if player[currentPlayer].jumpPress == true92// Jump off93#platform: USE_STANDALONE94player[currentPlayer].state = Player_State_Air95#endplatform96#platform: USE_ORIGINS97player[currentPlayer].state = Player_State_Air_NoDropDash98#endplatform99player[currentPlayer].yvel = -0x40000100player[currentPlayer].gravity = GRAVITY_AIR101else102// Keep the player hanging on103player[currentPlayer].xpos = object.xpos104player[currentPlayer].ypos = player[currentPlayer].collisionTop105FlipSign(player[currentPlayer].ypos)106player[currentPlayer].ypos += 26107player[currentPlayer].ypos <<= 16108player[currentPlayer].ypos += object.ypos109object.pulled |= true110end if111end if112end if113next114115// The only time the sprite frame and pull state aren't synced is the frame when the switch has just been grabbed,116// so it's safe to play the SFX like this117if object.frame == 0118if object.pulled == true119PlaySfx(SfxName[Pull Switch], false)120end if121end if122123// Make the sprite correspond with the pull state124object.frame = object.pulled125end event126127128event ObjectDraw129DrawSprite(object.frame)130end event131132133event ObjectStartup134LoadSpriteSheet("MCZ/Objects.gif")135SpriteFrame(-8, -48, 16, 95, 215, 161) // 0 - Normal frame136SpriteFrame(-8, -44, 16, 95, 215, 161) // 1 - Pulled frame (same graphic, different offset)137138// Add this object to the debug item list139SetTableValue(TypeName[Pull Switch], DebugMode_ObjCount, DebugMode_TypesTable)140SetTableValue(PullSwitch_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)141SetTableValue(PullSwitch_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)142DebugMode_ObjCount++143end event144145146// ========================147// Editor Events148// ========================149150event RSDKDraw151DrawSprite(0)152end event153154155event RSDKLoad156LoadSpriteSheet("MCZ/Objects.gif")157SpriteFrame(-8, -48, 16, 95, 215, 161)158159// Although used by the object, it's not to be set from editor160SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")161end event162163164