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

Revision 5703, 138.1 KB checked in by mijoliim, 6 years ago (diff)

Gradiant taitaa olla viimeinen päivitys.. ei vielä varmaa

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