
Сообщение от
NeseryozniyVET
MAX_NUM_SYMBOLS как и все остальные MAX_NUM_enums, вроде, используются только в DLL. Поэтому новые энумы нужно добавлять до MAX_NUM_enums. То есть, MAX_NUM_enums должен быть всегда в конце списка.
Новые строки с
Код:
BIRTHPOINT_CHAR,
WAREHOUSE_CHAR,
я прописал неподсредственно над строкой с
Код:
#ifdef _USRDLL
MAX_NUM_SYMBOLS
#endif
Про эти "грабли" я помню, так как частенько на них наступал, поэтому тут все было сделано правильно.
А MAX_NUM_SYMBOLS я нашел в ехе файле, когда открыл его в Notepad++. Информации конечно это дало немного, но внутри по крайней мере было упоминание о MAX_NUM_SYMBOLS. Собственно поэтому я и предположил о максимально возможном количестве символов.
Кроме того, на их-фанатиках упоминалось о максимальном количестве бонусов, которые можно добавить. Если память мне не изменяет, то называлась цифра в 72. Если специально не изголяться, то можно ввести только 72 бонуса. Умельцы правда в каком-то из модов смогли обойти и это ограничение.

Сообщение от
NeseryozniyVET
Если хочешь использовать новые иконки в текстовых файлах, то надо редактировать CvDllTranslator.cpp. Там изменения элементарные - сам догадаешся.
Все верно, CvDLLTranslator.cpp и CvDLLTranslator.h довольно просты для понимания и редактирования. Но есть одно небольшое "но". Они отсутствуют среди исходных кодов Колонизации. Оба эти файла есть в CivIVBTS, но их нет в CivIVColonization.
Последняя версия Колонизации - это сильно кастрированаая Цивилизация 4 BTS. Как оказалось, CvDLLTranslator.cpp и CvDLLTranslator.h файла пали жертвой как раз этой операции, а их функцию разработчики перенесли в оставшиеся исходные коды. Перенесли судя по всему не совсем удачно, поскольку при введении малейших изменений система иконок начинает давать сбои. Одним из таких сбоев был "hammer bug", когда при увеличении количество yields в игре исчезал значок "молотка". Примерно то же самое случилось и с иконкой рождаемости.
Но в обоих случаях лекарство от этих граблей уже найдено. Сейчас и "молоток" и "рождаемость" отображаются правильно и поэтому пока наверное нет смысла возвращать CvDLLTranslator.cpp и CvDLLTranslator.h.

Сообщение от
NeseryozniyVET
В моем моде все месторождения генерируются при создании карты, только они не видны. Чтоб увидеть месторождение надо чтоб на тайле накопились очки геологии. С помощью юнита накапливать очки геологии очень просто - начисляем их на тайл где стоит юнит. У меня очки геологии генерирует город и начисляет их на тайл с самым маленьким количеством этих очков. Все эти большие и сложные алгоритмы сделаны для максимально быстрого нахождения этого тайла.
Большое спасибо за пояснение. Механику открытия месторождений в EoW я представлял довольно близко, но не совсем так, как ты описал. Твой вариант с открытием месторождений прекрасно подходит для Цивилизации, когда у тебя временной промежуток исчисляется тысячелетиями. В этом случае месторождения железа или алюминия, естественно не нужны дикарям, бегающим с палкой или камнем за мамонтом за 2 тысячелетия до нашей эры.
В Колонизации же временной интервал сжат до 3-4-х сотен лет. Поэтому все месторождения, сгенерированные на материке на первом ходу, должны быть сразу видны. Это необходимо игроку для выбора оптимального места расположения своих городов. Запас в месторождении я рассчитываю так, чтобы истощение наступало во второй половине игры. Таким образом, где-то к середине игры появляется необходимость открытия новых запасов руды.
После длительных поисков, массы экспериментов в Blender и NifScope мне удалось-таки сделать юнит "Старатель". В качестве "Старателя" мне нужен был "некий юнит + навъюченная лошадь". "Юнит на коне" мне не подходидил по целому ряду причин. Среди файлов Цивилизации 4 BTS удалось найти "великого торговца", где был именно "юнит + навьюченный верблюд", но верблюд как-то плохо смотрится в Сибири или в дебрях Амазонки. Поэтому поиск пришлось продолжать довольно долго. Плюс разбираться с нуля с анимацией юнитов, чем я вообще никогда не занимался. В общем, пока удалось собрать такого "Старателя". Обе части (человек и лошадь) двигаются синхронно, у лошади в качестве багажа - мешки, оружие, лопата и кирка.
Пока в NifScope он выглядит так

и в игре

"Старателя" я еще не прописал в файлах, но это по задумке должен быть очень дорогой юнит, который можно только купить в Европе. Этот юнит должен быть вооружен для защиты от диких зверей, туземцев или европейцев из других стран в состоянии войны. Он должен иметь запас инструментов для ведения изысканий. И наконец "Старатель" должен иметь лошадь, чтобы не тащить все это на своем горбу.
Именно "Старателю" будет поручена задача поиска месторождений. Как именно? Пока сказать трудно. Теоретически есть несколько вариантов решения этой проблемы.
1. Через систему случайных событий, как это было сделано для скаута. Но в отличие от скаута, который может найти только россыпные месторождения золота, серебра и драгоценных камней (пока не введены), старатель сможет открывать также и рудные месторождения.
Для этого старателю нужно дать команду на перемещение по карте. Такая команда в игре уже есть, ей соответствует кнопка "Explore". В принципе, перевод еxplore на русский дает как минимум два варианта. Это "исследование местности", но это и "поиск полезных ископаемых". Так что вводить новую кнопку типа "Prospect" вряд ли стоит. В данном варианте "Старатель" будет просто перемещаться по карте и на каждой клетке у него есть очень маленький шанс найти что-то полезное.
Или напротив жестко прописать, что первое месторождение он открывает, к примеру, на 10 ходу, второе на 50, третье на 100, и т.д. Мне кажется это тоже можно сделать через систему случайных событий.
Однако при выполнеии команды "Explore" есть пара неприятных моментов.
Во-первых, юнит, получивший эту команду, перемещается до тех пор, пока на карте еще есть неоткрытые клетки. Скаут, который открыл все сухопутные клетки на карте, просто останавливается. Отсюда следует, что "Старатель" тоже в какой-то момент остановится. Но, как я уже сказал выше, старатель - очень дорогой юнит и потребность в нем возникает к середине игры, а значит большинство клеток на карте к этому времени может быть уже открыто. То есть команда "Explore" работать у старателя уже не будет.
Если порыться в исходных кодах, то можно найти это ограничение на перемещения после открытия всех клеток. Мне кажется, что оно здесь:
CvTeamAI.cpp:
Код:
bool CvTeamAI::AI_isExploringNeeded(CvUnit* pUnit) const
....
if (iUnrevealedLandPlots == 0)
{
return false;
}
.....
Если просто закрыть этот участок кода, то тогда абсолютно все юниты, получившие команду "Explore", будут двигаться вечно, что безусловно плохо. Поэтому я хочу попробовать такой вариант:
Код:
//KJ Prospector START
//UNIT_PROSPECTOR must continue to explore territory even if all tiles are revealed (iUnrevealedLandPlots == 0).
// original closed by KJ as test START
/*
if (iUnrevealedLandPlots == 0)
{
return false;
}
*/
// original closed by KJ as test END
if (iUnrevealedLandPlots == 0)
{
//here UNIT_PROSPECTOR must have number 30 in CIV4UnitInfos.xml. Calculation starts from 0.
if (pUnit->getUnitType() == 30) //OK with compilation, must be tested ingame
{
return true;
}
else
{
return false;
}
}
//KJ Prospector END
Здесь логика простая. Если юнит, выполняющий команду "Explore", наш старатель (UNIT_PROSPECTOR), то он продолжает исследования. Если это любой другой юнит - то дальнейшие исседования карты невозможны. Профессиональных программистов прошу не морщиться. Да, тут жестко прописан конкретный юнит, но мне так проще, пусть это категорически не принято среди профи. По крайней мере такой вариант я могу скомпиллировать без проблем.
2. Второй возможный вариант поиска месторождений старателем через цепочку "Старатель" => "Лагерь старателя" => открытие месторождения. Но это опять таки будет работать через систему случайных событий, где пара "Старатель" + "Лагерь старателя" с некой вероятностью открывают месторождения. Это более логичное решение, поскольку на поиск месторождения должно тратиться время в 4-6 ходов, пока лагерь есть на карте. Этот вариант - пока лишь на уровне идеи, поскольку в принципе ясно как сделать лагерь за 1 ход, но как из лагеря сделать снова старателя с лошадью через 4-6 ходов, пока не совсем понятно.
3. И наконец третий вариант открытия месторождений - через "MISSION_PROSPECT" (от слова "prospect" - проводить разведку, искать полезные ископаемые). Это наиболее сложный вариант, поскольку в нем нужно прописывать не только миссию (что несложно), но и в CvUnit.cpp писать новые разделы CvUnit::canProspect... и bool CvUnit:: prospect..., что находится далеко за пределами моих возможностей. Однако и тут открытие месторождения должно быть случайным, то есть фактически таким же как и для случайных событий, описанных в вариантах 1 и 2.
В общем, необходимо подумать, как лучше решить вопрос с открытием месторождений....

Сообщение от
RadialBlur
Впечатления, конечно, непередаваемые, выглядит роскошно.
Но такой смешной вопрос: обновлялся ли первый пост с адресом мода, и лежит ли там его актуальная версия?
Я тут с таким огромным удовольствием вспоминаю старенькую игрушечку, захотел, конечно, попробовать установить и здешнее счастье, и, откровенно говоря, смущает отсутствие каких-либо дат в первой записи здесь (обычно на форуме при редактировании внизу добавляет плашку с датой редактирования, а тут не вижу).
Собственно, лежит ли там последний билд, и где его взять, если его там нет?
Необходимо дать небольше пояснение. Мод "1492: Глобальная Колонизация", обсужение которого ведется в этой теме, представляет собой компилляцию массы маленьких MODCOMP (под-модов). Каждый из таких MODCOMPов достаточно прост и касается лишь одного из новшеств. Это делается специально для выявления и устранения возможных багов, связанных в введением именно данного новшества.
В первом посту этой темы есть (или наверное точнее была) ссылка на одну из составляющих мода "1492: Глобальная Колонизация", а именно на "1492: Global Colonization. Resource Pack". Как следует из данного там описания в "Resource Pack" введены новые товары, новые професии и т.д. Тестирование показало ошибки и недоработки, за что особое спасибо всем попробовавшим и написавшим в этой теме. В конечной версии мода все они будут исправлены.
Но "1492: Global Colonization. Resource Pack" - это только маленькая часть того, что должно быть включено.
Уже сейчас можно наверняка сказать, что точно будет включено:
- масса новых ресурсов, профессий, зданий, улучшений,
- исчерпаемые минеральные ресурсы,
- восполнимые животные и растительные ресурсы,
- рост население города в Новом Свете через параметр рождаемости в нем, а не через избыток еды.
- погодные условия на суше и море.
И многое-многое другое, в том числе работорговля, пиратство, игра на глобальной карте Земли и т.д., что еще предстоит доработать прежде, чем вносить в финальную сборку.
Снимки, приведенные в моем последнем сообщении на этой странице, сделаны из мода, где включены как минимум 4 MODCOMPа ("Новые колонисты", "1492: Золотая лихорадка", "1492: Закон и порядок", "Радиус города на 2 клетки"). Эту сборку я тестирую и пока не выявил критических сбоев.
В конечном виде мод "1492: Глобальная Колонизация" пока отсутствует и поэтому нигде не публиковался. Однако все составные части будущего мода доступны и любой желающий может уже сейчас собрать из них свой вариант игры.