// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: Yellow Spring Object
// Script Author: Christian Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------
//-------Aliases-------//
private alias 16 : TYPE_YELLOWSPRING
// Function declarations
reserve function YellowSpring_DebugDraw
reserve function YellowSpring_DebugSpawn
// Static Values
public value YellowSpring_value27 = 0;
// Tables
function YellowSpring_DebugDraw
temp0 = object[0].value17
temp0 -= YellowSpring_value27
DrawSprite(temp0)
temp0 += 4
DrawSprite(temp0)
end function
function YellowSpring_DebugSpawn
temp0 = object[0].value17
temp0 -= YellowSpring_value27
CreateTempObject(TypeName[Yellow Spring], temp0, [Link], [Link])
end function
event ObjectMain
foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
switch [Link]
case 0
temp0 = object.value1
if object[currentPlayer].gravity == GRAVITY_AIR
temp0 = 1
end if
if object[currentPlayer].collisionMode > CMODE_FLOOR
if object[currentPlayer].yvel < 0
temp0 = 1
end if
end if
if temp0 == 0
BoxCollisionTest(C_BOX, [Link], -14, -8, 14, 8,
currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
BoxCollisionTest(C_TOUCH, [Link], -14, -10, 14, -
6, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
if checkResult == 1
object[currentPlayer].value10 = ANI_WALKING
if object[currentPlayer].animation == ANI_RUNNING
object[currentPlayer].value10 = ANI_RUNNING
end if
if object[currentPlayer].animation == ANI_PEELOUT
object[currentPlayer].value10 = ANI_PEELOUT
end if
object.value0 = 1
object[currentPlayer].state = PlayerObject_HandleAir
object[currentPlayer].tileCollisions = 1
object[currentPlayer].gravity = GRAVITY_AIR
object[currentPlayer].speed =
object[currentPlayer].xvel
object[currentPlayer].yvel = -0xA0000
object[currentPlayer].yvel += object.value2
object[currentPlayer].animation = ANI_BOUNCING
object[currentPlayer].value1 = 0
PlaySfx(SfxName[Spring], 0)
end if
else
if object[currentPlayer].yvel >= 0
BoxCollisionTest(C_PLATFORM, [Link], -14, -
8, 14, 8, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
BoxCollisionTest(C_TOUCH, [Link], -14, -10,
14, -6, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
if checkResult == 1
object[currentPlayer].value10 = ANI_WALKING
if object[currentPlayer].animation ==
ANI_RUNNING
object[currentPlayer].value10 =
ANI_RUNNING
end if
if object[currentPlayer].animation ==
ANI_PEELOUT
object[currentPlayer].value10 =
ANI_PEELOUT
end if
object.value0 = 1
object[currentPlayer].state =
PlayerObject_HandleAir
object[currentPlayer].tileCollisions = 1
object[currentPlayer].gravity = GRAVITY_AIR
object[currentPlayer].speed =
object[currentPlayer].xvel
object[currentPlayer].yvel = -0xA0000
object[currentPlayer].yvel += object.value2
object[currentPlayer].animation = ANI_BOUNCING
object[currentPlayer].value1 = 0
PlaySfx(SfxName[Spring], 0)
end if
end if
end if
break
case 1
BoxCollisionTest(C_BOX, [Link], -8, -14, 8, 14,
currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
if object[currentPlayer].gravity == GRAVITY_GROUND
BoxCollisionTest(C_TOUCH, [Link], 6, -14, 10, 14,
currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
if checkResult == 1
object.value0 = 1
object[currentPlayer].tileCollisions = 1
object[currentPlayer].speed = 0xA0000
object[currentPlayer].collisionMode = CMODE_FLOOR
object[currentPlayer].pushing = 0
object[currentPlayer].direction = FLIP_NONE
object[currentPlayer].controlLock = 15
PlaySfx(SfxName[Spring], 0)
if object[currentPlayer].state !=
PlayerObject_HandleRoll
object[currentPlayer].state =
PlayerObject_HandleGround
object[currentPlayer].animation = ANI_RUNNING
end if
end if
else
if object.value7 == 1
BoxCollisionTest(C_TOUCH, [Link], 6, -4,
11, 4, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
if checkResult == 1
object.value0 = 1
object[currentPlayer].tileCollisions = 1
object[currentPlayer].speed = 0xA0000
object[currentPlayer].yvel = 0
object[currentPlayer].collisionMode =
CMODE_FLOOR
object[currentPlayer].pushing = 0
object[currentPlayer].direction = FLIP_NONE
object[currentPlayer].controlLock = 15
PlaySfx(SfxName[Spring], 0)
if object[currentPlayer].state !=
PlayerObject_RollingJump
object[currentPlayer].animation =
ANI_BOUNCING
if object[currentPlayer].animation !=
ANI_JUMPING
object[currentPlayer].animation =
ANI_RUNNING
end if
[Link] = [Link]
object[currentPlayer].animationSpeed *=
80
object[currentPlayer].animationSpeed /=
0x60000
end if
end if
end if
end if
break
case 2
BoxCollisionTest(C_BOX, [Link], -8, -14, 8, 14,
currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
if object[currentPlayer].gravity == GRAVITY_GROUND
BoxCollisionTest(C_TOUCH, [Link], -10, -14, -6,
14, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
if checkResult == 1
object.value0 = 1
object[currentPlayer].tileCollisions = 1
object[currentPlayer].speed = -0xA0000
object[currentPlayer].collisionMode = CMODE_FLOOR
object[currentPlayer].pushing = 0
object[currentPlayer].direction = FLIP_X
object[currentPlayer].controlLock = 15
PlaySfx(SfxName[Spring], 0)
if object[currentPlayer].state !=
PlayerObject_HandleRoll
object[currentPlayer].state =
PlayerObject_HandleGround
object[currentPlayer].animation = ANI_RUNNING
end if
end if
else
if object.value7 == 1
BoxCollisionTest(C_TOUCH, [Link], -10, -14,
-6, 14, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
if checkResult == 1
object.value0 = 1
object[currentPlayer].tileCollisions = 1
object[currentPlayer].speed = -0xA0000
object[currentPlayer].yvel = 0
object[currentPlayer].collisionMode =
CMODE_FLOOR
object[currentPlayer].pushing = 0
object[currentPlayer].direction = FLIP_X
object[currentPlayer].controlLock = 15
PlaySfx(SfxName[Spring], 0)
if object[currentPlayer].state !=
PlayerObject_RollingJump
object[currentPlayer].animation =
ANI_BOUNCING
if object[currentPlayer].animation !=
ANI_JUMPING
object[currentPlayer].animation =
ANI_RUNNING
end if
[Link] = [Link]
FlipSign(object[currentPlayer].animationSpeed)
object[currentPlayer].animationSpeed *=
80
object[currentPlayer].animationSpeed /=
0x60000
end if
end if
end if
end if
break
case 3
BoxCollisionTest(C_BOX, [Link], -14, -8, 14, 8,
currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
BoxCollisionTest(C_TOUCH, [Link], -14, 6, 14, 10,
currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
if checkResult == 1
object.value0 = 1
if object[currentPlayer].collisionMode == CMODE_ROOF
FlipSign(object[currentPlayer].speed)
FlipSign(object[currentPlayer].xvel)
end if
object[currentPlayer].state = 11
object[currentPlayer].tileCollisions = 1
object[currentPlayer].gravity = GRAVITY_AIR
object[currentPlayer].speed = object[currentPlayer].xvel
object[currentPlayer].yvel = 0xA0000
object[currentPlayer].value1 = 0
PlaySfx(SfxName[Spring], 0)
end if
break
end switch
next
end event
event ObjectDraw
if object.value0 == 0
temp1 = [Link]
DrawSpriteFX(temp1, FX_FLIP, [Link], [Link])
temp1 += 4
DrawSpriteFX(temp1, FX_FLIP, [Link], [Link])
else
switch object.value0
case 2
case 3
temp1 = [Link]
DrawSpriteFX(temp1, FX_FLIP, [Link], [Link])
temp1 += 4
DrawSpriteFX(temp1, FX_FLIP, [Link], [Link])
break
case 1
temp1 = [Link]
temp1 += 8
DrawSpriteFX(temp1, FX_FLIP, [Link], [Link])
break
case 4
case 5
case 6
case 7
case 8
case 9
temp1 = [Link]
temp1 += 12
DrawSpriteFX(temp1, FX_FLIP, [Link], [Link])
temp1 += 4
DrawSpriteFX(temp1, FX_FLIP, [Link], [Link])
break
end switch
object.value0++
if object.value0 >= 10
object.value0 = 0
end if
end if
end event
event ObjectStartup
LoadSpriteSheet("Global/[Link]")
SpriteFrame(-16, 0, 32, 8, 84, 9)
SpriteFrame(-8, -16, 8, 32, 141, 26)
SpriteFrame(0, -16, 8, 32, 141, 59)
SpriteFrame(-16, -8, 32, 8, 150, 101)
SpriteFrame(-16, -8, 32, 8, 84, 18)
SpriteFrame(0, -16, 8, 32, 133, 26)
SpriteFrame(-8, -16, 8, 32, 149, 59)
SpriteFrame(-16, 0, 32, 8, 150, 92)
SpriteFrame(-16, 0, 32, 8, 84, 18)
SpriteFrame(-8, -16, 8, 32, 133, 26)
SpriteFrame(0, -16, 8, 32, 149, 59)
SpriteFrame(-16, -8, 32, 8, 150, 92)
SpriteFrame(-16, -16, 32, 24, 117, 1)
SpriteFrame(-8, -16, 24, 32, 158, 26)
SpriteFrame(-16, -16, 24, 32, 158, 59)
SpriteFrame(-16, -8, 32, 24, 150, 1)
SpriteFrame(-16, -24, 32, 8, 84, 18)
SpriteFrame(16, -16, 8, 32, 133, 26)
SpriteFrame(-24, -16, 8, 32, 149, 59)
SpriteFrame(-16, 16, 32, 8, 150, 92)
foreach (TypeName[Yellow Spring], arrayPos0, ALL_ENTITIES)
if object[arrayPos0].propertyValue == 5
object[arrayPos0].propertyValue = 0
object[arrayPos0].value2 = -0x4000
end if
next
temp0 = 0
YellowSpring_value27 = DebugMode_ObjCount
while temp0 < 4
SetTableValue(TypeName[Yellow Spring], DebugMode_ObjCount,
DebugMode_TypesTable)
SetTableValue(YellowSpring_DebugDraw, DebugMode_ObjCount,
DebugMode_DrawTable)
SetTableValue(YellowSpring_DebugSpawn, DebugMode_ObjCount,
DebugMode_SpawnTable)
DebugMode_ObjCount++
temp0++
loop
end event
event RSDKDraw
temp1 = [Link]
if temp1 == 5
temp1 = 0
end if
DrawSpriteFX(temp1, FX_FLIP, [Link], [Link])
temp1 += 4
DrawSpriteFX(temp1, FX_FLIP, [Link], [Link])
end event
event RSDKLoad
LoadSpriteSheet("Global/[Link]")
SpriteFrame(-16, 0, 32, 8, 84, 9)
SpriteFrame(-8, -16, 8, 32, 141, 26)
SpriteFrame(0, -16, 8, 32, 141, 59)
SpriteFrame(-16, -8, 32, 8, 150, 101)
SpriteFrame(-16, -8, 32, 8, 84, 18)
SpriteFrame(0, -16, 8, 32, 133, 26)
SpriteFrame(-8, -16, 8, 32, 149, 59)
SpriteFrame(-16, 0, 32, 8, 150, 92)
SpriteFrame(-16, 0, 32, 8, 84, 18)
SpriteFrame(-8, -16, 8, 32, 133, 26)
SpriteFrame(0, -16, 8, 32, 149, 59)
SpriteFrame(-16, -8, 32, 8, 150, 92)
SpriteFrame(-16, -16, 32, 24, 117, 1)
SpriteFrame(-8, -16, 24, 32, 158, 26)
SpriteFrame(-16, -16, 24, 32, 158, 59)
SpriteFrame(-16, -8, 32, 24, 150, 1)
SpriteFrame(-16, -24, 32, 8, 84, 18)
SpriteFrame(16, -16, 8, 32, 133, 26)
SpriteFrame(-24, -16, 8, 32, 149, 59)
SpriteFrame(-16, 16, 32, 8, 150, 92)
end event