Галерея

civbe_screen14 Терракотовая армия Камеамеа (Полинезия) Статуя Свободы

Как создать собственный DLL для Civilization 5

Microsoft Visual StudioИтак, разработчики выпустили исходный код Sid Meier’s Civilization V, с помощью которого мы сможем создавать продвинутые модификации игры, например вернем разум Искусственному Интеллекту. Для создания модов необходимо изменять исходные файлы кода и затем компилировать свой собственный DLL. Рассмотрим техническую сторону вопроса и с помощью коллег с CivFanatics попробуем скомпилировать «чистый» DLL, и убедимся, что игра воспринимает его как «родного». Что для этого нужно сделать?

1. Установите набор инструментов Sid Meier’s Civilization V SDK.
— В клиенте Steam — Библиотека — Инструменты — Sid Meier’s Civilization V SDK — Установить игру…

2. Установите Экспресс-выпуск Visual C++ 2008 с пакетом обновления 1 (SP1)
— Загрузите установщик Visual C++ 2008 экспресс с сайта Microsoft (вам нужен второй файл, vcsetup.exe)
— Запустите установщик Visual C++ 2008 экспресс, при выборе установки загружать предлагаемые дополнительные элементы необязательно

3. Скопируйте папку C:\Program Files (x86)\Steam\SteamApps\common\sid meier’s civilization v sdk\CvGameCoreSource в каталог Мои Документы\Visual Studio 2008\Projects. Работайте с папкой CvGameCoreSource по этому адресу!


4. Откройте в Блокноте файлы:
а) CvGameCoreSource\CvGameCoreDLL\CvGameCoreDLL.rc
б) CvGameCoreSource\CvGameCoreDLL_Expansion\CvGameCoreDLL.rc
Найдите все значения afxres.h и замените их на windows.h.

5. Откройте в Блокноте файл CvGameCoreSource\CvGameCoreDLL_Expansion\CvGameCoreDLL_Expansion1.vcproj

a) Найдите строку
CharacterSet="2"
и замените ее на

CharacterSet="2"
WholeProgramOptimization="1"

б) Найдите строку
DelayLoadDLLs=""
и замените ее на
ModuleDefinitionFile="$(ProjectDir)CvGameCoreDLL.def"
DelayLoadDLLs=""

6. Откройте в Блокноте файл CvGameCoreSource\CvGameCoreDLL_Expansion\CvGameCoreDLL_Expansion1.vcxproj

а) Найдите строку:
<CharacterSet>MultiByte</CharacterSet>
и замените ее на

<CharacterSet>MultiByte</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>

б) Найдите строку
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
и замените ее на
<ModuleDefinitionFile>$(ProjectDir)CvGameCoreDLL.def</ModuleDefinitionFile>
<DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>

7. Запустите Экспресс-выпуск Visual C++ 2008
Меню Файл -> Открыть -> Решение или проект…
Откройте файл CvGameCoreSource\CvGameCoreDLL.vs2008.sln

8. В «Обозревателе решений» нажмите правой клавишей мышки на CvGameCoreDLL
Меню Свойства -> Свойства конфигурации -> Компоновщик -> Общие
Установите значение выходного файла как «$(OutDir)\CvGameCoreDLLFinal Release.dll» (копи-паст)

9. В «Обозревателе решений» нажмите правой клавишей мышки на CvGameCoreDLL_Expansion
Меню Свойства -> Свойства конфигурации -> Компоновщик -> Общие
Установите значение выходного файла как «$(OutDir)\CvGameCore_Expansion1.dll» (копи-паст)

10. Сохраните все (Меню Файл -> Сохранить все).

11. Создаем DLL. (Меню Построение -> Построить решение)
Если вам нужен только один DLL, например для аддона, нажмите на CvGameCoreDLL_Expansion1 правой клавишей и постройте решение.

12. Если все прошло удачно, готовые DLL можно найти в папке CvGameCoreSource\BuildOutput.

13. Чтобы проверить работоспособность, скопируйте файл CvGameCoreDLL_Expansion1.dll в основную папку C:\Program Files (x86)\Steam\steamapps\common\sid meier’s civilization v\Assets\DLC\Expansion
— Будьте внимательны! Предварительно сохраните отдельно оригинальный файл CvGameCoreDLL_Expansion1!
— Запустите игру. Если GaK запустился, значит все ок и пора создавать DLL с реальными изменениями)

14. Чтобы добавить скомпилированный DLL в мод, поместите CvGameCoreDLL_Expansion1.dll в основной каталог мода
— В программе ModBuddy (часть SDK) нажмите правой клавишей мышки на CvGameCoreDLL_Expansion1.dll и в свойствах файла отметьте «Import into VFS» как «true».

Удачи в нелегком, но увлекательном деле модостроения!

NeverMind,
благодаря DaveMcW на CivFanatics

29 comments to Как создать собственный DLL для Civilization 5

  • Логотип 2010-ой VS у новости (не 2008).
    С VS 2010, VS 2012, кстати, работать не будет?

  • Nevada

    NeverMind, можете что-то сказать по поводу следующего?

    Намедни установил мод для огромной карты земли, которую несколько месяцев назад выложили в мастерскую Стима. Данный мод, используя исходный код, позволяет вводить в игру не 22 цивилизации как обычно, а все имеющиеся 34. Я взялся эту карту через стимовское приложение SDK WorlgBuilder немного откорректировать — установить свои места появления цивилизаций — однако к сожалению обнаружил, что добавить возможно не 34, а по-старому лишь 22 цивы. Я так понимаю нужен какой-то апгрейд для самого SDK WorlgBuilder, дабы он позволял устанавливать более чем 22 цивы.

    NeverMind, можете подсказать как это осуществить? Есть какая-либо идея? спасибо.

    • Daemon Daemon

      Сыграть партию на карте Земли с 34 цивилизациями — моя мечта. *_*
      Если это получится, обязательно напишите об этом.

      • Nevada

        Непременно напишу! Карта просто одиозная (кстати называется Yet another giant earth map, если не ошибаюсь). Вот только осталось решить вопрос с модернизацией ВорлдБилдера. на ИхФанатиках посмотрел — ничего не нашел. В Стиме в каментах у автора мода кто-то задал подобный вопрос, но ответ мутный какой-то…даже не помню что там написано. После работу посмотрю снова, может я с переводом не разобрался..

  • Товарищ Катц

    А есть средь уважаемой публики хорошие програмисты? 🙂 Сделайте возможность дать городу независимость 🙂 Желательно вплодь до того что бы своим родным городам давать независимость и превращать их в города государства 🙂 а в зовисмости отпреобладания вида построек, определять тип города (много по пище и уводы портовый, много построено для денег торговы и т.д.) Я думаю это не сложно реализовать. И кто знает это баг или такое ограничение когда войско не может напасть на вражеский гарнезон находясь в городе?

    • Интересная идея. В принципе для использования игроком реализовать наверняка можно, хотя надо разбираться, каким образом добавлять новую команду (ГГ) в уже идущую партию.

      Про баг не понял O_o

      • Товарищ Катц

        Баг такой, направляешь войско на атаку, путь для нападения находится через свой город, отряд заходит в город, и от туда напрямую атака не возможна, приходиться выходить из города и нападать.

  • Rider

    Все хочу узнать когда появится возможность играть сценарий GoK по сети ???
    И как это можно сделать ?

  • Командор Шран

    NeverMind, коли код открыт то не мог бы ты выложить фразы лидеров из рейтинга «Вы добились того что и …» — разгребал игру через «Блокнот» и ничего.

    • Да пожалуйста. Все эти тексты находятся в файле CIV5GameTextInfos_Jon.xml.

      1. Октавиан Август: Я принял Рим кирпичным, а оставил его мраморным.
      2. Хаммурапи: Когда Мардук направил меня, чтобы справедливо править людьми и дать стране счастье, тогда я вложил в уста страны истину и справедливость и улучшил положение людей.
      3. Авраам Линкольн: Всегда помни, что твое собственное суждение важнее, чем любое другое.
      4. Карл Великий: Пусть мои войска станут камнями, и деревьями, и птицами в небесах.
      5. Уинстон Черчилль: Пессимист видит трудности при каждой возможности; оптимист в каждой трудности видит возможность.
      6. Нельсон Мандела: Все кажется невозможным, пока оно не сделано.
      7. Марк Аврелий: Если что-то кажется тебе слишком трудным, не думай, что это за пределами сил человека.
      8. Жанна д’Арк: Я не боюсь… Я была рождена для этого.
      9. Шарль де Голль: Перед лицом кризиса сильный человек полагается на себя самого. Он действует и принимает на себя ответственность за свои действия.
      10. Симон Боливар: Мудрость приходит с опытом, а опыт появляется от недостатка мудрости.
      11. Лех Валенса: Тот, кто пытается остановить колесо истории, только сломает себе пальцы.
      12. Иван Грозный: К тому же меня сильно заботят государственные дела, постоянные войны с врагами и благо моего бедного народа.
      13. Генрих VIII: Боже, если бы это не было в интересах мира и моего королевства, я бы ни за какие блага не сделал того, что должен сделать сегодня.
      14. Герберт Гувер: Блаженны молодые, ибо они унаследуют национальный долг.
      15. Людовик XIV: Подслушивающие никогда не услышат о себе ничего хорошего.
      16. Невилл Чемберлен: Кто бы ни объявил себя победителем, в войне не бывает выигравших — только проигравшие.
      17. Эндрю Джексон: Нет никакого удовольствия в отсутствии работы. Удовольствие в том, чтобы иметь горы работы и не делать ее.
      18. Нерон: Какой актер умирает!
      19. Уоррен Г. Гардинг: Где-то должна быть книга, в которой написано, как привести в порядок свои мысли. Но я не знаю, где эта книга, и вряд ли смог бы прочитать ее, если бы нашел.
      20. Этельред Неразумный: Да, только пять минут, ладно?
      21. Дэн Куэйл: Если мы не преуспеем, то рискуем потерпеть неудачу.
  • Командор Шран

    NeverMind, это твой сайт, но не мог бы ты позволить игрокам выкладывать моды и карты к игре как на «http://forums.civfanatics.com/downloads».А ты уж отобрав интересные сохранял их на форуме для загрузки.

    • Да я же только за)
      Но на самом деле желающих что то делать не так много, а просто дублировать то, что есть в Workshop или на CivFanatics смысла не вижу. Кстати, наше модостроение можно наблюдать на наш-фанатиках.

      PS. Если будут желающие что-то выкладывать, пишите)

  • Командор Шран

    NeverMind, и снова я(Наверное уже тебе надоел ?) хочу спросить «А нельзя ли отключить счетчик в 100 ходов в сценариях «Монголы» …»Покорение Нового света» и т.д. А то только начнёшь завоёвывать и всё — Время кончается 98 ходов осталось или 99.

    • Можно. Найди файл CivsAlive.lua в папке sid meier’s civilization v\Assets\DLC\DLC_01\Scenarios\Mongol Scenario. Открой его Блокнотом, в самом начале найди строчки

      function GetVictoryValues()
        local iNumPlayers = 0;
        local iTurnsRemaining = 100 - Game.GetGameTurn();

      …поменяй 100 на большее число и сохрани.

      Это для Монголов. Для других сценариев аналогично, только файлы Lua по другому называются.

      PS. Нет, все нормально) Вопросы не надоедают, просто времени не всегда хватает, чтобы разобраться и ответить.

  • Командор Шран

    Огромнейшее спасибо !!!!!….Во всех сценариях поставил 500 ходов и всё работает.

  • Командор Шран

    Я знаю что ты — NeverMind удалишь эту запись.Но 3 дня проиграл все сценарии и осталось такое ощущение, что насытился Civilization V G&K. Мне нужно в игре нападать на голандцев, которые уже 11 ходов воюют с Датчанами по моей просьбе. Я за Изабеллу(Испания). Войска готовы, а ИНТЕРЕС вдруг пропал. Спасибо за советы.

  • pivo

    А есть возможность отключить один или несколько DLC не каждый раз кнопками в игре, а прописав какую-нибудь строчку в каком нибудь файле? Ну или другой способ не требующий каждый раз лезть в настройку? Не нашел ответ на этот казалось бы простой вопрос во всем интернете. Предлагаю прославить этот сайт подобным решением. 🙂

Leave a Reply