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

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