Path: blob/master/Sonic 1/Scripts/SYZ/Bumper.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Bumper 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.bumpCount1314private alias 0 : BUMPER_IDLE15private alias 1 : BUMPER_BUMPED1617// Player Aliases18private alias object.state : player.state19private alias object.xpos : player.xpos20private alias object.ypos : player.ypos21private alias object.xvel : player.xvel22private alias object.yvel : player.yvel23private alias object.speed : player.speed24private alias object.gravity : player.gravity25private alias object.animation : player.animation26private alias object.tileCollisions : player.tileCollisions27private alias object.value1 : player.timer28private alias object.value36 : player.flyCarryTimer29private alias object.value40 : player.hitboxLeft30private alias object.value38 : player.hitboxTop31private alias object.value41 : player.hitboxRight32private alias object.value39 : player.hitboxBottom333435// ========================36// Function Declarations37// ========================3839reserve function Bumper_DebugDraw40reserve function Bumper_DebugSpawn414243// ========================44// Function Definitions45// ========================4647private function Bumper_DebugDraw48DrawSprite(0)49end function505152private function Bumper_DebugSpawn53CreateTempObject(TypeName[Bumper], 0, object.xpos, object.ypos)54object[tempObjectPos].drawOrder = 455end function565758// ========================59// Events60// ========================6162event ObjectUpdate63if object.state > BUMPER_IDLE64object.frame = object.timer65object.frame /= 566object.frame++67object.timer++6869if object.timer > 2270object.timer = 071object.state = BUMPER_IDLE72object.frame = 073end if74end if7576if object.outOfBounds == true77object.bumpCount = 078object.priority = PRIORITY_BOUNDS79end if8081foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)82if player[currentPlayer].animation != ANI_HURT83BoxCollisionTest(C_TOUCH, object.entityPos, -7, -6, 7, 6, currentPlayer, player[currentPlayer].hitboxLeft, player[currentPlayer].hitboxTop, player[currentPlayer].hitboxRight, player[currentPlayer].hitboxBottom)84if checkResult == true85if object.state == BUMPER_IDLE86PlaySfx(SfxName[Bumper], false)87if object.bumpCount < 588CreateTempObject(TypeName[Object Score], 16, object.xpos, object.ypos)89player.score += 1090object.bumpCount++91end if92end if9394if object.timer > 595PlaySfx(SfxName[Bumper], false)96end if9798object.state = BUMPER_BUMPED99object.priority = PRIORITY_ACTIVE100temp0 = player[currentPlayer].xpos101temp0 -= object.xpos102temp1 = player[currentPlayer].ypos103temp1 -= object.ypos104ATan2(temp2, temp0, temp1)105Cos256(temp0, temp2)106Sin256(temp1, temp2)107temp0 *= 0x700108temp1 *= 0x700109if player[currentPlayer].state == Player_State_Carried110player[1].flyCarryTimer = 30111end if112113CheckEqual(player[currentPlayer].animation, ANI_GLIDING)114temp2 = checkResult115CheckEqual(player[currentPlayer].animation, ANI_GLIDING_STOP)116temp2 |= checkResult117CheckEqual(player[currentPlayer].animation, ANI_FLYING)118temp2 |= checkResult119if temp2 == false120#platform: USE_STANDALONE121player[currentPlayer].state = Player_State_Air122#endplatform123#platform: USE_ORIGINS124player[currentPlayer].state = Player_State_Air_NoDropDash125#endplatform126// Bug Details:127// This code wasn't updated in Origins Plus to include ANI_HAMMER_JUMP, so128// Amy will always start walking if she hits a Bumper with her hammer out129if player[currentPlayer].animation != ANI_JUMPING130if player[currentPlayer].animation != ANI_RUNNING131player[currentPlayer].animation = ANI_WALKING132end if133end if134end if135136if player[currentPlayer].animation != ANI_GLIDING137player[currentPlayer].xvel = temp0138player[currentPlayer].speed = player[currentPlayer].xvel139player[currentPlayer].timer = 0140end if141142player[currentPlayer].yvel = temp1143player[currentPlayer].gravity = GRAVITY_AIR144player[currentPlayer].tileCollisions = true145end if146end if147next148end event149150151event ObjectDraw152DrawSprite(object.frame)153end event154155156event ObjectStartup157LoadSpriteSheet("SYZ/Objects.gif")158SpriteFrame(-14, -14, 28, 28, 1, 131)159SpriteFrame(-12, -12, 24, 24, 30, 131)160SpriteFrame(-16, -16, 32, 32, 55, 131)161SpriteFrame(-12, -12, 24, 24, 30, 131)162SpriteFrame(-16, -16, 32, 32, 55, 131)163SpriteFrame(-16, -16, 32, 32, 55, 131) // This last frame isn't really used, it seems164165foreach (TypeName[Bumper], arrayPos0, ALL_ENTITIES)166object[arrayPos0].drawOrder = 4167next168169SetTableValue(TypeName[Bumper], DebugMode_ObjCount, DebugMode_TypesTable)170SetTableValue(Bumper_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)171SetTableValue(Bumper_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)172DebugMode_ObjCount++173end event174175176// ========================177// Editor Events178// ========================179180event RSDKDraw181DrawSprite(0)182end event183184185event RSDKLoad186LoadSpriteSheet("SYZ/Objects.gif")187SpriteFrame(-14, -14, 28, 28, 1, 131)188189SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")190end event191192193