source: 2012/09-22/SanteriH/Kynari/Kynari/Kynari/Kynari.cs @ 4758

Revision 4758, 197.1 KB checked in by saolhaka, 8 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Widgets;
5using Jypeli.Assets;
6using Jypeli.Controls;
7using Physics2DDotNet.Ignorers;
8
9public class Pelaaja : PlatformCharacter
10{
11    public bool DamageResistance { get; set; }
12    public bool voikoPoimiaAseen { get; set; }
13    public string varaAse;
14    public Explosion ViimeisinRajahdys { get; set; }
15    public DoubleMeter HPLaskuri { get; set; }
16    public Direction lukittuSuunta;
17    public Pelaaja(double width, double height, Shape shape)
18        : base(width, height, shape)
19    {
20        voikoPoimiaAseen = true;
21        DamageResistance = false;
22        varaAse = null;
23    }
24}
25
26// Yksinkertainen tasohyppely.
27public class Kynari : PhysicsGame
28{
29    #region Muuttujat
30
31    const double LIIKEVOIMA = 400;
32    const double HYPPYVOIMA = 850;
33    const double RUUDUNLEVEYS = 30;
34    const double RUUDUNKORKEUS = 30;
35    string Aseet = "Kaikki aseet";
36    string PowerUpit = "Päällä";
37    string HP = "Päällä";
38    string SailytaAse = "Kyllä";
39    string ase = null;
40    string ase2 = null;
41    int PISTEMAARA_JOLLA_VOITTAA_PELIN = 3;
42    int PHPMAARA = 100;
43    int HPBOOST = 25;
44    int HPBOOSTSINGLE = 25;
45    int kentta = 1;
46    int taso = 0;
47    int powerupmaara = 0;
48    int hpmaara = 0;
49    double CURRENTHP = 100;
50    double MAXHP = 100;
51
52    Pelaaja pelaaja1 = new Pelaaja(40, 40, Shape.Circle);
53    Pelaaja pelaaja2 = new Pelaaja(40, 40, Shape.Circle);
54
55    Image ammuslv4 = LoadImage("ammuslv4");
56    Image portaalikuva = LoadImage("portal");
57    Image hpkuva = LoadImage("health");
58    Image hpboostkuva = LoadImage("boost");
59    Image kranaatinheittimenkuva = LoadImage("grenadelauncher");
60    Image kranaatinheittimenkuva2 = LoadImage("grenadelauncher2");
61    Image kranaatinheittimenkuva3 = LoadImage("grenadelauncher3");
62    Image kranaatinheittimenkuva4 = LoadImage("grenadelauncher4");
63    Image kranaatinkuva = LoadImage("grenade");
64    Image kranaatinkuva2 = LoadImage("grenade2");
65    Image kranaatinkuva3 = LoadImage("grenade3");
66    Image kranaatinkuva4 = LoadImage("grenade4");
67    Image magnumkuva = LoadImage("magnum");
68    Image magnumkuva2 = LoadImage("magnum2");
69    Image magnumkuva3 = LoadImage("magnum3");
70    Image magnumkuva4 = LoadImage("magnum4");
71    Image miekankuva = LoadImage("miekka");
72    Image miekkahit = LoadImage("miekkaattack");
73    Image norsu = LoadImage("norsu");
74    Image norsu2 = LoadImage("norsu2");
75    Image haulikonkuva = LoadImage("shotgun");
76    Image haulikonkuva2 = LoadImage("shotgun2");
77    Image haulikonkuva3 = LoadImage("shotgun3");
78    Image haulikonkuva4 = LoadImage("shotgun4");
79    Image pistoolinkuva = LoadImage("pistol");
80    Image pistoolinkuva2 = LoadImage("pistol2");
81    Image pistoolinkuva3 = LoadImage("pistol3");
82    Image pistoolinkuva4 = LoadImage("pistol4");
83    Image kivaarinkuva = LoadImage("assaultrifle");
84    Image kivaarinkuva2 = LoadImage("assaultrifle2");
85    Image kivaarinkuva3 = LoadImage("assaultrifle3");
86    Image kivaarinkuva4 = LoadImage("assaultrifle4");
87    Image raketinheittimenkuva = LoadImage("rocketlauncher");
88    Image raketinheittimenkuva2 = LoadImage("rocketlauncher2");
89    Image raketinheittimenkuva3 = LoadImage("rocketlauncher3");
90    Image raketinheittimenkuva4 = LoadImage("rocketlauncher4");
91    Image raketinkuva = LoadImage("rocket");
92    Image raketinkuva2 = LoadImage("rocket2");
93    Image raketinkuva3 = LoadImage("rocket3");
94    Image raketinkuva4 = LoadImage("rocket4");
95    Image sniperinkuva = LoadImage("sniper");
96    Image sniperinkuva2 = LoadImage("sniper2");
97    Image sniperinkuva3 = LoadImage("sniper3");
98    Image sniperinkuva4 = LoadImage("sniper4");
99    Image target = LoadImage("target");
100    Image powerupinkuva = LoadImage("upgrade");
101    Image sidegradekuva = LoadImage("sidegrade");
102    Image flaregunkuva = LoadImage("flaregun");
103    Image flaregunkuva2 = LoadImage("flaregun2");
104    Image flaregunkuva3 = LoadImage("flaregun3");
105    Image flaregunkuva4 = LoadImage("flaregun4");
106    Image flarekuva = LoadImage("flare");
107    Image flarekuva2 = LoadImage("flare2");
108    Image flarekuva3 = LoadImage("flare3");
109    Image flarekuva4 = LoadImage("flare4");
110    Image konepistoolinkuva = LoadImage("smg");
111
112    bool saaAmpua = false;
113    bool tasapeli = false;
114    bool sailytahp = false;
115
116    SoundEffect hyppyAani = LoadSoundEffect("hyppays");
117    SoundEffect portalAani = LoadSoundEffect("maali");
118
119    ProgressBar hpNaytto;
120    ProgressBar hpNaytto2;
121
122    IntMeter pelaajan1Pisteet;
123    IntMeter pelaajan2Pisteet;
124
125
126    #endregion
127
128    #region Alustukset
129    public override void Begin()
130    {
131        pelaajan1Pisteet = new IntMeter(0);
132        pelaajan2Pisteet = new IntMeter(0);
133
134        DrawPerimeter = false; // ei haluta piirtää kentän reunoja
135        //IsFullScreen = true;
136        LuoAlkuValikko();
137    }
138
139    void AloitaUusiPeli()
140    {
141        MessageDisplay.Clear();
142        // ladataan kenttä
143        LuoKentta();
144        lisaaNappaimet();
145        LisaaLaskurit();
146        LisaaHPNaytot();
147        naytaTiedot();
148        tasapeli = false;
149        saaAmpua = false;
150        Timer.SingleShot(0.1, delegate
151        {
152            saaAmpua = true;
153        });
154    }
155    #endregion
156
157
158    #region KentanLataus
159
160    void LuoTasoKentta()
161    {
162        ClearAll();
163        TileMap ruudut = TileMap.FromLevelAsset("taso" + taso);
164        ruudut.SetTileMethod('x', LuoReuna);
165        ruudut.SetTileMethod('t', LuoTaso);
166        ruudut.SetTileMethod('l', LuoLyhytTaso);
167        ruudut.SetTileMethod('p', LuoPitkaTaso);
168        ruudut.SetTileMethod('k', LuoKeskipitkaTaso);
169        ruudut.SetTileMethod('j', LuoLyhytPystyTaso);
170        ruudut.SetTileMethod('z', LuoLattia);
171        ruudut.SetTileMethod('c', LuoSeina);
172        ruudut.SetTileMethod('.', LuoKohde);
173        ruudut.SetTileMethod(',', LuoPoltettavaTaso);
174        ruudut.SetTileMethod('w', LuoPortaali);
175        ruudut.SetTileMethod('p', LuoTutorialAse, new Vector(16, 11), "Pistooli", pistoolinkuva);
176        ruudut.SetTileMethod('f', LuoTutorialAse, new Vector(18, 10), "Valopistooli", flaregunkuva);
177        ruudut.SetTileMethod('v', LuoNorsuVihu, "Pistooli");
178        ruudut.SetTileMethod('i', LuoNorsuVihu, "Valopistooli");
179        ruudut.SetTileMethod('a', LuoNorsuVihu, "Kivääri");
180        ruudut.SetTileMethod('m', LuoAse, new Vector(24, 24), "Miekka", miekankuva);
181        ruudut.SetTileMethod('+', LuoPowerUp1, new Vector(16, 20), "Power Up", powerupinkuva);
182        ruudut.SetTileMethod('-', LuoUpgrade1, new Vector(16, 20), "Upgrade", sidegradekuva);
183        ruudut.SetTileMethod('h', LuoHP1, new Vector(20, 21), "HP", hpkuva);
184        ruudut.SetTileMethod('*', LuoHPIncrease, new Vector(20, 21), "HP Boost", hpboostkuva);
185        ruudut.SetTileMethod('P', LuoAse, new Vector(16, 11), "Pistooli", pistoolinkuva);
186        ruudut.SetTileMethod('A', LuoAse, new Vector(39, 13), "Kivääri", kivaarinkuva);
187        ruudut.SetTileMethod('G', LuoAse, new Vector(42, 15), "Kranaatinheitin", kranaatinheittimenkuva);
188        ruudut.SetTileMethod('S', LuoAse, new Vector(42, 10), "Haulikko", haulikonkuva);
189        ruudut.SetTileMethod('M', LuoAse, new Vector(17, 12), "Magnum", magnumkuva);
190        ruudut.SetTileMethod('R', LuoAse, new Vector(48, 15), "Raketinheitin", raketinheittimenkuva);
191        ruudut.SetTileMethod('U', LuoAse, new Vector(42, 11), "Sniper", sniperinkuva);
192        ruudut.SetTileMethod('F', LuoAse, new Vector(18, 10), "Valopistooli", flaregunkuva);
193        ruudut.SetTileMethod('1', delegate(Vector paikka, double leveys, double korkeus) { pelaaja1 = LuoYksinPelaaja(paikka, leveys, korkeus, Direction.Right, pelaaja1); });
194        ruudut.Execute(RUUDUNLEVEYS, RUUDUNKORKEUS);
195        Level.Background.CreateGradient(Color.White, Color.Gray);
196        Gravity = new Vector(0, -1500);
197        Camera.Follow(pelaaja1);
198    }
199
200    void LuoKentta()
201    {
202        ClearAll();
203        List<Vector> powerupvektorit = new List<Vector>();
204        List<Vector> hpvektorit = new List<Vector>();
205
206        powerupmaara = 0;
207        hpmaara = 0;
208        TileMap ruudut = TileMap.FromLevelAsset("kentta" + kentta);
209        ruudut.SetTileMethod('x', LuoReuna);
210        ruudut.SetTileMethod('t', LuoTaso);
211        ruudut.SetTileMethod('l', LuoLyhytTaso);
212        ruudut.SetTileMethod('p', LuoPitkaTaso);
213        ruudut.SetTileMethod('k', LuoKeskipitkaTaso);
214        ruudut.SetTileMethod('j', LuoLyhytPystyTaso);
215        ruudut.SetTileMethod('z', LuoLattia);
216        ruudut.SetTileMethod('c', LuoSeina);
217        ruudut.SetTileMethod('+', LisaaPowerUpPaikka, powerupvektorit);
218        ruudut.SetTileMethod('h', LisaaHPPaikka, hpvektorit);
219        if (Aseet == "Paljon aseita" || Aseet == "Kaikki aseet") { ruudut.SetTileMethod('A', LuoAse, new Vector(39, 13), "Kivääri", kivaarinkuva); }
220        if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('G', LuoAse, new Vector(42, 15), "Kranaatinheitin", kranaatinheittimenkuva); }
221        if (Aseet == "Paljon aseita" || Aseet == "Kaikki aseet") { ruudut.SetTileMethod('S', LuoAse, new Vector(42, 10), "Haulikko", haulikonkuva); }
222        if (Aseet != "Ei aseita") { ruudut.SetTileMethod('M', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); }
223        if (Aseet == "Vähän aseita") { ruudut.SetTileMethod('A', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); }
224        if (Aseet == "Vähän aseita") { ruudut.SetTileMethod('S', LuoAse, new Vector(17, 12), "Magnum", magnumkuva); }
225        if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('R', LuoAse, new Vector(48, 15), "Raketinheitin", raketinheittimenkuva); }
226        if (Aseet == "Kaikki aseet") { ruudut.SetTileMethod('U', LuoAse, new Vector(42, 11), "Sniper", sniperinkuva); }
227
228        // Koodi aseet
229        ruudut.SetTileMethod('F', LuoAse, new Vector(18, 10), "Valopistooli", flaregunkuva);
230
231        ruudut.SetTileMethod('1', delegate(Vector paikka, double leveys, double korkeus) { pelaaja1 = LuoPelaaja(paikka, leveys, korkeus, Direction.Right, pelaaja1); });
232        ruudut.SetTileMethod('2', delegate(Vector paikka, double leveys, double korkeus) { pelaaja2 = LuoPelaaja(paikka, leveys, korkeus, Direction.Left, pelaaja2); });
233        ruudut.Execute(RUUDUNLEVEYS, RUUDUNKORKEUS);
234        Level.Background.CreateGradient(Color.White, Color.Gray);
235        Gravity = new Vector(0, -1500);
236        Camera.ZoomToLevel();
237
238        Timer timer = new Timer();
239        timer.Interval = 0.1;
240        timer.Timeout += delegate { TarkistaReunat(Level.Right - 1.5 * RUUDUNLEVEYS, Level.Top - 1.5 * RUUDUNKORKEUS); };
241        timer.Start();
242
243        if (PowerUpit == "Päällä" && kentta != 0)
244        {
245            Timer poweruptimer = new Timer();
246            poweruptimer.Interval = 6.0;
247            poweruptimer.Timeout += delegate
248            {
249                if (powerupmaara < 3)
250                {
251                    double luku = RandomGen.NextDouble(0.0, 1.0);
252                    if (luku < 0.5)
253                    {
254                        Vector paikka = powerupvektorit[RandomGen.NextInt(0, powerupvektorit.Count)];
255                        GameObject nimi = GetObjectAt(paikka, "Power Up", 10);
256                        if (nimi == null)
257                        {
258                            powerupmaara += 1;
259                            LuoPowerUp(paikka, new Vector(16, 20), "Power Up", powerupinkuva);
260                        }
261                    }
262                }
263            };
264            poweruptimer.Start();
265        }
266
267        if (HP == "Päällä" && kentta != 0)
268        {
269            Timer hptimer = new Timer();
270            hptimer.Interval = 7.5;
271            hptimer.Timeout += delegate
272            {
273                if (hpmaara < 3)
274                {
275                    double luku = RandomGen.NextDouble(0.0, 1.0);
276                    if (luku < 0.5)
277                    {
278                        Vector paikka = hpvektorit[RandomGen.NextInt(0, hpvektorit.Count)];
279                        GameObject nimi = GetObjectAt(paikka, "HP", 10);
280                        if (nimi == null)
281                        {
282                            hpmaara += 1;
283                            LuoHP(paikka, new Vector(20, 21), "HP", hpkuva);
284                        }
285                    }
286                }
287            };
288            hptimer.Start();
289        }
290
291    }
292
293    void LuoReuna(Vector paikka, double leveys, double korkeus)
294    {
295        PhysicsObject reuna = new PhysicsObject(leveys, korkeus);
296        reuna.Position = paikka;
297        reuna.Color = Color.Gray;
298        reuna.Tag = "reuna";
299        reuna.MakeStatic();
300        Add(reuna);
301    }
302
303    void LuoKeskipitkaTaso(Vector paikka, double leveys, double korkeus)
304    {
305        PhysicsObject taso = new PhysicsObject(leveys * 4, korkeus);
306        taso.Position = paikka + new Vector(leveys * 1.5, 0);
307        taso.Color = Color.Gray;
308        taso.Tag = "taso";
309        taso.MakeStatic();
310        Add(taso);
311    }
312
313    void LuoLyhytPystyTaso(Vector paikka, double leveys, double korkeus)
314    {
315        PhysicsObject taso = new PhysicsObject(leveys, korkeus * 2);
316        taso.Position = paikka + new Vector(0, -korkeus * 0.5);
317        taso.Color = Color.Gray;
318        taso.Tag = "taso";
319        taso.MakeStatic();
320        Add(taso);
321    }
322
323    void LuoPoltettavaTaso(Vector paikka, double leveys, double korkeus)
324    {
325        PhysicsObject taso = new PhysicsObject(leveys, korkeus * 2);
326        taso.Position = paikka + new Vector(0, -korkeus * 0.5);
327        taso.Color = Color.DarkForestGreen;
328        taso.Tag = "poltettava taso";
329        taso.MakeStatic();
330        Add(taso);
331    }
332
333    void LuoPortaali(Vector paikka, double leveys, double korkeus)
334    {
335        PhysicsObject portal = new PhysicsObject(leveys, korkeus * 2);
336        portal.Position = paikka + new Vector(0, -korkeus * 0.5);
337        portal.Image = portaalikuva;
338        portal.Tag = "Portaali";
339        portal.MakeStatic();
340        Add(portal);
341        AddCollisionHandler(portal, "pelaaja", SeuraavaTaso);
342    }
343
344    void LuoLattia(Vector paikka, double leveys, double korkeus)
345    {
346        PhysicsObject reuna = new PhysicsObject(leveys * 58, korkeus);
347        reuna.Position = paikka + new Vector(leveys * 28.5, 0);
348        reuna.Color = Color.Gray;
349        reuna.Tag = "reuna";
350        reuna.MakeStatic();
351        Add(reuna);
352    }
353
354    void LuoSeina(Vector paikka, double leveys, double korkeus)
355    {
356        PhysicsObject reuna = new PhysicsObject(leveys, korkeus * 32);
357        reuna.Position = paikka + new Vector(0, -korkeus * 15.5);
358        reuna.Color = Color.Gray;
359        reuna.Tag = "reuna";
360        reuna.MakeStatic();
361        Add(reuna);
362    }
363
364    void LuoLyhytTaso(Vector paikka, double leveys, double korkeus)
365    {
366        PhysicsObject taso = new PhysicsObject(leveys * 3, korkeus);
367        taso.Position = paikka + new Vector(leveys * 1, 0);
368        taso.Color = Color.Gray;
369        taso.Tag = "taso";
370        taso.MakeStatic();
371        Add(taso);
372    }
373
374    void LuoPitkaTaso(Vector paikka, double leveys, double korkeus)
375    {
376        PhysicsObject taso = new PhysicsObject(leveys * 5, korkeus);
377        taso.Position = paikka + new Vector(leveys * 2, 0);
378        taso.Color = Color.Gray;
379        taso.Tag = "taso";
380        taso.MakeStatic();
381        Add(taso);
382    }
383
384    void LuoTaso(Vector paikka, double leveys, double korkeus)
385    {
386        PhysicsObject taso = new PhysicsObject(leveys, korkeus);
387        taso.Position = paikka;
388        taso.Color = Color.Gray;
389        taso.Tag = "taso";
390        taso.MakeStatic();
391        Add(taso);
392    }
393    void LuoKohde(Vector paikka, double leveys, double korkeus)
394    {
395        PhysicsObject kohde = new PhysicsObject(20, 20);
396        kohde.Position = paikka;
397        kohde.Image = target;
398        kohde.Tag = "Target";
399        kohde.MakeStatic();
400        Add(kohde);
401        AddCollisionHandler(kohde, "ammus", delegate (PhysicsObject o, PhysicsObject k) { TuhoaKohde(kohde); });
402        AddCollisionHandler(kohde, "Kohde tuhottu", delegate(PhysicsObject o, PhysicsObject k) { TuhoaKohde(kohde); });
403    }
404
405    void LuoTutorialAse(Vector paikka, double leveys, double korkeus, Vector koko, string asetag, Image kuva)
406    {
407        PhysicsObject ase = new PhysicsObject(koko.X, koko.Y);
408        ase.Position = paikka;
409        ase.Image = kuva;
410        Add(ase);
411        if (asetag == "Pistooli")
412        {
413            AddCollisionHandler<PhysicsObject, Pelaaja>(ase, "pelaaja", delegate { PudotaAseenHahmo(pelaaja1); LuoAsePelaajalle(asetag, pelaaja1); ase.Destroy(); MessageDisplay.Add("Ammu: Space / RT"); });
414        }
415        if (asetag == "Valopistooli")
416        {
417            AddCollisionHandler<PhysicsObject, Pelaaja>(ase, "pelaaja", delegate { if (pelaaja1.Weapon != null && pelaaja1.Weapon.Tag != null) { string aseentag = pelaaja1.Weapon.Tag.ToString(); pelaaja1.Clear(); if (pelaaja1.varaAse != null) { PudotaAseenHahmo(pelaaja1); LuoAsePelaajalle(pelaaja1.varaAse, pelaaja1); } else { LuoAsePelaajalle(aseentag, pelaaja1); } } else if (pelaaja1.varaAse != null) { pelaaja1.Clear(); LuoAsePelaajalle(pelaaja1.varaAse, pelaaja1); } LuoVaraAse(asetag, pelaaja1); ase.Destroy(); MessageDisplay.Add("Vaihda asetta: E / LT"); });
418        }
419    }
420
421    void PoltaTaso(PhysicsObject taso)
422    {
423        GameObject liekki = new GameObject(34, 64);
424        liekki.Color = new Color(Color.Orange, 150);
425        liekki.Shape = Shape.Rectangle;
426       
427        taso.Add(liekki);
428        Timer.SingleShot(1.0, delegate { taso.Remove(liekki); taso.Destroy(); });
429    }
430
431    void TuhoaKohde(PhysicsObject kohde)
432    {
433        Explosion rajahdys = new Explosion(80);
434        rajahdys.UseShockWave = false;
435        rajahdys.Position = kohde.Position;
436        rajahdys.Tag = "Kohde rajahdys";
437        Add(rajahdys);
438        kohde.Destroy();
439        kohde.Destroyed += delegate
440        {
441            List<GameObject> ketaLahella = GetObjects(x => x.Tag.ToString() == "Target" && Vector.Distance(x.Position, kohde.Position) < kohde.Width * 2);
442            ketaLahella.ForEach(x => TuhoaKohde(x as PhysicsObject));
443        };
444    }
445
446    void LuoNorsuVihu(Vector paikka, double leveys, double korkeus, string ase)
447    {
448        Pelaaja norsu = new Pelaaja(35.0, 35.0, Shape.Circle);
449        norsu.Image = norsu2;
450        norsu.Tag = "Norsu";
451        norsu.Position = paikka;
452        norsu.HPLaskuri = new DoubleMeter(45, 0, 45);
453        norsu.HPLaskuri.MaxValue = 45;
454        norsu.HPLaskuri.Value = 45;
455        norsu.HPLaskuri.LowerLimit += delegate()
456        {
457            NorsuKuoli(norsu);
458        };
459
460       
461        PlatformWandererBrain pBrain = new PlatformWandererBrain();
462        //pBrain.TriesToJump = true;
463        //pBrain.FallsOffPlatforms = true;
464        pBrain.Speed = 200;
465
466        FollowerBrain brain = new FollowerBrain( "pelaaja" );
467        brain.DistanceFar = 500;
468        brain.DistanceClose = 300;
469        brain.StopWhenTargetClose = true;
470        brain.TargetClose += delegate
471        { 
472            if (pelaaja1.IsDestroyed == false) Ammu(norsu);
473            if (pelaaja1.Position.X > norsu.Position.X) norsu.FacingDirection = Direction.Right;
474            if (pelaaja1.Position.X < norsu.Position.X) norsu.FacingDirection = Direction.Left;
475        };
476        brain.FarBrain = pBrain;
477        brain.Speed = 400;
478
479        norsu.Brain = brain;
480
481        //Timer timer = new Timer();
482        //timer.Interval = RandomGen.NextDouble(1.0, 3.0);
483        //timer.Timeout += delegate { norsu.Jump(600); };
484        //timer.Start();
485
486        Add(norsu);
487        LuoAsePelaajalle(ase, norsu);
488    }
489
490    void TarkistaReunat(double leveys, double korkeus)
491    {
492        if (pelaaja1.Position.X < -leveys) pelaaja1.Position = new Vector(-leveys, pelaaja1.Position.Y);
493        if (pelaaja1.Position.X > leveys) pelaaja1.Position = new Vector(leveys, pelaaja1.Position.Y);
494        if (pelaaja1.Position.Y < -korkeus) pelaaja1.Position = new Vector(pelaaja1.Position.X, -korkeus);
495        if (pelaaja1.Position.Y > korkeus) pelaaja1.Position = new Vector(pelaaja1.Position.Y, korkeus);
496        if (pelaaja2.Position.X < -leveys) pelaaja2.Position = new Vector(-leveys, pelaaja2.Position.Y);
497        if (pelaaja2.Position.X > leveys) pelaaja2.Position = new Vector(leveys, pelaaja2.Position.Y);
498        if (pelaaja2.Position.Y < -korkeus) pelaaja2.Position = new Vector(pelaaja2.Position.X, -korkeus);
499        if (pelaaja2.Position.Y > korkeus) pelaaja2.Position = new Vector(pelaaja2.Position.Y, korkeus);
500    }
501
502    void LuoAlkuValikko()
503    {
504        ClearAll();
505        NollaaLaskurit();
506        MultiSelectWindow alkuValikko = new MultiSelectWindow("Kynäri",
507        "Yksinpeli", "Moninpeli", "Asetukset", "Lopeta");
508        Add(alkuValikko);
509        alkuValikko.AddItemHandler(0, LuoTasoValikko);
510        alkuValikko.AddItemHandler(1, LuoKenttaValikko);
511        alkuValikko.AddItemHandler(2, LuoAsetukset, 0);
512        alkuValikko.AddItemHandler(3, Exit);
513        alkuValikko.DefaultCancel = 3;
514        alkuValikko.Color = Color.Gray;
515        Level.Background.Color = Color.Gray;
516
517        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { alkuValikko.SelectedIndex = (alkuValikko.Buttons.Length + alkuValikko.SelectedIndex - 1) % alkuValikko.Buttons.Length; }, null).InContext(alkuValikko);
518        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { alkuValikko.SelectedIndex = (alkuValikko.SelectedIndex + 1) % alkuValikko.Buttons.Length; }, null).InContext(alkuValikko);
519        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { Exit(); }, null).InContext(alkuValikko);
520        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { alkuValikko.SelectedButton.Click(); }, null).InContext(alkuValikko);
521    }
522
523    void LuoAsetukset(int valinta)
524    {
525        ClearAll();
526        MultiSelectWindow asetukset = new MultiSelectWindow("Asetukset", "Voittoon tarvittava pistemäärä: " + PISTEMAARA_JOLLA_VOITTAA_PELIN,
527        "Pelaajien HP määrä: " + PHPMAARA, "Kentällä olevat aseet: " + Aseet, "Power Upit: " + PowerUpit, "HP Boostit: " + HP, "HP Boostin Määrä: " + HPBOOST, "Säilytä aseet erien välissä: " + SailytaAse, "Takaisin");
528        asetukset.AddItemHandler(0, AsetaPistemaara);
529        asetukset.AddItemHandler(1, AsetaHP);
530        asetukset.AddItemHandler(2, AsetaAseet);
531        asetukset.AddItemHandler(3, AsetaPowerUpit);
532        asetukset.AddItemHandler(4, AsetaHPBoostit);
533        asetukset.AddItemHandler(5, AsetaHPBoostiMaara);
534        asetukset.AddItemHandler(6, AsetaSailytaAse);
535        asetukset.AddItemHandler(7, LuoAlkuValikko);
536
537        asetukset.Color = Color.Gray;
538        Level.Background.Color = Color.Gray;
539        asetukset.DefaultCancel = 7;
540        Add(asetukset);
541        asetukset.SelectedIndex = valinta;
542
543        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { asetukset.SelectedIndex = (asetukset.Buttons.Length + asetukset.SelectedIndex - 1) % asetukset.Buttons.Length; }, null).InContext(asetukset);
544        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { asetukset.SelectedIndex = (asetukset.SelectedIndex + 1) % asetukset.Buttons.Length; }, null).InContext(asetukset);
545        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(asetukset);
546        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { asetukset.SelectedButton.Click(); }, null).InContext(asetukset);
547    }
548
549    void LuoVoittoRuutu(string tulos)
550    {
551        ClearAll();
552        if (tasapeli == true)
553        {
554            MultiSelectWindow voitto = new MultiSelectWindow("Tasapeli!", "Uusi peli", "Päävalikko");
555            voitto.AddItemHandler(0, uusiPeli);
556            voitto.AddItemHandler(1, LuoAlkuValikko);
557            voitto.Color = Color.Gray;
558            Level.Background.Color = Color.Gray;
559            voitto.DefaultCancel = 1;
560            Add(voitto);
561
562            ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { voitto.SelectedIndex = (voitto.Buttons.Length + voitto.SelectedIndex - 1) % voitto.Buttons.Length; }, null).InContext(voitto);
563            ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { voitto.SelectedIndex = (voitto.SelectedIndex + 1) % voitto.Buttons.Length; }, null).InContext(voitto);
564            ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(voitto);
565            ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { voitto.SelectedButton.Click(); }, null).InContext(voitto);
566        }
567        else
568        {
569            MultiSelectWindow voitto = new MultiSelectWindow(tulos, "Uusi peli", "Päävalikko");
570            voitto.AddItemHandler(0, uusiPeli);
571            voitto.AddItemHandler(1, LuoAlkuValikko);
572            voitto.Color = Color.Gray;
573            Level.Background.Color = Color.Gray;
574            voitto.DefaultCancel = 1;
575            Add(voitto);
576
577            ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { voitto.SelectedIndex = (voitto.Buttons.Length + voitto.SelectedIndex - 1) % voitto.Buttons.Length; }, null).InContext(voitto);
578            ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { voitto.SelectedIndex = (voitto.SelectedIndex + 1) % voitto.Buttons.Length; }, null).InContext(voitto);
579            ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(voitto);
580            ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { voitto.SelectedButton.Click(); }, null).InContext(voitto);
581        }
582        LuoPisteLaskuri(-200, 0, pelaajan1Pisteet);
583        LuoPisteLaskuri(200, 0, pelaajan2Pisteet);
584        tasapeli = false;
585    }
586
587    void AsetaSailytaAse()
588    {
589        if (SailytaAse == "Ei")
590        {
591            SailytaAse = "Kyllä";
592            LuoAsetukset(6);
593            return;
594        }
595        if (SailytaAse == "Kyllä")
596        {
597            SailytaAse = "Ei";
598            LuoAsetukset(6);
599            return;
600        }
601        else
602        {
603            SailytaAse = "Kyllä";
604            LuoAsetukset(6);
605        }
606    }
607
608    void AsetaPistemaara()
609    {
610        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 1)
611        {
612            PISTEMAARA_JOLLA_VOITTAA_PELIN = 3;
613            LuoAsetukset(0);
614            return;
615        }
616        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 3)
617        {
618            PISTEMAARA_JOLLA_VOITTAA_PELIN = 5;
619            LuoAsetukset(0);
620            return;
621        }
622        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 5)
623        {
624            PISTEMAARA_JOLLA_VOITTAA_PELIN = 7;
625            LuoAsetukset(0);
626            return;
627        }
628        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 7)
629        {
630            PISTEMAARA_JOLLA_VOITTAA_PELIN = 10;
631            LuoAsetukset(0);
632            return;
633        }
634        if (PISTEMAARA_JOLLA_VOITTAA_PELIN == 10)
635        {
636            PISTEMAARA_JOLLA_VOITTAA_PELIN = 1;
637            LuoAsetukset(0);
638            return;
639        }
640        else
641        {
642            PISTEMAARA_JOLLA_VOITTAA_PELIN = 3;
643            LuoAsetukset(0);
644        }
645
646    }
647
648    void AsetaHP()
649    {
650        if (PHPMAARA == 1)
651        {
652            PHPMAARA = 50;
653            LuoAsetukset(1);
654            return;
655        }
656        if (PHPMAARA == 50)
657        {
658            PHPMAARA = 100;
659            LuoAsetukset(1);
660            return;
661        }
662        if (PHPMAARA == 100)
663        {
664            PHPMAARA = 150;
665            LuoAsetukset(1);
666            return;
667        }
668        if (PHPMAARA == 150)
669        {
670            PHPMAARA = 200;
671            LuoAsetukset(1);
672            return;
673        }
674        if (PHPMAARA == 200)
675        {
676            PHPMAARA = 250;
677            LuoAsetukset(1);
678            return;
679        }
680        if (PHPMAARA == 250)
681        {
682            PHPMAARA = 500;
683            LuoAsetukset(1);
684            return;
685        }
686        if (PHPMAARA == 500)
687        {
688            PHPMAARA = 1000;
689            LuoAsetukset(1);
690            return;
691        }
692        if (PHPMAARA == 1000)
693        {
694            PHPMAARA = 1;
695            LuoAsetukset(1);
696            return;
697        }
698        else
699        {
700            PHPMAARA = 100;
701            LuoAsetukset(1);
702        }
703    }
704
705    void AsetaAseet()
706    {
707        if (Aseet == "Ei aseita")
708        {
709            Aseet = "Vähän aseita";
710            LuoAsetukset(2);
711            return;
712        }
713        if (Aseet == "Vähän aseita")
714        {
715            Aseet = "Paljon aseita";
716            LuoAsetukset(2);
717            return;
718        }
719        if (Aseet == "Paljon aseita")
720        {
721            Aseet = "Kaikki aseet";
722            LuoAsetukset(2);
723            return;
724        }
725        if (Aseet == "Kaikki aseet")
726        {
727            Aseet = "Ei aseita";
728            LuoAsetukset(2);
729            return;
730        }
731        else
732        {
733            Aseet = "Kaikki aseet";
734            LuoAsetukset(2);
735        }
736    }
737
738    void AsetaPowerUpit()
739    {
740        if (PowerUpit == "Pois")
741        {
742            PowerUpit = "Päällä";
743            LuoAsetukset(3);
744            return;
745        }
746        if (PowerUpit == "Päällä")
747        {
748            PowerUpit = "Pois";
749            LuoAsetukset(3);
750            return;
751        }
752        else
753        {
754            PowerUpit = "Päällä";
755            LuoAsetukset(3);
756        }
757    }
758
759    void AsetaHPBoostiMaara()
760    {
761        if (HPBOOST == 10)
762        {
763            HPBOOST = 25;
764            LuoAsetukset(5);
765            return;
766        }
767        if (HPBOOST == 25)
768        {
769            HPBOOST = 50;
770            LuoAsetukset(5);
771            return;
772        }
773        if (HPBOOST == 50)
774        {
775            HPBOOST = 75;
776            LuoAsetukset(5);
777            return;
778        }
779        if (HPBOOST == 75)
780        {
781            HPBOOST = 100;
782            LuoAsetukset(5);
783            return;
784        }
785        if (HPBOOST == 100)
786        {
787            HPBOOST = 10;
788            LuoAsetukset(5);
789            return;
790        }
791        else
792        {
793            HPBOOST = 25;
794            LuoAsetukset(5);
795        }
796    }
797
798    void AsetaHPBoostit()
799    {
800        if (HP == "Pois")
801        {
802            HP = "Päällä";
803            LuoAsetukset(4);
804            return;
805        }
806        if (HP == "Päällä")
807        {
808            HP = "Pois";
809            LuoAsetukset(4);
810            return;
811        }
812        else
813        {
814            HP = "Päällä";
815            LuoAsetukset(4);
816        }
817    }
818    void LuoTasoValikko()
819    {
820        ClearAll();
821        MultiSelectWindow tasoValikko = new MultiSelectWindow("Yksinpeli", "Uusi peli",
822        "Jatka peliä", "Takaisin");
823        tasoValikko.AddItemHandler(0, LuoTaso0);
824        tasoValikko.AddItemHandler(1, LataaPeli);
825        tasoValikko.AddItemHandler(2, LuoAlkuValikko);
826        tasoValikko.Color = Color.Gray;
827        Level.Background.Color = Color.Gray;
828        tasoValikko.DefaultCancel = 2;
829        Add(tasoValikko);
830
831        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { tasoValikko.SelectedIndex = (tasoValikko.Buttons.Length + tasoValikko.SelectedIndex - 1) % tasoValikko.Buttons.Length; }, null).InContext(tasoValikko);
832        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { tasoValikko.SelectedIndex = (tasoValikko.SelectedIndex + 1) % tasoValikko.Buttons.Length; }, null).InContext(tasoValikko);
833        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(tasoValikko);
834        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { tasoValikko.SelectedButton.Click(); }, null).InContext(tasoValikko);
835    }
836
837    void LuoKenttaValikko()
838    {
839        ClearAll();
840        MultiSelectWindow kenttaValikko = new MultiSelectWindow("Kenttävalikko", "Kenttä 1",
841        "Kenttä 2", "Kenttä 3", "Takaisin");
842        kenttaValikko.AddItemHandler(0, LuoKentta1);
843        kenttaValikko.AddItemHandler(1, LuoKentta2);
844        kenttaValikko.AddItemHandler(2, LuoKentta3);
845        kenttaValikko.AddItemHandler(3, LuoAlkuValikko);
846        kenttaValikko.Color = Color.Gray;
847        Level.Background.Color = Color.Gray;
848        kenttaValikko.DefaultCancel = 3;
849        Add(kenttaValikko);
850
851        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { kenttaValikko.SelectedIndex = (kenttaValikko.Buttons.Length + kenttaValikko.SelectedIndex - 1) % kenttaValikko.Buttons.Length; }, null).InContext(kenttaValikko);
852        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { kenttaValikko.SelectedIndex = (kenttaValikko.SelectedIndex + 1) % kenttaValikko.Buttons.Length; }, null).InContext(kenttaValikko);
853        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { LuoAlkuValikko(); }, null).InContext(kenttaValikko);
854        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { kenttaValikko.SelectedButton.Click(); }, null).InContext(kenttaValikko);
855    }
856
857    void LataaPeli()
858    {
859        if (taso == 0) { LuoTaso0(); }
860        if (taso == 1) { LuoTaso1(); }
861    }
862
863    void SeuraavaTaso( PhysicsObject tormaaja, PhysicsObject kohde )
864    {
865        Pelaaja pelaaja = tormaaja as Pelaaja;
866
867        ase = null;
868        ase2 = null;
869        sailytahp = true;
870       
871        if (pelaaja1.Weapon != null && pelaaja1.Weapon.Tag != null)
872        {
873            ase = pelaaja1.Weapon.Tag.ToString();
874            if (ase.Length > 6 && ase.Substring(ase.Length - 5) == "Lv. 4")
875            {
876                ase = ase.Substring(0, ase.Length - 5) + "Lv. 3";
877            }
878
879        }
880        if (pelaaja1.varaAse != null)
881        {
882            ase2 = pelaaja1.varaAse;
883            if (ase2.Length > 6 && ase2.Substring(ase2.Length - 5) == "Lv. 4")
884            {
885                ase2 = ase2.Substring(0, ase2.Length - 5) + "Lv. 3";
886            }
887
888        }
889
890        if (kohde != null) portalAani.Play();
891
892        if (taso == 0) { LuoTaso1(); return; }
893        else if (taso == 1) { LuoTaso2(); return; }
894        else sailytahp = false;
895    }
896
897    void LuoTaso0()
898    {
899        taso = 0;
900        ase = null;
901        ase2 = null;
902        uusiYksinPeli();
903    }
904
905    void LuoTaso1()
906    {
907        taso = 1;
908        uusiYksinPeli();
909    }
910    void LuoTaso2()
911    {
912        taso = 2;
913        uusiYksinPeli();
914    }
915
916    void LuoKentta0()
917    {
918        kentta = 0;
919        uusiPeli();
920    }
921
922    void LuoKentta1()
923    {
924        kentta = 1;
925        uusiPeli();
926    }
927
928    void LuoKentta2()
929    {
930        kentta = 2;
931        uusiPeli();
932    }
933
934    void LuoKentta3()
935    {
936        kentta = 3;
937        uusiPeli();
938    }
939
940    void luoTasot()
941    {
942        PhysicsObject alusta = new PhysicsObject(Level.Width, 300);
943        alusta.Color = Color.Gray;
944        alusta.X = 0;
945        alusta.Y = Level.Bottom - alusta.Height / 2;
946        Add(alusta);
947
948        lisaaPieniTaso(-200, -350);
949        lisaaPieniTaso(0, -400);
950        lisaaPieniTaso(100, -300);
951        lisaaPieniTaso(400, -350);
952        lisaaPieniTaso(450, -200);
953        lisaaPieniTaso(-500, -400);
954        lisaaPieniTaso(-550, -200);
955        lisaaPieniTaso(-400, -300);
956        lisaaPieniTaso(-150, -150);
957        lisaaPieniTaso(-870, -350);
958        lisaaPieniTaso(-700, -400);
959
960        lisaaPieniTaso(600, -300);
961        lisaaPieniTaso(850, -300);
962        lisaaPieniTaso(750, -400);
963        lisaaPieniTaso(200, -200);
964        lisaaPieniTaso(-200, -150);
965
966        lisaaPystyTaso(600, -450);
967        lisaaPystyTaso(-600, -500);
968        lisaaPystyTaso(0, -450);
969
970        lisaaReuna(-1375, 0);
971        lisaaReuna(1375, 0);
972    }
973
974    void LisaaHPNaytto()
975    {
976        hpNaytto = new ProgressBar(250, 30);
977        hpNaytto.BarColor = Color.LightGreen;
978        hpNaytto.Color = Color.Red;
979        hpNaytto.BindTo(pelaaja1.HPLaskuri);
980        hpNaytto.Position = new Vector(Screen.LeftSafe + 300, Screen.TopSafe - 170);
981        Add(hpNaytto);
982
983        Label hpNumeroLaskuri = new Label();
984        hpNumeroLaskuri.DoubleFormatString = "{0:0}";
985        hpNumeroLaskuri.BindTo(pelaaja1.HPLaskuri);
986        hpNumeroLaskuri.Position = new Vector(Screen.LeftSafe + 225, Screen.TopSafe - 170);
987        Add(hpNumeroLaskuri);
988    }
989
990    void LisaaHPNaytot()
991    {
992        // luodaan elämänäyttö
993        hpNaytto = new ProgressBar(250, 30);
994        hpNaytto.BarColor = Color.LightGreen;
995        hpNaytto.Color = Color.Red;
996        hpNaytto.BindTo(pelaaja1.HPLaskuri);
997        hpNaytto.Position = new Vector(Screen.LeftSafe + 300, Screen.TopSafe - 170);
998        Add(hpNaytto);
999
1000        Label hpNumeroLaskuri = new Label();
1001        hpNumeroLaskuri.DoubleFormatString = "{0:0}";
1002        hpNumeroLaskuri.BindTo(pelaaja1.HPLaskuri);
1003        hpNumeroLaskuri.Position = new Vector(Screen.LeftSafe + 225, Screen.TopSafe - 170);
1004        Add(hpNumeroLaskuri);
1005
1006        hpNaytto2 = new ProgressBar(250, 30);
1007        hpNaytto2.Angle = Angle.FromDegrees(180);
1008        hpNaytto2.BarColor = Color.LightGreen;
1009        hpNaytto2.Color = Color.Red;
1010        hpNaytto2.BindTo(pelaaja2.HPLaskuri);
1011        hpNaytto2.Position = new Vector(Screen.RightSafe - 300, Screen.TopSafe - 170);
1012        Add(hpNaytto2);
1013
1014        Label hpNumeroLaskuri2 = new Label();
1015        hpNumeroLaskuri2.DoubleFormatString = "{0:0}";
1016        hpNumeroLaskuri2.BindTo(pelaaja2.HPLaskuri);
1017        hpNumeroLaskuri2.Position = new Vector(Screen.RightSafe - 225, Screen.TopSafe - 170);
1018        Add(hpNumeroLaskuri2);
1019    }
1020
1021    void LisaaLaskurit()
1022    {
1023        LuoPisteLaskuri(Screen.Left + 100.0, Screen.Top - 175.0, pelaajan1Pisteet);
1024        LuoPisteLaskuri(Screen.Right - 100.0, Screen.Top - 175.0, pelaajan2Pisteet);
1025        pelaajan1Pisteet.MaxValue = PISTEMAARA_JOLLA_VOITTAA_PELIN;
1026        pelaajan2Pisteet.MaxValue = PISTEMAARA_JOLLA_VOITTAA_PELIN;
1027        pelaajan1Pisteet.UpperLimit += delegate() { PelaajaVoittaa(pelaaja1, "Pelaaja 1", pelaaja2, pelaajan2Pisteet); };
1028        pelaajan2Pisteet.UpperLimit += delegate() { PelaajaVoittaa(pelaaja2, "Pelaaja 2", pelaaja1, pelaajan1Pisteet); };
1029    }
1030
1031    void NollaaLaskurit()
1032    {
1033        pelaajan1Pisteet.Reset();
1034        pelaajan2Pisteet.Reset();
1035    }
1036
1037    IntMeter LuoPisteLaskuri(double x, double y, IntMeter laskuri)
1038    {
1039        Label naytto = new Label();
1040        naytto.BindTo(laskuri);
1041        naytto.X = x;
1042        naytto.Y = y;
1043        Add(naytto);
1044        return laskuri;
1045    }
1046
1047    void PelaajaVoittaa(Pelaaja voittaja, String voittajanNimi, Pelaaja haviaja, IntMeter haviajanPisteet)
1048    {
1049        MessageDisplay.Clear();
1050        if (voittaja.IsDestroying && haviajanPisteet.Value == haviajanPisteet.MaxValue)
1051        {
1052            MessageDisplay.Add("Tasapeli!");
1053            tasapeli = true;
1054        }
1055        else
1056        {
1057            MessageDisplay.Add(voittajanNimi + " voittaa!");
1058        }
1059
1060    }
1061
1062    void lisaaPieniTaso(double x, double y)
1063    {
1064        PhysicsObject taso = PhysicsObject.CreateStaticObject(100, 30, Shape.Rectangle);
1065        taso.Color = Color.Gray;
1066        taso.X = x;
1067        taso.Y = y;
1068        Add(taso);
1069    }
1070
1071    void lisaaReuna(double x, double y)
1072    {
1073        PhysicsObject taso = PhysicsObject.CreateStaticObject(1000, 1000, Shape.Rectangle);
1074        taso.Color = Color.Gray;
1075        taso.X = x;
1076        taso.Y = y;
1077        Add(taso);
1078    }
1079
1080    void lisaaPystyTaso(double x, double y)
1081    {
1082        PhysicsObject taso = PhysicsObject.CreateStaticObject(30, 100, Shape.Rectangle);
1083        taso.Color = Color.Gray;
1084        taso.X = x;
1085        taso.Y = y;
1086        Add(taso);
1087    }
1088
1089    Pelaaja LuoYksinPelaaja(Vector paikka, double leveys, double korkeus, Direction suunta, Pelaaja pelaaja)
1090    {
1091        pelaaja = new Pelaaja(40, 40, Shape.Circle);
1092        pelaaja.Image = norsu;
1093        pelaaja.Position = paikka;
1094        pelaaja.Tag = "pelaaja";
1095        pelaaja.FacingDirection = suunta;
1096
1097        pelaaja.HPLaskuri = new DoubleMeter(CURRENTHP, 0, MAXHP);
1098        pelaaja.HPLaskuri.MaxValue = MAXHP;
1099        pelaaja.HPLaskuri.Value = CURRENTHP;
1100        pelaaja.HPLaskuri.LowerLimit += delegate()
1101        {
1102            YksinPelaajaKuoli(pelaaja);
1103        };
1104        Add(pelaaja);
1105
1106        LuoAsePelaajalle(ase, pelaaja);
1107        LuoVaraAse(ase2, pelaaja);
1108
1109        return pelaaja;
1110    }
1111
1112    Pelaaja LuoPelaaja(Vector paikka, double leveys, double korkeus, Direction suunta, Pelaaja pelaaja)
1113    {
1114        string ase = "Pistooli";
1115        if (pelaaja.Weapon != null && SailytaAse == "Kyllä")
1116        {
1117            ase = pelaaja.Weapon.Tag.ToString();
1118            if (ase.Length > 6 && ase.Substring(ase.Length - 5) == "Lv. 4")
1119            {
1120                ase = ase.Substring(0, ase.Length - 5) + "Lv. 3";
1121            }
1122
1123        }
1124        pelaaja = new Pelaaja(40, 40, Shape.Circle);
1125        pelaaja.Image = norsu;
1126        pelaaja.Position = paikka;
1127        pelaaja.Tag = "pelaaja";
1128        pelaaja.FacingDirection = suunta;
1129
1130        pelaaja.HPLaskuri = new DoubleMeter(PHPMAARA, 0, PHPMAARA);
1131        pelaaja.HPLaskuri.MaxValue = PHPMAARA;
1132        pelaaja.HPLaskuri.Value = PHPMAARA;
1133        pelaaja.HPLaskuri.LowerLimit += delegate()
1134        {
1135            PelaajaKuoli(pelaaja);
1136        };
1137        Add(pelaaja);
1138
1139        LuoAsePelaajalle(ase, pelaaja);
1140        return pelaaja;
1141    }
1142
1143    void NorsuKuoli(Pelaaja norsu)
1144    {
1145        norsu.Destroy();
1146        PudotaAseenHahmo(norsu);
1147    }
1148
1149    void YksinPelaajaKuoli(Pelaaja pelaaja)
1150    {
1151        if (pelaaja.IsDestroying)
1152        {
1153            return;
1154        }
1155
1156        pelaaja.Destroy();
1157        PudotaAseenHahmo(pelaaja);
1158        Timer.SingleShot(2.0, uusiYksinPeli);
1159    }
1160
1161    void PelaajaKuoli(Pelaaja pelaaja)
1162    {
1163        if (pelaaja.IsDestroying)
1164        {
1165            return;
1166        }
1167
1168        pelaaja.Destroy();
1169        PudotaAseenHahmo(pelaaja);
1170        MessageDisplay.Clear();
1171        MessageDisplay.X = 0;
1172
1173        if (pelaaja == pelaaja1)
1174        {
1175            pelaajan2Pisteet.Value += 1;
1176
1177            if (!(pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue || pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue))
1178            {
1179                if (pelaaja2.IsDestroying && pelaajan1Pisteet.Value != pelaajan1Pisteet.MaxValue)
1180                {
1181                    MessageDisplay.Clear();
1182                    MessageDisplay.Add("Erä tasan!");
1183                }
1184                else if (pelaajan1Pisteet.Value != pelaajan1Pisteet.MaxValue)
1185                {
1186                    MessageDisplay.Add("Pelaaja 2 voitti erän!");
1187                }
1188
1189                Timer.SingleShot(3.0, AloitaUusiPeli);
1190            }
1191            else if (pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue)
1192            {
1193                PelaajaVoittaa(pelaaja2, "Pelaaja 2", pelaaja1, pelaajan1Pisteet);
1194                ClearTimers();
1195                Timer.SingleShot(3.0, delegate { LuoVoittoRuutu("Pelaaja 2 voitti pelin!"); });
1196            }
1197        }
1198
1199        if (pelaaja == pelaaja2)
1200        {
1201            pelaajan1Pisteet.Value += 1;
1202
1203            if (!(pelaajan2Pisteet.Value == pelaajan2Pisteet.MaxValue || pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue))
1204            {
1205                if (pelaaja1.IsDestroying && pelaajan2Pisteet.Value != pelaajan2Pisteet.MaxValue)
1206                {
1207                    MessageDisplay.Clear();
1208                    MessageDisplay.Add("Erä tasan!");
1209                }
1210                else if (pelaajan1Pisteet.Value != pelaajan2Pisteet.MaxValue)
1211                {
1212                    MessageDisplay.Add("Pelaaja 1 voitti erän!");
1213                }
1214
1215                Timer.SingleShot(3.0, AloitaUusiPeli);
1216            }
1217            else if (pelaajan1Pisteet.Value == pelaajan1Pisteet.MaxValue)
1218            {
1219                PelaajaVoittaa(pelaaja1, "Pelaaja 1", pelaaja2, pelaajan2Pisteet);
1220                ClearTimers();
1221                Timer.SingleShot(3.0, delegate { LuoVoittoRuutu("Pelaaja 1 voitti pelin!"); });
1222            }
1223        }
1224
1225    }
1226    void keraaPowerUp(PhysicsObject powerup, Pelaaja pelaaja)
1227    {
1228        if (pelaaja.Weapon == null || pelaaja.Weapon.Tag == null) return;
1229        powerup.Destroy();
1230        powerupmaara -= 1;
1231        PaivitaAse(pelaaja.Weapon.Tag.ToString(), pelaaja);
1232        naytaTiedot();
1233    }
1234
1235    void keraaUpgrade(PhysicsObject upgrade, Pelaaja pelaaja)
1236    {
1237        if (pelaaja.Weapon == null || pelaaja.Weapon.Tag == null) return;
1238        upgrade.Destroy();
1239        MuunnaAse(pelaaja.Weapon.Tag.ToString(), pelaaja);
1240        naytaTiedot();
1241    }
1242
1243    void keraaHP(PhysicsObject hp, Pelaaja pelaaja)
1244    {
1245        hp.Destroy();
1246        hpmaara -= 1;
1247        BoostiHP(pelaaja);
1248    }
1249
1250    void keraaHP1(PhysicsObject hp, Pelaaja pelaaja)
1251    {
1252        hp.Destroy();
1253        hpmaara -= 1;
1254        BoostiHP1(pelaaja);
1255    }
1256
1257    void keraaHPBoost(PhysicsObject hpboost, Pelaaja pelaaja)
1258    {
1259        hpboost.Destroy();
1260        IncreaseHP(pelaaja);
1261    }
1262
1263    void BoostiHP(Pelaaja pelaaja)
1264    {
1265        if (pelaaja.HPLaskuri.Value == pelaaja.HPLaskuri.MaxValue && pelaaja.DamageResistance == false)
1266        {
1267            GameObject kilpi = new GameObject(60, 60, Shape.Circle);
1268            kilpi.Color = new Color(Color.Blue, 50);
1269            pelaaja.Add(kilpi);
1270            pelaaja.DamageResistance = true;
1271            Timer.SingleShot(5.0, delegate { pelaaja.DamageResistance = false; pelaaja.Remove(kilpi); });
1272        }
1273        pelaaja.HPLaskuri.Value += HPBOOST;
1274    }
1275
1276    void BoostiHP1(Pelaaja pelaaja)
1277    {
1278        if (pelaaja.HPLaskuri.Value == pelaaja.HPLaskuri.MaxValue && pelaaja.DamageResistance == false)
1279        {
1280            GameObject kilpi = new GameObject(60, 60, Shape.Circle);
1281            kilpi.Color = new Color(Color.Blue, 50);
1282            pelaaja.Add(kilpi);
1283            pelaaja.DamageResistance = true;
1284            Timer.SingleShot(5.0, delegate { pelaaja.DamageResistance = false; pelaaja.Remove(kilpi); });
1285        }
1286        pelaaja.HPLaskuri.Value += HPBOOSTSINGLE;
1287    }
1288
1289    void IncreaseHP(Pelaaja pelaaja)
1290    {
1291        pelaaja.HPLaskuri.MaxValue += 25;
1292        pelaaja.HPLaskuri.Value = pelaaja.HPLaskuri.MaxValue;
1293    }
1294
1295    void vaihdaAse(Pelaaja pelaaja)
1296    {
1297        if (pelaaja.IsDestroyed == true) return;
1298        if (pelaaja.Weapon == null || pelaaja.Weapon.IsDestroyed || pelaaja.Weapon.Tag == null)
1299        {
1300            if (pelaaja.varaAse != null)
1301            {
1302                pelaaja.Clear();
1303                LuoAsePelaajalle(pelaaja.varaAse, pelaaja);
1304                naytaTiedot();
1305                pelaaja.varaAse = null;
1306                saaAmpua = false;
1307                Timer.SingleShot(0.1, delegate
1308                {
1309                    saaAmpua = true;
1310                });
1311                return;
1312            }
1313            else
1314            {
1315                return;
1316            }
1317        }
1318
1319        string asetag = pelaaja.Weapon.Tag.ToString();
1320        //Image aseenKuva = pelaaja.Weapon.Image;
1321        //Vector aseenkoko = pelaaja.Weapon.Size;
1322        if (asetag.Length > 6 && asetag.Substring(asetag.Length - 5) == "Lv. 4")
1323        {
1324            asetag = asetag.Substring(0, asetag.Length - 5) + "Lv. 3";
1325        }
1326        pelaaja.Weapon.Destroy();
1327        pelaaja.Clear();
1328        pelaaja.Weapon.Tag = null;
1329
1330        if (LuoAsePelaajalle(pelaaja.varaAse, pelaaja))
1331        {
1332            string aseenTagi = pelaaja.Weapon.Tag.ToString();
1333            if (aseenTagi != null && aseenTagi.Length > 6 && aseenTagi.Substring(aseenTagi.Length - 5) == "Lv. 4")
1334            {
1335                aseenTagi = aseenTagi.Substring(0, aseenTagi.Length - 5) + "Lv. 3";
1336            }
1337        }
1338
1339        naytaTiedot();
1340
1341        LuoVaraAse(asetag, pelaaja);
1342
1343        saaAmpua = false;
1344        Timer.SingleShot(0.1, delegate
1345        {
1346            saaAmpua = true;
1347        });
1348    }
1349
1350    void LuoVaraAse(string aseenTag, Pelaaja pelaaja)
1351    {
1352        if (aseenTag == null) return;
1353
1354        Image aseenKuva = pistoolinkuva;
1355        Vector aseenKoko = new Vector(0,0);
1356
1357        if (aseenTag == "Kivääri")
1358        {
1359            aseenKuva = kivaarinkuva;
1360            aseenKoko = new Vector(39, 13);
1361        }
1362        if (aseenTag == "Magnum")
1363        {
1364            aseenKuva = magnumkuva;
1365            aseenKoko = new Vector(17, 12);
1366        }
1367
1368        if (aseenTag == "Haulikko")
1369        {
1370            aseenKuva = haulikonkuva;
1371            aseenKoko = new Vector(42, 10);
1372        }
1373
1374        if (aseenTag == "Sniper")
1375        {
1376            aseenKuva = sniperinkuva;
1377            aseenKoko = new Vector(42, 11);
1378        }
1379
1380        if (aseenTag == "Kranaatinheitin")
1381        {
1382            aseenKuva = kranaatinheittimenkuva;
1383            aseenKoko = new Vector(42, 15);
1384        }
1385        if (aseenTag == "Raketinheitin")
1386        {
1387            aseenKuva = raketinheittimenkuva;
1388            aseenKoko = new Vector(48, 15);
1389        }
1390
1391        if (aseenTag == "Pistooli")
1392        {
1393            aseenKuva = pistoolinkuva;
1394            aseenKoko = new Vector(16, 11);
1395        }
1396
1397        if (aseenTag == "Kivääri Lv. 2")
1398        {
1399            aseenKuva = kivaarinkuva2;
1400            aseenKoko = new Vector(39, 16);
1401        }
1402        if (aseenTag == "Magnum Lv. 2")
1403        {
1404            aseenKuva = magnumkuva2;
1405            aseenKoko = new Vector(17, 12);
1406        }
1407
1408        if (aseenTag == "Haulikko Lv. 2")
1409        {
1410            aseenKuva = haulikonkuva2;
1411            aseenKoko = new Vector(42, 12);
1412        }
1413
1414        if (aseenTag == "Sniper Lv. 2")
1415        {
1416            aseenKuva = sniperinkuva2;
1417            aseenKoko = new Vector(42, 11);
1418        }
1419
1420        if (aseenTag == "Kranaatinheitin Lv. 2")
1421        {
1422            aseenKuva = kranaatinheittimenkuva2;
1423            aseenKoko = new Vector(42, 16);
1424        }
1425        if (aseenTag == "Raketinheitin Lv. 2")
1426        {
1427            aseenKuva = raketinheittimenkuva2;
1428            aseenKoko = new Vector(48, 15);
1429        }
1430
1431        if (aseenTag == "Pistooli Lv. 2")
1432        {
1433            aseenKuva = pistoolinkuva2;
1434            aseenKoko = new Vector(17, 11);
1435        }
1436        if (aseenTag == "Kivääri Lv. 3")
1437        {
1438            aseenKuva = kivaarinkuva3;
1439            aseenKoko = new Vector(39, 16);
1440        }
1441        if (aseenTag == "Magnum Lv. 3")
1442        {
1443            aseenKuva = magnumkuva3;
1444            aseenKoko = new Vector(17, 12);
1445        }
1446
1447        if (aseenTag == "Haulikko Lv. 3")
1448        {
1449            aseenKuva = haulikonkuva3;
1450            aseenKoko = new Vector(38, 12);
1451        }
1452
1453        if (aseenTag == "Sniper Lv. 3")
1454        {
1455            aseenKuva = sniperinkuva3;
1456            aseenKoko = new Vector(45, 12);
1457        }
1458
1459        if (aseenTag == "Kranaatinheitin Lv. 3")
1460        {
1461            aseenKuva = kranaatinheittimenkuva3;
1462            aseenKoko = new Vector(37, 17);
1463        }
1464        if (aseenTag == "Raketinheitin Lv. 3")
1465        {
1466            aseenKuva = raketinheittimenkuva3;
1467            aseenKoko = new Vector(48, 22.5);
1468        }
1469
1470        if (aseenTag == "Pistooli Lv. 3")
1471        {
1472            aseenKuva = pistoolinkuva3;
1473            aseenKoko = new Vector(20, 13);
1474        }
1475
1476        if (aseenTag == "Kivääri Lv. 4")
1477        {
1478            aseenKuva = kivaarinkuva4;
1479            aseenKoko = new Vector(39, 16);
1480        }
1481        if (aseenTag == "Magnum Lv. 4")
1482        {
1483            aseenKuva = magnumkuva4;
1484            aseenKoko = new Vector(17, 12);
1485        }
1486
1487        if (aseenTag == "Haulikko Lv. 4")
1488        {
1489            aseenKuva = haulikonkuva4;
1490            aseenKoko = new Vector(38, 12);
1491        }
1492
1493        if (aseenTag == "Sniper Lv. 4")
1494        {
1495            aseenKuva = sniperinkuva4;
1496            aseenKoko = new Vector(45, 12);
1497        }
1498
1499        if (aseenTag == "Kranaatinheitin Lv. 4")
1500        {
1501            aseenKuva = kranaatinheittimenkuva4;
1502            aseenKoko = new Vector(37, 17);
1503        }
1504        if (aseenTag == "Raketinheitin Lv. 4")
1505        {
1506            aseenKuva = raketinheittimenkuva4;
1507            aseenKoko = new Vector(48, 22.5);
1508        }
1509
1510        if (aseenTag == "Pistooli Lv. 4")
1511        {
1512            aseenKuva = pistoolinkuva4;
1513            aseenKoko = new Vector(20, 13);
1514        }
1515
1516        //Yksinpeli aseet
1517        if (aseenTag == "Miekka")
1518        {
1519            aseenKuva = miekankuva;
1520            aseenKoko = new Vector(24, 24);
1521        }
1522
1523        if (aseenTag == "Valopistooli")
1524        {
1525            aseenKuva = flaregunkuva;
1526            aseenKoko = new Vector(18, 10);
1527        }
1528
1529        if (aseenTag == "Valopistooli Lv. 2")
1530        {
1531            aseenKuva = flaregunkuva2;
1532            aseenKoko = new Vector(18, 10);
1533        }
1534
1535        if (aseenTag == "Valopistooli Lv. 3")
1536        {
1537            aseenKuva = flaregunkuva3;
1538            aseenKoko = new Vector(18, 10);
1539        }
1540
1541        if (aseenTag == "Valopistooli Lv. 4")
1542        {
1543            aseenKuva = flaregunkuva4;
1544            aseenKoko = new Vector(18, 10);
1545        }
1546
1547        GameObject ase = new GameObject(0, 0);
1548        ase.Image = null;
1549        ase.X = -20;
1550        ase.Y = 0;
1551        ase.Tag = aseenTag;
1552        ase.Image = aseenKuva;
1553        ase.Size = aseenKoko;
1554        ase.Angle = Angle.FromDegrees(90);
1555        pelaaja.varaAse = aseenTag;
1556
1557        pelaaja.Add(ase);
1558    }
1559
1560    void keraaAse(PhysicsObject ase, Pelaaja pelaaja)
1561    {
1562        if (!pelaaja.voikoPoimiaAseen) return;
1563        ase.Destroy();
1564        PudotaAseenHahmo(pelaaja); // tiputtaa asetta vastaavan fysiikkaolion maahan kerättäväksi uudestaan
1565        string asetag = ase.Tag.ToString();
1566        if (asetag.Length > 6 && asetag.Substring(asetag.Length - 5) == "Lv. 4")
1567        {
1568            asetag = asetag.Substring(0, asetag.Length - 5) + "Lv. 3";
1569        }
1570        LuoAsePelaajalle(asetag, pelaaja);
1571        naytaTiedot();
1572    }
1573
1574
1575    private void PudotaAseenHahmo(Pelaaja pelaaja)
1576    {
1577        if (pelaaja.Weapon == null || pelaaja.Weapon.Tag == null) return;
1578
1579        pelaaja.voikoPoimiaAseen = false;
1580        Timer.SingleShot(0.1, delegate { pelaaja.voikoPoimiaAseen = true; });
1581        String aseenTagi = pelaaja.Weapon.Tag.ToString();
1582        if (aseenTagi.Length > 6 && aseenTagi.Substring(aseenTagi.Length - 5) == "Lv. 4")
1583        {
1584            aseenTagi = aseenTagi.Substring(0, aseenTagi.Length - 5) + "Lv. 3";
1585        }
1586        Vector koko = pelaaja.Weapon.Size;
1587        Vector paikka = pelaaja.Position;
1588
1589        PhysicsObject tiputettuAse = new PhysicsObject(koko.X, koko.Y);
1590        tiputettuAse.Position = paikka;
1591        tiputettuAse.Tag = aseenTagi;
1592        tiputettuAse.CollisionIgnoreGroup = 1;
1593        pelaaja.CollisionIgnoreGroup = 1;
1594        Timer.SingleShot(1.0, delegate
1595        {
1596            tiputettuAse.CollisionIgnoreGroup = 0;
1597            pelaaja.CollisionIgnoreGroup = 0;
1598        });
1599        Add(tiputettuAse);
1600        Image aseenKuva = pelaaja.Weapon.Image;
1601        if (aseenKuva == pistoolinkuva4) { aseenKuva = pistoolinkuva3; }
1602        if (aseenKuva == kivaarinkuva4) { aseenKuva = kivaarinkuva3; }
1603        if (aseenKuva == sniperinkuva4) { aseenKuva = sniperinkuva3; }
1604        if (aseenKuva == kranaatinheittimenkuva4) { aseenKuva = kranaatinheittimenkuva3; }
1605        if (aseenKuva == raketinheittimenkuva4) { aseenKuva = raketinheittimenkuva3; }
1606        if (aseenKuva == magnumkuva4) { aseenKuva = magnumkuva3; }
1607        if (aseenKuva == haulikonkuva4) { aseenKuva = haulikonkuva3; }
1608        tiputettuAse.Image = aseenKuva;
1609        AddCollisionHandler<PhysicsObject, Pelaaja>(tiputettuAse, "pelaaja", keraaAse);
1610
1611        pelaaja.Weapon = null;
1612    }
1613
1614    void KranaattiOsui(PhysicsObject ammus, PhysicsObject kohde)
1615    {
1616        if (ammus.IsDestroying) return;
1617        if (!(kohde is Pelaaja)) return;
1618        RajaytaKranaatti(ammus);
1619
1620        Pelaaja pelaaja = (Pelaaja)kohde;
1621        ammus.Destroy();
1622        if (pelaaja.DamageResistance == true)
1623        {
1624            pelaaja.HPLaskuri.Value -= 12;
1625        }
1626        else
1627        {
1628            pelaaja.HPLaskuri.Value -= 25;
1629        }
1630    }
1631    void KranaattiOsui2(PhysicsObject ammus, PhysicsObject kohde)
1632    {
1633        if (ammus.IsDestroying) return;
1634        if (!(kohde is Pelaaja)) return;
1635        RajaytaKranaatti2(ammus);
1636
1637        Pelaaja pelaaja = (Pelaaja)kohde;
1638        ammus.Destroy();
1639        if (pelaaja.DamageResistance == true)
1640        {
1641            pelaaja.HPLaskuri.Value -= 17;
1642        }
1643        else
1644        {
1645            pelaaja.HPLaskuri.Value -= 35;
1646        }
1647    }
1648    void KranaattiOsui3(PhysicsObject ammus, PhysicsObject kohde)
1649    {
1650        if (ammus.IsDestroying) return;
1651        if (!(kohde is Pelaaja)) return;
1652        RajaytaKranaatti3(ammus);
1653
1654        Pelaaja pelaaja = (Pelaaja)kohde;
1655        ammus.Destroy();
1656        if (pelaaja.DamageResistance == true)
1657        {
1658            pelaaja.HPLaskuri.Value -= 10;
1659        }
1660        else
1661        {
1662            pelaaja.HPLaskuri.Value -= 20;
1663        }
1664    }
1665
1666    void RajaytaKranaatti(PhysicsObject ammus)
1667    {
1668        if (ammus.IsDestroying || ammus.IsDestroyed) return;
1669        Explosion rajahdys = new Explosion(100);
1670        rajahdys.Position = ammus.Position;
1671        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 50.0); };
1672        Add(rajahdys);
1673        rajahdys.Force = 25;
1674        rajahdys.Speed = 1000;
1675        ammus.Destroy();
1676    }
1677    void RajaytaKranaatti2(PhysicsObject ammus)
1678    {
1679        if (ammus.IsDestroying || ammus.IsDestroyed) return;
1680        Explosion rajahdys = new Explosion(100);
1681        rajahdys.Position = ammus.Position;
1682        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 60.0); };
1683        Add(rajahdys);
1684        rajahdys.Force = 25;
1685        rajahdys.Speed = 1000;
1686        ammus.Destroy();
1687    }
1688    void RajaytaKranaatti3(PhysicsObject ammus)
1689    {
1690        if (ammus.IsDestroying || ammus.IsDestroyed) return;
1691        Explosion rajahdys = new Explosion(100);
1692        rajahdys.Position = ammus.Position;
1693        rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 40.0); };
1694        Add(rajahdys);
1695        rajahdys.Force = 25;
1696        rajahdys.Speed = 1000;
1697        ammus.Destroy();
1698    }
1699
1700    void RakettiOsui(PhysicsObject ammus, PhysicsObject kohde)
1701    {
1702        if (ammus.IsDestroying) return;
1703        if (kohde.Tag.ToString() != "")
1704        {
1705            Explosion rajahdys = new Explosion(75);
1706            rajahdys.Position = ammus.Position;
1707            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 40.0); };
1708            Add(rajahdys);
1709            rajahdys.Force = 25;
1710            rajahdys.Speed = 1000;
1711
1712            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
1713            if (!(kohde is Pelaaja)) return;
1714            Pelaaja pelaaja = (Pelaaja)kohde;
1715            if (pelaaja.DamageResistance == true)
1716            {
1717                pelaaja.HPLaskuri.Value -= 10;
1718            }
1719            else
1720            {
1721                pelaaja.HPLaskuri.Value -= 20;
1722            }
1723        }
1724    }
1725    void RakettiOsui2(PhysicsObject ammus, PhysicsObject kohde)
1726    {
1727        if (ammus.IsDestroying) return;
1728        if (kohde.Tag.ToString() != "")
1729        {
1730            Explosion rajahdys = new Explosion(75);
1731            rajahdys.Position = ammus.Position;
1732            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 50.0); };
1733            Add(rajahdys);
1734            rajahdys.Force = 25;
1735            rajahdys.Speed = 1000;
1736
1737            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
1738            if (!(kohde is Pelaaja)) return;
1739            Pelaaja pelaaja = (Pelaaja)kohde;
1740            if (pelaaja.DamageResistance == true)
1741            {
1742                pelaaja.HPLaskuri.Value -= 17;
1743            }
1744            else
1745            {
1746                pelaaja.HPLaskuri.Value -= 35;
1747            }
1748        }
1749    }
1750    void RakettiOsui3(PhysicsObject ammus, PhysicsObject kohde)
1751    {
1752        if (ammus.IsDestroying) return;
1753        if (kohde.Tag.ToString() != "")
1754        {
1755            Explosion rajahdys = new Explosion(75);
1756            rajahdys.Position = ammus.Position;
1757            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 25.0); };
1758            Add(rajahdys);
1759            rajahdys.Force = 25;
1760            rajahdys.Speed = 1000;
1761
1762            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
1763            if (!(kohde is Pelaaja)) return;
1764            Pelaaja pelaaja = (Pelaaja)kohde;
1765            if (pelaaja.DamageResistance == true)
1766            {
1767                pelaaja.HPLaskuri.Value -= 7;
1768            }
1769            else
1770            {
1771                pelaaja.HPLaskuri.Value -= 15;
1772            }
1773        }
1774    }
1775
1776    void PaineaaltoOsuu(IPhysicsObject kohde, Vector shokki, Explosion e, double damagenMaara)
1777    {
1778        if (!(kohde is Pelaaja)) return;
1779        Pelaaja p = (Pelaaja)kohde;
1780        if (p.ViimeisinRajahdys == e) return;
1781        p.ViimeisinRajahdys = e;
1782        if (p.DamageResistance == true)
1783        {
1784            p.HPLaskuri.Value -= damagenMaara / 2;
1785        }
1786        else
1787        {
1788            p.HPLaskuri.Value -= damagenMaara;
1789        }
1790    }
1791
1792    void FlarePaineaaltoOsuu(IPhysicsObject kohde, Vector shokki, Explosion e)
1793    {
1794        if (!(kohde is Pelaaja)) return;
1795        Pelaaja p = (Pelaaja)kohde;
1796        if (p.ViimeisinRajahdys == e) return;
1797        p.ViimeisinRajahdys = e;
1798        if (p.DamageResistance == true)
1799        {
1800            GameObject liekki = new GameObject(40, 40);
1801            liekki.Color = new Color(Color.Orange, 100);
1802            liekki.Shape = Shape.FromImage(norsu);
1803
1804            p.Add(liekki);
1805            Timer.SingleShot(2.5, delegate { p.Remove(liekki); });
1806
1807            p.HPLaskuri.Value -= 5;
1808            Timer.SingleShot(0.5, delegate
1809            {
1810                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1811                Timer.SingleShot(0.5, delegate
1812                {
1813                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1814                    Timer.SingleShot(0.5, delegate
1815                    {
1816                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1817                        Timer.SingleShot(0.5, delegate
1818                        {
1819                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1820                            Timer.SingleShot(0.5, delegate
1821                            {
1822                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1823                            });
1824                        });
1825                    });
1826                });
1827            });
1828        }
1829        else
1830        {
1831            GameObject liekki = new GameObject(40, 40);
1832            liekki.Color = new Color(Color.Orange, 100);
1833            liekki.Shape = Shape.FromImage(norsu);
1834
1835            p.Add(liekki);
1836            Timer.SingleShot(2.5, delegate { p.Remove(liekki); });
1837
1838            p.HPLaskuri.Value -= 10;
1839            Timer.SingleShot(0.5, delegate
1840            {
1841                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1842                Timer.SingleShot(0.5, delegate
1843                {
1844                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1845                    Timer.SingleShot(0.5, delegate
1846                    {
1847                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1848                        Timer.SingleShot(0.5, delegate
1849                        {
1850                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1851                            Timer.SingleShot(0.5, delegate
1852                            {
1853                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
1854                            });
1855                        });
1856                    });
1857                });
1858            });
1859        }
1860    }
1861
1862    void FlarePaineaaltoXOsuu(IPhysicsObject kohde, Vector shokki, Explosion e)
1863    {
1864        if (!(kohde is Pelaaja)) return;
1865        Pelaaja p = (Pelaaja)kohde;
1866        if (p.ViimeisinRajahdys == e) return;
1867        p.ViimeisinRajahdys = e;
1868        if (p.DamageResistance == true)
1869        {
1870            GameObject liekki = new GameObject(40, 40);
1871            liekki.Color = new Color(Color.Blue, 100);
1872            liekki.Shape = Shape.FromImage(norsu);
1873
1874            p.Add(liekki);
1875            Timer.SingleShot(3.0, delegate { p.Remove(liekki); });
1876
1877            p.HPLaskuri.Value -= 15;
1878            Timer.SingleShot(0.5, delegate
1879            {
1880                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1881                Timer.SingleShot(0.5, delegate
1882                {
1883                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1884                    Timer.SingleShot(0.5, delegate
1885                    {
1886                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1887                        Timer.SingleShot(0.5, delegate
1888                        {
1889                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1890                            Timer.SingleShot(0.5, delegate
1891                            {
1892                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1893                                Timer.SingleShot(0.5, delegate
1894                                {
1895                                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1896                                });
1897                            });
1898                        });
1899                    });
1900                });
1901            });
1902        }
1903        else
1904        {
1905            GameObject liekki = new GameObject(40, 40);
1906            liekki.Color = new Color(Color.Blue, 100);
1907            liekki.Shape = Shape.FromImage(norsu);
1908
1909            p.Add(liekki);
1910            Timer.SingleShot(3.0, delegate { p.Remove(liekki); });
1911
1912            p.HPLaskuri.Value -= 30;
1913            Timer.SingleShot(0.5, delegate
1914            {
1915                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1916                Timer.SingleShot(0.5, delegate
1917                {
1918                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1919                    Timer.SingleShot(0.5, delegate
1920                    {
1921                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1922                        Timer.SingleShot(0.5, delegate
1923                        {
1924                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1925                            Timer.SingleShot(0.5, delegate
1926                            {
1927                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1928                                Timer.SingleShot(0.5, delegate
1929                                {
1930                                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
1931                                });
1932                            });
1933                        });
1934                    });
1935                });
1936            });
1937        }
1938    }
1939
1940    bool AmmusVoiOsua(PhysicsObject ammus, PhysicsObject kohde)
1941    {
1942        if (ammus.IsDestroying) return false;
1943        if (kohde.Tag.ToString() != "ammus" && kohde.Tag.ToString() != "") ammus.Destroy();
1944        if (kohde is Pelaaja)
1945        {
1946            return true;
1947        }
1948        else
1949        {
1950            return false;
1951        }
1952    }
1953
1954    void PistooliOsui(PhysicsObject ammus, PhysicsObject kohde)
1955    {
1956        if (AmmusVoiOsua(ammus, kohde))
1957        {
1958            Pelaaja p = (Pelaaja)kohde;
1959            if (p.DamageResistance == true)
1960            {
1961                p.HPLaskuri.Value -= 7;
1962            }
1963            else
1964            {
1965                p.HPLaskuri.Value -= 15;
1966            }
1967        }
1968    }
1969    void PistooliOsui2(PhysicsObject ammus, PhysicsObject kohde)
1970    {
1971        if (AmmusVoiOsua(ammus, kohde))
1972        {
1973            Pelaaja p = (Pelaaja)kohde;
1974            if (p.DamageResistance == true)
1975            {
1976                p.HPLaskuri.Value -= 12;
1977            }
1978            else
1979            {
1980                p.HPLaskuri.Value -= 25;
1981            }
1982        }
1983    }
1984    void PistooliOsui3(PhysicsObject ammus, PhysicsObject kohde)
1985    {
1986        if (AmmusVoiOsua(ammus, kohde))
1987        {
1988            Pelaaja p = (Pelaaja)kohde;
1989            if (p.DamageResistance == true)
1990            {
1991                p.HPLaskuri.Value -= 12;
1992            }
1993            else
1994            {
1995                p.HPLaskuri.Value -= 25;
1996            }
1997        }
1998    }
1999
2000    void KivaariOsui(PhysicsObject ammus, PhysicsObject kohde)
2001    {
2002        if (AmmusVoiOsua(ammus, kohde))
2003        {
2004            Pelaaja p = (Pelaaja)kohde;
2005            if (p.DamageResistance == true)
2006            {
2007                p.HPLaskuri.Value -= 5;
2008            }
2009            else
2010            {
2011                p.HPLaskuri.Value -= 10;
2012            }
2013        }
2014    }
2015    void KivaariOsui2(PhysicsObject ammus, PhysicsObject kohde)
2016    {
2017        if (AmmusVoiOsua(ammus, kohde))
2018        {
2019            Pelaaja p = (Pelaaja)kohde;
2020            if (p.DamageResistance == true)
2021            {
2022                p.HPLaskuri.Value -= 7;
2023            }
2024            else
2025            {
2026                p.HPLaskuri.Value -= 15;
2027            }
2028        }
2029    }
2030    void KivaariOsui3(PhysicsObject ammus, PhysicsObject kohde)
2031    {
2032        if (AmmusVoiOsua(ammus, kohde))
2033        {
2034            Pelaaja p = (Pelaaja)kohde;
2035            if (p.DamageResistance == true)
2036            {
2037                p.HPLaskuri.Value -= 10;
2038            }
2039            else
2040            {
2041                p.HPLaskuri.Value -= 20;
2042            }
2043        }
2044    }
2045
2046    void SniperOsui(PhysicsObject ammus, PhysicsObject kohde)
2047    {
2048        if (AmmusVoiOsua(ammus, kohde))
2049        {
2050            Pelaaja p = (Pelaaja)kohde;
2051            if (p.DamageResistance == true)
2052            {
2053                p.HPLaskuri.Value -= 40;
2054            }
2055            else
2056            {
2057                p.HPLaskuri.Value -= 80;
2058            }
2059        }
2060    }
2061    void SniperOsui2(PhysicsObject ammus, PhysicsObject kohde)
2062    {
2063        if (AmmusVoiOsua(ammus, kohde))
2064        {
2065            Pelaaja p = (Pelaaja)kohde;
2066            if (p.DamageResistance == true)
2067            {
2068                p.HPLaskuri.Value -= 45;
2069            }
2070            else
2071            {
2072                p.HPLaskuri.Value -= 90;
2073            }
2074        }
2075    }
2076    void SniperOsui3(PhysicsObject ammus, PhysicsObject kohde)
2077    {
2078        if (AmmusVoiOsua(ammus, kohde))
2079        {
2080            Pelaaja p = (Pelaaja)kohde;
2081            if (p.DamageResistance == true)
2082            {
2083                p.HPLaskuri.Value -= 20;
2084            }
2085            else
2086            {
2087                p.HPLaskuri.Value -= 40;
2088            }
2089        }
2090    }
2091    void SniperOsui4(PhysicsObject ammus, PhysicsObject kohde)
2092    {
2093        if (AmmusVoiOsua(ammus, kohde))
2094        {
2095            Pelaaja p = (Pelaaja)kohde;
2096            if (p.DamageResistance == true)
2097            {
2098                p.HPLaskuri.Value -= 37;
2099            }
2100            else
2101            {
2102                p.HPLaskuri.Value -= 75;
2103            }
2104        }
2105    }
2106
2107    void MagnumOsui(PhysicsObject ammus, PhysicsObject kohde)
2108    {
2109        if (AmmusVoiOsua(ammus, kohde))
2110        {
2111            Pelaaja p = (Pelaaja)kohde;
2112            if (p.DamageResistance == true)
2113            {
2114                p.HPLaskuri.Value -= 26;
2115            }
2116            else
2117            {
2118                p.HPLaskuri.Value -= 35;
2119            }
2120        }
2121    }
2122    void MagnumOsui2(PhysicsObject ammus, PhysicsObject kohde)
2123    {
2124        if (AmmusVoiOsua(ammus, kohde))
2125        {
2126            Pelaaja p = (Pelaaja)kohde;
2127            if (p.DamageResistance == true)
2128            {
2129                p.HPLaskuri.Value -= 30;
2130            }
2131            else
2132            {
2133                p.HPLaskuri.Value -= 40;
2134            }
2135        }
2136    }
2137    void MagnumOsui3(PhysicsObject ammus, PhysicsObject kohde)
2138    {
2139        if (AmmusVoiOsua(ammus, kohde))
2140        {
2141            Pelaaja p = (Pelaaja)kohde;
2142            if (p.DamageResistance == true)
2143            {
2144                p.HPLaskuri.Value -= 37;
2145            }
2146            else
2147            {
2148                p.HPLaskuri.Value -= 50;
2149            }
2150        }
2151    }
2152    void MagnumOsui4(PhysicsObject ammus, PhysicsObject kohde)
2153    {
2154        if (AmmusVoiOsua(ammus, kohde))
2155        {
2156            Pelaaja p = (Pelaaja)kohde;
2157            if (p.DamageResistance == true)
2158            {
2159                p.HPLaskuri.Value -= 75;
2160            }
2161            else
2162            {
2163                p.HPLaskuri.Value -= 100;
2164            }
2165        }
2166    }
2167
2168    void HaulikkoOsui(PhysicsObject ammus, PhysicsObject kohde)
2169    {
2170        if (AmmusVoiOsua(ammus, kohde))
2171        {
2172            Pelaaja p = (Pelaaja)kohde;
2173            if (p.DamageResistance == true)
2174            {
2175                p.HPLaskuri.Value -= 6;
2176            }
2177            else
2178            {
2179                p.HPLaskuri.Value -= 13;
2180            }
2181        }
2182    }
2183    void HaulikkoOsui2(PhysicsObject ammus, PhysicsObject kohde)
2184    {
2185        if (AmmusVoiOsua(ammus, kohde))
2186        {
2187            Pelaaja p = (Pelaaja)kohde;
2188            if (p.DamageResistance == true)
2189            {
2190                p.HPLaskuri.Value -= 7;
2191            }
2192            else
2193            {
2194                p.HPLaskuri.Value -= 15;
2195            }
2196        }
2197    }
2198    void HaulikkoOsui3(PhysicsObject ammus, PhysicsObject kohde)
2199    {
2200        if (AmmusVoiOsua(ammus, kohde))
2201        {
2202            Pelaaja p = (Pelaaja)kohde;
2203            if (p.DamageResistance == true)
2204            {
2205                p.HPLaskuri.Value -= 7;
2206            }
2207            else
2208            {
2209                p.HPLaskuri.Value -= 15;
2210            }
2211        }
2212    }
2213
2214    void MiekkaOsui(PhysicsObject ammus, PhysicsObject kohde)
2215    {
2216        if (AmmusVoiOsua(ammus, kohde))
2217        {
2218            Pelaaja p = (Pelaaja)kohde;
2219            if (p.DamageResistance == true)
2220            {
2221                p.HPLaskuri.Value -= 5;
2222            }
2223            else
2224            {
2225                p.HPLaskuri.Value -= 10;
2226            }
2227        }
2228    }
2229
2230    void FlareOsui(PhysicsObject ammus, PhysicsObject kohde)
2231    {
2232        if (AmmusVoiOsua(ammus, kohde))
2233        {
2234            Pelaaja p = (Pelaaja)kohde;
2235            if (p.DamageResistance == true)
2236            {
2237                GameObject liekki = new GameObject(40, 40);
2238                liekki.Color = new Color(Color.Orange, 100);
2239                liekki.Shape = Shape.FromImage(norsu);
2240
2241                p.Add(liekki);
2242                Timer.SingleShot(1.0, delegate { p.Remove(liekki); });
2243
2244                p.HPLaskuri.Value -= 7;
2245                Timer.SingleShot(0.5, delegate { if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2246                Timer.SingleShot(0.5, delegate { if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; } });
2247                });
2248            }
2249            else
2250            {
2251                GameObject liekki = new GameObject(40, 40);
2252                liekki.Color = new Color(Color.Orange, 100);
2253                liekki.Shape = Shape.FromImage(norsu);
2254
2255                p.Add(liekki);
2256                Timer.SingleShot(1.0, delegate { p.Remove(liekki); });
2257
2258                p.HPLaskuri.Value -= 15;
2259                Timer.SingleShot(0.5, delegate { if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2260                Timer.SingleShot(0.5, delegate { if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; } });
2261                });
2262               
2263            }
2264        }
2265    }
2266
2267    void FlareOsui2(PhysicsObject ammus, PhysicsObject kohde)
2268    {
2269        if (AmmusVoiOsua(ammus, kohde))
2270        {
2271            Pelaaja p = (Pelaaja)kohde;
2272            if (p.DamageResistance == true)
2273            {
2274                GameObject liekki = new GameObject(40, 40);
2275                liekki.Color = new Color(Color.Orange, 100);
2276                liekki.Shape = Shape.FromImage(norsu);
2277
2278                p.Add(liekki);
2279                Timer.SingleShot(2.0, delegate { p.Remove(liekki); });
2280
2281                p.HPLaskuri.Value -= 10;
2282                Timer.SingleShot(0.5, delegate
2283                {
2284                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2285                    Timer.SingleShot(0.5, delegate
2286                    {
2287                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2288                        Timer.SingleShot(0.5, delegate
2289                        {
2290                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2291                            Timer.SingleShot(0.5, delegate
2292                            {
2293                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2294                            });
2295                        });
2296                    });
2297                });
2298            }
2299            else
2300            {
2301                GameObject liekki = new GameObject(40, 40);
2302                liekki.Color = new Color(Color.Orange, 100);
2303                liekki.Shape = Shape.FromImage(norsu);
2304
2305                p.Add(liekki);
2306                Timer.SingleShot(2.0, delegate { p.Remove(liekki); });
2307
2308                p.HPLaskuri.Value -= 20;
2309                Timer.SingleShot(0.5, delegate
2310                {
2311                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2312                    Timer.SingleShot(0.5, delegate
2313                    {
2314                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2315                        Timer.SingleShot(0.5, delegate
2316                        {
2317                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2318                            Timer.SingleShot(0.5, delegate
2319                            {
2320                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 2; } else { p.HPLaskuri.Value -= 5; }
2321                            });
2322                        });
2323                    });
2324                });
2325
2326            }
2327        }
2328    }
2329    void FlareOsui3(PhysicsObject ammus, PhysicsObject kohde)
2330    {
2331        if (AmmusVoiOsua(ammus, kohde))
2332        {
2333            Pelaaja p = (Pelaaja)kohde;
2334            if (p.DamageResistance == true)
2335            {
2336                GameObject liekki = new GameObject(40, 40);
2337                liekki.Color = new Color(Color.Orange, 100);
2338                liekki.Shape = Shape.FromImage(norsu);
2339
2340                p.Add(liekki);
2341                Timer.SingleShot(2.5, delegate { p.Remove(liekki); });
2342
2343                p.HPLaskuri.Value -= 15;
2344                Timer.SingleShot(0.5, delegate
2345                {
2346                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2347                    Timer.SingleShot(0.5, delegate
2348                    {
2349                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2350                        Timer.SingleShot(0.5, delegate
2351                        {
2352                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2353                            Timer.SingleShot(0.5, delegate
2354                            {
2355                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2356                                Timer.SingleShot(0.5, delegate
2357                                {
2358                                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2359                                });
2360                            });
2361                        });
2362                    });
2363                });
2364            }
2365            else
2366            {
2367                GameObject liekki = new GameObject(40, 40);
2368                liekki.Color = new Color(Color.Orange, 100);
2369                liekki.Shape = Shape.FromImage(norsu);
2370
2371                p.Add(liekki);
2372                Timer.SingleShot(2.5, delegate { p.Remove(liekki); });
2373
2374                p.HPLaskuri.Value -= 30;
2375                Timer.SingleShot(0.5, delegate
2376                {
2377                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2378                    Timer.SingleShot(0.5, delegate
2379                    {
2380                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2381                        Timer.SingleShot(0.5, delegate
2382                        {
2383                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2384                            Timer.SingleShot(0.5, delegate
2385                            {
2386                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2387                                Timer.SingleShot(0.5, delegate
2388                                {
2389                                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 3; } else { p.HPLaskuri.Value -= 7; }
2390                                });
2391                            });
2392                        });
2393                    });
2394                });
2395            }
2396        }
2397    }
2398
2399    void FlareOsui4(PhysicsObject ammus, PhysicsObject kohde)
2400    {
2401        if (AmmusVoiOsua(ammus, kohde))
2402        {
2403            Pelaaja p = (Pelaaja)kohde;
2404            if (p.DamageResistance == true)
2405            {
2406                GameObject liekki = new GameObject(40, 40);
2407                liekki.Color = new Color(Color.Red, 100);
2408                liekki.Shape = Shape.FromImage(norsu);
2409
2410                p.Add(liekki);
2411                Timer.SingleShot(5.0, delegate { p.Remove(liekki); });
2412
2413                p.HPLaskuri.Value -= 17;
2414                Timer.SingleShot(0.5, delegate
2415                {
2416                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2417                    Timer.SingleShot(0.5, delegate
2418                    {
2419                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2420                        Timer.SingleShot(0.5, delegate
2421                        {
2422                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2423                            Timer.SingleShot(0.5, delegate
2424                            {
2425                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2426                                Timer.SingleShot(0.5, delegate
2427                                {
2428                                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2429                                    Timer.SingleShot(0.5, delegate
2430                                    {
2431                                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2432                                        Timer.SingleShot(0.5, delegate
2433                                        {
2434                                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2435                                            Timer.SingleShot(0.5, delegate
2436                                            {
2437                                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2438                                                Timer.SingleShot(0.5, delegate
2439                                                {
2440                                                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2441                                                    Timer.SingleShot(0.5, delegate
2442                                                    {
2443                                                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2444                                                    });
2445                                                });
2446                                            });
2447                                        });
2448                                    });
2449                                });
2450                            });
2451                        });
2452                    });
2453                });
2454            }
2455            else
2456            {
2457                GameObject liekki = new GameObject(40, 40);
2458                liekki.Color = new Color(Color.Red, 100);
2459                liekki.Shape = Shape.FromImage(norsu);
2460
2461                p.Add(liekki);
2462                Timer.SingleShot(5.0, delegate { p.Remove(liekki); });
2463
2464                p.HPLaskuri.Value -= 35;
2465                Timer.SingleShot(0.5, delegate
2466                {
2467                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2468                    Timer.SingleShot(0.5, delegate
2469                    {
2470                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2471                        Timer.SingleShot(0.5, delegate
2472                        {
2473                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2474                            Timer.SingleShot(0.5, delegate
2475                            {
2476                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2477                                Timer.SingleShot(0.5, delegate
2478                                {
2479                                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2480                                    Timer.SingleShot(0.5, delegate
2481                                    {
2482                                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2483                                        Timer.SingleShot(0.5, delegate
2484                                        {
2485                                            if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2486                                            Timer.SingleShot(0.5, delegate
2487                                            {
2488                                                if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2489                                                Timer.SingleShot(0.5, delegate
2490                                                {
2491                                                    if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2492                                                    Timer.SingleShot(0.5, delegate
2493                                                    {
2494                                                        if (p.DamageResistance == true) { p.HPLaskuri.Value -= 5; } else { p.HPLaskuri.Value -= 10; }
2495                                                    });
2496                                                });
2497                                            });
2498                                        });
2499                                    });
2500                                });
2501                            });
2502                        });
2503                    });
2504                });
2505            }
2506        }
2507    }
2508
2509    // Muunnetut aseet
2510
2511    void SarjatulikivaariOsui(PhysicsObject ammus, PhysicsObject kohde)
2512    {
2513        if (AmmusVoiOsua(ammus, kohde))
2514        {
2515            Pelaaja p = (Pelaaja)kohde;
2516            if (p.DamageResistance == true)
2517            {
2518                p.HPLaskuri.Value -= 7;
2519            }
2520            else
2521            {
2522                p.HPLaskuri.Value -= 15;
2523            }
2524        }
2525    }
2526
2527    void RevolveriOsui(PhysicsObject ammus, PhysicsObject kohde)
2528    {
2529        if (AmmusVoiOsua(ammus, kohde))
2530        {
2531            Pelaaja p = (Pelaaja)kohde;
2532            if (p.DamageResistance == true)
2533            {
2534                p.HPLaskuri.Value -= 30;
2535            }
2536            else
2537            {
2538                p.HPLaskuri.Value -= 40;
2539            }
2540        }
2541    }
2542
2543    void KatkaistuHaulikkoOsui(PhysicsObject ammus, PhysicsObject kohde)
2544    {
2545        if (AmmusVoiOsua(ammus, kohde))
2546        {
2547            Pelaaja p = (Pelaaja)kohde;
2548            if (p.DamageResistance == true)
2549            {
2550                p.HPLaskuri.Value -= 6;
2551            }
2552            else
2553            {
2554                p.HPLaskuri.Value -= 13;
2555            }
2556        }
2557    }
2558
2559    void PanssariSniperOsui(PhysicsObject ammus, PhysicsObject kohde)
2560    {
2561        if (AmmusVoiOsua(ammus, kohde))
2562        {
2563            Pelaaja p = (Pelaaja)kohde;
2564            if (p.DamageResistance == true)
2565            {
2566                p.HPLaskuri.Value -= 100;
2567            }
2568            else
2569            {
2570                p.HPLaskuri.Value -= 200;
2571            }
2572        }
2573    }
2574
2575    void SirpaleKranaattiOsui(PhysicsObject ammus, PhysicsObject kohde)
2576    {
2577        if (ammus.IsDestroying) return;
2578        if (kohde.Tag.ToString() != "")
2579        {
2580            Explosion rajahdys = new Explosion(75);
2581            rajahdys.Position = ammus.Position;
2582            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 50.0); };
2583            Add(rajahdys);
2584            rajahdys.Force = 25;
2585            rajahdys.Speed = 1000;
2586
2587            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
2588            if (!(kohde is Pelaaja)) return;
2589            Pelaaja pelaaja = (Pelaaja)kohde;
2590            if (pelaaja.DamageResistance == true)
2591            {
2592                pelaaja.HPLaskuri.Value -= 20;
2593            }
2594            else
2595            {
2596                pelaaja.HPLaskuri.Value -= 40;
2597            }
2598        }
2599    }
2600
2601    void SinkoOsui(PhysicsObject ammus, PhysicsObject kohde)
2602    {
2603        if (ammus.IsDestroying) return;
2604        if (kohde.Tag.ToString() != "")
2605        {
2606            Explosion rajahdys = new Explosion(100);
2607            rajahdys.Position = ammus.Position;
2608            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 75.0); };
2609            Add(rajahdys);
2610            rajahdys.Force = 25;
2611            rajahdys.Speed = 1000;
2612
2613            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
2614            if (!(kohde is Pelaaja)) return;
2615            Pelaaja pelaaja = (Pelaaja)kohde;
2616            if (pelaaja.DamageResistance == true)
2617            {
2618                pelaaja.HPLaskuri.Value -= 25;
2619            }
2620            else
2621            {
2622                pelaaja.HPLaskuri.Value -= 50;
2623            }
2624        }
2625    }
2626
2627    void KonepistooliOsui(PhysicsObject ammus, PhysicsObject kohde)
2628    {
2629        if (AmmusVoiOsua(ammus, kohde))
2630        {
2631            Pelaaja p = (Pelaaja)kohde;
2632            if (p.DamageResistance == true)
2633            {
2634                p.HPLaskuri.Value -= 7;
2635            }
2636            else
2637            {
2638                p.HPLaskuri.Value -= 15;
2639            }
2640        }
2641    }
2642
2643    void ExpFlareOsui(PhysicsObject ammus, PhysicsObject kohde)
2644    {
2645            if (ammus.IsDestroying) return;
2646            if (kohde.Tag.ToString() != "")
2647            {
2648                Explosion rajahdys = new Explosion(75);
2649                rajahdys.Position = ammus.Position;
2650                rajahdys.Color = Color.Orange;
2651                rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { FlarePaineaaltoOsuu(p, shokki, rajahdys); };
2652                Add(rajahdys);
2653                rajahdys.Force = 25;
2654                rajahdys.Speed = 1000;
2655
2656                ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
2657                if (!(kohde is Pelaaja)) return;
2658                Pelaaja pelaaja = (Pelaaja)kohde;
2659                if (pelaaja.DamageResistance == true)
2660                {
2661                    pelaaja.HPLaskuri.Value -= 15;
2662                }
2663                else
2664                {
2665                    pelaaja.HPLaskuri.Value -= 30;
2666                }
2667            }
2668    }
2669
2670    void SarjatulikivaariXOsui(PhysicsObject ammus, PhysicsObject kohde)
2671    {
2672        if (AmmusVoiOsua(ammus, kohde))
2673        {
2674            Pelaaja p = (Pelaaja)kohde;
2675            if (p.DamageResistance == true)
2676            {
2677                p.HPLaskuri.Value -= 15;
2678            }
2679            else
2680            {
2681                p.HPLaskuri.Value -= 30;
2682            }
2683        }
2684    }
2685
2686    void RevolveriXOsui(PhysicsObject ammus, PhysicsObject kohde)
2687    {
2688        if (AmmusVoiOsua(ammus, kohde))
2689        {
2690            Pelaaja p = (Pelaaja)kohde;
2691            if (p.DamageResistance == true)
2692            {
2693                p.HPLaskuri.Value -= 40;
2694            }
2695            else
2696            {
2697                p.HPLaskuri.Value -= 60;
2698            }
2699        }
2700    }
2701
2702    void KatkaistuHaulikkoXOsui(PhysicsObject ammus, PhysicsObject kohde)
2703    {
2704        if (AmmusVoiOsua(ammus, kohde))
2705        {
2706            Pelaaja p = (Pelaaja)kohde;
2707            if (p.DamageResistance == true)
2708            {
2709                p.HPLaskuri.Value -= 7;
2710            }
2711            else
2712            {
2713                p.HPLaskuri.Value -= 15;
2714            }
2715        }
2716    }
2717
2718    void PanssariSniperXOsui(PhysicsObject ammus, PhysicsObject kohde)
2719    {
2720        if (AmmusVoiOsua(ammus, kohde))
2721        {
2722            Pelaaja p = (Pelaaja)kohde;
2723            if (p.DamageResistance == true)
2724            {
2725                p.HPLaskuri.Value -= 500;
2726            }
2727            else
2728            {
2729                p.HPLaskuri.Value -= 1000;
2730            }
2731        }
2732    }
2733
2734    void SirpaleKranaattiXOsui(PhysicsObject ammus, PhysicsObject kohde)
2735    {
2736        if (ammus.IsDestroying) return;
2737        if (kohde.Tag.ToString() != "")
2738        {
2739            Explosion rajahdys = new Explosion(100);
2740            rajahdys.Position = ammus.Position;
2741            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 65.0); };
2742            Add(rajahdys);
2743            rajahdys.Force = 25;
2744            rajahdys.Speed = 1000;
2745
2746            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
2747            if (!(kohde is Pelaaja)) return;
2748            Pelaaja pelaaja = (Pelaaja)kohde;
2749            if (pelaaja.DamageResistance == true)
2750            {
2751                pelaaja.HPLaskuri.Value -= 25;
2752            }
2753            else
2754            {
2755                pelaaja.HPLaskuri.Value -= 50;
2756            }
2757        }
2758    }
2759
2760    void SinkoXOsui(PhysicsObject ammus, PhysicsObject kohde)
2761    {
2762        if (ammus.IsDestroying) return;
2763        if (kohde.Tag.ToString() != "")
2764        {
2765            Explosion rajahdys = new Explosion(125);
2766            rajahdys.Position = ammus.Position;
2767            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { PaineaaltoOsuu(p, shokki, rajahdys, 90.0); };
2768            Add(rajahdys);
2769            rajahdys.Force = 25;
2770            rajahdys.Speed = 1000;
2771
2772            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
2773            if (!(kohde is Pelaaja)) return;
2774            Pelaaja pelaaja = (Pelaaja)kohde;
2775            if (pelaaja.DamageResistance == true)
2776            {
2777                pelaaja.HPLaskuri.Value -= 35;
2778            }
2779            else
2780            {
2781                pelaaja.HPLaskuri.Value -= 70;
2782            }
2783        }
2784    }
2785
2786    void KonepistooliXOsui(PhysicsObject ammus, PhysicsObject kohde)
2787    {
2788        if (AmmusVoiOsua(ammus, kohde))
2789        {
2790            Pelaaja p = (Pelaaja)kohde;
2791            if (p.DamageResistance == true)
2792            {
2793                p.HPLaskuri.Value -= 8;
2794            }
2795            else
2796            {
2797                p.HPLaskuri.Value -= 17;
2798            }
2799        }
2800    }
2801
2802    void ExpFlareXOsui(PhysicsObject ammus, PhysicsObject kohde)
2803    {
2804        if (ammus.IsDestroying) return;
2805        if (kohde.Tag.ToString() != "")
2806        {
2807            Explosion rajahdys = new Explosion(100);
2808            rajahdys.Position = ammus.Position;
2809            rajahdys.Color = Color.Blue;
2810            rajahdys.ShockwaveReachesObject += delegate(IPhysicsObject p, Vector shokki) { FlarePaineaaltoXOsuu(p, shokki, rajahdys); };
2811            Add(rajahdys);
2812            rajahdys.Force = 25;
2813            rajahdys.Speed = 1000;
2814
2815            ammus.Destroy(); // ei voi taata tapahtuuko tämä "heti". Siksi tarvitaan alkuun tarkistus, että onko ammus tuhoutumassa.
2816            if (!(kohde is Pelaaja)) return;
2817            Pelaaja pelaaja = (Pelaaja)kohde;
2818            if (pelaaja.DamageResistance == true)
2819            {
2820                pelaaja.HPLaskuri.Value -= 20;
2821            }
2822            else
2823            {
2824                pelaaja.HPLaskuri.Value -= 40;
2825            }
2826        }
2827    }
2828
2829    void LuoPowerUp(Vector paikka, Vector koko, String tagi, Image kuva)
2830    {
2831        PhysicsObject powerup = new PhysicsObject(koko.X, koko.Y);
2832        powerup.Position = paikka;
2833        powerup.Tag = tagi;
2834        powerup.Image = kuva;
2835        Add(powerup);
2836        AddCollisionHandler<PhysicsObject, Pelaaja>(powerup, "pelaaja", keraaPowerUp);
2837    }
2838
2839    void LuoPowerUp1(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva)
2840    {
2841        PhysicsObject powerup = new PhysicsObject(koko.X, koko.Y);
2842        powerup.Position = paikka;
2843        powerup.Tag = tagi;
2844        powerup.Image = kuva;
2845        Add(powerup);
2846        AddCollisionHandler<PhysicsObject, Pelaaja>(powerup, "pelaaja", keraaPowerUp);
2847    }
2848
2849    void LuoUpgrade1(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva)
2850    {
2851        PhysicsObject upgrade = new PhysicsObject(koko.X, koko.Y);
2852        upgrade.Position = paikka;
2853        upgrade.Tag = tagi;
2854        upgrade.Image = kuva;
2855        Add(upgrade);
2856        AddCollisionHandler<PhysicsObject, Pelaaja>(upgrade, "pelaaja", keraaUpgrade);
2857    }
2858
2859    void LisaaPowerUpPaikka(Vector paikka, double leveys, double korkeus, List<Vector> powerupvektorit)
2860    {
2861        powerupvektorit.Add(paikka);
2862    }
2863
2864    void LisaaHPPaikka(Vector paikka, double leveys, double korkeus, List<Vector> hpvektorit)
2865    {
2866        hpvektorit.Add(paikka);
2867    }
2868
2869    void LuoHP(Vector paikka, Vector koko, String tagi, Image kuva)
2870    {
2871        PhysicsObject hp = new PhysicsObject(koko.X, koko.Y);
2872        hp.Position = paikka;
2873        hp.Tag = tagi;
2874        hp.Image = kuva;
2875        Add(hp);
2876        AddCollisionHandler<PhysicsObject, Pelaaja>(hp, "pelaaja", keraaHP);
2877    }
2878
2879    void LuoHP1(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva)
2880    {
2881        PhysicsObject hp = new PhysicsObject(koko.X, koko.Y);
2882        hp.Position = paikka;
2883        hp.Tag = tagi;
2884        hp.Image = kuva;
2885        Add(hp);
2886        AddCollisionHandler<PhysicsObject, Pelaaja>(hp, "pelaaja", keraaHP1);
2887    }
2888
2889    void LuoHPIncrease(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva)
2890    {
2891        PhysicsObject hpboost = new PhysicsObject(koko.X, koko.Y);
2892        hpboost.Position = paikka;
2893        hpboost.Tag = tagi;
2894        hpboost.Image = kuva;
2895        Add(hpboost);
2896        AddCollisionHandler<PhysicsObject, Pelaaja>(hpboost, "pelaaja", keraaHPBoost);
2897    }
2898
2899    void LuoAse(Vector paikka, double leveys, double korkeus, Vector koko, String tagi, Image kuva)
2900    {
2901        PhysicsObject ase = new PhysicsObject(koko.X, koko.Y);
2902        ase.Position = paikka;
2903        ase.Tag = tagi;
2904        ase.Image = kuva;
2905        Add(ase);
2906        AddCollisionHandler<PhysicsObject, Pelaaja>(ase, "pelaaja", keraaAse);
2907    }
2908
2909    /// <summary>
2910    ///
2911    /// </summary>
2912    /// <param name="aseenTag">Fysiikkaolio, jonka perusteella laitetaan pelaajalle ase</param>
2913    /// <param name="pelaaja">Pelaaja jolle ase luodaan</param>
2914    /// <returns></returns>
2915    private bool LuoAsePelaajalle(string aseenTag, Pelaaja pelaaja)
2916    {
2917        if (aseenTag == null) return false;
2918
2919        // Varsinainen ase
2920        Weapon ase = null;
2921
2922        if (aseenTag == "Kivääri")
2923        {
2924            ase = new AssaultRifle(39, 13);
2925            ase.FireRate = 7;
2926            ase.ProjectileCollision = KivaariOsui;
2927            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2928            ase.Tag = "Kivääri";
2929            ase.Image = kivaarinkuva;
2930        }
2931
2932        if (aseenTag == "Magnum")
2933        {
2934            ase = new AssaultRifle(17, 12);
2935            ase.FireRate = 1.2;
2936            ase.ProjectileCollision = MagnumOsui;
2937            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2938            ase.Tag = "Magnum";
2939            ase.Image = magnumkuva;
2940
2941            // Paikka suhteessa pelaajaan
2942            ase.X = 10;
2943            ase.Y = 10;
2944        }
2945
2946        if (aseenTag == "Haulikko")
2947        {
2948            ase = new AssaultRifle(42, 10);
2949            ase.FireRate = 0.75;
2950            ase.ProjectileCollision = HaulikkoOsui;
2951            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.4);
2952            ase.Tag = "Haulikko";
2953            ase.Image = haulikonkuva;
2954        }
2955
2956        if (aseenTag == "Sniper")
2957        {
2958            ase = new AssaultRifle(42, 11);
2959            ase.FireRate = 0.4;
2960            ase.ProjectileCollision = SniperOsui;
2961            ase.Power.Value = 400;
2962            ase.Power.DefaultValue = 400;
2963            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2964            ase.Tag = "Sniper";
2965            ase.Image = sniperinkuva;
2966        }
2967
2968        if (aseenTag == "Kranaatinheitin")
2969        {
2970            ase = new Cannon(42, 15);
2971            ase.FireRate = 0.5;
2972            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui(ammus, kohde); };
2973            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
2974            ase.Tag = "Kranaatinheitin";
2975            ase.Image = kranaatinheittimenkuva;
2976        }
2977        if (aseenTag == "Raketinheitin")
2978        {
2979            ase = new AssaultRifle(48, 15);
2980            ase.FireRate = 0.5;
2981            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui(ammus, kohde); };
2982            ase.Power.Value = 125;
2983            ase.Power.DefaultValue = 125;
2984            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2985            ase.Tag = "Raketinheitin";
2986            ase.Image = raketinheittimenkuva;
2987        }
2988
2989        if (aseenTag == "Pistooli")
2990        {
2991            ase = new AssaultRifle(16, 11);
2992            ase.FireRate = 2;
2993            ase.ProjectileCollision = PistooliOsui;
2994            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
2995            ase.Tag = "Pistooli";
2996            ase.Image = pistoolinkuva;
2997            ase.X = 10;
2998            ase.Y = 10;
2999        }
3000
3001        if (aseenTag == "Kivääri Lv. 2")
3002        {
3003            ase = new AssaultRifle(39, 16);
3004            ase.FireRate = 9;
3005            ase.ProjectileCollision = KivaariOsui2;
3006            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3007            ase.Tag = "Kivääri Lv. 2";
3008            ase.Image = kivaarinkuva2;
3009        }
3010        if (aseenTag == "Magnum Lv. 2")
3011        {
3012            ase = new AssaultRifle(17, 12);
3013            ase.FireRate = 1.5;
3014            ase.ProjectileCollision = MagnumOsui2;
3015            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3016            ase.Tag = "Magnum Lv. 2";
3017            ase.Image = magnumkuva2;
3018
3019            // Paikka suhteessa pelaajaan
3020            ase.X = 10;
3021            ase.Y = 10;
3022        }
3023
3024        if (aseenTag == "Haulikko Lv. 2")
3025        {
3026            ase = new AssaultRifle(42, 12);
3027            ase.FireRate = 1.0;
3028            ase.ProjectileCollision = HaulikkoOsui2;
3029            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.5);
3030            ase.Tag = "Haulikko Lv. 2";
3031            ase.Image = haulikonkuva2;
3032        }
3033
3034        if (aseenTag == "Sniper Lv. 2")
3035        {
3036            ase = new AssaultRifle(42, 11);
3037            ase.FireRate = 0.75;
3038            ase.ProjectileCollision = SniperOsui2;
3039            ase.Power.Value = 400;
3040            ase.Power.DefaultValue = 400;
3041            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3042            ase.Tag = "Sniper Lv. 2";
3043            ase.Image = sniperinkuva2;
3044        }
3045
3046        if (aseenTag == "Kranaatinheitin Lv. 2")
3047        {
3048            ase = new Cannon(42, 16);
3049            ase.FireRate = 0.75;
3050            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui2(ammus, kohde); };
3051            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
3052            ase.Tag = "Kranaatinheitin Lv. 2";
3053            ase.Image = kranaatinheittimenkuva2;
3054        }
3055        if (aseenTag == "Raketinheitin Lv. 2")
3056        {
3057            ase = new AssaultRifle(48, 15);
3058            ase.FireRate = 0.75;
3059            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui2(ammus, kohde); };
3060            ase.Power.Value = 165;
3061            ase.Power.DefaultValue = 165;
3062            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3063            ase.Tag = "Raketinheitin Lv. 2";
3064            ase.Image = raketinheittimenkuva2;
3065        }
3066
3067        if (aseenTag == "Pistooli Lv. 2")
3068        {
3069            ase = new AssaultRifle(17, 11);
3070            ase.FireRate = 2;
3071            ase.ProjectileCollision = PistooliOsui2;
3072            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3073            ase.Tag = "Pistooli Lv. 2";
3074            ase.Image = pistoolinkuva2;
3075            ase.X = 10;
3076            ase.Y = 10;
3077        }
3078        if (aseenTag == "Kivääri Lv. 3")
3079        {
3080            ase = new AssaultRifle(39, 16);
3081            ase.FireRate = 10;
3082            ase.ProjectileCollision = KivaariOsui3;
3083            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3084            ase.Tag = "Kivääri Lv. 3";
3085            ase.Image = kivaarinkuva3;
3086        }
3087        if (aseenTag == "Magnum Lv. 3")
3088        {
3089            ase = new AssaultRifle(17, 12);
3090            ase.FireRate = 2.0;
3091            ase.ProjectileCollision = MagnumOsui3;
3092            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3093            ase.Tag = "Magnum Lv. 3";
3094            ase.Image = magnumkuva3;
3095
3096            // Paikka suhteessa pelaajaan
3097            ase.X = 10;
3098            ase.Y = 10;
3099        }
3100
3101        if (aseenTag == "Haulikko Lv. 3")
3102        {
3103            ase = new AssaultRifle(38, 12);
3104            ase.FireRate = 2.0;
3105            ase.ProjectileCollision = HaulikkoOsui3;
3106            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.75);
3107            ase.Tag = "Haulikko Lv. 3";
3108            ase.Image = haulikonkuva3;
3109        }
3110
3111        if (aseenTag == "Sniper Lv. 3")
3112        {
3113            ase = new AssaultRifle(45, 12);
3114            ase.FireRate = 4.0;
3115            ase.ProjectileCollision = SniperOsui3;
3116            ase.Power.Value = 400;
3117            ase.Power.DefaultValue = 400;
3118            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3119            ase.Tag = "Sniper Lv. 3";
3120            ase.Image = sniperinkuva3;
3121        }
3122
3123        if (aseenTag == "Kranaatinheitin Lv. 3")
3124        {
3125            ase = new Cannon(37, 17);
3126            ase.FireRate = 1.0;
3127            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui3(ammus, kohde); };
3128            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
3129            ase.Tag = "Kranaatinheitin Lv. 3";
3130            ase.Image = kranaatinheittimenkuva3;
3131        }
3132        if (aseenTag == "Raketinheitin Lv. 3")
3133        {
3134            ase = new AssaultRifle(48, 22.5);
3135            ase.FireRate = 4.0;
3136            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui3(ammus, kohde); };
3137            ase.Power.Value = 125;
3138            ase.Power.DefaultValue = 125;
3139            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3140            ase.Tag = "Raketinheitin Lv. 3";
3141            ase.Image = raketinheittimenkuva3;
3142        }
3143
3144        if (aseenTag == "Pistooli Lv. 3")
3145        {
3146            ase = new AssaultRifle(20, 13);
3147            ase.FireRate = 2;
3148            ase.ProjectileCollision = PistooliOsui3;
3149            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3150            ase.Tag = "Pistooli Lv. 3";
3151            ase.Image = pistoolinkuva3;
3152            ase.X = 10;
3153            ase.Y = 10;
3154        }
3155
3156
3157        if (aseenTag == "Kivääri Lv. 4")
3158        {
3159            ase = new AssaultRifle(39, 16);
3160            ase.FireRate = 20;
3161            ase.ProjectileCollision = KivaariOsui3;
3162            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3163            ase.Tag = "Kivääri Lv. 4";
3164            ase.Image = kivaarinkuva4;
3165        }
3166        if (aseenTag == "Magnum Lv. 4")
3167        {
3168            ase = new AssaultRifle(17, 12);
3169            ase.FireRate = 2.5;
3170            ase.ProjectileCollision = MagnumOsui4;
3171            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3172            ase.Tag = "Magnum Lv. 4";
3173            ase.Image = magnumkuva4;
3174
3175            // Paikka suhteessa pelaajaan
3176            ase.X = 10;
3177            ase.Y = 10;
3178        }
3179
3180        if (aseenTag == "Haulikko Lv. 4")
3181        {
3182            ase = new AssaultRifle(38, 12);
3183            ase.FireRate = 4.0;
3184            ase.ProjectileCollision = HaulikkoOsui3;
3185            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(2.0);
3186            ase.Tag = "Haulikko Lv. 4";
3187            ase.Image = haulikonkuva4;
3188        }
3189
3190        if (aseenTag == "Sniper Lv. 4")
3191        {
3192            ase = new AssaultRifle(45, 12);
3193            ase.FireRate = 5.0;
3194            ase.ProjectileCollision = SniperOsui4;
3195            ase.Power.Value = 400;
3196            ase.Power.DefaultValue = 400;
3197            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3198            ase.Tag = "Sniper Lv. 4";
3199            ase.Image = sniperinkuva4;
3200        }
3201
3202        if (aseenTag == "Kranaatinheitin Lv. 4")
3203        {
3204            ase = new Cannon(37, 17);
3205            ase.FireRate = 4.0;
3206            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { KranaattiOsui3(ammus, kohde); };
3207            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
3208            ase.Tag = "Kranaatinheitin Lv. 4";
3209            ase.Image = kranaatinheittimenkuva4;
3210        }
3211        if (aseenTag == "Raketinheitin Lv. 4")
3212        {
3213            ase = new AssaultRifle(48, 22.5);
3214            ase.FireRate = 8.0;
3215            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { RakettiOsui3(ammus, kohde); };
3216            ase.Power.Value = 125;
3217            ase.Power.DefaultValue = 125;
3218            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3219            ase.Tag = "Raketinheitin Lv. 4";
3220            ase.Image = raketinheittimenkuva4;
3221        }
3222
3223        if (aseenTag == "Pistooli Lv. 4")
3224        {
3225            ase = new AssaultRifle(20, 13);
3226            ase.FireRate = 4;
3227            ase.ProjectileCollision = PistooliOsui3;
3228            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3229            ase.Tag = "Pistooli Lv. 4";
3230            ase.Image = pistoolinkuva4;
3231            ase.X = 10;
3232            ase.Y = 10;
3233        }
3234
3235        //Yksinpeli aseet
3236        if (aseenTag == "Miekka")
3237        {
3238            ase = new AssaultRifle(24, 24);
3239            ase.FireRate = 1;
3240            ase.ProjectileCollision = MiekkaOsui;
3241            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.05);
3242            ase.Tag = "Miekka";
3243            ase.Image = miekankuva;
3244            ase.X = 10;
3245            ase.Y = 10;
3246        }
3247
3248        if (aseenTag == "Valopistooli")
3249        {
3250            ase = new AssaultRifle(18, 10);
3251            ase.FireRate = 0.75;
3252            ase.ProjectileCollision = FlareOsui;
3253            ase.Power.Value = 300;
3254            ase.Power.DefaultValue = 300;
3255            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3256            ase.Tag = "Valopistooli";
3257            ase.Image = flaregunkuva;
3258            ase.X = 10;
3259            ase.Y = 10;
3260        }
3261
3262        if (aseenTag == "Valopistooli Lv. 2")
3263        {
3264            ase = new AssaultRifle(18, 10);
3265            ase.FireRate = 1;
3266            ase.ProjectileCollision = FlareOsui2;
3267            ase.Power.Value = 300;
3268            ase.Power.DefaultValue = 300;
3269            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3270            ase.Tag = "Valopistooli Lv. 2";
3271            ase.Image = flaregunkuva2;
3272            ase.X = 10;
3273            ase.Y = 10;
3274        }
3275
3276        if (aseenTag == "Valopistooli Lv. 3")
3277        {
3278            ase = new AssaultRifle(18, 10);
3279            ase.FireRate = 1.2;
3280            ase.ProjectileCollision = FlareOsui3;
3281            ase.Power.Value = 300;
3282            ase.Power.DefaultValue = 300;
3283            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3284            ase.Tag = "Valopistooli Lv. 3";
3285            ase.Image = flaregunkuva3;
3286            ase.X = 10;
3287            ase.Y = 10;
3288        }
3289
3290        if (aseenTag == "Valopistooli Lv. 4")
3291        {
3292            ase = new AssaultRifle(18, 10);
3293            ase.FireRate = 1.5;
3294            ase.ProjectileCollision = FlareOsui4;
3295            ase.Power.Value = 300;
3296            ase.Power.DefaultValue = 300;
3297            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3298            ase.Tag = "Valopistooli Lv. 4";
3299            ase.Image = flaregunkuva4;
3300            ase.X = 10;
3301            ase.Y = 10;
3302        }
3303
3304        // Muunnetut aseet
3305
3306        if (aseenTag == "Sarjatulikivääri")
3307        {
3308            ase = new AssaultRifle(39, 13);
3309            ase.FireRate = 4;
3310            ase.ProjectileCollision = SarjatulikivaariOsui;
3311            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3312            ase.Tag = "Sarjatulikivääri";
3313            ase.Image = kivaarinkuva;
3314        }
3315
3316        if (aseenTag == "Revolveri")
3317        {
3318            ase = new AssaultRifle(17, 12);
3319            ase.FireRate = 3.0;
3320            ase.ProjectileCollision = RevolveriOsui;
3321            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3322            ase.Tag = "Revolveri";
3323            ase.Image = magnumkuva;
3324
3325            // Paikka suhteessa pelaajaan
3326            ase.X = 10;
3327            ase.Y = 10;
3328        }
3329
3330        if (aseenTag == "Katkaistu haulikko")
3331        {
3332            ase = new AssaultRifle(42, 10);
3333            ase.FireRate = 1.5;
3334            ase.ProjectileCollision = KatkaistuHaulikkoOsui;
3335            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.4);
3336            ase.Tag = "Katkaistu haulikko";
3337            ase.Image = haulikonkuva;
3338        }
3339
3340        if (aseenTag == "Panssari-Sniper")
3341        {
3342            ase = new AssaultRifle(42, 11);
3343            ase.FireRate = 0.5;
3344            ase.ProjectileCollision = PanssariSniperOsui;
3345            ase.Power.Value = 400;
3346            ase.Power.DefaultValue = 400;
3347            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3348            ase.Tag = "Panssari-Sniper";
3349            ase.Image = sniperinkuva;
3350        }
3351
3352        if (aseenTag == "Sirpalekranaatinheitin")
3353        {
3354            ase = new Cannon(37, 17);
3355            ase.FireRate = 1.0;
3356            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { SirpaleKranaattiOsui(ammus, kohde); };
3357            ase.Power.Value = 25000;
3358            ase.Power.DefaultValue = 25000;
3359            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
3360            ase.Tag = "Sirpalekranaatinheitin";
3361            ase.Image = kranaatinheittimenkuva;
3362        }
3363
3364        if (aseenTag == "Sinko")
3365        {
3366            ase = new AssaultRifle(48, 15);
3367            ase.FireRate = 0.75;
3368            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { SinkoOsui(ammus, kohde); };
3369            ase.Power.Value = 165;
3370            ase.Power.DefaultValue = 165;
3371            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3372            ase.Tag = "Sinko";
3373            ase.Image = raketinheittimenkuva;
3374        }
3375
3376        if (aseenTag == "Konepistooli")
3377        {
3378            ase = new AssaultRifle(16, 11);
3379            ase.FireRate = 17;
3380            ase.ProjectileCollision = KonepistooliOsui;
3381            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3382            ase.Tag = "Konepistooli";
3383            ase.Image = konepistoolinkuva;
3384            ase.X = 10;
3385            ase.Y = 10;
3386        }
3387
3388        if (aseenTag == "Räjähtävä valopistooli")
3389        {
3390            ase = new AssaultRifle(18, 10);
3391            ase.FireRate = 1.0;
3392            ase.ProjectileCollision = ExpFlareOsui;
3393            ase.Power.Value = 300;
3394            ase.Power.DefaultValue = 300;
3395            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3396            ase.Tag = "Räjähtävä valopistooli";
3397            ase.Image = flaregunkuva;
3398            ase.X = 10;
3399            ase.Y = 10;
3400        }
3401
3402        if (aseenTag == "Sarjatulikivääri Lv. X")
3403        {
3404            ase = new AssaultRifle(39, 13);
3405            ase.FireRate = 6;
3406            ase.ProjectileCollision = SarjatulikivaariXOsui;
3407            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3408            ase.Tag = "Sarjatulikivääri Lv. X";
3409            ase.Image = kivaarinkuva;
3410        }
3411
3412        if (aseenTag == "Revolveri Lv. X")
3413        {
3414            ase = new AssaultRifle(17, 12);
3415            ase.FireRate = 6;
3416            ase.ProjectileCollision = RevolveriXOsui;
3417            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3418            ase.Tag = "Revolveri Lv. X";
3419            ase.Image = magnumkuva;
3420
3421            // Paikka suhteessa pelaajaan
3422            ase.X = 10;
3423            ase.Y = 10;
3424        }
3425
3426        if (aseenTag == "Katkaistu haulikko Lv. X")
3427        {
3428            ase = new AssaultRifle(42, 10);
3429            ase.FireRate = 2;
3430            ase.ProjectileCollision = KatkaistuHaulikkoXOsui;
3431            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(0.4);
3432            ase.Tag = "Katkaistu haulikko Lv. X";
3433            ase.Image = haulikonkuva;
3434        }
3435
3436        if (aseenTag == "Panssari-Sniper Lv. X")
3437        {
3438            ase = new AssaultRifle(42, 11);
3439            ase.FireRate = 0.8;
3440            ase.ProjectileCollision = PanssariSniperXOsui;
3441            ase.Power.Value = 400;
3442            ase.Power.DefaultValue = 400;
3443            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3444            ase.Tag = "Panssari-Sniper Lv. X";
3445            ase.Image = sniperinkuva;
3446        }
3447
3448        if (aseenTag == "Sirpalekranaatinheitin Lv. X")
3449        {
3450            ase = new Cannon(37, 17);
3451            ase.FireRate = 2;
3452            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { SirpaleKranaattiXOsui(ammus, kohde); };
3453            ase.Power.Value = 25000;
3454            ase.Power.DefaultValue = 25000;
3455            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(3);
3456            ase.Tag = "Sirpalekranaatinheitin Lv. X";
3457            ase.Image = kranaatinheittimenkuva;
3458        }
3459
3460        if (aseenTag == "Sinko Lv. X")
3461        {
3462            ase = new AssaultRifle(48, 15);
3463            ase.FireRate = 1.5;
3464            ase.ProjectileCollision = delegate(PhysicsObject ammus, PhysicsObject kohde) { SinkoXOsui(ammus, kohde); };
3465            ase.Power.Value = 165;
3466            ase.Power.DefaultValue = 165;
3467            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3468            ase.Tag = "Sinko Lv. X";
3469            ase.Image = raketinheittimenkuva;
3470        }
3471
3472        if (aseenTag == "Konepistooli Lv. X")
3473        {
3474            ase = new AssaultRifle(16, 11);
3475            ase.FireRate = 34;
3476            ase.ProjectileCollision = KonepistooliXOsui;
3477            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3478            ase.Tag = "Konepistooli Lv. X";
3479            ase.Image = konepistoolinkuva;
3480            ase.X = 10;
3481            ase.Y = 10;
3482        }
3483
3484        if (aseenTag == "Räjähtävä valopistooli Lv. X")
3485        {
3486            ase = new AssaultRifle(18, 10);
3487            ase.FireRate = 1.5;
3488            ase.ProjectileCollision = ExpFlareXOsui;
3489            ase.Power.Value = 300;
3490            ase.Power.DefaultValue = 300;
3491            ase.MaxAmmoLifetime = TimeSpan.FromSeconds(10);
3492            ase.Tag = "Räjähtävä valopistooli Lv. X";
3493            ase.Image = flaregunkuva;
3494            ase.X = 10;
3495            ase.Y = 10;
3496        }
3497
3498        if (ase != null)
3499        {
3500            pelaaja.Weapon = ase;
3501            return true;
3502        }
3503        return false;
3504    }
3505
3506    void MuunnaAse(string aseenTag, Pelaaja pelaaja)
3507    {
3508        if (aseenTag == null) return;
3509
3510        if (aseenTag.Length >= 7 && aseenTag.Substring(0, 7) == "Kivääri")
3511        {
3512            LuoAsePelaajalle("Sarjatulikivääri", pelaaja);
3513        }
3514        if (aseenTag.Length >= 6 && aseenTag.Substring(0, 6) == "Magnum")
3515        {
3516            LuoAsePelaajalle("Revolveri", pelaaja);
3517        }
3518        if (aseenTag.Length >= 8 && aseenTag.Substring(0, 8) == "Haulikko")
3519        {
3520            LuoAsePelaajalle("Katkaistu haulikko", pelaaja);
3521        }
3522        if (aseenTag.Length >= 6 && aseenTag.Substring(0, 6) == "Sniper")
3523        {
3524            LuoAsePelaajalle("Panssari-Sniper", pelaaja);
3525        }
3526        if (aseenTag.Length >= 15 && aseenTag.Substring(0, 15) == "Kranaatinheitin")
3527        {
3528            LuoAsePelaajalle("Sirpalekranaatinheitin", pelaaja);
3529        }
3530        if (aseenTag.Length >= 13 && aseenTag.Substring(0, 13) == "Raketinheitin")
3531        {
3532            LuoAsePelaajalle("Sinko", pelaaja);
3533        }
3534        if (aseenTag.Length >= 8 && aseenTag.Substring(0, 8) == "Pistooli")
3535        {
3536            LuoAsePelaajalle("Konepistooli", pelaaja);
3537        }
3538
3539        // Yksinpeli aseet
3540        if (aseenTag.Length >= 12 && aseenTag.Substring(0, 12) == "Valopistooli")
3541        {
3542            LuoAsePelaajalle("Räjähtävä valopistooli", pelaaja);
3543        }
3544    }
3545
3546    void PaivitaAse(string aseenTag, Pelaaja pelaaja)
3547    {
3548        if (aseenTag == null) return;
3549
3550        if (aseenTag == "Kivääri")
3551        {
3552            LuoAsePelaajalle("Kivääri Lv. 2", pelaaja);
3553        }
3554        if (aseenTag == "Magnum")
3555        {
3556            LuoAsePelaajalle("Magnum Lv. 2", pelaaja);
3557        }
3558
3559        if (aseenTag == "Haulikko")
3560        {
3561            LuoAsePelaajalle("Haulikko Lv. 2", pelaaja);
3562        }
3563
3564        if (aseenTag == "Sniper")
3565        {
3566            LuoAsePelaajalle("Sniper Lv. 2", pelaaja);
3567        }
3568
3569        if (aseenTag == "Kranaatinheitin")
3570        {
3571            LuoAsePelaajalle("Kranaatinheitin Lv. 2", pelaaja);
3572        }
3573        if (aseenTag == "Raketinheitin")
3574        {
3575            LuoAsePelaajalle("Raketinheitin Lv. 2", pelaaja);
3576        }
3577
3578        if (aseenTag == "Pistooli")
3579        {
3580            LuoAsePelaajalle("Pistooli Lv. 2", pelaaja);
3581        }
3582
3583        if (aseenTag == "Kivääri Lv. 2")
3584        {
3585            LuoAsePelaajalle("Kivääri Lv. 3", pelaaja);
3586        }
3587        if (aseenTag == "Magnum Lv. 2")
3588        {
3589            LuoAsePelaajalle("Magnum Lv. 3", pelaaja);
3590        }
3591
3592        if (aseenTag == "Haulikko Lv. 2")
3593        {
3594            LuoAsePelaajalle("Haulikko Lv. 3", pelaaja);
3595        }
3596
3597        if (aseenTag == "Sniper Lv. 2")
3598        {
3599            LuoAsePelaajalle("Sniper Lv. 3", pelaaja);
3600        }
3601
3602        if (aseenTag == "Kranaatinheitin Lv. 2")
3603        {
3604            LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja);
3605        }
3606        if (aseenTag == "Raketinheitin Lv. 2")
3607        {
3608            LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja);
3609        }
3610
3611        if (aseenTag == "Pistooli Lv. 2")
3612        {
3613            LuoAsePelaajalle("Pistooli Lv. 3", pelaaja);
3614        }
3615
3616        if (aseenTag == "Kivääri Lv. 3")
3617        {
3618            LuoAsePelaajalle("Kivääri Lv. 4", pelaaja);
3619            Timer.SingleShot(5.0, delegate
3620            {
3621                if (pelaaja.IsDestroyed == true)
3622                {
3623                    return;
3624                }
3625                string aseTag = pelaaja.Weapon.Tag.ToString();
3626                if (aseTag == "Kivääri Lv. 4")
3627                {
3628                    saaAmpua = false;
3629                    Timer.SingleShot(0.1, delegate
3630                    {
3631                        saaAmpua = true;
3632                    }); LuoAsePelaajalle("Kivääri Lv. 3", pelaaja); naytaTiedot();
3633                }
3634                else
3635                {
3636                    return;
3637                }
3638            });
3639        }
3640        if (aseenTag == "Magnum Lv. 3")
3641        {
3642            LuoAsePelaajalle("Magnum Lv. 4", pelaaja);
3643            Timer.SingleShot(5.0, delegate
3644            {
3645                if (pelaaja.IsDestroyed == true)
3646                {
3647                    return;
3648                }
3649                string aseTag = pelaaja.Weapon.Tag.ToString();
3650                if (aseTag == "Magnum Lv. 4")
3651                {
3652
3653                    saaAmpua = false;
3654                    Timer.SingleShot(0.1, delegate
3655                    {
3656                        saaAmpua = true;
3657                    }); LuoAsePelaajalle("Magnum Lv. 3", pelaaja); naytaTiedot();
3658                }
3659                else
3660                {
3661                    return;
3662                }
3663            });
3664        }
3665
3666        if (aseenTag == "Haulikko Lv. 3")
3667        {
3668            LuoAsePelaajalle("Haulikko Lv. 4", pelaaja);
3669            Timer.SingleShot(5.0, delegate
3670            {
3671                if (pelaaja.IsDestroyed == true)
3672                {
3673                    return;
3674                }
3675                string aseTag = pelaaja.Weapon.Tag.ToString();
3676                if (aseTag == "Haulikko Lv. 4")
3677                {
3678                    saaAmpua = false;
3679                    Timer.SingleShot(0.1, delegate
3680                    {
3681                        saaAmpua = true;
3682                    }); LuoAsePelaajalle("Haulikko Lv. 3", pelaaja); naytaTiedot();
3683                }
3684                else
3685                {
3686                    return;
3687                }
3688            });
3689        }
3690
3691        if (aseenTag == "Sniper Lv. 3")
3692        {
3693            LuoAsePelaajalle("Sniper Lv. 4", pelaaja);
3694            Timer.SingleShot(5.0, delegate
3695            {
3696                if (pelaaja.IsDestroyed == true)
3697                {
3698                    return;
3699                }
3700                string aseTag = pelaaja.Weapon.Tag.ToString();
3701                if (aseTag == "Sniper Lv. 4")
3702                {
3703                    saaAmpua = false;
3704                    Timer.SingleShot(0.1, delegate
3705                    {
3706                        saaAmpua = true;
3707                    }); LuoAsePelaajalle("Sniper Lv. 3", pelaaja); naytaTiedot();
3708                }
3709                else
3710                {
3711                    return;
3712                }
3713            });
3714        }
3715
3716        if (aseenTag == "Kranaatinheitin Lv. 3")
3717        {
3718            LuoAsePelaajalle("Kranaatinheitin Lv. 4", pelaaja);
3719            Timer.SingleShot(5.0, delegate
3720            {
3721                if (pelaaja.IsDestroyed == true)
3722                {
3723                    return;
3724                }
3725                string aseTag = pelaaja.Weapon.Tag.ToString();
3726                if (aseTag == "Kranaatinheitin Lv. 4")
3727                {
3728                    saaAmpua = false;
3729                    Timer.SingleShot(0.1, delegate
3730                    {
3731                        saaAmpua = true;
3732                    }); LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja); naytaTiedot();
3733                }
3734                else
3735                {
3736                    return;
3737                }
3738            });
3739        }
3740        if (aseenTag == "Raketinheitin Lv. 3")
3741        {
3742            LuoAsePelaajalle("Raketinheitin Lv. 4", pelaaja);
3743            Timer.SingleShot(5.0, delegate
3744            {
3745                if (pelaaja.IsDestroyed == true)
3746                {
3747                    return;
3748                }
3749                string aseTag = pelaaja.Weapon.Tag.ToString();
3750                if (aseTag == "Raketinheitin Lv. 4")
3751                {
3752                    saaAmpua = false;
3753                    Timer.SingleShot(0.1, delegate
3754                    {
3755                        saaAmpua = true;
3756                    }); LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja); naytaTiedot();
3757                }
3758                else
3759                {
3760                    return;
3761                }
3762            });
3763        }
3764
3765        if (aseenTag == "Pistooli Lv. 3")
3766        {
3767            LuoAsePelaajalle("Pistooli Lv. 4", pelaaja);
3768            Timer.SingleShot(5.0, delegate
3769            {
3770                if (pelaaja.IsDestroyed == true)
3771                {
3772                    return;
3773                }
3774                string aseTag = pelaaja.Weapon.Tag.ToString();
3775                if (aseTag == "Pistooli Lv. 4")
3776                {
3777                    saaAmpua = false;
3778                    Timer.SingleShot(0.1, delegate
3779                    {
3780                        saaAmpua = true;
3781                    }); LuoAsePelaajalle("Pistooli Lv. 3", pelaaja); naytaTiedot();
3782                }
3783                else
3784                {
3785                    return;
3786                }
3787            });
3788        }
3789
3790        if (aseenTag.Length > 6 && aseenTag.Substring(aseenTag.Length - 5) == "Lv. 4")
3791        {
3792            Explosion rajahdys = new Explosion(100);
3793            if (pelaaja == pelaaja1)
3794            {
3795                rajahdys.Position = pelaaja2.Position;
3796                if (pelaaja2.HPLaskuri.Value <= 1)
3797                {
3798                    return;
3799                }
3800                if (pelaaja2.HPLaskuri.Value <= 25 && pelaaja2.DamageResistance == false || pelaaja2.HPLaskuri.Value <= 12 && pelaaja2.DamageResistance == true)
3801                {
3802                    pelaaja2.HPLaskuri.Value = 1;
3803                }
3804                else
3805                {
3806                    if (pelaaja2.DamageResistance == true)
3807                    {
3808                        pelaaja2.HPLaskuri.Value -= 12;
3809                    }
3810                    else
3811                    {
3812                        pelaaja2.HPLaskuri.Value -= 25;
3813                    }
3814                }
3815            }
3816            if (pelaaja == pelaaja2)
3817            {
3818                rajahdys.Position = pelaaja1.Position;
3819                if (pelaaja1.HPLaskuri.Value <= 1)
3820                {
3821                    return;
3822                }
3823                if (pelaaja1.HPLaskuri.Value <= 25 && pelaaja1.DamageResistance == false || pelaaja1.HPLaskuri.Value <= 12 && pelaaja1.DamageResistance == true)
3824                {
3825                    pelaaja1.HPLaskuri.Value = 1;
3826                }
3827                else
3828                {
3829                    if (pelaaja1.DamageResistance == true)
3830                    {
3831                        pelaaja1.HPLaskuri.Value -= 12;
3832                    }
3833                    else
3834                    {
3835                        pelaaja1.HPLaskuri.Value -= 25;
3836                    }
3837                }
3838            }
3839            Add(rajahdys);
3840            rajahdys.Force = 0;
3841            rajahdys.Speed = 1000;
3842        }
3843
3844        // Yksinpeli aseet
3845        if (aseenTag == "Valopistooli")
3846        {
3847            LuoAsePelaajalle("Valopistooli Lv. 2", pelaaja);
3848        }
3849
3850        if (aseenTag == "Valopistooli Lv. 2")
3851        {
3852            LuoAsePelaajalle("Valopistooli Lv. 3", pelaaja);
3853        }
3854
3855        if (aseenTag == "Valopistooli Lv. 3")
3856        {
3857            LuoAsePelaajalle("Valopistooli Lv. 4", pelaaja);
3858            Timer.SingleShot(5.0, delegate
3859            {
3860                if (pelaaja.IsDestroyed == true)
3861                {
3862                    return;
3863                }
3864                string aseTag = pelaaja.Weapon.Tag.ToString();
3865                if (aseTag == "Valopistooli Lv. 4")
3866                {
3867                    saaAmpua = false;
3868                    Timer.SingleShot(0.1, delegate
3869                    {
3870                        saaAmpua = true;
3871                    }); LuoAsePelaajalle("Valopistooli Lv. 3", pelaaja); naytaTiedot();
3872                }
3873                else
3874                {
3875                    return;
3876                }
3877            });
3878        }
3879    }
3880
3881    #endregion
3882
3883
3884    #region Nappaimet
3885    // Lisää peliin kaikki näppäimet
3886
3887    void lisaaYksinNappaimet()
3888    {
3889        ClearControls();
3890        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-LIIKEVOIMA, 0));
3891        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(LIIKEVOIMA, 0));
3892        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, HYPPYVOIMA);
3893        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu", pelaaja1);
3894        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja1);
3895        Keyboard.Listen(Key.LeftShift, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja1);
3896        Keyboard.Listen(Key.E, ButtonState.Pressed, vaihdaAse, "Vaihda ase", pelaaja1);
3897
3898        Keyboard.Listen(Key.Escape, ButtonState.Pressed, YksinPeliPauselle, "Pysäyttää pelin", pelaaja1);
3899
3900        lisaaYksinGamePadNappaimet(ControllerOne, pelaaja1);
3901
3902        //Admin
3903        Keyboard.Listen(Key.F1, ButtonState.Pressed, ConsoleSingle, null);
3904    }
3905
3906    void lisaaNappaimet()
3907    {
3908        ClearControls();
3909        // Pelaajan näppäimet
3910
3911        Keyboard.Listen(Key.A, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja1, new Vector(-LIIKEVOIMA, 0));
3912        Keyboard.Listen(Key.D, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja1, new Vector(LIIKEVOIMA, 0));
3913        Keyboard.Listen(Key.W, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja1, HYPPYVOIMA);
3914        Keyboard.Listen(Key.Space, ButtonState.Down, Ammu, "Ammu", pelaaja1);
3915        Keyboard.Listen(Key.LeftShift, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja1);
3916        Keyboard.Listen(Key.LeftShift, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja1);
3917
3918        Keyboard.Listen(Key.Left, ButtonState.Down, liikuta, "Liikkuu vasemmalle", pelaaja2, new Vector(-LIIKEVOIMA, 0));
3919        Keyboard.Listen(Key.Right, ButtonState.Down, liikuta, "Liikkuu oikealle", pelaaja2, new Vector(LIIKEVOIMA, 0));
3920        Keyboard.Listen(Key.Up, ButtonState.Pressed, hyppaa, "Hyppää", pelaaja2, HYPPYVOIMA);
3921        Keyboard.Listen(Key.RightControl, ButtonState.Down, Ammu, "Ammu", pelaaja2);
3922        Keyboard.Listen(Key.RightShift, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja2);
3923        Keyboard.Listen(Key.RightShift, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja2);
3924       
3925        Keyboard.Listen(Key.Escape, ButtonState.Pressed, PeliPauselle, "Pysäyttää pelin", pelaaja1);
3926
3927        //Admin
3928        Keyboard.Listen(Key.F1, ButtonState.Pressed, ConsoleMulti, null);
3929
3930        lisaaGamePadNappaimet(ControllerOne, pelaaja1);
3931        lisaaGamePadNappaimet(ControllerTwo, pelaaja2);
3932    }
3933   
3934    void LukitseSuunta(Pelaaja pelaaja)
3935    {
3936        pelaaja.TurnsWhenWalking = false;
3937    }
3938
3939    void PoistaLukitus(Pelaaja pelaaja)
3940    {
3941        pelaaja.TurnsWhenWalking = true;
3942    }
3943
3944    void lisaaYksinGamePadNappaimet(GamePad pelaajaNro, Pelaaja pelaaja)
3945    {
3946        //Yleiset näppäimet
3947
3948        LiikutaPelaajaa(pelaajaNro, pelaaja);
3949        pelaajaNro.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0));
3950        pelaajaNro.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector(LIIKEVOIMA, 0));
3951        pelaajaNro.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, HYPPYVOIMA);
3952        pelaajaNro.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "Ammu", pelaaja);
3953        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja);
3954        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja);
3955        pelaajaNro.Listen(Button.X, ButtonState.Pressed, vaihdaAse, "Vaihda ase", pelaaja);
3956
3957        pelaajaNro.Listen(Button.Start, ButtonState.Pressed, YksinPeliPauselle, "Pysäyttää pelin", pelaaja);
3958    }
3959
3960    void lisaaGamePadNappaimet(GamePad pelaajaNro, Pelaaja pelaaja)
3961    {
3962        //Yleiset näppäimet
3963
3964        LiikutaPelaajaa(pelaajaNro, pelaaja);
3965        pelaajaNro.Listen(Button.DPadLeft, ButtonState.Down, liikuta, "Pelaaja liikkuu vasemmalle", pelaaja, new Vector(-LIIKEVOIMA, 0));
3966        pelaajaNro.Listen(Button.DPadRight, ButtonState.Down, liikuta, "Pelaaja liikkuu oikealle", pelaaja, new Vector(LIIKEVOIMA, 0));
3967        pelaajaNro.Listen(Button.A, ButtonState.Pressed, hyppaa, "Pelaaja hyppää", pelaaja, HYPPYVOIMA);
3968        pelaajaNro.Listen(Button.RightTrigger, ButtonState.Down, Ammu, "Ammu", pelaaja);
3969        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Pressed, LukitseSuunta, "Lukitse suunta", pelaaja);
3970        pelaajaNro.Listen(Button.LeftTrigger, ButtonState.Released, PoistaLukitus, "Poista lukitus", pelaaja);
3971
3972        pelaajaNro.Listen(Button.Start, ButtonState.Pressed, PeliPauselle, "Pysäyttää pelin", pelaaja);
3973    }
3974
3975    void LiikutaPelaajaa(GamePad pelaajaNro, PlatformCharacter pelaaja)
3976    {
3977        pelaajaNro.ListenAnalog(AnalogControl.LeftStick, 0.1, liikutaAnalog, "Pelaaja liikkuu vasemmalle", pelaaja, LIIKEVOIMA);
3978    }
3979
3980    void YksinPeliPauselle(PlatformCharacter pelaaja)
3981    {
3982        Pause();
3983        MultiSelectWindow PauseValikko = new MultiSelectWindow("Kynäri",
3984        "Jatka peliä", "Aloita taso alusta", "Päävalikko", "Lopeta");
3985        Add(PauseValikko);
3986        PauseValikko.AddItemHandler(0, Pause);
3987        PauseValikko.AddItemHandler(1, delegate { uusiYksinPeli(); Pause(); });
3988        PauseValikko.AddItemHandler(2, delegate { LuoAlkuValikko(); Pause(); });
3989        PauseValikko.AddItemHandler(3, Exit);
3990        PauseValikko.DefaultCancel = 0;
3991        PauseValikko.Color = Color.Gray;
3992
3993        ControllerOne.Listen(Button.Start, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
3994        ControllerOne.Listen(Button.B, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
3995    }
3996
3997    void PeliPauselle(PlatformCharacter pelaaja)
3998    {
3999        Pause();
4000        MultiSelectWindow PauseValikko = new MultiSelectWindow("Kynäri",
4001        "Jatka peliä", "Aloita peli alusta", "Päävalikko", "Lopeta");
4002        Add(PauseValikko);
4003        PauseValikko.AddItemHandler(0, Pause);
4004        PauseValikko.AddItemHandler(1, delegate { uusiPeli(); Pause(); });
4005        PauseValikko.AddItemHandler(2, delegate { LuoAlkuValikko(); Pause(); });
4006        PauseValikko.AddItemHandler(3, Exit);
4007        PauseValikko.DefaultCancel = 0;
4008        PauseValikko.Color = Color.Gray;
4009
4010        //if (pelaaja == pelaaja1)
4011        //{
4012        //ControllerOne.Listen(Button.DPadUp, ButtonState.Pressed, delegate { PauseValikko.SelectedIndex = (PauseValikko.Buttons.Length + PauseValikko.SelectedIndex - 1) % PauseValikko.Buttons.Length; }, null).InContext(PauseValikko);
4013        //ControllerOne.Listen(Button.DPadDown, ButtonState.Pressed, delegate { PauseValikko.SelectedIndex = (PauseValikko.SelectedIndex + 1) % PauseValikko.Buttons.Length; }, null).InContext(PauseValikko);
4014        ControllerOne.Listen(Button.Start, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
4015        ControllerOne.Listen(Button.B, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
4016        //ControllerOne.Listen(Button.A, ButtonState.Pressed, delegate { PauseValikko.SelectedButton.Click(); }, null).InContext(PauseValikko);
4017        //}
4018
4019        //if (pelaaja == pelaaja2)
4020        //{
4021        ControllerTwo.Listen(Button.DPadUp, ButtonState.Pressed, delegate { PauseValikko.SelectedIndex = (PauseValikko.Buttons.Length + PauseValikko.SelectedIndex - 1) % PauseValikko.Buttons.Length; }, null).InContext(PauseValikko);
4022        ControllerTwo.Listen(Button.DPadDown, ButtonState.Pressed, delegate { PauseValikko.SelectedIndex = (PauseValikko.SelectedIndex + 1) % PauseValikko.Buttons.Length; }, null).InContext(PauseValikko);
4023        ControllerTwo.Listen(Button.Start, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
4024        ControllerTwo.Listen(Button.B, ButtonState.Pressed, delegate { PauseValikko.Close(); Pause(); }, null).InContext(PauseValikko);
4025        ControllerTwo.Listen(Button.A, ButtonState.Pressed, delegate { PauseValikko.SelectedButton.Click(); }, null).InContext(PauseValikko);
4026        //}
4027    }
4028
4029    void ConsoleSingle()
4030    {
4031        InputWindow console = new InputWindow("Console");
4032        console.TextEntered += ProcessInput;
4033        Add(console);
4034    }
4035
4036    void ConsoleMulti()
4037    {
4038        InputWindow console = new InputWindow("Console");
4039        console.TextEntered += ProcessInputMulti;
4040        Add(console);
4041    }
4042
4043    void ProcessInput(InputWindow ikkuna)
4044    {
4045        string vastaus = ikkuna.InputBox.Text;
4046        // tehdään jotain vastauksella
4047        if (vastaus.Length >= 6 && vastaus.Substring(0, 5) == "give ")
4048        {
4049            // aseet
4050            if (vastaus.Substring(5) == "pistol")
4051            {
4052                LuoAsePelaajalle("Pistooli", pelaaja1);
4053            }
4054            if (vastaus.Substring(5) == "pistol2")
4055            {
4056                LuoAsePelaajalle("Pistooli Lv. 2", pelaaja1);
4057            }
4058            if (vastaus.Substring(5) == "pistol3")
4059            {
4060                LuoAsePelaajalle("Pistooli Lv. 3", pelaaja1);
4061            }
4062            if (vastaus.Substring(5) == "pistol4")
4063            {
4064                LuoAsePelaajalle("Pistooli Lv. 4", pelaaja1);
4065            }
4066
4067            if (vastaus.Substring(5) == "assaultrifle")
4068            {
4069                LuoAsePelaajalle("Kivääri", pelaaja1);
4070            }
4071            if (vastaus.Substring(5) == "assaultrifle2")
4072            {
4073                LuoAsePelaajalle("Kivääri Lv. 2", pelaaja1);
4074            }
4075            if (vastaus.Substring(5) == "assaultrifle3")
4076            {
4077                LuoAsePelaajalle("Kivääri Lv. 3", pelaaja1);
4078            }
4079            if (vastaus.Substring(5) == "assaultrifle4")
4080            {
4081                LuoAsePelaajalle("Kivääri Lv. 4", pelaaja1);
4082            }
4083
4084            if (vastaus.Substring(5) == "shotgun")
4085            {
4086                LuoAsePelaajalle("Haulikko", pelaaja1);
4087            }
4088            if (vastaus.Substring(5) == "shotgun2")
4089            {
4090                LuoAsePelaajalle("Haulikko Lv. 2", pelaaja1);
4091            }
4092            if (vastaus.Substring(5) == "shotgun3")
4093            {
4094                LuoAsePelaajalle("Haulikko Lv. 3", pelaaja1);
4095            }
4096            if (vastaus.Substring(5) == "shotgun4")
4097            {
4098                LuoAsePelaajalle("Haulikko Lv. 4", pelaaja1);
4099            }
4100
4101            if (vastaus.Substring(5) == "magnum")
4102            {
4103                LuoAsePelaajalle("Magnum", pelaaja1);
4104            }
4105            if (vastaus.Substring(5) == "magnum2")
4106            {
4107                LuoAsePelaajalle("Magnum Lv. 2", pelaaja1);
4108            }
4109            if (vastaus.Substring(5) == "magnum3")
4110            {
4111                LuoAsePelaajalle("Magnum Lv. 3", pelaaja1);
4112            }
4113            if (vastaus.Substring(5) == "magnum4")
4114            {
4115                LuoAsePelaajalle("Magnum Lv. 4", pelaaja1);
4116            }
4117
4118            if (vastaus.Substring(5) == "sniper")
4119            {
4120                LuoAsePelaajalle("Sniper", pelaaja1);
4121            }
4122            if (vastaus.Substring(5) == "sniper2")
4123            {
4124                LuoAsePelaajalle("Sniper Lv. 2", pelaaja1);
4125            }
4126            if (vastaus.Substring(5) == "sniper3")
4127            {
4128                LuoAsePelaajalle("Sniper Lv. 3", pelaaja1);
4129            }
4130            if (vastaus.Substring(5) == "sniper4")
4131            {
4132                LuoAsePelaajalle("Sniper Lv. 4", pelaaja1);
4133            }
4134
4135            if (vastaus.Substring(5) == "rocketlauncher")
4136            {
4137                LuoAsePelaajalle("Raketinheitin", pelaaja1);
4138            }
4139            if (vastaus.Substring(5) == "rocketlauncher2")
4140            {
4141                LuoAsePelaajalle("Raketinheitin Lv. 2", pelaaja1);
4142            }
4143            if (vastaus.Substring(5) == "rocketlauncher3")
4144            {
4145                LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja1);
4146            }
4147            if (vastaus.Substring(5) == "rocketlauncher4")
4148            {
4149                LuoAsePelaajalle("Raketinheitin Lv. 4", pelaaja1);
4150            }
4151
4152            if (vastaus.Substring(5) == "grenadelauncher")
4153            {
4154                LuoAsePelaajalle("Kranaatinheitin", pelaaja1);
4155            }
4156            if (vastaus.Substring(5) == "grenadelauncher2")
4157            {
4158                LuoAsePelaajalle("Kranaatinheitin Lv. 2", pelaaja1);
4159            }
4160            if (vastaus.Substring(5) == "grenadelauncher3")
4161            {
4162                LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja1);
4163            }
4164            if (vastaus.Substring(5) == "grenadelauncher4")
4165            {
4166                LuoAsePelaajalle("Kranaatinheitin Lv. 4", pelaaja1);
4167            }
4168
4169            if (vastaus.Substring(5) == "flaregun")
4170            {
4171                LuoAsePelaajalle("Valopistooli", pelaaja1);
4172            }
4173            if (vastaus.Substring(5) == "flaregun2")
4174            {
4175                LuoAsePelaajalle("Valopistooli Lv. 2", pelaaja1);
4176            }
4177            if (vastaus.Substring(5) == "flaregun3")
4178            {
4179                LuoAsePelaajalle("Valopistooli Lv. 3", pelaaja1);
4180            }
4181            if (vastaus.Substring(5) == "flaregun4")
4182            {
4183                LuoAsePelaajalle("Valopistooli Lv. 4", pelaaja1);
4184            }
4185
4186            if (vastaus.Substring(5) == "sword")
4187            {
4188                LuoAsePelaajalle("Miekka", pelaaja1);
4189            }
4190            if (vastaus.Substring(5) == "sword2")
4191            {
4192                LuoAsePelaajalle("Miekka Lv. 2", pelaaja1);
4193            }
4194            if (vastaus.Substring(5) == "sword3")
4195            {
4196                LuoAsePelaajalle("Miekka Lv. 3", pelaaja1);
4197            }
4198            if (vastaus.Substring(5) == "sword4")
4199            {
4200                LuoAsePelaajalle("Miekka Lv. 4", pelaaja1);
4201            }
4202
4203            // Muunnetut aseet
4204            if (vastaus.Substring(5) == "burstrifle")
4205            {
4206                LuoAsePelaajalle("Sarjatulikivääri", pelaaja1);
4207            }
4208
4209            if (vastaus.Substring(5) == "revolver")
4210            {
4211                LuoAsePelaajalle("Revolveri", pelaaja1);
4212            }
4213
4214            if (vastaus.Substring(5) == "sawedoff")
4215            {
4216                LuoAsePelaajalle("Katkaistu haulikko", pelaaja1);
4217            }
4218
4219            if (vastaus.Substring(5) == "apsniper")
4220            {
4221                LuoAsePelaajalle("Panssari-Sniper", pelaaja1);
4222            }
4223
4224            if (vastaus.Substring(5) == "clustergrenadelauncher")
4225            {
4226                LuoAsePelaajalle("Sirpalekranaatinheitin", pelaaja1);
4227            }
4228
4229            if (vastaus.Substring(5) == "rpg")
4230            {
4231                LuoAsePelaajalle("Sinko", pelaaja1);
4232            }
4233
4234            if (vastaus.Substring(5) == "smg")
4235            {
4236                LuoAsePelaajalle("Konepistooli", pelaaja1);
4237            }
4238
4239            if (vastaus.Substring(5) == "explosiveflaregun")
4240            {
4241                LuoAsePelaajalle("Räjähtävä valopistooli", pelaaja1);
4242            }
4243
4244            if (vastaus.Substring(5) == "burstriflex")
4245            {
4246                LuoAsePelaajalle("Sarjatulikivääri Lv. X", pelaaja1);
4247            }
4248
4249            if (vastaus.Substring(5) == "revolverx")
4250            {
4251                LuoAsePelaajalle("Revolveri Lv. X", pelaaja1);
4252            }
4253
4254            if (vastaus.Substring(5) == "sawedoffx")
4255            {
4256                LuoAsePelaajalle("Katkaistu haulikko Lv. X", pelaaja1);
4257            }
4258
4259            if (vastaus.Substring(5) == "apsniperx")
4260            {
4261                LuoAsePelaajalle("Panssari-Sniper Lv. X", pelaaja1);
4262            }
4263
4264            if (vastaus.Substring(5) == "clustergrenadelauncherx")
4265            {
4266                LuoAsePelaajalle("Sirpalekranaatinheitin Lv. X", pelaaja1);
4267            }
4268
4269            if (vastaus.Substring(5) == "rpgx")
4270            {
4271                LuoAsePelaajalle("Sinko Lv. X", pelaaja1);
4272            }
4273
4274            if (vastaus.Substring(5) == "smgx")
4275            {
4276                LuoAsePelaajalle("Konepistooli Lv. X", pelaaja1);
4277            }
4278
4279            if (vastaus.Substring(5) == "explosiveflaregunx")
4280            {
4281                LuoAsePelaajalle("Räjähtävä valopistooli Lv. X", pelaaja1);
4282            }
4283
4284            // Kerättävät
4285            if (vastaus.Substring(5) == "powerup")
4286            {
4287                if (pelaaja1.Weapon == null || pelaaja1.Weapon.Tag == null) { return; }
4288                else { PaivitaAse(pelaaja1.Weapon.Tag.ToString(), pelaaja1); }
4289            }
4290
4291            if (vastaus.Substring(5) == "mod")
4292            {
4293                if (pelaaja1.Weapon == null || pelaaja1.Weapon.Tag == null) { return; }
4294                else { MuunnaAse(pelaaja1.Weapon.Tag.ToString(), pelaaja1); }
4295            }
4296
4297            if (vastaus.Substring(5) == "health")
4298            {
4299                BoostiHP1(pelaaja1);
4300            }
4301
4302            if (vastaus.Substring(5) == "hpboost")
4303            {
4304                IncreaseHP(pelaaja1);
4305            }
4306
4307        }
4308
4309        if (vastaus.Length >= 7 && vastaus.Substring(0, 6) == "level ")
4310        {
4311            if (vastaus.Substring(6) == "0")
4312            {
4313                LuoTaso0();
4314            }
4315            if (vastaus.Substring(6) == "1")
4316            {
4317                LuoTaso1();
4318            }
4319            if (vastaus.Substring(6) == "2")
4320            {
4321                LuoTaso2();
4322            }
4323        }
4324
4325        if (vastaus == "nextlevel")
4326        {
4327            SeuraavaTaso(pelaaja1, null);
4328        }
4329        if (vastaus == "restartlevel")
4330        {
4331            uusiYksinPeli();
4332        }
4333
4334        if (vastaus == "kill")
4335        {
4336            pelaaja1.HPLaskuri.Value = pelaaja1.HPLaskuri.MinValue;
4337        }
4338
4339        if (vastaus == "heal")
4340        {
4341            pelaaja1.HPLaskuri.Value = pelaaja1.HPLaskuri.MaxValue;
4342        }
4343    }
4344
4345    void ProcessInputMulti(InputWindow ikkuna)
4346    {
4347        string vastaus = ikkuna.InputBox.Text;
4348        // tehdään jotain vastauksella
4349        if (vastaus.Length >= 6 && vastaus.Substring(0, 5) == "give ")
4350        {
4351            if (vastaus.Length >= 9 && vastaus.Substring(5, 3) == "p1 ")
4352            {
4353                // aseet
4354                if (vastaus.Substring(8) == "pistol")
4355                {
4356                    LuoAsePelaajalle("Pistooli", pelaaja1);
4357                }
4358                if (vastaus.Substring(8) == "pistol2")
4359                {
4360                    LuoAsePelaajalle("Pistooli Lv. 2", pelaaja1);
4361                }
4362                if (vastaus.Substring(8) == "pistol3")
4363                {
4364                    LuoAsePelaajalle("Pistooli Lv. 3", pelaaja1);
4365                }
4366                if (vastaus.Substring(8) == "pistol4")
4367                {
4368                    LuoAsePelaajalle("Pistooli Lv. 4", pelaaja1);
4369                }
4370
4371                if (vastaus.Substring(8) == "assaultrifle")
4372                {
4373                    LuoAsePelaajalle("Kivääri", pelaaja1);
4374                }
4375                if (vastaus.Substring(8) == "assaultrifle2")
4376                {
4377                    LuoAsePelaajalle("Kivääri Lv. 2", pelaaja1);
4378                }
4379                if (vastaus.Substring(8) == "assaultrifle3")
4380                {
4381                    LuoAsePelaajalle("Kivääri Lv. 3", pelaaja1);
4382                }
4383                if (vastaus.Substring(8) == "assaultrifle4")
4384                {
4385                    LuoAsePelaajalle("Kivääri Lv. 4", pelaaja1);
4386                }
4387
4388                if (vastaus.Substring(8) == "shotgun")
4389                {
4390                    LuoAsePelaajalle("Haulikko", pelaaja1);
4391                }
4392                if (vastaus.Substring(8) == "shotgun2")
4393                {
4394                    LuoAsePelaajalle("Haulikko Lv. 2", pelaaja1);
4395                }
4396                if (vastaus.Substring(8) == "shotgun3")
4397                {
4398                    LuoAsePelaajalle("Haulikko Lv. 3", pelaaja1);
4399                }
4400                if (vastaus.Substring(8) == "shotgun4")
4401                {
4402                    LuoAsePelaajalle("Haulikko Lv. 4", pelaaja1);
4403                }
4404
4405                if (vastaus.Substring(8) == "magnum")
4406                {
4407                    LuoAsePelaajalle("Magnum", pelaaja1);
4408                }
4409                if (vastaus.Substring(8) == "magnum2")
4410                {
4411                    LuoAsePelaajalle("Magnum Lv. 2", pelaaja1);
4412                }
4413                if (vastaus.Substring(8) == "magnum3")
4414                {
4415                    LuoAsePelaajalle("Magnum Lv. 3", pelaaja1);
4416                }
4417                if (vastaus.Substring(8) == "magnum4")
4418                {
4419                    LuoAsePelaajalle("Magnum Lv. 4", pelaaja1);
4420                }
4421
4422                if (vastaus.Substring(8) == "sniper")
4423                {
4424                    LuoAsePelaajalle("Sniper", pelaaja1);
4425                }
4426                if (vastaus.Substring(8) == "sniper2")
4427                {
4428                    LuoAsePelaajalle("Sniper Lv. 2", pelaaja1);
4429                }
4430                if (vastaus.Substring(8) == "sniper3")
4431                {
4432                    LuoAsePelaajalle("Sniper Lv. 3", pelaaja1);
4433                }
4434                if (vastaus.Substring(8) == "sniper4")
4435                {
4436                    LuoAsePelaajalle("Sniper Lv. 4", pelaaja1);
4437                }
4438
4439                if (vastaus.Substring(8) == "rocketlauncher")
4440                {
4441                    LuoAsePelaajalle("Raketinheitin", pelaaja1);
4442                }
4443                if (vastaus.Substring(8) == "rocketlauncher2")
4444                {
4445                    LuoAsePelaajalle("Raketinheitin Lv. 2", pelaaja1);
4446                }
4447                if (vastaus.Substring(8) == "rocketlauncher3")
4448                {
4449                    LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja1);
4450                }
4451                if (vastaus.Substring(8) == "rocketlauncher4")
4452                {
4453                    LuoAsePelaajalle("Raketinheitin Lv. 4", pelaaja1);
4454                }
4455
4456                if (vastaus.Substring(8) == "grenadelauncher")
4457                {
4458                    LuoAsePelaajalle("Kranaatinheitin", pelaaja1);
4459                }
4460                if (vastaus.Substring(8) == "grenadelauncher2")
4461                {
4462                    LuoAsePelaajalle("Kranaatinheitin Lv. 2", pelaaja1);
4463                }
4464                if (vastaus.Substring(8) == "grenadelauncher3")
4465                {
4466                    LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja1);
4467                }
4468                if (vastaus.Substring(8) == "grenadelauncher4")
4469                {
4470                    LuoAsePelaajalle("Kranaatinheitin Lv. 4", pelaaja1);
4471                }
4472
4473                if (vastaus.Substring(8) == "flaregun")
4474                {
4475                    LuoAsePelaajalle("Valopistooli", pelaaja1);
4476                }
4477                if (vastaus.Substring(8) == "flaregun2")
4478                {
4479                    LuoAsePelaajalle("Valopistooli Lv. 2", pelaaja1);
4480                }
4481                if (vastaus.Substring(8) == "flaregun3")
4482                {
4483                    LuoAsePelaajalle("Valopistooli Lv. 3", pelaaja1);
4484                }
4485                if (vastaus.Substring(8) == "flaregun4")
4486                {
4487                    LuoAsePelaajalle("Valopistooli Lv. 4", pelaaja1);
4488                }
4489
4490                if (vastaus.Substring(8) == "sword")
4491                {
4492                    LuoAsePelaajalle("Miekka", pelaaja1);
4493                }
4494                if (vastaus.Substring(8) == "sword2")
4495                {
4496                    LuoAsePelaajalle("Miekka Lv. 2", pelaaja1);
4497                }
4498                if (vastaus.Substring(8) == "sword3")
4499                {
4500                    LuoAsePelaajalle("Miekka Lv. 3", pelaaja1);
4501                }
4502                if (vastaus.Substring(8) == "sword4")
4503                {
4504                    LuoAsePelaajalle("Miekka Lv. 4", pelaaja1);
4505                }
4506
4507                // Muunnetut aseet
4508                if (vastaus.Substring(8) == "burstrifle")
4509                {
4510                    LuoAsePelaajalle("Sarjatulikivääri", pelaaja1);
4511                }
4512
4513                if (vastaus.Substring(8) == "revolver")
4514                {
4515                    LuoAsePelaajalle("Revolveri", pelaaja1);
4516                }
4517
4518                if (vastaus.Substring(8) == "sawedoff")
4519                {
4520                    LuoAsePelaajalle("Katkaistu haulikko", pelaaja1);
4521                }
4522
4523                if (vastaus.Substring(8) == "apsniper")
4524                {
4525                    LuoAsePelaajalle("Panssari-Sniper", pelaaja1);
4526                }
4527
4528                if (vastaus.Substring(8) == "clustergrenadelauncher")
4529                {
4530                    LuoAsePelaajalle("Sirpalekranaatinheitin", pelaaja1);
4531                }
4532
4533                if (vastaus.Substring(8) == "rpg")
4534                {
4535                    LuoAsePelaajalle("Sinko", pelaaja1);
4536                }
4537
4538                if (vastaus.Substring(8) == "smg")
4539                {
4540                    LuoAsePelaajalle("Konepistooli", pelaaja1);
4541                }
4542
4543                if (vastaus.Substring(8) == "explosiveflaregun")
4544                {
4545                    LuoAsePelaajalle("Räjähtävä valopistooli", pelaaja1);
4546                }
4547
4548                if (vastaus.Substring(8) == "burstriflex")
4549                {
4550                    LuoAsePelaajalle("Sarjatulikivääri Lv. X", pelaaja1);
4551                }
4552
4553                if (vastaus.Substring(8) == "revolverx")
4554                {
4555                    LuoAsePelaajalle("Revolveri Lv. X", pelaaja1);
4556                }
4557
4558                if (vastaus.Substring(8) == "sawedoffx")
4559                {
4560                    LuoAsePelaajalle("Katkaistu haulikko Lv. X", pelaaja1);
4561                }
4562
4563                if (vastaus.Substring(8) == "apsniperx")
4564                {
4565                    LuoAsePelaajalle("Panssari-Sniper Lv. X", pelaaja1);
4566                }
4567
4568                if (vastaus.Substring(8) == "clustergrenadelauncherx")
4569                {
4570                    LuoAsePelaajalle("Sirpalekranaatinheitin Lv. X", pelaaja1);
4571                }
4572
4573                if (vastaus.Substring(8) == "rpgx")
4574                {
4575                    LuoAsePelaajalle("Sinko Lv. X", pelaaja1);
4576                }
4577
4578                if (vastaus.Substring(8) == "smgx")
4579                {
4580                    LuoAsePelaajalle("Konepistooli Lv. X", pelaaja1);
4581                }
4582
4583                if (vastaus.Substring(8) == "explosiveflaregunx")
4584                {
4585                    LuoAsePelaajalle("Räjähtävä valopistooli Lv. X", pelaaja1);
4586                }
4587
4588                // kerättävät
4589                if (vastaus.Substring(8) == "powerup")
4590                {
4591                    if (pelaaja1.Weapon == null || pelaaja1.Weapon.Tag == null) { return; }
4592                    else { PaivitaAse(pelaaja1.Weapon.Tag.ToString(), pelaaja1); }
4593                }
4594                if (vastaus.Substring(8) == "mod")
4595                {
4596                    if (pelaaja1.Weapon == null || pelaaja1.Weapon.Tag == null) { return; }
4597                    else { MuunnaAse(pelaaja1.Weapon.Tag.ToString(), pelaaja1); }
4598                }
4599                if (vastaus.Substring(8) == "health")
4600                {
4601                    BoostiHP(pelaaja1);
4602                }
4603                if (vastaus.Substring(8) == "hpboost")
4604                {
4605                    IncreaseHP(pelaaja1);
4606                }
4607            }
4608
4609            if (vastaus.Length >= 9 && vastaus.Substring(5, 3) == "p2 ")
4610            {
4611                // aseet
4612                if (vastaus.Substring(8) == "pistol")
4613                {
4614                    LuoAsePelaajalle("Pistooli", pelaaja2);
4615                }
4616                if (vastaus.Substring(8) == "pistol2")
4617                {
4618                    LuoAsePelaajalle("Pistooli Lv. 2", pelaaja2);
4619                }
4620                if (vastaus.Substring(8) == "pistol3")
4621                {
4622                    LuoAsePelaajalle("Pistooli Lv. 3", pelaaja2);
4623                }
4624                if (vastaus.Substring(8) == "pistol4")
4625                {
4626                    LuoAsePelaajalle("Pistooli Lv. 4", pelaaja2);
4627                }
4628
4629                if (vastaus.Substring(8) == "assaultrifle")
4630                {
4631                    LuoAsePelaajalle("Kivääri", pelaaja2);
4632                }
4633                if (vastaus.Substring(8) == "assaultrifle2")
4634                {
4635                    LuoAsePelaajalle("Kivääri Lv. 2", pelaaja2);
4636                }
4637                if (vastaus.Substring(8) == "assaultrifle3")
4638                {
4639                    LuoAsePelaajalle("Kivääri Lv. 3", pelaaja2);
4640                }
4641                if (vastaus.Substring(8) == "assaultrifle4")
4642                {
4643                    LuoAsePelaajalle("Kivääri Lv. 4", pelaaja2);
4644                }
4645
4646                if (vastaus.Substring(8) == "shotgun")
4647                {
4648                    LuoAsePelaajalle("Haulikko", pelaaja2);
4649                }
4650                if (vastaus.Substring(8) == "shotgun2")
4651                {
4652                    LuoAsePelaajalle("Haulikko Lv. 2", pelaaja2);
4653                }
4654                if (vastaus.Substring(8) == "shotgun3")
4655                {
4656                    LuoAsePelaajalle("Haulikko Lv. 3", pelaaja2);
4657                }
4658                if (vastaus.Substring(8) == "shotgun4")
4659                {
4660                    LuoAsePelaajalle("Haulikko Lv. 4", pelaaja2);
4661                }
4662
4663                if (vastaus.Substring(8) == "magnum")
4664                {
4665                    LuoAsePelaajalle("Magnum", pelaaja2);
4666                }
4667                if (vastaus.Substring(8) == "magnum2")
4668                {
4669                    LuoAsePelaajalle("Magnum Lv. 2", pelaaja2);
4670                }
4671                if (vastaus.Substring(8) == "magnum3")
4672                {
4673                    LuoAsePelaajalle("Magnum Lv. 3", pelaaja2);
4674                }
4675                if (vastaus.Substring(8) == "magnum4")
4676                {
4677                    LuoAsePelaajalle("Magnum Lv. 4", pelaaja2);
4678                }
4679
4680                if (vastaus.Substring(8) == "sniper")
4681                {
4682                    LuoAsePelaajalle("Sniper", pelaaja2);
4683                }
4684                if (vastaus.Substring(8) == "sniper2")
4685                {
4686                    LuoAsePelaajalle("Sniper Lv. 2", pelaaja2);
4687                }
4688                if (vastaus.Substring(8) == "sniper3")
4689                {
4690                    LuoAsePelaajalle("Sniper Lv. 3", pelaaja2);
4691                }
4692                if (vastaus.Substring(8) == "sniper4")
4693                {
4694                    LuoAsePelaajalle("Sniper Lv. 4", pelaaja2);
4695                }
4696
4697                if (vastaus.Substring(8) == "rocketlauncher")
4698                {
4699                    LuoAsePelaajalle("Raketinheitin", pelaaja2);
4700                }
4701                if (vastaus.Substring(8) == "rocketlauncher2")
4702                {
4703                    LuoAsePelaajalle("Raketinheitin Lv. 2", pelaaja2);
4704                }
4705                if (vastaus.Substring(8) == "rocketlauncher3")
4706                {
4707                    LuoAsePelaajalle("Raketinheitin Lv. 3", pelaaja2);
4708                }
4709                if (vastaus.Substring(8) == "rocketlauncher4")
4710                {
4711                    LuoAsePelaajalle("Raketinheitin Lv. 4", pelaaja2);
4712                }
4713
4714                if (vastaus.Substring(8) == "grenadelauncher")
4715                {
4716                    LuoAsePelaajalle("Kranaatinheitin", pelaaja2);
4717                }
4718                if (vastaus.Substring(8) == "grenadelauncher2")
4719                {
4720                    LuoAsePelaajalle("Kranaatinheitin Lv. 2", pelaaja2);
4721                }
4722                if (vastaus.Substring(8) == "grenadelauncher3")
4723                {
4724                    LuoAsePelaajalle("Kranaatinheitin Lv. 3", pelaaja2);
4725                }
4726                if (vastaus.Substring(8) == "grenadelauncher4")
4727                {
4728                    LuoAsePelaajalle("Kranaatinheitin Lv. 4", pelaaja2);
4729                }
4730
4731                if (vastaus.Substring(8) == "flaregun")
4732                {
4733                    LuoAsePelaajalle("Valopistooli", pelaaja2);
4734                }
4735                if (vastaus.Substring(8) == "flaregun2")
4736                {
4737                    LuoAsePelaajalle("Valopistooli Lv. 2", pelaaja2);
4738                }
4739                if (vastaus.Substring(8) == "flaregun3")
4740                {
4741                    LuoAsePelaajalle("Valopistooli Lv. 3", pelaaja2);
4742                }
4743                if (vastaus.Substring(8) == "flaregun4")
4744                {
4745                    LuoAsePelaajalle("Valopistooli Lv. 4", pelaaja2);
4746                }
4747
4748                if (vastaus.Substring(8) == "sword")
4749                {
4750                    LuoAsePelaajalle("Miekka", pelaaja2);
4751                }
4752                if (vastaus.Substring(8) == "sword2")
4753                {
4754                    LuoAsePelaajalle("Miekka Lv. 2", pelaaja2);
4755                }
4756                if (vastaus.Substring(8) == "sword3")
4757                {
4758                    LuoAsePelaajalle("Miekka Lv. 3", pelaaja2);
4759                }
4760                if (vastaus.Substring(8) == "sword4")
4761                {
4762                    LuoAsePelaajalle("Miekka Lv. 4", pelaaja2);
4763                }
4764
4765                // Muunnetut aseet
4766                if (vastaus.Substring(8) == "burstrifle")
4767                {
4768                    LuoAsePelaajalle("Sarjatulikivääri", pelaaja2);
4769                }
4770
4771                if (vastaus.Substring(8) == "revolver")
4772                {
4773                    LuoAsePelaajalle("Revolveri", pelaaja2);
4774                }
4775
4776                if (vastaus.Substring(8) == "sawedoff")
4777                {
4778                    LuoAsePelaajalle("Katkaistu haulikko", pelaaja2);
4779                }
4780
4781                if (vastaus.Substring(8) == "apsniper")
4782                {
4783                    LuoAsePelaajalle("Panssari-Sniper", pelaaja2);
4784                }
4785
4786                if (vastaus.Substring(8) == "clustergrenadelauncher")
4787                {
4788                    LuoAsePelaajalle("Sirpalekranaatinheitin", pelaaja2);
4789                }
4790
4791                if (vastaus.Substring(8) == "rpg")
4792                {
4793                    LuoAsePelaajalle("Sinko", pelaaja2);
4794                }
4795
4796                if (vastaus.Substring(8) == "smg")
4797                {
4798                    LuoAsePelaajalle("Konepistooli", pelaaja2);
4799                }
4800
4801                if (vastaus.Substring(8) == "explosiveflaregun")
4802                {
4803                    LuoAsePelaajalle("Räjähtävä valopistooli", pelaaja2);
4804                }
4805
4806                if (vastaus.Substring(8) == "burstriflex")
4807                {
4808                    LuoAsePelaajalle("Sarjatulikivääri Lv. X", pelaaja2);
4809                }
4810
4811                if (vastaus.Substring(8) == "revolverx")
4812                {
4813                    LuoAsePelaajalle("Revolveri Lv. X", pelaaja2);
4814                }
4815
4816                if (vastaus.Substring(8) == "sawedoffx")
4817                {
4818                    LuoAsePelaajalle("Katkaistu haulikko Lv. X", pelaaja2);
4819                }
4820
4821                if (vastaus.Substring(8) == "apsniperx")
4822                {
4823                    LuoAsePelaajalle("Panssari-Sniper Lv. X", pelaaja2);
4824                }
4825
4826                if (vastaus.Substring(8) == "clustergrenadelauncherx")
4827                {
4828                    LuoAsePelaajalle("Sirpalekranaatinheitin Lv. X", pelaaja2);
4829                }
4830
4831                if (vastaus.Substring(8) == "rpgx")
4832                {
4833                    LuoAsePelaajalle("Sinko Lv. X", pelaaja2);
4834                }
4835
4836                if (vastaus.Substring(8) == "smgx")
4837                {
4838                    LuoAsePelaajalle("Konepistooli Lv. X", pelaaja2);
4839                }
4840
4841                if (vastaus.Substring(8) == "explosiveflaregunx")
4842                {
4843                    LuoAsePelaajalle("Räjähtävä valopistooli Lv. X", pelaaja2);
4844                }
4845
4846                // kerättävät
4847                if (vastaus.Substring(8) == "powerup")
4848                {
4849                    if (pelaaja2.Weapon == null || pelaaja2.Weapon.Tag == null) { return; }
4850                    else { PaivitaAse(pelaaja2.Weapon.Tag.ToString(), pelaaja2); }
4851                }
4852                if (vastaus.Substring(8) == "mod")
4853                {
4854                    if (pelaaja2.Weapon == null || pelaaja2.Weapon.Tag == null) { return; }
4855                    else { MuunnaAse(pelaaja2.Weapon.Tag.ToString(), pelaaja2); }
4856                }
4857                if (vastaus.Substring(8) == "health")
4858                {
4859                    BoostiHP(pelaaja2);
4860                }
4861                if (vastaus.Substring(8) == "hpboost")
4862                {
4863                    IncreaseHP(pelaaja2);
4864                }
4865            }
4866
4867        }
4868
4869        if (vastaus.Length >= 7 && vastaus.Substring(0, 6) == "level ")
4870        {
4871            if (vastaus.Substring(6) == "0")
4872            {
4873                LuoKentta0();
4874            }
4875            if (vastaus.Substring(6) == "1")
4876            {
4877                LuoKentta1();
4878            }
4879            if (vastaus.Substring(6) == "2")
4880            {
4881                LuoKentta2();
4882            }
4883            if (vastaus.Substring(6) == "3")
4884            {
4885                LuoKentta3();
4886            }
4887        }
4888        if (vastaus.Length >= 6 && vastaus.Substring(0, 5) == "kill ")
4889        {
4890            if (vastaus.Length >= 7 && vastaus.Substring(5, 2) == "p1")
4891            {
4892                pelaaja1.HPLaskuri.Value = pelaaja1.HPLaskuri.MinValue;
4893            }
4894            if (vastaus.Length >= 7 && vastaus.Substring(5, 2) == "p2")
4895            {
4896                pelaaja2.HPLaskuri.Value = pelaaja2.HPLaskuri.MinValue;
4897            }
4898        }
4899
4900        if (vastaus.Length >= 6 && vastaus.Substring(0, 5) == "heal ")
4901        {
4902            if (vastaus.Length >= 7 && vastaus.Substring(5, 2) == "p1")
4903            {
4904                pelaaja1.HPLaskuri.Value = pelaaja1.HPLaskuri.MaxValue;
4905            }
4906
4907            if (vastaus.Length >= 7 && vastaus.Substring(5, 2) == "p2")
4908            {
4909                pelaaja2.HPLaskuri.Value = pelaaja2.HPLaskuri.MaxValue;
4910            }
4911        }
4912    }
4913
4914    // Näppäimiin liitetyt toiminnot alkavat tästä -->
4915    void liikuta(PlatformCharacter hahmo, Vector voima)
4916    {
4917        hahmo.Walk(voima.X);
4918    }
4919
4920    void liikutaAnalog(AnalogState tatinTila, PlatformCharacter hahmo, double voima)
4921    {
4922        Vector tatinAsento = tatinTila.StateVector;
4923
4924        hahmo.Walk(voima * tatinAsento.X);
4925    }
4926
4927    void naytaTiedot()
4928    {
4929        MessageDisplay.Clear();
4930        MessageDisplay.X = 0;
4931        if (pelaaja1.Weapon != null)
4932        {
4933            MessageDisplay.Add("Pelaaja 1: " + pelaaja1.Weapon.Tag);
4934        }
4935        if (pelaaja2.Weapon != null)
4936        {
4937            MessageDisplay.Add("Pelaaja 2: " + pelaaja2.Weapon.Tag);
4938        }
4939    }
4940
4941    void Ammu(PlatformCharacter hahmo)
4942    {
4943        if (hahmo.IsDestroyed || !saaAmpua || hahmo.Weapon == null || hahmo.Weapon.Tag == null || hahmo.Weapon.IsDestroyed == true) return;
4944        PhysicsObject ammus = hahmo.Weapon.Shoot();
4945        if (ammus == null) return;
4946
4947        ammus.Tag = "ammus";
4948        ammus.IgnoresCollisionResponse = true;
4949        ammus.IgnoresExplosions = true;
4950
4951        string aseenTag = hahmo.Weapon.Tag.ToString();
4952        if (aseenTag.Length > 6 && aseenTag.Substring(aseenTag.Length - 5) == "Lv. 4")
4953        {
4954            ammus.Image = ammuslv4;
4955        }
4956
4957        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin")
4958        {
4959            ammus.Shape = Shape.Circle;
4960            ammus.Image = kranaatinkuva;
4961            ammus.Restitution = 1;
4962            ammus.Mass = 0.2;
4963            ammus.KineticFriction = 0.2;
4964            ammus.StaticFriction = 0.2;
4965            ammus.Position = hahmo.Position;
4966            ammus.Size += new Vector(1, 1);
4967            Timer.SingleShot(2.0, delegate { RajaytaKranaatti(ammus); });
4968            ammus.IgnoresCollisionResponse = false;
4969            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
4970        }
4971        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 2")
4972        {
4973            ammus.Shape = Shape.Circle;
4974            ammus.Image = kranaatinkuva2;
4975            ammus.Restitution = 1;
4976            ammus.Mass = 0.2;
4977            ammus.KineticFriction = 0.2;
4978            ammus.StaticFriction = 0.2;
4979            ammus.Position = hahmo.Position;
4980            ammus.Size += new Vector(1, 1);
4981            Timer.SingleShot(2.0, delegate { RajaytaKranaatti2(ammus); });
4982            ammus.IgnoresCollisionResponse = false;
4983            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
4984        }
4985        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 3")
4986        {
4987            ammus.Shape = Shape.Circle;
4988            ammus.Image = kranaatinkuva3;
4989            ammus.Restitution = 1;
4990            ammus.Mass = 0.2;
4991            ammus.KineticFriction = 0.2;
4992            ammus.StaticFriction = 0.2;
4993            ammus.Position = hahmo.Position;
4994            ammus.Size += new Vector(1, 1);
4995            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus); });
4996            ammus.IgnoresCollisionResponse = false;
4997            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
4998
4999            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5000            ammus2.Size = ammus.Size;
5001            ammus2.Shape = ammus.Shape;
5002            ammus2.Image = ammus.Image;
5003            ammus2.Angle = hahmo.FacingDirection.Angle;
5004            ammus2.Position = ammus.Position;
5005            ammus2.Velocity = ammus.Velocity;
5006            ammus2.Restitution = ammus.Restitution;
5007            ammus2.Mass = ammus.Mass;
5008            ammus2.KineticFriction = ammus.KineticFriction;
5009            ammus2.StaticFriction = ammus.StaticFriction;
5010            ammus2.MaximumLifetime = ammus.MaximumLifetime;
5011            ammus2.Hit(new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-50, 50)));
5012            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5013            ammus2.Tag = "ammus";
5014            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus2); });
5015            ammus2.IgnoresCollisionResponse = false;
5016            Timer.SingleShot(0.2, delegate { ammus2.CollisionIgnorer = null; });
5017            AddCollisionHandler(ammus2, KranaattiOsui3);
5018            Add(ammus2);
5019        }
5020        if (hahmo.Weapon.Tag.ToString() == "Kranaatinheitin Lv. 4")
5021        {
5022            ammus.Shape = Shape.Circle;
5023            ammus.Image = kranaatinkuva4;
5024            ammus.Restitution = 1;
5025            ammus.Mass = 0.2;
5026            ammus.KineticFriction = 0.2;
5027            ammus.StaticFriction = 0.2;
5028            ammus.Position = hahmo.Position;
5029            ammus.Size += new Vector(1, 1);
5030            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus); });
5031            ammus.IgnoresCollisionResponse = false;
5032            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
5033
5034            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5035            ammus2.Size = ammus.Size;
5036            ammus2.Shape = ammus.Shape;
5037            ammus2.Image = ammus.Image;
5038            ammus2.Angle = hahmo.FacingDirection.Angle;
5039            ammus2.Position = ammus.Position;
5040            ammus2.Velocity = ammus.Velocity;
5041            ammus2.Restitution = ammus.Restitution;
5042            ammus2.Mass = ammus.Mass;
5043            ammus2.KineticFriction = ammus.KineticFriction;
5044            ammus2.StaticFriction = ammus.StaticFriction;
5045            ammus2.MaximumLifetime = ammus.MaximumLifetime;
5046            ammus2.Hit(new Vector(RandomGen.NextDouble(-10, 10), RandomGen.NextDouble(-50, 50)));
5047            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5048            ammus2.Tag = "ammus";
5049            Timer.SingleShot(2.0, delegate { RajaytaKranaatti3(ammus2); });
5050            ammus2.IgnoresCollisionResponse = false;
5051            Timer.SingleShot(0.2, delegate { ammus2.CollisionIgnorer = null; });
5052            AddCollisionHandler(ammus2, KranaattiOsui3);
5053            Add(ammus2);
5054        }
5055
5056        if ((string)hahmo.Weapon.Tag == "Raketinheitin")
5057        {
5058            ammus.Image = raketinkuva;
5059            ammus.Size += new Vector(3, 1);
5060            ammus.IgnoresCollisionResponse = false;
5061            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5062        }
5063        if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 2")
5064        {
5065            ammus.Image = raketinkuva2;
5066            ammus.Size += new Vector(3, 1);
5067            ammus.IgnoresCollisionResponse = false;
5068            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5069        }
5070        if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 3")
5071        {
5072            ammus.Image = raketinkuva3;
5073            ammus.Size += new Vector(3, 1);
5074            ammus.IgnoresCollisionResponse = false;
5075            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5076        }
5077        if ((string)hahmo.Weapon.Tag == "Raketinheitin Lv. 4")
5078        {
5079            ammus.Image = raketinkuva4;
5080            ammus.Size += new Vector(3, 1);
5081            ammus.IgnoresCollisionResponse = false;
5082            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5083        }
5084
5085        if ((string)hahmo.Weapon.Tag == "Kivääri Lv. 3")
5086        {
5087            ammus.Hit(new Vector(0, RandomGen.NextDouble(-10, 10)));
5088        }
5089
5090        if ((string)hahmo.Weapon.Tag == "Kivääri Lv. 4")
5091        {
5092            ammus.Hit(new Vector(0, RandomGen.NextDouble(-20, 20)));
5093        }
5094
5095        if ((string)hahmo.Weapon.Tag == "Haulikko")
5096        {
5097            for (int i = 0; i < 5; i++)
5098            {
5099                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5100                ammus2.Angle = hahmo.FacingDirection.Angle;
5101                ammus2.IgnoresGravity = true;
5102                ammus2.Size = ammus.Size;
5103                ammus2.Position = ammus.Position;
5104                ammus2.Velocity = ammus.Velocity;
5105                ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.4);
5106                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-300, 300)));
5107                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5108                ammus2.Tag = "ammus";
5109                ammus2.IgnoresCollisionResponse = true;
5110                ammus2.IgnoresExplosions = true;
5111                AddCollisionHandler(ammus2, HaulikkoOsui);
5112                Add(ammus2);
5113            }
5114        }
5115        if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 2")
5116        {
5117            for (int i = 0; i < 5; i++)
5118            {
5119                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5120                ammus2.Angle = hahmo.FacingDirection.Angle;
5121                ammus2.IgnoresGravity = true;
5122                ammus2.Size = ammus.Size;
5123                ammus2.Position = ammus.Position;
5124                ammus2.Velocity = ammus.Velocity;
5125                ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.5);
5126                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-200, 200)));
5127                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5128                ammus2.Tag = "ammus";
5129                ammus2.IgnoresCollisionResponse = true;
5130                ammus2.IgnoresExplosions = true;
5131                AddCollisionHandler(ammus2, HaulikkoOsui2);
5132                Add(ammus2);
5133            }
5134        }
5135        if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 3")
5136        {
5137            for (int i = 0; i < 3; i++)
5138            {
5139                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5140                ammus2.Angle = hahmo.FacingDirection.Angle;
5141                ammus2.IgnoresGravity = true;
5142                ammus2.Size = ammus.Size;
5143                ammus2.Position = ammus.Position;
5144                ammus2.Velocity = ammus.Velocity;
5145                ammus2.MaximumLifetime = TimeSpan.FromSeconds(0.75);
5146                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-100, 100)));
5147                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5148                ammus2.Tag = "ammus";
5149                ammus2.IgnoresCollisionResponse = true;
5150                ammus2.IgnoresExplosions = true;
5151                AddCollisionHandler(ammus2, HaulikkoOsui3);
5152                Add(ammus2);
5153            }
5154        }
5155        if ((string)hahmo.Weapon.Tag == "Haulikko Lv. 4")
5156        {
5157            for (int i = 0; i < 5; i++)
5158            {
5159                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5160                ammus2.Angle = hahmo.FacingDirection.Angle;
5161                ammus2.IgnoresGravity = true;
5162                ammus2.Size = ammus.Size;
5163                ammus2.Position = ammus.Position;
5164                ammus2.Velocity = ammus.Velocity;
5165                ammus2.MaximumLifetime = TimeSpan.FromSeconds(2.0);
5166                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-50, 50)));
5167                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5168                ammus2.Tag = "ammus";
5169                ammus2.IgnoresCollisionResponse = true;
5170                ammus2.IgnoresExplosions = true;
5171                AddCollisionHandler(ammus2, HaulikkoOsui3);
5172                Add(ammus2);
5173            }
5174        }
5175
5176        if ((string)hahmo.Weapon.Tag == "Pistooli Lv. 3")
5177        {
5178            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5179            ammus2.Angle = hahmo.FacingDirection.Angle;
5180            ammus2.IgnoresGravity = true;
5181            ammus2.Size = ammus.Size;
5182            ammus2.Position = ammus.Position;
5183            ammus2.Velocity = ammus.Velocity;
5184            ammus2.MaximumLifetime = ammus.MaximumLifetime;
5185            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5186            ammus2.Tag = "ammus";
5187            ammus2.IgnoresCollisionResponse = true;
5188            ammus2.IgnoresExplosions = true;
5189            AddCollisionHandler(ammus2, PistooliOsui3);
5190            Timer.SingleShot(0.1, delegate { Add(ammus2); });
5191        }
5192
5193        if ((string)hahmo.Weapon.Tag == "Pistooli Lv. 4")
5194        {
5195            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5196            ammus2.Angle = hahmo.FacingDirection.Angle;
5197            ammus2.IgnoresGravity = true;
5198            ammus2.Size = ammus.Size;
5199            ammus2.Position = ammus.Position;
5200            ammus2.Velocity = ammus.Velocity;
5201            ammus2.MaximumLifetime = ammus.MaximumLifetime;
5202            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5203            ammus2.Tag = "ammus";
5204            ammus2.IgnoresCollisionResponse = true;
5205            ammus2.IgnoresExplosions = true;
5206            AddCollisionHandler(ammus2, PistooliOsui3);
5207            Timer.SingleShot(0.05, delegate { Add(ammus2); });
5208        }
5209
5210        if ((string)hahmo.Weapon.Tag == "Valopistooli")
5211        {
5212            ammus.Image = flarekuva;
5213            ammus.Size += new Vector(3, 1);
5214            ammus.IgnoresGravity = false;
5215            ammus.Hit(new Vector(0, 20));
5216            ammus.IgnoresCollisionResponse = false;
5217            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5218            AddCollisionHandler(ammus, "poltettava taso", delegate(PhysicsObject o, PhysicsObject k) { PoltaTaso(k); });
5219        }
5220        if ((string)hahmo.Weapon.Tag == "Valopistooli Lv. 2")
5221        {
5222            ammus.Image = flarekuva2;
5223            ammus.Size += new Vector(3, 1);
5224            ammus.IgnoresGravity = false;
5225            ammus.Hit(new Vector(0, 20));
5226            ammus.IgnoresCollisionResponse = false;
5227            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5228        }
5229        if ((string)hahmo.Weapon.Tag == "Valopistooli Lv. 3")
5230        {
5231            ammus.Image = flarekuva3;
5232            ammus.Size += new Vector(3, 1);
5233            ammus.IgnoresGravity = false;
5234            ammus.Hit(new Vector(0, 20));
5235            ammus.IgnoresCollisionResponse = false;
5236            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5237        }
5238        if ((string)hahmo.Weapon.Tag == "Valopistooli Lv. 4")
5239        {
5240            ammus.Image = flarekuva4;
5241            ammus.Size += new Vector(3, 1);
5242            ammus.IgnoresGravity = false;
5243            ammus.Hit(new Vector(0, 20));
5244            ammus.IgnoresCollisionResponse = false;
5245            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5246        }
5247
5248        // Muunnetut aseet
5249
5250        if ((string)hahmo.Weapon.Tag == "Sarjatulikivääri")
5251        {
5252            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5253            ammus2.Angle = hahmo.FacingDirection.Angle;
5254            ammus2.IgnoresGravity = true;
5255            ammus2.Size = ammus.Size;
5256            ammus2.Position = ammus.Position;
5257            ammus2.Velocity = ammus.Velocity;
5258            ammus2.MaximumLifetime = ammus.MaximumLifetime;
5259            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5260            ammus2.Tag = "ammus";
5261            ammus2.IgnoresCollisionResponse = true;
5262            ammus2.IgnoresExplosions = true;
5263            AddCollisionHandler(ammus2, SarjatulikivaariOsui);
5264
5265            PhysicsObject ammus3 = new PhysicsObject(ammus.Image);
5266            ammus3.Angle = hahmo.FacingDirection.Angle;
5267            ammus3.IgnoresGravity = true;
5268            ammus3.Size = ammus.Size;
5269            ammus3.Position = ammus.Position;
5270            ammus3.Velocity = ammus.Velocity;
5271            ammus3.MaximumLifetime = ammus.MaximumLifetime;
5272            ammus3.CollisionIgnorer = ammus.CollisionIgnorer;
5273            ammus3.Tag = "ammus";
5274            ammus3.IgnoresCollisionResponse = true;
5275            ammus3.IgnoresExplosions = true;
5276            AddCollisionHandler(ammus3, SarjatulikivaariOsui);
5277
5278            Timer.SingleShot(0.03, delegate { Add(ammus2); Timer.SingleShot(0.03, delegate { Add(ammus3); }); });
5279        }
5280
5281        if ((string)hahmo.Weapon.Tag == "Revolveri")
5282        {
5283            ammus.Hit(new Vector(0, RandomGen.NextDouble(-5, 5)));
5284        }
5285
5286        if ((string)hahmo.Weapon.Tag == "Katkaistu haulikko")
5287        {
5288            for (int i = 0; i < 7; i++)
5289            {
5290                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5291                ammus2.Angle = hahmo.FacingDirection.Angle;
5292                ammus2.IgnoresGravity = true;
5293                ammus2.Size = ammus.Size;
5294                ammus2.Position = ammus.Position;
5295                ammus2.Velocity = ammus.Velocity;
5296                ammus2.MaximumLifetime = ammus.MaximumLifetime;
5297                ammus2.Hit(new Vector(RandomGen.NextDouble(-100, 100), RandomGen.NextDouble(-300, 300)));
5298                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5299                ammus2.Tag = "ammus";
5300                ammus2.IgnoresCollisionResponse = true;
5301                ammus2.IgnoresExplosions = true;
5302                AddCollisionHandler(ammus2, KatkaistuHaulikkoOsui);
5303                Add(ammus2);
5304            }
5305        }
5306
5307        if ((string)hahmo.Weapon.Tag == "Sirpalekranaatinheitin")
5308        {
5309            ammus.Shape = Shape.Circle;
5310            ammus.Image = kranaatinkuva;
5311            ammus.Restitution = 1;
5312            ammus.Mass = 0.2;
5313            ammus.KineticFriction = 0.2;
5314            ammus.StaticFriction = 0.2;
5315            ammus.Position = hahmo.Position;
5316            ammus.Size += new Vector(1, 1);
5317            ammus.IgnoresCollisionResponse = false;
5318            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
5319            ammus.Hit(new Vector(0, 40));
5320        }
5321
5322        if ((string)hahmo.Weapon.Tag == "Sinko")
5323        {
5324            ammus.Image = raketinkuva;
5325            ammus.Size += new Vector(3, 1);
5326            ammus.IgnoresCollisionResponse = false;
5327            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5328        }
5329
5330        if ((string)hahmo.Weapon.Tag == "Konepistooli")
5331        {
5332            ammus.Hit(new Vector(0, RandomGen.NextDouble(-30, 30)));
5333        }
5334
5335        if ((string)hahmo.Weapon.Tag == "Räjähtävä valopistooli")
5336        {
5337            ammus.Image = flarekuva;
5338            ammus.Size += new Vector(3, 1);
5339            ammus.IgnoresGravity = false;
5340            ammus.Hit(new Vector(0, 20));
5341            ammus.IgnoresCollisionResponse = false;
5342            Timer.SingleShot(0.1, delegate { ammus.CollisionIgnorer = null; });
5343        }
5344
5345        if ((string)hahmo.Weapon.Tag == "Sarjatulikivääri Lv. X")
5346        {
5347            PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5348            ammus2.Angle = hahmo.FacingDirection.Angle;
5349            ammus2.IgnoresGravity = true;
5350            ammus2.Size = ammus.Size;
5351            ammus2.Position = ammus.Position;
5352            ammus2.Velocity = ammus.Velocity;
5353            ammus2.MaximumLifetime = ammus.MaximumLifetime;
5354            ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5355            ammus2.Tag = "ammus";
5356            ammus2.IgnoresCollisionResponse = true;
5357            ammus2.IgnoresExplosions = true;
5358            AddCollisionHandler(ammus2, SarjatulikivaariXOsui);
5359
5360            PhysicsObject ammus3 = new PhysicsObject(ammus.Image);
5361            ammus3.Angle = hahmo.FacingDirection.Angle;
5362            ammus3.IgnoresGravity = true;
5363            ammus3.Size = ammus.Size;
5364            ammus3.Position = ammus.Position;
5365            ammus3.Velocity = ammus.Velocity;
5366            ammus3.MaximumLifetime = ammus.MaximumLifetime;
5367            ammus3.CollisionIgnorer = ammus.CollisionIgnorer;
5368            ammus3.Tag = "ammus";
5369            ammus3.IgnoresCollisionResponse = true;
5370            ammus3.IgnoresExplosions = true;
5371            AddCollisionHandler(ammus3, SarjatulikivaariXOsui);
5372
5373            PhysicsObject ammus4 = new PhysicsObject(ammus.Image);
5374            ammus4.Angle = hahmo.FacingDirection.Angle;
5375            ammus4.IgnoresGravity = true;
5376            ammus4.Size = ammus.Size;
5377            ammus4.Position = ammus.Position;
5378            ammus4.Velocity = ammus.Velocity;
5379            ammus4.MaximumLifetime = ammus.MaximumLifetime;
5380            ammus4.CollisionIgnorer = ammus.CollisionIgnorer;
5381            ammus4.Tag = "ammus";
5382            ammus4.IgnoresCollisionResponse = true;
5383            ammus4.IgnoresExplosions = true;
5384            AddCollisionHandler(ammus4, SarjatulikivaariXOsui);
5385
5386            Timer.SingleShot(0.02, delegate { Add(ammus2); ammus2.Hit(new Vector(0, RandomGen.NextDouble(-2, 2))); Timer.SingleShot(0.02, delegate { Add(ammus3); ammus3.Hit(new Vector(0, RandomGen.NextDouble(-2, 2))); Timer.SingleShot(0.02, delegate { Add(ammus4); ammus4.Hit(new Vector(0, RandomGen.NextDouble(-2, 2))); }); }); });
5387        }
5388
5389        if ((string)hahmo.Weapon.Tag == "Revolveri Lv. X")
5390        {
5391            ammus.Hit(new Vector(0, RandomGen.NextDouble(-7, 7)));
5392        }
5393
5394        if ((string)hahmo.Weapon.Tag == "Katkaistu haulikko Lv. X")
5395        {
5396            for (int i = 0; i < 14; i++)
5397            {
5398                PhysicsObject ammus2 = new PhysicsObject(ammus.Image);
5399                ammus2.Angle = hahmo.FacingDirection.Angle;
5400                ammus2.IgnoresGravity = true;
5401                ammus2.Size = ammus.Size;
5402                ammus2.Position = ammus.Position;
5403                ammus2.Velocity = ammus.Velocity;
5404                ammus2.MaximumLifetime = ammus.MaximumLifetime;
5405                ammus2.Hit(new Vector(RandomGen.NextDouble(-150, 150), RandomGen.NextDouble(-500, 500)));
5406                ammus2.CollisionIgnorer = ammus.CollisionIgnorer;
5407                ammus2.Tag = "ammus";
5408                ammus2.IgnoresCollisionResponse = true;
5409                ammus2.IgnoresExplosions = true;
5410                AddCollisionHandler(ammus2, KatkaistuHaulikkoXOsui);
5411                Add(ammus2);
5412            }
5413        }
5414
5415        if ((string)hahmo.Weapon.Tag == "Sirpalekranaatinheitin Lv. X")
5416        {
5417            ammus.Shape = Shape.Circle;
5418            ammus.Image = kranaatinkuva;
5419            ammus.Restitution = 1;
5420            ammus.Mass = 0.2;
5421            ammus.KineticFriction = 0.2;
5422            ammus.StaticFriction = 0.2;
5423            ammus.Position = hahmo.Position;
5424            ammus.Size += new Vector(1, 1);
5425            ammus.IgnoresCollisionResponse = false;
5426            Timer.SingleShot(0.2, delegate { ammus.CollisionIgnorer = null; });
5427            ammus.Hit(new Vector(0, 40));
5428        }
5429
5430        if ((string)hahmo.Weapon.Tag == "Sinko Lv. X")
5431        {