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

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