source: 2014/30/MikkoL/Gradiant/LM2/LM2/Gradiant.cs @ 5702

Revision 5702, 136.2 KB checked in by mijoliim, 6 years ago (diff)

Gradiant viimeinen versio:
Cheatit otettu pois jos ei pelata debug modessa
ja bossien jälkeiset timerit korjattu

Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9class player : PhysicsObject
10{
11    public IntMeter health = new IntMeter(100, 0, 100);
12
13    public player(double width, double height)
14        : base(width, height)
15    {
16        health.LowerLimit += delegate
17        {
18            this.Destroy();
19        };
20        IgnoresGravity = true;
21    }
22}
23
24class droid : PhysicsObject
25{
26    public DoubleMeter droid_level = new DoubleMeter(0, 0, 4);
27
28    public droid(double width, double height)
29        : base(width, height)
30    {
31        IgnoresGravity = true;
32    }
33}
34
35class enemy : PhysicsObject
36{
37    public IntMeter health = new IntMeter(100, 0, 100);
38    public IntMeter ScoreValue = new IntMeter(100, 0, int.MaxValue);
39    public bool canShoot = false;
40    public double explosion_scale = 50;
41
42    public enemy(double width, double height)
43        : base(width, height)
44    {
45        health.LowerLimit += delegate { this.Destroy(); };
46        IgnoresGravity = true;
47    }
48}
49class boss : PhysicsObject
50{
51    public IntMeter health = new IntMeter(10000, 0, 10000);
52    public IntMeter ScoreValue = new IntMeter(100, 0, int.MaxValue);
53    public bool canShoot = false;
54    public double explosion_scale = 100;
55
56    public boss(double width, double height)
57        : base(width, height)
58    {
59        health.LowerLimit += delegate { this.Destroy(); };
60        IgnoresGravity = true;
61    }
62}
63
64class bullet : PhysicsObject
65{
66    public int damage = 5;
67
68    public bullet(double width, double height)
69        : base(width, height) { }
70}
71class frontborder : PhysicsObject
72{
73
74    public frontborder(double width, double height)
75        : base(width, height) { IgnoresGravity = true; }
76}
77class backborder : PhysicsObject
78{
79
80    public backborder(double width, double height)
81        : base(width, height) { IgnoresGravity = true; }
82}
83class bulletdes : PhysicsObject
84{
85    public bulletdes(double width, double height)
86            : base(width, height) { IgnoresGravity = true; }
87}
88
89//Game
90public class Gradiant : PhysicsGame
91{
92    //double fps = 50;
93
94    player player;
95    PhysicsObject playership;
96    double player_speed = 425;
97    Vector stagespeed = new Vector(-500,0);
98    Vector cntr = new Vector(0, 0);
99
100    string currentlevel = "level_01";
101
102    #region Images
103
104    //Player
105    Image player_ship_01 = LoadImage("player_ship_01");
106    Image player_ship_02 = LoadImage("player_ship_02");
107    Image hitbox = LoadImage("hitbox");
108    Image droid_image = LoadImage("droid");
109    //Bullets
110    Image bullet_green_laser01 = LoadImage("bullet_green_laser01");
111    Image bullet_player01 = LoadImage("bullet_player");
112    Image bullet_player02 = LoadImage("bullet_player02");
113    Image bullet_player03 = LoadImage("bullet_player03");
114    Image bullet_player04 = LoadImage("bullet_player04");
115    Image bullet_player05 = LoadImage("bullet_player05");
116    Image bullet_droid = LoadImage("bullet_droid");
117    Image bullet_laser = LoadImage("bullet_laser");
118    Image bullet_enemy_01 = LoadImage("bullet_enemy_01");
119    Image bullet_enemy_02 = LoadImage("bullet_enemy_02");
120    Image bullet_enemy_03 = LoadImage("bullet_enemy_03");
121    Image bullet_enemy_04 = LoadImage("bullet_enemy_04");
122    Image bullet_enemy_05 = LoadImage("bullet_enemy_05");
123    Image bullet_enemy_06 = LoadImage("bullet_enemy_06");
124    Image bullet_enemy_07 = LoadImage("bullet_enemy_07");
125    Image bullet_enemy_08 = LoadImage("bullet_enemy_08");
126    Image bullet_enemy_09 = LoadImage("bullet_enemy_09");
127    Image bullet_enemy_10 = LoadImage("bullet_enemy_10");
128    //Enemies
129    Image enemy_ship_01 = LoadImage("enemy_ship_01");
130    Image enemy_ship_01_red = LoadImage("enemy_ship_01_red");
131    Image enemy_ship_01_blue = LoadImage("enemy_ship_01_blue");
132    Image enemy_ship_01_blue_inverted = LoadImage("enemy_ship_01_blue_inverted");
133    Image enemy_ship_02 = LoadImage("enemy_ship_02");
134    Image enemy_ship_03 = LoadImage("enemy_ship_03");
135    Image enemy_ship_04 = LoadImage("enemy_ship_04");
136    Image enemy_ship_05 = LoadImage("enemy_ship_05");
137    Image enemy_ship_06 = LoadImage("enemy_ship_06");
138    //Bosses
139    Image boss_ship_01 = LoadImage("boss_ship_01");
140    Image boss_ship_02 = LoadImage("boss_ship_02");
141    Image boss_ship_03 = LoadImage("boss_ship_03");
142    Image boss_ship_ajnator = LoadImage("ajnator");
143    //Powerups
144    Image powerup_damage = LoadImage("powerup_damage");
145    Image powerup_spread = LoadImage("powerup_spread");
146    Image powerup_upgrade = LoadImage("powerup_upgrade");
147    //Borders
148    Image border_top = LoadImage("border_bottom");
149    Image border_bottom = LoadImage("border_top");
150    //Backgrounds
151    Image stage1_bg = LoadImage("stage1_bg");
152    Image stage2_bg = LoadImage("stage2_bg");
153    Image stage3_bg = LoadImage("stage3_bg");
154
155    Image stage_aj = LoadImage("stage_aj");
156    //Animations
157    private Animation explosion_anim;
158    private Animation droid_anim;
159    private Animation droid2_anim;
160    //GUI
161    Image title = LoadImage("title_screen");
162    Image title_02 = LoadImage("title_screen_02");
163    Image press_start_img = LoadImage("Press_Start");
164    Image controls = LoadImage("controls");
165    Image stage_1_clear = LoadImage("stage_1_clear");
166    Image stage_1_start = LoadImage("stage_1_start");
167    Image stage_2_clear = LoadImage("stage_2_clear");
168    Image stage_2_start = LoadImage("stage_2_start");
169    Image stage_3_clear = LoadImage("stage_3_clear");
170    Image stage_3_start = LoadImage("stage_3_start");
171    Image bonus_stage_clear = LoadImage("bonus_stage_clear");
172    Image bonus_stage_start = LoadImage("bonus_stage_start");
173    Image damage_up = LoadImage("damage_up");
174    Image spread_up = LoadImage("spread_up");
175    Image upgrade = LoadImage("upgrade");
176    Image cursor_gui = LoadImage("cursor");
177    Image select_ship_gui = LoadImage("select_ship");
178    Image congratulations = LoadImage("congratulations");
179
180    //Misc
181    Image gradient = LoadImage("gradient");
182    Image aj = LoadImage("aj-weed");
183
184    #endregion
185
186    #region SFX
187
188    SoundEffect hurtsfx = LoadSoundEffect("hurt");
189    SoundEffect hitsfx = LoadSoundEffect("hit");
190    SoundEffect shootsfx = LoadSoundEffect("shoot");
191    SoundEffect selectsfx = LoadSoundEffect("select1");
192    SoundEffect powerupsfx = LoadSoundEffect("powerup");
193    SoundEffect explosionsfx = LoadSoundEffect("explosion");
194    SoundEffect enemy_shootsfx = LoadSoundEffect("enemy_shoot");
195
196    #endregion
197
198    //Weapon
199    double wpn_shootRate = 0.1;
200    IntMeter wpn_damageRatio = new IntMeter(1, 1, 10);
201    DoubleMeter wpn_spread = new DoubleMeter(1,1,10);
202
203    double drd_shootRate = 0.15;
204    double drd_type = 0;
205    DoubleMeter drd_level = new DoubleMeter(0, 0, 5);
206    IntMeter drd_damageRatio = new IntMeter(1, 1, 20);
207
208    //Collision ignore groups
209    //2: player bullets/enemy bullets
210    //3: enemies
211    //4: powerups
212
213    ProgressBar healthBar;
214    Timer wpn_timer = new Timer();
215
216    GameObject control_gui;
217    GameObject press_start;
218    GameObject cursor;
219    GameObject select_ship;
220
221    GameObject black;
222
223    GameObject stage_clear;
224    GameObject stage2_clear;
225    GameObject stage3_clear;
226    GameObject stage4_clear;
227
228    GameObject bg;
229    GameObject bg2;
230    Timer cursor_blink;
231    double cursorpos = 0;
232
233    bool s001 = false;
234    bool s002 = false;
235    bool s003 = false;
236    bool s004 = false;
237    bool b001 = false;
238    bool b002 = false;
239    bool b003 = false;
240    bool b004 = false;
241
242    public override void Begin()
243    {
244        SoundEffect.MasterVolume = 0.8;
245        //Load SFX
246        hurtsfx.Play();
247
248        //Load Anim
249        explosion_anim = LoadAnimation("explosionanim");
250        droid_anim = LoadAnimation("droidanim");
251        droid2_anim = LoadAnimation("droid2anim");
252
253        MediaPlayer.Play("Starmap");
254        MediaPlayer.IsRepeating = true;
255
256        SetWindowSize(1280, 800, false);
257
258        Level.Size = new Vector(Screen.Width,Screen.Height);
259        SmoothTextures = false;
260
261        GameObject titlescreen = new GameObject(1280, 801);
262        titlescreen.Position = Screen.Center;
263        titlescreen.Image = title_02;
264        Add(titlescreen,-3);
265
266        press_start = new GameObject(215, 59);
267        press_start.Position = Screen.Center + new Vector(0, 90);
268        press_start.Image = press_start_img;
269        Add(press_start);
270
271        control_gui = new GameObject(345, 247);
272        control_gui.Position = Screen.Center + new Vector(66, -112);
273        control_gui.Image = controls;
274        Add(control_gui);
275
276        Timer start = new Timer();
277        start.Interval = 0.6;
278        start.Timeout += delegate
279        {
280            if (press_start.IsVisible) press_start.IsVisible = false;
281            else press_start.IsVisible = true;
282        };
283        start.Start();
284
285        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
286        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
287        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Select_ship, null);
288
289#if DEBUG
290        Keyboard.Listen(Key.D1 ,ButtonState.Pressed, cheat_skiptolvl1, null);
291        Keyboard.Listen(Key.D2, ButtonState.Pressed, cheat_skiptolvl2, null);
292        Keyboard.Listen(Key.D3, ButtonState.Pressed, cheat_skiptolvl3, null);
293
294        Keyboard.Listen(Key.D4, ButtonState.Pressed, cheat_skiptolvl4, null);
295#endif
296    }
297    void Select_ship()
298    {
299        selectsfx.Play();
300
301        ClearControls();
302        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
303        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
304        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, movecursor, null);
305        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Start, null);
306        ControllerOne.Listen(Button.A, ButtonState.Pressed, Start, null);
307
308        control_gui.Destroy();
309        press_start.Destroy();
310
311        cursor = new GameObject(21, 19);
312        cursor.Image = cursor_gui;
313        cursor.Position = Screen.Center + new Vector(-232, 41);
314
315        select_ship = new GameObject(426, 136);
316        select_ship.Image = select_ship_gui;
317        select_ship.Position = Screen.Center;
318
319        Add(select_ship);
320        Add(cursor);
321
322        cursor_blink = new Timer();
323        cursor_blink.Interval = 0.5;
324        cursor_blink.Timeout += delegate
325        {
326            if (cursor.IsVisible) cursor.IsVisible = false;
327            else if (!cursor.IsVisible) cursor.IsVisible = true;
328            if (cursor.IsDestroyed) cursor_blink.Stop();
329        };
330        cursor_blink.Start();
331    }
332    void movecursor(AnalogState dir)
333    {
334        if (cursorpos!= 0 && dir.StateVector.Y >= 0.7)
335        {
336            cursorpos = 0;
337            cursor.Position = Screen.Center + new Vector(-232, 41);
338            cursor_blink.Start();
339            cursor.IsVisible = true;
340            selectsfx.Play();
341        }
342        else if (cursorpos!= 1 &&dir.StateVector.Y <= -0.7)
343        {
344            cursorpos = 1;
345            cursor.Position = Screen.Center + new Vector(-232, -51);
346            cursor_blink.Start();
347            cursor.IsVisible = true;
348            selectsfx.Play();
349        }
350    }
351
352    void Start()
353    {
354        ClearControls();
355
356        selectsfx.Play();
357        MediaPlayer.Stop();
358        black = new GameObject(Screen.Width, Screen.Height);
359        black.Position = cntr;
360        black.Color = Color.Transparent;
361        black.FadeColorTo(Color.Black, 0.5);
362        Add(black, 2);
363
364        Timer wait = new Timer();
365        wait.Interval = 1;
366        wait.Timeout += delegate
367        {
368            ClearAll();
369            black = new GameObject(Screen.Width, Screen.Height);
370            black.Color = Color.Black;
371            Add(black, 2);
372            MediaPlayer.Stop();
373
374            CreateLevel("level_01");
375            hide_player();
376           
377            black.Position = cntr;
378
379            GameObject stage_01_start = new GameObject(405, 39);
380            stage_01_start.Position = cntr;
381            stage_01_start.Image = stage_1_start;
382            Add(stage_01_start, 3);
383
384            double i = 0;
385            Timer start = new Timer();
386            start.Interval = 0.1;
387            start.Timeout += delegate
388            {
389                i++;
390                if (i >= 15) stage_01_start.Destroy();
391                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
392                else stage_01_start.IsVisible = true;
393            };
394            start.Start(15);
395            Pause();
396            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_01, null);
397        };
398        wait.Start(1);
399
400        setwpn_timer();
401    }
402    void start_01()
403    {
404        if (!s001)
405        {
406            black.FadeColorTo(Color.Transparent, 0.5);
407            Timer.SingleShot(0.5, hide_player);
408            Timer.SingleShot(0.5, AddHealthbar);
409
410            s001 = true;
411            Pause();
412            MediaPlayer.Play("Venom");
413            selectsfx.Play();
414        }
415    }
416    void start_02()
417    {
418        if (!s002)
419        {
420            black.FadeColorTo(Color.Transparent, 0.5);
421            player.IsVisible = false;
422            Timer.SingleShot(0.5, hide_player);
423            Timer.SingleShot(0.5, AddHealthbar);
424
425            s002 = true;
426            Pause();
427            MediaPlayer.Play("Macbeth");
428            selectsfx.Play();
429        }
430    }
431    void start_03()
432    {
433        if (!s003)
434        {
435            black.FadeColorTo(Color.Transparent, 0.5);
436            player.IsVisible = false;
437            Timer.SingleShot(0.5, hide_player);
438            Timer.SingleShot(0.5, AddHealthbar);
439
440            s003 = true;
441            Pause();
442            MediaPlayer.Play("Eladard");
443            MediaPlayer.IsRepeating = false;
444            selectsfx.Play();
445        }
446    }
447    void start_04()
448    {
449        if (!s004)
450        {
451            black.FadeColorTo(Color.Transparent, 0.5);
452            player.IsVisible = false;
453            Timer.SingleShot(0.5, hide_player);
454            Timer.SingleShot(0.5, AddHealthbar);
455
456            s004 = true;
457            Pause();
458            MediaPlayer.Stop();
459            selectsfx.Play();
460        }
461    }
462    void hide_player()
463    {
464        if (!player.IsVisible) player.IsVisible = true;
465        else player.IsVisible = false;
466    }
467
468    #region Stage Creation
469
470    void CreateLevel(string level)
471    {
472        Gravity = new Vector(1000, 0);
473
474        TileMap lvl = TileMap.FromLevelAsset(level);
475        lvl.SetTileMethod('x', border);
476        lvl.SetTileMethod('y', bordertop);
477        lvl.SetTileMethod('z', borderbottom);
478        lvl.SetTileMethod('@', filler);
479        lvl.SetTileMethod('%', frontBorder);
480        lvl.SetTileMethod('&', backBorder);
481        lvl.SetTileMethod('#', bulletdes);
482        lvl.SetTileMethod('P', AddPlayer);
483        lvl.SetTileMethod('1', enemy_ship_1);
484        lvl.SetTileMethod('R', enemy_ship_1_red);
485        lvl.SetTileMethod('B', enemy_ship_1_bottom);
486        lvl.SetTileMethod('T', enemy_ship_1_top);
487        lvl.SetTileMethod('2', enemy_ship_2);
488        lvl.SetTileMethod('3', enemy_ship_3);
489        lvl.SetTileMethod('4', enemy_ship_4_top);
490        lvl.SetTileMethod('$', enemy_ship_4_bottom);
491        lvl.SetTileMethod('5', enemy_ship_5);
492        lvl.SetTileMethod('6', enemy_ship_6);
493        lvl.SetTileMethod('G', boss_ship_1);
494        lvl.SetTileMethod('H', boss_ship_2);
495        lvl.SetTileMethod('F', boss_ship_3);
496        lvl.SetTileMethod('A', boss_aj);
497        lvl.Execute(35, 35);
498
499        Level.Background.Color = Color.Black;
500
501        bg = new GameObject(1280, 800);
502        bg.Image = stage1_bg;
503
504        bg2 = new GameObject(1280, 800);
505        bg2.Image = stage1_bg;
506
507        movebg();
508        movebg2();
509
510        if (currentlevel == "level_02")
511        {
512            bg.Image = stage2_bg;
513            bg2.Image = stage2_bg;
514        }
515        else if (currentlevel == "level_03")
516        {
517            bg.Image = stage3_bg;
518            bg2.Image = stage3_bg;
519        }
520        else if (currentlevel == "level_04")
521        {
522            bg.Image = stage_aj;
523            bg2.Image = stage_aj;
524        }
525
526        Add(bg, -3);
527        Add(bg2, -3);
528
529        AddControls();
530
531        Camera.Position = player.Position;
532        //Camera.ZoomFactor = 0.4;
533    }
534    void movebg()
535    {
536        bg.Position = cntr;
537        bg.MoveTo(cntr - new Vector(1280, 0), 900, movebg);
538    }
539    void movebg2()
540    {
541        bg2.Position = cntr + new Vector(1280, 0);
542        bg2.MoveTo(cntr, 900, movebg2);
543    }
544
545    void border(Vector position, double width, double height)
546    {
547        GameObject border2 = new GameObject(width, height);
548        border2.Position = position;
549        //border2.Restitution = 0;
550        //border2.KineticFriction = 0;
551        //border2.StaticFriction = 0;
552        border2.Color = Color.White;
553        border2.Tag = "border";
554        Add(border2, 1);
555    }
556    void filler(Vector position, double width, double height)
557    {
558        GameObject border2 = new GameObject(width, height);
559        border2.Position = position;
560        border2.Color = Color.Transparent;
561        border2.Tag = "filler";
562        border2.MaximumLifetime = TimeSpan.FromSeconds(1);
563        Add(border2, 1);
564    }
565    void bordertop(Vector position, double width, double height)
566    {
567        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width, height);
568        border2.Position = position;
569        //border2.Restitution = 0;
570        //border2.KineticFriction = 0;
571        //border2.StaticFriction = 0;
572        border2.Color = Color.Black;
573        border2.Tag = "border";
574        border2.Image = border_top;
575        Add(border2, 1);
576    }
577    void borderbottom(Vector position, double width, double height)
578    {
579        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width * 1.5, height);
580        border2.Position = position;
581        border2.Restitution = 0;
582        border2.KineticFriction = 0;
583        border2.StaticFriction = 0;
584        border2.Color = Color.Black;
585        border2.Tag = "border";
586        border2.Image = border_bottom;
587        Add(border2, 1);
588    }
589    void frontBorder(Vector position, double width, double height)
590    {
591        frontborder border = new frontborder(width, height);
592        border.Position = position;
593        border.Color = Color.White;
594        border.Restitution = 0;
595        border.Tag = "border";
596        border.IgnoresCollisionResponse = true;
597        border.IgnoresPhysicsLogics = true;
598        AddCollisionHandler<PhysicsObject, player>(border, frontBorderCollision);
599        AddCollisionHandler<PhysicsObject, enemy>(border, frontBorderCollisionEnemy);
600        Add(border);
601    }
602    void backBorder(Vector position, double width, double height)
603    {
604        backborder border = new backborder(width, height);
605        border.Position = position;
606        border.Color = Color.White;
607        border.Restitution = 0;
608        border.Tag = "border";
609        border.IgnoresCollisionResponse = true;
610        border.IgnoresCollisionResponse = true;
611        AddCollisionHandler<PhysicsObject, player>(border, backBorderCollision);
612        //AddCollisionHandler<PhysicsObject, enemy>(border, backBorderCollisionEnemy);
613        Add(border);
614    }
615    void bulletdes(Vector position, double width, double height)
616    {
617        bulletdes border = new bulletdes(width, height);
618        border.Position = position;
619        border.Color = Color.Black;
620        border.Restitution = 0;
621        border.Tag = "border";
622        border.IgnoresCollisionResponse = true;
623        border.IgnoresPhysicsLogics = true;
624        Add(border, 1);
625    }
626    void frontBorderCollision(PhysicsObject border, PhysicsObject target)
627    {
628        player.health.Value = player.health.Value - player.health.Value;
629        hurtsfx.Play();
630        explosionsfx.Play();
631        explosion_animation2(target);
632        playership.Destroy();
633
634    }
635    void frontBorderCollisionEnemy(PhysicsObject border, enemy enemy)
636    {
637        enemy.canShoot = true;
638
639    }
640    void backBorderCollision(PhysicsObject border, PhysicsObject target)
641    {
642        player.health.Value = player.health.Value - player.health.Value;
643        hurtsfx.Play();
644        explosionsfx.Play();
645        explosion_animation2(target);
646        playership.Destroy();
647    }
648    void backBorderCollisionEnemy(PhysicsObject border, enemy enemy)
649    {
650        enemy.Destroy();
651    }
652
653    #endregion
654
655    #region Player
656             
657    void AddPlayer(Vector pos, double width, double height)
658    {
659        cntr = pos;
660
661        player = new player(7, 8);
662        playership = new PhysicsObject(47, 46);
663
664        player.Shape = Shape.Circle;
665        player.Color = Color.Black;
666        player.Restitution = 0;
667        player.CanRotate = false;
668        player.Mass = int.MaxValue;
669        player.KineticFriction = 0;
670        player.StaticFriction = 0;
671        player.Image = hitbox;
672        player.IgnoresGravity = true;
673        player.Position = pos;
674        player.Tag = "player1";
675        Add(player,2);
676
677        if (cursorpos == 0)
678        {
679            playership.Image = player_ship_01;
680            playership.Size = new Vector(37, 48);
681        }
682        else if (cursorpos == 1) playership.Image = player_ship_02;
683        playership.IsVisible = true;
684        playership.IgnoresCollisionResponse = true;
685        playership.IgnoresPhysicsLogics = true;
686        playership.Angle = Angle.FromDegrees(-90);
687        playership.CanRotate = false;
688        playership.Tag = "playership";
689        playership.Position = player.Position;
690
691        FollowerBrain playershipbrain = new FollowerBrain(player);
692        playershipbrain.Speed = 500;
693        playershipbrain.DistanceFar = 5000;
694        playershipbrain.DistanceClose = 0;
695        playershipbrain.StopWhenTargetClose = true;
696        playershipbrain.Active = true;
697        playershipbrain.TurnWhileMoving = false;
698
699        playership.Brain = playershipbrain;
700
701        Add(playership, -1);
702        drd_type = cursorpos;
703
704    }
705    void AddHealthbar()
706    {
707        healthBar = new ProgressBar(135, 10);
708        healthBar.BorderColor = Color.Black;
709        healthBar.Color = Color.Black;
710        healthBar.BarColor = Color.Red;
711        healthBar.BindTo(player.health);
712        healthBar.Angle = Angle.RightAngle;
713        healthBar.Position = new Vector(Screen.LeftSafe + 30, Screen.BottomSafe + 200);
714        Add(healthBar);
715    }
716    void AddControls()
717
718    {
719        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
720        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, move, null);
721
722        ControllerOne.Listen(Button.B, ButtonState.Pressed, shoot, null);
723        ControllerOne.Listen(Button.B, ButtonState.Released, stopShoot, null);
724
725        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
726
727        //cheat
728#if DEBUG
729        Keyboard.Listen(Key.U, ButtonState.Pressed, cheat_upgrade, null);
730        Keyboard.Listen(Key.I, ButtonState.Pressed, cheat_damage, null);
731        Keyboard.Listen(Key.O, ButtonState.Pressed, cheat_spread, null);
732        Keyboard.Listen(Key.H, ButtonState.Pressed, cheat_fullhp, null);
733#endif
734
735    }
736    void move(AnalogState speed)
737    {
738        player.Velocity = speed.StateVector * player_speed / (ControllerOne.LeftTriggerState+1);
739    }
740
741    void cheat_upgrade()
742    {
743        drd_level.Value++;
744
745        if (drd_level.Value == 1)
746        {
747            if (drd_type == 0) droid(new Vector(-45, 0));
748            else if (drd_type == 1) droid(new Vector(40, 0));
749        }
750        else if (drd_level.Value == 2)
751        {
752            if (drd_type == 0)
753            {
754                droid(new Vector(-45, 30));
755                droid(new Vector(-45, -30));
756            }
757            else if (drd_type == 1)
758            {
759                droid(new Vector(-10, 35));
760                droid(new Vector(-10, -35));
761            }
762        }
763        else if (drd_level.Value == 3)
764        {
765            if (drd_type == 0)
766            {
767                droid(new Vector(-30, 30));
768                droid(new Vector(-30, -30));
769                droid(new Vector(-50, 0));
770            }
771            else if (drd_type == 1)
772            {
773                droid(new Vector(40, 0));
774                droid(new Vector(-10, 35));
775                droid(new Vector(-10, -35));
776            }
777        }
778        else if (drd_level.Value == 4)
779        {
780            if (drd_type == 0)
781            {
782                droid(new Vector(-30, 50));
783                droid(new Vector(-30, -50));
784                droid(new Vector(-50, 30));
785                droid(new Vector(-50, -30));
786            }
787            else if (drd_type == 1)
788            {
789                droid(new Vector(-30, 55));
790                droid(new Vector(-30, -55));
791                droid(new Vector(-10, 35));
792                droid(new Vector(-10, -35));
793            }
794        }
795    }
796    void cheat_damage()
797    {
798        wpn_damageRatio.Value++;
799    }
800    void cheat_spread()
801    {
802        wpn_spread.Value++;
803    }
804    void cheat_fullhp()
805    {
806        player.health.MaxValue = 100000000;
807        player.health.Value = 100000000;
808    }
809    void cheat_skiptolvl1()
810    {
811
812        ClearControls();
813
814        selectsfx.Play();
815        MediaPlayer.Stop();
816        black = new GameObject(Screen.Width, Screen.Height);
817        black.Position = cntr;
818        black.Color = Color.Transparent;
819        black.FadeColorTo(Color.Black, 0.5);
820        Add(black, 2);
821
822        Timer wait = new Timer();
823        wait.Interval = 1;
824        wait.Timeout += delegate
825        {
826            ClearAll();
827            black = new GameObject(Screen.Width, Screen.Height);
828            black.Color = Color.Black;
829            Add(black, 2);
830            MediaPlayer.Stop();
831
832            currentlevel = "level_01";
833            CreateLevel("level_01");
834            hide_player();
835
836            black.Position = cntr;
837
838            GameObject stage_01_start = new GameObject(405, 39);
839            stage_01_start.Position = cntr;
840            stage_01_start.Image = stage_1_start;
841            Add(stage_01_start, 3);
842
843            double i = 0;
844            Timer start = new Timer();
845            start.Interval = 0.1;
846            start.Timeout += delegate
847            {
848                i++;
849                if (i >= 15) stage_01_start.Destroy();
850                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
851                else stage_01_start.IsVisible = true;
852            };
853            start.Start(15);
854            Pause();
855            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_01, null);
856        };
857        wait.Start(1);
858
859        setwpn_timer();
860    }
861    void cheat_skiptolvl2()
862    {
863
864        ClearControls();
865
866        selectsfx.Play();
867        MediaPlayer.Stop();
868        black = new GameObject(Screen.Width, Screen.Height);
869        black.Position = cntr;
870        black.Color = Color.Transparent;
871        black.FadeColorTo(Color.Black, 0.5);
872        Add(black, 2);
873
874        Timer wait = new Timer();
875        wait.Interval = 1;
876        wait.Timeout += delegate
877        {
878            ClearAll();
879            black = new GameObject(Screen.Width, Screen.Height);
880            black.Color = Color.Black;
881            Add(black, 2);
882            MediaPlayer.Stop();
883
884            currentlevel = "level_02";
885            CreateLevel("level_02");
886            hide_player();
887
888            black.Position = cntr;
889
890            GameObject stage_01_start = new GameObject(405, 39);
891            stage_01_start.Position = cntr;
892            stage_01_start.Image = stage_2_start;
893            Add(stage_01_start, 3);
894
895            double i = 0;
896            Timer start = new Timer();
897            start.Interval = 0.1;
898            start.Timeout += delegate
899            {
900                i++;
901                if (i >= 15) stage_01_start.Destroy();
902                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
903                else stage_01_start.IsVisible = true;
904            };
905            start.Start(15);
906            Pause();
907            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_02, null);
908        };
909        wait.Start(1);
910
911        setwpn_timer();
912    }
913    void cheat_skiptolvl3()
914    {
915
916        ClearControls();
917
918        selectsfx.Play();
919        MediaPlayer.Stop();
920        black = new GameObject(Screen.Width, Screen.Height);
921        black.Position = cntr;
922        black.Color = Color.Transparent;
923        black.FadeColorTo(Color.Black, 0.5);
924        Add(black, 2);
925
926        Timer wait = new Timer();
927        wait.Interval = 1;
928        wait.Timeout += delegate
929        {
930            ClearAll();
931            black = new GameObject(Screen.Width, Screen.Height);
932            black.Color = Color.Black;
933            Add(black, 2);
934            MediaPlayer.Stop();
935
936            currentlevel = "level_03";
937            CreateLevel("level_03");
938            hide_player();
939
940            black.Position = cntr;
941
942            GameObject stage_01_start = new GameObject(405, 39);
943            stage_01_start.Position = cntr;
944            stage_01_start.Image = stage_3_start;
945            Add(stage_01_start, 3);
946
947            double i = 0;
948            Timer start = new Timer();
949            start.Interval = 0.1;
950            start.Timeout += delegate
951            {
952                i++;
953                if (i >= 15) stage_01_start.Destroy();
954                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
955                else stage_01_start.IsVisible = true;
956            };
957            start.Start(15);
958            Pause();
959            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_03, null);
960        };
961        wait.Start(1);
962
963        setwpn_timer();
964    }
965    void cheat_skiptolvl4()
966    {
967
968        ClearControls();
969
970        selectsfx.Play();
971        MediaPlayer.Stop();
972        black = new GameObject(Screen.Width, Screen.Height);
973        black.Position = cntr;
974        black.Color = Color.Transparent;
975        black.FadeColorTo(Color.Black, 0.5);
976        Add(black, 2);
977
978        Timer wait = new Timer();
979        wait.Interval = 1;
980        wait.Timeout += delegate
981        {
982            ClearAll();
983            black = new GameObject(Screen.Width, Screen.Height);
984            black.Color = Color.Black;
985            Add(black, 2);
986            MediaPlayer.Stop();
987
988            currentlevel = "level_04";
989            CreateLevel("level_04");
990            hide_player();
991
992            black.Position = cntr;
993
994            GameObject stage_01_start = new GameObject(405, 39);
995            stage_01_start.Position = cntr;
996            stage_01_start.Image = bonus_stage_start;
997            Add(stage_01_start, 3);
998
999            double i = 0;
1000            Timer start = new Timer();
1001            start.Interval = 0.1;
1002            start.Timeout += delegate
1003            {
1004                i++;
1005                if (i >= 15) stage_01_start.Destroy();
1006                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
1007                else stage_01_start.IsVisible = true;
1008            };
1009            start.Start(15);
1010            Pause();
1011            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_04, null);
1012        };
1013        wait.Start(1);
1014
1015        setwpn_timer();
1016    }
1017    #endregion
1018
1019    #region Weapons
1020
1021    void shoot()
1022    {
1023        //wpn_timer.Stop();
1024        wpn_timer.Interval = wpn_shootRate;
1025
1026        wpn_timer.Start();
1027    }
1028    void setwpn_timer()
1029    {
1030            wpn_timer.Timeout += delegate
1031        {
1032            if (!player.IsDestroyed)
1033            {
1034                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
1035                {
1036                    Weapon();
1037                    wpn_timer.Interval = wpn_shootRate;
1038                    shootsfx.Play();
1039                }
1040            };
1041        };
1042    }
1043    void stopShoot()
1044    {
1045        wpn_timer.Stop();
1046    }
1047    void Weapon()
1048    {
1049        if (wpn_spread.Value == 1)
1050        {
1051            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 0), new Vector(40, 12) );
1052            Projectile(player.Position + new Vector(10, -5), new Vector(1200, 0), new Vector(40, 12) );
1053        }
1054        else if (wpn_spread.Value == 2)
1055        {
1056            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 0), new Vector(40, 12) );
1057            Projectile(player.Position + new Vector(10, -10), new Vector(1200, 0), new Vector(40, 12) );
1058            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
1059        }
1060        else if (wpn_spread.Value == 3)
1061        {
1062            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
1063            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
1064            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 20), new Vector(40, 12) );
1065            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -20), new Vector(40, 12) );
1066        }
1067        else if (wpn_spread.Value == 4)
1068        {
1069            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
1070            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
1071            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
1072            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
1073            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
1074        }
1075        else if (wpn_spread.Value == 5)
1076        {
1077            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
1078            Projectile(player.Position + new Vector(10, -0), new Vector(1200, 0), new Vector(40, 12) );
1079
1080            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
1081            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
1082
1083            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 55), new Vector(40, 12) );
1084            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -55), new Vector(40, 12) );
1085        }
1086        else if (wpn_spread.Value == 6)
1087        {
1088            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
1089            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
1090            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
1091            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
1092            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
1093
1094            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 75), new Vector(40, 12) );
1095            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -75), new Vector(40, 12) );
1096        }
1097        else if (wpn_spread.Value == 7)
1098        {
1099            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12) );
1100            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12) );
1101            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
1102            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
1103
1104            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12) );
1105            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
1106
1107            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
1108            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
1109        }
1110        else if (wpn_spread.Value == 8)
1111        {
1112            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
1113            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
1114            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
1115            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
1116            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
1117
1118            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
1119            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
1120
1121            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
1122            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
1123        }
1124        else if (wpn_spread.Value == 9)
1125        {
1126            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12));
1127            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12));
1128            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 15), new Vector(40, 12));
1129            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -15), new Vector(40, 12));
1130
1131            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
1132            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12));
1133
1134            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12));
1135            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12));
1136
1137            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 75), new Vector(40, 12));
1138            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -75), new Vector(40, 12));
1139        }
1140        else if (wpn_spread.Value == 10)
1141        {
1142            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
1143            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12));
1144            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12));
1145            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
1146            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
1147
1148            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 75), new Vector(40, 12) );
1149            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -75), new Vector(40, 12) );
1150
1151            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 100), new Vector(40, 12) );
1152            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -100), new Vector(40, 12) );
1153
1154            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 125), new Vector(40, 12) );
1155            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -125), new Vector(40, 12) );
1156        }
1157    }
1158    void Projectile(Vector pos, Vector vel, Vector size)
1159    {
1160        bullet projectile = new bullet(size.X, size.Y);
1161        projectile.Shape = Shape.Diamond;
1162        projectile.IgnoresGravity = true;
1163        projectile.Position = pos;
1164        projectile.Tag = "player_bullet";
1165
1166        if (wpn_damageRatio <= 2) projectile.Image = bullet_player01;
1167        else if (wpn_damageRatio.Value <= 4) projectile.Image = bullet_player03;
1168        else if (wpn_damageRatio.Value <= 6) projectile.Image = bullet_player04;
1169        else if (wpn_damageRatio.Value <= 8) projectile.Image = bullet_player02;
1170        else if (wpn_damageRatio.Value <= 10) projectile.Image = bullet_player05;
1171
1172        projectile.damage = wpn_damageRatio.Value;
1173        projectile.IgnoresCollisionResponse = true;
1174
1175        projectile.CollisionIgnoreGroup = 2;
1176
1177        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
1178        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
1179
1180        Add(projectile, 0);
1181        projectile.Hit(vel/1.2);
1182        projectile.Angle = projectile.Velocity.Angle;
1183    }
1184
1185    void droid(Vector pos)
1186    {
1187        droid drd = new droid(13,13);
1188        drd.IgnoresCollisionResponse = true;
1189        drd.CollisionIgnoreGroup = 2;
1190        drd.Position = player.Position + pos;
1191        drd.droid_level.Value = drd_level;
1192        if (cursorpos == 0) drd.Animation = droid2_anim;
1193        else if (cursorpos == 1) drd.Animation = droid_anim;
1194        drd.Animation.Start();
1195        setdrd_shoot_timer(drd);
1196
1197        Timer move = new Timer();
1198        move.Interval = 0.01;
1199        move.Timeout += delegate
1200        {
1201            if (player.IsDestroyed) drd.Destroy();
1202            if (drd.IsDestroyed) move.Stop();
1203
1204            if (drd.Position != player.Position + pos)
1205            {
1206                drd.Position = player.Position + pos;
1207            }
1208            if (drd.droid_level.Value != drd_level.Value && drd_level.Value != 5) drd.Destroy();
1209        };
1210        move.Start();
1211
1212        Add(drd);
1213    }
1214    void setdrd_shoot_timer(droid drd)
1215    {
1216        Timer drdshoot = new Timer();
1217        drdshoot.Interval = drd_shootRate;
1218        if (cursorpos == 0)
1219        {
1220            drdshoot.Timeout += delegate
1221            {
1222                if (drd.IsDestroyed) drdshoot.Stop();
1223                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
1224                {
1225                    droidprojectile(drd.Position, new Vector(-400, RandomGen.NextDouble(100, 150)), new Vector(24, 13));
1226                    droidprojectile(drd.Position, new Vector(-400, RandomGen.NextDouble(-150, -100)), new Vector(24, 13));
1227                }
1228            };
1229        }
1230        else if (cursorpos == 1)
1231        {
1232            drdshoot.Timeout += delegate
1233            {
1234                if (drd.IsDestroyed) drdshoot.Stop();
1235                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
1236                {
1237                    if (drd.IsDestroyed) drdshoot.Stop();
1238                    droidlaser(drd.Position + new Vector(37, 0), new Vector(1400, 0), new Vector(60, 5));
1239                }
1240            };
1241        }
1242
1243        drdshoot.Start();
1244    }
1245
1246    void droidprojectile(Vector pos, Vector vel, Vector size)
1247    {
1248        bullet projectile = new bullet(size.X, size.Y/2);
1249        projectile.Shape = Shape.Diamond;
1250        projectile.IgnoresGravity = false;
1251        projectile.Position = pos;
1252        projectile.Tag = "player_bullet";
1253        projectile.Image = bullet_droid;
1254        projectile.damage = drd_damageRatio.Value;
1255        projectile.LinearDamping = 0.99;
1256
1257        projectile.IgnoresCollisionResponse = true;
1258
1259        projectile.CollisionIgnoreGroup = 2;
1260        projectile.MaximumLifetime = TimeSpan.FromSeconds(3);
1261
1262        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
1263        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
1264
1265        Add(projectile, -1);
1266        projectile.Hit(vel);
1267        projectile.Angle = projectile.Velocity.Angle;
1268
1269        Timer angle = new Timer();
1270        angle.Interval = 0.05;
1271        angle.Timeout += delegate
1272        {
1273            projectile.Angle = projectile.Velocity.Angle;
1274            if (projectile.IsDestroyed) { angle.Stop(); };
1275        };
1276        angle.Start();
1277    }
1278    void droidlaser(Vector pos, Vector vel, Vector size)
1279    {
1280        bullet projectile = new bullet(size.X, size.Y);
1281        projectile.Shape = Shape.Rectangle;
1282        projectile.IgnoresGravity = true;
1283        projectile.Position = pos;
1284        projectile.Tag = "player_bullet";
1285        projectile.Image = bullet_laser;
1286        projectile.damage = drd_damageRatio.Value * 2;
1287
1288        projectile.IgnoresCollisionResponse = true;
1289
1290        projectile.CollisionIgnoreGroup = 2;
1291        projectile.MaximumLifetime = TimeSpan.FromSeconds(1.2);
1292
1293        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
1294        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
1295
1296        Add(projectile, -1);
1297        projectile.Hit(vel);
1298
1299    }
1300
1301    #endregion
1302
1303    #region Enemies
1304
1305    void enemy_ship_1(Vector pos, double width, double height)
1306    {
1307        enemy enemyship = new enemy(70, 35);
1308        enemyship.Shape = Shape.Circle;
1309        enemyship.Color = Color.Black;
1310        enemyship.Position = pos;
1311        enemyship.IgnoresCollisionResponse = true;
1312        enemyship.CollisionIgnoreGroup = 3;
1313        enemyship.health.MaxValue = 10;
1314        enemyship.Image = enemy_ship_01;
1315
1316        Add(enemyship, -1);
1317        enemyship.Hit(stagespeed);
1318        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1319        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_frontborder);
1320    }
1321    void enemy_ship_1_frontborder(enemy enemyship, frontborder border)
1322    {
1323        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1324    }
1325    void enemy_ship_1_red(Vector pos, double width, double height)
1326    {
1327        enemy enemyship = new enemy(70, 35);
1328        enemyship.Shape = Shape.Circle;
1329        enemyship.Color = Color.Black;
1330        enemyship.Position = pos;
1331        enemyship.IgnoresCollisionResponse = true;
1332        enemyship.health.MaxValue = 10;
1333        enemyship.Image = enemy_ship_01_red;
1334        enemyship.CollisionIgnoreGroup = 3;
1335
1336        Add(enemyship, -1);
1337        enemyship.Hit(stagespeed);
1338        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1339        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_red_frontborder);
1340    }
1341    void enemy_ship_1_red_frontborder(enemy enemyship, frontborder border)
1342    {
1343        if (!enemyship.canShoot)
1344        {
1345            enemyship.Angle = Angle.FromDegrees(180);
1346            enemyship.Velocity = -stagespeed;
1347            enemyship.Position = new Vector(border.X-1400, enemyship.Position.Y);
1348            enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1349
1350            enemyship.canShoot = true;
1351        };
1352    }
1353    void enemy_ship_1_bottom(Vector pos, double width, double height)
1354    {
1355        enemy enemyship = new enemy(35, 70);
1356        enemyship.Shape = Shape.Circle;
1357        enemyship.Color = Color.Black;
1358        enemyship.Position = pos;
1359        enemyship.IgnoresCollisionResponse = true;
1360        enemyship.CollisionIgnoreGroup = 3;
1361        enemyship.health.MaxValue = 10;
1362        enemyship.Image = enemy_ship_01_blue;
1363        enemyship.Angle = Angle.FromDegrees(90);
1364
1365        Add(enemyship, -1);
1366        enemyship.Hit(stagespeed);
1367        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1368        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_bottom_frontborder);
1369    }
1370    void enemy_ship_1_bottom_frontborder(PhysicsObject enemyship, frontborder br)
1371    {
1372        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1373        enemyship.Angle = Angle.FromDegrees(0);
1374        enemyship.Velocity = new Vector(0, -stagespeed.X/1.7);
1375        enemyship.Position = new Vector(cntr.X + enemyship.Y, -405);
1376    }
1377    void enemy_ship_1_top(Vector pos, double width, double height)
1378    {
1379        enemy enemyship = new enemy(35, 70);
1380        enemyship.Shape = Shape.Circle;
1381        enemyship.Color = Color.Black;
1382        enemyship.Position = pos;
1383        enemyship.IgnoresCollisionResponse = true;
1384        enemyship.CollisionIgnoreGroup = 3;
1385        enemyship.health.MaxValue = 10;
1386        enemyship.Image = enemy_ship_01_blue_inverted;
1387        enemyship.Angle = Angle.FromDegrees(90);
1388
1389        Add(enemyship, -1);
1390        enemyship.Hit(stagespeed);
1391        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1392        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_top_frontborder);
1393    }
1394    void enemy_ship_1_top_frontborder(PhysicsObject enemysship, frontborder br)
1395    {
1396        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1397        enemysship.Angle = Angle.FromDegrees(0);
1398        enemysship.Velocity = new Vector(0, stagespeed.X / 1.75);
1399
1400        enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
1401    }
1402    void enemy_ship_2(Vector pos, double widht, double height)
1403    {
1404        enemy enemyship = new enemy(70, 30);
1405        enemyship.Shape = Shape.Circle;
1406        enemyship.Color = Color.Black;
1407        enemyship.Position = pos;
1408        enemyship.IgnoresCollisionResponse = true;
1409        enemyship.CollisionIgnoreGroup = 3;
1410        enemyship.health.MaxValue = 45;
1411        enemyship.Image = enemy_ship_02;
1412
1413        Add(enemyship, -1);
1414        enemyship.Hit(stagespeed);
1415        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1416        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_2_start_shooting);
1417    }
1418    void enemy_ship_2_start_shooting(enemy enemyship, frontborder border)
1419    {
1420        if (!enemyship.canShoot)
1421        {
1422            enemyship.canShoot = true;
1423
1424            enemyship.Velocity = enemyship.Velocity / 2;
1425
1426            double angle = 0;
1427            double i = 1;
1428            double c = 0;
1429            UnlimitedAngle angle2;
1430
1431            Timer playsfx = new Timer();
1432            playsfx.Interval = 0.05;
1433            playsfx.Timeout += delegate
1434            {
1435                    enemy_shootsfx.Play();
1436            };
1437
1438            Timer shoot = new Timer();
1439            shoot.Interval = 0.01;
1440            shoot.Timeout += delegate
1441            {
1442                if (c >= 200){
1443                    shoot.Stop(); 
1444                playsfx.Stop();
1445                }
1446                else if (c != 200)
1447                {
1448                    if (!enemyship.IsDestroyed)
1449                    {
1450                        angle = angle + i;
1451                        i = i + 0.1;
1452                        c++;
1453                        angle2 = UnlimitedAngle.FromDegrees(angle);
1454                        enemy_shoot_2(enemyship.Position,
1455
1456                            angle2.GetVector() * 500
1457                            );
1458                    }
1459                    else
1460                    {
1461                        shoot.Stop();
1462                        playsfx.Stop();
1463                    }
1464                };
1465
1466            };
1467
1468            Timer wait = new Timer();
1469            wait.Interval = 0.5;
1470            wait.Timeout += delegate
1471            {
1472                if (!enemyship.IsDestroyed)
1473                {
1474                    shoot.Start();
1475                    playsfx.Start();
1476                }
1477                else wait.Stop();
1478            };
1479            wait.Start(1);
1480        }
1481    }
1482    void enemy_ship_3(Vector pos, double width, double height)
1483    {
1484        enemy enemyship = new enemy(71, 56);
1485        enemyship.Shape = Shape.Circle;
1486        enemyship.Position = pos;
1487        enemyship.IgnoresCollisionResponse = true;
1488        enemyship.CollisionIgnoreGroup = 3;
1489        enemyship.health.MaxValue = 60;
1490        enemyship.Image = enemy_ship_03;
1491        enemyship.explosion_scale = 75;
1492
1493        Add(enemyship,-1);
1494        enemyship.Hit(stagespeed);
1495
1496        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_3_start_shooting);
1497        AddCollisionHandler<enemy, player>(enemyship,damagePlayerEnemyShip2);
1498    }
1499    void enemy_ship_3_start_shooting(enemy enemyship, frontborder border)
1500    {
1501        if (!enemyship.canShoot)
1502        {
1503            enemyship.canShoot = true;
1504            enemyship.LifetimeLeft = TimeSpan.FromSeconds(60);
1505            enemyship.Velocity = enemyship.Velocity / 3;
1506            int i = 0;
1507            int e = 0;
1508
1509            Timer playsfx = new Timer();
1510            playsfx.Interval = 0.06;
1511            playsfx.Timeout += delegate
1512            {
1513                enemy_shootsfx.Play();
1514            };
1515
1516            Timer wait = new Timer();
1517
1518            Timer enemy_shoot = new Timer();
1519            enemy_shoot.Interval = 0.02;
1520            enemy_shoot.Timeout += delegate
1521            {
1522                if (e >= 4)
1523                {
1524
1525                    enemy_shoot.Stop();
1526                    playsfx.Stop();
1527                    enemyship.Velocity = stagespeed / 3;
1528                    enemyship.LifetimeLeft = TimeSpan.FromSeconds(6);
1529                };
1530                i++;
1531                if (i == 50 && e != 4)
1532                {
1533                    enemy_shoot.Stop();
1534                    playsfx.Stop();
1535                    wait.Start(1);
1536                    e++;
1537                };
1538                if (enemyship.IsDestroyed)
1539                {
1540                    enemy_shoot.Stop();
1541                    playsfx.Stop();
1542                }
1543                if (e != 4)
1544                {
1545                    enemy_shoot_1(enemyship.Position + new Vector(RandomGen.NextDouble(-30, 30), RandomGen.NextDouble(-30, 30)));
1546                }
1547            };
1548
1549            wait.Interval = 0.5;
1550            wait.Timeout += delegate
1551            {
1552                if (enemyship.IsDestroyed) wait.Stop();
1553                i = 0;
1554                enemy_shoot.Start(50);
1555                playsfx.Start();
1556            };
1557
1558            Timer enemy_start = new Timer();
1559            enemy_start.Interval = 3;
1560            enemy_start.Timeout += delegate
1561            {
1562                if (!enemyship.IsDestroyed)
1563                {
1564                    playsfx.Start();
1565                    enemy_shoot.Start(50);
1566                    enemyship.Velocity = new Vector(0,0);
1567                };
1568            };
1569            enemy_start.Start(1);
1570
1571        };
1572    }
1573    void enemy_ship_4_top(Vector pos, double width, double height)
1574    {
1575        enemy enemyship = new enemy(43, 33);
1576        enemyship.Shape = Shape.Circle;
1577        enemyship.Color = Color.Black;
1578        enemyship.Position = pos;
1579        enemyship.IgnoresCollisionResponse = true;
1580        enemyship.CollisionIgnoreGroup = 3;
1581        enemyship.health.MaxValue = 15;
1582        enemyship.Image = enemy_ship_04;
1583
1584        Add(enemyship, -1);
1585        enemyship.Hit(stagespeed);
1586        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1587        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_top_frontborder);
1588    }
1589    void enemy_ship_4_top_frontborder(enemy enemysship, frontborder br)
1590    {
1591        if (!enemysship.canShoot)
1592        {
1593            enemysship.canShoot = true;
1594
1595            //enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1596            enemysship.Velocity = new Vector(0, stagespeed.X);
1597            enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
1598
1599            Timer chk = new Timer();
1600            chk.Interval = 0.01;
1601            chk.Timeout += delegate
1602            {
1603                if (!enemysship.IsDestroyed)
1604                {
1605                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
1606                    {
1607                        enemysship.Velocity = stagespeed;
1608                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
1609                        chk.Stop();
1610                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1611                    }
1612                }
1613                else if (enemysship.IsDestroyed) chk.Stop();
1614            };
1615
1616            chk.Start();
1617        };
1618    }
1619    void enemy_ship_4_bottom(Vector pos, double width, double height)
1620    {
1621        enemy enemyship = new enemy(43, 33);
1622        enemyship.Shape = Shape.Circle;
1623        enemyship.Color = Color.Black;
1624        enemyship.Position = pos;
1625        enemyship.IgnoresCollisionResponse = true;
1626        enemyship.CollisionIgnoreGroup = 3;
1627        enemyship.health.MaxValue = 15;
1628        enemyship.Image = enemy_ship_04;
1629
1630        Add(enemyship, -1);
1631        enemyship.Hit(stagespeed);
1632        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1633        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_bottom_frontborder);
1634    }
1635    void enemy_ship_4_bottom_frontborder(enemy enemysship, frontborder br)
1636    {
1637        if (!enemysship.canShoot)
1638        {
1639            enemysship.canShoot = true;
1640            enemysship.Velocity = new Vector(0, -stagespeed.X);
1641            enemysship.Position = new Vector(cntr.X + enemysship.Y, -405);
1642
1643            Timer chk = new Timer();
1644            chk.Interval = 0.01;
1645            chk.Timeout += delegate
1646            {
1647                if (!enemysship.IsDestroyed)
1648                {
1649                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
1650                    {
1651                        enemysship.Velocity = stagespeed;
1652                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
1653                        chk.Stop();
1654                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1655                    }
1656                }
1657                else if (enemysship.IsDestroyed) chk.Stop();
1658            };
1659
1660            chk.Start();
1661        };
1662    }
1663    void enemy_ship_5(Vector pos, double width, double height)
1664    {
1665        enemy enemyship = new enemy(62, 49);
1666        enemyship.Shape = Shape.Circle;
1667        enemyship.Position = pos;
1668        enemyship.IgnoresCollisionResponse = true;
1669        enemyship.CollisionIgnoreGroup = 3;
1670        enemyship.health.MaxValue = 45;
1671        enemyship.Image = enemy_ship_05;
1672        enemyship.explosion_scale = 70;
1673
1674        Add(enemyship, -1);
1675        enemyship.Hit(stagespeed);
1676
1677        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_5_start_shooting);
1678        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip2);
1679    }
1680    void enemy_ship_5_start_shooting(enemy enemyship, frontborder border)
1681    {
1682        if (!enemyship.canShoot)
1683        {
1684            enemyship.canShoot = true;
1685            enemyship.LifetimeLeft = TimeSpan.FromSeconds(8.4);
1686            enemyship.Velocity = enemyship.Velocity / 3;
1687
1688            UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1689            UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
1690            UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
1691            UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
1692            double i = 0;
1693
1694            Timer shoot = new Timer();
1695            shoot.Interval = 0.06;
1696            shoot.Timeout += delegate
1697            {
1698                if (!enemyship.IsDestroyed)
1699                {
1700                    i = i + 12;
1701                    angle = UnlimitedAngle.FromDegrees(i);
1702                    angle2 = UnlimitedAngle.FromDegrees(i + 90);
1703                    angle3 = UnlimitedAngle.FromDegrees(i + 180);
1704                    angle4 = UnlimitedAngle.FromDegrees(i + 270);
1705
1706                    enemy_shoot_3(enemyship.Position, angle.GetVector() * 500);
1707                    enemy_shoot_3(enemyship.Position, angle2.GetVector() * 500);
1708                    enemy_shoot_3(enemyship.Position, angle3.GetVector() * 500);
1709                    enemy_shoot_3(enemyship.Position, angle4.GetVector() * 500);
1710
1711                    enemy_shootsfx.Play();
1712                }
1713                else shoot.Stop();
1714            };
1715
1716            Timer wait = new Timer();
1717            wait.Interval = 1;
1718            wait.Timeout += delegate
1719            {
1720                if (!enemyship.IsDestroyed)
1721                {
1722                    shoot.Start();
1723                }
1724                else shoot.Stop();
1725            };
1726
1727            wait.Start(1);
1728        }
1729    }
1730    void enemy_ship_6(Vector pos, double width, double height)
1731    {
1732        enemy enemyship = new enemy(82, 57);
1733        enemyship.Shape = Shape.Circle;
1734        enemyship.Position = pos;
1735        enemyship.IgnoresCollisionResponse = true;
1736        enemyship.CollisionIgnoreGroup = 3;
1737        enemyship.health.MaxValue = 70;
1738        enemyship.Image = enemy_ship_06;
1739        enemyship.explosion_scale = 70;
1740
1741        Add(enemyship, -1);
1742        enemyship.Hit(stagespeed);
1743
1744
1745
1746
1747        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_6_start_shooting);
1748        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip2);
1749    }
1750    void enemy_ship_6_start_shooting(enemy enemyship, frontborder border)
1751    {
1752        if (!enemyship.canShoot)
1753        {
1754            enemyship.canShoot = true;
1755            enemyship.LifetimeLeft = TimeSpan.FromSeconds(8.4);
1756            enemyship.Velocity = enemyship.Velocity / 3;
1757
1758            UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1759            UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(0);
1760            UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(0);
1761            UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(0);
1762            double i = 0;
1763            double c = 0;
1764
1765            Timer wait = new Timer();
1766            Timer shoot = new Timer();
1767            shoot.Interval = 0.1;
1768            shoot.Timeout += delegate
1769            {
1770                if (!enemyship.IsDestroyed)
1771                {
1772                    c++;
1773                    if (c >= 18)
1774                    {
1775                        c = 0;
1776                        shoot.Stop();
1777                        wait.Start(1);
1778                    }
1779
1780                    i = i + 20;
1781                    angle = UnlimitedAngle.FromDegrees(i);
1782                    angle2 = UnlimitedAngle.FromDegrees(i + 90);
1783                    angle3 = UnlimitedAngle.FromDegrees(i + 180);
1784                    angle4 = UnlimitedAngle.FromDegrees(i + 270);
1785
1786                    enemy_shoot_4(enemyship.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1787                    enemy_shoot_4(enemyship.Position, (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1788                    enemy_shoot_4(enemyship.Position, (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1789
1790                    enemy_shoot_4(enemyship.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1791                    enemy_shoot_4(enemyship.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1792                    enemy_shoot_4(enemyship.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1793
1794                    enemy_shoot_4(enemyship.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1795                    enemy_shoot_4(enemyship.Position, (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1796                    enemy_shoot_4(enemyship.Position, (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1797
1798                    enemy_shoot_4(enemyship.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1799                    enemy_shoot_4(enemyship.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1800                    enemy_shoot_4(enemyship.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1801
1802
1803                    enemy_shootsfx.Play();
1804                }
1805                else shoot.Stop();
1806            };
1807
1808            wait.Interval = 1.5;
1809            wait.Timeout += delegate
1810            {
1811                if (enemyship.IsDestroyed) wait.Stop();
1812                shoot.Start();
1813            };
1814
1815            Timer start = new Timer();
1816            start.Interval = 1;
1817            start.Timeout += delegate
1818            {
1819                if (!enemyship.IsDestroyed)
1820                {
1821                    shoot.Start();
1822                }
1823                else shoot.Stop();
1824            };
1825
1826            start.Start(1);
1827        }
1828    }
1829
1830    void enemy_shoot_1(Vector pos)
1831    {
1832        bullet enemy_bullet = new bullet(27, 27);
1833        enemy_bullet.Shape = Shape.Circle;
1834        enemy_bullet.Position = pos;
1835        enemy_bullet.IgnoresCollisionResponse = true;
1836        enemy_bullet.IgnoresGravity = true;
1837        enemy_bullet.CollisionIgnoreGroup = 2;
1838        enemy_bullet.Image = bullet_enemy_05;
1839
1840        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
1841        Add(enemy_bullet, 0);
1842        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1843        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1844    }
1845    void enemy_shoot_2(Vector pos, Vector dir)
1846    {
1847        bullet enemy_bullet = new bullet(27, 27);
1848        enemy_bullet.Shape = Shape.Circle;
1849        enemy_bullet.Position = pos;
1850        enemy_bullet.IgnoresCollisionResponse = true;
1851        enemy_bullet.IgnoresGravity = true;
1852        enemy_bullet.CollisionIgnoreGroup = 2;
1853        enemy_bullet.Image = bullet_enemy_02;
1854
1855        Add(enemy_bullet, 0);
1856        enemy_bullet.Hit(dir/9);
1857        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1858        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1859
1860        Timer wait = new Timer();
1861        wait.Interval = 0.8;
1862        wait.Timeout += delegate
1863        {
1864            enemy_bullet.Velocity = dir;
1865        };
1866        wait.Start(1);
1867    }
1868    void enemy_shoot_3(Vector pos, Vector dir)
1869    {
1870        bullet enemy_bullet = new bullet(27, 27);
1871        enemy_bullet.Shape = Shape.Circle;
1872        enemy_bullet.Position = pos;
1873        enemy_bullet.IgnoresCollisionResponse = true;
1874        enemy_bullet.IgnoresGravity = true;
1875        enemy_bullet.CollisionIgnoreGroup = 2;
1876        enemy_bullet.Image = bullet_enemy_01;
1877
1878        Add(enemy_bullet, 0);
1879        enemy_bullet.Hit(dir);
1880        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1881        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1882
1883    }
1884    void enemy_shoot_4(Vector pos, Vector dir)
1885    {
1886        bullet enemy_bullet = new bullet(15, 35);
1887
1888        Add(enemy_bullet, 0);
1889        enemy_bullet.Shape = Shape.Circle;
1890        enemy_bullet.Position = pos;
1891        enemy_bullet.IgnoresCollisionResponse = true;
1892        enemy_bullet.IgnoresGravity = true;
1893        enemy_bullet.CollisionIgnoreGroup = 2;
1894        enemy_bullet.Image = bullet_enemy_07;
1895        enemy_bullet.Hit(dir);
1896
1897        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(45);
1898        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1899        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1900
1901    }
1902
1903    #endregion
1904
1905    #region Bosses
1906
1907    void boss_ship_1(Vector pos, double width, double height)
1908    {
1909        boss boss_ship = new boss(196, 124);
1910        boss_ship.Shape = Shape.Circle;
1911        boss_ship.Position = pos;
1912        boss_ship.IgnoresCollisionResponse = true;
1913        boss_ship.CollisionIgnoreGroup = 3;
1914        boss_ship.Image = boss_ship_01;
1915
1916        Add(boss_ship, -1);
1917        boss_ship.Hit(stagespeed);
1918        AddCollisionHandler<boss, frontborder>(boss_ship, boss_01_start);
1919        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
1920    }
1921    void boss_01_start(boss boss, frontborder border)
1922    {
1923        if (!boss.canShoot)
1924        {
1925            boss.canShoot = true;
1926            boss.Velocity = boss.Velocity / 8;
1927
1928            Timer wait = new Timer();
1929            wait.Interval = 5;
1930            wait.Timeout += delegate
1931            {
1932                MediaPlayer.Play("Andross");
1933                AddCollisionHandler<boss, bullet>(boss, damageBoss);
1934                MediaPlayer.Volume = 1;
1935                boss.Velocity = new Vector(0, 0);
1936                boss.health.Value = boss.health.MaxValue;
1937                boss_01_start_shooting(boss);
1938            };
1939            wait.Start(1);
1940
1941            Timer fade_volume = new Timer();
1942            fade_volume.Interval = 0.2;
1943            fade_volume.Timeout += delegate
1944            {
1945                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
1946                if (MediaPlayer.Volume == 0)
1947                {
1948                    fade_volume.Stop();
1949                }
1950            };
1951            fade_volume.Start();
1952
1953        }
1954    }
1955    void boss_01_start_shooting(boss boss)
1956    {
1957        int i = 0;
1958
1959        double angle5 = 0;
1960        double c = 1;
1961        UnlimitedAngle angle05;
1962
1963        Timer shoot2 = new Timer();
1964        shoot2.Interval = 0.01;
1965        shoot2.Timeout += delegate
1966        {
1967            if (!boss.IsDestroyed)
1968            {
1969                angle5 = angle5 + c;
1970                c = c + 0.1;
1971                angle05 = UnlimitedAngle.FromDegrees(angle5);
1972                boss_shoot_2(boss.Position,
1973
1974                    angle05.GetVector() * 500
1975                    );
1976            }
1977            else
1978            {
1979                shoot2.Stop();
1980            }
1981        };
1982        Timer wait = new Timer();
1983
1984        Timer enemy_shoot1 = new Timer();
1985        enemy_shoot1.Interval = 0.02;
1986        enemy_shoot1.Timeout += delegate
1987        {
1988            i++;
1989            if (i == 100)
1990            {
1991                enemy_shoot1.Stop();
1992                shoot2.Start();
1993                wait.Start(1);
1994            };
1995            if (boss.IsDestroyed)
1996            {
1997                enemy_shoot1.Stop();
1998            }
1999                boss_shoot_1(boss.Position + new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50)));
2000        };
2001
2002        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
2003        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
2004        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
2005        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
2006        double b = 0;
2007
2008        Timer shoot = new Timer();
2009        shoot.Interval = 0.08;
2010        shoot.Timeout += delegate
2011        {
2012            if (!boss.IsDestroyed)
2013            {
2014                b = b + 12;
2015                angle = UnlimitedAngle.FromDegrees(b);
2016                angle2 = UnlimitedAngle.FromDegrees(b + 90);
2017                angle3 = UnlimitedAngle.FromDegrees(b + 180);
2018                angle4 = UnlimitedAngle.FromDegrees(b + 270);
2019
2020                boss_shoot_3(boss.Position, angle.GetVector() * 400);
2021                boss_shoot_3(boss.Position, angle2.GetVector() * 400);
2022                boss_shoot_3(boss.Position, angle3.GetVector() * 400);
2023                boss_shoot_3(boss.Position, angle4.GetVector() * 400);
2024
2025                enemy_shootsfx.Play();
2026            }
2027            else shoot.Stop();
2028        };
2029
2030        wait.Interval = 0.5;
2031        wait.Timeout += delegate
2032        {
2033            if (boss.IsDestroyed) wait.Stop();
2034            i = 0;
2035            enemy_shoot1.Start(100);
2036            shoot2.Stop();
2037        };
2038
2039        enemy_shoot1.Start();
2040        shoot.Start();
2041    }
2042
2043    void boss_shoot_1(Vector pos)
2044    {
2045        bullet enemy_bullet = new bullet(27, 27);
2046        enemy_bullet.Shape = Shape.Circle;
2047        enemy_bullet.Position = pos;
2048        enemy_bullet.IgnoresCollisionResponse = true;
2049        enemy_bullet.IgnoresGravity = true;
2050        enemy_bullet.CollisionIgnoreGroup = 2;
2051        enemy_bullet.Image = bullet_enemy_06;
2052
2053        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
2054        Add(enemy_bullet, 0);
2055        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2056        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2057    }
2058    void boss_shoot_2(Vector pos, Vector dir)
2059    {
2060        bullet enemy_bullet = new bullet(27, 27);
2061        enemy_bullet.Shape = Shape.Circle;
2062        enemy_bullet.Position = pos;
2063        enemy_bullet.IgnoresCollisionResponse = true;
2064        enemy_bullet.IgnoresGravity = true;
2065        enemy_bullet.CollisionIgnoreGroup = 2;
2066        enemy_bullet.Image = bullet_enemy_06;
2067
2068        Add(enemy_bullet, 0);
2069        enemy_bullet.Hit(dir / 9);
2070        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2071        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2072
2073        Timer wait = new Timer();
2074        wait.Interval = 0.8;
2075        wait.Timeout += delegate
2076        {
2077            enemy_bullet.Velocity = dir;
2078        };
2079        wait.Start(1);
2080    }
2081    void boss_shoot_3(Vector pos, Vector dir)
2082    {
2083        bullet enemy_bullet = new bullet(27, 27);
2084        enemy_bullet.Shape = Shape.Circle;
2085        enemy_bullet.Position = pos;
2086        enemy_bullet.IgnoresCollisionResponse = true;
2087        enemy_bullet.IgnoresGravity = true;
2088        enemy_bullet.CollisionIgnoreGroup = 2;
2089        enemy_bullet.Image = bullet_enemy_06;
2090
2091        Add(enemy_bullet, 0);
2092        enemy_bullet.Hit(dir);
2093        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2094        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2095
2096    }
2097
2098
2099    void boss_ship_2(Vector pos, double width, double height)
2100    {
2101        boss boss_ship = new boss(244, 256);
2102        boss_ship.health.MaxValue = 15000;
2103        boss_ship.health.Value = 15000;
2104        boss_ship.Shape = Shape.FromImage(boss_ship_02);
2105        boss_ship.Position = pos;
2106        boss_ship.IgnoresCollisionResponse = true;
2107        boss_ship.CollisionIgnoreGroup = 3;
2108        boss_ship.Image = boss_ship_02;
2109
2110        Add(boss_ship, -1);
2111        boss_ship.Hit(stagespeed);
2112        AddCollisionHandler<boss, frontborder>(boss_ship, boss_02_start);
2113        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
2114    }
2115    void boss_02_start(boss boss, frontborder border)
2116    {
2117        if (!boss.canShoot)
2118        {
2119            boss.canShoot = true;
2120            boss.Velocity = boss.Velocity / 8;
2121
2122            Timer wait = new Timer();
2123            wait.Interval = 5;
2124            wait.Timeout += delegate
2125            {
2126                MediaPlayer.Play("Andross");
2127                AddCollisionHandler<boss, bullet>(boss, damageBoss);
2128                MediaPlayer.Volume = 1;
2129                boss.Velocity = new Vector(0, 0);
2130                boss.Oscillate(Vector.UnitY, 125, 0.2);
2131
2132                boss_02_start_shooting(boss);
2133            };
2134            wait.Start(1);
2135
2136            Timer fade_volume = new Timer();
2137            fade_volume.Interval = 0.2;
2138            fade_volume.Timeout += delegate
2139            {
2140                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2141                if (MediaPlayer.Volume == 0)
2142                {
2143                    fade_volume.Stop();
2144                }
2145            };
2146            fade_volume.Start();
2147
2148        }
2149    }
2150    void boss_02_start_shooting(boss boss)
2151    {
2152        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
2153        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(0);
2154        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(0);
2155        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(0);
2156        double i = 0;
2157        double c = 0;
2158        double d = 0;
2159        double f = 0;
2160
2161        Timer wait = new Timer();
2162        Timer shoot = new Timer();
2163        Timer shoot2 = new Timer();
2164        Timer shoot3 = new Timer();
2165        Timer shoot4 = new Timer();
2166        shoot.Interval = 0.05;
2167        shoot.Timeout += delegate
2168        {
2169            if (boss.IsDestroyed)
2170            {
2171                wait.Stop();
2172                shoot.Stop();
2173                shoot2.Stop();
2174                shoot3.Stop();
2175                shoot4.Stop();
2176            }
2177            if (!boss.IsDestroyed)
2178            {
2179                c++;
2180                if (c >= 36)
2181                {
2182                    f++;
2183                    d = 1;
2184                    c = 0;
2185                    shoot.Stop();
2186                    wait.Start(1);
2187                }
2188
2189                i = i + 10;
2190                angle = UnlimitedAngle.FromDegrees(i);
2191                angle2 = UnlimitedAngle.FromDegrees(i + 90);
2192                angle3 = UnlimitedAngle.FromDegrees(i + 180);
2193                angle4 = UnlimitedAngle.FromDegrees(i + 270);
2194
2195                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2196                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
2197                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
2198
2199                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2200                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
2201                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
2202
2203                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2204                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
2205                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
2206
2207                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2208                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
2209                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
2210
2211
2212                enemy_shootsfx.Play();
2213            }
2214            else shoot.Stop();
2215        };
2216
2217
2218        UnlimitedAngle angleb = UnlimitedAngle.FromDegrees(0);
2219        UnlimitedAngle angle2b = UnlimitedAngle.FromDegrees(0);
2220        UnlimitedAngle angle3b = UnlimitedAngle.FromDegrees(0);
2221        UnlimitedAngle angle4b = UnlimitedAngle.FromDegrees(0);
2222        double ib = 0;
2223
2224
2225
2226        shoot2.Interval = 0.05;
2227        shoot2.Timeout += delegate
2228        {
2229            if (!boss.IsDestroyed)
2230            {
2231                if (boss.IsDestroyed)
2232                {
2233                    wait.Stop();
2234                    shoot.Stop();
2235                    shoot2.Stop();
2236                    shoot3.Stop();
2237                    shoot4.Stop();
2238                }
2239                c++;
2240                if (c >= 36)
2241                {
2242                    f++;
2243                    d = 0;
2244                    c = 0;
2245                    shoot2.Stop();
2246                    wait.Start(1);
2247                }
2248
2249                ib = ib - 10;
2250                angleb = UnlimitedAngle.FromDegrees(ib);
2251                angle2b = UnlimitedAngle.FromDegrees(ib - 90);
2252                angle3b = UnlimitedAngle.FromDegrees(ib - 180);
2253                angle4b = UnlimitedAngle.FromDegrees(ib - 270);
2254
2255                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2256                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2257                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2258
2259                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2260                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2261                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2262
2263                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2264                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2265                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2266
2267                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2268                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2269                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2270
2271
2272                enemy_shootsfx.Play();
2273            }
2274            else shoot.Stop();
2275        };
2276
2277        shoot3.Interval = 0.05;
2278        shoot3.Timeout += delegate
2279        {
2280            if (boss.IsDestroyed)
2281            {
2282                wait.Stop();
2283                shoot.Stop();
2284                shoot2.Stop();
2285                shoot3.Stop();
2286                shoot4.Stop();
2287            }
2288            if (!boss.IsDestroyed)
2289            {
2290                c++;
2291                if (c >= 36)
2292                {
2293                    c = 0;
2294                    shoot3.Stop();
2295                    wait.Start(1);
2296                }
2297
2298                ib = ib - 10;
2299                angleb = UnlimitedAngle.FromDegrees(ib);
2300                angle2b = UnlimitedAngle.FromDegrees(ib - 90);
2301                angle3b = UnlimitedAngle.FromDegrees(ib - 180);
2302                angle4b = UnlimitedAngle.FromDegrees(ib - 270);
2303
2304                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2305                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2306                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2307
2308                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2309                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2310                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2311
2312                i = i + 10;
2313                angle = UnlimitedAngle.FromDegrees(i);
2314                angle2 = UnlimitedAngle.FromDegrees(i + 90);
2315                angle3 = UnlimitedAngle.FromDegrees(i + 180);
2316                angle4 = UnlimitedAngle.FromDegrees(i + 270);
2317
2318                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2319                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2320                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2321
2322                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2323                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2324                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2325
2326
2327                enemy_shootsfx.Play();
2328            }
2329            else shoot.Stop();
2330        };
2331
2332        double ic = 0;
2333        double jc = 0;
2334        double cb = 0;
2335
2336        UnlimitedAngle anglec = UnlimitedAngle.FromDegrees(0);
2337        UnlimitedAngle anglec2 = UnlimitedAngle.FromDegrees(0);
2338
2339        shoot4.Interval = 0.05;
2340        shoot4.Timeout += delegate
2341        {
2342            if (boss.IsDestroyed)
2343            {
2344                wait.Stop();
2345                shoot.Stop();
2346                shoot2.Stop();
2347                shoot3.Stop();
2348                shoot4.Stop();
2349            }
2350            cb++;
2351            if (cb >= 36)
2352            {
2353                ic = 0;
2354                cb = 0;
2355                shoot4.Stop();
2356                wait.Start(1);
2357            }
2358
2359            ic = ic + 10;
2360            jc = jc - 10;
2361            anglec = UnlimitedAngle.FromDegrees(ic);
2362            anglec2 = UnlimitedAngle.FromDegrees(jc);
2363
2364            boss2_shoot_3(boss.Position, anglec.GetVector() * 500);
2365            boss2_shoot_3(boss.Position, (anglec + UnlimitedAngle.FromDegrees(90)).GetVector() * 480);
2366            boss2_shoot_3(boss.Position, (anglec + UnlimitedAngle.FromDegrees(180)).GetVector() * 480);
2367            boss2_shoot_3(boss.Position, (anglec + UnlimitedAngle.FromDegrees(270)).GetVector() * 480);
2368
2369            boss2_shoot_3(boss.Position, anglec2.GetVector() * 500);
2370            boss2_shoot_3(boss.Position, (anglec2 + UnlimitedAngle.FromDegrees(90)).GetVector() * 520);
2371            boss2_shoot_3(boss.Position, (anglec2 + UnlimitedAngle.FromDegrees(180)).GetVector() * 520);
2372            boss2_shoot_3(boss.Position, (anglec2 + UnlimitedAngle.FromDegrees(270)).GetVector() * 520);
2373
2374            enemy_shootsfx.Play();
2375        };
2376
2377        wait.Interval = 1;
2378        wait.Timeout += delegate
2379        {
2380           
2381            if (boss.IsDestroyed){ 
2382                wait.Stop();
2383                shoot.Stop();
2384                shoot2.Stop();
2385                shoot3.Stop();
2386                shoot4.Stop();
2387            }
2388
2389            if (f >= 2)
2390            {
2391                bool ss = RandomGen.NextBool();
2392
2393                f = 0;
2394
2395                if (ss) shoot3.Start();
2396                else if (!ss) shoot4.Start();
2397            }
2398            else if (d == 0) shoot.Start();
2399            else if (d == 1) shoot2.Start();
2400        };
2401
2402        wait.Start();
2403    }
2404
2405    void boss2_shoot_1(Vector pos, Vector dir)
2406    {
2407        bullet enemy_bullet = new bullet(15, 35);
2408
2409        Add(enemy_bullet, 0);
2410        enemy_bullet.Shape = Shape.Circle;
2411        enemy_bullet.Position = pos;
2412        enemy_bullet.IgnoresCollisionResponse = true;
2413        enemy_bullet.IgnoresGravity = true;
2414        enemy_bullet.CollisionIgnoreGroup = 2;
2415        enemy_bullet.Image = bullet_enemy_08;
2416        enemy_bullet.Hit(dir);
2417
2418        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(45);
2419        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2420        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2421
2422    }
2423    void boss2_shoot_2(Vector pos, Vector dir)
2424    {
2425        bullet enemy_bullet = new bullet(15, 35);
2426
2427        Add(enemy_bullet, 0);
2428        enemy_bullet.Shape = Shape.Circle;
2429        enemy_bullet.Position = pos;
2430        enemy_bullet.IgnoresCollisionResponse = true;
2431        enemy_bullet.IgnoresGravity = true;
2432        enemy_bullet.CollisionIgnoreGroup = 2;
2433        enemy_bullet.Image = bullet_enemy_07;
2434        enemy_bullet.Hit(dir);
2435
2436        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(-45);
2437        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2438        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2439
2440    }
2441    void boss2_shoot_3(Vector pos, Vector dir)
2442    {
2443        bullet enemy_bullet = new bullet(27, 27);
2444        enemy_bullet.Shape = Shape.Circle;
2445        enemy_bullet.Position = pos;
2446        enemy_bullet.IgnoresCollisionResponse = true;
2447        enemy_bullet.IgnoresGravity = true;
2448        enemy_bullet.CollisionIgnoreGroup = 2;
2449        enemy_bullet.Image = RandomGen.SelectOne<Image>(bullet_enemy_03, bullet_enemy_04);
2450
2451        Add(enemy_bullet, 0);
2452        enemy_bullet.Hit(dir);
2453        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2454        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2455    }
2456
2457    void boss_ship_3(Vector pos, double width, double height)
2458    {
2459        boss boss_ship = new boss(258, 256);
2460        boss_ship.health.MaxValue = 20000;
2461        boss_ship.health.Value = 20000;
2462        boss_ship.Shape = Shape.Circle;
2463        boss_ship.Position = pos;
2464        boss_ship.IgnoresCollisionResponse = true;
2465        boss_ship.CollisionIgnoreGroup = 3;
2466        boss_ship.Image = boss_ship_03;
2467
2468        Add(boss_ship, -1);
2469        boss_ship.Hit(stagespeed);
2470        AddCollisionHandler<boss, frontborder>(boss_ship, boss_03_start);
2471        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
2472    }
2473    void boss_03_start(boss boss, frontborder border)
2474    {
2475        if (!boss.canShoot)
2476        {
2477            boss.canShoot = true;
2478            boss.Velocity = boss.Velocity / 8.5;
2479            MediaPlayer.IsRepeating = true;
2480            MediaPlayer.Play("Mirage");
2481
2482            Timer wait = new Timer();
2483            wait.Interval = 5.5;
2484            wait.Timeout += delegate
2485            {
2486                AddCollisionHandler<boss, bullet>(boss, damageBoss);
2487                boss.Velocity = new Vector(0, 0);
2488
2489                boss_03_start_shooting(boss);
2490            };
2491            wait.Start(1);
2492        }
2493    }
2494    void boss_03_start_shooting(boss boss)
2495    {
2496        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
2497        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(0);
2498        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(0);
2499        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(0);
2500
2501        UnlimitedAngle angleb = UnlimitedAngle.FromDegrees(0);
2502        UnlimitedAngle angle2b = UnlimitedAngle.FromDegrees(0);
2503        UnlimitedAngle angle3b = UnlimitedAngle.FromDegrees(0);
2504        UnlimitedAngle angle4b = UnlimitedAngle.FromDegrees(0);
2505        double i = 0;
2506        double ib = 0;
2507        double c = 0;
2508        double d = 0;
2509        double t = 0;
2510        double f = 0;
2511        double f2 = 0;
2512
2513        Timer wait = new Timer();
2514        Timer shoot = new Timer();
2515        Timer shoot2 = new Timer();
2516        Timer shoot3 = new Timer();
2517        Timer shoot4 = new Timer();
2518
2519        shoot.Interval = 0.05;
2520        shoot.Timeout += delegate
2521        {
2522            if (boss.IsDestroyed)
2523            {
2524                wait.Stop();
2525                shoot.Stop();
2526                shoot2.Stop();
2527                shoot3.Stop();
2528                shoot4.Stop();
2529            }
2530            if (!boss.IsDestroyed)
2531            {
2532                c++;
2533                if (c >= 18)
2534                {
2535                    f++;
2536                    f2++;
2537                    d = 1;
2538                    c = 0;
2539                    shoot.Stop();
2540                    wait.Start(1);
2541                }
2542
2543                i = i + 10;
2544                angle = UnlimitedAngle.FromDegrees(i);
2545                angle2 = UnlimitedAngle.FromDegrees(i + 90);
2546                angle3 = UnlimitedAngle.FromDegrees(i + 180);
2547                angle4 = UnlimitedAngle.FromDegrees(i + 270);
2548
2549                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(45));
2550                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 480, Angle.FromDegrees(45));
2551                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 500, Angle.FromDegrees(45));
2552
2553                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(45));
2554                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480, Angle.FromDegrees(45));
2555                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500, Angle.FromDegrees(45));
2556
2557                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(45));
2558                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480, Angle.FromDegrees(45));
2559                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500, Angle.FromDegrees(45));
2560
2561                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(45));
2562                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480, Angle.FromDegrees(45));
2563                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500, Angle.FromDegrees(45));
2564
2565
2566                enemy_shootsfx.Play();
2567            }
2568            else shoot.Stop();
2569        };
2570
2571        shoot2.Interval = 0.05;
2572        shoot2.Timeout += delegate
2573        {
2574            if (boss.IsDestroyed)
2575            {
2576                wait.Stop();
2577                shoot.Stop();
2578                shoot2.Stop();
2579                shoot3.Stop();
2580                shoot4.Stop();
2581            }
2582            if (!boss.IsDestroyed)
2583            {
2584                c++;
2585                if (c >= 18)
2586                {
2587                    f++;
2588                    f2++;
2589                    d = 0;
2590                    c = 0;
2591                    shoot2.Stop();
2592                    wait.Start(1);
2593                }
2594
2595                i = i + 10;
2596                angle = UnlimitedAngle.FromDegrees(-i);
2597                angle2 = UnlimitedAngle.FromDegrees(-i + 90);
2598                angle3 = UnlimitedAngle.FromDegrees(-i + 180);
2599                angle4 = UnlimitedAngle.FromDegrees(-i + 270);
2600
2601                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2602                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2603                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2604
2605                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2606                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2 + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2607                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2 + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2608
2609                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2610                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle3 + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2611                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle3 + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2612
2613                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2614                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4 + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2615                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4 + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2616
2617
2618                enemy_shootsfx.Play();
2619            }
2620            else shoot.Stop();
2621        };
2622
2623        UnlimitedAngle anglec = UnlimitedAngle.FromDegrees(0);
2624        double ic = -270;
2625        double ic2 = 270;
2626        double cc = 0;
2627
2628        shoot3.Interval = 0.06;
2629        shoot3.Timeout += delegate
2630        {
2631            if (cc >= 60)
2632            {
2633                cc = 0;
2634                shoot3.Stop();
2635                if (t == 0) t = 1;
2636                else if (t == 1) t = 0;
2637            }
2638            else if (cc != 60)
2639            {
2640                if (!boss.IsDestroyed)
2641                {
2642                    if (t == 0) anglec = UnlimitedAngle.FromDegrees(ic);
2643                    else if (t == 1) anglec = UnlimitedAngle.FromDegrees(ic2);
2644                    ic  = ic + 6;
2645                    ic2 = ic2 - 6;
2646
2647                    cc++;
2648                    enemy_shoot_2(boss.Position + new Vector(-65, 0),
2649
2650                        anglec.GetVector() * 500
2651                        );
2652
2653                }
2654                else
2655                {
2656                    wait.Stop();
2657                    shoot.Stop();
2658                    shoot2.Stop();
2659                    shoot3.Stop();
2660                    shoot4.Stop();
2661                }
2662            };
2663
2664        };
2665
2666        shoot4.Interval = 0.05;
2667        shoot4.Timeout += delegate
2668        {
2669            if (boss.IsDestroyed)
2670            {
2671                wait.Stop();
2672                shoot.Stop();
2673                shoot2.Stop();
2674                shoot3.Stop();
2675                shoot4.Stop();
2676            }
2677            if (!boss.IsDestroyed)
2678            {
2679                c++;
2680                if (c >= 18)
2681                {
2682                    c = 0;
2683                    f++;
2684                    shoot4.Stop();
2685                    wait.Start(1);
2686                }
2687
2688                ib = ib - 10;
2689                angleb = UnlimitedAngle.FromDegrees(ib);
2690                angle2b = UnlimitedAngle.FromDegrees(ib - 90);
2691                angle3b = UnlimitedAngle.FromDegrees(ib - 180);
2692                angle4b = UnlimitedAngle.FromDegrees(ib - 270);
2693
2694                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2695                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2696                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2697
2698                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2699                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2700                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2701
2702                i = i + 10;
2703                angle = UnlimitedAngle.FromDegrees(i);
2704                angle2 = UnlimitedAngle.FromDegrees(i + 90);
2705                angle3 = UnlimitedAngle.FromDegrees(i + 180);
2706                angle4 = UnlimitedAngle.FromDegrees(i + 270);
2707
2708                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500, Angle.FromDegrees(45));
2709                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520, Angle.FromDegrees(45));
2710                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540, Angle.FromDegrees(45));
2711
2712                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500, Angle.FromDegrees(45));
2713                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520, Angle.FromDegrees(45));
2714                boss3_shoot_1(boss.Position + new Vector(-65, 0), (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540, Angle.FromDegrees(45));
2715
2716
2717                enemy_shootsfx.Play();
2718            }
2719            else shoot.Stop();
2720        };
2721
2722        wait.Interval = 0.2;
2723        wait.Timeout += delegate
2724        {
2725            if (boss.IsDestroyed)
2726            {
2727                wait.Stop();
2728                shoot.Stop();
2729                shoot2.Stop();
2730                shoot3.Stop();
2731                shoot4.Stop();
2732            }
2733            if (f >= 2)
2734            {
2735                f = 0;
2736                shoot3.Start();
2737
2738            }
2739
2740            if (f2 >= 2)
2741            {
2742                f2 = 0;
2743                shoot4.Start();
2744            }
2745            else if (d == 0) shoot.Start();
2746            else if (d == 1) shoot2.Start();
2747        };
2748
2749        wait.Start(1);
2750    }
2751    void boss3_shoot_1(Vector pos, Vector dir, Angle angle)
2752    {
2753        bullet enemy_bullet = new bullet(15, 35);
2754
2755        Add(enemy_bullet, 0);
2756        enemy_bullet.Shape = Shape.Circle;
2757        enemy_bullet.Position = pos;
2758        enemy_bullet.IgnoresCollisionResponse = true;
2759        enemy_bullet.IgnoresGravity = true;
2760        enemy_bullet.CollisionIgnoreGroup = 2;
2761        enemy_bullet.Image = bullet_enemy_09;
2762        enemy_bullet.Hit(dir);
2763
2764        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + angle;
2765        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2766        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2767
2768    }
2769
2770    void boss_aj(Vector pos, double width, double height)
2771    {
2772        boss boss_ship = new boss(234, 326);
2773        boss_ship.health.MaxValue = 25000;
2774        boss_ship.health.Value = 25000;
2775        boss_ship.Shape = Shape.Circle;
2776        boss_ship.Position = pos;
2777        boss_ship.IgnoresCollisionResponse = true;
2778        boss_ship.CollisionIgnoreGroup = 3;
2779        boss_ship.Image = boss_ship_ajnator;
2780
2781        Add(boss_ship, -1);
2782        boss_ship.Hit(stagespeed);
2783        AddCollisionHandler<boss, frontborder>(boss_ship, boss_aj_start);
2784        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
2785    }
2786    void boss_aj_start(boss boss, frontborder border)
2787    {
2788        if (!boss.canShoot)
2789        {
2790            boss.canShoot = true;
2791            boss.Velocity = boss.Velocity / 5;
2792            MediaPlayer.IsRepeating = true;
2793            MediaPlayer.Play("Wild_AJ_Approaches");
2794
2795            Timer wait = new Timer();
2796            wait.Interval = 3;
2797            wait.Timeout += delegate
2798            {
2799                AddCollisionHandler<boss, bullet>(boss, damageBoss);
2800                boss.Velocity = new Vector(0, 0);
2801
2802                boss_aj_start_shooting(boss);
2803            };
2804            wait.Start(1);
2805        }
2806    }
2807    void boss_aj_start_shooting(boss boss)
2808    {
2809        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
2810        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(0);
2811        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(0);
2812        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(0);
2813
2814        UnlimitedAngle angleb = UnlimitedAngle.FromDegrees(0);
2815        UnlimitedAngle angle2b = UnlimitedAngle.FromDegrees(0);
2816        UnlimitedAngle angle3b = UnlimitedAngle.FromDegrees(0);
2817        UnlimitedAngle angle4b = UnlimitedAngle.FromDegrees(0);
2818        double i = 0;
2819        double ib = 0;
2820        double c = 0;
2821        double d = 0;
2822        double t = 0;
2823        double f = 0;
2824        double f2 = 0;
2825
2826        Timer wait = new Timer();
2827        Timer shoot = new Timer();
2828        Timer shoot2 = new Timer();
2829        Timer shoot3 = new Timer();
2830        Timer shoot4 = new Timer();
2831
2832        shoot.Interval = 0.025;
2833        shoot.Timeout += delegate
2834        {
2835            if (boss.IsDestroyed)
2836            {
2837                wait.Stop();
2838                shoot.Stop();
2839                shoot2.Stop();
2840                shoot3.Stop();
2841                shoot4.Stop();
2842            }
2843            if (!boss.IsDestroyed)
2844            {
2845                c++;
2846                if (c >= 36)
2847                {
2848                    f++;
2849                    f2++;
2850                    d = 1;
2851                    c = 0;
2852                    shoot.Stop();
2853                    wait.Start(1);
2854                }
2855
2856                i = i + 10;
2857                angle = UnlimitedAngle.FromDegrees(i);
2858                angle2 = UnlimitedAngle.FromDegrees(i + 90);
2859                angle3 = UnlimitedAngle.FromDegrees(i + 180);
2860                angle4 = UnlimitedAngle.FromDegrees(i + 270);
2861
2862                boss4_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(45));
2863                boss4_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 480, Angle.FromDegrees(45));
2864                boss4_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 500, Angle.FromDegrees(45));
2865
2866                boss4_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(45));
2867                boss4_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480, Angle.FromDegrees(45));
2868                boss4_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500, Angle.FromDegrees(45));
2869
2870                boss4_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(45));
2871                boss4_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480, Angle.FromDegrees(45));
2872                boss4_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500, Angle.FromDegrees(45));
2873
2874                boss4_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(45));
2875                boss4_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480, Angle.FromDegrees(45));
2876                boss4_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500, Angle.FromDegrees(45));
2877
2878
2879                enemy_shootsfx.Play();
2880            }
2881            else shoot.Stop();
2882        };
2883
2884        shoot2.Interval = 0.025;
2885        shoot2.Timeout += delegate
2886        {
2887            if (boss.IsDestroyed)
2888            {
2889                wait.Stop();
2890                shoot.Stop();
2891                shoot2.Stop();
2892                shoot3.Stop();
2893                shoot4.Stop();
2894            }
2895            if (!boss.IsDestroyed)
2896            {
2897                c++;
2898                if (c >= 36)
2899                {
2900                    f++;
2901                    f2++;
2902                    d = 0;
2903                    c = 0;
2904                    shoot2.Stop();
2905                    wait.Start(1);
2906                }
2907
2908                i = i + 10;
2909                angle = UnlimitedAngle.FromDegrees(-i);
2910                angle2 = UnlimitedAngle.FromDegrees(-i + 90);
2911                angle3 = UnlimitedAngle.FromDegrees(-i + 180);
2912                angle4 = UnlimitedAngle.FromDegrees(-i + 270);
2913
2914                boss4_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2915                boss4_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2916                boss4_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2917
2918                boss4_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2919                boss4_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2920                boss4_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2921
2922                boss4_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2923                boss4_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2924                boss4_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2925
2926                boss4_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
2927                boss4_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
2928                boss4_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
2929
2930
2931                enemy_shootsfx.Play();
2932            }
2933            else shoot.Stop();
2934        };
2935
2936        UnlimitedAngle anglec = UnlimitedAngle.FromDegrees(0);
2937        double ic = -270;
2938        double ic2 = 270;
2939        double cc = 0;
2940
2941        shoot3.Interval = 0.03;
2942        shoot3.Timeout += delegate
2943        {
2944            if (cc >= 120)
2945            {
2946                cc = 0;
2947                shoot3.Stop();
2948                if (t == 0) t = 1;
2949                else if (t == 1) t = 0;
2950            }
2951            else if (cc != 120)
2952            {
2953                if (!boss.IsDestroyed)
2954                {
2955                    if (t == 0) anglec = UnlimitedAngle.FromDegrees(ic);
2956                    else if (t == 1) anglec = UnlimitedAngle.FromDegrees(ic2);
2957                    ic = ic + 6;
2958                    ic2 = ic2 - 6;
2959
2960                    cc++;
2961                    boss4_shoot_2(boss.Position,
2962
2963                        anglec.GetVector() * 500
2964                        );
2965
2966                }
2967                else
2968                {
2969                    wait.Stop();
2970                    shoot.Stop();
2971                    shoot2.Stop();
2972                    shoot3.Stop();
2973                    shoot4.Stop();
2974                }
2975            };
2976
2977        };
2978
2979        shoot4.Interval = 0.025;
2980        shoot4.Timeout += delegate
2981        {
2982            if (boss.IsDestroyed)
2983            {
2984                wait.Stop();
2985                shoot.Stop();
2986                shoot2.Stop();
2987                shoot3.Stop();
2988                shoot4.Stop();
2989            }
2990            if (!boss.IsDestroyed)
2991            {
2992                c++;
2993                if (c >= 36)
2994                {
2995                    c = 0;
2996                    f++;
2997                    shoot4.Stop();
2998                    wait.Start(1);
2999                }
3000
3001                ib = ib - 10;
3002                angleb = UnlimitedAngle.FromDegrees(ib);
3003                angle2b = UnlimitedAngle.FromDegrees(ib - 90);
3004                angle3b = UnlimitedAngle.FromDegrees(ib - 180);
3005                angle4b = UnlimitedAngle.FromDegrees(ib - 270);
3006
3007                boss4_shoot_1(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
3008                boss4_shoot_1(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
3009                boss4_shoot_1(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
3010
3011                boss4_shoot_1(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460, Angle.FromDegrees(-45));
3012                boss4_shoot_1(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480, Angle.FromDegrees(-45));
3013                boss4_shoot_1(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500, Angle.FromDegrees(-45));
3014
3015                i = i + 10;
3016                angle = UnlimitedAngle.FromDegrees(i);
3017                angle2 = UnlimitedAngle.FromDegrees(i + 90);
3018                angle3 = UnlimitedAngle.FromDegrees(i + 180);
3019                angle4 = UnlimitedAngle.FromDegrees(i + 270);
3020
3021                boss4_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500, Angle.FromDegrees(45));
3022                boss4_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520, Angle.FromDegrees(45));
3023                boss4_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540, Angle.FromDegrees(45));
3024
3025                boss4_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500, Angle.FromDegrees(45));
3026                boss4_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520, Angle.FromDegrees(45));
3027                boss4_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540, Angle.FromDegrees(45));
3028
3029
3030                enemy_shootsfx.Play();
3031            }
3032            else shoot.Stop();
3033        };
3034
3035        wait.Interval = 0.1;
3036        wait.Timeout += delegate
3037        {
3038            if (boss.IsDestroyed)
3039            {
3040                wait.Stop();
3041                shoot.Stop();
3042                shoot2.Stop();
3043                shoot3.Stop();
3044                shoot4.Stop();
3045            }
3046            if (f >= 2)
3047            {
3048                f = 0;
3049                shoot3.Start();
3050
3051            }
3052
3053            if (f2 >= 2)
3054            {
3055                f2 = 0;
3056                shoot4.Start();
3057            }
3058            else if (d == 0) shoot.Start();
3059            else if (d == 1) shoot2.Start();
3060        };
3061
3062        wait.Start(1);
3063    }
3064
3065    void boss4_shoot_1(Vector pos, Vector dir, Angle angle)
3066    {
3067        bullet enemy_bullet = new bullet(27, 27);
3068
3069        Add(enemy_bullet, 0);
3070        enemy_bullet.Shape = Shape.Circle;
3071        enemy_bullet.Position = pos;
3072        enemy_bullet.IgnoresCollisionResponse = true;
3073        enemy_bullet.IgnoresGravity = true;
3074        enemy_bullet.CollisionIgnoreGroup = 2;
3075        enemy_bullet.Image = bullet_enemy_10;
3076        enemy_bullet.Hit(dir);
3077
3078        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + angle;
3079        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
3080        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
3081
3082    }
3083    void boss4_shoot_2(Vector pos, Vector dir)
3084    {
3085        bullet enemy_bullet = new bullet(54, 54);
3086        enemy_bullet.Shape = Shape.Circle;
3087        enemy_bullet.Position = pos;
3088        enemy_bullet.IgnoresCollisionResponse = true;
3089        enemy_bullet.IgnoresGravity = true;
3090        enemy_bullet.CollisionIgnoreGroup = 2;
3091        enemy_bullet.Image = bullet_enemy_10;
3092
3093        Add(enemy_bullet, 0);
3094        enemy_bullet.Hit(dir / 9);
3095        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
3096        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
3097
3098        Timer wait = new Timer();
3099        wait.Interval = 0.8;
3100        wait.Timeout += delegate
3101        {
3102            enemy_bullet.Velocity = dir/1.5;
3103        };
3104        wait.Start(1);
3105    }
3106
3107    #endregion
3108
3109    #region Power-ups
3110
3111    void powerup(Vector pos)
3112    {
3113        int a = RandomGen.NextInt(1, 11);
3114        if (a == 1)
3115        {
3116            createPowerup(pos);
3117        };
3118    }
3119    void createPowerup(Vector pos)
3120    {
3121        int type = RandomGen.NextInt(1, 9);
3122
3123        PhysicsObject powerup = new PhysicsObject(15, 15);
3124        powerup.Position = pos;
3125        powerup.Tag = "powerup";
3126        powerup.IgnoresCollisionResponse = true;
3127        powerup.IgnoresGravity = true;
3128        powerup.CollisionIgnoreGroup = 4;
3129        powerup.MaximumLifetime = TimeSpan.FromSeconds(5);
3130
3131        FollowerBrain powerup_follow = new FollowerBrain(player);
3132        powerup_follow.DistanceFar = 300;
3133        powerup_follow.Speed = 430;
3134        powerup_follow.Active = true;
3135
3136        powerup.Brain = powerup_follow;
3137
3138        if (type < 5)
3139        {
3140            powerup.Image = powerup_damage;
3141            AddCollisionHandler(powerup, "player1", powerupdamage);
3142        }
3143        else if (type > 5)
3144        {
3145            powerup.Image = powerup_spread;
3146            AddCollisionHandler(powerup, "player1", powerupspread);
3147        }
3148        else if (type == 5)
3149        {
3150            powerup.Image = powerup_upgrade;
3151            AddCollisionHandler(powerup, "player1", powerupupgrade);
3152        }
3153
3154        Add(powerup, -2);
3155    }
3156    void powerupdamage(PhysicsObject powerup, PhysicsObject p)
3157    {
3158        wpn_damageRatio.Value++;
3159        powerup.Destroy();
3160        powerupsfx.Play();
3161
3162        GameObject damageup = new GameObject(121,16);
3163        damageup.Position = p.Position + new Vector(0, 30);
3164        damageup.MaximumLifetime = TimeSpan.FromSeconds(0.75);
3165        damageup.Image = damage_up;
3166
3167        Timer damage = new Timer();
3168        damage.Interval = 0.1;
3169        damage.Timeout += delegate
3170        {
3171            if (damageup.IsDestroyed) damage.Stop();
3172            if (damageup.IsVisible) damageup.IsVisible = false;
3173            else damageup.IsVisible = true;
3174        };
3175
3176        Add(damageup, 2);
3177        damage.Start();
3178    }
3179    void powerupspread(PhysicsObject powerup, PhysicsObject p)
3180    {
3181        wpn_spread.Value++;
3182        powerup.Destroy();
3183        powerupsfx.Play();
3184
3185        GameObject spreadup = new GameObject(121, 16);
3186        spreadup.Position = p.Position + new Vector(0, 30);
3187        spreadup.MaximumLifetime = TimeSpan.FromSeconds(0.75);
3188        spreadup.Image = spread_up;
3189
3190        Timer damage = new Timer();
3191        damage.Interval = 0.1;
3192        damage.Timeout += delegate
3193        {
3194            if (spreadup.IsDestroyed) damage.Stop();
3195            if (spreadup.IsVisible) spreadup.IsVisible = false;
3196            else spreadup.IsVisible = true;
3197        };
3198
3199        Add(spreadup, 2);
3200        damage.Start();
3201    }
3202    void powerupupgrade(PhysicsObject powerup, PhysicsObject p)
3203    {
3204        drd_level.Value++;
3205
3206        powerup.Destroy();
3207        powerupsfx.Play();
3208
3209        GameObject upgrade_pu = new GameObject(98, 16);
3210        upgrade_pu.Position = p.Position + new Vector(0, 30);
3211        upgrade_pu.MaximumLifetime = TimeSpan.FromSeconds(0.75);
3212        upgrade_pu.Image = upgrade;
3213
3214        Timer damage = new Timer();
3215        damage.Interval = 0.1;
3216        damage.Timeout += delegate
3217        {
3218            if (upgrade_pu.IsDestroyed) damage.Stop();
3219            if (upgrade_pu.IsVisible) upgrade_pu.IsVisible = false;
3220            else upgrade_pu.IsVisible = true;
3221        };
3222
3223        Add(upgrade_pu, 2);
3224        damage.Start();
3225
3226        if (drd_level.Value == 1)
3227        {
3228            if (drd_type == 0) droid(new Vector(-45, 0));
3229            else if (drd_type == 1) droid(new Vector(40,0));
3230        }
3231        else if (drd_level.Value == 2)
3232        {
3233            if (drd_type == 0)
3234            {
3235                droid(new Vector(-45, 30));
3236                droid(new Vector(-45, -30));
3237            }
3238            else if (drd_type == 1)
3239            {
3240                droid(new Vector(-10, 35));
3241                droid(new Vector(-10, -35));
3242            }
3243        }
3244        else if (drd_level.Value == 3)
3245        {
3246            if (drd_type == 0)
3247            {
3248                droid(new Vector(-30, 30));
3249                droid(new Vector(-30, -30));
3250                droid(new Vector(-50, 0));
3251            }
3252            else if (drd_type == 1)
3253            {
3254                droid(new Vector(40, 0));
3255                droid(new Vector(-10, 35));
3256                droid(new Vector(-10, -35));
3257            }
3258        }
3259        else if (drd_level.Value == 4)
3260        {
3261            if (drd_type == 0)
3262            {
3263                droid(new Vector(-30, 50));
3264                droid(new Vector(-30, -50));
3265                droid(new Vector(-50, 30));
3266                droid(new Vector(-50, -30));
3267            }
3268            else if (drd_type == 1)
3269            {
3270                droid(new Vector(-30, 55));
3271                droid(new Vector(-30, -55));
3272                droid(new Vector(-10, 35));
3273                droid(new Vector(-10, -35));
3274            }
3275        }
3276
3277
3278    }
3279
3280    #endregion
3281
3282    #region Misc/Colliders
3283
3284    void destroy(PhysicsObject p, PhysicsObject target)
3285    {
3286        p.Destroy();
3287    }
3288    void damagePlayerEnemyShip(enemy b, player p)
3289    {
3290        p.health.Value = p.health.Value - 5;
3291        if (p.health <= 0)
3292        {
3293            explosionsfx.Play();
3294            explosion_animation2(playership);
3295            playership.Destroy();
3296        }
3297        b.Destroy();
3298        hurtsfx.Play();
3299        explosionsfx.Play();
3300        explosion_animation(b);
3301    }
3302    void damagePlayerEnemyShip2(enemy b, player p)
3303    {
3304        p.health.Value = p.health.Value - 5;
3305        if (p.health <= 0)
3306        {
3307            explosionsfx.Play();
3308            explosion_animation2(playership);
3309            playership.Destroy();
3310        }
3311        hurtsfx.Play();
3312    }
3313    void damagePlayerBossShip(boss b, player p)
3314    {
3315        p.health.Value = 0;
3316        explosionsfx.Play();
3317        explosion_animation2(playership);
3318        playership.Destroy();
3319        hurtsfx.Play();
3320    }
3321    void damagePlayerBullet(bullet b, player p)
3322    {
3323        p.health.Value = p.health.Value - b.damage;
3324        if (p.health <= 0)
3325        {
3326            explosion_animation2(playership);
3327            playership.Destroy();
3328            explosionsfx.Play();
3329        }
3330        b.Destroy();
3331        hurtsfx.Play();
3332    }
3333    void damageEnemy(bullet b, enemy e)
3334    {
3335        e.health.Value = e.health.Value - b.damage;
3336        if (e.health.Value <= 0 && e.IsVisible)
3337        {
3338            e.IsVisible = false;
3339            powerup(e.Position);
3340            explosionsfx.Play();
3341            explosion_animation(e);
3342        };
3343        hitsfx.Play();
3344        b.Destroy();
3345       
3346    }
3347    void damageBoss(boss b, bullet bullet)
3348    {
3349            if (bullet.Tag == "player_bullet")
3350            {
3351                bullet.Destroy();
3352                b.health.Value = b.health.Value - bullet.damage;
3353                if (b.health.Value <= 0 && !b001 && b.Image == boss_ship_01)
3354                {
3355                    b001 = true;
3356                    explosion_animation_boss(b);
3357
3358                    Timer fade = new Timer();
3359                    fade.Interval = 0.03;
3360                    fade.Timeout += delegate
3361                    {
3362                        MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
3363                        if (MediaPlayer.Volume == 0)
3364                        {
3365                            fade.Stop();
3366                        }
3367                    };
3368                    fade.Start();
3369
3370                    stage_clear = new GameObject(290, 39);
3371                    stage_clear.Image = stage_1_clear;
3372                    stage_clear.Position = cntr;
3373
3374                    Timer stageclr = new Timer();
3375                    stageclr.Interval = 0.8;
3376                    stageclr.Timeout += delegate
3377                    {
3378                        if (stage_clear.IsVisible) stage_clear.IsVisible = false;
3379                        else stage_clear.IsVisible = true;
3380                    };
3381
3382                    Timer wait = new Timer();
3383                    wait.Interval = 1;
3384                    wait.Timeout += delegate
3385                    {
3386                        Add(stage_clear, 3);
3387                        stageclr.Start();
3388                        SoundEffect.MasterVolume = 0.2;
3389                        MediaPlayer.Stop();
3390                        MediaPlayer.Volume = 1;
3391                        MediaPlayer.IsRepeating = false;
3392                        player.health.Value = player.health.MaxValue;
3393                        MediaPlayer.Play("Stage Clear");
3394
3395                        ControllerOne.Listen(Button.Start, ButtonState.Pressed, nextlevel, null);
3396                    };
3397
3398                    wait.Start(1);
3399                }
3400                else if (b.health.Value <= 0 && !b002 && b.Image == boss_ship_02)
3401                {
3402                    b002 = true;
3403
3404                    explosion_animation_boss(b);
3405
3406                    Timer fade = new Timer();
3407                    fade.Interval = 0.03;
3408                    fade.Timeout += delegate
3409                    {
3410                        MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
3411                        if (MediaPlayer.Volume == 0)
3412                        {
3413                            fade.Stop();
3414                        }
3415                    };
3416                    fade.Start();
3417
3418                    stage2_clear = new GameObject(290, 39);
3419                    stage2_clear.Image = stage_2_clear;
3420                    stage2_clear.Position = cntr;
3421
3422                    Timer stageclr = new Timer();
3423                    stageclr.Interval = 0.8;
3424                    stageclr.Timeout += delegate
3425                    {
3426                        if (stage2_clear.IsVisible) stage2_clear.IsVisible = false;
3427                        else stage2_clear.IsVisible = true;
3428                    };
3429
3430                    Timer wait = new Timer();
3431                    wait.Interval = 1;
3432                    wait.Timeout += delegate
3433                    {
3434                        Add(stage2_clear, 3);
3435                        stageclr.Start();
3436                        SoundEffect.MasterVolume = 0.2;
3437                        MediaPlayer.Stop();
3438                        MediaPlayer.Volume = 1;
3439                        MediaPlayer.IsRepeating = false;
3440                        player.health.Value = player.health.MaxValue;
3441                        MediaPlayer.Play("Stage Clear");
3442
3443                        ControllerOne.Listen(Button.Start, ButtonState.Pressed, nextlevel, null);
3444                    };
3445
3446                    wait.Start(1);
3447                }
3448                else if (b.health.Value <= 0 && !b003 && b.Image == boss_ship_03)
3449                {
3450                    b003 = true;
3451
3452                    explosion_animation_boss(b);
3453
3454                    Timer fade = new Timer();
3455                    fade.Interval = 0.03;
3456                    fade.Timeout += delegate
3457                    {
3458                        MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
3459                        if (MediaPlayer.Volume == 0)
3460                        {
3461                            fade.Stop();
3462                        }
3463                    };
3464                    fade.Start();
3465
3466                    stage3_clear = new GameObject(271, 35);
3467                    stage3_clear.Image = stage_3_clear;
3468                    stage3_clear.Position = cntr;
3469
3470                    Timer stageclr = new Timer();
3471                    stageclr.Interval = 0.8;
3472                    stageclr.Timeout += delegate
3473                    {
3474                        if (stage3_clear.IsVisible) stage3_clear.IsVisible = false;
3475                        else stage3_clear.IsVisible = true;
3476                    };
3477
3478                    Timer wait = new Timer();
3479                    wait.Interval = 1;
3480                    wait.Timeout += delegate
3481                    {
3482                        Add(stage3_clear, 3);
3483                        stageclr.Start();
3484                        SoundEffect.MasterVolume = 0.2;
3485                        MediaPlayer.Stop();
3486                        MediaPlayer.Volume = 1;
3487                        MediaPlayer.IsRepeating = false;
3488                        player.health.Value = player.health.MaxValue;
3489                        MediaPlayer.Play("Stage Clear");
3490
3491                        ControllerOne.Listen(Button.Start, ButtonState.Pressed, nextlevel, null);
3492                    };
3493
3494                    wait.Start(1);
3495                }
3496                else if (b.health.Value <= 0 && !b004 && b.Image == boss_ship_ajnator)
3497                {
3498                    b004 = true;
3499
3500                    explosion_animation_boss(b);
3501
3502                    Timer fade = new Timer();
3503                    fade.Interval = 0.03;
3504                    fade.Timeout += delegate
3505                    {
3506                        MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
3507                        if (MediaPlayer.Volume == 0)
3508                        {
3509                            fade.Stop();
3510                        }
3511                    };
3512                    fade.Start();
3513
3514                    stage4_clear = new GameObject(272, 35);
3515                    stage4_clear.Image = congratulations;
3516                    stage4_clear.Position = cntr;
3517
3518                    Timer stageclr = new Timer();
3519                    stageclr.Interval = 0.8;
3520                    stageclr.Timeout += delegate
3521                    {
3522                        if (stage4_clear.IsVisible) stage4_clear.IsVisible = false;
3523                        else stage4_clear.IsVisible = true;
3524                    };
3525
3526                    Timer wait = new Timer();
3527                    wait.Interval = 1;
3528                    wait.Timeout += delegate
3529                    {
3530                        Add(stage4_clear, 3);
3531                        stageclr.Start();
3532                        SoundEffect.MasterVolume = 0.2;
3533                        MediaPlayer.Stop();
3534                        MediaPlayer.Volume = 1;
3535                        MediaPlayer.IsRepeating = false;
3536                        player.health.Value = player.health.MaxValue;
3537                        MediaPlayer.Play("Simon");
3538                    };
3539
3540                    wait.Start(1);
3541                }
3542
3543                hitsfx.Stop();
3544                hitsfx.Play();
3545            }
3546    }
3547    void explosion_animation(enemy enemyship)
3548    {
3549        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
3550        explosion.Position = enemyship.Position;
3551        explosion.Animation = explosion_anim;
3552        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
3553        Add(explosion,-1);
3554        explosion.Animation.Start(1);
3555    }
3556    void explosion_animation_boss(boss enemyship)
3557    {
3558        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
3559        explosion.Position = enemyship.Position;
3560        explosion.Animation = explosion_anim;
3561        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
3562        Add(explosion, -1);
3563        explosion.Animation.Start(1);
3564    }
3565    void explosion_animation2(PhysicsObject plr)
3566    {
3567        GameObject explosion = new GameObject(80,80);
3568        explosion.Position = plr.Position;
3569        explosion.Animation = explosion_anim;
3570        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
3571        Add(explosion, -1);
3572        explosion.Animation.Start(1);
3573
3574        Timer wait = new Timer();
3575        wait.Interval = 1;
3576        wait.Timeout += delegate
3577        {
3578            SoundEffect.MasterVolume = 0.2;
3579            MediaPlayer.IsRepeating = false;
3580            MediaPlayer.Play("Player_down");
3581
3582            MultiSelectWindow gameover = new MultiSelectWindow("Game Over", "Quit");
3583            gameover.ItemSelected += select_gameover;
3584            Add(gameover);
3585        };
3586        wait.Start(1);
3587
3588    }
3589    void select_gameover(int selection)
3590    {
3591        switch (selection)
3592        {
3593            case 0:
3594                ConfirmExit();
3595                break;
3596        }
3597    }
3598
3599    void nextlevel()
3600    {
3601        ClearControls();
3602        hide_player();
3603        Timer.SingleShot(0.5, ClearGameObjects);
3604
3605        if (currentlevel == "level_01")
3606        {
3607            SoundEffect.MasterVolume = 0.8;
3608            healthBar.Destroy();
3609
3610            selectsfx.Play();
3611            stage_clear.Destroy();
3612
3613            Timer fade = new Timer();
3614            fade.Interval = 0.03;
3615            fade.Timeout += delegate
3616            {
3617                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
3618                if (MediaPlayer.Volume == 0)
3619                {
3620                    fade.Stop();
3621                    MediaPlayer.Stop();
3622                    MediaPlayer.Volume = 1;
3623                }
3624            };
3625            fade.Start();
3626
3627            black = new GameObject(Screen.Width, Screen.Height);
3628            black.Position = cntr;
3629            black.Color = Color.Transparent;
3630
3631            Add(black, 2);
3632            black.FadeColorTo(Color.Black, 0.5);
3633
3634
3635            Timer wait = new Timer();
3636            wait.Interval = 1;
3637            wait.Timeout += delegate
3638            {
3639                drd_level.Value = 0;
3640                wpn_damageRatio.Value = 1;
3641                wpn_spread.Value = 1;
3642
3643                bg.Image = stage2_bg;
3644                bg2.Image = stage2_bg;
3645                ClearControls();
3646
3647                currentlevel = "level_02";
3648                CreateLevel(currentlevel);
3649
3650                GameObject stage_02_start = new GameObject(405, 39);
3651                stage_02_start.Position = cntr;
3652                stage_02_start.Image = stage_2_start;
3653                Add(stage_02_start, 3);
3654
3655                black = new GameObject(Screen.Width, Screen.Height);
3656                black.Position = cntr;
3657                black.Color = Color.Black;
3658                Add(black, 2);
3659
3660                double i = 0;
3661                Timer start = new Timer();
3662                start.Interval = 0.1;
3663                start.Timeout += delegate
3664                {
3665                    i++;
3666                    if (i >= 15) stage_02_start.Destroy();
3667                    if (stage_02_start.IsVisible) stage_02_start.IsVisible = false;
3668                    else stage_02_start.IsVisible = true;
3669                };
3670                Pause();
3671                start.Start(15);
3672                ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_02, null);
3673            };
3674            wait.Start(1);
3675        }
3676        else if (currentlevel == "level_02")
3677        {
3678            SoundEffect.MasterVolume = 0.8;
3679            healthBar.Destroy();
3680
3681            selectsfx.Play();
3682            stage_clear.Destroy();
3683
3684            Timer fade = new Timer();
3685            fade.Interval = 0.03;
3686            fade.Timeout += delegate
3687            {
3688                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
3689                if (MediaPlayer.Volume == 0)
3690                {
3691                    fade.Stop();
3692                    MediaPlayer.Stop();
3693                    MediaPlayer.Volume = 1;
3694                }
3695            };
3696            fade.Start();
3697
3698            black = new GameObject(Screen.Width, Screen.Height);
3699            black.Position = cntr;
3700            black.Color = Color.Transparent;
3701
3702            Add(black, 2);
3703            black.FadeColorTo(Color.Black, 0.5);
3704
3705
3706            Timer wait = new Timer();
3707            wait.Interval = 1;
3708            wait.Timeout += delegate
3709            {
3710                drd_level.Value = 0;
3711                wpn_damageRatio.Value = 1;
3712                wpn_spread.Value = 1;
3713
3714                bg.Image = stage2_bg;
3715                bg2.Image = stage2_bg;
3716                ClearControls();
3717
3718                currentlevel = "level_03";
3719                CreateLevel(currentlevel);
3720
3721                GameObject stage_03_start = new GameObject(405, 39);
3722                stage_03_start.Position = cntr;
3723                stage_03_start.Image = stage_3_start;
3724                Add(stage_03_start, 3);
3725
3726                black = new GameObject(Screen.Width, Screen.Height);
3727                black.Position = cntr;
3728                black.Color = Color.Black;
3729                Add(black, 2);
3730
3731                double i = 0;
3732                Timer start = new Timer();
3733                start.Interval = 0.1;
3734                start.Timeout += delegate
3735                {
3736                    i++;
3737                    if (i >= 15) stage_03_start.Destroy();
3738                    if (stage_03_start.IsVisible) stage_03_start.IsVisible = false;
3739                    else stage_03_start.IsVisible = true;
3740                };
3741                Pause();
3742                start.Start(15);
3743                ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_03, null);
3744            };
3745            wait.Start(1);
3746        }
3747        else if (currentlevel == "level_03")
3748        {
3749            SoundEffect.MasterVolume = 0.8;
3750            healthBar.Destroy();
3751
3752            selectsfx.Play();
3753            stage_clear.Destroy();
3754
3755            Timer fade = new Timer();
3756            fade.Interval = 0.03;
3757            fade.Timeout += delegate
3758            {
3759                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
3760                if (MediaPlayer.Volume == 0)
3761                {
3762                    fade.Stop();
3763                    MediaPlayer.Stop();
3764                    MediaPlayer.Volume = 1;
3765                }
3766            };
3767            fade.Start();
3768
3769            black = new GameObject(Screen.Width, Screen.Height);
3770            black.Position = cntr;
3771            black.Color = Color.Transparent;
3772
3773            Add(black, 2);
3774            black.FadeColorTo(Color.Black, 0.5);
3775
3776
3777            Timer wait = new Timer();
3778            wait.Interval = 1;
3779            wait.Timeout += delegate
3780            {
3781                drd_level.Value = 0;
3782                wpn_damageRatio.Value = 1;
3783                wpn_spread.Value = 1;
3784
3785                bg.Image = stage_aj;
3786                bg2.Image = stage_aj;
3787                ClearControls();
3788
3789                currentlevel = "level_04";
3790                CreateLevel(currentlevel);
3791
3792                GameObject stage_03_start = new GameObject(369, 35);
3793                stage_03_start.Position = cntr;
3794                stage_03_start.Image = bonus_stage_start;
3795                Add(stage_03_start, 3);
3796
3797                black = new GameObject(Screen.Width, Screen.Height);
3798                black.Position = cntr;
3799                black.Color = Color.Black;
3800                Add(black, 2);
3801
3802                double i = 0;
3803                Timer start = new Timer();
3804                start.Interval = 0.1;
3805                start.Timeout += delegate
3806                {
3807                    i++;
3808                    if (i >= 15) stage_03_start.Destroy();
3809                    if (stage_03_start.IsVisible) stage_03_start.IsVisible = false;
3810                    else stage_03_start.IsVisible = true;
3811                };
3812                Pause();
3813                start.Start(15);
3814                ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_04, null);
3815            };
3816            wait.Start(1);
3817        }
3818    }
3819    #endregion
3820}
Note: See TracBrowser for help on using the repository browser.