Path: blob/master/Sonic 1/Scripts/Enemies/Burrobot.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Burrobot Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.startPos.x12private alias object.value1 : object.startPos.y13private alias object.value2 : object.backupPlayer14private alias object.value3 : object.targetPlayer15private alias object.value4 : object.targetDistance16private alias object.value5 : object.timer17private alias object.value6 : object.unused // it's set, but never actually *used*1819private alias 0 : BURROBOT_AWAITPLAYER20private alias 1 : BURROBOT_JUMPED21private alias 2 : BURROBOT_MOVING22private alias 3 : BURROBOT_STOPPED2324private alias 0 : BURROBOT_ANI_HIDDEN25private alias 1 : BURROBOT_ANI_JUMPED26private alias 2 : BURROBOT_ANI_MOVING27private alias 3 : BURROBOT_ANI_STOPPED2829// Player Aliases30private alias object.xpos : player.xpos31private alias object.ypos : player.ypos3233private alias object.value40 : player.hitboxLeft34private alias object.value38 : player.hitboxTop35private alias object.value41 : player.hitboxRight36private alias object.value39 : player.hitboxBottom3738// Path ID Aliases39private alias 0 : PATH_A404142// ========================43// Function Declarations44// ========================4546reserve function Burrobot_DebugDraw47reserve function Burrobot_DebugSpawn484950// ========================51// Function Definitions52// ========================5354private function Burrobot_DebugDraw55DrawSpriteFX(3, FX_FLIP, object.xpos, object.ypos)56end function575859private function Burrobot_DebugSpawn60CreateTempObject(TypeName[Burrobot], 0, object.xpos, object.ypos)61object[tempObjectPos].direction = object.direction62if object[tempObjectPos].direction == FLIP_NONE63object[tempObjectPos].xvel = -0x800064else65object[tempObjectPos].xvel = 0x800066end if67object[tempObjectPos].startPos.x = object.xpos68object[tempObjectPos].startPos.y = object.ypos69object[tempObjectPos].yvel = -0x4000070object[tempObjectPos].animation = BURROBOT_ANI_JUMPED71object[tempObjectPos].state = BURROBOT_JUMPED72end function737475// ========================76// Events77// ========================7879event ObjectUpdate80switch object.state81case BURROBOT_AWAITPLAYER82object.targetDistance = 0x7FFFFFFF83object.backupPlayer = 084object.targetPlayer = 0xFFFF85foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)86temp0 = player[currentPlayer].xpos87temp0 -= object.xpos88Abs(temp0)89if temp0 < object.targetDistance90object.targetDistance = temp091object.backupPlayer = currentPlayer92end if93if temp0 < 0x60000094if player[currentPlayer].ypos <= object.ypos95if object.targetPlayer != 0xFFFF96arrayPos0 = object.targetPlayer97if player[currentPlayer].ypos < player[arrayPos0].ypos98object.targetPlayer = currentPlayer99end if100else101object.targetPlayer = currentPlayer102end if103end if104end if105next106107if object.targetPlayer != 0xFFFF108arrayPos0 = object.targetPlayer109temp0 = object.ypos110temp0 -= player[arrayPos0].ypos111if temp0 >= 0112if temp0 <= 0x800000113Rand(temp0, 8)114if temp0 == 0115object.state = BURROBOT_JUMPED116object.priority = PRIORITY_ACTIVE117if player[arrayPos0].xpos < object.xpos118object.direction = FLIP_NONE119object.xvel = -0x8000120else121object.direction = FLIP_X122object.xvel = 0x8000123end if124object.yvel = -0x40000125object.animation = BURROBOT_ANI_JUMPED126end if127end if128end if129else130arrayPos0 = object.backupPlayer131if player[arrayPos0].xpos < object.xpos132object.direction = FLIP_NONE133else134object.direction = FLIP_X135end if136end if137break138139case BURROBOT_JUMPED140object.xpos += object.xvel141object.ypos += object.yvel142object.yvel += 0x1800143144if object.yvel > 0145ObjectTileCollision(CSIDE_FLOOR, 0, 20, PATH_A)146if checkResult == true147arrayPos0 = object.backupPlayer148if player[arrayPos0].xpos < object.xpos149object.direction = FLIP_NONE150else151object.direction = FLIP_X152end if153154object.timer = 256155object.animation = BURROBOT_ANI_MOVING156object.unused = false157object.state = BURROBOT_MOVING158end if159end if160break161162case BURROBOT_MOVING163object.xpos += object.xvel164165temp0 = false166object.timer--167if object.timer == 0168temp0 = true169end if170171if object.direction == FLIP_NONE172ObjectTileCollision(CSIDE_FLOOR, -12, 21, PATH_A)173if checkResult == false174ObjectTileCollision(CSIDE_FLOOR, -12, 19, PATH_A)175if checkResult == false176ObjectTileCollision(CSIDE_FLOOR, -12, 20, PATH_A)177end if178end if179else180ObjectTileCollision(CSIDE_FLOOR, 12, 21, PATH_A)181if checkResult == false182ObjectTileCollision(CSIDE_FLOOR, 12, 19, PATH_A)183if checkResult == false184ObjectTileCollision(CSIDE_FLOOR, 12, 20, PATH_A)185end if186end if187end if188189if checkResult == false190temp0 = true191end if192193ObjectTileGrip(CSIDE_FLOOR, 0, 20, PATH_A)194if temp0 == true195GetBit(temp0, oscillation, 2)196if temp0 == false197object.yvel = -0x40000198object.animation = BURROBOT_ANI_JUMPED199object.state = BURROBOT_JUMPED200else201object.timer = 60202object.animation = BURROBOT_ANI_STOPPED203object.state = BURROBOT_STOPPED204end if205end if206break207208case BURROBOT_STOPPED209object.timer--210if object.timer == 0211FlipSign(object.xvel)212if object.xvel < 0213object.direction = FLIP_NONE214else215object.direction = FLIP_X216end if217object.timer = 256218object.animation = BURROBOT_ANI_MOVING219object.state = BURROBOT_MOVING220end if221break222223end switch224225if object.outOfBounds == true226temp0 = object.xpos227temp1 = object.ypos228object.xpos = object.startPos.x229object.ypos = object.startPos.y230if object.outOfBounds == true231object.xpos = object.startPos.x232object.ypos = object.startPos.y233object.xvel = 0234object.yvel = 0235object.animation = BURROBOT_ANI_HIDDEN236object.animationTimer = 0237object.priority = PRIORITY_BOUNDS238object.unused = true239object.state = BURROBOT_AWAITPLAYER240else241object.xpos = temp0242object.ypos = temp1243end if244end if245246foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)247BoxCollisionTest(C_TOUCH, object.entityPos, -12, -18, 12, 18, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)248if checkResult == true249CallFunction(Player_BadnikBreak)250end if251next252253object.frame = object.animationTimer254object.frame >>= 2255switch object.animation256case BURROBOT_ANI_HIDDEN257case BURROBOT_ANI_JUMPED258if object.yvel > 0259object.frame = 5260else261object.frame += 3262end if263break264265case BURROBOT_ANI_MOVING266break267268case BURROBOT_ANI_STOPPED269object.frame++270break271272end switch273274object.animationTimer++275object.animationTimer &= 7276end event277278279event ObjectDraw280DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)281end event282283284event ObjectStartup285CheckCurrentStageFolder("Zone04")286if checkResult == true287LoadSpriteSheet("LZ/Objects.gif")288SpriteFrame(-16, -16, 28, 36, 34, 68)289SpriteFrame(-16, -16, 28, 36, 63, 68)290SpriteFrame(-16, -16, 28, 36, 194, 90)291SpriteFrame(-12, -24, 24, 46, 92, 68)292SpriteFrame(-12, -24, 24, 46, 143, 90)293SpriteFrame(-16, -20, 25, 42, 168, 90)294SpriteFrame(-24, -12, 38, 24, 118, 65)295end if296297CheckCurrentStageFolder("Zone07")298if checkResult == true299LoadSpriteSheet("MBZ/Objects.gif")300SpriteFrame(-16, -16, 28, 36, 1, 227)301SpriteFrame(-16, -16, 28, 36, 30, 227)302SpriteFrame(-16, -16, 28, 36, 59, 227)303SpriteFrame(-12, -24, 24, 46, 88, 217)304SpriteFrame(-12, -24, 24, 46, 113, 217)305SpriteFrame(-16, -20, 25, 42, 138, 221)306SpriteFrame(-24, -12, 38, 24, 215, 229)307end if308309#platform: USE_ORIGINS310CheckCurrentStageFolder("DLC_Zone06")311if checkResult == true312LoadSpriteSheet("LZ/Objects.gif")313SpriteFrame(-16, -16, 28, 36, 34, 68)314SpriteFrame(-16, -16, 28, 36, 63, 68)315SpriteFrame(-16, -16, 28, 36, 194, 90)316SpriteFrame(-12, -24, 24, 46, 92, 68)317SpriteFrame(-12, -24, 24, 46, 143, 90)318SpriteFrame(-16, -20, 25, 42, 168, 90)319SpriteFrame(-24, -12, 38, 24, 118, 65)320end if321#endplatform322323foreach (TypeName[Burrobot], arrayPos0, ALL_ENTITIES)324object[arrayPos0].startPos.x = object[arrayPos0].xpos325object[arrayPos0].startPos.y = object[arrayPos0].ypos326object[arrayPos0].unused = true327next328329SetTableValue(TypeName[Burrobot], DebugMode_ObjCount, DebugMode_TypesTable)330SetTableValue(Burrobot_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)331SetTableValue(Burrobot_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)332DebugMode_ObjCount++333end event334335336// ========================337// Editor Events338// ========================339340event RSDKDraw341DrawSprite(3)342end event343344345event RSDKLoad346CheckCurrentStageFolder("Zone07")347if checkResult == true348LoadSpriteSheet("MBZ/Objects.gif")349SpriteFrame(-16, -16, 28, 36, 1, 227)350SpriteFrame(-16, -16, 28, 36, 30, 227)351SpriteFrame(-16, -16, 28, 36, 59, 227)352SpriteFrame(-12, -24, 24, 46, 88, 217)353SpriteFrame(-12, -24, 24, 46, 113, 217)354SpriteFrame(-16, -20, 25, 42, 138, 221)355SpriteFrame(-24, -12, 38, 24, 215, 229)356else357// Both "Zone04" and "DLC_Zone06" will end up here358LoadSpriteSheet("LZ/Objects.gif")359SpriteFrame(-16, -16, 28, 36, 34, 68)360SpriteFrame(-16, -16, 28, 36, 63, 68)361SpriteFrame(-16, -16, 28, 36, 194, 90)362SpriteFrame(-12, -24, 24, 46, 92, 68)363SpriteFrame(-12, -24, 24, 46, 143, 90)364SpriteFrame(-16, -20, 25, 42, 168, 90)365SpriteFrame(-24, -12, 38, 24, 118, 65)366end if367368SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")369end event370371372