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

Revision 5653, 97.6 KB checked in by mijoliim, 6 years ago (diff)
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(10, 0, 10);
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_02";
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    //Enemies
127    Image enemy_ship_01 = LoadImage("enemy_ship_01");
128    Image enemy_ship_01_red = LoadImage("enemy_ship_01_red");
129    Image enemy_ship_01_blue = LoadImage("enemy_ship_01_blue");
130    Image enemy_ship_01_blue_inverted = LoadImage("enemy_ship_01_blue_inverted");
131    Image enemy_ship_02 = LoadImage("enemy_ship_02");
132    Image enemy_ship_03 = LoadImage("enemy_ship_03");
133    Image enemy_ship_04 = LoadImage("enemy_ship_04");
134    Image enemy_ship_05 = LoadImage("enemy_ship_05");
135    Image enemy_ship_06 = LoadImage("enemy_ship_06");
136    //Bosses
137    Image boss_ship_01 = LoadImage("boss_ship_01");
138    Image boss_ship_02 = LoadImage("boss_ship_02");
139    Image boss_ship_03 = LoadImage("boss_ship_03");
140    //Powerups
141    Image powerup_damage = LoadImage("powerup_damage");
142    Image powerup_spread = LoadImage("powerup_spread");
143    Image powerup_upgrade = LoadImage("powerup_upgrade");
144    //Borders
145    Image border_top = LoadImage("border_bottom");
146    Image border_bottom = LoadImage("border_top");
147    //Backgrounds
148    Image stage1_bg = LoadImage("stage1_bg");
149    Image stage2_bg = LoadImage("stage2_bg");
150    Image stage3_bg = LoadImage("stage3_bg");
151
152    Image stage_aj = LoadImage("stage_aj");
153    //Animations
154    private Animation explosion_anim;
155    private Animation droid_anim;
156    private Animation droid2_anim;
157    //GUI
158    Image title = LoadImage("title_screen");
159    Image title_02 = LoadImage("title_screen_02");
160    Image press_start_img = LoadImage("Press_Start");
161    Image controls = LoadImage("controls");
162    Image stage_1_clear = LoadImage("stage_1_clear");
163    Image stage_1_start = LoadImage("stage_1_start");
164    Image stage_2_clear = LoadImage("stage_2_clear");
165    Image stage_2_start = LoadImage("stage_2_start");
166    Image stage_3_clear = LoadImage("stage_3_clear");
167    Image stage_3_start = LoadImage("stage_3_start");
168    Image bonus_stage_clear = LoadImage("bonus_stage_clear");
169    Image bonus_stage_start = LoadImage("bonus_stage_start");
170    Image damage_up = LoadImage("damage_up");
171    Image spread_up = LoadImage("spread_up");
172    Image upgrade = LoadImage("upgrade");
173    Image cursor_gui = LoadImage("cursor");
174    Image select_ship_gui = LoadImage("select_ship");
175
176    //Misc
177    Image gradient = LoadImage("gradient");
178    Image aj = LoadImage("aj-weed");
179
180    #endregion
181
182    #region SFX
183
184    SoundEffect hurtsfx = LoadSoundEffect("hurt");
185    SoundEffect hitsfx = LoadSoundEffect("hit");
186    SoundEffect shootsfx = LoadSoundEffect("shoot");
187    SoundEffect selectsfx = LoadSoundEffect("select1");
188    SoundEffect powerupsfx = LoadSoundEffect("powerup");
189    SoundEffect explosionsfx = LoadSoundEffect("explosion");
190    SoundEffect enemy_shootsfx = LoadSoundEffect("enemy_shoot");
191
192    #endregion
193
194    //Weapon
195    double wpn_shootRate = 0.1;
196    IntMeter wpn_damageRatio = new IntMeter(1, 1, 10);
197    DoubleMeter wpn_spread = new DoubleMeter(1,1,10);
198
199    double drd_shootRate = 0.15;
200    double drd_type = 0;
201    DoubleMeter drd_level = new DoubleMeter(0, 0, 5);
202    IntMeter drd_damageRatio = new IntMeter(1, 1, 20);
203
204    //Collision ignore groups
205    //2: player bullets/enemy bullets
206    //3: enemies
207    //4: powerups
208
209    ProgressBar healthBar;
210    Timer wpn_timer = new Timer();
211
212    GameObject control_gui;
213    GameObject press_start;
214    GameObject cursor;
215    GameObject select_ship;
216
217    GameObject black;
218
219    GameObject stage_clear;
220
221    GameObject bg;
222    GameObject bg2;
223    Timer cursor_blink;
224    double cursorpos = 0;
225
226    bool s001 = false;
227    bool s002 = false;
228    bool s003 = false;
229    bool b001 = false;
230    bool b002 = false;
231
232    public override void Begin()
233    {
234        SoundEffect.MasterVolume = 0.8;
235        //Load SFX
236        hurtsfx.Play();
237
238        //Load Anim
239        explosion_anim = LoadAnimation("explosionanim");
240        droid_anim = LoadAnimation("droidanim");
241        droid2_anim = LoadAnimation("droid2anim");
242
243        MediaPlayer.Play("Starmap");
244        MediaPlayer.IsRepeating = true;
245
246        SetWindowSize(1280, 800, false);
247
248        Level.Size = new Vector(Screen.Width,Screen.Height);
249        SmoothTextures = false;
250
251        GameObject titlescreen = new GameObject(1280, 801);
252        titlescreen.Position = Screen.Center;
253        titlescreen.Image = title_02;
254        Add(titlescreen,-3);
255
256        press_start = new GameObject(215, 59);
257        press_start.Position = Screen.Center + new Vector(0, 90);
258        press_start.Image = press_start_img;
259        Add(press_start);
260
261        control_gui = new GameObject(345, 247);
262        control_gui.Position = Screen.Center + new Vector(66, -112);
263        control_gui.Image = controls;
264        Add(control_gui);
265
266        Timer start = new Timer();
267        start.Interval = 0.6;
268        start.Timeout += delegate
269        {
270            if (press_start.IsVisible) press_start.IsVisible = false;
271            else press_start.IsVisible = true;
272        };
273        start.Start();
274
275        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
276        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
277        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Select_ship, null);
278
279
280    }
281    void Select_ship()
282    {
283        selectsfx.Play();
284
285        ClearControls();
286        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
287        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
288        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, movecursor, null);
289        ControllerOne.Listen(Button.Start, ButtonState.Pressed, Start, null);
290        ControllerOne.Listen(Button.A, ButtonState.Pressed, Start, null);
291
292        control_gui.Destroy();
293        press_start.Destroy();
294
295        cursor = new GameObject(21, 19);
296        cursor.Image = cursor_gui;
297        cursor.Position = Screen.Center + new Vector(-232, 41);
298
299        select_ship = new GameObject(426, 136);
300        select_ship.Image = select_ship_gui;
301        select_ship.Position = Screen.Center;
302
303        Add(select_ship);
304        Add(cursor);
305
306        cursor_blink = new Timer();
307        cursor_blink.Interval = 0.5;
308        cursor_blink.Timeout += delegate
309        {
310            if (cursor.IsVisible) cursor.IsVisible = false;
311            else if (!cursor.IsVisible) cursor.IsVisible = true;
312            if (cursor.IsDestroyed) cursor_blink.Stop();
313        };
314        cursor_blink.Start();
315    }
316    void movecursor(AnalogState dir)
317    {
318        if (cursorpos!= 0 && dir.StateVector.Y >= 0.7)
319        {
320            cursorpos = 0;
321            cursor.Position = Screen.Center + new Vector(-232, 41);
322            cursor_blink.Start();
323            cursor.IsVisible = true;
324            selectsfx.Play();
325        }
326        else if (cursorpos!= 1 &&dir.StateVector.Y <= -0.7)
327        {
328            cursorpos = 1;
329            cursor.Position = Screen.Center + new Vector(-232, -51);
330            cursor_blink.Start();
331            cursor.IsVisible = true;
332            selectsfx.Play();
333        }
334    }
335
336    void Start()
337    {
338        ClearControls();
339
340        selectsfx.Play();
341        MediaPlayer.Stop();
342        black = new GameObject(Screen.Width, Screen.Height);
343        black.Position = cntr;
344        black.Color = Color.Transparent;
345        black.FadeColorTo(Color.Black, 0.5);
346        Add(black, 2);
347
348        Timer wait = new Timer();
349        wait.Interval = 1;
350        wait.Timeout += delegate
351        {
352            ClearAll();
353            black = new GameObject(Screen.Width, Screen.Height);
354            black.Color = Color.Black;
355            Add(black, 2);
356            MediaPlayer.Stop();
357
358            CreateLevel("level_test");
359            hide_player();
360           
361            black.Position = cntr;
362
363            GameObject stage_01_start = new GameObject(405, 39);
364            stage_01_start.Position = cntr;
365            stage_01_start.Image = stage_1_start;
366            Add(stage_01_start, 3);
367
368            double i = 0;
369            Timer start = new Timer();
370            start.Interval = 0.1;
371            start.Timeout += delegate
372            {
373                i++;
374                if (i >= 15) stage_01_start.Destroy();
375                if (stage_01_start.IsVisible) stage_01_start.IsVisible = false;
376                else stage_01_start.IsVisible = true;
377            };
378            start.Start(15);
379            Pause();
380            ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_01, null);
381        };
382        wait.Start(1);
383
384        setwpn_timer();
385    }
386    void start_01()
387    {
388        if (!s001)
389        {
390            black.FadeColorTo(Color.Transparent, 0.5);
391            Timer.SingleShot(0.5, hide_player);
392            Timer.SingleShot(0.5, AddHealthbar);
393
394            s001 = true;
395            Pause();
396            MediaPlayer.Play("Venom");
397            selectsfx.Play();
398        }
399    }
400    void start_02()
401    {
402        if (!s002)
403        {
404            black.FadeColorTo(Color.Transparent, 0.5);
405            player.IsVisible = false;
406            Timer.SingleShot(0.5, hide_player);
407            Timer.SingleShot(0.5, AddHealthbar);
408
409            s002 = true;
410            Pause();
411            MediaPlayer.Play("Macbeth");
412            selectsfx.Play();
413        }
414    }
415    void start_03()
416    {
417        if (!s003)
418        {
419            black.FadeColorTo(Color.Transparent, 0.5);
420            player.IsVisible = false;
421            Timer.SingleShot(0.5, hide_player);
422            Timer.SingleShot(0.5, AddHealthbar);
423
424            s003 = true;
425            Pause();
426            MediaPlayer.Play("Eladard");
427            selectsfx.Play();
428        }
429    }
430    void hide_player()
431    {
432        if (!player.IsVisible) player.IsVisible = true;
433        else player.IsVisible = false;
434    }
435
436    #region Stage Creation
437
438    void CreateLevel(string level)
439    {
440        Gravity = new Vector(1000, 0);
441
442        TileMap lvl = TileMap.FromLevelAsset(level);
443        lvl.SetTileMethod('x', border);
444        lvl.SetTileMethod('y', bordertop);
445        lvl.SetTileMethod('z', borderbottom);
446        lvl.SetTileMethod('@', filler);
447        lvl.SetTileMethod('%', frontBorder);
448        lvl.SetTileMethod('&', backBorder);
449        lvl.SetTileMethod('#', bulletdes);
450        lvl.SetTileMethod('P', AddPlayer);
451        lvl.SetTileMethod('1', enemy_ship_1);
452        lvl.SetTileMethod('R', enemy_ship_1_red);
453        lvl.SetTileMethod('B', enemy_ship_1_bottom);
454        lvl.SetTileMethod('T', enemy_ship_1_top);
455        lvl.SetTileMethod('2', enemy_ship_2);
456        lvl.SetTileMethod('3', enemy_ship_3);
457        lvl.SetTileMethod('4', enemy_ship_4_top);
458        lvl.SetTileMethod('$', enemy_ship_4_bottom);
459        lvl.SetTileMethod('5', enemy_ship_5);
460        lvl.SetTileMethod('6', enemy_ship_6);
461        lvl.SetTileMethod('G', boss_ship_1);
462        lvl.SetTileMethod('H', boss_ship_2);
463        lvl.Execute(35, 35);
464
465        Level.Background.Color = Color.Black;
466
467        bg = new GameObject(1280, 800);
468        bg.Image = stage1_bg;
469
470        bg2 = new GameObject(1280, 800);
471        bg2.Image = stage1_bg;
472
473        movebg();
474        movebg2();
475
476        if (currentlevel == "level_02")
477        {
478            bg.Image = stage2_bg;
479            bg2.Image = stage2_bg;
480        }
481        else if (currentlevel == "level_03")
482        {
483            bg.Image = stage3_bg;
484            bg2.Image = stage3_bg;
485        }
486        else if (currentlevel == "level_04")
487        {
488            bg.Image = stage_aj;
489            bg2.Image = stage_aj;
490        }
491
492        Add(bg, -3);
493        Add(bg2, -3);
494
495        AddControls();
496
497        Camera.Position = player.Position;
498        //Camera.ZoomFactor = 0.4;
499    }
500    void movebg()
501    {
502        bg.Position = cntr;
503        bg.MoveTo(cntr - new Vector(1280, 0), 900, movebg);
504    }
505    void movebg2()
506    {
507        bg2.Position = cntr + new Vector(1280, 0);
508        bg2.MoveTo(cntr, 900, movebg2);
509    }
510
511    void border(Vector position, double width, double height)
512    {
513        GameObject border2 = new GameObject(width, height);
514        border2.Position = position;
515        //border2.Restitution = 0;
516        //border2.KineticFriction = 0;
517        //border2.StaticFriction = 0;
518        border2.Color = Color.White;
519        border2.Tag = "border";
520        Add(border2, 1);
521    }
522    void filler(Vector position, double width, double height)
523    {
524        GameObject border2 = new GameObject(width, height);
525        border2.Position = position;
526        border2.Color = Color.Transparent;
527        border2.Tag = "filler";
528        border2.MaximumLifetime = TimeSpan.FromSeconds(1);
529        Add(border2, 1);
530    }
531    void bordertop(Vector position, double width, double height)
532    {
533        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width, height);
534        border2.Position = position;
535        //border2.Restitution = 0;
536        //border2.KineticFriction = 0;
537        //border2.StaticFriction = 0;
538        border2.Color = Color.Black;
539        border2.Tag = "border";
540        border2.Image = border_top;
541        Add(border2, 1);
542    }
543    void borderbottom(Vector position, double width, double height)
544    {
545        PhysicsObject border2 = PhysicsObject.CreateStaticObject(width * 1.5, height);
546        border2.Position = position;
547        border2.Restitution = 0;
548        border2.KineticFriction = 0;
549        border2.StaticFriction = 0;
550        border2.Color = Color.Black;
551        border2.Tag = "border";
552        border2.Image = border_bottom;
553        Add(border2, 1);
554    }
555    void frontBorder(Vector position, double width, double height)
556    {
557        frontborder border = new frontborder(width, height);
558        border.Position = position;
559        border.Color = Color.White;
560        border.Restitution = 0;
561        border.Tag = "border";
562        border.IgnoresCollisionResponse = true;
563        border.IgnoresPhysicsLogics = true;
564        AddCollisionHandler<PhysicsObject, player>(border, frontBorderCollision);
565        AddCollisionHandler<PhysicsObject, enemy>(border, frontBorderCollisionEnemy);
566        Add(border);
567    }
568    void backBorder(Vector position, double width, double height)
569    {
570        backborder border = new backborder(width, height);
571        border.Position = position;
572        border.Color = Color.White;
573        border.Restitution = 0;
574        border.Tag = "border";
575        border.IgnoresCollisionResponse = true;
576        border.IgnoresCollisionResponse = true;
577        AddCollisionHandler<PhysicsObject, player>(border, backBorderCollision);
578        //AddCollisionHandler<PhysicsObject, enemy>(border, backBorderCollisionEnemy);
579        Add(border);
580    }
581    void bulletdes(Vector position, double width, double height)
582    {
583        bulletdes border = new bulletdes(width, height);
584        border.Position = position;
585        border.Color = Color.Black;
586        border.Restitution = 0;
587        border.Tag = "border";
588        border.IgnoresCollisionResponse = true;
589        border.IgnoresPhysicsLogics = true;
590        Add(border, 1);
591    }
592    void frontBorderCollision(PhysicsObject border, PhysicsObject target)
593    {
594        player.health.Value = player.health.Value - player.health.Value;
595        hurtsfx.Play();
596        explosionsfx.Play();
597        explosion_animation2(target);
598        playership.Destroy();
599
600    }
601    void frontBorderCollisionEnemy(PhysicsObject border, enemy enemy)
602    {
603        enemy.canShoot = true;
604
605    }
606    void backBorderCollision(PhysicsObject border, PhysicsObject target)
607    {
608        player.health.Value = player.health.Value - player.health.Value;
609        hurtsfx.Play();
610        explosionsfx.Play();
611        explosion_animation2(target);
612        playership.Destroy();
613    }
614    void backBorderCollisionEnemy(PhysicsObject border, enemy enemy)
615    {
616        enemy.Destroy();
617    }
618
619    #endregion
620
621    #region Player
622             
623    void AddPlayer(Vector pos, double width, double height)
624    {
625        cntr = pos;
626
627        player = new player(7, 8);
628        playership = new PhysicsObject(47, 46);
629
630        player.Shape = Shape.Circle;
631        player.Color = Color.Black;
632        player.Restitution = 0;
633        player.CanRotate = false;
634        player.Mass = int.MaxValue;
635        player.KineticFriction = 0;
636        player.StaticFriction = 0;
637        player.Image = hitbox;
638        player.IgnoresGravity = true;
639        player.Position = pos;
640        player.Tag = "player1";
641        Add(player,2);
642
643        if (cursorpos == 0)
644        {
645            playership.Image = player_ship_01;
646            playership.Size = new Vector(37, 48);
647        }
648        else if (cursorpos == 1) playership.Image = player_ship_02;
649        playership.IsVisible = true;
650        playership.IgnoresCollisionResponse = true;
651        playership.IgnoresPhysicsLogics = true;
652        playership.Angle = Angle.FromDegrees(-90);
653        playership.CanRotate = false;
654        playership.Tag = "playership";
655        playership.Position = player.Position;
656
657        FollowerBrain playershipbrain = new FollowerBrain(player);
658        playershipbrain.Speed = 500;
659        playershipbrain.DistanceFar = 5000;
660        playershipbrain.DistanceClose = 0;
661        playershipbrain.StopWhenTargetClose = true;
662        playershipbrain.Active = true;
663        playershipbrain.TurnWhileMoving = false;
664
665        playership.Brain = playershipbrain;
666
667        Add(playership, -1);
668        drd_type = cursorpos;
669
670    }
671    void AddHealthbar()
672    {
673        healthBar = new ProgressBar(135, 10);
674        healthBar.BorderColor = Color.Black;
675        healthBar.Color = Color.Black;
676        healthBar.BarColor = Color.Red;
677        healthBar.BindTo(player.health);
678        healthBar.Angle = Angle.RightAngle;
679        healthBar.Position = new Vector(Screen.LeftSafe + 30, Screen.BottomSafe + 200);
680        Add(healthBar);
681    }
682    void AddControls()
683
684    {
685        ControllerOne.Listen(Button.Back, ButtonState.Pressed, ConfirmExit, null);
686        ControllerOne.ListenAnalog(AnalogControl.LeftStick, -0.1, move, null);
687
688        ControllerOne.Listen(Button.B, ButtonState.Pressed, shoot, null);
689        ControllerOne.Listen(Button.B, ButtonState.Released, stopShoot, null);
690
691        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, null);
692
693        //cheat
694        Keyboard.Listen(Key.U, ButtonState.Pressed, cheat_upgrade, null);
695        Keyboard.Listen(Key.I, ButtonState.Pressed, cheat_damage, null);
696        Keyboard.Listen(Key.O, ButtonState.Pressed, cheat_spread, null);
697        Keyboard.Listen(Key.H, ButtonState.Pressed, cheat_fullhp, null);
698
699    }
700    void move(AnalogState speed)
701    {
702        player.Velocity = speed.StateVector * player_speed / (ControllerOne.LeftTriggerState+1);
703    }
704
705    void cheat_upgrade()
706    {
707        drd_level.Value++;
708
709        if (drd_level.Value == 1)
710        {
711            if (drd_type == 0) droid(new Vector(-45, 0));
712            else if (drd_type == 1) droid(new Vector(40, 0));
713        }
714        else if (drd_level.Value == 2)
715        {
716            if (drd_type == 0)
717            {
718                droid(new Vector(-45, 30));
719                droid(new Vector(-45, -30));
720            }
721            else if (drd_type == 1)
722            {
723                droid(new Vector(-10, 35));
724                droid(new Vector(-10, -35));
725            }
726        }
727        else if (drd_level.Value == 3)
728        {
729            if (drd_type == 0)
730            {
731                droid(new Vector(-30, 30));
732                droid(new Vector(-30, -30));
733                droid(new Vector(-50, 0));
734            }
735            else if (drd_type == 1)
736            {
737                droid(new Vector(40, 0));
738                droid(new Vector(-10, 35));
739                droid(new Vector(-10, -35));
740            }
741        }
742        else if (drd_level.Value == 4)
743        {
744            if (drd_type == 0)
745            {
746                droid(new Vector(-30, 50));
747                droid(new Vector(-30, -50));
748                droid(new Vector(-50, 30));
749                droid(new Vector(-50, -30));
750            }
751            else if (drd_type == 1)
752            {
753                droid(new Vector(-30, 55));
754                droid(new Vector(-30, -55));
755                droid(new Vector(-10, 35));
756                droid(new Vector(-10, -35));
757            }
758        }
759    }
760    void cheat_damage()
761    {
762        wpn_damageRatio.Value++;
763    }
764    void cheat_spread()
765    {
766        wpn_spread.Value++;
767    }
768    void cheat_fullhp()
769    {
770        player.health.Value = 100;
771        //MessageDisplay.Te
772    }
773
774    #endregion
775
776    #region Weapons
777
778    void shoot()
779    {
780        //wpn_timer.Stop();
781        wpn_timer.Interval = wpn_shootRate;
782
783        wpn_timer.Start();
784    }
785    void setwpn_timer()
786    {
787            wpn_timer.Timeout += delegate
788        {
789            if (!player.IsDestroyed)
790            {
791                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
792                {
793                    Weapon();
794                    wpn_timer.Interval = wpn_shootRate;
795                    shootsfx.Play();
796                }
797            };
798        };
799    }
800    void stopShoot()
801    {
802        wpn_timer.Stop();
803    }
804    void Weapon()
805    {
806        if (wpn_spread.Value == 1)
807        {
808            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 0), new Vector(40, 12) );
809            Projectile(player.Position + new Vector(10, -5), new Vector(1200, 0), new Vector(40, 12) );
810        }
811        else if (wpn_spread.Value == 2)
812        {
813            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 0), new Vector(40, 12) );
814            Projectile(player.Position + new Vector(10, -10), new Vector(1200, 0), new Vector(40, 12) );
815            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
816        }
817        else if (wpn_spread.Value == 3)
818        {
819            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
820            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
821            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 20), new Vector(40, 12) );
822            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -20), new Vector(40, 12) );
823        }
824        else if (wpn_spread.Value == 4)
825        {
826            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
827            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
828            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
829            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
830            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
831        }
832        else if (wpn_spread.Value == 5)
833        {
834            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
835            Projectile(player.Position + new Vector(10, -0), new Vector(1200, 0), new Vector(40, 12) );
836
837            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
838            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
839
840            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 55), new Vector(40, 12) );
841            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -55), new Vector(40, 12) );
842        }
843        else if (wpn_spread.Value == 6)
844        {
845            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
846            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
847            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
848            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
849            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
850
851            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 75), new Vector(40, 12) );
852            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -75), new Vector(40, 12) );
853        }
854        else if (wpn_spread.Value == 7)
855        {
856            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12) );
857            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12) );
858            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 15), new Vector(40, 12) );
859            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -15), new Vector(40, 12) );
860
861            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12) );
862            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
863
864            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
865            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
866        }
867        else if (wpn_spread.Value == 8)
868        {
869            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12) );
870            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
871            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12) );
872            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 25), new Vector(40, 12) );
873            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -25), new Vector(40, 12) );
874
875            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 50), new Vector(40, 12) );
876            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -50), new Vector(40, 12) );
877
878            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12) );
879            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12) );
880        }
881        else if (wpn_spread.Value == 9)
882        {
883            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 15), new Vector(40, 12));
884            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -15), new Vector(40, 12));
885            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 15), new Vector(40, 12));
886            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -15), new Vector(40, 12));
887
888            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
889            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12));
890
891            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 50), new Vector(40, 12));
892            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -50), new Vector(40, 12));
893
894            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 75), new Vector(40, 12));
895            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -75), new Vector(40, 12));
896        }
897        else if (wpn_spread.Value == 10)
898        {
899            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 25), new Vector(40, 12) );
900            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -25), new Vector(40, 12));
901            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 0), new Vector(40, 12));
902            Projectile(player.Position + new Vector(10, 0), new Vector(1200, 50), new Vector(40, 12));
903            Projectile(player.Position + new Vector(10, -0), new Vector(1200, -50), new Vector(40, 12) );
904
905            Projectile(player.Position + new Vector(10, 5), new Vector(1200, 75), new Vector(40, 12) );
906            Projectile(player.Position + new Vector(10, -5), new Vector(1200, -75), new Vector(40, 12) );
907
908            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 100), new Vector(40, 12) );
909            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -100), new Vector(40, 12) );
910
911            Projectile(player.Position + new Vector(10, 10), new Vector(1200, 125), new Vector(40, 12) );
912            Projectile(player.Position + new Vector(10, -10), new Vector(1200, -125), new Vector(40, 12) );
913        }
914    }
915    void Projectile(Vector pos, Vector vel, Vector size)
916    {
917        bullet projectile = new bullet(size.X, size.Y);
918        projectile.Shape = Shape.Diamond;
919        projectile.IgnoresGravity = true;
920        projectile.Position = pos;
921        projectile.Tag = "player_bullet";
922
923        if (wpn_damageRatio <= 2) projectile.Image = bullet_player01;
924        else if (wpn_damageRatio.Value <= 4) projectile.Image = bullet_player03;
925        else if (wpn_damageRatio.Value <= 6) projectile.Image = bullet_player04;
926        else if (wpn_damageRatio.Value <= 8) projectile.Image = bullet_player02;
927        else if (wpn_damageRatio.Value <= 10) projectile.Image = bullet_player05;
928
929        projectile.damage = wpn_damageRatio.Value;
930        projectile.IgnoresCollisionResponse = true;
931
932        projectile.CollisionIgnoreGroup = 2;
933
934        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
935        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
936
937        Add(projectile, 0);
938        projectile.Hit(vel/1.2);
939        projectile.Angle = projectile.Velocity.Angle;
940    }
941
942    void droid(Vector pos)
943    {
944        droid drd = new droid(13,13);
945        drd.IgnoresCollisionResponse = true;
946        drd.CollisionIgnoreGroup = 2;
947        drd.Position = player.Position + pos;
948        drd.droid_level.Value = drd_level;
949        if (cursorpos == 0) drd.Animation = droid2_anim;
950        else if (cursorpos == 1) drd.Animation = droid_anim;
951        drd.Animation.Start();
952        setdrd_shoot_timer(drd);
953
954        Timer move = new Timer();
955        move.Interval = 0.01;
956        move.Timeout += delegate
957        {
958            if (drd.IsDestroyed) move.Stop();
959
960            if (drd.Position != player.Position + pos)
961            {
962                drd.Position = player.Position + pos;
963            }
964            if (drd.droid_level.Value != drd_level.Value && drd_level.Value != 5) drd.Destroy();
965        };
966        move.Start();
967
968        Add(drd);
969    }
970    void setdrd_shoot_timer(droid drd)
971    {
972        Timer drdshoot = new Timer();
973        drdshoot.Interval = drd_shootRate;
974        if (cursorpos == 0)
975        {
976            drdshoot.Timeout += delegate
977            {
978                if (drd.IsDestroyed) drdshoot.Stop();
979                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
980                {
981                    droidprojectile(drd.Position, new Vector(-400, RandomGen.NextDouble(100, 150)), new Vector(24, 13));
982                    droidprojectile(drd.Position, new Vector(-400, RandomGen.NextDouble(-150, -100)), new Vector(24, 13));
983                }
984            };
985        }
986        else if (cursorpos == 1)
987        {
988            drdshoot.Timeout += delegate
989            {
990                if (drd.IsDestroyed) drdshoot.Stop();
991                if (ControllerOne.GetButtonState(Button.B) == ButtonState.Down)
992                {
993                    if (drd.IsDestroyed) drdshoot.Stop();
994                    droidlaser(drd.Position + new Vector(37, 0), new Vector(1400, 0), new Vector(60, 5));
995                }
996            };
997        }
998
999        drdshoot.Start();
1000    }
1001
1002    void droidprojectile(Vector pos, Vector vel, Vector size)
1003    {
1004        bullet projectile = new bullet(size.X, size.Y/2);
1005        projectile.Shape = Shape.Diamond;
1006        projectile.IgnoresGravity = false;
1007        projectile.Position = pos;
1008        projectile.Tag = "player_bullet";
1009        projectile.Image = bullet_droid;
1010        projectile.damage = drd_damageRatio.Value;
1011        projectile.LinearDamping = 0.99;
1012
1013        projectile.IgnoresCollisionResponse = true;
1014
1015        projectile.CollisionIgnoreGroup = 2;
1016        projectile.MaximumLifetime = TimeSpan.FromSeconds(3);
1017
1018        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
1019        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
1020
1021        Add(projectile, -1);
1022        projectile.Hit(vel);
1023        projectile.Angle = projectile.Velocity.Angle;
1024
1025        Timer angle = new Timer();
1026        angle.Interval = 0.05;
1027        angle.Timeout += delegate
1028        {
1029            projectile.Angle = projectile.Velocity.Angle;
1030            if (projectile.IsDestroyed) { angle.Stop(); };
1031        };
1032        angle.Start();
1033    }
1034    void droidlaser(Vector pos, Vector vel, Vector size)
1035    {
1036        bullet projectile = new bullet(size.X, size.Y);
1037        projectile.Shape = Shape.Rectangle;
1038        projectile.IgnoresGravity = true;
1039        projectile.Position = pos;
1040        projectile.Tag = "player_bullet";
1041        projectile.Image = bullet_laser;
1042        projectile.damage = drd_damageRatio.Value * 2;
1043
1044        projectile.IgnoresCollisionResponse = true;
1045
1046        projectile.CollisionIgnoreGroup = 2;
1047        projectile.MaximumLifetime = TimeSpan.FromSeconds(1.2);
1048
1049        AddCollisionHandler<bullet, frontborder>(projectile, destroy);
1050        AddCollisionHandler<bullet, enemy>(projectile, damageEnemy);
1051
1052        Add(projectile, -1);
1053        projectile.Hit(vel);
1054
1055    }
1056
1057    #endregion
1058
1059    #region Enemies
1060
1061    void enemy_ship_1(Vector pos, double width, double height)
1062    {
1063        enemy enemyship = new enemy(70, 35);
1064        enemyship.Shape = Shape.Circle;
1065        enemyship.Color = Color.Black;
1066        enemyship.Position = pos;
1067        enemyship.IgnoresCollisionResponse = true;
1068        enemyship.CollisionIgnoreGroup = 3;
1069        enemyship.health.MaxValue = 10;
1070        enemyship.Image = enemy_ship_01;
1071
1072        Add(enemyship, -1);
1073        enemyship.Hit(stagespeed);
1074        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1075        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_frontborder);
1076    }
1077    void enemy_ship_1_frontborder(enemy enemyship, frontborder border)
1078    {
1079        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1080    }
1081    void enemy_ship_1_red(Vector pos, double width, double height)
1082    {
1083        enemy enemyship = new enemy(70, 35);
1084        enemyship.Shape = Shape.Circle;
1085        enemyship.Color = Color.Black;
1086        enemyship.Position = pos;
1087        enemyship.IgnoresCollisionResponse = true;
1088        enemyship.health.MaxValue = 10;
1089        enemyship.Image = enemy_ship_01_red;
1090        enemyship.CollisionIgnoreGroup = 3;
1091
1092        Add(enemyship, -1);
1093        enemyship.Hit(stagespeed);
1094        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1095        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_1_red_frontborder);
1096    }
1097    void enemy_ship_1_red_frontborder(enemy enemyship, frontborder border)
1098    {
1099        if (!enemyship.canShoot)
1100        {
1101            enemyship.Angle = Angle.FromDegrees(180);
1102            enemyship.Velocity = -stagespeed;
1103            enemyship.Position = new Vector(border.X-1400, enemyship.Position.Y);
1104            enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1105
1106            enemyship.canShoot = true;
1107        };
1108    }
1109    void enemy_ship_1_bottom(Vector pos, double width, double height)
1110    {
1111        enemy enemyship = new enemy(35, 70);
1112        enemyship.Shape = Shape.Circle;
1113        enemyship.Color = Color.Black;
1114        enemyship.Position = pos;
1115        enemyship.IgnoresCollisionResponse = true;
1116        enemyship.CollisionIgnoreGroup = 3;
1117        enemyship.health.MaxValue = 10;
1118        enemyship.Image = enemy_ship_01_blue;
1119        enemyship.Angle = Angle.FromDegrees(90);
1120
1121        Add(enemyship, -1);
1122        enemyship.Hit(stagespeed);
1123        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1124        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_bottom_frontborder);
1125    }
1126    void enemy_ship_1_bottom_frontborder(PhysicsObject enemyship, frontborder br)
1127    {
1128        enemyship.LifetimeLeft = TimeSpan.FromSeconds(3);
1129        enemyship.Angle = Angle.FromDegrees(0);
1130        enemyship.Velocity = new Vector(0, -stagespeed.X/1.7);
1131        enemyship.Position = new Vector(cntr.X + enemyship.Y, -405);
1132    }
1133    void enemy_ship_1_top(Vector pos, double width, double height)
1134    {
1135        enemy enemyship = new enemy(35, 70);
1136        enemyship.Shape = Shape.Circle;
1137        enemyship.Color = Color.Black;
1138        enemyship.Position = pos;
1139        enemyship.IgnoresCollisionResponse = true;
1140        enemyship.CollisionIgnoreGroup = 3;
1141        enemyship.health.MaxValue = 10;
1142        enemyship.Image = enemy_ship_01_blue_inverted;
1143        enemyship.Angle = Angle.FromDegrees(90);
1144
1145        Add(enemyship, -1);
1146        enemyship.Hit(stagespeed);
1147        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1148        AddCollisionHandler<PhysicsObject, frontborder>(enemyship, enemy_ship_1_top_frontborder);
1149    }
1150    void enemy_ship_1_top_frontborder(PhysicsObject enemysship, frontborder br)
1151    {
1152        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1153        enemysship.Angle = Angle.FromDegrees(0);
1154        enemysship.Velocity = new Vector(0, stagespeed.X / 1.75);
1155
1156        enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
1157    }
1158    void enemy_ship_2(Vector pos, double widht, double height)
1159    {
1160        enemy enemyship = new enemy(70, 30);
1161        enemyship.Shape = Shape.Circle;
1162        enemyship.Color = Color.Black;
1163        enemyship.Position = pos;
1164        enemyship.IgnoresCollisionResponse = true;
1165        enemyship.CollisionIgnoreGroup = 3;
1166        enemyship.health.MaxValue = 45;
1167        enemyship.Image = enemy_ship_02;
1168
1169        Add(enemyship, -1);
1170        enemyship.Hit(stagespeed);
1171        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1172        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_2_start_shooting);
1173    }
1174    void enemy_ship_2_start_shooting(enemy enemyship, frontborder border)
1175    {
1176        if (!enemyship.canShoot)
1177        {
1178            enemyship.canShoot = true;
1179
1180            enemyship.Velocity = enemyship.Velocity / 2;
1181
1182            double angle = 0;
1183            double i = 1;
1184            double c = 0;
1185            UnlimitedAngle angle2;
1186
1187            Timer playsfx = new Timer();
1188            playsfx.Interval = 0.05;
1189            playsfx.Timeout += delegate
1190            {
1191                    enemy_shootsfx.Play();
1192            };
1193
1194            Timer shoot = new Timer();
1195            shoot.Interval = 0.01;
1196            shoot.Timeout += delegate
1197            {
1198                if (c >= 200){
1199                    shoot.Stop(); 
1200                playsfx.Stop();
1201                }
1202                else if (c != 200)
1203                {
1204                    if (!enemyship.IsDestroyed)
1205                    {
1206                        angle = angle + i;
1207                        i = i + 0.1;
1208                        c++;
1209                        angle2 = UnlimitedAngle.FromDegrees(angle);
1210                        enemy_shoot_2(enemyship.Position,
1211
1212                            angle2.GetVector() * 500
1213                            );
1214                    }
1215                    else
1216                    {
1217                        shoot.Stop();
1218                        playsfx.Stop();
1219                    }
1220                };
1221
1222            };
1223
1224            Timer wait = new Timer();
1225            wait.Interval = 0.5;
1226            wait.Timeout += delegate
1227            {
1228                if (!enemyship.IsDestroyed)
1229                {
1230                    shoot.Start();
1231                    playsfx.Start();
1232                }
1233                else wait.Stop();
1234            };
1235            wait.Start(1);
1236        }
1237    }
1238    void enemy_ship_3(Vector pos, double width, double height)
1239    {
1240        enemy enemyship = new enemy(71, 56);
1241        enemyship.Shape = Shape.Circle;
1242        enemyship.Position = pos;
1243        enemyship.IgnoresCollisionResponse = true;
1244        enemyship.CollisionIgnoreGroup = 3;
1245        enemyship.health.MaxValue = 60;
1246        enemyship.Image = enemy_ship_03;
1247        enemyship.explosion_scale = 75;
1248
1249        Add(enemyship,-1);
1250        enemyship.Hit(stagespeed);
1251
1252        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_3_start_shooting);
1253        AddCollisionHandler<enemy, player>(enemyship,damagePlayerEnemyShip2);
1254    }
1255    void enemy_ship_3_start_shooting(enemy enemyship, frontborder border)
1256    {
1257        if (!enemyship.canShoot)
1258        {
1259            enemyship.canShoot = true;
1260            enemyship.LifetimeLeft = TimeSpan.FromSeconds(60);
1261            enemyship.Velocity = enemyship.Velocity / 3;
1262            int i = 0;
1263            int e = 0;
1264
1265            Timer playsfx = new Timer();
1266            playsfx.Interval = 0.06;
1267            playsfx.Timeout += delegate
1268            {
1269                enemy_shootsfx.Play();
1270            };
1271
1272            Timer wait = new Timer();
1273
1274            Timer enemy_shoot = new Timer();
1275            enemy_shoot.Interval = 0.02;
1276            enemy_shoot.Timeout += delegate
1277            {
1278                if (e >= 4)
1279                {
1280
1281                    enemy_shoot.Stop();
1282                    playsfx.Stop();
1283                    enemyship.Velocity = stagespeed / 3;
1284                    enemyship.LifetimeLeft = TimeSpan.FromSeconds(6);
1285                };
1286                i++;
1287                if (i == 50 && e != 4)
1288                {
1289                    enemy_shoot.Stop();
1290                    playsfx.Stop();
1291                    wait.Start(1);
1292                    e++;
1293                };
1294                if (enemyship.IsDestroyed)
1295                {
1296                    enemy_shoot.Stop();
1297                    playsfx.Stop();
1298                }
1299                if (e != 4)
1300                {
1301                    enemy_shoot_1(enemyship.Position + new Vector(RandomGen.NextDouble(-30, 30), RandomGen.NextDouble(-30, 30)));
1302                }
1303            };
1304
1305            wait.Interval = 0.5;
1306            wait.Timeout += delegate
1307            {
1308                if (enemyship.IsDestroyed) wait.Stop();
1309                i = 0;
1310                enemy_shoot.Start(50);
1311                playsfx.Start();
1312            };
1313
1314            Timer enemy_start = new Timer();
1315            enemy_start.Interval = 3;
1316            enemy_start.Timeout += delegate
1317            {
1318                if (!enemyship.IsDestroyed)
1319                {
1320                    playsfx.Start();
1321                    enemy_shoot.Start(50);
1322                    enemyship.Velocity = new Vector(0,0);
1323                };
1324            };
1325            enemy_start.Start(1);
1326
1327        };
1328    }
1329    void enemy_ship_4_top(Vector pos, double width, double height)
1330    {
1331        enemy enemyship = new enemy(43, 33);
1332        enemyship.Shape = Shape.Circle;
1333        enemyship.Color = Color.Black;
1334        enemyship.Position = pos;
1335        enemyship.IgnoresCollisionResponse = true;
1336        enemyship.CollisionIgnoreGroup = 3;
1337        enemyship.health.MaxValue = 15;
1338        enemyship.Image = enemy_ship_04;
1339
1340        Add(enemyship, -1);
1341        enemyship.Hit(stagespeed);
1342        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1343        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_top_frontborder);
1344    }
1345    void enemy_ship_4_top_frontborder(enemy enemysship, frontborder br)
1346    {
1347        if (!enemysship.canShoot)
1348        {
1349            enemysship.canShoot = true;
1350
1351            //enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1352            enemysship.Velocity = new Vector(0, stagespeed.X);
1353            enemysship.Position = new Vector(cntr.X + enemysship.Y, 405);
1354
1355            Timer chk = new Timer();
1356            chk.Interval = 0.01;
1357            chk.Timeout += delegate
1358            {
1359                if (!enemysship.IsDestroyed)
1360                {
1361                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
1362                    {
1363                        enemysship.Velocity = stagespeed;
1364                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
1365                        chk.Stop();
1366                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1367                    }
1368                }
1369                else if (enemysship.IsDestroyed) chk.Stop();
1370            };
1371
1372            chk.Start();
1373        };
1374    }
1375    void enemy_ship_4_bottom(Vector pos, double width, double height)
1376    {
1377        enemy enemyship = new enemy(43, 33);
1378        enemyship.Shape = Shape.Circle;
1379        enemyship.Color = Color.Black;
1380        enemyship.Position = pos;
1381        enemyship.IgnoresCollisionResponse = true;
1382        enemyship.CollisionIgnoreGroup = 3;
1383        enemyship.health.MaxValue = 15;
1384        enemyship.Image = enemy_ship_04;
1385
1386        Add(enemyship, -1);
1387        enemyship.Hit(stagespeed);
1388        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip);
1389        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_4_bottom_frontborder);
1390    }
1391    void enemy_ship_4_bottom_frontborder(enemy enemysship, frontborder br)
1392    {
1393        if (!enemysship.canShoot)
1394        {
1395            enemysship.canShoot = true;
1396            enemysship.Velocity = new Vector(0, -stagespeed.X);
1397            enemysship.Position = new Vector(cntr.X + enemysship.Y, -405);
1398
1399            Timer chk = new Timer();
1400            chk.Interval = 0.01;
1401            chk.Timeout += delegate
1402            {
1403                if (!enemysship.IsDestroyed)
1404                {
1405                    if (enemysship.Y >= player.Y - 10 && enemysship.Y <= player.Y + 10)
1406                    {
1407                        enemysship.Velocity = stagespeed;
1408                        if ((player.X - enemysship.X) > 0) enemysship.Velocity = -stagespeed;
1409                        chk.Stop();
1410                        enemysship.LifetimeLeft = TimeSpan.FromSeconds(3);
1411                    }
1412                }
1413                else if (enemysship.IsDestroyed) chk.Stop();
1414            };
1415
1416            chk.Start();
1417        };
1418    }
1419    void enemy_ship_5(Vector pos, double width, double height)
1420    {
1421        enemy enemyship = new enemy(62, 49);
1422        enemyship.Shape = Shape.Circle;
1423        enemyship.Position = pos;
1424        enemyship.IgnoresCollisionResponse = true;
1425        enemyship.CollisionIgnoreGroup = 3;
1426        enemyship.health.MaxValue = 45;
1427        enemyship.Image = enemy_ship_05;
1428        enemyship.explosion_scale = 70;
1429
1430        Add(enemyship, -1);
1431        enemyship.Hit(stagespeed);
1432
1433        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_5_start_shooting);
1434        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip2);
1435    }
1436    void enemy_ship_5_start_shooting(enemy enemyship, frontborder border)
1437    {
1438        if (!enemyship.canShoot)
1439        {
1440            enemyship.canShoot = true;
1441            enemyship.LifetimeLeft = TimeSpan.FromSeconds(8.4);
1442            enemyship.Velocity = enemyship.Velocity / 3;
1443
1444            UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1445            UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
1446            UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
1447            UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
1448            double i = 0;
1449
1450            Timer shoot = new Timer();
1451            shoot.Interval = 0.06;
1452            shoot.Timeout += delegate
1453            {
1454                if (!enemyship.IsDestroyed)
1455                {
1456                    i = i + 12;
1457                    angle = UnlimitedAngle.FromDegrees(i);
1458                    angle2 = UnlimitedAngle.FromDegrees(i + 90);
1459                    angle3 = UnlimitedAngle.FromDegrees(i + 180);
1460                    angle4 = UnlimitedAngle.FromDegrees(i + 270);
1461
1462                    enemy_shoot_3(enemyship.Position, angle.GetVector() * 500);
1463                    enemy_shoot_3(enemyship.Position, angle2.GetVector() * 500);
1464                    enemy_shoot_3(enemyship.Position, angle3.GetVector() * 500);
1465                    enemy_shoot_3(enemyship.Position, angle4.GetVector() * 500);
1466
1467                    enemy_shootsfx.Play();
1468                }
1469                else shoot.Stop();
1470            };
1471
1472            Timer wait = new Timer();
1473            wait.Interval = 1;
1474            wait.Timeout += delegate
1475            {
1476                if (!enemyship.IsDestroyed)
1477                {
1478                    shoot.Start();
1479                }
1480                else shoot.Stop();
1481            };
1482
1483            wait.Start(1);
1484        }
1485    }
1486    void enemy_ship_6(Vector pos, double width, double height)
1487    {
1488        enemy enemyship = new enemy(82, 57);
1489        enemyship.Shape = Shape.Circle;
1490        enemyship.Position = pos;
1491        enemyship.IgnoresCollisionResponse = true;
1492        enemyship.CollisionIgnoreGroup = 3;
1493        enemyship.health.MaxValue = 70;
1494        enemyship.Image = enemy_ship_06;
1495        enemyship.explosion_scale = 70;
1496
1497        Add(enemyship, -1);
1498        enemyship.Hit(stagespeed);
1499
1500
1501
1502
1503        AddCollisionHandler<enemy, frontborder>(enemyship, enemy_ship_6_start_shooting);
1504        AddCollisionHandler<enemy, player>(enemyship, damagePlayerEnemyShip2);
1505    }
1506    void enemy_ship_6_start_shooting(enemy enemyship, frontborder border)
1507    {
1508        if (!enemyship.canShoot)
1509        {
1510            enemyship.canShoot = true;
1511            enemyship.LifetimeLeft = TimeSpan.FromSeconds(8.4);
1512            enemyship.Velocity = enemyship.Velocity / 3;
1513
1514            UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1515            UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(0);
1516            UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(0);
1517            UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(0);
1518            double i = 0;
1519            double c = 0;
1520
1521            Timer wait = new Timer();
1522            Timer shoot = new Timer();
1523            shoot.Interval = 0.1;
1524            shoot.Timeout += delegate
1525            {
1526                if (!enemyship.IsDestroyed)
1527                {
1528                    c++;
1529                    if (c >= 18)
1530                    {
1531                        c = 0;
1532                        shoot.Stop();
1533                        wait.Start(1);
1534                    }
1535
1536                    i = i + 20;
1537                    angle = UnlimitedAngle.FromDegrees(i);
1538                    angle2 = UnlimitedAngle.FromDegrees(i + 90);
1539                    angle3 = UnlimitedAngle.FromDegrees(i + 180);
1540                    angle4 = UnlimitedAngle.FromDegrees(i + 270);
1541
1542                    enemy_shoot_4(enemyship.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1543                    enemy_shoot_4(enemyship.Position, (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1544                    enemy_shoot_4(enemyship.Position, (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1545
1546                    enemy_shoot_4(enemyship.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1547                    enemy_shoot_4(enemyship.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1548                    enemy_shoot_4(enemyship.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1549
1550                    enemy_shoot_4(enemyship.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1551                    enemy_shoot_4(enemyship.Position, (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1552                    enemy_shoot_4(enemyship.Position, (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1553
1554                    enemy_shoot_4(enemyship.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1555                    enemy_shoot_4(enemyship.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1556                    enemy_shoot_4(enemyship.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1557
1558
1559                    enemy_shootsfx.Play();
1560                }
1561                else shoot.Stop();
1562            };
1563
1564            wait.Interval = 1.5;
1565            wait.Timeout += delegate
1566            {
1567                if (enemyship.IsDestroyed) wait.Stop();
1568                shoot.Start();
1569            };
1570
1571            Timer start = new Timer();
1572            start.Interval = 1;
1573            start.Timeout += delegate
1574            {
1575                if (!enemyship.IsDestroyed)
1576                {
1577                    shoot.Start();
1578                }
1579                else shoot.Stop();
1580            };
1581
1582            start.Start(1);
1583        }
1584    }
1585
1586    void enemy_shoot_1(Vector pos)
1587    {
1588        bullet enemy_bullet = new bullet(27, 27);
1589        enemy_bullet.Shape = Shape.Circle;
1590        enemy_bullet.Position = pos;
1591        enemy_bullet.IgnoresCollisionResponse = true;
1592        enemy_bullet.IgnoresGravity = true;
1593        enemy_bullet.CollisionIgnoreGroup = 2;
1594        enemy_bullet.Image = bullet_enemy_05;
1595
1596        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
1597        Add(enemy_bullet, 0);
1598        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1599        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1600    }
1601    void enemy_shoot_2(Vector pos, Vector dir)
1602    {
1603        bullet enemy_bullet = new bullet(27, 27);
1604        enemy_bullet.Shape = Shape.Circle;
1605        enemy_bullet.Position = pos;
1606        enemy_bullet.IgnoresCollisionResponse = true;
1607        enemy_bullet.IgnoresGravity = true;
1608        enemy_bullet.CollisionIgnoreGroup = 2;
1609        enemy_bullet.Image = bullet_enemy_02;
1610
1611        Add(enemy_bullet, 0);
1612        enemy_bullet.Hit(dir/9);
1613        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1614        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1615
1616        Timer wait = new Timer();
1617        wait.Interval = 0.8;
1618        wait.Timeout += delegate
1619        {
1620            enemy_bullet.Velocity = dir;
1621        };
1622        wait.Start(1);
1623    }
1624    void enemy_shoot_3(Vector pos, Vector dir)
1625    {
1626        bullet enemy_bullet = new bullet(27, 27);
1627        enemy_bullet.Shape = Shape.Circle;
1628        enemy_bullet.Position = pos;
1629        enemy_bullet.IgnoresCollisionResponse = true;
1630        enemy_bullet.IgnoresGravity = true;
1631        enemy_bullet.CollisionIgnoreGroup = 2;
1632        enemy_bullet.Image = bullet_enemy_01;
1633
1634        Add(enemy_bullet, 0);
1635        enemy_bullet.Hit(dir);
1636        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1637        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1638
1639    }
1640    void enemy_shoot_4(Vector pos, Vector dir)
1641    {
1642        bullet enemy_bullet = new bullet(15, 35);
1643
1644        Add(enemy_bullet, 0);
1645        enemy_bullet.Shape = Shape.Circle;
1646        enemy_bullet.Position = pos;
1647        enemy_bullet.IgnoresCollisionResponse = true;
1648        enemy_bullet.IgnoresGravity = true;
1649        enemy_bullet.CollisionIgnoreGroup = 2;
1650        enemy_bullet.Image = bullet_enemy_07;
1651        enemy_bullet.Hit(dir);
1652
1653        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(45);
1654        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1655        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1656
1657    }
1658
1659    #endregion
1660
1661    #region Bosses
1662
1663    void boss_ship_1(Vector pos, double width, double height)
1664    {
1665        boss boss_ship = new boss(196, 124);
1666        boss_ship.Shape = Shape.Circle;
1667        boss_ship.Position = pos;
1668        boss_ship.IgnoresCollisionResponse = true;
1669        boss_ship.CollisionIgnoreGroup = 3;
1670        boss_ship.Image = boss_ship_01;
1671
1672        Add(boss_ship, -1);
1673        boss_ship.Hit(stagespeed);
1674        AddCollisionHandler<boss, frontborder>(boss_ship, boss_01_start);
1675        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
1676    }
1677    void boss_01_start(boss boss, frontborder border)
1678    {
1679        if (!boss.canShoot)
1680        {
1681            boss.canShoot = true;
1682            boss.Velocity = boss.Velocity / 8;
1683
1684            Timer wait = new Timer();
1685            wait.Interval = 5;
1686            wait.Timeout += delegate
1687            {
1688                MediaPlayer.Play("Andross");
1689                AddCollisionHandler<boss, bullet>(boss, damageBoss);
1690                MediaPlayer.Volume = 1;
1691                boss.Velocity = new Vector(0, 0);
1692                boss.health.Value = boss.health.MaxValue;
1693                boss_01_start_shooting(boss);
1694            };
1695            wait.Start(1);
1696
1697            Timer fade_volume = new Timer();
1698            fade_volume.Interval = 0.2;
1699            fade_volume.Timeout += delegate
1700            {
1701                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
1702                if (MediaPlayer.Volume == 0)
1703                {
1704                    fade_volume.Stop();
1705                }
1706            };
1707            fade_volume.Start();
1708
1709        }
1710    }
1711    void boss_01_start_shooting(boss boss)
1712    {
1713        int i = 0;
1714
1715        double angle5 = 0;
1716        double c = 1;
1717        UnlimitedAngle angle05;
1718
1719        Timer shoot2 = new Timer();
1720        shoot2.Interval = 0.01;
1721        shoot2.Timeout += delegate
1722        {
1723            if (!boss.IsDestroyed)
1724            {
1725                angle5 = angle5 + c;
1726                c = c + 0.1;
1727                angle05 = UnlimitedAngle.FromDegrees(angle5);
1728                boss_shoot_2(boss.Position,
1729
1730                    angle05.GetVector() * 500
1731                    );
1732            }
1733            else
1734            {
1735                shoot2.Stop();
1736            }
1737        };
1738        Timer wait = new Timer();
1739
1740        Timer enemy_shoot1 = new Timer();
1741        enemy_shoot1.Interval = 0.02;
1742        enemy_shoot1.Timeout += delegate
1743        {
1744            i++;
1745            if (i == 100)
1746            {
1747                enemy_shoot1.Stop();
1748                shoot2.Start();
1749                wait.Start(1);
1750            };
1751            if (boss.IsDestroyed)
1752            {
1753                enemy_shoot1.Stop();
1754            }
1755                boss_shoot_1(boss.Position + new Vector(RandomGen.NextDouble(-50, 50), RandomGen.NextDouble(-50, 50)));
1756        };
1757
1758        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1759        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(90);
1760        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(180);
1761        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(270);
1762        double b = 0;
1763
1764        Timer shoot = new Timer();
1765        shoot.Interval = 0.08;
1766        shoot.Timeout += delegate
1767        {
1768            if (!boss.IsDestroyed)
1769            {
1770                b = b + 12;
1771                angle = UnlimitedAngle.FromDegrees(b);
1772                angle2 = UnlimitedAngle.FromDegrees(b + 90);
1773                angle3 = UnlimitedAngle.FromDegrees(b + 180);
1774                angle4 = UnlimitedAngle.FromDegrees(b + 270);
1775
1776                boss_shoot_3(boss.Position, angle.GetVector() * 400);
1777                boss_shoot_3(boss.Position, angle2.GetVector() * 400);
1778                boss_shoot_3(boss.Position, angle3.GetVector() * 400);
1779                boss_shoot_3(boss.Position, angle4.GetVector() * 400);
1780
1781                enemy_shootsfx.Play();
1782            }
1783            else shoot.Stop();
1784        };
1785
1786        wait.Interval = 0.5;
1787        wait.Timeout += delegate
1788        {
1789            if (boss.IsDestroyed) wait.Stop();
1790            i = 0;
1791            enemy_shoot1.Start(100);
1792            shoot2.Stop();
1793        };
1794
1795        enemy_shoot1.Start();
1796        shoot.Start();
1797    }
1798
1799    void boss_shoot_1(Vector pos)
1800    {
1801        bullet enemy_bullet = new bullet(27, 27);
1802        enemy_bullet.Shape = Shape.Circle;
1803        enemy_bullet.Position = pos;
1804        enemy_bullet.IgnoresCollisionResponse = true;
1805        enemy_bullet.IgnoresGravity = true;
1806        enemy_bullet.CollisionIgnoreGroup = 2;
1807        enemy_bullet.Image = bullet_enemy_06;
1808
1809        enemy_bullet.Hit((player.Position - enemy_bullet.Position).Normalize() * 300);
1810        Add(enemy_bullet, 0);
1811        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1812        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1813    }
1814    void boss_shoot_2(Vector pos, Vector dir)
1815    {
1816        bullet enemy_bullet = new bullet(27, 27);
1817        enemy_bullet.Shape = Shape.Circle;
1818        enemy_bullet.Position = pos;
1819        enemy_bullet.IgnoresCollisionResponse = true;
1820        enemy_bullet.IgnoresGravity = true;
1821        enemy_bullet.CollisionIgnoreGroup = 2;
1822        enemy_bullet.Image = bullet_enemy_06;
1823
1824        Add(enemy_bullet, 0);
1825        enemy_bullet.Hit(dir / 9);
1826        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1827        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1828
1829        Timer wait = new Timer();
1830        wait.Interval = 0.8;
1831        wait.Timeout += delegate
1832        {
1833            enemy_bullet.Velocity = dir;
1834        };
1835        wait.Start(1);
1836    }
1837    void boss_shoot_3(Vector pos, Vector dir)
1838    {
1839        bullet enemy_bullet = new bullet(27, 27);
1840        enemy_bullet.Shape = Shape.Circle;
1841        enemy_bullet.Position = pos;
1842        enemy_bullet.IgnoresCollisionResponse = true;
1843        enemy_bullet.IgnoresGravity = true;
1844        enemy_bullet.CollisionIgnoreGroup = 2;
1845        enemy_bullet.Image = bullet_enemy_06;
1846
1847        Add(enemy_bullet, 0);
1848        enemy_bullet.Hit(dir);
1849        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
1850        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
1851
1852    }
1853
1854
1855    void boss_ship_2(Vector pos, double width, double height)
1856    {
1857        boss boss_ship = new boss(244, 256);
1858        boss_ship.health.MaxValue = 15000;
1859        boss_ship.health.Value = 15000;
1860        boss_ship.Shape = Shape.FromImage(boss_ship_02);
1861        boss_ship.Position = pos;
1862        boss_ship.IgnoresCollisionResponse = true;
1863        boss_ship.CollisionIgnoreGroup = 3;
1864        boss_ship.Image = boss_ship_02;
1865
1866        Add(boss_ship, -1);
1867        boss_ship.Hit(stagespeed);
1868        AddCollisionHandler<boss, frontborder>(boss_ship, boss_02_start);
1869        AddCollisionHandler<boss, player>(boss_ship, damagePlayerBossShip);
1870    }
1871    void boss_02_start(boss boss, frontborder border)
1872    {
1873        if (!boss.canShoot)
1874        {
1875            boss.canShoot = true;
1876            boss.Velocity = boss.Velocity / 8;
1877
1878            Timer wait = new Timer();
1879            wait.Interval = 5;
1880            wait.Timeout += delegate
1881            {
1882                MediaPlayer.Play("Andross");
1883                AddCollisionHandler<boss, bullet>(boss, damageBoss);
1884                MediaPlayer.Volume = 1;
1885                boss.Velocity = new Vector(0, 0);
1886                boss.Oscillate(Vector.UnitY, 125, 0.2);
1887
1888                boss_02_start_shooting(boss);
1889            };
1890            wait.Start(1);
1891
1892            Timer fade_volume = new Timer();
1893            fade_volume.Interval = 0.2;
1894            fade_volume.Timeout += delegate
1895            {
1896                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
1897                if (MediaPlayer.Volume == 0)
1898                {
1899                    fade_volume.Stop();
1900                }
1901            };
1902            fade_volume.Start();
1903
1904        }
1905    }
1906    void boss_02_start_shooting(boss boss)
1907    {
1908        UnlimitedAngle angle = UnlimitedAngle.FromDegrees(0);
1909        UnlimitedAngle angle2 = UnlimitedAngle.FromDegrees(0);
1910        UnlimitedAngle angle3 = UnlimitedAngle.FromDegrees(0);
1911        UnlimitedAngle angle4 = UnlimitedAngle.FromDegrees(0);
1912        double i = 0;
1913        double c = 0;
1914        double d = 0;
1915        double f = 0;
1916
1917        Timer wait = new Timer();
1918        Timer shoot = new Timer();
1919        Timer shoot2 = new Timer();
1920        Timer shoot3 = new Timer();
1921        Timer shoot4 = new Timer();
1922        shoot.Interval = 0.05;
1923        shoot.Timeout += delegate
1924        {
1925            if (boss.IsDestroyed)
1926            {
1927                wait.Stop();
1928                shoot.Stop();
1929                shoot2.Stop();
1930                shoot3.Stop();
1931                shoot4.Stop();
1932            }
1933            if (!boss.IsDestroyed)
1934            {
1935                c++;
1936                if (c >= 36)
1937                {
1938                    f++;
1939                    d = 1;
1940                    c = 0;
1941                    shoot.Stop();
1942                    wait.Start(1);
1943                }
1944
1945                i = i + 10;
1946                angle = UnlimitedAngle.FromDegrees(i);
1947                angle2 = UnlimitedAngle.FromDegrees(i + 90);
1948                angle3 = UnlimitedAngle.FromDegrees(i + 180);
1949                angle4 = UnlimitedAngle.FromDegrees(i + 270);
1950
1951                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1952                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1953                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1954
1955                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1956                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1957                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1958
1959                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1960                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1961                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1962
1963                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
1964                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 480);
1965                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 500);
1966
1967
1968                enemy_shootsfx.Play();
1969            }
1970            else shoot.Stop();
1971        };
1972
1973
1974        UnlimitedAngle angleb = UnlimitedAngle.FromDegrees(0);
1975        UnlimitedAngle angle2b = UnlimitedAngle.FromDegrees(0);
1976        UnlimitedAngle angle3b = UnlimitedAngle.FromDegrees(0);
1977        UnlimitedAngle angle4b = UnlimitedAngle.FromDegrees(0);
1978        double ib = 0;
1979
1980
1981
1982        shoot2.Interval = 0.05;
1983        shoot2.Timeout += delegate
1984        {
1985            if (!boss.IsDestroyed)
1986            {
1987                if (boss.IsDestroyed)
1988                {
1989                    wait.Stop();
1990                    shoot.Stop();
1991                    shoot2.Stop();
1992                    shoot3.Stop();
1993                    shoot4.Stop();
1994                }
1995                c++;
1996                if (c >= 36)
1997                {
1998                    f++;
1999                    d = 0;
2000                    c = 0;
2001                    shoot2.Stop();
2002                    wait.Start(1);
2003                }
2004
2005                ib = ib - 10;
2006                angleb = UnlimitedAngle.FromDegrees(ib);
2007                angle2b = UnlimitedAngle.FromDegrees(ib - 90);
2008                angle3b = UnlimitedAngle.FromDegrees(ib - 180);
2009                angle4b = UnlimitedAngle.FromDegrees(ib - 270);
2010
2011                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2012                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2013                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2014
2015                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2016                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2017                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2018
2019                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2020                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2021                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2022
2023                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2024                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2025                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2026
2027
2028                enemy_shootsfx.Play();
2029            }
2030            else shoot.Stop();
2031        };
2032
2033        shoot3.Interval = 0.05;
2034        shoot3.Timeout += delegate
2035        {
2036            if (boss.IsDestroyed)
2037            {
2038                wait.Stop();
2039                shoot.Stop();
2040                shoot2.Stop();
2041                shoot3.Stop();
2042                shoot4.Stop();
2043            }
2044            if (!boss.IsDestroyed)
2045            {
2046                c++;
2047                if (c >= 36)
2048                {
2049                    c = 0;
2050                    shoot3.Stop();
2051                    wait.Start(1);
2052                }
2053
2054                ib = ib - 10;
2055                angleb = UnlimitedAngle.FromDegrees(ib);
2056                angle2b = UnlimitedAngle.FromDegrees(ib - 90);
2057                angle3b = UnlimitedAngle.FromDegrees(ib - 180);
2058                angle4b = UnlimitedAngle.FromDegrees(ib - 270);
2059
2060                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2061                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2062                boss2_shoot_2(boss.Position, (angleb + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2063
2064                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2065                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2066                boss2_shoot_2(boss.Position, (angle2b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2067
2068                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2069                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2070                boss2_shoot_2(boss.Position, (angle3b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2071
2072                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(0)).GetVector() * 460);
2073                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-7)).GetVector() * 480);
2074                boss2_shoot_2(boss.Position, (angle4b + UnlimitedAngle.FromDegrees(-14)).GetVector() * 500);
2075
2076                i = i + 10;
2077                angle = UnlimitedAngle.FromDegrees(i);
2078                angle2 = UnlimitedAngle.FromDegrees(i + 90);
2079                angle3 = UnlimitedAngle.FromDegrees(i + 180);
2080                angle4 = UnlimitedAngle.FromDegrees(i + 270);
2081
2082                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2083                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2084                boss2_shoot_1(boss.Position, (angle + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2085
2086                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2087                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2088                boss2_shoot_1(boss.Position, (angle2 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2089
2090                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2091                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2092                boss2_shoot_1(boss.Position, (angle3 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2093
2094                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(0)).GetVector() * 500);
2095                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(7)).GetVector() * 520);
2096                boss2_shoot_1(boss.Position, (angle4 + UnlimitedAngle.FromDegrees(14)).GetVector() * 540);
2097
2098
2099                enemy_shootsfx.Play();
2100            }
2101            else shoot.Stop();
2102        };
2103
2104        double ic = 0;
2105        double jc = 0;
2106        double cb = 0;
2107
2108        UnlimitedAngle anglec = UnlimitedAngle.FromDegrees(0);
2109        UnlimitedAngle anglec2 = UnlimitedAngle.FromDegrees(0);
2110
2111        shoot4.Interval = 0.05;
2112        shoot4.Timeout += delegate
2113        {
2114            if (boss.IsDestroyed)
2115            {
2116                wait.Stop();
2117                shoot.Stop();
2118                shoot2.Stop();
2119                shoot3.Stop();
2120                shoot4.Stop();
2121            }
2122            cb++;
2123            if (cb >= 36)
2124            {
2125                ic = 0;
2126                cb = 0;
2127                shoot4.Stop();
2128                wait.Start(1);
2129            }
2130
2131            ic = ic + 10;
2132            jc = jc - 10;
2133            anglec = UnlimitedAngle.FromDegrees(ic);
2134            anglec2 = UnlimitedAngle.FromDegrees(jc);
2135
2136            boss2_shoot_3(boss.Position, anglec.GetVector() * 500);
2137            boss2_shoot_3(boss.Position, (anglec + UnlimitedAngle.FromDegrees(90)).GetVector() * 480);
2138            boss2_shoot_3(boss.Position, (anglec + UnlimitedAngle.FromDegrees(180)).GetVector() * 480);
2139            boss2_shoot_3(boss.Position, (anglec + UnlimitedAngle.FromDegrees(270)).GetVector() * 480);
2140
2141            boss2_shoot_3(boss.Position, anglec2.GetVector() * 500);
2142            boss2_shoot_3(boss.Position, (anglec2 + UnlimitedAngle.FromDegrees(90)).GetVector() * 520);
2143            boss2_shoot_3(boss.Position, (anglec2 + UnlimitedAngle.FromDegrees(180)).GetVector() * 520);
2144            boss2_shoot_3(boss.Position, (anglec2 + UnlimitedAngle.FromDegrees(270)).GetVector() * 520);
2145
2146            enemy_shootsfx.Play();
2147        };
2148
2149        wait.Interval = 1.5;
2150        wait.Timeout += delegate
2151        {
2152           
2153            if (boss.IsDestroyed){ 
2154                wait.Stop();
2155                shoot.Stop();
2156                shoot2.Stop();
2157                shoot3.Stop();
2158                shoot4.Stop();
2159            }
2160
2161            if (f >= 3)
2162            {
2163                bool ss = RandomGen.NextBool();
2164
2165                f = 0;
2166
2167                if (ss) shoot3.Start();
2168                else if (!ss) shoot4.Start();
2169            }
2170            else if (d == 0) shoot.Start();
2171            else if (d == 1) shoot2.Start();
2172        };
2173
2174        wait.Start();
2175    }
2176
2177    void boss2_shoot_1(Vector pos, Vector dir)
2178    {
2179        bullet enemy_bullet = new bullet(15, 35);
2180
2181        Add(enemy_bullet, 0);
2182        enemy_bullet.Shape = Shape.Circle;
2183        enemy_bullet.Position = pos;
2184        enemy_bullet.IgnoresCollisionResponse = true;
2185        enemy_bullet.IgnoresGravity = true;
2186        enemy_bullet.CollisionIgnoreGroup = 2;
2187        enemy_bullet.Image = bullet_enemy_08;
2188        enemy_bullet.Hit(dir);
2189
2190        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(45);
2191        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2192        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2193
2194    }
2195    void boss2_shoot_2(Vector pos, Vector dir)
2196    {
2197        bullet enemy_bullet = new bullet(15, 35);
2198
2199        Add(enemy_bullet, 0);
2200        enemy_bullet.Shape = Shape.Circle;
2201        enemy_bullet.Position = pos;
2202        enemy_bullet.IgnoresCollisionResponse = true;
2203        enemy_bullet.IgnoresGravity = true;
2204        enemy_bullet.CollisionIgnoreGroup = 2;
2205        enemy_bullet.Image = bullet_enemy_07;
2206        enemy_bullet.Hit(dir);
2207
2208        enemy_bullet.Angle = enemy_bullet.Velocity.Angle + Angle.FromDegrees(-45);
2209        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2210        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2211
2212    }
2213    void boss2_shoot_3(Vector pos, Vector dir)
2214    {
2215        bullet enemy_bullet = new bullet(27, 27);
2216        enemy_bullet.Shape = Shape.Circle;
2217        enemy_bullet.Position = pos;
2218        enemy_bullet.IgnoresCollisionResponse = true;
2219        enemy_bullet.IgnoresGravity = true;
2220        enemy_bullet.CollisionIgnoreGroup = 2;
2221        enemy_bullet.Image = RandomGen.SelectOne<Image>(bullet_enemy_03, bullet_enemy_04);
2222
2223        Add(enemy_bullet, 0);
2224        enemy_bullet.Hit(dir);
2225        AddCollisionHandler<bullet, player>(enemy_bullet, damagePlayerBullet);
2226        AddCollisionHandler<bullet, bulletdes>(enemy_bullet, destroy);
2227    }
2228
2229    #endregion
2230
2231    #region Power-ups
2232
2233    void powerup(Vector pos)
2234    {
2235        int a = RandomGen.NextInt(1, 11);
2236        if (a == 1)
2237        {
2238            createPowerup(pos);
2239        };
2240    }
2241    void createPowerup(Vector pos)
2242    {
2243        int type = RandomGen.NextInt(1, 9);
2244
2245        PhysicsObject powerup = new PhysicsObject(15, 15);
2246        powerup.Position = pos;
2247        powerup.Tag = "powerup";
2248        powerup.IgnoresCollisionResponse = true;
2249        powerup.IgnoresGravity = true;
2250        powerup.CollisionIgnoreGroup = 4;
2251        powerup.MaximumLifetime = TimeSpan.FromSeconds(5);
2252
2253        FollowerBrain powerup_follow = new FollowerBrain(player);
2254        powerup_follow.DistanceFar = 300;
2255        powerup_follow.Speed = 430;
2256        powerup_follow.Active = true;
2257
2258        powerup.Brain = powerup_follow;
2259
2260        if (type < 5)
2261        {
2262            powerup.Image = powerup_damage;
2263            AddCollisionHandler(powerup, "player1", powerupdamage);
2264        }
2265        else if (type > 5)
2266        {
2267            powerup.Image = powerup_spread;
2268            AddCollisionHandler(powerup, "player1", powerupspread);
2269        }
2270        else if (type == 5)
2271        {
2272            powerup.Image = powerup_upgrade;
2273            AddCollisionHandler(powerup, "player1", powerupupgrade);
2274        }
2275
2276        Add(powerup, -2);
2277    }
2278    void powerupdamage(PhysicsObject powerup, PhysicsObject p)
2279    {
2280        wpn_damageRatio.Value++;
2281        powerup.Destroy();
2282        powerupsfx.Play();
2283
2284        GameObject damageup = new GameObject(121,16);
2285        damageup.Position = p.Position + new Vector(0, 30);
2286        damageup.MaximumLifetime = TimeSpan.FromSeconds(0.75);
2287        damageup.Image = damage_up;
2288
2289        Timer damage = new Timer();
2290        damage.Interval = 0.1;
2291        damage.Timeout += delegate
2292        {
2293            if (damageup.IsDestroyed) damage.Stop();
2294            if (damageup.IsVisible) damageup.IsVisible = false;
2295            else damageup.IsVisible = true;
2296        };
2297
2298        Add(damageup, 2);
2299        damage.Start();
2300    }
2301    void powerupspread(PhysicsObject powerup, PhysicsObject p)
2302    {
2303        wpn_spread.Value++;
2304        powerup.Destroy();
2305        powerupsfx.Play();
2306
2307        GameObject spreadup = new GameObject(121, 16);
2308        spreadup.Position = p.Position + new Vector(0, 30);
2309        spreadup.MaximumLifetime = TimeSpan.FromSeconds(0.75);
2310        spreadup.Image = spread_up;
2311
2312        Timer damage = new Timer();
2313        damage.Interval = 0.1;
2314        damage.Timeout += delegate
2315        {
2316            if (spreadup.IsDestroyed) damage.Stop();
2317            if (spreadup.IsVisible) spreadup.IsVisible = false;
2318            else spreadup.IsVisible = true;
2319        };
2320
2321        Add(spreadup, 2);
2322        damage.Start();
2323    }
2324    void powerupupgrade(PhysicsObject powerup, PhysicsObject p)
2325    {
2326        drd_level.Value++;
2327
2328        powerup.Destroy();
2329        powerupsfx.Play();
2330
2331        GameObject upgrade_pu = new GameObject(98, 16);
2332        upgrade_pu.Position = p.Position + new Vector(0, 30);
2333        upgrade_pu.MaximumLifetime = TimeSpan.FromSeconds(0.75);
2334        upgrade_pu.Image = upgrade;
2335
2336        Timer damage = new Timer();
2337        damage.Interval = 0.1;
2338        damage.Timeout += delegate
2339        {
2340            if (upgrade_pu.IsDestroyed) damage.Stop();
2341            if (upgrade_pu.IsVisible) upgrade_pu.IsVisible = false;
2342            else upgrade_pu.IsVisible = true;
2343        };
2344
2345        Add(upgrade_pu, 2);
2346        damage.Start();
2347
2348        if (drd_level.Value == 1)
2349        {
2350            if (drd_type == 0) droid(new Vector(-45, 0));
2351            else if (drd_type == 1) droid(new Vector(40,0));
2352        }
2353        else if (drd_level.Value == 2)
2354        {
2355            if (drd_type == 0)
2356            {
2357                droid(new Vector(-45, 30));
2358                droid(new Vector(-45, -30));
2359            }
2360            else if (drd_type == 1)
2361            {
2362                droid(new Vector(-10, 35));
2363                droid(new Vector(-10, -35));
2364            }
2365        }
2366        else if (drd_level.Value == 3)
2367        {
2368            if (drd_type == 0)
2369            {
2370                droid(new Vector(-30, 30));
2371                droid(new Vector(-30, -30));
2372                droid(new Vector(-50, 0));
2373            }
2374            else if (drd_type == 1)
2375            {
2376                droid(new Vector(40, 0));
2377                droid(new Vector(-10, 35));
2378                droid(new Vector(-10, -35));
2379            }
2380        }
2381        else if (drd_level.Value == 4)
2382        {
2383            if (drd_type == 0)
2384            {
2385                droid(new Vector(-30, 50));
2386                droid(new Vector(-30, -50));
2387                droid(new Vector(-50, 30));
2388                droid(new Vector(-50, -30));
2389            }
2390            else if (drd_type == 1)
2391            {
2392                droid(new Vector(-30, 55));
2393                droid(new Vector(-30, -55));
2394                droid(new Vector(-10, 35));
2395                droid(new Vector(-10, -35));
2396            }
2397        }
2398
2399
2400    }
2401
2402    #endregion
2403
2404    #region Misc/Colliders
2405
2406    void destroy(PhysicsObject p, PhysicsObject target)
2407    {
2408        p.Destroy();
2409    }
2410    void damagePlayerEnemyShip(enemy b, player p)
2411    {
2412        p.health.Value = p.health.Value - 5;
2413        if (p.health <= 0)
2414        {
2415            explosionsfx.Play();
2416            explosion_animation2(playership);
2417            playership.Destroy();
2418        }
2419        b.Destroy();
2420        hurtsfx.Play();
2421        explosionsfx.Play();
2422        explosion_animation(b);
2423    }
2424    void damagePlayerEnemyShip2(enemy b, player p)
2425    {
2426        p.health.Value = p.health.Value - 5;
2427        if (p.health <= 0)
2428        {
2429            explosionsfx.Play();
2430            explosion_animation2(playership);
2431            playership.Destroy();
2432        }
2433        hurtsfx.Play();
2434    }
2435    void damagePlayerBossShip(boss b, player p)
2436    {
2437        p.health.Value = 0;
2438        explosionsfx.Play();
2439        explosion_animation2(playership);
2440        playership.Destroy();
2441        hurtsfx.Play();
2442    }
2443    void damagePlayerBullet(bullet b, player p)
2444    {
2445        p.health.Value = p.health.Value - b.damage;
2446        if (p.health <= 0)
2447        {
2448            explosion_animation2(playership);
2449            playership.Destroy();
2450            explosionsfx.Play();
2451        }
2452        b.Destroy();
2453        hurtsfx.Play();
2454    }
2455    void damageEnemy(bullet b, enemy e)
2456    {
2457        e.health.Value = e.health.Value - b.damage;
2458        if (e.health.Value <= 0 && e.IsVisible)
2459        {
2460            e.IsVisible = false;
2461            powerup(e.Position);
2462            explosionsfx.Play();
2463            explosion_animation(e);
2464        };
2465        hitsfx.Play();
2466        b.Destroy();
2467       
2468    }
2469    void damageBoss(boss b, bullet bullet)
2470    {
2471            if (bullet.Tag == "player_bullet")
2472            {
2473                bullet.Destroy();
2474                b.health.Value = b.health.Value - bullet.damage;
2475                if (b.health.Value <= 0 && !b001 && b.Image == boss_ship_01)
2476                {
2477                    b001 = true;
2478                    explosion_animation_boss(b);
2479
2480                    Timer fade = new Timer();
2481                    fade.Interval = 0.03;
2482                    fade.Timeout += delegate
2483                    {
2484                        MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2485                        if (MediaPlayer.Volume == 0)
2486                        {
2487                            fade.Stop();
2488                        }
2489                    };
2490                    fade.Start();
2491
2492                    stage_clear = new GameObject(290, 39);
2493                    stage_clear.Image = stage_1_clear;
2494                    stage_clear.Position = cntr;
2495
2496                    Timer stageclr = new Timer();
2497                    stageclr.Interval = 0.8;
2498                    stageclr.Timeout += delegate
2499                    {
2500                        if (stage_clear.IsVisible) stage_clear.IsVisible = false;
2501                        else stage_clear.IsVisible = true;
2502                    };
2503
2504                    Timer wait = new Timer();
2505                    wait.Interval = 1;
2506                    wait.Timeout += delegate
2507                    {
2508                        Add(stage_clear, 3);
2509                        stageclr.Start();
2510                        SoundEffect.MasterVolume = 0.2;
2511                        MediaPlayer.Stop();
2512                        MediaPlayer.Volume = 1;
2513                        MediaPlayer.IsRepeating = false;
2514                        player.health.Value = player.health.MaxValue;
2515                        MediaPlayer.Play("Stage Clear");
2516
2517                        ControllerOne.Listen(Button.Start, ButtonState.Pressed, nextlevel, null);
2518                    };
2519
2520                    wait.Start(1);
2521                }
2522                else if (b.health.Value <= 0 && !b002 && b.Image == boss_ship_02)
2523                {
2524                    b002 = true;
2525
2526                    explosion_animation_boss(b);
2527
2528                    Timer fade = new Timer();
2529                    fade.Interval = 0.03;
2530                    fade.Timeout += delegate
2531                    {
2532                        MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2533                        if (MediaPlayer.Volume == 0)
2534                        {
2535                            fade.Stop();
2536                        }
2537                    };
2538                    fade.Start();
2539
2540                    stage_clear = new GameObject(290, 39);
2541                    stage_clear.Image = stage_2_clear;
2542                    stage_clear.Position = cntr;
2543
2544                    Timer stageclr = new Timer();
2545                    stageclr.Interval = 0.8;
2546                    stageclr.Timeout += delegate
2547                    {
2548                        if (stage_clear.IsVisible) stage_clear.IsVisible = false;
2549                        else stage_clear.IsVisible = true;
2550                    };
2551
2552                    Timer wait = new Timer();
2553                    wait.Interval = 1;
2554                    wait.Timeout += delegate
2555                    {
2556                        Add(stage_clear, 3);
2557                        stageclr.Start();
2558                        SoundEffect.MasterVolume = 0.2;
2559                        MediaPlayer.Stop();
2560                        MediaPlayer.Volume = 1;
2561                        MediaPlayer.IsRepeating = false;
2562                        player.health.Value = player.health.MaxValue;
2563                        MediaPlayer.Play("Stage Clear");
2564
2565                        ControllerOne.Listen(Button.Start, ButtonState.Pressed, nextlevel, null);
2566                    };
2567
2568                    wait.Start(1);
2569                }
2570
2571                hitsfx.Play();
2572            }
2573    }
2574    void nextlevel()
2575    {
2576        ClearControls();
2577        hide_player();
2578        Timer.SingleShot(0.5, ClearGameObjects);
2579
2580        if (currentlevel == "level_01")
2581        {
2582            SoundEffect.MasterVolume = 0.8;
2583            healthBar.Destroy();
2584
2585            selectsfx.Play();
2586            stage_clear.Destroy();
2587
2588            Timer fade = new Timer();
2589            fade.Interval = 0.03;
2590            fade.Timeout += delegate
2591            {
2592                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2593                if (MediaPlayer.Volume == 0)
2594                {
2595                    fade.Stop();
2596                    MediaPlayer.Stop();
2597                    MediaPlayer.Volume = 1;
2598                }
2599            };
2600            fade.Start();
2601
2602            black = new GameObject(Screen.Width, Screen.Height);
2603            black.Position = cntr;
2604            black.Color = Color.Transparent;
2605
2606            Add(black, 2);
2607            black.FadeColorTo(Color.Black, 0.5);
2608
2609
2610            Timer wait = new Timer();
2611            wait.Interval = 1;
2612            wait.Timeout += delegate
2613            {
2614                drd_level.Value = 0;
2615                wpn_damageRatio.Value = 1;
2616                wpn_spread.Value = 1;
2617
2618                bg.Image = stage2_bg;
2619                bg2.Image = stage2_bg;
2620                ClearControls();
2621
2622                currentlevel = "level_02";
2623                CreateLevel(currentlevel);
2624
2625                GameObject stage_02_start = new GameObject(405, 39);
2626                stage_02_start.Position = cntr;
2627                stage_02_start.Image = stage_2_start;
2628                Add(stage_02_start, 3);
2629
2630                black = new GameObject(Screen.Width, Screen.Height);
2631                black.Position = cntr;
2632                black.Color = Color.Black;
2633                Add(black, 2);
2634
2635                double i = 0;
2636                Timer start = new Timer();
2637                start.Interval = 0.1;
2638                start.Timeout += delegate
2639                {
2640                    i++;
2641                    if (i >= 15) stage_02_start.Destroy();
2642                    if (stage_02_start.IsVisible) stage_02_start.IsVisible = false;
2643                    else stage_02_start.IsVisible = true;
2644                };
2645                Pause();
2646                start.Start(15);
2647                ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_02, null);
2648            };
2649            wait.Start(1);
2650        }
2651        else if (currentlevel == "level_02")
2652        {
2653            SoundEffect.MasterVolume = 0.8;
2654            healthBar.Destroy();
2655
2656            selectsfx.Play();
2657            stage_clear.Destroy();
2658
2659            Timer fade = new Timer();
2660            fade.Interval = 0.03;
2661            fade.Timeout += delegate
2662            {
2663                MediaPlayer.Volume = MediaPlayer.Volume - 0.1;
2664                if (MediaPlayer.Volume == 0)
2665                {
2666                    fade.Stop();
2667                    MediaPlayer.Stop();
2668                    MediaPlayer.Volume = 1;
2669                }
2670            };
2671            fade.Start();
2672
2673            black = new GameObject(Screen.Width, Screen.Height);
2674            black.Position = cntr;
2675            black.Color = Color.Transparent;
2676
2677            Add(black, 2);
2678            black.FadeColorTo(Color.Black, 0.5);
2679
2680
2681            Timer wait = new Timer();
2682            wait.Interval = 1;
2683            wait.Timeout += delegate
2684            {
2685                drd_level.Value = 0;
2686                wpn_damageRatio.Value = 1;
2687                wpn_spread.Value = 1;
2688
2689                bg.Image = stage2_bg;
2690                bg2.Image = stage2_bg;
2691                ClearControls();
2692
2693                currentlevel = "level_03";
2694                CreateLevel(currentlevel);
2695
2696                GameObject stage_03_start = new GameObject(405, 39);
2697                stage_03_start.Position = cntr;
2698                stage_03_start.Image = stage_3_start;
2699                Add(stage_03_start, 3);
2700
2701                black = new GameObject(Screen.Width, Screen.Height);
2702                black.Position = cntr;
2703                black.Color = Color.Black;
2704                Add(black, 2);
2705
2706                double i = 0;
2707                Timer start = new Timer();
2708                start.Interval = 0.1;
2709                start.Timeout += delegate
2710                {
2711                    i++;
2712                    if (i >= 15) stage_03_start.Destroy();
2713                    if (stage_03_start.IsVisible) stage_03_start.IsVisible = false;
2714                    else stage_03_start.IsVisible = true;
2715                };
2716                Pause();
2717                start.Start(15);
2718                ControllerOne.Listen(Button.Start, ButtonState.Pressed, start_03, null);
2719            };
2720            wait.Start(1);
2721        }
2722    }
2723    void explosion_animation(enemy enemyship)
2724    {
2725        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
2726        explosion.Position = enemyship.Position;
2727        explosion.Animation = explosion_anim;
2728        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
2729        Add(explosion,-1);
2730        explosion.Animation.Start(1);
2731    }
2732    void explosion_animation_boss(boss enemyship)
2733    {
2734        GameObject explosion = new GameObject(enemyship.explosion_scale, enemyship.explosion_scale);
2735        explosion.Position = enemyship.Position;
2736        explosion.Animation = explosion_anim;
2737        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
2738        Add(explosion, -1);
2739        explosion.Animation.Start(1);
2740    }
2741    void explosion_animation2(PhysicsObject plr)
2742    {
2743        GameObject explosion = new GameObject(80,80);
2744        explosion.Position = plr.Position;
2745        explosion.Animation = explosion_anim;
2746        explosion.MaximumLifetime = TimeSpan.FromSeconds(0.2);
2747        Add(explosion, -1);
2748        explosion.Animation.Start(1);
2749
2750        Timer wait = new Timer();
2751        wait.Interval = 1;
2752        wait.Timeout += delegate
2753        {
2754            SoundEffect.MasterVolume = 0.2;
2755            MediaPlayer.IsRepeating = false;
2756            MediaPlayer.Play("Player_down");
2757
2758            MultiSelectWindow gameover = new MultiSelectWindow("Game Over", "Quit");
2759            gameover.ItemSelected += select_gameover;
2760            Add(gameover);
2761        };
2762        wait.Start(1);
2763
2764    }
2765    void select_gameover(int selection)
2766    {
2767        switch (selection)
2768        {
2769            case 0:
2770                ConfirmExit();
2771                break;
2772        }
2773    }
2774
2775    #endregion
2776}
Note: See TracBrowser for help on using the repository browser.