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

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