Path: blob/master/Sonic 1/Scripts/Enemies/Yadrin.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Yadrin 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.y1415private alias 0 : YADRIN_MOVING16private alias 1 : YADRIN_IDLE1718private alias 0 : YADRIN_ANI_MOVING19private alias 1 : YADRIN_ANI_IDLE2021// Player aliases22private alias object.value40 : player.hitboxLeft23private alias object.value38 : player.hitboxTop24private alias object.value41 : player.hitboxRight25private alias object.value39 : player.hitboxBottom2627// Path ID Aliases28private alias 0 : PATH_A293031// ========================32// Function Declarations33// ========================3435reserve function Yadrin_DebugDraw36reserve function Yadrin_DebugSpawn373839// ========================40// Function Definitions41// ========================4243private function Yadrin_DebugDraw44DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)45end function464748private function Yadrin_DebugSpawn49CreateTempObject(TypeName[Yadrin], 0, object.xpos, object.ypos)5051GetBit(temp0, object.direction, 0)52if temp0 == FLIP_NONE53object[tempObjectPos].direction = FLIP_NONE54object[tempObjectPos].xvel = -0x1000055else56object[tempObjectPos].direction = FLIP_X57object[tempObjectPos].xvel = 0x1000058end if5960object[tempObjectPos].startPos.x = object.xpos61object[tempObjectPos].startPos.y = object.ypos62end function636465// ========================66// Events67// ========================6869event ObjectUpdate70switch object.state71case YADRIN_MOVING72object.priority = PRIORITY_ACTIVE73object.xpos += object.xvel74temp0 = false75ObjectTileGrip(CSIDE_FLOOR, 0, 18, PATH_A)76if checkResult == false77temp0 = true78end if7980ObjectTileCollision(CSIDE_RWALL, -20, 0, PATH_A)81temp0 |= checkResult82ObjectTileCollision(CSIDE_LWALL, 20, 0, PATH_A)83temp0 |= checkResult84if temp0 != false85object.state = YADRIN_IDLE86object.animation = YADRIN_ANI_IDLE87object.frame = 088end if89break9091case YADRIN_IDLE92if object.timer < 5993object.timer++94else95object.timer = 096object.state = YADRIN_MOVING97object.animation = YADRIN_ANI_MOVING98object.direction ^= FLIP_X99FlipSign(object.xvel)100end if101break102103end switch104105if object.outOfBounds == true106temp0 = object.xpos107temp1 = object.ypos108object.xpos = object.startPos.x109object.ypos = object.startPos.y110if object.outOfBounds == true111object.xpos = object.startPos.x112object.ypos = object.startPos.y113114if object.propertyValue == 0115object.direction = FLIP_NONE116object.xvel = -0x10000117else118object.direction = FLIP_X119object.xvel = 0x10000120end if121122object.animation = YADRIN_ANI_MOVING123object.frame = 0124object.priority = PRIORITY_BOUNDS125object.state = YADRIN_MOVING126else127object.xpos = temp0128object.ypos = temp1129end if130end if131132foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)133temp0 = false134BoxCollisionTest(C_TOUCH, object.entityPos, -18, -10, 18, 18, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)135if checkResult == true136CallFunction(Player_BadnikBreak)137end if138139if temp0 == false140if object.direction == FLIP_NONE141BoxCollisionTest(C_TOUCH, object.entityPos, -8, -18, 18, -10, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)142else143BoxCollisionTest(C_TOUCH, object.entityPos, -18, -18, 8, -10, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)144end if145146if checkResult == true147CallFunction(Player_Hit)148end if149end if150next151152if object.animation == YADRIN_ANI_MOVING153object.frame = object.animationTimer154object.frame >>= 3155object.animationTimer++156object.animationTimer &= 63157end if158end event159160161event ObjectDraw162DrawSpriteFX(object.frame, FX_FLIP, object.xpos, object.ypos)163end event164165166event ObjectStartup167CheckCurrentStageFolder("Zone02")168if checkResult == true169LoadSpriteSheet("MZ/Objects.gif")170SpriteFrame(-20, -20, 40, 38, 1, 2)171SpriteFrame(-20, -20, 40, 38, 1, 42)172SpriteFrame(-20, -20, 40, 39, 42, 1)173SpriteFrame(-20, -20, 40, 39, 42, 41)174SpriteFrame(-20, -20, 40, 38, 1, 2)175SpriteFrame(-20, -20, 40, 38, 1, 42)176SpriteFrame(-15, -20, 35, 39, 83, 1)177SpriteFrame(-15, -20, 35, 39, 83, 41)178end if179180CheckCurrentStageFolder("Zone03")181if checkResult == true182LoadSpriteSheet("SYZ/Objects.gif")183SpriteFrame(-20, -20, 40, 38, 1, 2)184SpriteFrame(-20, -20, 40, 38, 1, 42)185SpriteFrame(-20, -20, 40, 39, 42, 1)186SpriteFrame(-20, -20, 40, 39, 42, 41)187SpriteFrame(-20, -20, 40, 38, 1, 2)188SpriteFrame(-20, -20, 40, 38, 1, 42)189SpriteFrame(-15, -20, 35, 39, 83, 1)190SpriteFrame(-15, -20, 35, 39, 83, 41)191end if192193CheckCurrentStageFolder("Zone07")194if checkResult == true195LoadSpriteSheet("MBZ/Objects.gif")196SpriteFrame(-20, -20, 40, 38, 138, 2)197SpriteFrame(-20, -20, 40, 38, 138, 42)198SpriteFrame(-20, -20, 40, 39, 179, 1)199SpriteFrame(-20, -20, 40, 39, 179, 41)200SpriteFrame(-20, -20, 40, 38, 138, 2)201SpriteFrame(-20, -20, 40, 38, 138, 42)202SpriteFrame(-15, -20, 35, 39, 220, 1)203SpriteFrame(-15, -20, 35, 39, 220, 41)204end if205206foreach (TypeName[Yadrin], arrayPos0, ALL_ENTITIES)207object[arrayPos0].startPos.x = object[arrayPos0].xpos208object[arrayPos0].startPos.y = object[arrayPos0].ypos209if object[arrayPos0].propertyValue == 0210object[arrayPos0].direction = FLIP_NONE211object[arrayPos0].xvel = -0x10000212else213object[arrayPos0].direction = FLIP_X214object[arrayPos0].xvel = 0x10000215end if216next217218SetTableValue(TypeName[Yadrin], DebugMode_ObjCount, DebugMode_TypesTable)219SetTableValue(Yadrin_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)220SetTableValue(Yadrin_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)221DebugMode_ObjCount++222end event223224225// ========================226// Editor Events227// ========================228229event RSDKEdit230if editor.returnVariable == true231switch editor.variableID232case EDIT_VAR_PROPVAL // property value233checkResult = object.propertyValue234checkResult &= 1235break236237case 0 // direction238checkResult = object.propertyValue239checkResult &= 1240break241242end switch243else244switch editor.variableID245case EDIT_VAR_PROPVAL // property value246object.propertyValue = editor.variableValue247object.propertyValue &= 1248break249250case 0 // direction251object.propertyValue = editor.variableValue252object.propertyValue &= 1253break254255end switch256end if257end event258259260event RSDKDraw261GetBit(object.direction, object.propertyValue, 0)262DrawSpriteFX(0, FX_FLIP, object.xpos, object.ypos)263end event264265266event RSDKLoad267// Make sure we have a fall-back, in case the current folder isn't actually a valid one268temp0 = false269270CheckCurrentStageFolder("Zone03")271temp0 |= checkResult272if checkResult == true273LoadSpriteSheet("SYZ/Objects.gif")274SpriteFrame(-20, -20, 40, 38, 1, 2)275end if276277CheckCurrentStageFolder("Zone07")278temp0 |= checkResult279if checkResult == true280LoadSpriteSheet("MBZ/Objects.gif")281SpriteFrame(-20, -20, 40, 38, 138, 2)282end if283284if temp0 == false285// We use MZ's sprites as the fallback, "Zone02" (MZ's folder) will come here too286LoadSpriteSheet("MZ/Objects.gif")287SpriteFrame(-20, -20, 40, 38, 1, 2)288end if289290AddEditorVariable("direction")291SetActiveVariable("direction")292AddEnumVariable("Left", 0)293AddEnumVariable("Right", 1)294end event295296297