Path: blob/master/Sonic 1/Scripts/SBZ/JunctionWheel.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: Junction Wheel Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011// value0 is unused12private alias object.value1 : object.spinDir13private alias object.value2 : object.directionChanged1415// Player Aliases16private alias object.type : player.type17private alias object.state : player.state18private alias object.xpos : player.xpos19private alias object.ypos : player.ypos20private alias object.xvel : player.xvel21private alias object.yvel : player.yvel22private alias object.speed : player.speed23private alias object.gravity : player.gravity24private alias object.animationSpeed : player.animationSpeed25private alias object.animation : player.animation26private alias object.tileCollisions : player.tileCollisions2728// Button Aliases29private alias object.value0 : PushButton.stood303132// ========================33// Function Declarations34// ========================3536reserve function JunctionWheel_DebugDraw37reserve function JunctionWheel_DebugSpawn38reserve function JunctionWheel_HandleWheelMove394041// ========================42// Tables43// ========================4445private function JunctionWheel_DebugDraw46DrawSprite(0)47end function484950private function JunctionWheel_DebugSpawn51CreateTempObject(TypeName[Junction Wheel], 0, object.xpos, object.ypos)52end function535455private function JunctionWheel_HandleWheelMove56Cos(player[currentPlayer].xpos, object.rotation)57player[currentPlayer].xpos *= player[currentPlayer].speed58player[currentPlayer].xpos += object.xpos5960Sin(player[currentPlayer].ypos, object.rotation)61player[currentPlayer].ypos *= player[currentPlayer].speed62player[currentPlayer].ypos += object.ypos6364if player[currentPlayer].speed < -0x100065player[currentPlayer].speed += 51266end if67end function686970// ========================71// Events72// ========================7374event ObjectUpdate75if PushButton[-1].stood == true76if object.directionChanged == false77object.directionChanged = true78object.spinDir ^= 179end if80else81object.directionChanged = false82end if8384if object.spinDir == 085object.rotation -= 486else87object.rotation += 488end if89object.rotation &= 0x1FF9091temp0 = object.rotation92temp0 += 0x3093temp0 &= 0x1FF94temp0 >>= 69596foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)97if player[currentPlayer].state != Player_State_Static98switch temp099case 1100BoxCollisionTest(C_TOUCH, object.entityPos, -40, -40, -16, -8, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)101if checkResult == true102PlaySfx(SfxName[Rolling], false)103player[currentPlayer].state = Player_State_Static104player[currentPlayer].animation = ANI_JUMPING105player[currentPlayer].animationSpeed = 0xF0106player[currentPlayer].tileCollisions = false107player[currentPlayer].gravity = GRAVITY_AIR108player[currentPlayer].speed = -0x1C00109end if110111BoxCollisionTest(C_SOLID, object.entityPos, 16, -56, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)112if player[currentPlayer].yvel < 0113BoxCollisionTest(C_SOLID, object.entityPos, -40, 32, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)114end if115break116117case 0118case 2119case 3120case 4121case 6122case 7123BoxCollisionTest(C_SOLID, object.entityPos, -40, -56, -16, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)124BoxCollisionTest(C_SOLID, object.entityPos, 16, -56, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)125if player[currentPlayer].yvel < 0126BoxCollisionTest(C_SOLID, object.entityPos, -40, 32, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)127end if128break129130case 5131if player[currentPlayer].xvel < 0132BoxCollisionTest(C_TOUCH, object.entityPos, 16, 8, 38, 40, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)133if checkResult == true134PlaySfx(SfxName[Rolling], false)135player[currentPlayer].state = Player_State_Static136player[currentPlayer].animation = ANI_JUMPING137player[currentPlayer].animationSpeed = 0xF0138player[currentPlayer].tileCollisions = false139player[currentPlayer].gravity = GRAVITY_AIR140player[currentPlayer].speed = -0x1800141end if142end if143144BoxCollisionTest(C_SOLID, object.entityPos, -40, -56, -16, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)145if player[currentPlayer].yvel < 0146BoxCollisionTest(C_SOLID, object.entityPos, -40, 32, 40, 56, currentPlayer, C_BOX, C_BOX, C_BOX, C_BOX)147end if148break149end switch150else151if player[currentPlayer].type != TypeName[Debug Mode]152CallFunction(JunctionWheel_HandleWheelMove)153if player[currentPlayer].speed == -0x1000154if object.rotation == 0x180155#platform: USE_STANDALONE156player[currentPlayer].state = Player_State_Air157#endplatform158#platform: USE_ORIGINS159player[currentPlayer].state = Player_State_Air_NoDropDash160#endplatform161player[currentPlayer].animation = ANI_JUMPING162player[currentPlayer].tileCollisions = true163player[currentPlayer].speed = 0164player[currentPlayer].xvel = 0165player[currentPlayer].yvel = 0x80000166player[currentPlayer].gravity = GRAVITY_AIR167PlaySfx(SfxName[Release], false)168end if169170if object.spinDir == 1171if object.rotation == 0x11C172#platform: USE_STANDALONE173player[currentPlayer].state = Player_State_Air174#endplatform175#platform: USE_ORIGINS176player[currentPlayer].state = Player_State_Air_NoDropDash177#endplatform178player[currentPlayer].animation = ANI_JUMPING179player[currentPlayer].tileCollisions = true180player[currentPlayer].speed = 0x80000181player[currentPlayer].xvel = 0x80000182player[currentPlayer].yvel = 0x40000183player[currentPlayer].gravity = GRAVITY_AIR184PlaySfx(SfxName[Release], false)185end if186end if187end if188end if189end if190next191end event192193194event ObjectDraw195DrawSpriteFX(0, FX_ROTATE, object.xpos, object.ypos)196DrawSprite(1)197end event198199200event ObjectStartup201LoadSpriteSheet("SBZ/Objects.gif")202SpriteFrame(-56, -24, 48, 48, 1, 261)203SpriteFrame(-56, -56, 112, 112, 399, 284)204205SetTableValue(TypeName[Junction Wheel], DebugMode_ObjCount, DebugMode_TypesTable)206SetTableValue(JunctionWheel_DebugDraw, DebugMode_ObjCount, DebugMode_DrawTable)207SetTableValue(JunctionWheel_DebugSpawn, DebugMode_ObjCount, DebugMode_SpawnTable)208DebugMode_ObjCount++209end event210211212// ========================213// Editor Events214// ========================215216event RSDKDraw217DrawSprite(0)218end event219220221event RSDKLoad222LoadSpriteSheet("SBZ/Objects.gif")223SpriteFrame(-56, -24, 48, 48, 1, 261)224225SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")226end event227228229