Path: blob/master/Sonic 2/Scripts/ARZ/AirBubble.txt
1480 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.xvel : player.xvel23private alias object.yvel : player.yvel24private alias object.speed : player.speed25private alias object.animationSpeed : player.animationSpeed26private alias object.animation : player.animation27private 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_BUBBLE3435event ObjectUpdate36currentPlayer = object.targetPlayer37if object.state == AIRBUBBLE_ACTIVE38object.timer++39if object.timer > 1540object.timer = 04142if object.frame == 843object.type = TypeName[Blank Object]44end if4546if object.frame < object.propertyValue47object.frame++48end if49end if5051object.ypos += object.yvel52if currentPlayer != 0xFFFF53if player[currentPlayer].state == Player_State_Clinging54if object.propertyValue < 355object.originPos.x += 0x4000056end if57end if58end if5960if object.frame < 761Sin(object.xpos, object.angle)62object.xpos <<= 963object.xpos += object.originPos.x64object.angle += 465object.angle &= 0x1FF66end if6768if object.iypos < stage.waterLevel69if object.propertyValue == 670object.frame = 771object.propertyValue = 872object.timer = 073object.yvel = 074else75if object.propertyValue < 676object.type = TypeName[Blank Object]77end if78end if79end if80else81CheckEqual(player[currentPlayer].animation, ANI_HURT)82temp0 = checkResult83CheckEqual(player[currentPlayer].animation, ANI_DYING)84temp0 |= checkResult85if temp0 != 086object.bubbleUsed = false87end if8889if object.timer < 2090object.timer++91if object.bubbleUsed != false92player[currentPlayer].animation = ANI_BREATHING93end if9495if object.timer > 996object.frame = 897end if98else99object.type = TypeName[Blank Object]100if object.bubbleUsed != false101player[currentPlayer].animation = ANI_WALKING102player[currentPlayer].animationSpeed = 20103end if104end if105end if106107if object.outOfBounds == true108object.type = TypeName[Blank Object]109end if110111if object.frame == 6112foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)113if player[currentPlayer].animation != ANI_DYING114if player[currentPlayer].shield != SHIELD_BUBBLE115BoxCollisionTest(C_TOUCH, object.entityPos, -2, -2, 2, 2, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)116if checkResult == true117object.frame = 7118object.state = 1119object.timer = 0120object.yvel = 0121object.targetPlayer = currentPlayer122player[currentPlayer].yvel = 0123player[currentPlayer].xvel = 0124player[currentPlayer].speed = 0125CheckEqual(player[currentPlayer].animation, ANI_FLYING)126temp0 = checkResult127CheckEqual(player[currentPlayer].animation, ANI_FLYINGTIRED)128temp0 |= checkResult129CheckEqual(player[currentPlayer].animation, ANI_SWIM_LIFT)130temp0 |= checkResult131CheckEqual(player[currentPlayer].animation, ANI_GLIDING)132temp0 |= checkResult133CheckEqual(player[currentPlayer].animation, ANI_GLIDING_STOP)134temp0 |= checkResult135CheckEqual(player[currentPlayer].animation, ANI_CLIMBING)136temp0 |= checkResult137CheckEqual(player[currentPlayer].animation, ANI_LEDGEPULLUP)138temp0 |= checkResult139CheckEqual(player[currentPlayer].animation, ANI_CLINGING)140temp0 |= checkResult141CheckEqual(player[currentPlayer].animation, ANI_FANROTATE)142temp0 |= checkResult143if temp0 == false144player[currentPlayer].animation = ANI_BREATHING145object.bubbleUsed = true146end if147148player[currentPlayer].drownTimer = 0149player[currentPlayer].drownLevel = 0150if player[currentPlayer].state == Player_State_RollJump151#platform: USE_STANDALONE152player[currentPlayer].state = Player_State_Air153#endplatform154#platform: USE_ORIGINS155player[currentPlayer].state = Player_State_Air_NoDropDash156#endplatform157end if158159if player[currentPlayer].state == Player_State_Carried160#platform: USE_STANDALONE161player[currentPlayer].state = Player_State_Air162#endplatform163#platform: USE_ORIGINS164player[currentPlayer].state = Player_State_Air_NoDropDash165#endplatform166player[1].flyCarryTimer = 30167end if168PlaySfx(SfxName[Breathing], false)169end if170end if171end if172next173end if174end event175176177event ObjectDraw178DrawSprite(object.frame)179end event180181182event ObjectStartup183// Likely an oversignt made when copying scripts from CPZ - for some reason the CPZ sheet is loaded despite this being ARZ184// The ARZ version of this sheet exists too, but it remains unused because of this185LoadSpriteSheet("CPZ/Objects3.gif")186187// Bubble frames188SpriteFrame(-2, -2, 4, 4, 157, 2)189SpriteFrame(-3, -3, 6, 6, 156, 9)190SpriteFrame(-4, -4, 8, 8, 155, 17)191SpriteFrame(-6, -6, 12, 12, 209, 36)192SpriteFrame(-8, -8, 16, 16, 207, 51)193SpriteFrame(-12, -12, 24, 24, 164, 1)194SpriteFrame(-16, -16, 32, 32, 189, 1)195SpriteFrame(-16, -16, 32, 32, 222, 1)196SpriteFrame(-15, -15, 30, 30, 224, 34)197end event198199200// ========================201// Editor Events202// ========================203204event RSDKDraw205DrawSprite(0)206end event207208209event RSDKLoad210LoadSpriteSheet("ARZ/Objects3.gif")211SpriteFrame(-16, -16, 32, 32, 222, 1)212213SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")214end event215216217