Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Eriugena - Eriugena.cs - I. část

Hlavní třída hry Eriugena.

C# .NET

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Audio;
using System.Collections.Generic;
using System;

namespace Eriugena
{
    /*
     * 
     * Hra vznikla primárně pro ITNetwork,
     * prosím o nešíření kódu.
     * 
     * Jakub Raida, 2022
     * 
     */
    public class Eriugena : Game
    {
        private GraphicsDeviceManager _graphics;
        private SpriteBatch _spriteBatch;

        // Vstup
        public KeyboardState Ovladani_Klavesnice { get; private set; }
        public MouseState Ovladani_Mysi { get; private set; }
        public bool Mys_Ma_Cil { get; private set; }
        public int Mys_Cil_X { get; private set; }
        public int Mys_Cil_Y { get; private set; }

        // Rozměry okna
        public int SirkaOkna { get; private set; }
        public int VyskaOkna { get; private set; }

        // Fonty
        public SpriteFont Pismo_Normalni { get; private set; }
        public SpriteFont Pismo_Pribeh { get; private set; }

        // Grafické proměnné
        public Texture2D[] Gfx_Pozadi { get; private set; }
        public Texture2D Gfx_Eriugena_Vlevo { get; private set; }
        public Texture2D Gfx_Eriugena_Vlevo_LN { get; private set; }
        public Texture2D Gfx_Eriugena_Vlevo_PN { get; private set; }
        public Texture2D Gfx_Eriugena_Vpravo { get; private set; }
        public Texture2D Gfx_Eriugena_Vpravo_LN { get; private set; }
        public Texture2D Gfx_Eriugena_Vpravo_PN { get; private set; }
        public Texture2D Gfx_NPC_Smadny { get; private set; }
        public Texture2D Gfx_NPC_Knihovnik { get; private set; }
        public Texture2D Gfx_NPC_Kucharka { get; private set; }
        public Texture2D Gfx_NPC_Opat { get; private set; }
        public Texture2D Gfx_NPC_Prizrak { get; private set; }
        public Texture2D Gfx_NPC_Sklepnik { get; private set; }
        public int Eriugena_Casovac_Preslapnuti { get; private set; }
        public Texture2D Gfx_Pergamen { get; private set; }

        // NPC
        public Npcka NPC_Smadny { get; private set; }
        public Npcka NPC_Knihovnik { get; private set; }
        public Npcka NPC_Kucharka { get; private set; }
        public Npcka NPC_Opat { get; private set; }
        public Npcka NPC_Prizrak { get; private set; }
        public Npcka NPC_Sklepnik { get; private set; }
        public int Faze_Dialogu_Smadny { get; private set; }
        public int Faze_Dialogu_Knihovnik { get; private set; }
        public int Faze_Dialogu_Kucharka { get; private set; }
        public int Faze_Dialogu_Opat { get; private set; }
        public int Faze_Dialogu_Prizrak { get; private set; }
        public int Faze_Dialogu_Sklepnik { get; private set; }
        public List<Npcka> NPC_List { get; private set; }
        public int NPC_PolohaX { get; private set; }
        public Npcka NPC_V_Mistnosti { get; private set; }

        // Herní proměnné
        public enum Otoceni { KoukatDoleva, KoukatDoprava };
        public enum HorizontalniPohyb { Stat, JitVlevo, JitVpravo };
        public enum VertikalniPohyb { Stat, JitNahoru, JitDolu };
        public Otoceni Eriugena_Otoceni { get; private set; }
        public HorizontalniPohyb Eriugena_HorizontalniPohyb { get; private set; }
        public VertikalniPohyb Eriugena_VertikalniPohyb { get; private set; }
        public int Eriugena_PoziceX { get; private set; }
        public int Eriugena_PoziceY { get; private set; }
        public int Eriugena_Mistnost { get; private set; }
        public int Eriugena_Rychlost { get; private set; }
        public string Eriugena_Nazev_Rychlosti { get; private set; }
        public bool Eriugena_PreslapujeNaMiste { get; private set; }
        public string[] Popisky_Mistnosti { get; private set; }
        public bool Pribeh_Aktivovan { get; private set; }
        public int Faze_Pribehu { get; private set; }
        public int Dvojklik_Mezerniku { get; private set; }
        public int Dvojklik_R { get; private set; }
        public int Posun_Radku { get; private set; }
        public bool Dialog_S_Postavou { get; private set; }
        public bool PortalOtevren { get; private set; }
        public enum StavHry { Intro, Hra, Outro }
        public StavHry AktualniStavHry { get; private set; }
        public Texture2D Gfx_Intro { get; private set; }
        public Texture2D Gfx_Outro { get; private set; }

        // Předměty
        public List<Predmety> Predmety_List { get; private set; }
        public Texture2D Gfx_Krucifix { get; private set; }
        public Texture2D Gfx_Soudek { get; private set; }
        public Texture2D Gfx_Korbel { get; private set; }
        public Texture2D Gfx_Necro { get; private set; }
        public Texture2D Gfx_Flaska { get; private set; }
        public Texture2D Gfx_Voda { get; private set; }
        public Texture2D Gfx_Sadlo { get; private set; }
        public Texture2D Gfx_Houby { get; private set; }
        public Texture2D Gfx_Jahody { get; private set; }
        public Texture2D Gfx_Krucifix_Inv { get; private set; }
        public Texture2D Gfx_Soudek_Inv { get; private set; }
        public Texture2D Gfx_Korbel_Inv { get; private set; }
        public Texture2D Gfx_Necro_Inv { get; private set; }
        public Texture2D Gfx_Flaska_Inv { get; private set; }
        public Texture2D Gfx_Voda_Inv { get; private set; }
        public Texture2D Gfx_Sadlo_Inv { get; private set; }
        public Texture2D Gfx_Houby_Inv { get; private set; }
        public Texture2D Gfx_Jahody_Inv { get; private set; }
        public Predmety Predmet_Krucifix { get; private set; }
        public Predmety Predmet_Soudek { get; private set; }
        public Predmety Predmet_Korbel { get; private set; }
        public Predmety Predmet_Necro { get; private set; }
        public Predmety Predmet_Flaska { get; private set; }
        public Predmety Predmet_Voda { get; private set; }
        public Predmety Predmet_Sadlo { get; private set; }
        public Predmety Predmet_Houby { get; private set; }
        public Predmety Predmet_Jahody { get; private set; }

        // Pomocné proměnné
        public int Pocitadlo { get; private set; }
        public Random Nahoda { get; private set; }
        public bool SicEtNon { get; private set; }
        public bool ChozeniNPCSude { get; private set; }

        // Hudba (ROYALTY FREE ZDROJ: https://www.youtube.com/watch?v=7_cwKd81z7Q)
        public Song Podkres { get; private set; }

        public Eriugena()
        {
            // Rozměry okna
            SirkaOkna = 1600;
            VyskaOkna = 900;

            // Další základní nastavení
            _graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            IsMouseVisible = true;
        }

        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            NastavPromenneNaZacatekHry();

            _graphics.PreferredBackBufferWidth = SirkaOkna;
            _graphics.PreferredBackBufferHeight = VyskaOkna;
            _graphics.IsFullScreen = true;
            _graphics.ApplyChanges();

            base.Initialize();
        }

        protected override void LoadContent()
        {
            _spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here

            ZalozRuznaPozadi();
            ZalozPisma();
            ZalozAktery();
            ZalozPredmety();
        }

        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
                Exit();

            // TODO: Add your update logic here
            PocitejHru();

            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.Black);

            // TODO: Add your drawing code here
            _spriteBatch.Begin();

            KresliHru();

            _spriteBatch.End();

            base.Draw(gameTime);
        }

        /*
            #########

            INICIALIZAČNÍ METODY

            #########
        */
        public void ZalozAktery()
        {
            Gfx_Pergamen = Content.Load<Texture2D>(@"Rozhrani\pergamen");

            Gfx_Eriugena_Vlevo = Content.Load<Texture2D>(@"Akteri\eriugena-doleva");
            Gfx_Eriugena_Vlevo_LN = Content.Load<Texture2D>(@"Akteri\eriugena-doleva-na-leve-noze");
            Gfx_Eriugena_Vlevo_PN = Content.Load<Texture2D>(@"Akteri\eriugena-doleva-na-prave-noze");

            Gfx_Eriugena_Vpravo = Content.Load<Texture2D>(@"Akteri\eriugena-doprava");
            Gfx_Eriugena_Vpravo_LN = Content.Load<Texture2D>(@"Akteri\eriugena-doprava-na-leve-noze");
            Gfx_Eriugena_Vpravo_PN = Content.Load<Texture2D>(@"Akteri\eriugena-doprava-na-prave-noze");

            Gfx_NPC_Smadny = Content.Load<Texture2D>(@"Akteri\npc-smadny-mnich");
            Gfx_NPC_Knihovnik = Content.Load<Texture2D>(@"Akteri\npc-knihovnik");
            Gfx_NPC_Kucharka = Content.Load<Texture2D>(@"Akteri\npc-kucharka");
            Gfx_NPC_Sklepnik = Content.Load<Texture2D>(@"Akteri\npc-sklepnik");
            Gfx_NPC_Opat = Content.Load<Texture2D>(@"Akteri\npc-opat");
            Gfx_NPC_Prizrak = Content.Load<Texture2D>(@"Akteri\npc-prizrak");

            NPC_Smadny = new Npcka(2, 1, 3, "žíznivý mnich Servác", Gfx_NPC_Smadny, true, 300, 1f, Color.HotPink); NPC_List.Add(NPC_Smadny);
            NPC_Knihovnik = new Npcka(5, 4, 7, "knihovník Laurentius", Gfx_NPC_Knihovnik, true, 1100, 1f, Color.RosyBrown); NPC_List.Add(NPC_Knihovnik);
            NPC_Kucharka = new Npcka(11, 10, 12, "dočasná kuchařka Dulcinea", Gfx_NPC_Kucharka, true, 370, 1f, Color.Aquamarine); NPC_List.Add(NPC_Kucharka);
            NPC_Sklepnik = new Npcka(20, 19, 21, "sklepník Benedikt", Gfx_NPC_Sklepnik, true, 550, 1f, Color.OrangeRed); NPC_List.Add(NPC_Sklepnik);
            NPC_Opat = new Npcka(14, 13, 15, "opat Reamurus", Gfx_NPC_Opat, true, 300, 1f, Color.MediumSeaGreen); NPC_List.Add(NPC_Opat);
            NPC_Prizrak = new Npcka(24, 23, 24, "neklidný přízrak", Gfx_NPC_Prizrak, false, 825, 0.7f, Color.Yellow); NPC_List.Add(NPC_Prizrak);

            Faze_Dialogu_Smadny = 1;
            Faze_Dialogu_Knihovnik = 1;
            Faze_Dialogu_Kucharka = 1;
            Faze_Dialogu_Sklepnik = 1;
            Faze_Dialogu_Opat = 1;
            Faze_Dialogu_Prizrak = 1;

            Faze_Pribehu = 1;
            Posun_Radku = 0;

            Eriugena_Nazev_Rychlosti = String.Format("polospěch");

            NPC_V_Mistnosti = null;
            NPC_PolohaX = 0;
        }

        public void ZalozPredmety()
        {
            Gfx_Krucifix = Content.Load<Texture2D>(@"Predmety\krucifix");
            Gfx_Soudek = Content.Load<Texture2D>(@"Predmety\soudek");
            Gfx_Korbel = Content.Load<Texture2D>(@"Predmety\korbel");
            Gfx_Necro = Content.Load<Texture2D>(@"Predmety\necro");
            Gfx_Flaska = Content.Load<Texture2D>(@"Predmety\flaska");
            Gfx_Voda = Content.Load<Texture2D>(@"Predmety\voda");
            Gfx_Sadlo = Content.Load<Texture2D>(@"Predmety\sadlo");
            Gfx_Houby = Content.Load<Texture2D>(@"Predmety\houby");
            Gfx_Jahody = Content.Load<Texture2D>(@"Predmety\jahody");

            Gfx_Krucifix_Inv = Content.Load<Texture2D>(@"Predmety\krucifix-inv");
            Gfx_Soudek_Inv = Content.Load<Texture2D>(@"Predmety\soudek-inv");
            Gfx_Korbel_Inv = Content.Load<Texture2D>(@"Predmety\korbel-inv");
            Gfx_Necro_Inv = Content.Load<Texture2D>(@"Predmety\necro-inv");
            Gfx_Flaska_Inv = Content.Load<Texture2D>(@"Predmety\flaska-inv");
            Gfx_Voda_Inv = Content.Load<Texture2D>(@"Predmety\voda-inv");
            Gfx_Sadlo_Inv = Content.Load<Texture2D>(@"Predmety\sadlo-inv");
            Gfx_Houby_Inv = Content.Load<Texture2D>(@"Predmety\houby-inv");
            Gfx_Jahody_Inv = Content.Load<Texture2D>(@"Predmety\jahody-inv");

            Predmety_List = new List<Predmety>();

            Predmet_Krucifix = new Predmety("Krucifix", false, false, 0, 850, 660, 70, 70, Gfx_Krucifix, Gfx_Krucifix_Inv); Predmety_List.Add(Predmet_Krucifix);
            Predmet_Soudek = new Predmety("Soudek vína", true, false, 1, 1100, 500, 120, 200, Gfx_Soudek, Gfx_Soudek_Inv); Predmety_List.Add(Predmet_Soudek);
            Predmet_Korbel = new Predmety("Pivní korbel", true, false, 5, 900, 650, 40, 40, Gfx_Korbel, Gfx_Korbel_Inv); Predmety_List.Add(Predmet_Korbel);
            Predmet_Necro = new Predmety("Necronomicon", false, false, 7, 500, 700, 110, 60, Gfx_Necro, Gfx_Necro_Inv); Predmety_List.Add(Predmet_Necro);
            Predmet_Flaska = new Predmety("Láhev vína", false, false, 9, 1000, 650, 60, 110, Gfx_Flaska, Gfx_Flaska_Inv); Predmety_List.Add(Predmet_Flaska);
            Predmet_Voda = new Predmety("Kyblík s vodou", true, false, 11, 600, 600, 100, 100, Gfx_Voda, Gfx_Voda_Inv); Predmety_List.Add(Predmet_Voda);
            Predmet_Sadlo = new Predmety("Žejdlíček sádla", true, false, 12, 950, 600, 100, 100, Gfx_Sadlo, Gfx_Sadlo_Inv); Predmety_List.Add(Predmet_Sadlo);
            Predmet_Houby = new Predmety("Houby", true, false, 23, 1000, 720, 40, 40, Gfx_Houby, Gfx_Houby_Inv); Predmety_List.Add(Predmet_Houby);
            Predmet_Jahody = new Predmety("Lesní jahody", true, false, 24, 900, 600, 50, 70, Gfx_Jahody, Gfx_Jahody_Inv); Predmety_List.Add(Predmet_Jahody);
        }

        public void ZalozPisma()
        {
            Pismo_Normalni = Content.Load<SpriteFont>(@"Fonty\zakladniPismo");
            Pismo_Pribeh = Content.Load<SpriteFont>(@"Fonty\pribehPismo");
        }

        public void ZalozRuznaPozadi()
        {
            Gfx_Pozadi = new Texture2D[25];
            Popisky_Mistnosti = new string[25];
            
            Pocitadlo = -1;

            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-policky"); Popisky_Mistnosti[Pocitadlo] = "Studovna na konci chodby";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-prazdna"); Popisky_Mistnosti[Pocitadlo] = "Jižní křídlo kláštera";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-stolek"); Popisky_Mistnosti[Pocitadlo] = "Pisatelův koutek";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-tapiserie"); Popisky_Mistnosti[Pocitadlo] = "Stará tapisérie";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-tri-knihovny"); Popisky_Mistnosti[Pocitadlo] = "Hlavní knihovna";

            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-krb"); Popisky_Mistnosti[Pocitadlo] = "U krbu";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-prazdna-3"); Popisky_Mistnosti[Pocitadlo] = "Západní koridor";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-zakazane"); Popisky_Mistnosti[Pocitadlo] = "Sekce s omezeným přístupem";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-prazdna-2"); Popisky_Mistnosti[Pocitadlo] = "Střed kláštera";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-skriptorium"); Popisky_Mistnosti[Pocitadlo] = "Skriptorium";

            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-cesnek"); Popisky_Mistnosti[Pocitadlo] = "Sklad česneku";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-refektar"); Popisky_Mistnosti[Pocitadlo] = "Refektář";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-kuchyne"); Popisky_Mistnosti[Pocitadlo] = "Kuchyně";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-prazdna-4"); Popisky_Mistnosti[Pocitadlo] = "Tichý koridor";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-kaple"); Popisky_Mistnosti[Pocitadlo] = "Kaple";

            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-chram"); Popisky_Mistnosti[Pocitadlo] = "Chrám";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-schody"); Popisky_Mistnosti[Pocitadlo] = "Schodiště";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-prazdna-5"); Popisky_Mistnosti[Pocitadlo] = "Východní křídlo kláštera";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-misto-cinu"); Popisky_Mistnosti[Pocitadlo] = "Místo činu";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-prazdna-6"); Popisky_Mistnosti[Pocitadlo] = "Severní křídlo kláštera";

            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-vrata"); Popisky_Mistnosti[Pocitadlo] = "Východ z kláštera";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-pred-klasterem"); Popisky_Mistnosti[Pocitadlo] = "Před klášterem";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-vresoviste"); Popisky_Mistnosti[Pocitadlo] = "Vřesoviště";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-les"); Popisky_Mistnosti[Pocitadlo] = "Les";
            Pocitadlo++; Gfx_Pozadi[Pocitadlo] = Content.Load<Texture2D>(@"Mistnosti\mistnost-lesni-kriz"); Popisky_Mistnosti[Pocitadlo] = "Lesní kříž";
        }

        public void NastavPromenneNaZacatekHry()
        {
            Podkres = Content.Load<Song>(@"Hudba\royalty-free-music");

            AktualniStavHry = StavHry.Intro;

            Gfx_Intro = Content.Load<Texture2D>(@"Mistnosti\intro");
            Gfx_Outro = Content.Load<Texture2D>(@"Mistnosti\outro");

            Eriugena_Otoceni = Otoceni.KoukatDoleva;
            Eriugena_HorizontalniPohyb = HorizontalniPohyb.Stat;
            Eriugena_VertikalniPohyb = VertikalniPohyb.Stat;
            Eriugena_Mistnost = 22;
            Eriugena_PoziceX = 1200;
            Eriugena_PoziceY = 500;
            Eriugena_Rychlost = 5;
            Eriugena_Casovac_Preslapnuti = 0;
            Eriugena_PreslapujeNaMiste = true;

            Dvojklik_Mezerniku = 0;
            Dvojklik_R = 0;

            Mys_Ma_Cil = false;
            Dialog_S_Postavou = false;

            NPC_List = new List<Npcka>();
            Nahoda = new Random();

            Pribeh_Aktivovan = true;

            SicEtNon = false;
            PortalOtevren = false;

            ChozeniNPCSude = false;

            MediaPlayer.IsRepeating = true;
            MediaPlayer.Play(Podkres);
        }

        /*
            #########

            LOGICKÉ HERNÍ METODY

            #########
        */
        public void PocitejHru()
        {
            if (AktualniStavHry == StavHry.Hra)
            {
                PeriodickeZalezitosti();
                EriugenuvPohyb();
                EriugenovaZmenaPolohy();
                ZmenyMistnosti();
            }
            else if (AktualniStavHry == StavHry.Intro)
            {
                Ovladani_Klavesnice = Keyboard.GetState();

                if (Ovladani_Klavesnice.IsKeyDown(Keys.Space))
                {
                    Dvojklik_Mezerniku = 60;
                    AktualniStavHry = StavHry.Hra;
                    Pribeh_Aktivovan = true;
                }
            }
        }

        public void PeriodickeZalezitosti()
        {
            if (Dvojklik_Mezerniku > 0) { Dvojklik_Mezerniku--; }
            if (Dvojklik_R > 0) { Dvojklik_R--; }
        }

        public void ZmenyMistnosti()
        {
            if (Eriugena_PoziceX < 50 && Eriugena_Mistnost > 0)
            {
                Eriugena_Mistnost--;
                Eriugena_PoziceX = SirkaOkna - 160;
                Mys_Ma_Cil = false;
                ChozeniNpcek();
                MistnostiPrepinace();
            }
            
            if (Eriugena_PoziceX > (SirkaOkna - 80) && Eriugena_Mistnost < 24)
            {
                Eriugena_Mistnost++;
                Eriugena_PoziceX = 90;
                Mys_Ma_Cil = false;
                ChozeniNpcek();
                MistnostiPrepinace();
            }
        }

        public void ChozeniNpcek()
        {
            if (ChozeniNPCSude)
            {
                foreach (Npcka i in NPC_List)
                {
                    switch (Nahoda.Next(1, 4))
                    {
                        case 2:
                            if ((i.PoziceMistnost - 1) >= i.LevaHranice && (i.PoziceMistnost - 1) != Eriugena_Mistnost)
                            {
                                i.PoziceMistnost--;
                            }
                            break;

                        case 3:
                            if ((i.PoziceMistnost + 1) <= i.PravaHranice && (i.PoziceMistnost - 1) != Eriugena_Mistnost)
                            {
                                i.PoziceMistnost++;
                            }
                            break;

                        default:
                            break;
                    }
                }

                ChozeniNPCSude = false;
            }
            else
            {
                ChozeniNPCSude = true;
            }
        }

        public void EriugenovaZmenaPolohy()
        {
            if (!Dialog_S_Postavou && !Pribeh_Aktivovan)
            {
                switch (Eriugena_HorizontalniPohyb)
                {
                    case HorizontalniPohyb.JitVlevo:
                        if (Eriugena_Mistnost <= 0 && Eriugena_PoziceX < 40)
                        {
                            Eriugena_Mistnost = 16;
                            Eriugena_PoziceX = 780;
                            Eriugena_PoziceY = 400;
                            Mys_Ma_Cil = false;
                        }
                        else
                        {
                            Eriugena_PoziceX -= Eriugena_Rychlost;
                        }
                        Eriugena_Otoceni = Otoceni.KoukatDoleva;
                        PosunCasovacPreslapnuti(3);
                        break;

                    case HorizontalniPohyb.JitVpravo:
                        if (Eriugena_Mistnost >= 24 && Eriugena_PoziceX > (SirkaOkna - 400))
                        {
                            // Dál vpravo to už nejde
                            Mys_Ma_Cil = false;
                        }
                        else
                        {
                            Eriugena_PoziceX += Eriugena_Rychlost;
                        }
                        Eriugena_Otoceni = Otoceni.KoukatDoprava;
                        PosunCasovacPreslapnuti(3);
                        break;

                    default:
                    case HorizontalniPohyb.Stat:
                        PreslapovaniNaMiste();
                        break;
                }

                switch (Eriugena_VertikalniPohyb)
                {
                    case VertikalniPohyb.JitNahoru:
                        if (Eriugena_PoziceY <= 400)
                        {
                            // Výše už to nejde
                            Mys_Ma_Cil = false;
                        }
                        else
                        {
                            Eriugena_PoziceY -= Eriugena_Rychlost;
                            PosunCasovacPreslapnuti(4);
                        }
                        break;

                    case VertikalniPohyb.JitDolu:
                        if (Eriugena_PoziceY >= 550)
                        {
                            // Níže už to nejde
                            Mys_Ma_Cil = false;
                        }
                        else
                        {
                            Eriugena_PoziceY += Eriugena_Rychlost;
                            PosunCasovacPreslapnuti(4);
                        }
                        break;

                    default:
                    case VertikalniPohyb.Stat:
                        PreslapovaniNaMiste();
                        break;
                }
            }
        }

        public void PreslapovaniNaMiste()
        {
            if (Eriugena_PreslapujeNaMiste)
            {
                if (Nahoda.Next(1, 180) == 7)
                {
                    switch (Nahoda.Next(1, 3))
                    {
                        case 1:
                            Eriugena_Otoceni = Otoceni.KoukatDoleva;
                            PosunCasovacPreslapnuti(Nahoda.Next(1, 3));
                            break;

                        default:
                        case 2:
                            Eriugena_Otoceni = Otoceni.KoukatDoprava;
                            PosunCasovacPreslapnuti(Nahoda.Next(1, 3));
                            break;
                    }
                }
            }
        }

        public void PosunCasovacPreslapnuti(int oKolik)
        {
            if (Eriugena_Casovac_Preslapnuti < 20)
            {
                Eriugena_Casovac_Preslapnuti += oKolik;
            }
            else
            {
                Eriugena_Casovac_Preslapnuti = 0;
            }
        }

        public void EriugenuvPohyb()
        {
            PohybVyhodnoceniKlavesnice();
            PohybVyhodnoceniMysi();
        }

        public void PohybVyhodnoceniMysi()
        {
            Ovladani_Mysi = Mouse.GetState();

            if (Ovladani_Mysi.LeftButton == ButtonState.Pressed)
            {
                if (!Pribeh_Aktivovan)
                {
                    if (NPC_V_Mistnosti != null 
                        && Ovladani_Mysi.X > NPC_PolohaX && Ovladani_Mysi.X < (NPC_PolohaX + 250)
                        && Ovladani_Mysi.Y > 350 && Ovladani_Mysi.Y < 700)
                    {
                        Dialog_S_Postavou = true;
                    }
                    else
                    {
                        Mys_Ma_Cil = true;
                        Dialog_S_Postavou = false;
                        Mys_Cil_X = Ovladani_Mysi.X;
                        Mys_Cil_Y = Ovladani_Mysi.Y - 350;
                    }
                }
                else
                {
                    Pribeh_Aktivovan = false;
                }

                foreach (Predmety i in Predmety_List)
                {
                    if (i.Mistnost == Eriugena_Mistnost 
                        && Ovladani_Mysi.X > i.PoziceX && Ovladani_Mysi.X < (i.PoziceX + i.Sirka)
                        && Ovladani_Mysi.Y > i.PoziceY && Ovladani_Mysi.Y < (i.PoziceY + i.Vyska))
                    {
                        i.JeVeSvete = false;
                        i.JeVInventari = true;
                    }
                }
            }

            if (Mys_Ma_Cil)
            {
                if (Mys_Cil_X > Eriugena_PoziceX)
                {
                    Eriugena_HorizontalniPohyb = HorizontalniPohyb.JitVpravo;
                }
                else if (Mys_Cil_X < Eriugena_PoziceX)
                {
                    Eriugena_HorizontalniPohyb = HorizontalniPohyb.JitVlevo;
                }

                if ((Mys_Cil_X + 20) > Eriugena_PoziceX && (Mys_Cil_X - 20) < Eriugena_PoziceX)
                {
                    if (Mys_Cil_Y < Eriugena_PoziceY)
                    {
                        Eriugena_VertikalniPohyb = VertikalniPohyb.JitNahoru;
                    }
                    else if (Mys_Cil_Y > Eriugena_PoziceY)
                    {
                        Eriugena_VertikalniPohyb = VertikalniPohyb.JitDolu;
                    }
                }

                VyhodnoceniDojitiDoMysovehoCile();
            }
        }

        public void VyhodnoceniDojitiDoMysovehoCile()
        {
            if (((Mys_Cil_X + 20) > Eriugena_PoziceX && (Mys_Cil_X - 20) < Eriugena_PoziceX)
                && ((Mys_Cil_Y + 20) > Eriugena_PoziceY && (Mys_Cil_Y - 20) < Eriugena_PoziceY))
            {
                Mys_Ma_Cil = false;
                Eriugena_HorizontalniPohyb = HorizontalniPohyb.Stat;
                Eriugena_VertikalniPohyb = VertikalniPohyb.Stat;
            }
        }

        public void PrepnoutPribehovyMod()
        {
            if (Dvojklik_Mezerniku <= 0)
            {
                if (Dialog_S_Postavou)
                {
                    Dialog_S_Postavou = false;
                }

                if (Pribeh_Aktivovan)
                {
                    Pribeh_Aktivovan = false;
                    Dvojklik_Mezerniku = 30;
                }
                else
                {
                    Pribeh_Aktivovan = true;
                    Dvojklik_Mezerniku = 30;
                }
            }
        }

        public void PrepnoutRychlost()
        {
            if (Dvojklik_R <= 0)
            {
                switch (Eriugena_Rychlost)
                {
                    case 5:
                        Eriugena_Rychlost = 7;
                        Eriugena_Nazev_Rychlosti = String.Format("spěch");
                        break;

                    case 7:
                        Eriugena_Rychlost = 10;
                        Eriugena_Nazev_Rychlosti = String.Format("kmit");
                        break;

                    case 10:
                        Eriugena_Rychlost = 15;
                        Eriugena_Nazev_Rychlosti = String.Format("supermnich");
                        break;

                    case 15:
                        Eriugena_Rychlost = 1;
                        Eriugena_Nazev_Rychlosti = String.Format("hynutí");
                        break;

                    case 1:
                        Eriugena_Rychlost = 2;
                        Eriugena_Nazev_Rychlosti = String.Format("procházka");
                        break;

                    default:
                    case 2:
                        Eriugena_Rychlost = 5;
                        Eriugena_Nazev_Rychlosti = String.Format("polospěch");
                        break;
                }

                Dvojklik_R = 30;
            }
        }

        public void UkoncitHru()
        {
            AktualniStavHry = StavHry.Outro;
        }

        public void PohybVyhodnoceniKlavesnice()
        {
            Ovladani_Klavesnice = Keyboard.GetState();

            if (Ovladani_Klavesnice.IsKeyDown(Keys.R))
            {
                PrepnoutRychlost();
            }
            else if (Ovladani_Klavesnice.IsKeyDown(Keys.Space))
            {
                if (Eriugena_Mistnost == 14 && PortalOtevren)
                {
                    UkoncitHru();
                }
                else
                {
                    PrepnoutPribehovyMod();
                }
            }
            else if (Ovladani_Klavesnice.IsKeyDown(Keys.Left) && !Pribeh_Aktivovan)
            {
                Eriugena_HorizontalniPohyb = HorizontalniPohyb.JitVlevo;
            }
            else if (Ovladani_Klavesnice.IsKeyDown(Keys.Right) && !Pribeh_Aktivovan)
            {
                Eriugena_HorizontalniPohyb = HorizontalniPohyb.JitVpravo;
            }
            else if (Ovladani_Klavesnice.IsKeyDown(Keys.Up) && !Pribeh_Aktivovan)
            {
                Eriugena_VertikalniPohyb = VertikalniPohyb.JitNahoru;
            }
            else if (Ovladani_Klavesnice.IsKeyDown(Keys.Down) && !Pribeh_Aktivovan)
            {
                Eriugena_VertikalniPohyb = VertikalniPohyb.JitDolu;
            }
            else
            {
                Eriugena_HorizontalniPohyb = HorizontalniPohyb.Stat;
                Eriugena_VertikalniPohyb = VertikalniPohyb.Stat;
            }
        }

        /*
            #########

            VÝTVARNÉ HERNÍ METODY

            #########
        */
        public void KresliHru()
        {
            switch (AktualniStavHry)
            {
                default:
                case StavHry.Hra:
                    VykresliPozadiMistnosti();
                    VykresliVeci();
                    VykresliNpcka();
                    VykresliEriugenu();
                    VyzvaKPribehu();
                    VykresliPribeh();
                    VykresliDialog();
                    VykresliInventar();
                    break;

                case StavHry.Intro:
                    _spriteBatch.Draw(Gfx_Intro, new Vector2(0, 0), Color.White);
                    break;

                case StavHry.Outro:
                    _spriteBatch.Draw(Gfx_Outro, new Vector2(0, 0), Color.White);
                    break;
            }
        }

        public void VykresliInventar()
        {
            Pocitadlo = 20;

            foreach (Predmety i in Predmety_List)
            {
                if (i.JeVInventari)
                {
                    _spriteBatch.Draw(i.VzhledInventar, new Vector2(Pocitadlo, 800), Color.White);
                    Pocitadlo += 100;
                }
            }

            if (Pocitadlo > 20)
            {
                _spriteBatch.DrawString(Pismo_Normalni, "Inventář", new Vector2(20, 760), Color.LightSlateGray);
            }
        }

        public void VykresliVeci()
        {
            foreach (Predmety i in Predmety_List)
            {
                if (Eriugena_Mistnost == i.Mistnost && i.JeVeSvete)
                {
                    _spriteBatch.Draw(i.VzhledSvet, new Vector2(i.PoziceX, i.PoziceY), Color.White);
                }
            }
        }

        public void VykresliPribeh()
        {
            if (Pribeh_Aktivovan)
            {
                _spriteBatch.Draw(Gfx_Pergamen, new Vector2(200, 60), Color.White);
                PopisPergamenZakladniDej();
            }
        }

        public void PisP(string text, int radek, Color barva)
        {
            Posun_Radku = 35 * radek + 70;
            _spriteBatch.DrawString(Pismo_Pribeh, text, new Vector2(280, Posun_Radku), barva);
        }

        public void VykresliDialog()
        {
            if (Dialog_S_Postavou && NPC_V_Mistnosti != null)
            {
                PopisPergamenNPC(NPC_V_Mistnosti);
            }
        }

        public void DialogySeSklepnikem(Npcka postava)
        {
            switch (Faze_Dialogu_Sklepnik)
            {
                default:
                case 1:
                    PisP("\"Vítej v našem klášteře. Já jsem tady sklepník, šafář a klíčník, takže", 1, postava.BarvaPisma);
                    PisP("kdybys potřeboval cokoliv, řekněme, méně duchovního, jsem pro tebe", 2, postava.BarvaPisma);
                    PisP("ten správný člověk. Ale teď mě omluv, mám nějakou práci.\"", 3, postava.BarvaPisma);
                    PisP("", 4, postava.BarvaPisma);
                    PisP("Sklepník se nervózně ošije.", 5, Color.Silver);
                    PisP("", 6, postava.BarvaPisma);
                    PisP("\"No, být tebou se radši zamykám. Staly se tu dvě vraždy a mám pocit,", 7, postava.BarvaPisma);
                    PisP("že tady už není tak bezpečno.\"", 8, postava.BarvaPisma);
                    break;

                case 2:
                    PisP("\"Eriugena! Nejslavnější karolinský platonik poctil náš klášter svou přítomností!\"", 1, postava.BarvaPisma);
                    PisP("", 2, postava.BarvaPisma);
                    PisP("\"Budu rád, když zapadnu. Opat mě za tebou poslal ohledně toho místa činu...\"", 3, Color.AntiqueWhite);
                    PisP("", 4, postava.BarvaPisma);
                    PisP("\"Ano, ano... Těla dvou našich bratrů byla doslova na kusy.", 5, postava.BarvaPisma);
                    PisP("Jako by je roztrhala nelidská síla. Musel jsem to čistit.\"", 6, postava.BarvaPisma);
                    PisP("", 7, postava.BarvaPisma);
                    PisP("\"Mám pocit, že knihovník to celé slyšel. Promluvil bych s ním...\"", 8, postava.BarvaPisma);
                    if (Faze_Dialogu_Knihovnik < 2) { Faze_Dialogu_Knihovnik = 2; }
                    if (Faze_Pribehu < 5) { Faze_Pribehu = 5; }
                    break;

                case 3:
                    PisP("\"Rád bych ti pomohl, dobrý filozofe, ale víno ve sklepech už není, Servác", 1, postava.BarvaPisma);
                    PisP("všechno vypil. Dokud nepřijdou obchodníci z Limericku, tak jsme bez kvasu...", 2, postava.BarvaPisma);
                    PisP("Ale počkej, mám nápad. Jestli se nepletu, Servác si jednu flašku schovává někde", 3, postava.BarvaPisma);
                    PisP("ve skriptoriu. Je to zvláštní víno, které mu daroval mnich až z daleké Velké Moravy.", 4, postava.BarvaPisma);
                    PisP("Servác bude jistě bědovat, ale pro náš účel by mohlo posloužit.\"", 5, postava.BarvaPisma);
                    if (Faze_Pribehu < 15) { Faze_Pribehu = 15; }
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Flaska && !i.JeVInventari)
                        {
                            i.JeVeSvete = true;
                        }
                    }
                    break;
            }
        }

        public void DialogySKnihovnikem(Npcka postava)
        {
            switch (Faze_Dialogu_Knihovnik)
            {
                default:
                case 1:
                    PisP("\"Jistě jsi z Franské říše zvyklý na něco jiného, ale naše knihovna", 1, postava.BarvaPisma);
                    PisP("je velmi dobře vybavená. Máme i poslední opis druhého dílu Aristotelovy Poetiky.", 2, postava.BarvaPisma);
                    PisP("Snad se nám neztratí. Každopádně se mě zeptej, kdybys hledal nějakou knihu.\"", 3, postava.BarvaPisma);
                    PisP("", 4, Color.Silver);
                    PisP("Starý knihovník si odkašle a jeho vous pokryje", 5, Color.Silver);
                    PisP("prach z knih, který ten dobrý muž celé dny inhaluje.", 6, Color.Silver);
                    break;

                case 2:
                    PisP("Dialog s knihovníkem ruší písničky pořvávající mnich, který popíjí opodál.", 1, Color.Silver);
                    PisP("", 2, postava.BarvaPisma);
                    PisP("\"Ano, skutečně jsem slyšel tu vraždu... Šel jsem na ranní mši, když", 3, postava.BarvaPisma);
                    PisP("to začalo... Ty podivné hlasy, vrčení a pak křik našich bratrů. Něco jsem", 4, postava.BarvaPisma);
                    PisP("i zahlédl. Něco, co jsem už viděl v knize. Ech, vzpomněl bych si, ale z toho,", 5, postava.BarvaPisma);
                    PisP("jak bratr Servác pořád vyřvává ty svoje šansony, mi třeští hlava. Mohl bys mu,", 6, postava.BarvaPisma);
                    PisP("prosím, něco říct? Chtěl bych ticho v příbytku Páně, ne halekání jak v putyce.\"", 7, postava.BarvaPisma);
                    if (Faze_Dialogu_Smadny < 2) { Faze_Dialogu_Smadny = 2; }
                    if (Faze_Pribehu < 6) { Faze_Pribehu = 6; }
                    break;

                case 3:
                    PisP("\"Chválabohu, žes utišil to zvíře převlečené za mnicha! Ty ale určitě chceš", 1, postava.BarvaPisma);
                    PisP("vědět víc o té vraždě, že? No, řeknu ti tohle: vím, že to je něco nečistého", 2, postava.BarvaPisma);
                    PisP("ze zahrady samotného Antikrista! A tuším také, kde by to mohlo sídlit...", 3, postava.BarvaPisma);
                    PisP("Ve zdejších lesích žijí zlé síly. Najdi si krucifix a vydej se je vyhledat.\"", 4, postava.BarvaPisma);
                    if (Faze_Pribehu < 10) { Faze_Pribehu = 10; }
                    foreach (Npcka i in NPC_List)
                    {
                        if (i == NPC_Prizrak && !i.Pritomnost)
                        {
                            i.Pritomnost = true;
                        }
                    }
                    break;

                case 4:
                    PisP("\"Temnou literaturu, Eriugeno? Není temnější knihy než Necronomicon!", 1, postava.BarvaPisma);
                    PisP("Někde jsem tady tu zlou knihu viděl. Přines mi ji, prosím.\"", 2, postava.BarvaPisma);
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Necro && i.JeVInventari && Faze_Dialogu_Knihovnik < 5)
                        {
                            Faze_Dialogu_Knihovnik = 5;
                        }
                    }
                    break;

                case 5:
                    PisP("\"Ach, Necronomicon, kniha z pergamenů z osla, vázaná v lidské kůži!", 1, postava.BarvaPisma);
                    PisP("Doufal jsem, že už v ni nikdy nebudu muset nic hledat.\"", 2, postava.BarvaPisma);
                    PisP("", 3, Color.AntiqueWhite);
                    PisP("Knihovník listuje a mračí se. Konečně udeří prstem do stránky.", 4, Color.Silver);
                    PisP("", 5, Color.AntiqueWhite);
                    PisP("\"Tady to je! Ach, ano. Démon se dá zahnat speciálním lektvarem.", 6, postava.BarvaPisma);
                    PisP("Budeme potřebovat houby, víno, sádlo a trochu vody. Seženeš to?", 7, postava.BarvaPisma);
                    PisP("Jestliže ingredience nalezneš, Dulcinea by mohla lektvar uvařit.\"", 8, postava.BarvaPisma);
                    if (Faze_Dialogu_Kucharka < 4) { Faze_Dialogu_Kucharka = 4; }
                    if (Faze_Pribehu < 13) { Faze_Pribehu = 13; }
                    break;

                case 6:
                    PisP("\"Vím naprosto bezpečně, příteli, kterou knihu jsem naposledy půjčoval", 1, postava.BarvaPisma);
                    PisP("opatovi. Byla to tvá vlastní kniha, mistře Eriugeno, tvůj dialog Periphyseon.\"", 2, postava.BarvaPisma);
                    PisP("", 3, postava.BarvaPisma);
                    PisP("\"Ale... jak by to bylo možné? Pomocí mé knihy nelze vyvolávat démony!\"", 4, Color.AntiqueWhite);
                    PisP("", 5, postava.BarvaPisma);
                    PisP("\"Jak vidno lze. Když se správně čte... Jak já to vidím, autora takového textu", 6, postava.BarvaPisma);
                    PisP("musí prostoupit démonická energie. Stejná pak prostoupí toho, kdo jej čte a kdo", 7, postava.BarvaPisma);
                    PisP("mezi řádky objeví bránu do jiných světů.\"", 8, postava.BarvaPisma);
                    if (Faze_Pribehu < 20) { Faze_Pribehu = 20; }
                    if (Faze_Dialogu_Prizrak < 4) { Faze_Dialogu_Prizrak = 4; }
                    break;
            }
        }

        public void DialogySOpatem(Npcka postava)
        {
            switch (Faze_Dialogu_Opat)
            {
                default:
                case 1:
                    PisP("Opat si tě pomalu prohlíží temně zelenýma očima.", 1, Color.Silver);
                    PisP("", 2, Color.Silver);
                    PisP("\"Takže největší mistr na franském dvoře se vrací domů", 3, postava.BarvaPisma);
                    PisP("jako zpráskaný pes. Prý tě Frankové pobodali. Je to pravda?\"", 4, postava.BarvaPisma);
                    PisP("", 5, postava.BarvaPisma);
                    PisP("\"Hm. Měl jsem štěstí a přežil. Ale co se stalo tady? Co ty fleky od krve?\"", 6, Color.AntiqueWhite);
                    PisP("", 7, Color.AntiqueWhite);
                    PisP("\"Typický Eriugena! Jen přijel a už chce řešit vraždu. Nu, proč ne.", 8, postava.BarvaPisma);
                    PisP("Promluv si s bratrem Benediktem. Vykonává zde funkci cellelaria.\"", 9, postava.BarvaPisma);
                    if (Faze_Dialogu_Sklepnik < 2) { Faze_Dialogu_Sklepnik = 2; }
                    if (Faze_Pribehu < 4) { Faze_Pribehu = 4; }
                    break;

                case 2:
                    PisP("\"Říkáš, že démon mluvil jazykem urážejícím Boha? Temné věci se dějí", 1, postava.BarvaPisma);
                    PisP("v našem opatství. Snad bys se o nich dalo něco zjistit v literatuře,", 2, postava.BarvaPisma);
                    PisP("a to v takové, která je zrovna tak temná... Bratr Laurentius tě jistě", 3, postava.BarvaPisma);
                    PisP("odkáže na ty správné texty...\"", 4, postava.BarvaPisma);
                    if (Faze_Dialogu_Knihovnik < 4) { Faze_Dialogu_Knihovnik = 4; }
                    if (Faze_Pribehu < 12) { Faze_Pribehu = 12; }
                    break;

                case 3:
                    PisP("\"Dulcinea mi už přinesla lektvar. Přehnala to ovšem se sádlem, proto", 1, postava.BarvaPisma);
                    PisP("je z něj spíše mast. Pojď za mnou. Dostaneš pomazání.\"", 2, postava.BarvaPisma);
                    PisP("", 3, postava.BarvaPisma);
                    PisP("Opat tě důkladně pomaže smrdutou, ale mocnou mastí.", 4, Color.Silver);
                    PisP("", 5, postava.BarvaPisma);
                    PisP("\"Teď bys měl přízraku již rozumnět a být schopen jej zapudit!\"", 6, postava.BarvaPisma);
                    if (Faze_Pribehu < 17) { Faze_Pribehu = 17; }
                    if (Faze_Dialogu_Prizrak < 3) { Faze_Dialogu_Prizrak = 3; }
                    break;

                case 4:
                    PisP("\"Už se mi to všechno vybavuje. Ano, vyvolal jsem ho já.", 1, postava.BarvaPisma);
                    PisP("Byl to hrozný omyl. Jen jsem zkoušel nakreslit obrazce", 2, postava.BarvaPisma);
                    PisP("z jednoho manuskriptu, který pořizoval bratr Laurentius.", 3, postava.BarvaPisma);
                    PisP("On bude vědět, co to bylo za text! Ne, nebyl to Necronomicon...", 4, postava.BarvaPisma);
                    PisP("Musela to být ještě mnohem temnější kniha. A teď, prosím, odejdi", 5, postava.BarvaPisma);
                    PisP("Musím přemýšlet o všem, co jsem způsobil. A uložit si pokání.\"", 6, postava.BarvaPisma);
                    if (Faze_Dialogu_Knihovnik < 6) { Faze_Dialogu_Knihovnik = 6; }
                    if (Faze_Pribehu < 19) { Faze_Pribehu = 19; }
                    break;
            }
        }

        public void DialogySOpilcem(Npcka postava)
        {
            switch (Faze_Dialogu_Smadny)
            {
                default:
                case 1:
                    PisP("\"Prý jsi přijel z Franské říše, kamaráde!", 1, postava.BarvaPisma);
                    PisP("Tam umí pít víno, nemám pravdu? No, dáš si se mnou?\"", 2, postava.BarvaPisma);
                    PisP("", 3, postava.BarvaPisma);
                    PisP("Mnich chce ještě mluvit, ale viditelně mu ztěžkne jazyk,", 4, Color.Silver);
                    PisP("tak se radši jen pořádně napije. Potom škytne a k tobě dorazí", 5, Color.Silver);
                    PisP("těžký závan, připomínající nikdy nekončící noc v plesnivém vinném sklípku.", 6, Color.Silver);
                    break;

                case 2:
                    PisP("\"Mohl by ses trochu ztišit? Bratra Laurentia z tvého zpěvu bolí hlava.\"", 1, Color.AntiqueWhite);
                    PisP("", 2, Color.AntiqueWhite);
                    PisP("Opilý Servác na tebe mžourá narudlýma očima. Pak se divoce zasměje.", 3, Color.Silver);
                    PisP("", 4, Color.AntiqueWhite);
                    PisP("\"Ha! Laurentius byl vždycky suchar! Nelíbí se mu moje písničky, a to", 5, postava.BarvaPisma);
                    PisP("přitom zpívám ty nejlepší, co znám! Eh, k čertu, ale stejně zpívám", 6, postava.BarvaPisma);
                    PisP("jenom pro to, abych nemusel myslet na svůj hlad! Nechceš se, kamaráde,", 7, postava.BarvaPisma);
                    PisP("zeptat té dobré ženy, co tu teď vaří, kdy bude nějaký moučník? Askeze", 8, postava.BarvaPisma);
                    PisP("a půst mě už omrzely!\"", 9, postava.BarvaPisma);
                    if (Faze_Dialogu_Kucharka < 2) { Faze_Dialogu_Kucharka = 2; }
                    if (Faze_Pribehu < 7) { Faze_Pribehu = 7; }
                    break;

                case 3:
                    PisP("\"Říkáš, že bude pudink? Ojoj! Dobře, přestanu zpívat, brachu!", 1, postava.BarvaPisma);
                    PisP("Konec konců, kdybych zpíval a u toho slintal v očekávání jídla,", 2, postava.BarvaPisma);
                    PisP("jistě bych si potřísnil svou kutnu! Přitom jsem si ji letos už pral.\"", 3, postava.BarvaPisma);
                    if (Faze_Dialogu_Knihovnik < 3) { Faze_Dialogu_Knihovnik = 3; }
                    if (Faze_Pribehu < 9) { Faze_Pribehu = 9; }
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Krucifix && !i.JeVInventari)
                        {
                            i.JeVeSvete = true;
                        }
                    }
                    break;

                case 4:
                    PisP("\"Potřebuji trochu tvého vína do lektvaru, bratře. Můžu...\"", 1, Color.AntiqueWhite);
                    PisP("", 2, Color.AntiqueWhite);
                    PisP("\"Tak to ne! Napít se se mnou nechceš, ale do lektvaru bys to lil!", 3, postava.BarvaPisma);
                    PisP("Taková škoda vína! Běž si za sklepníkem, ať ti dá nějaký horší patok.\"", 4, postava.BarvaPisma);
                    if (Faze_Dialogu_Sklepnik < 3) { Faze_Dialogu_Sklepnik = 3; }
                    break;
            }
        }

        public void DialogySKucharkou(Npcka postava)
        {
            switch (Faze_Dialogu_Kucharka)
            {
                default:
                case 1:
                    PisP("\"Buď zdráv, dobrý muži. Jsem tady kuchařka. Ano, já vím... divíš se,", 1, postava.BarvaPisma);
                    PisP("co dělám tady, v mužském klášteře. No, to se má tak... Můj muž má závoznictví", 2, postava.BarvaPisma);
                    PisP("s mnoha koni. A jeden z těch koňů se splašil a kopytem zabil mnišského kuchaře.", 3, postava.BarvaPisma);
                    PisP("Přislíbil, že dokud si nenajdou nového, budu jim zde chodit pomáhat vařit.", 4, postava.BarvaPisma);
                    PisP("Mniši mou přítomnost zatím snáší dobře a jsou vlídní. Ale teď s tou vraždou...", 5, postava.BarvaPisma);
                    PisP("nevím, běhá mi z toho mráz po zádech...\"", 6, postava.BarvaPisma);
                    break;

                case 2:
                    PisP("\"Bratr Servác se ptá, kdy bude moci něco sníst. Z hladu už blouzní a zpívá", 1, Color.AntiqueWhite);
                    PisP("sprosté písničky, kvůli čemuž pro změnu bratra Laurentia bolí hlava.\"", 2, Color.AntiqueWhite);
                    PisP("", 3, Color.AntiqueWhite);
                    PisP("\"Oh, to mě mrzí, že má ten mnich prázdný žaludek! I když jsem myslela,", 4, postava.BarvaPisma);
                    PisP("že si v klášterech potrpí na odříkání. No nic, mám tady cukr, vajíčka,", 5, postava.BarvaPisma);
                    PisP("mléko i škrob. Můžu Servácovi udělat pudink, aby se dožil večeře.", 6, postava.BarvaPisma);
                    PisP("nepřineseš mi do něj ale trochu lesních jahod?\"", 7, postava.BarvaPisma);
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Jahody && i.JeVInventari && Faze_Dialogu_Kucharka < 3)
                        {
                            Faze_Dialogu_Kucharka = 3;
                            i.JeVInventari = false;
                        }
                    }
                    break;

                case 3:
                    PisP("\"Tyhle lesní jahody vypadají výborně! Díky! Pochutnám si na nich sama,", 1, postava.BarvaPisma);
                    PisP("zatímco pro Serváce budu dělat neochucený pudink. Co by taky chtěl, je", 2, postava.BarvaPisma);
                    PisP("přece mnich, že? Můžeš mu jít vyřídit, že to bude za chvilku hotové?\"", 3, postava.BarvaPisma);
                    if (Faze_Dialogu_Smadny < 3) { Faze_Dialogu_Smadny = 3; }
                    if (Faze_Pribehu < 8) { Faze_Pribehu = 8; }
                    break;

                case 4:
                    PisP("\"Jako základ do lektvaru patří voda.\"", 2, postava.BarvaPisma);
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Voda && i.JeVInventari && Faze_Dialogu_Kucharka < 5)
                        {
                            Faze_Dialogu_Kucharka = 5;
                            i.JeVInventari = false;
                        }
                    }
                    break;

                case 5:
                    PisP("\"Voda se musí zahustit přepuštěným sádlem.\"", 2, postava.BarvaPisma);
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Sadlo && i.JeVInventari && Faze_Dialogu_Kucharka < 6)
                        {
                            Faze_Dialogu_Kucharka = 6;
                            i.JeVInventari = false;
                        }
                    }
                    break;

                case 6:
                    PisP("\"Nyní tomu dáme barvu pomocí vína. Někde tu bude soudek.\"", 2, postava.BarvaPisma);
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Soudek && i.JeVInventari && Faze_Dialogu_Kucharka < 7)
                        {
                            Faze_Dialogu_Kucharka = 7;
                            i.JeVInventari = false;
                        }
                    }
                    break;

                case 7:
                    PisP("\"Musíme přidat houby z lesa.\"", 2, postava.BarvaPisma);
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Houby && i.JeVInventari && Faze_Dialogu_Kucharka < 8)
                        {
                            Faze_Dialogu_Kucharka = 8;
                            i.JeVInventari = false;
                        }
                    }
                    break;

                case 8:
                    PisP("\"Výborně, přinesl jsi mi všechny ingredience. Ale běda!", 1, postava.BarvaPisma);
                    PisP("Nemá to správnou barvu... Vína bylo v soudku málo. Seženeš mi další?\"", 2, postava.BarvaPisma);
                    if (Faze_Pribehu < 14) { Faze_Pribehu = 14; }
                    if (Faze_Dialogu_Smadny < 4) { Faze_Dialogu_Smadny = 4; }
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Flaska && i.JeVInventari && Faze_Dialogu_Kucharka < 9)
                        {
                            Faze_Dialogu_Kucharka = 9;
                            i.JeVInventari = false;
                        }
                    }
                    break;

                case 9:
                    PisP("\"Hahaha! Dělala jsem si legraci. V lektvaru je vína dost...", 1, postava.BarvaPisma);
                    PisP("Vlastně jsem už lektvar udělala a předala opatovi.", 2, postava.BarvaPisma);
                    PisP("Děkuji ale za tuto láhev, určitě ji upotřebím večer,", 3, postava.BarvaPisma);
                    PisP("až budu dočítat biblickou knihu Ester a budu chtít", 4, postava.BarvaPisma);
                    PisP("zklidnit slzy dojetí kapkou něčeho dobrého.\"", 5, postava.BarvaPisma);
                    if (Faze_Pribehu < 16) { Faze_Pribehu = 16; }
                    if (Faze_Dialogu_Opat < 3) { Faze_Dialogu_Opat = 3; }
                    break;
            }
        }

        public void DialogySPrizrakem(Npcka postava)
        {
            switch (Faze_Dialogu_Prizrak)
            {
                default:
                case 1:
                    PisP("\"Budu potřebovat krucifix!\"", 1, Color.AntiqueWhite);
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Krucifix && i.JeVInventari && Faze_Dialogu_Prizrak < 2)
                        {
                            Faze_Dialogu_Prizrak = 2;
                        }
                    }
                    break;

                case 2:
                    PisP("\"Muem mudnum da erider olov olov iuqol,", 1, postava.BarvaPisma);
                    PisP("cih em tacov euqmuciuq nmucet iuqol non!\"", 2, postava.BarvaPisma);
                    PisP("", 3, postava.BarvaPisma);
                    PisP("\"Ech, vůbec ti nerozumím, přízraku.", 4, Color.AntiqueWhite);
                    PisP("Měl bych to všechno říct opatovi.\"", 5, Color.AntiqueWhite);
                    if (Faze_Pribehu < 11) { Faze_Pribehu = 11; }
                    if (Faze_Dialogu_Opat < 2) { Faze_Dialogu_Opat = 2; }
                    foreach (Predmety i in Predmety_List)
                    {
                        if (i == Predmet_Necro && !i.JeVInventari)
                        {
                            i.JeVeSvete = true;
                        }
                    }
                    break;

                case 3:
                    PisP("\"Ve jménu Spasitele, mluv se mnou přízraku! Řekni mi,", 1, Color.AntiqueWhite);
                    PisP("proč jsi tady? Kdo tě poslal? Lucifer? Belzebub? Či Mefisto?\"", 2, Color.AntiqueWhite);
                    PisP("", 3, Color.AntiqueWhite);
                    PisP("\"Ne, mnichu... Z mého domova mne vytrhl a do vaší mrzké reality", 4, postava.BarvaPisma);
                    PisP("uvěznil muž jménem Reamurus. Váš opat. Dva vaši bratři mě chtěli", 5, postava.BarvaPisma);
                    PisP("ovládat, ale vymaloval jsem stěny jejich vnitřnostmi.", 6, postava.BarvaPisma);
                    PisP("Chci jen domů.\"", 7, postava.BarvaPisma);
                    if (Faze_Dialogu_Opat < 4) { Faze_Dialogu_Opat = 4; }
                    if (Faze_Pribehu < 18) { Faze_Pribehu = 18; }
                    break;

                case 4:
                    PisP("\"Přicházíš za mnou s otázkou na rtech. S otázkou, kterou ti nikdo jiný", 1, postava.BarvaPisma);
                    PisP("nemůže zodpovědět, bratře Eriugeno... nebo spíše bratře Obscure. Protože", 2, postava.BarvaPisma);
                    PisP("to je tvé pravé jméno, které jsi dostal v našem světe: Obscurus Druhý,", 3, postava.BarvaPisma);
                    PisP("Praporečník Korouhve Pekel. Vyhnaný mezi smrtelníky za povstávní proti", 4, postava.BarvaPisma);
                    PisP("našim pánům. Zapomněl jsi a stal se mnichem, ale tvá duše, když jsi", 5, postava.BarvaPisma);
                    PisP("tvořil své největší dílo, ta hledala cestu zpátky. A vložila do", 6, postava.BarvaPisma);
                    PisP("slov toho spisu způsob, jak mě zavolat. Abychom spolu mohli jít", 7, postava.BarvaPisma);
                    PisP("domů. Jsi připraven, Obscure, můj bratře?", 8, postava.BarvaPisma);
                    if (Faze_Pribehu < 21) { Faze_Pribehu = 21; }
                    break;
            }
        }

        public void PopisPergamenNPC(Npcka postava)
        {
            if (Pribeh_Aktivovan) { Pribeh_Aktivovan = false; }

            _spriteBatch.Draw(Gfx_Pergamen, new Vector2(200, 60), Color.White);

            if (postava == NPC_Smadny)
            {
                DialogySOpilcem(postava);
            }
            else if (postava == NPC_Knihovnik)
            {
                DialogySKnihovnikem(postava);
            }
            else if (postava == NPC_Kucharka)
            {
                DialogySKucharkou(postava);
            }
            else if (postava == NPC_Opat)
            {
                DialogySOpatem(postava);
            }
            else if (postava == NPC_Sklepnik)
            {
                DialogySeSklepnikem(postava);
            }
            else if (postava == NPC_Prizrak)
            {
                DialogySPrizrakem(postava);
            }
            else
            {
                PisP("Slyšíš temné, dunivé a zneklidňující zvuky.", 3, Color.Silver);
            }
        }

Neformátovaný

Přidáno: 1.3.2022
Expirace: Neuvedeno

Avatar
Autor: Jakub Raida
Aktivity