Path: blob/master/Sonic 2/Scripts/OOZ/HPushSpring.txt
1478 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: H Push Spring Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.pushOffset12private alias object.value2 : object.beingPushed1314// States15private alias 0 : HPUSHSPRING_AWAITPUSH16private alias 1 : HPUSHSPRING_PUSHING17private alias 2 : HPUSHSPRING_RELEASE1819// Player Aliases20private alias object.state : player.state21private alias object.xpos : player.xpos22private alias object.speed : player.speed23private alias object.direction : player.direction24private alias object.animation : player.animation25private alias object.pushing : player.pushing26private alias object.controlLock : player.controlLock27private alias object.collisionMode : player.collisionMode282930// ========================31// Function Declarations32// ========================3334reserve function HPushSpring_DebugDraw35reserve function HPushSpring_DebugSpawn363738// ========================39// Function Definitions40// ========================4142private function HPushSpring_DebugDraw43DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)44end function454647private function HPushSpring_DebugSpawn48CreateTempObject(TypeName[H Push Spring], 0, object.xpos, object.ypos)49object[tempObjectPos].xpos &= 0xFFFF000050object[tempObjectPos].ypos &= 0xFFFF000051object[tempObjectPos].direction = object.direction52end function535455// ========================56// Events57// ========================5859event ObjectUpdate60switch object.state61case HPUSHSPRING_AWAITPUSH62if object.beingPushed == true63object.state = HPUSHSPRING_PUSHING64end if65break6667case HPUSHSPRING_PUSHING68object.pushOffset += 0x400069if object.pushOffset > 0x12000070object.pushOffset = 0x12000071end if7273if object.beingPushed == false74object.state = HPUSHSPRING_RELEASE75end if76break7778case HPUSHSPRING_RELEASE79object.pushOffset -= 0x4000080if object.pushOffset <= 081object.pushOffset = 082object.state = HPUSHSPRING_AWAITPUSH83end if8485if object.beingPushed == true86object.state = HPUSHSPRING_PUSHING87end if88break8990end switch9192if object.direction == FLIP_NONE93temp0 = -2094temp1 = object.pushOffset95temp1 >>= 1696FlipSign(temp1)97temp1 += 2298else99temp0 = object.pushOffset100temp0 >>= 16101temp0 -= 22102temp1 = 20103end if104105object.beingPushed = false106foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)107BoxCollisionTest(C_SOLID, object.entityPos, temp0, -16, temp1, 16, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)108switch checkResult109case COL_LEFT110if object.direction == FLIP_X111if player[currentPlayer].direction == FACING_RIGHT112player[currentPlayer].xpos += 0x20000113end if114115if player[currentPlayer].pushing > 0116object.beingPushed |= true117end if118119if object.state == HPUSHSPRING_RELEASE120if object.pushOffset > 0x10000121player[currentPlayer].speed = -12122player[currentPlayer].speed *= object.pushOffset123player[currentPlayer].speed /= 18124player[currentPlayer].collisionMode = CMODE_FLOOR125player[currentPlayer].pushing = 0126player[currentPlayer].direction = object.direction127player[currentPlayer].controlLock = 15128if player[currentPlayer].state != Player_State_Roll129player[currentPlayer].state = Player_State_Ground130player[currentPlayer].animation = ANI_RUNNING131end if132PlaySfx(SfxName[Spring], false)133end if134end if135end if136break137138case COL_RIGHT139if object.direction == FLIP_NONE140if player[currentPlayer].direction == FACING_LEFT141player[currentPlayer].xpos -= 0x20000142end if143144if player[currentPlayer].pushing > 0145object.beingPushed |= true146end if147148if object.state == HPUSHSPRING_RELEASE149if object.pushOffset > 0x10000150player[currentPlayer].speed = 12151player[currentPlayer].speed *= object.pushOffset152player[currentPlayer].speed /= 18153player[currentPlayer].collisionMode = CMODE_FLOOR154player[currentPlayer].pushing = 0155player[currentPlayer].direction = object.direction156player[currentPlayer].controlLock = 15157if player[currentPlayer].state != Player_State_Roll158player[currentPlayer].state = Player_State_Ground159player[currentPlayer].animation = ANI_RUNNING160end if161PlaySfx(SfxName[Spring], false)162end if163end if164end if165break166167end switch168next169end event170171172event ObjectDraw173if object.pushOffset == 0174DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)175else176if object.direction == FLIP_NONE177temp0 = object.pushOffset178FlipSign(temp0)179temp0 += object.xpos180DrawSpriteFX(1, FX_FLIP, temp0, object.ypos)181182temp0 = object.pushOffset183temp0 *= -2184temp0 /= 3185temp0 += object.xpos186DrawSpriteFX(2, FX_FLIP, temp0, object.ypos)187188temp0 = object.pushOffset189temp0 /= -3190temp0 += object.xpos191DrawSpriteFX(3, FX_FLIP, temp0, object.ypos)192193DrawSpriteFX(4, FX_FLIP, object.xpos, object.ypos)194else195temp0 = object.pushOffset196temp0 += object.xpos197DrawSpriteFX(1, FX_FLIP, temp0, object.ypos)198199temp0 = object.pushOffset200temp0 *= 2201temp0 /= 3202temp0 += object.xpos203DrawSpriteFX(2, FX_FLIP, temp0, object.ypos)204205temp0 = object.pushOffset206temp0 /= 3207temp0 += object.xpos208DrawSpriteFX(3, FX_FLIP, temp0, object.ypos)209210DrawSpriteFX(4, FX_FLIP, object.xpos, object.ypos)211end if212end if213end event214215216event ObjectStartup217CheckCurrentStageFolder("Zone07")218if checkResult == true219LoadSpriteSheet("OOZ/Objects.gif")220SpriteFrame(-20, -16, 40, 32, 272, 223)221SpriteFrame(4, -16, 16, 32, 296, 223)222SpriteFrame(-4, -16, 8, 32, 288, 223)223SpriteFrame(-12, -16, 8, 32, 280, 223)224SpriteFrame(-20, -16, 8, 32, 272, 223)225else226LoadSpriteSheet("MBZ/Objects.gif")227SpriteFrame(-20, -16, 40, 32, 756, 778)228SpriteFrame(4, -16, 16, 32, 780, 778)229SpriteFrame(-4, -16, 8, 32, 772, 778)230SpriteFrame(-12, -16, 8, 32, 764, 778)231SpriteFrame(-20, -16, 8, 32, 756, 778)232end if233234foreach (TypeName[H Push Spring], arrayPos0, ALL_ENTITIES)235object[arrayPos0].direction = object[arrayPos0].propertyValue236object[arrayPos0].direction &= FLIP_X237object[arrayPos0].xpos &= 0xFFFF0000238object[arrayPos0].ypos &= 0xFFFF0000239next240241SetTableValue(TypeName[H Push Spring], DebugMode_ObjCount, DebugMode_TypesTable)242SetTableValue(HPushSpring_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)243SetTableValue(HPushSpring_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)244DebugMode_ObjCount++245end event246247248// ========================249// Editor Events250// ========================251252event RSDKEdit253if editor.returnVariable == true254switch editor.variableID255case EDIT_VAR_PROPVAL // property value256checkResult = object.propertyValue257break258259case 0 // direction260checkResult = object.propertyValue261checkResult &= 1262break263264end switch265else266switch editor.variableID267case EDIT_VAR_PROPVAL // property value268object.propertyValue = editor.variableValue269break270271case 0 // direction272editor.variableValue &= 1273object.propertyValue = editor.variableValue274break275276end switch277end if278end event279280281event RSDKDraw282GetBit(object.direction, object.propertyValue, 0)283DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)284end event285286287event RSDKLoad288CheckCurrentStageFolder("Zone07")289if checkResult == true290LoadSpriteSheet("OOZ/Objects.gif")291SpriteFrame(-20, -16, 40, 32, 272, 223)292else293LoadSpriteSheet("MBZ/Objects.gif")294SpriteFrame(-20, -16, 40, 32, 756, 778)295end if296297AddEditorVariable("direction")298SetActiveVariable("direction")299AddEnumVariable("Right", 0)300AddEnumVariable("Left", 1)301end event302303304