示例#1
0
    private static void DumpObjectTableForSaveDir(string saveDir)
    {
        // Objects are only stored in maps
        var mapList = MapListParser.Parse(Tig.FS);

        var loader = new MapMobileLoader(Tig.FS);

        using var mapMobileIndex = new StreamWriter("map_mobiles.txt");

        foreach (var mapListEntry in mapList)
        {
            var mapName = mapListEntry.Value.name;

            var mapDataDir = $"maps/{mapName}";
            var mapSaveDir = Path.Join(saveDir, "maps", mapName);

            loader.Load(mapDataDir, mapSaveDir);

            mapMobileIndex.WriteLine("-----------------------------------------------------------------");
            mapMobileIndex.WriteLine(mapName);
            mapMobileIndex.WriteLine("-----------------------------------------------------------------");

            foreach (var mobile in loader.Mobiles)
            {
                mapMobileIndex.WriteLine(mobile.id + " " + mobile);
            }
        }
    }
示例#2
0
    private static void Convert(string toeeDir, string outputDir)
    {
        Directory.CreateDirectory(outputDir);
        using var fs = TroikaVfs.CreateFromInstallationDir(toeeDir);

        // Loads the map list
        var maps = MapListParser.Parse(fs);

        var entries = fs.ReadMesFile("rules/townmap_ui_placed_flag_locations.mes");

        var mapCount = int.Parse(entries[1]);

        for (var mapIndex = 0; mapIndex < mapCount; mapIndex++)
        {
            var mapKey = 100 * (mapIndex + 1);
            var mapId  = int.Parse(entries[mapKey]);
            // See MapSystem.GetDataDir
            var mapDataDir = Path.Join(outputDir, $"maps/{maps[mapId].name}");
            Directory.CreateDirectory(mapDataDir);

            using var stream = new FileStream($"{mapDataDir}/map_markers.json", FileMode.Create);
            var options = new JsonWriterOptions {
                Indented = true
            };
            using var writer = new Utf8JsonWriter(stream, options);

            writer.WriteStartObject();
            writer.WriteString("$schema", "https://schemas.opentemple.de/townMapMarkers.json");
            writer.WritePropertyName("markers");
            writer.WriteStartArray();

            var markerCount = int.Parse(entries[mapKey + 1]);
            for (var markerIndex = 0; markerIndex < markerCount; markerIndex++)
            {
                var markerKey     = mapKey + 20 + markerIndex;
                var locationParts = entries[markerKey].Split(",");
                var x             = int.Parse(locationParts[0].Trim());
                var y             = int.Parse(locationParts[1].Trim());

                // Interestingly, ToEE applied a hard coded offset
                x -= 4;
                y -= 8;

                writer.WriteStartObject();
                writer.WriteNumber("id", markerIndex);
                writer.WriteBoolean("initiallyVisible", false);
                // For the text, we reference the translation file
                // It however uses a different numbering scheme since ToEE itself will read it sequentially
                // rather than by key, but our translation system must reference it by key.
                var translationKey = markerKey - 110;
                writer.WriteString("text", $"#{{townmap_markers:{translationKey}}}");
                writer.WriteNumber("x", x);
                writer.WriteNumber("y", y);
                writer.WriteEndObject();
            }

            writer.WriteEndArray(); // markers
            writer.WriteEndObject();
        }
    }
示例#3
0
    public static void ConvertAllMaps(string toeeDir)
    {
        using var game = HeadlessGame.Start(new HeadlessGameOptions(toeeDir));

        var mapList = MapListParser.Parse(Tig.FS);

        foreach (var(mapId, mapEntry) in mapList)
        {
            Console.WriteLine($"Converting {mapId} ({mapEntry.name})");
            ConvertMap(mapEntry);
        }
    }
示例#4
0
    public static void ConvertMap(string toeeDir, int mapId)
    {
        using var game = HeadlessGame.Start(new HeadlessGameOptions(toeeDir));
        var mapList = MapListParser.Parse(Tig.FS);

        if (!mapList.TryGetValue(mapId, out var mapEntry))
        {
            Console.WriteLine("Unknown map: " + mapId);
            return;
        }

        ConvertMap(mapEntry);
    }