Path: blob/master/Sonic 1/Scripts/Special/Bumper.txt
1482 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.timer1213private alias 0 : BUMPER_IDLE14private alias 1 : BUMPER_BUMPED1516// Player aliases17private alias object.xpos : player.xpos18private alias object.ypos : player.ypos19private alias object.speed : player.speed20private alias object.gravity : player.gravity21private alias object.value1 : player.timer22private alias object.value12 : player.worldVelocity.x23private alias object.value13 : player.worldVelocity.y242526// ========================27// Function Declarations28// ========================2930reserve function Bumper_DebugDraw31reserve function Bumper_DebugSpawn323334// ========================35// Function Definitions36// ========================3738private function Bumper_DebugDraw39DrawSprite(0)40end function414243private function Bumper_DebugSpawn44temp5 = TypeName[Bumper]45temp4 = 046CallFunction(DebugMode_PlaceBlock)47object[arrayPos0].drawOrder = 448end function495051// ========================52// Events53// ========================5455event ObjectUpdate56// Animate the object if needed57if object.state > BUMPER_IDLE58object.frame = object.timer59object.frame /= 560object.frame++61object.timer++62if object.timer > 2263object.timer = 064object.state = BUMPER_IDLE65object.frame = 066end if67end if6869if object.outOfBounds == true70object.priority = PRIORITY_BOUNDS71end if7273foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)74CallFunction(SpecialSetup_PlayerBlockCol)75BoxCollisionTest(C_TOUCH, object.entityPos, -14, -14, 14, 14, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)76if checkResult == true77if object.state == BUMPER_IDLE78PlaySfx(SfxName[Bumper], false)79end if8081if object.timer > 582PlaySfx(SfxName[Bumper], false)83end if8485object.state = BUMPER_BUMPED86object.priority = PRIORITY_ACTIVE8788// Find where to send the player89temp0 = player[currentPlayer].xpos90temp0 -= object.xpos91temp1 = player[currentPlayer].ypos92temp1 -= object.ypos93ATan2(temp2, temp0, temp1)94Cos256(temp0, temp2)95Sin256(temp1, temp2)96temp0 *= 0x70097temp1 *= 0x7009899// Bounce the player back100player[currentPlayer].timer = 0101player[currentPlayer].worldVelocity.x = temp0102player[currentPlayer].worldVelocity.y = temp1103player[currentPlayer].speed = object.xvel104player[currentPlayer].gravity = GRAVITY_AIR105end if106next107end event108109110event ObjectDraw111CallFunction(SpecialSetup_GetBlockPos)112DrawSpriteXY(object.frame, temp0, temp1)113end event114115116event ObjectStartup117LoadSpriteSheet("Special/Objects.gif")118119// Bumper frames120SpriteFrame(-14, -14, 28, 28, 1, 401)121SpriteFrame(-12, -12, 24, 24, 1, 430)122SpriteFrame(-16, -16, 32, 32, 30, 401)123SpriteFrame(-12, -12, 24, 24, 1, 430)124SpriteFrame(-16, -16, 32, 32, 30, 401)125SpriteFrame(-16, -16, 32, 32, 30, 401)126127// Add this object to the stage's debug mode list128SetTableValue(TypeName[Bumper], DebugMode_ObjCount, DebugMode_TypeTable)129SetTableValue(Bumper_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)130SetTableValue(Bumper_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)131DebugMode_ObjCount++132end event133134135// ========================136// Editor Events137// ========================138139event RSDKDraw140DrawSprite(0)141end event142143144event RSDKLoad145LoadSpriteSheet("Special/Objects.gif")146SpriteFrame(-14, -14, 28, 28, 1, 401)147148SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")149end event150151152