Path: blob/master/Sonic 2/Scripts/HPZ/AirBubble.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Air Bubble 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.originPos.x13private alias object.value2 : object.targetPlayer14private alias object.value3 : object.bubbleUsed1516// States17private alias 0 : AIRBUBBLE_ACTIVE18private alias 1 : AIRBUBBLE_USED1920// Player Aliases21private alias object.state : player.state22private alias object.animation : player.animation23private alias object.animationSpeed : player.animationSpeed24private alias object.xvel : player.xvel25private alias object.yvel : player.yvel26private alias object.speed : player.speed27private alias object.value3 : player.drownTimer28private alias object.value4 : player.drownLevel29private alias object.value36 : player.flyCarryTimer30private alias object.value37 : player.shield3132// Shield constants33private alias 2 : SHIELD_BUBBLE343536// ========================37// Events38// ========================3940event ObjectUpdate41currentPlayer = object.targetPlayer42if object.state == AIRBUBBLE_ACTIVE43object.timer++44if object.timer > 1545object.timer = 04647if object.frame == 848object.type = TypeName[Blank Object]49end if5051if object.frame < object.propertyValue52object.frame++53end if54end if5556object.ypos += object.yvel57if currentPlayer != 0xFFFF58if player[currentPlayer].state == Player_State_Clinging59if object.propertyValue < 360object.originPos.x += 0x4000061end if62end if63end if6465if object.frame < 766Sin(object.xpos, object.angle)67object.xpos <<= 968object.xpos += object.originPos.x69object.angle += 470object.angle &= 0x1FF71end if7273if object.iypos < stage.waterLevel74if object.propertyValue == 675object.frame = 776object.propertyValue = 877object.timer = 078object.yvel = 079else80if object.propertyValue < 681object.type = TypeName[Blank Object]82end if83end if84end if85else86CheckEqual(player[currentPlayer].animation, ANI_HURT)87temp0 = checkResult88CheckEqual(player[currentPlayer].animation, ANI_DYING)89temp0 |= checkResult90if temp0 != 091object.bubbleUsed = false92end if9394if object.timer < 2095object.timer++96if object.bubbleUsed != false97player[currentPlayer].animation = ANI_BREATHING98end if99100if object.timer > 9101object.frame = 8102end if103else104object.type = TypeName[Blank Object]105if object.bubbleUsed != false106player[currentPlayer].animation = ANI_WALKING107player[currentPlayer].animationSpeed = 20108end if109end if110end if111112if object.outOfBounds == true113object.type = TypeName[Blank Object]114end if115116if object.frame == 6117foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)118if player[currentPlayer].animation != ANI_DYING119if player[currentPlayer].shield != SHIELD_BUBBLE120BoxCollisionTest(C_TOUCH, object.entityPos, -2, -2, 2, 2, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)121if checkResult == true122object.frame = 7123object.state = 1124object.timer = 0125object.yvel = 0126object.targetPlayer = currentPlayer127player[currentPlayer].yvel = 0128player[currentPlayer].xvel = 0129player[currentPlayer].speed = 0130CheckEqual(player[currentPlayer].animation, ANI_FLYING)131temp0 = checkResult132CheckEqual(player[currentPlayer].animation, ANI_FLYINGTIRED)133temp0 |= checkResult134CheckEqual(player[currentPlayer].animation, ANI_SWIM_LIFT)135temp0 |= checkResult136CheckEqual(player[currentPlayer].animation, ANI_GLIDING)137temp0 |= checkResult138CheckEqual(player[currentPlayer].animation, ANI_GLIDING_STOP)139temp0 |= checkResult140CheckEqual(player[currentPlayer].animation, ANI_CLIMBING)141temp0 |= checkResult142CheckEqual(player[currentPlayer].animation, ANI_LEDGEPULLUP)143temp0 |= checkResult144CheckEqual(player[currentPlayer].animation, ANI_CLINGING)145temp0 |= checkResult146CheckEqual(player[currentPlayer].animation, ANI_FANROTATE)147temp0 |= checkResult148if temp0 == false149player[currentPlayer].animation = ANI_BREATHING150object.bubbleUsed = true151end if152153player[currentPlayer].drownTimer = 0154player[currentPlayer].drownLevel = 0155if player[currentPlayer].state == Player_State_RollJump156#platform: USE_STANDALONE157player[currentPlayer].state = Player_State_Air158#endplatform159#platform: USE_ORIGINS160player[currentPlayer].state = Player_State_Air_NoDropDash161#endplatform162end if163164if player[currentPlayer].state == Player_State_Carried165#platform: USE_STANDALONE166player[currentPlayer].state = Player_State_Air167#endplatform168#platform: USE_ORIGINS169player[currentPlayer].state = Player_State_Air_NoDropDash170#endplatform171player[1].flyCarryTimer = 30172end if173PlaySfx(SfxName[Breathing], false)174end if175end if176end if177next178end if179end event180181182event ObjectDraw183DrawSprite(object.frame)184end event185186187event ObjectStartup188LoadSpriteSheet("HPZ/Objects3.gif")189190// Bubble frames191SpriteFrame(-2, -2, 4, 4, 157, 2)192SpriteFrame(-3, -3, 6, 6, 156, 9)193SpriteFrame(-4, -4, 8, 8, 155, 17)194SpriteFrame(-6, -6, 12, 12, 209, 36)195SpriteFrame(-8, -8, 16, 16, 207, 51)196SpriteFrame(-12, -12, 24, 24, 164, 1)197SpriteFrame(-16, -16, 32, 32, 189, 1)198SpriteFrame(-16, -16, 32, 32, 222, 1)199SpriteFrame(-15, -15, 30, 30, 224, 34)200end event201202203// ========================204// Editor Events205// ========================206207event RSDKDraw208DrawSprite(0)209end event210211212event RSDKLoad213LoadSpriteSheet("HPZ/Objects3.gif")214SpriteFrame(-16, -16, 32, 32, 222, 1)215216SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")217end event218219220