sQueenHead1 0 -1 -15 0 <undefined> <undefined> 1 603 7 0 0 -1 2 self 0 0 1 //starthealth = 600 + global.mtanks * 10; starthealth = global.mod_queenHstart + (global.mtanks * 10); //starthealthcorridors = 200 + global.mtanks * 5; starthealthcorridors = global.mod_queenHcorridors + (global.mtanks * 5); //starthealthbigroom = 400 + global.mtanks * 10; starthealthbigroom = global.mod_queenHbigroom + (global.mtanks * 10); //starthealthlast = 300; starthealthlast = global.mod_queenHlast; // DEBUG SECTION /*starthealth = 1; starthealthcorridors = 1; starthealthbigroom = 1; starthealthlast = 1;*/ // END DEBUG SECTION myhealth = starthealth; flashing = 0; shaking = 0; stunned = 0; fxtimer = 0; canbehit = 1; glowfx = 0; glowalpha = 0; jawglowalpha = 0; hpush = 7; vpush = -3; //damage = 90 + global.etanks * 10; damage = global.mod_queenDhead + (global.etanks * 10); push = 0; canhit = 1; surf = surface_create(128, 256); surf_x = 40; surf_y = 80; head_spr = sQueenHead1; head_frame = 0; head_damage = 0; image_angle = 0; head_angle_max = 30; head_target_angle = 0; ujaw_angle = 0; ljaw_angle = 0; jaw_target_angle = 0; ja_off = 0; eyes_frame = -1; eyes_close = 0; neck_base_x = 0; neck_base_y = 0; neck_segments = 8; i = 0; repeat (neck_segments) { neck_x[i] = x; neck_y[i] = y; } jaw1_obj = instance_create(x, y, oQueenHeadTop); jaw2_obj = instance_create(x, y, oQueenHeadBottom); grab_obj = -4; jaws_shake = 0; player_x = x; player_y = y; state = 0; statetime = 0; numproj = 0; projdelay = 0; speedmulti = 1; attackdelay = 120; 1 603 7 0 0 -1 2 self 0 0 1 repeat (10) { expl = instance_create(x + random_range(-20, 80), y + random_range(-20, 20), oFXAnimSpark); expl.image_speed = 0.5 + random(0.5); expl.additive = 0; expl.sprite_index = sExpl1; expl.direction = random(360); expl.speed = 2 + random(1); } make_explosion4(x, y); sfx_play(sndMissileExpl); with (jaw1_obj) instance_destroy(); with (jaw2_obj) instance_destroy(); instance_destroy(); 1 603 7 0 0 -1 2 self 0 0 1 expl = instance_create(x + random_range(-20, 80), y + random_range(-20, 20), oFXAnimSpark); expl.image_speed = 0.5; expl.additive = 0; expl.sprite_index = sExpl1; expl.image_xscale = 0.5; expl.image_yscale = 0.5; expl.depth = -50; alarm[9] = 4; 1 603 7 0 0 -1 2 self 0 0 1 var prj; var xx = x + lengthdir_x(-1, image_angle) - lengthdir_y(-6, image_angle); var yy = y + lengthdir_y(-1, image_angle) + lengthdir_x(-6, image_angle); prj = instance_create(xx, yy, oMZetaProj); prj.speed = 5.5; prj.gravity = 0.1; prj.gravity_direction = 270; prj.direction = image_angle + irandom_range(-15, 15); //prj.damage = 80; prj.damage = global.mod_queenDacid; prj.alarm[0] = 315; if (state == 6 && statetime < 135) alarm[2] = 1; 1 603 7 0 0 -1 2 self 0 0 1 if (state == 3 && statetime < 270) { instance_create(x + 5, y + 10, oQueenChargeParticle); alarm[1] = 5; } 1 603 7 0 0 -1 2 self 0 0 1 if (numproj > 0) { instance_create(x + 10, y, oQueenProj); sfx_play(sndFireball); numproj -= 1; alarm[0] = projdelay; } 1 603 7 0 0 -1 2 self 0 0 1 event_user(10); jaw1_obj.x = x; jaw1_obj.y = y; jaw1_obj.image_angle = image_angle + ujaw_angle; jaw1_obj.canbehit = canbehit; jaw1_obj.canhit = canhit; jaw2_obj.x = x; jaw2_obj.y = y; jaw2_obj.image_angle = image_angle + ljaw_angle; jaw2_obj.canbehit = canbehit; jaw2_obj.canhit = canhit; if (instance_exists(grab_obj)) { grab_obj.x = x + 55; grab_obj.y = y - 25; } player_x = lengthdir_x(65, image_angle + ljaw_angle - 15); player_y = lengthdir_y(65, image_angle + ljaw_angle - 15); instance_activate_object(oSolid); 1 603 7 0 0 -1 2 self 0 0 1 var neck_dist, neck_seglen, neck_basedir, i; if (state == 0) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 0; } } if (state == 1) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 30; sfx_play(sndQueenIntro); } if (statetime == 180) jaw_target_angle = 0; if (statetime == 240) { state = 0; statetime = -1; } } if (state == 2) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 30; stunned = 0; numproj = 3; projdelay = 20; if (myhealth <= starthealth / 4 * 3) { numproj = 4; projdelay = 15; } if (myhealth <= starthealth / 4 * 2) { numproj = 5; projdelay = 12; } if (myhealth <= starthealth / 4) { numproj = 6; projdelay = 10; } } if (statetime == 40) alarm[0] = 1; if (statetime == 180) jaw_target_angle = 0; if (statetime == 200) { state = 0; statetime = -1; } } // if (state == 2) if (state == 3) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 30; stunned = 0; canbehit = 0; alarm[1] = 60; } if (statetime > 60 && statetime < 120) { if (jawglowalpha < 1) jawglowalpha += 0.01; } if (statetime == 70) sfx_play(sndQueenCharge); if (statetime == 300) { proj = instance_create(x + 20, y + 10, oQueenFireball); sfx_play(sndQueenBigFire); if (oMusicV2.useMultistageMusic) { switch (oQueen.phase) { case 0: with (oMusicV2) alarm[6] = 5; break; case 2: with (oMusicV2) alarm[7] = 5; break; } } switch (oQueen.phase) { case 1: proj.targetx = 880; proj.targety = 120; break; case 2: proj.targetx = 1200; proj.targety = 112; break; case 3: proj.targetx = 1840; proj.targety = 112; break; case 4: proj.targetx = 2160; proj.targety = 160; break; } } if (statetime > 300) { if (jawglowalpha > 0) jawglowalpha -= 0.05; } if (statetime == 320) jaw_target_angle = 0; if (statetime == 360) { canbehit = 1; state = 0; statetime = -1; } } // if (state == 3) if (state == 4) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 10; sfx_play(sndQueenRoarShort); } if (statetime == 50) jaw_target_angle = 0; if (statetime < attackdelay * 0.8) { head_target_angle = point_direction(x, y, oCharacter.x, oCharacter.y - 32); if (oQueen.phase == 1 || oQueen.phase == 2) head_target_angle = 0; } if (statetime == attackdelay) { state = 5; statetime = 0; } } if (state == 5) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 0; direction = image_angle; speed = 3; sfx_play(sndQueenAttack); } if (speed < 8) speed += 0.5 * speedmulti; if (collision_line(x, y, x + lengthdir_x(74, image_angle - 12), y + lengthdir_y(74, image_angle - 12), oSolid, true, true) > 0) { state = 0; statetime = -1; screen_shake(10, 4); speed = 0; sfx_play(sndQueenImpact); } if (statetime == 200) { state = 0; statetime = -1; } } if (state == 6) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 0; stunned = 0; alarm[2] = 75; } if (statetime == 60) jaw_target_angle = 30; if (statetime < 75) head_target_angle = -60; if (statetime == 75) sfx_play(sndMZetaAcid); if (statetime >= 75 && statetime < 135) head_target_angle = -60+(statetime-75); if (statetime == 150) { state = 0; statetime = -1; } } // if (state == 6) if (state == 10) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 25; jaw1_obj.canhit = 0; jaw2_obj.canhit = 0; grab_obj = instance_create(x + 65, y - 30, oQueenGrab); } if (oCharacter.state == 53 || oCharacter.state == 54) { oCharacter.x = x + player_x; oCharacter.y = y + player_y; jaws_shake = 1; head_target_angle = -3; } if (oCharacter.state == 54) { jaw_target_angle = 5; head_target_angle = 3; } if (oCharacter.state == 55) { jaw_target_angle = 2; head_target_angle = 8; jaws_shake = 0; } } if (state == 11) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 0; jaw1_obj.canhit = 0; jaw2_obj.canhit = 0; canhit = 0; jaws_shake = 0; with (oCharacter) { state = 39; statetime = 0; xVel = 5; image_index = 0; statetime = 0; sfx_play(sndHurt); invincible = 30; ctrl_vibrate(1, 1, 15); queen_drain = 0; if (global.currentsuit == 0) global.playerhealth -= 400 * oControl.mod_diffmult; //((global.difficulty == 2) + 1) * oControl.mod_fusion; if (global.currentsuit == 1) global.playerhealth -= ceil(200) * oControl.mod_diffmult; //((global.difficulty == 2) + 1) * oControl.mod_fusion; //if (global.currentsuit == 2) global.playerhealth -= ceil(100) * oControl.mod_diffmult; //((global.difficulty == 2) + 1) * oControl.mod_fusion; if (global.currentsuit == 2) { if(global.item[5] == 0) global.playerhealth -= ceil(200) * oControl.mod_diffmult; else global.playerhealth -= ceil(100) * oControl.mod_diffmult; } //added if (global.playerhealth <= 0 && state != DEFEATED) { alarm[0] = 6; state = DEFEATED; } } sfx_play(sndGFTrooperHit); } // if (statetime == 0) if (statetime == 120) { state = 0; statetime = -1; } } // if (state == 11) if (state == 50) { if (statetime == 0) { head_frame = 0; head_target_angle = 0; jaw_target_angle = 0; ujaw_angle = 0; ljaw_angle = 0; sfx_play(sndQueenHit2); stunned = 30; speed = 0; bld = instance_create(x + 42, y - 8, oFXAnimSpark); bld.sprite_index = sMGammaBlood1; bld.image_speed = 0.5; bld.image_alpha = 0.6; bld.image_xscale = -1; bld.depth = -100; bld = instance_create(x + 60, y + 8, oFXAnimSpark); bld.sprite_index = sMGammaBlood1; bld.image_speed = 0.5; bld.image_alpha = 0.6; bld.image_xscale = -1; bld.image_yscale = -1; bld.depth = -100; } if (statetime == 50) { state = 0; statetime = -1; } } // if (state == 50) if (state == 100) { if (statetime == 0) { head_frame = 0; jaw_target_angle = 10; image_angle = 20; oCharacter.queen_drain = 0; if (instance_exists(grab_obj)) with (grab_obj) instance_destroy(); } if (image_angle > -20) image_angle -= 0.5; } if (eyes_close > 0) eyes_close -= 1; if (eyes_close == 0) { if (eyes_frame > -1) eyes_frame -= 0.25; } else if (eyes_frame < 5) eyes_frame += 1; neck_base_x = oQueen.x + oQueen.neck_x; neck_base_y = oQueen.y + oQueen.neck_y; neck_dist = point_distance(neck_base_x, neck_base_y, x, y); neck_seglen = neck_dist / neck_segments; neck_basedir = point_direction(neck_base_x, neck_base_y, x, y); neck_x[0] = neck_base_x + lengthdir_x(neck_seglen, neck_basedir); neck_y[0] = neck_base_y + lengthdir_y(neck_seglen, neck_basedir); neck_yoff[0] = sin(pi - neck_dist / (neck_dist - neck_seglen * -1)) * 20; i = 1; repeat (neck_segments - 1) { neck_x[i] = neck_x[i - 1] + lengthdir_x(neck_seglen, neck_basedir); neck_y[i] = neck_y[i - 1] + lengthdir_y(neck_seglen, neck_basedir); neck_yoff[i] = sin(pi - neck_dist / (neck_dist - neck_seglen * (i - 1))) * 20; i += 1; } if (ujaw_angle != jaw_target_angle) { ujaw_angle = lerp(ujaw_angle, jaw_target_angle, 0.1); ljaw_angle = lerp(ljaw_angle, -jaw_target_angle, 0.1); } if (head_target_angle > 180) head_target_angle -= 360; if (image_angle != head_target_angle) image_angle = lerp(image_angle, head_target_angle, 0.1); if (stunned > 0) { if (stunned > 25 && stunned <= 30) head_frame = 1; if (stunned > 12 && stunned <= 25) head_frame = 2; if (stunned <= 12) head_frame = 1; } else head_frame = 0; statetime += 1; if (flashing > 0) flashing -= 1; if (fxtimer < 5) { fxtimer += 1; } else fxtimer = 0; if (shaking > 0) shaking -= 1; if (stunned > 0) stunned -= 1; glowfx += 1; if (glowfx > 10) glowfx = 0; if (canbehit == 0) { if (glowalpha < 1) glowalpha += 0.1; } else if (glowalpha > 0) glowalpha -= 0.05; 1 603 7 0 0 -1 2 self 0 0 1 if (state != 100) with (other) event_user(0); 1 603 7 0 0 -1 2 self 0 0 1 if (canbehit && state != 100) { if (other.smissile == 0) { event_user(1); } else event_user(2); with (other) event_user(0); } else with (other) event_user(1); 1 603 7 0 0 -1 2 self 0 0 1 if (state != 100) with (other) { event_user(1); instance_destroy(); } 1 603 7 0 0 -1 2 self 0 0 1 eyes_close = 20; if (oQueen.state == 10 && flashing == 0) event_user(3); 1 603 7 0 0 -1 2 self 0 0 1 if (canhit == 1) { if (other.state != 52 && other.state != 39 && other.state != 40) { if (push == 0) { damage_player(damage, hpush, vpush, 0, 0); } else damage_player_push(damage, 1, 90, 0, 4); } } 1 603 7 0 0 -1 2 self 0 0 1 var ja_off; ja_off = 0; if (jaws_shake) ja_off = random_range(-1, 1); if (surface_exists(surf)) { surface_set_target(surf); draw_clear_alpha(c_blue, 0); if (head_frame == 0) { draw_sprite_ext(sQueenHeadBack, head_damage, surf_x, surf_y, 1, 1, image_angle, -1, 1); draw_sprite_ext(sQueenHeadDown, head_damage, surf_x, surf_y, 1, 1, image_angle + ljaw_angle + ja_off, -1, 1); draw_sprite_ext(sQueenHeadUp, head_damage, surf_x, surf_y, 1, 1, image_angle + ujaw_angle + ja_off, -1, 1); mask_index = sQueenHeadBack; if (eyes_frame >= 0) draw_sprite_ext(sQueenEyes, eyes_frame, surf_x, surf_y, 1, 1, image_angle, -1, 1); } if (head_frame == 1) { draw_sprite_ext(sQueenHead1, head_damage, surf_x, surf_y, 1, 1, image_angle, -1, 1); mask_index = sQueenHead1; } if (head_frame == 2) { draw_sprite_ext(sQueenHead2, head_damage, surf_x, surf_y, 1, 1, image_angle, -1, 1); mask_index = sQueenHead2; } surface_reset_target(); } 1 603 7 0 0 -1 2 self 0 0 1 if (state != 100) { dmg = 8; flashtime = 4; shaking = 6; event_user(0); sfx_stop(sndQueenHit1); sfx_play(sndQueenHit1); } 1 603 7 0 0 -1 2 self 0 0 1 if (state != 100) { dmg = 40; flashtime = 20; eyes_close = 20; shaking = 24; event_user(0); jaw_target_angle = 30; sfx_stop(sndQueenHit2); sfx_play(sndQueenHit2); } 1 603 7 0 0 -1 2 self 0 0 1 if (state != 100) { dmg = 50; flashtime = 20; eyes_close = 20; shaking = 24; if (state == 5 && statetime > 6) { state = 0; statetime = -1; speed = 0; ujaw_angle = 0; } if (ujaw_angle == 0) { stunned = 30; } else if (state != 5) image_angle += 10; event_user(0); sfx_stop(sndQueenHit2); sfx_play(sndQueenHit2); } 1 603 7 0 0 -1 2 self 0 0 1 if (state != 100) { dmg = 10; flashtime = 8; shaking = 10; event_user(0); sfx_stop(sndQueenHit1); sfx_play(sndQueenHit1); } 1 603 7 0 0 -1 2 self 0 0 1 if !(oCharacter.state == oCharacter.GRABBEDQUEENBELLY && instance_exists(oPBomb)) myhealth -= dmg; flashing = flashtime; if (myhealth <= 0 && state != 100 && state != 50) { if (oQueen.phase < 3) head_damage = 1; if (oQueen.phase == 3) head_damage = 2; if (oQueen.phase < 5) { state = 50; statetime = 0; myhealth = 999999; with (oQueen) { state = 6; statetime = 0; } } if (oQueen.phase == 5) { with (oQueen) { state = 100; statetime = 0; } state = 100; } } 1 603 7 0 0 -1 2 self 0 0 1 if(oControl.mod_fusion == 1 || oControl.MonsterPalettesFusionOnly == 0) { pal_swap_set(oControl.QueenPalette, 1, false); } var i, soff_x, soff_y; draw_set_blend_mode(bm_add); draw_sprite_ext(sQueenMouthGlow, -1, x, y, 1, 1, 0, -1, jawglowalpha); draw_set_blend_mode(bm_normal); i = 0; repeat (neck_segments - 1) { if (!flashing) { draw_sprite_ext(sQueenNeck, -1, neck_x[i], neck_y[i] + neck_yoff[i], 1, 1, 0, image_blend, 1); } else { draw_sprite_ext(sQueenNeck, -1, neck_x[i], neck_y[i] + neck_yoff[i], 1, 1, 0, make_color_rgb(255 - fxtimer * 63, 255 - fxtimer * 63, 255 - fxtimer * 63), 1); draw_set_blend_mode(bm_add); repeat (2) draw_sprite_ext(sQueenNeck, -1, neck_x[i], neck_y[i] + neck_yoff[i], 1, 1, 0, -1, 1 - fxtimer * 0.25); draw_set_blend_mode(bm_normal); } i += 1; } soff_x = 0; soff_y = 0; if (shaking) { soff_x = choose(-1, 0, 1); soff_y = choose(-1, 0, 1); } if (surface_exists(surf)) { if (!flashing) { draw_surface_ext(surf, x - surf_x + soff_x, y - surf_y + soff_y, 1, 1, 0, image_blend, 1); } else { draw_surface_ext(surf, x - surf_x + soff_x, y - surf_y + soff_y, 1, 1, 0, make_color_rgb(255 - fxtimer * 63, 255 - fxtimer * 63, 255 - fxtimer * 63), 1); draw_set_blend_mode(bm_add); repeat (2) draw_surface_ext(surf, x - surf_x + soff_x, y - surf_y + soff_y, 1, 1, 0, -1, 1 - fxtimer * 0.25); draw_set_blend_mode(bm_normal); } } else { surface_free(surf); surf = surface_create(200, 200); event_user(10); } if (head_frame == 0) { draw_set_blend_mode(bm_add); if (head_damage < 2) { draw_sprite_ext(sQueenGlow, 0, x, y, 1, 1, image_angle + ujaw_angle + ja_off, -1, glowalpha * (1 - glowfx * 0.1)); } else draw_sprite_ext(sQueenGlow, 1, x, y, 1, 1, image_angle + ujaw_angle + ja_off, -1, glowalpha * (1 - glowfx * 0.1)); if (ujaw_angle + ja_off < 20) { draw_sprite_ext(sQueenGlow2, 0, x, y, 1, 1, image_angle, -1, glowalpha * (1 - glowfx * 0.1)); } else draw_sprite_ext(sQueenGlow2, 1, x, y, 1, 1, image_angle, -1, glowalpha * (1 - glowfx * 0.1)); draw_set_blend_mode(bm_normal); } draw_set_blend_mode(bm_add); draw_sprite_ext(sQueenJawGlow, head_damage, x, y, 1, 1, 0, -1, jawglowalpha); draw_set_blend_mode(bm_normal); shader_reset(); 0 0 0 0.5 0.100000001490116 0 0.100000001490116 0.100000001490116 0.200000002980232 -1 -1