Path: blob/master/Sonic 2/Scripts/ARZ/AirBubbler.txt
1482 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Air Bubbler Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.propertyValue : object.numDuds1213private alias object.value0 : object.timer14private alias object.value1 : object.bubbleType215private alias object.value2 : object.bubbleType116private alias object.value3 : object.bubbleFlags17private alias object.value4 : object.dudsRemaining1819// AirBubble object aliases20private alias object.value1 : airBubble.originPos.y21private alias object.value2 : airBubble.targetPlayer2223// ========================24// Function Declarations25// ========================2627reserve function AirBubbler_DebugDraw28reserve function AirBubbler_DebugSpawn293031// ========================32// Tables33// ========================3435private table AirBubbler_bubbleSizes362, 4, 2, 2, 2, 2, 4, 2, 4, 2, 2, 4, 2, 4, 2, 2, 4, 237end table383940// ========================41// Function Definitions42// ========================4344private function AirBubbler_DebugDraw45DrawSprite(0)46end function474849private function AirBubbler_DebugSpawn50CreateTempObject(TypeName[Air Bubbler], 0, object.xpos, object.ypos)51object[tempObjectPos].drawOrder = 452object[tempObjectPos].dudsRemaining = 053end function545556// ========================57// Events58// ========================5960event ObjectUpdate61object.frame++62object.frame %= 486364if object.iypos > stage.waterLevel65CheckCameraProximity(object.ixpos, object.iypos, screen.xcenter, screen.ycenter)66if checkResult == true67temp1 = 068if object.bubbleFlags == 069object.timer--70if object.timer < 071SetBit(object.bubbleFlags, 0, true)7273Rand(object.bubbleType1, 0xFFFF)74object.bubbleType2 = object.bubbleType175object.bubbleType1 %= 676object.bubbleType2 &= 1277object.dudsRemaining--78if object.dudsRemaining < 079object.dudsRemaining = object.numDuds80SetBit(object.bubbleFlags, 1, true)81end if8283temp1 = true84end if85else86object.timer--87if object.timer < 088temp1 = true89end if90end if9192if temp1 == true93Rand(object.timer, 32)9495Rand(temp0, 17)96temp0 -= 897temp0 <<= 1698temp0 += object.xpos99CreateTempObject(TypeName[Air Bubble], 2, temp0, object.ypos)100airBubble[tempObjectPos].originPos.y = object[tempObjectPos].xpos101Rand(object[tempObjectPos].angle, 256)102object[tempObjectPos].angle <<= 1103object[tempObjectPos].drawOrder = 4104object[tempObjectPos].yvel = -0x8800105airBubble[tempObjectPos].targetPlayer = 0xFFFF106temp0 = object.bubbleType2107temp0 += object.bubbleType1108GetTableValue(object[tempObjectPos].propertyValue, temp0, AirBubbler_bubbleSizes)109110GetBit(temp0, object.bubbleFlags, 1)111if temp0 == true112Rand(temp0, 4)113114temp1 = false115if temp0 == false116GetBit(temp0, object.bubbleFlags, 2)117if temp0 == false118temp1 = true119end if120end if121122if object.bubbleType1 == 0123GetBit(temp0, object.bubbleFlags, 2)124if temp0 == false125temp1 = true126end if127end if128129if temp1 == true130object[tempObjectPos].propertyValue = 6131SetBit(object.bubbleFlags, 2, true)132end if133end if134135object.bubbleType1--136if object.bubbleType1 < 0137Rand(temp0, 128)138temp0 += 128139object.timer += temp0140object.bubbleFlags = 0141end if142end if143end if144end if145end event146147148event ObjectDraw149if object.iypos >= stage.waterLevel150temp0 = object.frame151temp0 >>= 4152DrawSprite(temp0)153end if154end event155156157event ObjectStartup158// Likely an oversignt made when copying scripts from CPZ - for some reason a CPZ sheet is loaded despite this being ARZ159// The ARZ version of this sheet exists too, but it remains unused because of this160LoadSpriteSheet("CPZ/Objects3.gif")161162// Bubbler frames163SpriteFrame(-8, -8, 16, 16, 103, 1)164SpriteFrame(-8, -8, 16, 16, 120, 1)165SpriteFrame(-8, -8, 16, 16, 137, 1)166167foreach (TypeName[Air Bubbler], arrayPos0, ALL_ENTITIES)168object[arrayPos0].drawOrder = 4169object[arrayPos0].dudsRemaining = object[arrayPos0].numDuds170next171172SetTableValue(TypeName[Air Bubbler], DebugMode_ObjCount, DebugMode_TypesTable)173SetTableValue(AirBubbler_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)174SetTableValue(AirBubbler_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)175DebugMode_ObjCount++176end event177178179// ========================180// Editor Events181// ========================182183event RSDKDraw184DrawSprite(0)185end event186187188event RSDKLoad189LoadSpriteSheet("ARZ/Objects3.gif")190SpriteFrame(-8, -8, 16, 16, 103, 1)191192SetVariableAlias(ALIAS_VAR_PROPVAL, "numDuds")193end event194195196