Path: blob/master/Sonic 1/Scripts/LZ/AirBubbler.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 12// 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.waterLevel65temp0 = object.ixpos66temp0 -= camera[0].xpos67Abs(temp0)6869if temp0 < screen.xcenter70temp0 = object.iypos71temp0 -= camera[0].ypos72Abs(temp0)7374if temp0 < screen.ycenter75temp1 = false7677if object.bubbleFlags == 078object.timer--7980if object.timer < 081SetBit(object.bubbleFlags, 0, true)82Rand(object.bubbleType1, 0xFFFF)83object.bubbleType2 = object.bubbleType184object.bubbleType1 %= 685object.bubbleType2 &= 1286object.dudsRemaining--8788if object.dudsRemaining < 089object.dudsRemaining = object.numDuds90SetBit(object.bubbleFlags, 1, true)91end if9293temp1 = true94end if95else96object.timer--9798if object.timer < 099temp1 = true100end if101end if102103if temp1 == true104// Randomize the time the next bubble is created105Rand(object.timer, 32)106107// Get bubble offset108Rand(temp0, 17)109temp0 -= 8110temp0 <<= 16111temp0 += object.xpos112113// Create the air bubble114CreateTempObject(TypeName[Air Bubble], 2, temp0, object.ypos)115116// Set its values and such117airBubble[tempObjectPos].originPos.y = object[tempObjectPos].xpos118Rand(object[tempObjectPos].angle, 256)119object[tempObjectPos].angle <<= 1120object[tempObjectPos].drawOrder = 4121object[tempObjectPos].yvel = -0x8800122airBubble[tempObjectPos].targetPlayer = 0xFFFF123124temp0 = object.bubbleType2125temp0 += object.bubbleType1126GetTableValue(object[tempObjectPos].propertyValue, temp0, AirBubbler_bubbleSizes)127GetBit(temp0, object.bubbleFlags, 1)128129if temp0 == true130Rand(temp0, 4)131temp1 = false132133if temp0 == 0134GetBit(temp0, object.bubbleFlags, 2)135if temp0 == false136temp1 = true137end if138end if139140if object.bubbleType1 == 0141GetBit(temp0, object.bubbleFlags, 2)142if temp0 == false143temp1 = true144end if145end if146147if temp1 == true148object[tempObjectPos].propertyValue = 6149SetBit(object.bubbleFlags, 2, true)150end if151end if152153object.bubbleType1--154if object.bubbleType1 < 0155Rand(temp0, 128)156temp0 += 128157object.timer += temp0158object.bubbleFlags = 0159end if160end if161end if162end if163end if164end event165166167event ObjectDraw168if object.iypos >= stage.waterLevel169temp0 = object.frame170temp0 >>= 4171DrawSprite(temp0)172end if173end event174175176event ObjectStartup177LoadSpriteSheet("LZ/Objects.gif")178179// Bubbler frames180SpriteFrame(-8, -8, 16, 16, 61, 51)181SpriteFrame(-8, -8, 16, 16, 78, 51)182SpriteFrame(-8, -8, 16, 16, 95, 51)183184foreach (TypeName[Air Bubbler], arrayPos0, ALL_ENTITIES)185object[arrayPos0].drawOrder = 4186object[arrayPos0].dudsRemaining = object[arrayPos0].numDuds187next188189SetTableValue(TypeName[Air Bubbler], DebugMode_ObjCount, DebugMode_TypesTable)190SetTableValue(AirBubbler_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)191SetTableValue(AirBubbler_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)192DebugMode_ObjCount++193end event194195196// ========================197// Editor Events198// ========================199200event RSDKDraw201DrawSprite(0)202end event203204205event RSDKLoad206LoadSpriteSheet("LZ/Objects.gif")207SpriteFrame(-8, -8, 16, 16, 61, 51)208209SetVariableAlias(ALIAS_VAR_PROPVAL, "numDuds")210end event211212213