Path: blob/master/Sonic 2/Scripts/Enemies/SpinyFloor.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Spiny Floor 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.dirChangeTimer14private alias object.value3 : object.shootTimer15private alias object.value4 : object.shotVelocity16private alias object.value5 : object.targetDistance1718private alias 0 : SPINYFLOOR_MOVING19private alias 1 : SPINYFLOOR_IDLE2021// Player Aliases22private alias object.xpos : player.xpos23private alias object.value40 : player.hitboxLeft24private alias object.value38 : player.hitboxTop25private alias object.value41 : player.hitboxRight26private alias object.value39 : player.hitboxBottom272829// ========================30// Function Declarations31// ========================3233reserve function SpinyFloor_Setup34reserve function SpinyFloor_DebugDraw35reserve function SpinyFloor_DebugSpawn363738// ========================39// Function Definitions40// ========================4142private function SpinyFloor_Setup43object[arrayPos0].xpos = object[arrayPos0].startPos.x44object[arrayPos0].ypos = object[arrayPos0].startPos.y45object[arrayPos0].dirChangeTimer = 25646object[arrayPos0].shootTimer = 12847object[arrayPos0].frame = 048object[arrayPos0].animationTimer = 049object[arrayPos0].state = SPINYFLOOR_MOVING50if object[arrayPos0].propertyValue == 051object[arrayPos0].direction = FLIP_NONE52object[arrayPos0].xvel = -0x400053else54object[arrayPos0].direction = FLIP_X55object[arrayPos0].xvel = 0x400056end if57object[arrayPos0].priority = PRIORITY_BOUNDS58end function596061private function SpinyFloor_DebugDraw62DrawSprite(0)63end function646566private function SpinyFloor_DebugSpawn67CreateTempObject(TypeName[Spiny Floor], temp0, object.xpos, object.ypos)68object[tempObjectPos].startPos.x = object.xpos69object[tempObjectPos].startPos.y = object.ypos70arrayPos0 = object[tempObjectPos].entityPos71object[tempObjectPos].propertyValue = object.direction72CallFunction(SpinyFloor_Setup)73end function747576// ========================77// Events78// ========================7980event ObjectUpdate81object.priority = PRIORITY_ACTIVE82switch object.state83case SPINYFLOOR_MOVING84object.dirChangeTimer--85if object.dirChangeTimer <= 086object.dirChangeTimer = 25687object.shootTimer = 12888FlipSign(object.xvel)89object.direction ^= FLIP_X90end if9192object.xpos += object.xvel9394object.animationTimer++95if object.animationTimer == 1096object.animationTimer = 097object.frame ^= 198end if99100if object.shootTimer == 0101object.targetDistance = 0x7FFFFFFF102foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)103BoxCollisionTest(C_TOUCH, object.entityPos, -96, -256, 96, 256, currentPlayer, 1, 1, 1, 1)104if checkResult == true105object.shootTimer = 40106object.frame = 2107object.state = SPINYFLOOR_IDLE108109temp0 = object.xpos110temp0 -= player[currentPlayer].xpos111Abs(temp0)112if temp0 < object.targetDistance113object.targetDistance = temp0114if player[currentPlayer].xpos > object.xpos115object.shotVelocity = 0x10000116else117object.shotVelocity = -0x10000118end if119end if120end if121next122else123object.shootTimer--124end if125break126127case SPINYFLOOR_IDLE128object.shootTimer--129if object.shootTimer == 20130CreateTempObject(TypeName[Spiny Shot], 0, object.xpos, object.ypos)131object[tempObjectPos].xvel = object.shotVelocity132object[tempObjectPos].yvel = -0x30000133object[tempObjectPos].drawOrder = 2134end if135136if object.shootTimer < 0137object.shootTimer = 64138object.frame = 0139object.state = SPINYFLOOR_MOVING140end if141break142143end switch144145if object.outOfBounds == true146temp0 = object.xpos147temp1 = object.ypos148object.xpos = object.startPos.x149object.ypos = object.startPos.y150if object.outOfBounds == true151arrayPos0 = object.entityPos152CallFunction(SpinyFloor_Setup)153else154object.xpos = temp0155object.ypos = temp1156end if157end if158159foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)160BoxCollisionTest(C_TOUCH, object.entityPos, -8, -8, 8, 8, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)161if checkResult == true162CallFunction(Player_BadnikBreak)163end if164next165end event166167168event ObjectDraw169DrawSprite(object.frame)170end event171172173event ObjectStartup174LoadSpriteSheet("CPZ/Objects.gif") // this was probably meant to be removed when MBZ became a thing, makes no real difference whether its here or not though175176CheckCurrentStageFolder("Zone02")177if checkResult == true178LoadSpriteSheet("CPZ/Objects.gif")179SpriteFrame(-24, -11, 48, 23, 1, 1)180SpriteFrame(-22, -11, 44, 23, 50, 1)181SpriteFrame(-24, -11, 48, 23, 95, 1)182else183LoadSpriteSheet("MBZ/Objects.gif")184SpriteFrame(-24, -11, 48, 23, 131, 256)185SpriteFrame(-22, -11, 44, 23, 180, 256)186SpriteFrame(-24, -11, 48, 23, 225, 256)187end if188189foreach (TypeName[Spiny Floor], arrayPos0, ALL_ENTITIES)190object[arrayPos0].startPos.x = object[arrayPos0].xpos191object[arrayPos0].startPos.y = object[arrayPos0].ypos192CallFunction(SpinyFloor_Setup)193next194195SetTableValue(TypeName[Spiny Floor], DebugMode_ObjCount, DebugMode_TypesTable)196SetTableValue(SpinyFloor_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)197SetTableValue(SpinyFloor_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)198DebugMode_ObjCount++199end event200201202// ========================203// Editor Events204// ========================205206event RSDKEdit207if editor.returnVariable == true208switch editor.variableID209case EDIT_VAR_PROPVAL // property value210checkResult = object.propertyValue211checkResult &= 1212break213214case 0 // direction215GetBit(checkResult, object.propertyValue, 0)216break217218end switch219else220switch editor.variableID221case EDIT_VAR_PROPVAL // property value222object.propertyValue = editor.variableValue223object.propertyValue &= 1224break225226case 0 // direction227CheckNotEqual(editor.variableValue, 0)228SetBit(object.propertyValue, 0, checkResult)229break230231end switch232end if233end event234235236event RSDKDraw237DrawSprite(0)238end event239240241event RSDKLoad242CheckCurrentStageFolder("Zone02")243if checkResult == true244LoadSpriteSheet("CPZ/Objects.gif")245SpriteFrame(-24, -11, 48, 23, 1, 1)246else247LoadSpriteSheet("MBZ/Objects.gif")248SpriteFrame(-24, -11, 48, 23, 131, 256)249end if250251AddEditorVariable("direction")252SetActiveVariable("direction")253AddEnumVariable("Left", 0)254AddEnumVariable("Right", 1)255end event256257258