Exemplo n.º 1
0
        private static void GenerateDevices(string directory)
        {
            var cyphersFileName = Path.Combine(directory, "Cyphers_AllSources.xml");
            var cyphersList     = NumeneraXML.DeserializeCyphersListFromXML(cyphersFileName);

            Console.WriteLine("Cyphers loaded: " + cyphersList.Count);

            var artefactsFileName = Path.Combine(directory, "Artefacts_AllSources.xml");
            var artefactsList     = NumeneraXML.DeserializeArtefactsListFromXML(artefactsFileName);

            Console.WriteLine("Artefacts loaded: " + artefactsList.Count);

            var odditiesFilename = Path.Combine(directory, "Oddities_AllSources.xml");
            var odditiesList     = NumeneraXML.DeserializeOdditiesListFromXML(odditiesFilename);

            Console.WriteLine("Oddities loaded: " + odditiesList.Count);

            var rand = new Random(Guid.NewGuid().GetHashCode());
            int randomIndex = 0, diceRandom = 1;

            ConsoleKeyInfo c = new ConsoleKeyInfo();

            // TODO: D6/D10 random
            // TODO: Calculate final level automatically
            // TODO: RollTable Random (find maximum number in the last element)
            // TODO: Owerwrite ToString() specific to device? Or create custom output for each device?
            while (c.Key != ConsoleKey.Escape)
            {
                Console.WriteLine("******** Choose device to generate: 1 - Cypher; 2 - Artefact; 3 - Oddity;");
                c = Console.ReadKey(true);
                switch (c.KeyChar)
                {
                case '1':
                    Console.WriteLine($"Generating from {cyphersList.Count} cyphers\n");
                    randomIndex = rand.Next(cyphersList.Count);
                    diceRandom  = rand.Next(1, 6);
                    var device = cyphersList[randomIndex];
                    //device.Level += $" [D6 = {diceRandom}]";
                    Console.WriteLine(device.ToString());
                    break;

                case '2':
                    Console.WriteLine($"Generatring from {artefactsList.Count} artefacts\n");
                    randomIndex = rand.Next(artefactsList.Count);
                    diceRandom  = rand.Next(1, 6);
                    artefactsList[randomIndex].Level += $" [D6 = {diceRandom}]";
                    Console.WriteLine(artefactsList[randomIndex].ToString());
                    break;

                case '3':
                    Console.WriteLine($"Generating from {odditiesList.Count} oddities\n");
                    randomIndex = rand.Next(odditiesList.Count);
                    Console.WriteLine(odditiesList[randomIndex].ToString());
                    break;
                }
            }
        }
Exemplo n.º 2
0
        public static void ParseArtefactsToXML()
        {
            var directory    = @"E:\Documents\Tabletop RPGs\Numenera\APPs\Artefacts\";
            var name         = "RAW_Artefacts_Compendium.txt";
            var fileName     = Path.Combine(directory, name);
            var fileNameXml  = fileName + "_xml.xml";
            var deviceParser = new DevicesParser("Compendium", DeviceType.Artefact);

            deviceParser.CreateXMLFromRawArtefactsText(fileName, fileNameXml);
            var cyphers = NumeneraXML.DeserializeArtefactsListFromXML(fileNameXml);

            cyphers.ForEach(x => Console.WriteLine(x));
        }
Exemplo n.º 3
0
        public static void ParseCyphersToXML()
        {
            var directory    = @"E:\Documents\Tabletop RPGs\Numenera\APPs\Cyphers\";
            var name         = "RAW_Cyphers_Discovery.txt";
            var fileName     = Path.Combine(directory, name);
            var fileNameXml  = fileName + "_xml.xml";
            var deviceParser = new DevicesParser("Discovery", DeviceType.Cypher);

            deviceParser.CreateXMLFromRawCyphersText(fileName, fileNameXml);
            var cyphers = NumeneraXML.DeserializeCyphersListFromXML(fileNameXml);

            cyphers.ForEach(x => Console.WriteLine(x));
        }
Exemplo n.º 4
0
        public void TestPDFParsing_Cyphers()
        {
            var directory    = @"..\..\..\ExampleFiles";
            var name         = "Test_Cyphers.txt";
            var fileName     = Path.Combine(directory, name);
            var fileNameXml  = Path.Combine(directory, Path.GetFileNameWithoutExtension(fileName) + ".xml");
            var deviceParser = new DevicesParser("Discovery", DeviceType.Cypher);

            deviceParser.CreateXMLFromRawCyphersText(fileName, fileNameXml);
            var cyphers = NumeneraXML.DeserializeCyphersListFromXML(fileNameXml);

            cyphers.Should().BeEquivalentTo(CyphersExample.List);
        }
Exemplo n.º 5
0
        public void TestPDFParsing_Artefacts()
        {
            var directory    = @"..\..\..\ExampleFiles";
            var name         = "Test_Artefacts.txt";
            var fileName     = Path.Combine(directory, name);
            var fileNameXml  = Path.Combine(directory, Path.GetFileNameWithoutExtension(fileName) + ".xml");
            var deviceParser = new DevicesParser("Discovery", DeviceType.Artefact);

            deviceParser.CreateXMLFromRawArtefactsText(fileName, fileNameXml);
            var artefacts = NumeneraXML.DeserializeArtefactsListFromXML(fileNameXml);

            System.Diagnostics.Debug.WriteLine(artefacts[0].Name);
            artefacts.Should().BeEquivalentTo(ArtefactsExample.List);
            //artefacts[1].Should().BeEquivalentTo(ArtefactsExample.List[1]);
        }
Exemplo n.º 6
0
        public static void CombineAllArtefacts()
        {
            // combine them all
            var directory = @"E:\Documents\Tabletop RPGs\Numenera\NumeneraAppFiles\Devices\Artefacts_";
            var files     = new List <string>()
            {
                "Discovery.xml", "Destiny.xml", "Compendium.xml"
            };

            var allArtefacts = new List <Artefact>();

            foreach (var file in files)
            {
                var filename  = directory + file;
                var artefacts = NumeneraXML.DeserializeArtefactsListFromXML(filename);
                NumeneraXML.SerializeToXml(artefacts, directory + $"{artefacts[0].Source}_fixed.xml");
                allArtefacts.AddRange(artefacts);
            }

            var artefactsToSerialize = new NumeneraDevices(allArtefacts);

            NumeneraXML.SerializeToXml(artefactsToSerialize.Artefacts, directory + $"AllSources_{artefactsToSerialize.Artefacts.Count}.xml");
        }
Exemplo n.º 7
0
        public static void CombineAllCyphers()
        {
            // combine them all
            var directory = @"E:\Documents\Tabletop RPGs\Numenera\NumeneraAppFiles\Devices\Cyphers_";
            var files     = new List <string>()
            {
                "Discovery.xml", "Destiny.xml", "Compendium.xml"
            };

            var allCyphers = new List <Cypher>();

            foreach (var file in files)
            {
                var filename = directory + file;
                var cyphers  = NumeneraXML.DeserializeCyphersListFromXML(filename);
                NumeneraXML.SerializeToXml(cyphers, directory + $"{cyphers[0].Source}.xml");
                allCyphers.AddRange(cyphers);
            }

            var cyphersToSerialize = new NumeneraDevices(allCyphers);

            NumeneraXML.SerializeToXml(cyphersToSerialize.Cyphers, directory + $"AllSources_{cyphersToSerialize.Cyphers.Count}.xml");
        }
Exemplo n.º 8
0
        public void TestCalculatedProperties()
        {
            var rand = new Random(Guid.NewGuid().GetHashCode());

            var d10cypherXML = @"  <Cypher>
    <Name>Analysis Scanner</Name>
    <Level>1d10</Level>
    <MinimumCraftingLevel>1</MinimumCraftingLevel>
    <Wearable>Bracelet</Wearable>
    <Usable>Handheld device</Usable>
    <Effect>This device scans and records everything within short range for one round and then conveys the level and nature of all creatures, objects, and energy sources it scanned. This information can be accessed for 28 hours after the scan.</Effect>
    <Source>Compendium</Source>
  </Cypher>";
            var d10cypher    = NumeneraXML.DeserializeCypherFromXMLString(d10cypherXML);

            var d10baseLevel = d10cypher.LevelBaseDice;

            Assert.AreEqual(10, d10baseLevel);

            var d10levelTerm = d10cypher.LevelIncrease;

            Assert.AreEqual(0, d10levelTerm);

            var d10minCraftingLevel = d10cypher.MinimumCraftingLevel;

            Assert.AreEqual(1, d10minCraftingLevel);

            var d10randomLevel = rand.Next(1, d10cypher.LevelBaseDice) + d10cypher.LevelIncrease;

            Assert.IsTrue(d10randomLevel >= 1 && d10randomLevel <= 10);


            var d6cypherXML = @"  <Cypher>
    <Name>Amplification Parasite</Name>
    <Level>1d6 + 4</Level>
    <MinimumCraftingLevel>4</MinimumCraftingLevel>
    <Internal>Living fish, beetle, or worm that must be ingested</Internal>
    <Effect>Upon eating the parasite, the user chooses one stat and the GM chooses a different stat. The difficulty of any roll related to the user’s chosen stat is reduced by two steps, and the difficulty of any roll involving the GM’s chosen stat is increased by two steps. The parasite dies after 1d6 hours, and the effect ends when the user violently expels it from her body.</Effect>
    <Source>Compendium</Source>
  </Cypher>";
            var d6cypher    = NumeneraXML.DeserializeCypherFromXMLString(d6cypherXML);

            var d6baseLevel = d6cypher.LevelBaseDice;

            Assert.AreEqual(6, d6baseLevel);

            var d6levelTerm = d6cypher.LevelIncrease;

            Assert.AreEqual(4, d6levelTerm);

            var d6minCraftingLevel = d6cypher.MinimumCraftingLevel;

            Assert.AreEqual(5, d6minCraftingLevel);

            var d6randomLevel = rand.Next(1, d6cypher.LevelBaseDice) + d6cypher.LevelIncrease;

            Assert.IsTrue(d6randomLevel >= 5 && d6randomLevel <= 10);


            var staticLevelCypherXML = @"  <Cypher>
    <Name>Detonation (singularity)</Name>
    <Level>10</Level>
    <Effect>Explodes and creates a momentary singularity that tears at the fabric of the universe. Inflicts 20 points of damage to all within short range, drawing them (or their remains) together to immediate range (if possible). Player characters in the radius move one step down the damage track if they fail a Might defense roll.</Effect>
    <Source>Discovery</Source>
    <Usable>Explosive device or ceramic sphere (thrown, short range) or handheld projector (long range)</Usable>
  </Cypher>";
            var staticLevelCypher    = NumeneraXML.DeserializeCypherFromXMLString(staticLevelCypherXML);

            var staticLevel = staticLevelCypher.LevelBaseDice;

            Assert.AreEqual(0, staticLevel);

            var staticLevelTerm = staticLevelCypher.LevelIncrease;

            Assert.AreEqual(10, staticLevelTerm);

            var staticLevelMinCraftingLevel = staticLevelCypher.MinimumCraftingLevel;

            Assert.AreEqual(10, staticLevelMinCraftingLevel);

            var staticLevelRandom = (staticLevelCypher.LevelBaseDice == 0 ? 0 : rand.Next(1, d6cypher.LevelBaseDice)) + staticLevelCypher.LevelIncrease;

            Assert.IsTrue(staticLevelRandom == 10);
        }