Pull to refresh

Comments 24

Может, дизайнеры и хотели не «ждите неделю», а «приходите на следующей неделе?»
Если обычные здания на карте пополняются каждую неделю, то почему таверна должна работать по-другому?
Аналогия с мельницей? Возможно. Правда, тогда всё равно нельзя было бы нанять двух героев на второй неделе. Только вместо счётчиков числа дней нужен был бы флаг, что на этой неделе найм уже был/не был, сбрасывающийся в начале каждого понедельника. Но это был бы совсем другой код.
Приведенный код — хороший пример того, как не надо писать. Зачем заводить две сущности — флаг доступности таверны и число дней с момента покупки героя, когда достаточно одной — числа дней? Из-за этого код и получается запутанным и в нем легко ошибиться. С одной сущностью (числом дней) логика была бы гораздо проще и ошибиться в ней было бы гораздо сложнее.
Но к самому патчу это, конечно, не имеет отношения. Понятное дело, что приходится работать с тем, что есть :)

Видимо, доступность таверны определяется не только числом дней, а ещё и какими-то событиями сценария

Если так, тогда не факт, что и ваш патч правильный, т.к. он вполне может изменить задуманную логику совместной работы этого флага, выставленного другими способами, и сброса через количество дней.
Патч не мой, но в целом — да, сложную логику одним байтом не исправить. С другой стороны, в реальных сценариях вся эта логика вряд ли часто используется, можно ей пожертвовать ради такого.

Можно купить героя на 7 день 1 недели и затем купить ещё одного на 1й день 2 недели. Нужен только флаг "куплен на этой неделе?"

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

Ваша правда, увидел на картинке с всплывающим окошком

Расскажите о багах homm 3
Разгон на быстрых существах, например )

А почему это баг? Скорость героя зависит от скорости существ, всё логично. Да, очки ходов не пересчитываются при передаче войск, но это как раз фича. В игре не задуманы очки передвижения существ, поэтому всё логично. А вот шляпа капитана и перенадевание сапог это баг, Redwhait до сих пор носит звание адмирала youtu.be/4fBaacaNeMU
это точно не баг, это скорее фича (возможно незапланированная), которая существенно расширила стратегическую часть игры
«Как известно, в данной серии игр в каждой таверне игрок может нанимать лишь одного нового Героя в неделю.» — ну в третьих это точно не так.
Никак не связано с самой статьёй, но неудержимо вспомнилось, прошу прощения за оффтоп.

Лет 10 назад я пытался пропатчить широко известную в узких кругах игру «Severance: Blade of Darkness». Я очень хотел увеличить количество оружия, которое способен носить с собой персонаж игрока. Потому что в процессе прохождения попадалось много разного интересного оружия, но в итоге приходилось брать с собой лишь несколько наиболее эффективных экземпляров. Сейчас даже и не вспомню, сколько. Кажется, четыре.

Опыт в правке чужого бинарного кода у меня был нулевой. Самое близкое — один семестр ассемблера 8086 с достаточно простыми лабами. Однако пытливый ум не знает преград; по крайней мере, так мне казалось. Поставил Иду, пошёл искать. Убил несколько дней, пытаясь понять, где задаётся количества оружия. Так и не понял. Расстроился, забил.

До сих пор мне этот эпизод не даёт покоя, периодически всплывая в памяти. Но не настолько, чтобы снова брать в руки дизассемблер. Да и игра не уверен, что пойдёт на десятке)

Думаю, ассемблером это бы не полечилось просто поменяв байты. Оружие имеет целую кучу свойств, и на него наверняка завязано куча триггеров, которые могут работать только с первыми двумя слотами. Другими словами, вам пришлось бы менять кучу логики в навес.

Зависит от того, как написан код. Я представлял себе, что в нём есть константа КОЛИЧЕСТВО_ОРУЖИЯ, инициализируется массив объектов оружия с такой длиной, и так далее, и тому подобное. И вся работа с оружием ведётся с учётом константы КОЛИЧЕСТВО_ОРУЖИЯ. Так бы я писал этот код, и я не вижу причин, по которым в этом случае мы не смогли бы пропатчить игру заменой одного байта.

Причём интерфейс игры не выглядел так, будто количество оружие захардкожено. Там для его выбора была вполне универсально выглядящая крутилка. Но, судя по всему, разработчики игры думали каким-то иным образом, нежели я.
Игра вышла в 2001 году. Тогда ещё разрабы очень экономили количество памяти, и всячески её оптимизировали, не использовали безразмерных массивов, когда от геймдизайнеров было понятно, что оружий будет всего 2 (хотя предполагаю, что к концу разработки, геймдевы захотели увеличить это число, но было уже слишком поздно). Не забывайте, что их ещё как минимум закреплять надо на персонажах (показывать положение итд), а значит тесная интеграция с графикой, а не просто «вытащить из рюкзака топор №1». Всё это чудо делать с резиновым массивом было бы как минимум больно.

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


Во многих старых играх бывает дисбаланс, вызванный то ли кривостью рук игрока, то ли тем, что его стиль игры отличается от того, который планировали разработчики и проверяли тестировщики. В любом случае, игра перестаёт приносить удовольствие, поскольку становится слишком сложна. А на уровне сложности ниже – слишком проста. Хочется иметь какую-то крутилку, чтобы уменьшить наносимый урон на 25%, скажем.


Но все имеющиеся в интернетах способы позволяют лишь получить 999999 золота и дерева и сделать персонажей бессмертными, либо требуют чрезмерных усилий в настройке. Первое напрочь лишает игру смысла, разве что, кроме сюжета; второе же работает почти идеально. Но временами бывает, что здоровье персонажа перемещается на новый адрес при переходе на новый уровень, память удаляется и выделяется заново, да и вообще, при выходе игры память возвращает ОС, и не факт, что при новом запуске на следующий день таблица адресов останется актуальной.


Временами хочется заново научиться вмешиваться в ассемблерный код через Cheat Engine, динамически искать указатели и писать подпрограммы на lua – но вспоминаешь, как больно это бывает временами, и продолжаешь заниматься чем-то другим.

В Blade Of Darkness игровая логика написана на питоне, поэтому дизассемблер не нужен.
Кажется, 10 лет назад я был дебил.

Я десять лет назад тоже о программировании знал только bind i 'impulse 101' или что-то в этом духе. :D

В древние времена у меня была русская версия Silent Hill 2 и не было интернетов. Зато был баг с кодом от сейфа. Он неправильно отображался в этой версии, уже не помню подробностей.
Интернета у меня, повторюсь, не было, зато был SoftIce и очень большое желание пройти игру. За пару дней разобрался где это место и сделал трейнер, который на лету патчит отображение кода. Сейчас просто скачал бы рабочую версию русификатора.
Sign up to leave a comment.

Articles