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

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