Path: blob/master/Sonic 1/Scripts/LZ/AirBubble.txt
1482 views
// ----------------------------------1// RSDK Project: Sonic 12// 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.bubbleUsed1516private alias 0 : AIRBUBBLE_ACTIVE17private alias 1 : AIRBUBBLE_USED1819// Player values20private alias object.state : player.state21private alias object.animation : player.animation22private alias object.animationSpeed : player.animationSpeed23private alias object.xvel : player.xvel24private alias object.yvel : player.yvel25private alias object.speed : player.speed26private alias object.value3 : player.drownTimer27private alias object.value4 : player.drownLevel28private alias object.value36 : player.flyCarryTimer29private alias object.value37 : player.shield3031// Shield constants32private alias 2 : SHIELD_BUBBLE333435// ========================36// Events37// ========================3839event ObjectUpdate40currentPlayer = object.targetPlayer4142if object.state == AIRBUBBLE_ACTIVE43object.timer++44if object.timer > 1545object.timer = 046if object.frame == 847object.type = TypeName[Blank Object]48end if4950if object.frame < object.propertyValue51object.frame++52end if53end if5455object.ypos += object.yvel56if currentPlayer != 0xFFFF57if player[currentPlayer].state == Player_State_Clinging58if object.propertyValue < 359object.originPos.x += 0x4000060end if61end if62end if6364if object.frame < 765Sin(object.xpos, object.angle)66object.xpos <<= 967object.xpos += object.originPos.x68object.angle += 469object.angle &= 51170end if7172if object.iypos < stage.waterLevel73if object.propertyValue == 674object.frame = 775object.propertyValue = 876object.timer = 077object.yvel = 078else79if object.propertyValue < 680object.type = TypeName[Blank Object]81end if82end if83end if84else85CheckEqual(player[currentPlayer].animation, ANI_HURT)86temp0 = checkResult87CheckEqual(player[currentPlayer].animation, ANI_DYING)88temp0 |= checkResult8990if temp0 != false91object.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]105106if object.bubbleUsed != false107player[currentPlayer].animation = ANI_WALKING108player[currentPlayer].animationSpeed = 20109end if110end if111end if112113if object.outOfBounds == true114object.type = TypeName[Blank Object]115end if116117if object.frame == 6118foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)119if player[currentPlayer].animation != ANI_DYING120if player[currentPlayer].shield != SHIELD_BUBBLE121BoxCollisionTest(C_TOUCH, object.entityPos, -2, -2, 2, 2, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)122123if checkResult == true124object.frame = 7125object.state = AIRBUBBLE_USED126object.timer = 0127object.yvel = 0128object.targetPlayer = currentPlayer129player[currentPlayer].yvel = 0130player[currentPlayer].xvel = 0131player[currentPlayer].speed = 0132CheckEqual(player[currentPlayer].animation, ANI_FLYING)133temp0 = checkResult134CheckEqual(player[currentPlayer].animation, ANI_FLYINGTIRED)135temp0 |= checkResult136CheckEqual(player[currentPlayer].animation, ANI_SWIM_LIFT)137temp0 |= checkResult138CheckEqual(player[currentPlayer].animation, ANI_GLIDING)139temp0 |= checkResult140CheckEqual(player[currentPlayer].animation, ANI_GLIDING_STOP)141temp0 |= checkResult142CheckEqual(player[currentPlayer].animation, ANI_CLIMBING)143temp0 |= checkResult144CheckEqual(player[currentPlayer].animation, ANI_LEDGEPULLUP)145temp0 |= checkResult146CheckEqual(player[currentPlayer].animation, ANI_CLINGING)147temp0 |= checkResult148CheckEqual(player[currentPlayer].animation, ANI_FANROTATE)149temp0 |= checkResult150151if temp0 == false152player[currentPlayer].animation = ANI_BREATHING153object.bubbleUsed = true154#platform: USE_ORIGINS155CallNativeFunction4(NotifyCallback, NOTIFY_STATS_PARAM_1, 1, 0, 0)156#endplatform157end if158159player[currentPlayer].drownTimer = 0160player[currentPlayer].drownLevel = 0161162if player[currentPlayer].state == Player_State_RollJump163#platform: USE_STANDALONE164player[currentPlayer].state = Player_State_Air165#endplatform166#platform: USE_ORIGINS167player[currentPlayer].state = Player_State_Air_NoDropDash168#endplatform169end if170171if player[currentPlayer].state == Player_State_Carried172#platform: USE_STANDALONE173player[currentPlayer].state = Player_State_Air174#endplatform175#platform: USE_ORIGINS176player[currentPlayer].state = Player_State_Air_NoDropDash177#endplatform178player[1].flyCarryTimer = 30179end if180181PlaySfx(SfxName[Breathing], false)182end if183end if184end if185next186end if187end event188189190event ObjectDraw191DrawSprite(object.frame)192end event193194195event ObjectStartup196LoadSpriteSheet("LZ/Objects.gif")197198// Bubble frames199SpriteFrame(-2, -2, 4, 4, 61, 1)200SpriteFrame(-3, -3, 6, 6, 61, 6)201SpriteFrame(-4, -4, 8, 8, 68, 4)202SpriteFrame(-6, -6, 12, 12, 77, 0)203SpriteFrame(-8, -8, 16, 16, 90, 1)204SpriteFrame(-12, -12, 24, 24, 61, 13)205SpriteFrame(-16, -16, 32, 32, 86, 18)206SpriteFrame(-16, -16, 32, 32, 123, 1)207SpriteFrame(-15, -15, 30, 30, 156, 3)208end event209210211// ========================212// Editor Events213// ========================214215event RSDKDraw216DrawSprite(0)217end event218219220event RSDKLoad221LoadSpriteSheet("LZ/Objects.gif")222SpriteFrame(-16, -16, 32, 32, 86, 18)223224SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")225end event226227228