Path: blob/master/Sonic 2/Scripts/Enemies/Asteron.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Asteron 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.startPos.x13private alias object.value2 : object.startPos.y14private alias object.value31 : object.wrapOffset.y1516// States17private alias 0 : ASTERON_IDLE18private alias 1 : ASTERON_CHECKPLAYERINRANGE19private alias 2 : ASTERON_EXPLODE2021// Player Aliases22private alias object.xpos : player.xpos23private alias object.ypos : player.ypos2425private alias object.value40 : player.hitboxLeft26private alias object.value38 : player.hitboxTop27private alias object.value41 : player.hitboxRight28private alias object.value39 : player.hitboxBottom293031// ========================32// Function Declarations33// ========================3435reserve function Asteron_Setup36reserve function Asteron_DebugDraw37reserve function Asteron_DebugSpawn383940// ========================41// Function Definitions42// ========================4344private function Asteron_Setup45object[arrayPos0].frame = 046object[arrayPos0].timer = 047object[arrayPos0].state = ASTERON_IDLE48object[arrayPos0].priority = 049end function505152private function Asteron_DebugDraw53DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)54end function555657private function Asteron_DebugSpawn58CreateTempObject(TypeName[Asteron], 0, object.xpos, object.ypos)59arrayPos0 = object[tempObjectPos].entityPos60object[arrayPos0].startPos.x = object.xpos61object[arrayPos0].startPos.y = object.ypos62object[arrayPos0].drawOrder = 563CallFunction(Asteron_Setup)64end function656667// ========================68// Events69// ========================7071event ObjectUpdate72switch object.state73case ASTERON_IDLE74temp0 = 07576temp1 = 077foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)78BoxCollisionTest(C_TOUCH, object.entityPos, -96, -64, 96, 64, currentPlayer, -1, -1, 1, 1)79if checkResult == false80temp0++81end if82temp1++83next8485if temp0 == temp186object.priority = PRIORITY_ACTIVE87object.state = ASTERON_CHECKPLAYERINRANGE88end if89break9091case ASTERON_CHECKPLAYERINRANGE92foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)93if object.state == ASTERON_CHECKPLAYERINRANGE94BoxCollisionTest(C_TOUCH, object.entityPos, -96, -96, 96, 96, currentPlayer, -1, -1, 1, 1)95if checkResult == true96temp1 = false97temp0 = object.xpos98temp0 -= player[currentPlayer].xpos99Abs(temp0)100if temp0 >= 0x100000101temp1 = true102if object.xpos > player[currentPlayer].xpos103object.xvel = -0x4000104else105object.xvel = 0x4000106end if107end if108109temp0 = object.ypos110temp0 -= player[currentPlayer].ypos111Abs(temp0)112if temp0 >= 0x100000113temp1 = true114if object.ypos > player[currentPlayer].ypos115object.yvel = -0x4000116else117object.yvel = 0x4000118end if119end if120121if temp1 == true122object.priority = PRIORITY_ACTIVE123object.timer = 65124object.state = ASTERON_EXPLODE125end if126end if127end if128next129break130131case ASTERON_EXPLODE132object.xpos += object.xvel133object.ypos += object.yvel134135object.frame = object.animationTimer136object.frame >>= 1137object.animationTimer++138object.animationTimer &= 3139140object.timer--141if object.timer == 0142ResetObjectEntity(object.entityPos, TypeName[Blank Object], 0, object.xpos, object.ypos)143144CreateTempObject(TypeName[Asteron Spike], 0, object.xpos, object.ypos)145object[tempObjectPos].ypos -= 0x80000146object[tempObjectPos].yvel = -0x40000147object[tempObjectPos].drawOrder = 5148149CreateTempObject(TypeName[Asteron Spike], 1, object.xpos, object.ypos)150object[tempObjectPos].xpos += 0x80000151object[tempObjectPos].ypos -= 0x40000152object[tempObjectPos].xvel = 0x30000153object[tempObjectPos].yvel = -0x10000154object[tempObjectPos].drawOrder = 5155156CreateTempObject(TypeName[Asteron Spike], 2, object.xpos, object.ypos)157object[tempObjectPos].xpos += 0x80000158object[tempObjectPos].ypos += 0x80000159object[tempObjectPos].xvel = 0x30000160object[tempObjectPos].yvel = 0x30000161object[tempObjectPos].drawOrder = 5162163CreateTempObject(TypeName[Asteron Spike], 2, object.xpos, object.ypos)164object[tempObjectPos].xpos -= 0x80000165object[tempObjectPos].ypos += 0x80000166object[tempObjectPos].xvel = -0x30000167object[tempObjectPos].yvel = 0x30000168object[tempObjectPos].direction = FLIP_X169object[tempObjectPos].drawOrder = 5170171CreateTempObject(TypeName[Asteron Spike], 1, object.xpos, object.ypos)172object[tempObjectPos].xpos -= 0x80000173object[tempObjectPos].ypos -= 0x40000174object[tempObjectPos].xvel = -0x30000175object[tempObjectPos].yvel = -0x10000176object[tempObjectPos].direction = FLIP_X177object[tempObjectPos].drawOrder = 5178179CreateTempObject(TypeName[Smoke Puff], 0, object.xpos, object.ypos)180object[tempObjectPos].ypos += 0x20000181object[tempObjectPos].drawOrder = 5182PlaySfx(SfxName[Destroy], false)183end if184break185186end switch187188if object.outOfBounds == true189temp0 = object.xpos190temp1 = object.ypos191object.xpos = object.startPos.x192object.ypos = object.startPos.y193object.ypos += object.wrapOffset.y194if object.outOfBounds == true195arrayPos0 = object.entityPos196CallFunction(Asteron_Setup)197else198object.xpos = temp0199object.ypos = temp1200end if201end if202203foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)204BoxCollisionTest(C_TOUCH, object.entityPos, -8, -8, 8, 8, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)205if checkResult == true206CallFunction(Player_BadnikBreak)207end if208next209end event210211212event ObjectDraw213DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)214end event215216217event ObjectStartup218CheckCurrentStageFolder("Zone09")219if checkResult == true220LoadSpriteSheet("MPZ/Objects.gif")221SpriteFrame(-16, -14, 32, 28, 223, 1)222SpriteFrame(-16, -14, 32, 28, 190, 1)223else224LoadSpriteSheet("MBZ/Objects.gif")225SpriteFrame(-16, -14, 32, 28, 843, 289)226SpriteFrame(-16, -14, 32, 28, 876, 289)227end if228229foreach (TypeName[Asteron], arrayPos0, ALL_ENTITIES)230object[arrayPos0].startPos.x = object[arrayPos0].xpos231object[arrayPos0].startPos.y = object[arrayPos0].ypos232object[arrayPos0].drawOrder = 5233CallFunction(Asteron_Setup)234next235236SetTableValue(TypeName[Asteron], DebugMode_ObjCount, DebugMode_TypesTable)237SetTableValue(Asteron_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)238SetTableValue(Asteron_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)239DebugMode_ObjCount++240end event241242243// ========================244// Editor Events245// ========================246247event RSDKDraw248DrawSprite(0)249end event250251252event RSDKLoad253CheckCurrentStageFolder("Zone09")254if checkResult == true255LoadSpriteSheet("MPZ/Objects.gif")256SpriteFrame(-16, -14, 32, 28, 223, 1)257SpriteFrame(-16, -14, 32, 28, 190, 1)258else259LoadSpriteSheet("MBZ/Objects.gif")260SpriteFrame(-16, -14, 32, 28, 843, 289)261SpriteFrame(-16, -14, 32, 28, 876, 289)262end if263264// Asterons in MPZ have it set to 46, though this value isn't used265SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")266end event267268269