Path: blob/master/Sonic 2/Scripts/Enemies/Grounder2.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Grounder2 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.value3 : object.targetPlayer15private alias object.value4 : object.targetPlayerDistance1617// States18private alias 0 : GROUNDER2_HIDDEN19private alias 1 : GROUNDER2_APPEAR20private alias 2 : GROUNDER2_MOVING21private alias 3 : GROUNDER2_TURNING2223// Player Aliases24private alias object.xpos : player.xpos25private alias object.value40 : player.hitboxLeft26private alias object.value38 : player.hitboxTop27private alias object.value41 : player.hitboxRight28private alias object.value39 : player.hitboxBottom2930private alias object.value17 : debugMode.currentSelection3132// Path ID Aliases33private alias 0 : PATH_A343536// ========================37// Function Declarations38// ========================3940reserve function Grounder2_DebugDraw41reserve function Grounder2_DebugSpawn4243// ========================44// Static Values45// ========================4647private value Grounder2_startDebugID = 04849private function Grounder2_DebugDraw50DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)51end function525354private function Grounder2_DebugSpawn55temp0 = debugMode[0].currentSelection56temp0 -= Grounder2_startDebugID5758CreateTempObject(TypeName[Grounder2], temp0, object.xpos, object.ypos)59object[tempObjectPos].startPos.x = object.xpos60object[tempObjectPos].startPos.y = object.ypos61end function626364// ========================65// Events66// ========================6768event ObjectUpdate69switch object.state70case GROUNDER2_HIDDEN71object.priority = PRIORITY_ACTIVE72if object.propertyValue == 173ObjectTileGrip(CSIDE_FLOOR, 0, 20, PATH_A)74object.state = GROUNDER2_APPEAR75object.timer = 1776end if7778foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)79BoxCollisionTest(C_TOUCH, object.entityPos, -96, -256, 96, 256, currentPlayer, -1, -1, 1, 1)80if checkResult == true81CreateTempObject(TypeName[Brick], 1, object.xpos, object.ypos)82object[tempObjectPos].xvel = -0x1000083object[tempObjectPos].yvel = -0x400008485CreateTempObject(TypeName[Brick], 3, object.xpos, object.ypos)86object[tempObjectPos].xvel = 0x4000087object[tempObjectPos].yvel = -0x300008889CreateTempObject(TypeName[Brick], 1, object.xpos, object.ypos)90object[tempObjectPos].xvel = 0x2000091object[tempObjectPos].yvel = 09293CreateTempObject(TypeName[Brick], 2, object.xpos, object.ypos)94object[tempObjectPos].xvel = -0x3000095object[tempObjectPos].yvel = -0x100009697CreateTempObject(TypeName[Brick], 1, object.xpos, object.ypos)98object[tempObjectPos].xvel = -0x3000099object[tempObjectPos].yvel = -0x30000100101CreateTempObject(TypeName[Brick], 0, object.xpos, object.ypos)102object[tempObjectPos].ypos -= 0x140000103object[tempObjectPos].xvel = 0x10000104object[tempObjectPos].yvel = -0x20000105106CreateTempObject(TypeName[Brick], 0, object.xpos, object.ypos)107object[tempObjectPos].xpos += 0x100000108object[tempObjectPos].ypos -= 0x40000109object[tempObjectPos].xvel = 0x10000110object[tempObjectPos].yvel = -0x10000111112CreateTempObject(TypeName[Brick], 0, object.xpos, object.ypos)113object[tempObjectPos].ypos += 0xC0000114object[tempObjectPos].xvel = -0x10000115object[tempObjectPos].yvel = -0x20000116117CreateTempObject(TypeName[Brick], 0, object.xpos, object.ypos)118object[tempObjectPos].xpos -= 0x100000119object[tempObjectPos].ypos -= 0x40000120object[tempObjectPos].xvel = -0x10000121object[tempObjectPos].yvel = -0x10000122123ObjectTileGrip(CSIDE_FLOOR, 0, 20, PATH_A)124object.state = GROUNDER2_APPEAR125end if126next127break128129case GROUNDER2_APPEAR130object.timer++131if object.timer == 8132object.frame = 1133end if134135if object.timer == 18136object.timer = 0137object.frame = 2138object.state = GROUNDER2_MOVING139140object.targetPlayerDistance = 0x7FFFFFFF141object.targetPlayer = 0142foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)143temp0 = player[currentPlayer].xpos144temp0 -= object.xpos145if temp0 < 0146temp1 = FLIP_NONE147FlipSign(temp0)148else149temp1 = FLIP_X150end if151152if temp0 < object.targetPlayerDistance153object.targetPlayerDistance = temp0154object.targetPlayer = currentPlayer155object.direction = temp1156end if157next158159if object.direction == FLIP_NONE160object.xvel = -0x10000161else162object.xvel = 0x10000163end if164end if165break166167case GROUNDER2_MOVING168object.xpos += object.xvel169170temp0 = object.ypos171temp1 = object.ypos172ObjectTileGrip(CSIDE_FLOOR, 0, 20, PATH_A)173temp2 = checkResult174temp1 -= object.ypos175176if temp1 <= -0xC0000177object.ypos = temp0178temp2 = 0179end if180181if temp1 > 0x10000182object.ypos = temp0183temp2 = 0184end if185186if temp2 == 0187object.timer = 60188object.state = GROUNDER2_TURNING189end if190191object.animationTimer++192if object.animationTimer == 12193object.animationTimer = 0194end if195196object.frame = object.animationTimer197object.frame >>= 2198object.frame += 2199break200201case GROUNDER2_TURNING202object.timer--203if object.timer == 0204object.direction ^= FLIP_X205FlipSign(object.xvel)206object.state = GROUNDER2_MOVING207end if208break209210end switch211212if object.outOfBounds == true213temp0 = object.xpos214temp1 = object.ypos215object.xpos = object.startPos.x216object.ypos = object.startPos.y217if object.outOfBounds == true218object.state = GROUNDER2_HIDDEN219object.timer = 0220object.animationTimer = 0221object.frame = 0222object.priority = PRIORITY_BOUNDS223else224object.xpos = temp0225object.ypos = temp1226end if227end if228229foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)230BoxCollisionTest(C_TOUCH, object.entityPos, -12, -20, 12, 20, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)231if checkResult == true232CallFunction(Player_BadnikBreak)233end if234next235end event236237238event ObjectDraw239if object.state == GROUNDER2_HIDDEN240temp0 = object.xpos241temp1 = object.ypos242243temp1 -= 0x140000244DrawSpriteFX(5, FX_FLIP, temp0, temp1)245246temp1 += 0x100000247temp0 -= 0x100000248DrawSpriteFX(5, FX_FLIP, temp0, temp1)249250temp0 += 0x200000251DrawSpriteFX(5, FX_FLIP, temp0, temp1)252253temp1 += 0x100000254temp0 -= 0x100000255DrawSpriteFX(5, FX_FLIP, temp0, temp1)256else257DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)258end if259end event260261262event ObjectStartup263CheckCurrentStageFolder("Zone03")264if checkResult == true265LoadSpriteSheet("ARZ/Objects4.gif")266SpriteFrame(-14, -12, 28, 32, 32, 41)267SpriteFrame(-16, -16, 32, 36, 0, 82)268SpriteFrame(-16, -20, 32, 40, 0, 0)269SpriteFrame(-16, -20, 32, 40, 32, 0)270SpriteFrame(-16, -20, 32, 40, 0, 41)271SpriteFrame(-16, -8, 32, 16, 32, 82)272else273LoadSpriteSheet("MBZ/Objects.gif")274SpriteFrame(-14, -12, 28, 32, 374, 289)275SpriteFrame(-16, -16, 32, 36, 403, 293)276SpriteFrame(-16, -20, 32, 40, 275, 297)277SpriteFrame(-16, -20, 32, 40, 308, 297)278SpriteFrame(-16, -20, 32, 40, 341, 297)279SpriteFrame(-16, -8, 32, 16, 436, 306)280end if281282foreach (TypeName[Grounder2], arrayPos0, ALL_ENTITIES)283object[arrayPos0].startPos.x = object[arrayPos0].xpos284object[arrayPos0].startPos.y = object[arrayPos0].ypos285next286287temp0 = 0288Grounder2_startDebugID = DebugMode_ObjCount289Grounder2_startDebugID--290while temp0 < 2291SetTableValue(TypeName[Grounder2], DebugMode_ObjCount, DebugMode_TypesTable)292SetTableValue(Grounder2_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)293SetTableValue(Grounder2_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)294DebugMode_ObjCount++295temp0++296loop297end event298299300// ========================301// Editor Events302// ========================303304event RSDKEdit305if editor.returnVariable == true306switch editor.variableID307case EDIT_VAR_PROPVAL // property value308checkResult = object.propertyValue309checkResult &= 1310break311312case 0 // type313GetBit(checkResult, object.propertyValue, 0)314break315316end switch317else318switch editor.variableID319case EDIT_VAR_PROPVAL // property value320object.propertyValue = editor.variableValue321object.propertyValue &= 1322break323324case 0 // type325CheckNotEqual(editor.variableValue, 0)326SetBit(object.propertyValue, 0, checkResult)327break328329end switch330end if331end event332333334event RSDKDraw335object.frame = object.propertyValue336object.frame <<= 1337338DrawSprite(object.frame)339end event340341342event RSDKLoad343CheckCurrentStageFolder("Zone03")344if checkResult == true345LoadSpriteSheet("ARZ/Objects4.gif")346SpriteFrame(-14, -12, 28, 32, 32, 41)347SpriteFrame(-16, -16, 32, 36, 0, 82)348SpriteFrame(-16, -20, 32, 40, 0, 0)349SpriteFrame(-16, -20, 32, 40, 32, 0)350SpriteFrame(-16, -20, 32, 40, 0, 41)351SpriteFrame(-16, -8, 32, 16, 32, 82)352else353LoadSpriteSheet("MBZ/Objects.gif")354SpriteFrame(-14, -12, 28, 32, 374, 289)355SpriteFrame(-16, -16, 32, 36, 403, 293)356SpriteFrame(-16, -20, 32, 40, 275, 297)357SpriteFrame(-16, -20, 32, 40, 308, 297)358SpriteFrame(-16, -20, 32, 40, 341, 297)359SpriteFrame(-16, -8, 32, 16, 436, 306)360end if361362AddEditorVariable("type")363SetActiveVariable("type")364AddEnumVariable("Start Hidden", 0)365AddEnumVariable("Not Hidden", 1)366end event367368369