public static void RandomizeMap(string args = null)
        {
            // Randomize maintains a list of the chosen area types for the purposes of passing on to WriteWorldMap()
            AreaTypesChosen = new List <string>();

            saveDir = settings.GameDirectory;
            if (args == "savemod")
            {
                saveDir = SaveRunPrompt();
            }
            if (saveDir == null)
            {
                return;
            }

            TilesetManip.MakeShaderPool();

            // make the draw pool based on which level pools are enabled
            MakeDrawPool();
            // make randomized selections from drawpool
            ChooseLevels();

            // The rest of the randomization process is delegated to the functions below.
            try { CleanFolders(); } catch (Exception ex) { Console.WriteLine($"Error cleaning folders or printing debug. Exception {ex}"); MessageBox.Show($"Error cleaning folders or printing debug. Exception {ex}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); throw; }
            try { LevelInfo(); } catch (Exception ex) { Console.WriteLine($"Error creating levelinfo. Exception {ex}"); MessageBox.Show($"Error creating levelinfo. Exception {ex}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); throw; }
            try { MapCSV(); } catch (Exception ex) { Console.WriteLine($"Error creating map. Exception {ex}"); MessageBox.Show($"Error creating map. Exception {ex}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); throw; }
            try { TileMaps(); } catch (Exception ex) { Console.WriteLine($"Error copying tilemaps. Exception {ex}"); MessageBox.Show($"Error copying tilemaps. Exception {ex}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); throw; }
            try { Tilesets(); } catch (Exception ex) { Console.WriteLine($"Error creating tilesets. Exception {ex}"); MessageBox.Show($"Error creating tilesets. Exception {ex}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); throw; }
            try { NPCs(); } catch (Exception ex) { Console.WriteLine($"Error creating npcs. Exception {ex}"); MessageBox.Show($"Error creating tilesets. Exception {ex}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); throw; }
            try { Worldmap.WriteWorldMap(); } catch (Exception ex) { Console.WriteLine($"Error creating worldmap. Exception {ex}"); MessageBox.Show($"Error creating worldmap. Exception {ex}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); throw; }

            Console.WriteLine(AppResources.GameSeed);
        }
        static void Tilesets()
        {
            using (StreamWriter sw = File.CreateText(saveDir + "data/tilesets.txt.append"))
            {
                sw.WriteLine("v { area_name \"Void\" area_label_frame 0 tile_graphics Tilehell overlay_graphics Overlaysairship background_graphics neverbg foreground_graphics none palette 0 do_tilt true fx_shader ripples fx_shader_mid heatwave2 midfx_graphics SolidBox global_particle_1 bgrain global_particle_2 embers global_particle_3 leaves decoration_1 CreepingMass decoration_2 OrbBlob2 decoration_3 OrbLarge2 ambience flesh.ogg art_alts[[OrbSmall, OrbBlob2][OrbLarge, OrbLarge2][ChainLink, None][ChainLink2, None]]");
                for (int j = 0; j < settings.NumAreas; j++) // npc levels
                {
                    sw.WriteLine($"npc{j + 1} {{ npc_1 NPCv{j + 1} }}");
                }
                sw.WriteLine("}");

                for (int j = 0; j < settings.NumAreas; j++) // area loop
                {
                    var areatileset = TilesetManip.GetTileset(settings, true);

                    AreaTypesChosen.Add(areatileset.AreaType);

                    sw.WriteLine("v" + (j + 1).ToString() + $" {{\n    area_name \"TEiN Randomizer\"\n    area_label_frame 0\n    background_graphics neverbg\n    area_type {areatileset.AreaType}\n");
                    if (settings.UseAreaTileset || (settings.DoShaders && settings.DoParticles))
                    {
                        sw.WriteLine(areatileset.All + "art_alts[" + areatileset.ArtAlts + "]");
                    }

                    for (int i = 0; i < settings.NumLevels; i++) // level loop
                    {
                        var tileset = TilesetManip.GetTileset(settings, false);
                        sw.WriteLine("    " + Convert.ToString(i + 1) + " {");
                        sw.WriteLine("    " + ChosenLevels[j][i].TSDefault);

                        sw.WriteLine($"# Level Name: {ChosenLevels[j][i].Name}");

                        // Write Tileset info for level
                        if (settings.UseAreaTileset)
                        {
                            tileset = areatileset;
                        }
                        if (settings.DoMusic)
                        {
                            sw.WriteLine(areatileset.Music);
                        }
                        if (settings.DoPalettes)
                        {
                            sw.WriteLine(tileset.Palette);
                        }
                        if (settings.DoTileGraphics)
                        {
                            sw.WriteLine(tileset.Tile);
                        }
                        if (settings.DoOverlays)
                        {
                            sw.WriteLine(tileset.Overlay);
                        }
                        if (settings.DoShaders)
                        {
                            sw.WriteLine(tileset.Shader);
                        }
                        if (settings.DoParticles)
                        {
                            sw.WriteLine("global_particle_1 None\nglobal_particle_2 None\nglobal_particle_3 None\n");
                            sw.WriteLine(tileset.Particles);
                        }

                        sw.WriteLine(tileset.DoTilt);
                        sw.WriteLine(tileset.DoWobble);
                        sw.WriteLine(tileset.Extras);

                        // Art alts
                        sw.Write("     art_alts[" + ChosenLevels[j][i].Art);
                        sw.Write(tileset.ArtAlts);
                        //if (settings.UseCommonTileset)
                        //    sw.Write(areatileset.ArtAlts);
                        sw.WriteLine("     ]");

                        sw.WriteLine("     # TS Needs");
                        sw.WriteLine("    " + ChosenLevels[j][i].TSNeed);

                        foreach (var line in AppResources.AttachToTS)
                        {
                            sw.WriteLine(line);
                        }

                        // NPCs
                        sw.WriteLine($"     npc_1 NPC{j}-{i}\n");
                        sw.WriteLine("    }\n");
                    }
                    sw.WriteLine("}");
                }
            }
            File.Copy(saveDir + "data/tilesets.txt.append", "data/debug/last_tilesets.txt", true);
        }
Example #3
0
        public static void RandomizeMod(MainWindow mw)
        {
            //ShadersList = mw.ShadersList;

            saveDir = settings.GameDirectory;

            PrepModFolders();

            // level corruptions
            string dir = $"{saveDir}tilemaps";

            if (Directory.Exists(dir))
            {
                string[] paths = Directory.GetFiles(dir);
                foreach (var file in paths)
                {
                    LevelFile level = LevelManip.Load(file);
                    //if(settings.MirrorMode)
                    //{
                    //    LevelManip.FlipLevelH(ref level);
                    //    FlipCSV(saveDir + "data/map.csv");
                    //}
                    if (settings.DoCorruptions)
                    {
                        LevelCorruptors.CorruptLevel(ref level);
                    }
                    LevelManip.Save(level, file);
                }
            }

            // data folder
            dir = $"{saveDir}data";
            if (Directory.Exists(dir))
            {
                // tilesets.txt
                var file = $"{dir}/tilesets.txt";
                if (File.Exists(file))
                {
                    string[] text = File.ReadAllLines(file);
                    for (int i = 0; i < text.Length; i++)
                    {
                        if (text[i].Contains("palette"))
                        {
                            text[i] = TilesetManip.GetPalette();
                        }
                        if (text[i].Contains("tile_graphics"))
                        {
                            text[i] = TilesetManip.GetTile();
                        }
                        if (text[i].Contains("overlay_graphics"))
                        {
                            text[i] = TilesetManip.GetOverlay();
                        }
                        if (text[i].Contains("global_particle"))
                        {
                            var split = text[i].Trim().Split(Convert.ToChar(" "));
                            text[i] = split[0] + " " + ParticleGenerator.GetParticle(settings);
                        }
                    }
                    File.Delete(file);
                    File.WriteAllLines(file, text);
                }
            }
        }