// ----------------------------------
// RSDK Project: Sonic 1/Sonic 2
// Script Description: Wall Bumper Object
// Script Author: Christan Whitehead/Simon Thomley
// Unpacked by Rubberduckycooly's script unpacker
// ----------------------------------

//-------Aliases-------//
private alias 60 : TYPE_WALLBUMPER


// Static Values

// Tables

event ObjectMain
	foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)
		CheckEqual(object[currentPlayer].gravity, GRAVITY_GROUND)
		temp0 = checkResult
		CheckNotEqual(object[currentPlayer].collisionMode, CMODE_FLOOR)
		temp0 &= checkResult
		if temp0 == 0
			BoxCollisionTest(C_TOUCH, object.entityPos, -10, object.value0, 10, object.value1, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
		else
			BoxCollisionTest(C_TOUCH, object.entityPos, -20, object.value0, 20, object.value1, currentPlayer, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO, HITBOX_AUTO)
		end if
		if checkResult == 1
			if object.direction == FLIP_NONE
				object[currentPlayer].xvel = 0x80000
			else
				object[currentPlayer].xvel = -0x80000
			end if
			object[currentPlayer].yvel = -0x80000
			object[currentPlayer].yvel -= object[currentPlayer].value25
			object[currentPlayer].direction = object.direction
			object[currentPlayer].state = PlayerObject_HandleAir
			object[currentPlayer].tileCollisions = 1
			object[currentPlayer].gravity = GRAVITY_AIR
			object[currentPlayer].speed = object[currentPlayer].xvel
			object[currentPlayer].value1 = 1
			object[currentPlayer].collisionMode = CMODE_FLOOR
			object[currentPlayer].pushing = 0
			object[currentPlayer].controlLock = 15
			object[currentPlayer].animation = ANI_TWIRL
			object[currentPlayer].prevAnimation = ANI_TWIRL
			object[currentPlayer].frame = 0
			object[currentPlayer].animationSpeed = 90
			PlaySfx(SfxName[Spring], 0)
		end if
	next
end event


event ObjectDraw
	if object[0].type == TypeName[Debug Mode]
		temp1 = object.propertyValue
		temp1 &= 112
		if temp1 == 0
			temp0 = -0x400000
			temp1 = 8
		else
			temp0 = -0x800000
			temp1 = 16
		end if
		temp0 += object.ypos
		temp0 += 0x80000
		temp4 = 0
		while temp4 < temp1
			DrawSpriteXY(0, object.xpos, temp0)
			temp0 += 0x100000
			temp4++
		loop
	end if
end event


event ObjectStartup
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-8, -8, 16, 16, 93, 113)
	foreach (TypeName[Wall Bumper], arrayPos0, ALL_ENTITIES)
		temp0 = object[arrayPos0].propertyValue
		temp0 &= 112
		if temp0 == 0
			object[arrayPos0].value0 = 64
		else
			object[arrayPos0].value0 = 128
		end if
		object[arrayPos0].value1 = object[arrayPos0].value0
		FlipSign(object[arrayPos0].value0)
		object[arrayPos0].drawOrder = 5
	next
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 1, 143)
end event
