You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.4 KiB
106 lines
3.4 KiB
if (frozen == 0)
|
|
{
|
|
if (state == 0)
|
|
{
|
|
shield_angle = (5 + (sin(time) * 10))
|
|
shield_offset = (sin((time + 2)) * -1.5)
|
|
time += 0.15
|
|
hspeed = lerp(hspeed, (0.5 * facing), 0.05)
|
|
vspeed = 0
|
|
if (collision_line((x + (facing * 25)), (y - 4), (x + (facing * 25)), (y + 4), oSolid, true, true) || (facing == 1 && x > limit_r) || (facing == -1 && x < limit_l))
|
|
facing = (-facing)
|
|
if collision_line((x + (facing * 30)), (y - 4), (x + (facing * 30)), (y + 4), oHalzynShield, true, true)
|
|
facing = (-facing)
|
|
if collision_line(x, y, x, (y + 120), oCharacter, true, true)
|
|
{
|
|
state = 1
|
|
statetime = 0
|
|
startx = x
|
|
starty = y
|
|
speed = 0
|
|
}
|
|
}
|
|
if (state == 1)
|
|
{
|
|
if (statetime < 30)
|
|
{
|
|
shield_angle = lerp(shield_angle, -20, 0.2)
|
|
shield_offset = lerp(shield_offset, 0, 0.1)
|
|
}
|
|
if (statetime >= 30 && statetime < 160)
|
|
{
|
|
direction = point_direction(x, y, oCharacter.x, (oCharacter.y - 16))
|
|
speed = lerp(speed, 2.7, 0.04)
|
|
if ((oCharacter.state == oCharacter.BALL && point_distance(x, y, oCharacter.x, (oCharacter.y - 16)) < 3) || (oCharacter.state != oCharacter.BALL && point_distance(x, y, oCharacter.x, (oCharacter.y - 16)) < 8))
|
|
{
|
|
state = 2
|
|
statetime = -1
|
|
speed = 0
|
|
}
|
|
if ((statetime > 60 && collision_line((x - 16), (y + 10), (x + 16), (y + 10), oSolid, true, true)) || collision_line((x + 20), (y - 8), (x + 20), (y + 8), oSolid, true, true) || collision_line((x - 20), (y - 8), (x - 20), (y + 8), oSolid, true, true))
|
|
{
|
|
state = 2
|
|
statetime = -1
|
|
speed = 0
|
|
}
|
|
shield_angle = lerp(shield_angle, 30, 0.2)
|
|
}
|
|
if (statetime >= 160)
|
|
speed *= 0.95
|
|
if (statetime >= 180)
|
|
{
|
|
state = 2
|
|
statetime = -1
|
|
}
|
|
}
|
|
if (state == 2)
|
|
{
|
|
direction = point_direction(x, y, startx, starty)
|
|
speed = lerp(speed, 2, 0.1)
|
|
shield_angle = lerp(shield_angle, 5, 0.1)
|
|
if (point_distance(x, y, startx, starty) < 2)
|
|
{
|
|
state = 0
|
|
statetime = -1
|
|
time = 0
|
|
vspeed = 0
|
|
x = startx
|
|
y = starty
|
|
}
|
|
}
|
|
}
|
|
else
|
|
speed = 0
|
|
event_inherited()
|
|
if (state == 100)
|
|
{
|
|
if (instance_exists(shield1) && instance_exists(shield2))
|
|
{
|
|
deb = instance_create(shield1.x, shield1.y, oDebris)
|
|
deb.image_angle = shield1.image_angle
|
|
deb.sprite_index = sHalzynShield
|
|
deb.direction = (0 + random(30))
|
|
deb.speed = (0.5 + random(3))
|
|
deb.gravity = 0.1
|
|
deb.playsound = 0
|
|
deb = instance_create(shield2.x, shield2.y, oDebris)
|
|
deb.image_angle = shield2.image_angle
|
|
deb.sprite_index = sHalzynShield
|
|
deb.image_xscale = -1
|
|
deb.direction = (180 - random(30))
|
|
deb.speed = (0.5 + random(3))
|
|
deb.gravity = 0.1
|
|
deb.playsound = 0
|
|
with (shield1)
|
|
instance_destroy()
|
|
with (shield2)
|
|
instance_destroy()
|
|
}
|
|
enemy_death()
|
|
}
|
|
if (instance_exists(shield1) && instance_exists(shield2))
|
|
{
|
|
shield1.fxtimer = fxtimer
|
|
shield2.fxtimer = fxtimer
|
|
}
|