Path: blob/master/Sonic 2/Scripts/SCZ/Tornado.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Tornado Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.frame : object.propellerFrame1213private alias object.value0 : object.timer14private alias object.value1 : object.stood15private alias object.value2 : object.gravityForce16private alias object.value3 : object.storedPos.y17private alias object.value4 : object.lastPos.y18private alias object.value5 : object.collisionOffset.y19private alias object.value6 : object.pilotFrame20private alias object.value7 : object.pilotFrameDelay21private alias object.value8 : object.pilotAnimPos2223// States24private alias 0 : TORNADO_IDLE25private alias 1 : TORNADO_JUMP_RECOIL26private alias 2 : TORNADO_JUMP_REBOUND27private alias 3 : TORNADO_LAND2829// Player Aliases30private alias object.type : player.type31private alias object.xpos : player.xpos32private alias object.ypos : player.ypos33private alias object.yvel : player.yvel34private alias object.jumpPress : player.jumpPress353637// ========================38// Tables39// ========================4041private table Tornado_TailsPilotFrameTable425, 32436, 8447, 8458, 8467, 8476, 16489, 32496, 1650end table5152private table Tornado_SonicPilotFrameTable5310, 95411, 95510, 95611, 95710, 95811, 95910, 96011, 961end table626364// ========================65// Events66// ========================6768event ObjectUpdate69object.lastPos.y = object.ypos70object.drawOrder = 47172// The normal touch input code in the Player Object only supports the 4 directions, so let's redo the calculations again but account for diagonals this time, for smoother Tornado control73if options.touchControls == true74CheckTouchRect(0, 96, screen.xcenter, screen.ysize)75if checkResult > -176arrayPos0 = checkResult77temp0 = touchscreen[arrayPos0].xpos78temp0 -= saveRAM[39]79temp1 = touchscreen[arrayPos0].ypos80temp1 -= saveRAM[40]8182ATan2(temp2, temp0, temp1)83temp2 += 1684temp2 &= 25585temp2 >>= 586switch temp287case 088keyDown[0].right = true89break9091case 192keyDown[0].right = true93keyDown[0].down = true94break9596case 297keyDown[0].down = true98break99100case 3101keyDown[0].down = true102keyDown[0].left = true103break104105case 4106keyDown[0].left = true107break108109case 5110keyDown[0].left = true111keyDown[0].up = true112break113114case 6115keyDown[0].up = true116break117118case 7119keyDown[0].up = true120keyDown[0].right = true121break122end switch123end if124end if125126switch object.state127case TORNADO_IDLE128if player[0].yvel < 0129if player[0].jumpPress == true130object.gravityForce = 0x20000131object.storedPos.y = object.ypos132object.state++133end if134end if135break136137case TORNADO_JUMP_RECOIL // jump force pushes tornado downwards138object.gravityForce -= 0x2000139object.ypos += object.gravityForce140if object.gravityForce < 0141object.state++142end if143break144145case TORNADO_JUMP_REBOUND // tornado returns to its original position146object.gravityForce -= 0x1000147object.ypos += object.gravityForce148if object.ypos <= object.storedPos.y149object.ypos = object.storedPos.y150object.gravityForce = 0151object.state = TORNADO_IDLE152end if153break154155case TORNADO_LAND156object.gravityForce -= 0x2000157object.ypos += object.gravityForce158object.timer++159if object.timer == 24160object.gravityForce = 0161object.state = TORNADO_IDLE162end if163break164165end switch166167if object.stood == true168object.xpos += SCZSetup_scrollVelocity.x169object.ypos += SCZSetup_scrollVelocity.y170if keyDown[0].up == true171object.yvel = -0x10000172else173object.yvel = 0174end if175176if keyDown[0].down == true177object.yvel = 0x10000178end if179else180object.yvel = 0181end if182183object.ypos += object.yvel184temp0 = camera[0].ypos185temp0 -= 52186temp0 <<= 16187if object.ypos < temp0188object.ypos = temp0189end if190191temp0 = camera[0].ypos192temp0 += 76193temp0 <<= 16194if object.ypos > temp0195object.ypos = temp0196end if197198temp0 = object.ypos199object.lastPos.y &= 0xFFFF0000200object.collisionOffset.y = object.ypos201object.collisionOffset.y &= 0xFFFF0000202object.collisionOffset.y -= object.lastPos.y203object.ypos = object.lastPos.y204205object.stood = false206foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)207temp2 = player[currentPlayer].yvel208BoxCollisionTest(C_PLATFORM, object.entityPos, -20, -8, 20, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)209if checkResult == true210player[currentPlayer].xpos += SCZSetup_scrollVelocity.x211player[currentPlayer].ypos += object.collisionOffset.y212if temp2 > 0x10000213object.timer = 0214object.gravityForce = 0x20000215object.state = TORNADO_LAND216end if217object.stood |= true218end if219next220221object.ypos = temp0222223temp0 = player[0].xpos224temp0 -= object.xpos225Abs(temp0)226if temp0 > 0x100000227if player[0].xpos > object.xpos228temp0 = player[0].xpos229temp0 -= object.xpos230temp0 -= 0x100000231if temp0 > 0x80000232temp0 = 0x80000233end if234object.xpos += temp0235else236temp0 = player[0].xpos237temp0 -= object.xpos238temp0 += 0x100000239if temp0 < -0x80000240temp0 = -0x80000241end if242object.xpos += temp0243end if244end if245246temp0 = -0x100000247temp0 += object.xpos248temp1 = stage.curXBoundary1249temp1 <<= 16250if temp0 < temp1251object.xpos = temp1252object.xpos += 0x100000253end if254255object.propellerFrame++256object.propellerFrame &= 3257258if object.pilotFrameDelay <= 1259if stage.playerListPos == PLAYER_TAILS_A260GetTableValue(object.pilotFrame, object.pilotAnimPos, Tornado_SonicPilotFrameTable)261object.pilotAnimPos++262263GetTableValue(object.pilotFrameDelay, object.pilotAnimPos, Tornado_SonicPilotFrameTable)264object.pilotAnimPos++265else266GetTableValue(object.pilotFrame, object.pilotAnimPos, Tornado_TailsPilotFrameTable)267object.pilotAnimPos++268269GetTableValue(object.pilotFrameDelay, object.pilotAnimPos, Tornado_TailsPilotFrameTable)270object.pilotAnimPos++271end if272object.pilotAnimPos &= 15273else274object.pilotFrameDelay--275end if276end event277278279event ObjectDraw280DrawSprite(object.propellerFrame) // propeller281DrawSprite(4) // tornado282DrawSprite(object.pilotFrame) // pilot283end event284285286event ObjectStartup287LoadSpriteSheet("SCZ/Objects.gif")288SpriteFrame(21, 8, 4, 24, 378, 215) // Propeller - Frame 1 - #0289SpriteFrame(21, 11, 4, 18, 383, 218) // Propeller - Frame 2 - #1290SpriteFrame(21, 16, 4, 8, 388, 223) // Propeller - Frame 3 - #2291SpriteFrame(21, 11, 4, 18, 393, 218) // Propeller - Frame 4 - #3292SpriteFrame(-95, -16, 116, 64, 261, 191) // Tornado - #4293SpriteFrame(-45, -8, 21, 16, 261, 174) // Pilot (Tails) - Frame 1 - #5294SpriteFrame(-45, -8, 21, 16, 283, 174) // Pilot (Tails) - Frame 2 - #6295SpriteFrame(-45, -8, 21, 16, 305, 174) // Pilot (Tails) - Frame 3 - #7296SpriteFrame(-45, -8, 21, 16, 327, 174) // Pilot (Tails) - Frame 4 - #8297SpriteFrame(-47, -8, 23, 16, 349, 174) // Pilot (Tails) - Frame 5 - #9298SpriteFrame(-50, -8, 24, 16, 294, 157) // Pilot (Sonic) - Frame 6 - #10299SpriteFrame(-50, -8, 24, 16, 319, 157) // Pilot (Sonic) - Frame 2 - #11300301// Bye bye player 2302player[1].type = TypeName[Blank Object]303playerCount = 1304305if stage.playerListPos == PLAYER_TAILS_A306player[0].ypos += 0x40000307end if308end event309310311// ========================312// Editor Events313// ========================314315event RSDKDraw316DrawSprite(0)317end event318319320event RSDKLoad321LoadSpriteSheet("SCZ/Objects.gif")322SpriteFrame(-95, -16, 116, 64, 261, 191)323324SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")325end event326327328