rft2

Пользователь
  • Публикации

    17
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем rft2


  1. Провёл сейчас эксперимент. Оказывается, с разблокированным гигантским размером максимальный размер карты 36 Мп. Для квадратной карты это 6145х6145 пикселей. Только редактор такую большую карту не понимает и объекты на ней можно ставить только через TF Map Viewer.

    1

  2. Сначала нужно создать карту высот. Она представляет собой чёрно-белое изображение в формате PNG, размер не больше 16 Мп, длина стороны от 257 до 16385 пикселей, допустимые значения рассчитываются по формуле:

    w = 256 * n + 1

    где n - целое число от 1 до 64. Файл должен называться heightmap.png

    Я не знаю, какие программы нужны для создания вымышленных карт (там пишут, что WorldMachine), для создания реальной карты нужны реальные карты высот. Скачать их можно там (в формате HGT) или там (в формате GeoTiff). Для преобразования их в изображение нужна программа Global Mapper (лучше всего 15 версия, т.к. она есть на русском языке).

    Рассмотрим на примере карты "Сахалин":

    По первой ссылке файлы HGT имеют название типа N45E140.hgt. N45 - 45° северной широты, E140 - 140° восточной долготы.

    Скачиваем нужные файлы, открываем их в программе Global Mapper 15:

    d58d3e9e0eca.jpg

    Делаем карту чёрно-белой:

    077de1c6089e.jpg

    Сохраняем в формате изображения: Файл - Экспорт - Экспорт Растров

    71e29f4251a5.jpg

    Выбираем формат PNG, в следующем окне снимаем галки "Создать World файл" и "Созд. файл проекции (PRJ). Галка "Сделать фоновые пиксели прозрачными" должна стоять, иначе фон будет жёлтым:

    730fdba60e3c.jpg

    Сохраняем, получаем файл PNG размером 6001х12001 пикселей. Открываем его в фотошопе, сравниваем со спутниковой картой (это нужно делать потому что наша карта может быть немного сжата по вертикали, в таком случае растягиваем):

    8cdf249c26fb.jpg

    Заливаем прозрачные участки чёрным, подгоняем размеры изображения под требуемые игрой (см. формулу в начале) - получаем значение 2049х7169 пикселей. Также на карте может не быть рек и озёр - их нужно нарисовать.

    Дальше эту карту загружаем в редактор карт. Подбираем минимальную и максимальную высоту так, чтобы береговая линия была похожа на реальную. Расставляем города и промышленность (если её не расставить она будет генерироваться автоматически). Задаём название карты. Скачиваем получившуюся карту.

    Другой вариант расстановки городов и промышленности - воспользоваться программой TF Map Viewer. Из неё можно брать координаты и написать файл map.lua вручную, взяв за образец файл другой карты. Этот вариант лучше для горных карт, т.к. позволяет точнее расставлять объекты.

    88573adcebe2.jpg

    В итоге должно получиться два файла - карта высот heightmap.png и текстовый файл с названием карты и описанием городов и промышленности map.lua. Их нужно поместить в отдельную папку по адресу [папка с игрой]\maps. Название папки с картой не должно содержать русских символов.

    Теперь можно загрузить карту в игре. Возможно, будут видны артефакты типа таких:

    0594b487d5f6.jpg

    Их можно убрать, применив к карте высот в фотошопе фильтр "Размытие по Гауссу...":

    8ae7374952bb.jpg

    Но, с другой стороны, после этого не останется мелких деталей. В общем, процесс окончательной доводки карты в фотошопе индивидуален для каждой карты.

    Вот, как-то так...

    10

  3. Вот содержимое файла lua от немецкой карты Gotthard 1.2:

    local towns = {
      {pos = { -2036.7272705, -3155.161155 }, name = _("Grindelwald"), sizeFactor = 0.5},
      {pos = { -882.973149, 1813.0392645 }, name = _("Gadmen"), sizeFactor = 0.7},
      {pos = { -1989.634304, 3649.6260365 }, name = _("Engelberg"), sizeFactor = 0.8},
      {pos = { -4020.894128, 7128.525986 }, name = _("Luzern"), sizeFactor = 1.8},
      {pos = { -5568.367901, -380.5273115 }, name = _("Interlaken"), sizeFactor = 1.5},
      {pos = { -3183.73773, -5479.5797655 }, name = _("Locarno"), sizeFactor = 1.5},
      {pos = { -2321.2106595, -7153.89461 }, name = _("Bellinzona"), sizeFactor = 1.4},
      {pos = { -240.9998795, -7280.73773 }, name = _("Biasca"), sizeFactor = 1},
      {pos = { 2371.9479075, -6443.5792835 }, name = _("Airolo"), sizeFactor = 0.9},
      {pos = { 1737.7364045, -7204.631858 }, name = _("Chironico"), sizeFactor = 0.6},
      {pos = { 2371.9479075, -1192.3150855 }, name = _("Wassen"), sizeFactor = 0.9},
      {pos = { 1864.5795245, -3576.947305 }, name = _("Andermatt"), sizeFactor = 1.2},
      {pos = { 2169.000964, -2308.5263475 }, name = _("Göschenen"), sizeFactor = 0.7},
      {pos = { 1230.3680215, -5352.7366455 }, name = _("Alpe di Sorecia"), sizeFactor = 0.5},
      {pos = { -5745.948269, 2892.0006025 }, name = _("Brienz"), sizeFactor = 1},
      {pos = { -5035.630894, -2384.6322195 }, name = _("Thun"), sizeFactor = 1},
      {pos = { -3615.000241, 5555.683589 }, name = _("Staans"), sizeFactor = 1},
      {pos = { -4629.737007, 4084.315688 }, name = _("Sarnen"), sizeFactor = 0.6},
      {pos = { -1027.421078, 7280.73773 }, name = _("Ennetbürgen"), sizeFactor = 1},
      {pos = { 2143.63234, 7483.6846735 }, name = _("Ingenbohl"), sizeFactor = 0.7},
      {pos = { 2752.4731705, 7712.000241 }, name = _("Schwyz"), sizeFactor = 1},
      {pos = { 7318.7886175, 5403.4738935 }, name = _("Dürrenboden"), sizeFactor = 0.6},
      {pos = { 5492.2640775, 7001.6849145 }, name = _("Muothathal"), sizeFactor = 0.8},
      {pos = { 4097, 7483.6846735 }, name = _("Illgau"), sizeFactor = 0.7},
      {pos = { 3564.262993, 735.6839505 }, name = _("Gurtnelen"), sizeFactor = 0.7},
      {pos = { 5390.7895815, -2130.948028 }, name = _("Tavetsch"), sizeFactor = 0.7},
      {pos = { 6633.841915, -1927.999036 }, name = _("Muster"), sizeFactor = 0.7},
      {pos = { 7496.3689855, -1319.1582055 }, name = _("Truns"), sizeFactor = 0.9},
      {pos = { 697.6310145, -4160.42156 }, name = _("Realp"), sizeFactor = 0.5},
      {pos = { -7293.422042, -7813.4726885 }, name = _("Wohlen bei Bern"), sizeFactor = 1},
      {pos = { -7115.841674, 7712.000241 }, name = _("Emmen"), sizeFactor = 1},
      {pos = { -1940.683348, -1217.6837095 }, name = _("Frutigen"), sizeFactor = 1},
      {pos = { 6532.367419, -5606.420837 }, name = _("Blenio"), sizeFactor = 0.6},
      {pos = { 4655.105631, -7052.420114 }, name = _("Aquarossa"), sizeFactor = 0.7},
      {pos = { -5695.211021, -5555.683589 }, name = _("Bern"), sizeFactor = 2},
      {pos = { 3817.9471845, 6063.051972 }, name = _("Unterschächten"), sizeFactor = 0.8},
      {pos = { -824.4741345, 5099.052454 }, name = _("Horbis"), sizeFactor = 0.6},
      {pos = { -520.052695, -329.7900635 }, name = _("Kandersteg"), sizeFactor = 0.9},
      {pos = { -1991.420596, 2105.579404 }, name = _("Innertkirchen"), sizeFactor = 1},
      {pos = { -2042.157844, 6088.420596 }, name = _("Wolfenschiessen"), sizeFactor = 1},
      {pos = { 2625.632099, 6063.051972  }, name = _("Altdorf"), sizeFactor = 1},
      {pos = { 4071.631376, 4109.684312 }, name = _("Bristen"), sizeFactor = 0.7},
      {pos = { 2651.000723, 4718.527191 }, name = _("Erstfeld"), sizeFactor = 1},
      {pos = { -200.1404985, 7911.4483465 }, name = _("Vitznau"), sizeFactor = 0.6},
      {pos = { -7805.4917325, -2072.045459 }, name = _("Habkern"), sizeFactor = 0.6},
      {pos = { -7405.2107355, -5133.0227295 }, name = _("Eggiwil"), sizeFactor = 0.6},
      {pos = { -7876.130158, 3437.7128085 }, name = _("Flühli"), sizeFactor = 0.6},
      {pos = { 812.336772, 7040.247927 }, name = _("Beckenriedt"), sizeFactor = 0.5},
    }
    
    local industries = {
      {pos = {5669.842397, 3678.421801 }, fileName = "industry/coal_mine.con" },
      {pos = { 1350.749, 4231.261 },  fileName = "industry/coal_mine.con"},
      {pos = { -4604.368383, -7813.4726885 }, fileName = "industry/coal_mine.con" }, 
      {pos = { 7546.485538, -2354.5971125 }, fileName = "industry/coal_mine.con"},
      {pos = { 537.045, 2376.016 }, fileName = "industry/iron_ore_mine.con"},
      {pos = { -7521.7376095, -329.7900635 }, fileName = "industry/iron_ore_mine.con"},
      {pos = { 2803.2104185, -7432.9474255 }, fileName = "industry/iron_ore_mine.con"},
      {pos = { -6735.316411, 3881.3687445 }, fileName = "industry/forest.con"},
      {pos = { -3665.737489, -3703.790425 }, fileName = "industry/forest.con"},
      {pos = { -3010.705, 2506.209 }, fileName = "industry/forest.con"},
      {pos = { -7623.210057, 6494.3165315 }, fileName = "industry/quarry.con"},
      {pos = { 6184.151, -7827.833 }, fileName = "industry/quarry.con"},
      {pos = { 5175.158, -7713.915 }, fileName = "industry/quarry.con"},
      {pos = { -6265.521, -3808.135 }, fileName = "industry/oil_well.con"},
      {pos = { 5822.0520925, 1141.579886 }, fileName = "industry/oil_well.con"},
      {pos = { -4756.5780785, 6240.63234 }, fileName = "industry/farm.con"},
      {pos = { -4198.474496, 2866.6319785 }, fileName = "industry/farm.con"},
      {pos = { 3417.557, 7486.077 }, fileName = "industry/farm.con"},
      {pos = { -4807.3153265, -6367.4734115 }, fileName = "industry/farm.con"},
      {pos = { -1864.5795245, -4870.7368865 }, fileName = "industry/farm.con"},
      {pos = { -3889.505, -5386.721 }, fileName = "industry/saw_mill.con"},
      {pos = { -1991.420596, 7001.6849145 }, fileName = "industry/saw_mill.con"},
      {pos = { -5720.579645, -5022.946582 }, fileName = "industry/steel_mill.con"},
      {pos = { -3889.505, 7681.366 }, fileName = "industry/steel_mill.con"},
      {pos = { -4133.617, 960.171 }, fileName = "industry/food_processing_plant.con"},
      {pos = { -5872.7893405, 2663.685035 }, fileName = "industry/food_processing_plant.con"},
      {pos = { -4556.146693, -2566.512389 }, fileName = "industry/food_processing_plant.con"},
      {pos = { -4182.439, 4735.758 }, fileName = "industry/goods_factory.con"},
      {pos = { 7941.752, -1188.008 }, fileName = "industry/goods_factory.con"},
      {pos = { -6126.473532, -279.0528155 }, fileName = "industry/machines_factory.con"},
      {pos = { 6005.136, 6997.855 }, fileName = "industry/machines_factory.con"},
      {pos = { -7095.500, -6770.018 }, fileName = "industry/construction_material.con"},
      {pos = { 718.1528875, 6616.4194225 }, fileName = "industry/construction_material.con"},  
      {pos = { -4019.698, -911.349 }, fileName = "industry/oil_refinery.con"},
      {pos = { 113.919, 276.659 }, fileName = "industry/chemical_plant.con"},  
    }
    
    function data() return {
      authors = {
        { 
          name         = '',
          role         = 'CREATOR',
          steamProfile = ''
        }
      },
      name  = _('Gotthard'),
      description = _(''),
      minGameVersion = '10000',
      range = {90, 2500 },
      seed = 'Gotthard',
      --startDate = { year = 1850, month = 01, day = 01 },
      tags  = {'map'},
      towns = towns,
      industries = industries
    } end

    Как я понимаю, для городов указаны координаты, название и размер, для производств - координаты и тип.

    0