S.T.A.L.K.E.R. Wiki: Zone Chronicles
Advertisement
S.T.A.L.K.E.R. Wiki: Zone Chronicles


В игре История разработки ТЧ История разработки ЧН История разработки ЗП

Отменённые идеи[]

  • Планировалось, что некоторые отменённые квесты также должны были давать бонусные очки репутации:
Тип квеста Квестодатель Квест Изменение репутации
Особый Неприменимо Достать динамит для Волка +10
Особый Неприменимо Пропуск на Бар +10
Особый Неприменимо Помочь сталкеру +10
Особый Неприменимо Уничтожить безумных ветеранов +10
Особый Неприменимо Уничтожить наёмников +10
Особый Неприменимо Поговорить с командиром блокпоста «Свободы» Кэпом +30
Типовой Сидорович Найти усовершенствованный пистолет +15
Типовой Бармен Уничтожить бандитов на хуторе +40
Типовой Бармен Найти пси-костюм +30
Типовой Бармен Найти ствол иностранца +35
Типовой Бармен Найти модифицированный «Винторез» +40
Типовой Бармен Убить сталкера из группировки «Монолит» +200
Типовой Генерал Воронин Зачистить базу бандитов +40

В Build 2232 была более комплексная система отношений между персонажами разного уровня репутации: NPC с негативными значениями репутации имели бонус к отношению к другим персонажам с негативной репутацией и удар по отношению к персонажам с положительной репутацией. При этом это было применимо как к другим NPC, так и к игроку. Таблица взаимоотношения сталкеров в зависимости от репутации приведена ниже:

Ужасно Очень плохо Плохо Нейтрал Хорошо Очень хорошо Отлично
Ужасно 1000 800 500 −200 −400 −700 −1000
Очень плохо 800 600 400 −150 −250 −400 −500
Плохо 600 300 200 −100 −100 −200 −300
Нейтрал −200 −100 −50 0 100 200 400
Хорошо −300 −200 −100 100 200 300 600
Очень хорошо −600 −300 −150 200 400 600 800
Отлично −1000 −600 −300 300 500 800 1000

В дальнейшем таблица упрощена, и каждая строка в ней стала одинаковой, сделав зависимость отношения от репутации стабильной и не зависящей от репутации NPC: чем выше репутация, тем больше бонус к отношению; чем ниже репутация — тем бонус меньше.

Ужасно Очень плохо Плохо Нейтрал Хорошо Очень хорошо Отлично
Ужасно −1000 −600 −300 0 300 600 1000
Очень плохо −1000 −600 −300 0 300 600 1000
Плохо −1000 −600 −300 0 300 600 1000
Нейтрал −1000 −600 −300 0 300 600 1000
Хорошо −1000 −600 −300 0 300 600 1000
Очень хорошо −1000 −600 −300 0 300 600 1000
Отлично −1000 −600 −300 0 300 600 1000

К релизу зависимость отношения от репутации была полностью удалена путём выставления всех значений в таблице в 0.

История создания[]

Имплементацией механики в игровом движке занимался, главным образом, Юрий Добронравин. В начале сентября 2004 года им был создан новый тип данных для хранения репутации[⇨], а в ноябре — базовая логика работы с ней у игрового движка[⇨].

Дальнейшую работу над механикой в 2006 году проводил Руслан Диденко. В конце января, в ходе создания системы типовых квестов, он реализовал возможность менять им репутацию[⇨] и сделал ряд тестовых заданий[⇨], реализующих эту особенность. Сразу по завершении имплементации системы и проверки тестовых квестов, в феврале того же года, вместе с Вячеславом Аристовым он начал создание полноценных типовых заданий, предназначенных для вставки в игру (Вячеслав сделал квесты для Сидоровича, а Руслан — для Бармена, Сахарова, Лукаша и генерала Воронина), в том числе настраивая награду за них в виде бонуса репутации.

В конце месяца Диденко реализовал бонус к репутации главного героя за лечение NPC аптечкой[⇨].

Программирование[]

Список изменений (character_info_defs.h)
Дата Разработчик Изменения Примечание
2004 год
2 сентября 16:54 3 Юрий Добронравин Создан новый тип CHARACTER_REPUTATION, представляющий собой целочисленую 32-битную переменную (псевдоним типа int). Также создана константа NO_REPUTATION для недействительного значения репутации, и ей было дано значение -1. Над кодом был создан комментарий со следующим текстом: «репутация персонажа - величина от 0 (очень плохой, беспредельщик) до 100 (очень хороший, благородный)» Создан тип данных для дальнейшей работы с репутацией в других файлах.
14 октября 11:30 6 Текст в коммментарии был изменён на следующий: «репутация персонажа - величина от -100 (очень плохой, беспредельщик) до 100 (очень хороший, благородный)» Указание минимального значения репутации было изменено с 0 на -100.
27 октября 18:59 9 Была создана новая константа NEUTRAL_REPUTATION (стандартная нейтральная репутация) со значением 0, а значение константы NO_REPUTATION (недействительная репутация) было изменено на отрицательное максимальное число, поддерживаемое типом (-2147483647).
1 ноября 18:41 10 Весь связанный с репутацией и рангом код был перемещён ниже в файле, под связанный с отношением код. В процессе переноса по неизвестным причинам константа NEUTRAL_REPUTATION была переименована в NEUTAL_REPUTATION Техническое изменение, на работу кода не влияет.
Список изменений (specific_character.cpp|h)
Дата Разработчик Изменения Примечание
2004 год
2 сентября 16:54 1 (cpp)
1 (h)
Юрий Добронравин Создана система хранения уникальных данных (включая репутацию) конкретных игровых персонажей; система подгрузки этой информации из профилей в XML-файлах и значения структуры по умолчанию (для репутации ей служит константа NO_REPUTATION).
Список изменений (character_reputation.cpp/h)
Дата Разработчик Изменения Примечание
2004 год
1 ноября 18:41 1 (h)
1 (cpp)
Юрий Добронравин Создана базовая логика работы игрового движка с репутацией. Созданы файлы character_reputation.cpp и character_reputation.h.
8 ноября 13:04 2 (cpp) Вызов set_table_sect() был переименован в set_table_params() в связи с переименованием метода в ini_table_loader.cpp/h.
Было добавлено определение статической переменной m_relation_table.
Техническое изменение, на работу кода не влияет.
Исправлена ошибка компиляции.
10 ноября 18:29 3 (cpp) Был произведён рефакторинг: выход из цикла в функции ValueToIndex() при нахождении подходящего значения был заменён на возвращение текущего значения счётчика, а возвращение последнего известного значения счётчика в конце метода было заменено на возвращение самого большого возможного значения репутации. Техническое изменение, на работу кода не влияет.
11 ноября 18:43 4 (cpp) Юрий Добронравин Пороги репутации перестали приводиться к формату u8 (незнаковое 8-битное число). Переходные значения репутации стали поддерживать любые значения в промежутке от -2147483648 до 2147483647 вместо значений от 0 до 255.
30 ноября 16:36 2 (h) Функция ValueToIndex() сделана статичной. Техническое изменение, на работу кода не влияет.
2005 год
21 ноября 13:48 3 (h)
5 (cpp)
Андрей Коломиец Произведён рефакторинг функции ValueToIndex().
Имплементация функций value() и index() была перемещена из .cpp-файла в .h-файл.
Техническое изменение, на работу кода не влияет.
21 ноября 18:19 4 (h)
6 (cpp)
Имплементация конструктора и деконструктора класса была перемещена из .cpp-файла в .h-файл. Техническое изменение, на работу кода не влияет.
Список изменений (dialogs.script)
Дата Разработчик Изменения Примечание
2006 год
22 февраля 14:47 70 Руслан Диденко В функцию transfer_medkit() был добавлен вызов метода change_character_reputation() по отношению к протагонисту со значением первого аргумента в 10. Передача аптечки раненому NPC начала давать бонус в 10 очков репутации.
Список изменений (task_manager.script)
Дата Разработчик Изменения Примечание
2006 год
25 января 16:41 5 Руслан Диденко В функцию fill_phrase_table() добавлено чтение параметра конфигурационных файлов reward_reputation.

Создана функция action_task_reward(), в которой был добавлен вызов метода change_character_reputation(), если значение reward_reputation заполнено.

Добавлена техническая возможность создания типовых заданий с репутацией в качестве награды.
Добавлена выдача награды за сдачу типового задания, включая репутацию.
26 января 11:13 6 В функции action_task_reward() было добавлено повторное чтение репутации как таблицы с целью начисления бонуса к отношениям группировок исходя из ключей таблицы. Однако код внутри цикла начал содержать лишь закомментированное название функции по изменению отношения (change_community_goodwill()), а над ним был добавлен коммментарий: «TODO: Вставить нормальное изменение отношения». Код содержит ошибку: функция должна читать не строку репутации (которая не является таблицей), а строку отношения. Репутация там упоминается, скорее всего, исключительно ввиду ошибки копирования.
26 января 15:48 7 В функции action_task_reward() в цикле анализа бонуса к отношениям группировок комментарий и закоментированное название функции были изменены на три вызова функции relation_registry.change_community_goodwill(), где в качестве группировки, чьё отношение должно было измениться, использовались ключи таблицы, а в качестве количества, на которое должно измениться отношение — значения таблицы. При этом каждый вызов содержал одну из трёх возможных группировок игрока: actor, actor_dolg, actor_freedom. Функция продолжила ошибочно читать строку репутации вместо таблицы отношения.
26 января 21:27 8 В функции action_task_reward() цикл анализа бонуса к отношениям группировок перестал ссылаться на репутацию, начав читать таблицу отношения.

Конфигурационные файлы[]

Список изменений (task_manager.ltx)
Дата Разработчик Изменения Примечание
2006 год
25 января 16:41 5 Руслан Диденко В секцию tm_eliminate_test_lager была добавлена строка reward_reputation со значением -50. Тестовому квесту «Уничтожение лагеря „Свободы“ на тесте» категории «Уничтожение лагеря» был выдан удар репутации в 50 очков.
26 января 21:27 6 Была создана новая секция tm_artefact_vyvert, в которой была добавлена строчка reward_reputation со значением 10. Был создан новый тестовый квест «Добыть артефакт „Выверт“» категории «Добыть артефакт», которому был дан бонус репутации в 10 очков.
28 января 17:27 7 Были созданы 3 новые секции: tm_kill_svoboda_master, tm_find_boar_leg, tm_find_quest_item, каждому из которых была добавлена строчка reward_reputation со значением 10. Были созданы три новых тестовых квеста из категорий «Убить сталкера» («Уничтожить сталкера „Свободы“»), «Добыть часть тела монстра» («Принести ногу кабана») и «Найти предмет» («Найти квестовый предмет»). Каждому был дан бонус репутации в 10 очков.

Примечания[]

Advertisement