Path: blob/master/Sonic 2/Scripts/HPZ/TubeSwitch.txt
1479 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Tube Switch Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.inTube // I dont really know what the point of this variable is but alright I guess1213private alias 0 : TUBESWITCH_R_ENTRY14private alias 1 : TUBESWITCH_L_ENTRY15private alias 2 : TUBESWITCH_RWALL_ENTRY16private alias 3 : TUBESWITCH_LWALL_ENTRY1718// Player Aliases19private alias object.state : player.state20private alias object.speed : player.speed21private alias object.xvel : player.xvel22private alias object.yvel : player.yvel23private alias object.gravity : player.gravity24private alias object.direction : player.direction25private alias object.animation : player.animation26private alias object.collisionMode : player.collisionMode27private alias object.angle : player.angle28private alias object.value34 : player.collisionDisabled293031// ========================32// Events33// ========================3435event ObjectUpdate36foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)37if player[currentPlayer].collisionDisabled == true38player[currentPlayer].collisionDisabled = false39end if4041CheckEqual(player[currentPlayer].state, Player_State_Death)42temp0 = checkResult43CheckEqual(player[currentPlayer].state, Player_State_LedgePullUp)44temp0 |= checkResult45CheckEqual(player[currentPlayer].state, Player_State_Climb)46temp0 |= checkResult47if temp0 == false48BoxCollisionTest(C_TOUCH, object.entityPos, -16, -16, 16, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)49if checkResult == true50if player[currentPlayer].yvel < 051player[currentPlayer].yvel = 052end if5354switch object.propertyValue55case TUBESWITCH_R_ENTRY // Enter from the right, exit from the left56if player[currentPlayer].xvel > 057if player[currentPlayer].animation != ANI_JUMPING58if player[currentPlayer].state != Player_State_TubeRoll59PlaySfx(SfxName[Rolling], false)60end if61end if6263if player[currentPlayer].state == Player_State_GlideLeft64FlipSign(player[currentPlayer].speed)65end if6667player[currentPlayer].direction = FACING_RIGHT68player[currentPlayer].state = Player_State_TubeRoll69player[currentPlayer].animation = ANI_JUMPING70else71if player[currentPlayer].gravity == GRAVITY_GROUND72if player[currentPlayer].xvel > -0x2000073player[currentPlayer].speed = -0x2000074end if75end if7677player[currentPlayer].state = Player_State_Roll78player[currentPlayer].animation = ANI_JUMPING79end if80break8182case TUBESWITCH_L_ENTRY // Enter from the left, exit from the right83if player[currentPlayer].xvel < 084if player[currentPlayer].animation != ANI_JUMPING85if player[currentPlayer].state != Player_State_TubeRoll86PlaySfx(SfxName[Rolling], false)87end if88end if8990if player[currentPlayer].state == Player_State_GlideLeft91FlipSign(player[currentPlayer].speed)92end if9394player[currentPlayer].direction = FACING_LEFT95player[currentPlayer].state = Player_State_TubeRoll96player[currentPlayer].animation = ANI_JUMPING97else98if player[currentPlayer].gravity == GRAVITY_GROUND99if player[currentPlayer].xvel < 0x20000100player[currentPlayer].speed = 0x20000101end if102end if103104player[currentPlayer].state = Player_State_Roll105player[currentPlayer].animation = ANI_JUMPING106end if107break108109case 2110if player[currentPlayer].gravity == GRAVITY_AIR111if player[currentPlayer].yvel > 0112player[currentPlayer].animation = ANI_JUMPING113player[currentPlayer].state = Player_State_TubeRoll114player[currentPlayer].gravity = GRAVITY_GROUND115player[currentPlayer].speed = player[currentPlayer].yvel116player[currentPlayer].collisionMode = CMODE_RWALL117player[currentPlayer].angle = 0x40118PlaySfx(SfxName[Rolling], false)119end if120end if121break122123case 3124if player[currentPlayer].gravity == GRAVITY_AIR125if player[currentPlayer].yvel > 0126player[currentPlayer].animation = ANI_JUMPING127player[currentPlayer].state = Player_State_TubeRoll128player[currentPlayer].gravity = GRAVITY_GROUND129player[currentPlayer].speed = player[currentPlayer].yvel130FlipSign(player[currentPlayer].speed)131player[currentPlayer].collisionMode = CMODE_LWALL132player[currentPlayer].angle = 0xC0133PlaySfx(SfxName[Rolling], false)134end if135end if136break137end switch138139object.inTube = true140else141object.inTube = false142end if143end if144next145end event146147148// ========================149// Editor Events150// ========================151152event RSDKEdit153if editor.returnVariable == true154switch editor.variableID155case EDIT_VAR_PROPVAL // property value156checkResult = object.propertyValue157break158159case 0 // type160checkResult = object.propertyValue161break162163end switch164else165switch editor.variableID166case EDIT_VAR_PROPVAL // property value167object.propertyValue = editor.variableValue168break169170case 0 // type171object.propertyValue = editor.variableValue172break173174end switch175end if176end event177178179event RSDKDraw180DrawSprite(0)181end event182183184event RSDKLoad185LoadSpriteSheet("Global/Display.gif")186SpriteFrame(-16, -16, 32, 32, 1, 143)187188AddEditorVariable("type")189SetActiveVariable("type")190AddEnumVariable("Enter From Right, Exit From Left", 0)191AddEnumVariable("Enter From Left, Exit From Right", 1)192AddEnumVariable("Enter From Top, Stick to RWall", 2)193AddEnumVariable("Enter From Top, Stick to LWall", 3)194end event195196197