Path: blob/master/Sonic 2/Scripts/Enemies/Clucker.txt
1482 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Clucker Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value0 : object.startPos.y12private alias object.value1 : object.timer13private alias object.value2 : object.cannonOffset.x1415// States16private alias 0 : CLUCKER_HIDDEN17private alias 1 : CLUCKER_APPEAR18private alias 2 : CLUCKER_ADJUSTCANNON19private alias 3 : CLUCKER_ATTACKING2021// Player Aliases22private alias object.xpos : player.xpos2324private alias object.value40 : player.hitboxLeft25private alias object.value38 : player.hitboxTop26private alias object.value41 : player.hitboxRight27private alias object.value39 : player.hitboxBottom2829// ========================30// Function Declarations31// ========================3233reserve function Clucker_Setup34reserve function Clucker_DebugDraw35reserve function Clucker_DebugSpawn3637// ========================38// Static Values39// ========================4041private value Clucker_sheetX = 042private value Clucker_sheetY = 04344private function Clucker_Setup45object[arrayPos0].ypos = object[arrayPos0].startPos.y46object[arrayPos0].timer = 047object[arrayPos0].state = CLUCKER_HIDDEN48object[arrayPos0].priority = PRIORITY_BOUNDS49end function505152private function Clucker_DebugDraw53EditFrame(0, -16, -16, 32, 32, Clucker_sheetX, Clucker_sheetY)54DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)55end function565758private function Clucker_DebugSpawn59CreateTempObject(TypeName[Clucker], 0, object.xpos, object.ypos)60object[tempObjectPos].ypos += 0x20000061object[tempObjectPos].startPos.y = object[tempObjectPos].ypos62object[tempObjectPos].direction = object.direction6364arrayPos0 = object[tempObjectPos].entityPos65CallFunction(Clucker_Setup)66end function676869// ========================70// Events71// ========================7273event ObjectUpdate74switch object.state75case CLUCKER_HIDDEN76foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)77BoxCollisionTest(C_TOUCH, object.entityPos, -128, -256, 128, 32, currentPlayer, -1, -1, 1, 1)78if checkResult == true79object.timer = 1680if player[currentPlayer].xpos > object.xpos81object.direction = FLIP_X82object.cannonOffset.x = -0x8000083else84object.direction = FLIP_NONE85object.cannonOffset.x = 0x8000086end if87object.priority = PRIORITY_ACTIVE88object.state = CLUCKER_APPEAR89end if90next91break9293case CLUCKER_APPEAR94object.ypos -= 0x200009596object.timer--97if object.timer == 098object.timer = 899object.state = CLUCKER_ADJUSTCANNON100end if101break102103case CLUCKER_ADJUSTCANNON104if object.direction == FLIP_NONE105object.cannonOffset.x -= 0x10000106else107object.cannonOffset.x += 0x10000108end if109110object.timer--111if object.timer == 0112object.timer = 14113object.state = CLUCKER_ATTACKING114end if115break116117case CLUCKER_ATTACKING118switch object.timer119case 4120if object.direction == FLIP_NONE121object.cannonOffset.x += 0x20000122else123object.cannonOffset.x -= 0x20000124end if125break126127case 0128PlaySfx(SfxName[Octus Shot], false)129temp0 = object.xpos130temp1 = object.ypos131temp1 += 0xB0000132133if object.direction == FLIP_NONE134object.cannonOffset.x -= 0x20000135temp0 -= 0x130000136CreateTempObject(TypeName[Clucker Shot], 0, temp0, temp1)137object[tempObjectPos].xvel = -0x20000138else139object.cannonOffset.x += 0x20000140temp0 += 0x130000141CreateTempObject(TypeName[Clucker Shot], 0, temp0, temp1)142object[tempObjectPos].xvel = 0x20000143end if144object[tempObjectPos].direction = object.direction145146object.timer = 68147break148149end switch150151object.timer--152break153154end switch155156temp0 = object.ypos157object.ypos = object.startPos.y158foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)159BoxCollisionTest(C_SOLID, object.entityPos, -16, -8, 16, 8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)160next161162object.ypos = temp0163foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)164BoxCollisionTest(C_TOUCH, object.entityPos, -14, -16, 14, 16, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)165if checkResult == true166CallFunction(Player_BadnikBreak)167end if168next169170if object.outOfBounds == true171temp1 = object.ypos172object.ypos = object.startPos.y173if object.outOfBounds == true174arrayPos0 = object.entityPos175CallFunction(Clucker_Setup)176else177object.ypos = temp1178end if179end if180end event181182183event ObjectDraw184if object.state >= CLUCKER_ADJUSTCANNON185temp0 = object.xpos186temp0 += object.cannonOffset.x187DrawSpriteFX(1, FX_FLIP, temp0, object.ypos)188end if189190temp0 = object.startPos.y191temp0 -= object.ypos192temp0 >>= 16193EditFrame(0, -16, -16, 32, temp0, Clucker_sheetX, Clucker_sheetY)194DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)195end event196197198event ObjectStartup199CheckCurrentStageFolder("Zone11")200if checkResult == true201LoadSpriteSheet("SCZ/Objects.gif")202SpriteFrame(-16, -16, 32, 32, 9, 223) // Clucker - #0203SpriteFrame(-24, 7, 8, 7, 1, 246) // Cannon - #1204Clucker_sheetX = 9205Clucker_sheetY = 223206else207LoadSpriteSheet("MBZ/Objects.gif")208SpriteFrame(-16, -16, 32, 32, 845, 256) // Clucker - #0209SpriteFrame(-24, 7, 8, 7, 837, 279) // Cannon - #1210Clucker_sheetX = 845211Clucker_sheetY = 256212end if213214foreach (TypeName[Clucker], arrayPos0, ALL_ENTITIES)215object[arrayPos0].ypos += 0x200000216object[arrayPos0].startPos.y = object[arrayPos0].ypos217CallFunction(Clucker_Setup)218next219220SetTableValue(TypeName[Clucker], DebugMode_ObjCount, DebugMode_TypesTable)221SetTableValue(Clucker_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)222SetTableValue(Clucker_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)223DebugMode_ObjCount++224end event225226227// ========================228// Editor Events229// ========================230231event RSDKDraw232DrawSprite(1)233DrawSprite(0)234end event235236237event RSDKLoad238CheckCurrentStageFolder("Zone11")239if checkResult == true240LoadSpriteSheet("SCZ/Objects.gif")241SpriteFrame(-16, -16, 32, 32, 9, 223) // Clucker - #0242SpriteFrame(-24, 7, 8, 7, 1, 246) // Cannon - #1243else244LoadSpriteSheet("MBZ/Objects.gif")245SpriteFrame(-16, -16, 32, 32, 845, 256) // Clucker - #0246SpriteFrame(-24, 7, 8, 7, 837, 279) // Cannon - #1247end if248249SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")250end event251252253