<undefined>
0
-1
-200
0
<undefined>
<undefined>
1
603
7
0
0
-1
2
self
0
0
1
///Primary Settings
state = 0;
statetime = 0;
collectable = 0;
reform = random(1);
move = 0;
image_speed = 0.2;
xvariant = 0;
xtype = sHXPickup;
flashing = 0;
fxtimer = 0;
sizeX = 1;
sizeY =1;
relativeX = 0;
relativeY = 0;
// origin point velocity
originVelX = 0;
originVelY = 0;
// parasite velocity
velX = 0;
velY = 0;
//counter for it to stand still for a bit before moving
counter = 30;
//orbit point
orbitX = xstart;
orbitY = ystart;
orbitCounter = 0; //orbit point randomize counter
xExit = choose(-5,5,-7,7,-9,9);
yExit = choose(-5,5,-7,7,-9,9);
frozenAngle = 0;
drawAngle = 0;
drawHalzynShields = false;
inview = true;
1
603
7
0
0
-1
2
self
0
0
1
if(state == 6) { //Shrink during pickup
if(floor(statetime) == 0) {
image_xscale = 1;
image_xscale = 1;
if(xvariant == 1) {
image_xscale = 0.8;
image_xscale = 0.8;
}
}
x = oCharacter.x + relativeX;
y = (oCharacter.y-oCharacter.sprite_height/2) + relativeY;
relativeX = lerp(relativeX, 0, 0.1);
relativeY = lerp(relativeY, 0, 0.1);
if(image_xscale > 0) {
image_xscale -= 0.0225;
image_yscale -= 0.0225;
}
if(image_xscale <= 0) instance_destroy();
}
//inview widescreen fix
if ((x < (view_xview[0] - 16 - (oControl.widescreen_space/2))) || (x > (view_xview[0] + view_wview[0] + 16 + (oControl.widescreen_space/2))) || (y < view_yview[0] - 16) || (y > view_yview[0] + view_hview[0] + 16)) {
inview = false;
}
1
603
7
0
0
-1
2
self
0
0
1
inview = true;
1
603
7
0
0
-1
2
self
0
0
1
///X Movement
//Thanks for the movement code, Scoot!
if (fxtimer < 10) {
fxtimer += 1;
} else fxtimer = 0;
if (flashing > 0) flashing -= 1;
if(state == 0) { //Initial settings that we can't run in the create event because reasons
image_alpha = 1;
depth = lastDepth;
sprite_index = lastSprite;
image_index = lastFrame;
image_angle = lastAngle;
image_xscale = lastFacing;
image_xscale = lastYscale;
image_speed = 0;
state = 1;
statetime = 0;
xoffset = sprite_get_xoffset(lastSprite) - (mean(sprite_get_bbox_left(lastSprite), sprite_get_bbox_right(lastSprite)))
lastXPos -= xoffset;
yoffset = sprite_get_yoffset(lastSprite) - (mean(sprite_get_bbox_top(lastSprite), sprite_get_bbox_bottom(lastSprite)))
lastYPos -= yoffset;
if(frozenAngle != 0)
drawAngle = frozenAngle;
else
drawAngle = lastAngle;
if(sprite_index == sRamulken) sprite_index = sRamulkenNoShield;
if (lastEnemy == oCavedropper ||
lastEnemy == oBlobAir ||
lastEnemy == oBlobWater ||
lastEnemy == oGawron ||
lastEnemy == oYumee||
lastEnemy == oSkreek ||
lastEnemy == oErisSegment ||
lastEnemy == oErisBody2 ||
lastEnemy == oMeboid ||
lastEnemy == oMeboid2) reform = -1;
}
if(state == 1) { //Spawn transition state
if(statetime == 0) PlaySoundMono(sndXMorph1);
if(statetime <= 40) {
sizeX = sizeX + 0.12;
sizeY = sizeY + 0.08;
}
if(statetime >= 40) {
sizeX = sizeX - 0.12;
sizeY = sizeY - 0.08;
if(statetime == 40) {
collectable = 1;
sprite_index = xtype;
depth = -200;
image_index = 0;
image_speed = 0.2;
image_angle = 0;
image_xscale = 1;
image_yscale = 1;
if(xvariant == 1) {
image_xscale = 0.8;
image_yscale = 0.8;
}
}
if(statetime >= 81) {
state = 2;
statetime = 0;
}
}
}
if(state == 2) //Normal Movement
{
move = 1;
if(statetime == 0) collectable = 1;
if(counter > 0) { //Counter before movement
move = 0;
counter--;
}
else { //Randomize orbit point every 30 frames
if(orbitCounter > 0) {
orbitCounter--;
}
else {//Target either the Orbit Point or Sarah
var angle = random(360);
if(oCharacter.chargebeam == 0) { //Orbit Point
orbitX = xstart + lengthdir_x(32,angle);
orbitY = ystart + lengthdir_y(32,angle);
}
else if(oCharacter.chargebeam >= 1) { //Sarah
orbitX = oCharacter.x;
orbitY = oCharacter.y - oCharacter.sprite_height/2;
}
orbitCounter = irandom_range(15,25); //Time before targeting again
}
//Maximum speed
velX = clamp(velX,-4,4);
velY = clamp(velY,-4,4);
}
xstart += originVelX;
ystart += originVelY;
if(reform >= 0.5 && statetime >= 155) {
state = 4;
statetime = 0;
collectable = 0;
}
else if(statetime >= 620) {
state = 3;
statetime = 0;
}
}
if(state == 3) { //Fly away
move = 1;
orbitX += xExit;
orbitY += yExit;
//Maximum speed
velX = clamp(velX,-4,4);
velY = clamp(velY,-4,4);
}
if(state == 4) { //Prepare for respawn
flashing = 2;
if(statetime == 0) {
if(lastEnemy != oSkorp && lastEnemy != oGlowFly) lastAngle = 0;
if(lastEnemy = oHalzyn) drawHalzynShields = true;
drawAngle = lastAngle;
}
if(statetime < 120) {
move = 1;
orbitX = lastXPos;
orbitY = lastYPos;
//Maximum speed
velX = clamp(velX,-3,3);
velY = clamp(velY,-3,3);
}
if(statetime > 120 && point_distance(x,y,lastXPos,lastYPos) > 2) {
move = 0;
move_towards_point(lastXPos,lastYPos,2);
}
else if(point_distance(x,y,lastXPos,lastYPos) <= 2) {
move = 0;
x = lastXPos;
y = lastYPos;
speed = 0;
state = 5;
statetime = 0;
}
}
if(state == 5) { //Respawn transition
if(statetime == 0) PlaySoundMono(sndXMorph1);
if(statetime <= 40) {
sizeX = sizeX + 0.12;
sizeY = sizeY + 0.08;
}
if(statetime >= 40) {
sizeX = sizeX - 0.12;
sizeY = sizeY - 0.08;
if(statetime == 40) {
image_speed = 0;
sprite_index = lastSprite;
image_xscale = lastFacing;
image_index = 0
depth = lastDepth;
lastEnemyX = x + xoffset;
lastEnemyY = y + yoffset;
}
if(statetime >= 81) {
enemy = instance_create(lastXPos + xoffset, lastYPos + yoffset, lastEnemy);
enemy.facing = lastFacing;
enemy.myhealth = enemy.myhealth/2;
enemy.timer = lastEnemyTimer;
enemy.rotspeed = lastEnemyRotspeed;
enemy.myspeed = lastEnemyMyspeed;
enemy.offset = lastEnemyOffset;
enemy.moveratio = lastEnemyMoveratio;
enemy.movesteps = lastEnemyMovesteps;
enemy.image_angle = lastAngle;
if (lastEnemy == oHalzyn) {
enemy.glow = lastEnemyGlow;
}
instance_destroy();
}
}
}
if(move == 1) { //Orbital movement
var ang = point_direction(x,y,orbitX,orbitY);
velX += lengthdir_x(0.2,ang);
velY += lengthdir_y(0.2,ang);
x += velX;
y += velY;
}
statetime += 1;
1
603
7
0
0
-1
2
self
0
0
1
//inview = false;
1
603
7
0
0
-1
2
self
0
0
1
///Destroy if outside room && state == 3
if(state == 3) {
if ((x < (view_xview[0] - (oControl.widescreen_space/2))) || (x > (view_xview[0] + view_wview[0] + (oControl.widescreen_space/2))) || (y < 0) || (y > room_height)) {
instance_destroy();
}
}
1
603
7
0
0
-1
2
other
0
0
1
if(state == 1 || state == 5) {
if(inview) {
if(sprite_index == xtype) draw_sprite_pixelated(sprite_index, image_index, x, y, image_xscale, 1, image_angle, c_white, 1, sizeX, sizeY, 16);
else {
draw_sprite_pixelated(sprite_index, image_index, lastEnemyX, lastEnemyY, lastFacing, 1, drawAngle, c_white, 1, sizeX, sizeY, 128);
if(sprite_index == sSkorpBody) {
draw_sprite_pixelated(sSkorpDiscLunge, 0, lastEnemyX + lengthdir_x(11, lastAngle - 24), lastEnemyY + lengthdir_y(11, lastAngle - 24), -1, 1, 0, c_white, 1, sizeX, sizeY, 32);
draw_sprite_pixelated(sSkorpDiscLunge, 0, lastEnemyX + lengthdir_x(11, lastAngle + 24), lastEnemyY + lengthdir_y(11, lastAngle + 24), 1, 1, 0, c_white, 1, sizeX, sizeY, 32);
}
if(drawHalzynShields) {
var shield;
if (lastEnemyGlow == 1) {
shield = sHalzynShieldA4;
} else if (lastEnemyGlow == 2) {
shield = sHalzynShieldA4_2;
} else {
shield = sHalzynShield;
}
draw_sprite_pixelated(shield, 0, lastEnemyX + 8, lastEnemyY - 3, 1, 1, 0, c_white, 1, sizeX, sizeY, 32);
draw_sprite_pixelated(shield, 0, lastEnemyX - 8, lastEnemyY - 3, -1, 1, 0, c_white, 1, sizeX, sizeY, 32);
}
}
}
}
else if(!flashing) {
//draw_self();
draw_sprite_ext(sprite_index, -1, round(x), round(y), image_xscale, image_yscale, image_angle, image_blend, image_alpha);
}
else if(flashing) {
draw_sprite_ext(sprite_index, -1, round(x), round(y), image_xscale, image_yscale, image_angle, make_color_rgb(80, 80, 80), 1);
draw_set_blend_mode(bm_add);
repeat (3) draw_sprite_ext(sprite_index, -1, round(x), round(y), image_xscale, image_yscale, image_angle, -1, 1 - fxtimer * 0.1);
draw_set_blend_mode(bm_normal);
}
0
0
0
0.5
0.100000001490116
0
0.100000001490116
0.100000001490116
0.200000002980232
-1
0