Welcome to U.A.C. [O.S.A.]
login / register 
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
Самостоятельно патчим Wolfenstein 3-D и его моды
   Список разделов - Wolfenstein 3D и ранние игры от id - Самостоятельно патчим Wolfenstein 3-D и его модыОтветить
АвторСообщение
Black_Raven
= Lance Corporal =
Next rank: - Master Corporal - after 39 points
161

Doom Rate: 2.98

Posts quality: +45
Ссылка на пост №1 Отправлено: 27.10.24 08:21:30
Создание зачётной темы (+40)
Прошу прощения за, возможно, изобретение велосипеда, но лично мне это стало известно не так давно, и вполне допускаю, что я не один такой, поэтому взял на себя смелость создать данную тему.

Итак, знакомы ли вы с ощущением радости, когда вы десятилетиями играли в игру с каким-то багом, возможно даже не критичным, с которым не только вы, но и все остальные уже давно смирились, но который всё-равно постоянно напоминает о своём присутствии, а потом раз, и его больше нет? Всё. что нам понадобится кроме игры - это любой шестнадцатиричный редактор и расшифровщик исполняемых файлов (обычно подходит UNP, а для тяжёлых случаев можно использовать TEU). А самое приятное, что решения ниже можно применять и к закодированным модам, например, только недавно успешно пропатчил Chokage..

Исправление первое: читерский нож, которым можно резать беззащитные толпы врагов в одноклеточном проёме, пользоваться им как бы никто не принуждает, но как же иногда велико искушение... Итак, ищем 8077 и меняем 80 на 50, тем самым уменьшив длину ножа. Теперь его дистанция немного меньше дистанции стрельбы врагов из-за угла.

Исправление второе: слепые зоны боссов. Требуется только для 1.4 (не SOD) и модов на основе, в других версиях боссы и так всегда вас видят. Если вы играли в моды конца девяностых и начала нулевых, то наверняка знаете, о чём речь. Ищем 0e0?0080, в качестве ? должны стоять 2 или 6, остальные значения игнорируем, меняем 02 и 06 на 08, боссов всего семь, поэтому и исправлений в сумме должно получиться семь. Теперь у боссов круговой обзор.

Исправление третье: медленные огненные шары фальшивого Гитлера на быстрых машинах. Ищем 12с6 и меняем 12 на 60. Теперь шары на быстрых машинах летят с такой же скоростью, как с предыдущим значением на fixed 2500.

Исправление четвёртое: стабильное движение блоков на две клетки. Насколько мне известно, актуально только для оригинальных игр, но пусть будет. Даже на медленных машинах блок имел шанс сдвинуться на три клетки, при этом играть было не особо комфортно. Ищем 017608 и меняем 76 на 72. Теперь даже на быстрых машинах блок стабильно останавливается после двух клеток.

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

Возможно, в будущем, по мере перепрохождения модов, добавлю решения ещё некоторых багов, не решаемых правкой карт (если смогу преобразовать решение в hex). Если вам тоже есть, чем поддержать тему - не надо меня ждать, пишите собственные решения, главное, чтобы они были именно в hex, а не через перекомпиляцию, для возможности применения к перекодированным модам.

P.S. И ещё раз прошу прощения за публикацию возможно общеизвестной информации, кому-то может и пригодиться, если не методом решения, то хотя бы напоминанием о проблеме и том, что пора бы её исправить.

P.P.S. Замечу, что данные исправления нельзя назвать читерством, так как убранные баги облегчали игру (кроме клеток, но там просто баг).

Рейтинг сообщения: +2, отметил(и): Zveraboy, JSO x
1 1
JSO x
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 108 points
1332

Doom Rate: 2.27

Posts quality: +724
Ссылка на пост №2 Отправлено: 27.10.24 10:41:14
Интересно. А есть объяснение, почему именно эти смещения и именно эти значения, как их нужно было получать? Реверс-инжинирингом? Но ведь есть исходник. Из этого ещё один вопрос: патчи корректны для каждого бинарного файла? Их много...

Кстати, оригинальный исполняемый файл Wolf3D не был пережат чем-то вроде LZEXE?
2 7 1
Black_Raven
= Lance Corporal =
Next rank: - Master Corporal - after 39 points
161

Doom Rate: 2.98

Posts quality: +45
Ссылка на пост №3 Отправлено: 27.10.24 10:56:45
JSO x
Значения были получены компиляцией с разными данными и сравнением, что поменялось. Увы, не каждое решение для исходника подходит для hex, надо подобрать такое, которое просто заменит значение байт в одном месте без цепной реакции по всему файлу, то есть, только аккуратная редактура имеющегося, без добавлений/удалений. Решения подходят для всех версий оригинальных WOLF3D/SOD, кроме патча ножа в версиях Activision, где значение по умолчанию не 80 а 74 (и нож всё ещё слишком длинный, чтобы это тянуло на исправление), а также для большинства модов. Собственно, именно для модов всё и затевалось, для оригинальных игр так-то есть исходники, для которых применимы куда более красивые решения. В некоторых случаях, как с той же Activision, надо подходить с умом и искать инструкцию с маской, но это не так уж и сложно, если уже накоплен некоторый опыт правок, возможно особо сложные случаи будут потом рассмотрены (если я сам с ними справлюсь). Файлы оригинальных игр и многих модов пережаты, потому и написал про UNP и TEU (последний берёт, например, dos-версию ATAW, которая пожата не LZEXE (или не только им) и устойчива к UNP).

P.S. Собственно, для модеров вольфа всё, что я написал, элементарно (учитывая вещи наподобие Spear of Bullshit), проблема в том, что между модерами и обычными игроками в этом плане разрыв. Например, есть тема, посвящённая поиску чит-параметров к модам, в том числе и безуспешных запросов, причём не к тому же ATAW, а к какому-нибудь Assassinate Hitler, чей параметр отладки вообще лежит в положенном ему месте, никак не скрытый. И вот такие игроки вынуждены страдать от багов, не зная, как с ними бороться. Я сам ближе к последним, чем к первым, и только осваиваюсь, и ещё не так давно я и сам был бы очень благодарен за информацию из шапки, потому и публикую. Но не стоит ждать от меня нынешнего глубоких познаний, я и сам ещё только учусь по ходу дела.

Рейтинг сообщения: +1, отметил(и): JSO x
1 1
SilverMiner
= Master Sergeant =
Next rank: - Sergeant Major - after 62 points
468

Doom Rate: 2.23

Posts quality: +188
Ссылка на пост №4 Отправлено: 27.10.24 19:42:26
Мастерски ты подменил понятие "мазохизм" на "исправление"
Спасибо, теперь знаю про длинный нож
1 1
Black_Raven
= Lance Corporal =
Next rank: - Master Corporal - after 39 points
161

Doom Rate: 2.98

Posts quality: +45
Ссылка на пост №5 Отправлено: 28.10.24 04:04:02
Вот немазохистское обновление.

Блокировка мыши по вертикали: ищем fcba14 и меняем 14 на 00. Иногда бывает два совпадения, нас интересует первое. Чуть раньше будет feba0a, чем больше 0а, тем выше скорость мыши.

Бег по умолчанию, ходьба при нажатой клавише: ищем 3exxxx007503e98x008b1e (теперь буду писать вместо ? x, так как больше трёх ? форум сжирает) и меняем 75 на 74.

Стрейф всё ещё придётся использовать с помощью keymapper для dosbox, иначе не сможем поворачиваться (при компиляции это легко решить, но конвертировать решение в hex моих навыков не хватает). В keymapper просто добавьте клавиши поворота к клавише стрейфа.

Теперь разберём прямое редактирование файла конфигурации (необходимо, когда мод отказывается его сохранять, в остальных случаях просто полезно). Обычно файл называется config, но вообще его всегда можно найти, если упорядочить файлы по дате изменения, обычно это самый новый файл после запуска игры. Итак, в файле конфигурации также хранится таблица рекордов, актуален только конец файла начиная с 020001000300, если этих чисел нет, то обратите внимание на структуру рекордов, искомая область находится сразу после нижней позиции на таком же расстоянии (считая от первой буквы имени), на каком та находится от предыдущей, если значения рекордов одинаковы, то будет проще, смотрим значение до нового имени и ищем его после последнего.
Идём по порядку:
0200 - параметр Sound Effects, установлен на Sound Blaster.
0100 - параметр Music, установлен на Sound Blaster.
0300 - параметр Digitized Sound, установлен на Sound Blaster.
0100 - параметр мыши, установлен на включено.
Следующие 00 отвечают за джойстик и геймпад (если с них кто-то играет, когда есть клавомышь).
Теперь идут клавиши управления.
4800 - движение вперёд, назначено на UP.
4D00 - поворот вправо, назначен на RIGHT.
5000 - движение назад, назначено на DOWN.
4B00 - поворот влево, назначен на LEFT.
1D00 - атака, назначена на CTRL.
3800 - стрейф, назначен на ALT.
3600 - бег, назначен на RSHIFT.
3900 - активировать, назначено на SPACE.
Для удаления клавиши её байты следует занулить (00). Если вы желаете узнать код клавиши, поставьте её в оригинальной игре и возьмите значение оттуда, они будут совпадать.
0200030004000500 - клавиши выбора оружия по порядку (да, мы можем назначать и их).
000001000300FFFF - четыре кнопки мыши по порядку, каждой кнопке присвоена функция (а не кнопка функции, как у клавиатуры): 0000 атака, 0100 стрейф, 0200 бег (в настройках игры выбрать нельзя, преимущество прямого редактирования), 0300 активировать, FFFF удалить кнопку мыши.
0000010003000200 - кнопки джойстика.
0F00 - размер экрана, максимум 13 (в некоторых убирающих рамку модах 14).
0500 - скорость мыши, максимум посредством настроек 09, но можно установить вплоть до 0C (получается довольно приличная скорость даже без редактирования exe).
Некоторые моды вообще не смотрят на файл конфигурации, запуская игру каждый раз с настройками по умолчанию. Для таких следует править сам исполняемый файл, обычно файл конфигурации всё-таки создаётся, поэтому можно брать байты для поиска оттуда, только учтите, что в исполняемом файле они хранятся не в одном месте.

Как нетрудно заметить, пока все решения для dos. С sdl ещё только предстоит разобраться.

P.S. Очевидно, моих навыков хватает только на решения поставленных задач в лоб, возможно когда-нибудь, если мои навыки возрастут, я заменю их чем-нибудь более элегантныом (а ещё это может сделать кто-нибудь другой). Так, например, вместо длины ножа тем же охранникам по хорошему стоит помочь не стопориться, а атаку фальшивого Гитлера надо вообще отвязать от скорости машины.

P.P.S. У кого-нибудь сохранились devpakи 1.2.13 или 1.2.15 для sdl, уже несколько часов безуспешно ищу?
UPD: Всё, уже нашёл.

Рейтинг сообщения: +1, отметил(и): SilverMiner
1 1
SilverMiner
= Master Sergeant =
Next rank: - Sergeant Major - after 62 points
468

Doom Rate: 2.23

Posts quality: +188
Ссылка на пост №6 Отправлено: 28.10.24 11:59:09
А девпаки это либы для компиляций или не только они?
1 1
Black_Raven
= Lance Corporal =
Next rank: - Master Corporal - after 39 points
161

Doom Rate: 2.98

Posts quality: +45
Ссылка на пост №7 Отправлено: 28.10.24 12:09:57
SilverMiner пишет:
А девпаки это либы для компиляций или не только они?


Спасибо за моральную поддержку. Удалил свою экспрессию по поводу поисков.

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

А вот скорость файерболлов всё ещё актуальна: ищем 370012 и меняем 12 на 60.

А вот с управлением всё хуже, решение для конкретной версии нашёл, но перенести его на другую не получилось. Так что, подожду, пока пройду побольше sdl-модов, чтобы проверить стабильность решений. Но делать что-то надо, так как грядёт SDL2 и старые файлы для блокировки мыши с ним работать не будут (кто-нибудь, скажите моддерам, что среди вольферов есть мышатники, а то они, похоже, не в курсе).

Вообще с решениями для SDL всё намного печальнее, hex-данные намного нестабильнее и куда сложнее искать закономерности, хотя бы старое доброе 74/75 осталось (только и тут, по-моему, стало наоборот).

Вот быстренько ещё config для SDL. Структура в целом та же, сначала таблица рекордов, потом параметры.

02000000 - параметр Sound Effects, установлен на Sound Blaster.
01000000 - параметр Music, установлен на Sound Blaster.
02000000 - параметр Digitized Sound, установлен на Sound Blaster (против 03 для dos).
01000000 - параметр мыши, установлен на включено.
11010000 - движение вперёд, назначено на UP.
13010000 - поворот вправо, назначен на RIGHT.
12010000 - движение назад, назначено на DOWN.
14010000 - поворот влево, назначен на LEFT.
32010000 - атака, назначена на CTRL.
34010000 - стрейф, назначен на ALT.
30010000 - бег, назначен на SHIFT.
20000000 - активировать, назначено на SPACE.
000000000100000003000000FFFFFFFF - кнопки мыши, правила те же, что и для dos, FFFFFFFF удаление кнопки, некоторые версии sdl назначают на FFFFFFFF движение назад (а то и вовсе вылет игры), для них меняем на FF000000.
1300000005000000 - экран и скорость мыши, в sdl максимальное значение экрана 15 (без рамок и статуса), мыши - 09, значения выше возвращаются к 09. Для ускорения мыши пока-что приходится увеличивать скорость мыши в системе...

P.S. Если решения для SDL от меня и будут, то вряд ли скоро, тут вопрос даже не только в навыках (хотя и в них тоже), но и в сборе статистики по модам, а тут нужно время, тем более, что у меня нет моральных сил просто рассматривать каждый мод, как работу. Надеюсь, в этой теме отпишется кто-то более эрудированный и даст хорошие решения.
1 1
MAZter[iddqd]
-= WebMaster =-
Админ форумаАдмин сайта
881

Doom Rate: 1.4

Posts quality: +148
Ссылка на пост №8 Отправлено: 29.10.24 19:25:59
"Быстрых машинах", насколько быстрых, начиная с Pentium II ? или всё что быстрее Pentium 100 Mhz? С какой частоты исправления имеют смыл?
2 2 1
Black_Raven
= Lance Corporal =
Next rank: - Master Corporal - after 39 points
161

Doom Rate: 2.98

Posts quality: +45
Ссылка на пост №9 Отправлено: 29.10.24 23:46:13
MAZter[iddqd] пишет:
"Быстрых машинах", насколько быстрых, начиная с Pentium II ? или всё что быстрее Pentium 100 Mhz? С какой частоты исправления имеют смыл?


Я запускаю через dosbox, работает как с cputype=386_slow и cycles=fixed 15000, так и на cputype=486_slow и cycles=max. Вообще, учитывая стабильность работы при такой разнице в характеристиках первого и второго варианта, похоже, что "правильное" поведение вольфа было багоюзом медленных машин. А вольф без правок правильно работает (хотя блоки всё ещё имеют вероятность сдвинуться на три клетки) на cputype=386_slow и cycles=fixed 4000 (а ещё лучше 3000), и при максимальном размере окна игры он уже немного подтормаживает (видимо, для того данная настройка и введена). Сейчас проверил, как на этих настройках работает решение. Блоки по прежнему перемещаются на две клетки (не на одну, как можно было бы подумать), а вот скорость огненных шаров высокая (примерно как в модах Poet, если играли). Также протестировал на cputype=pentium_slow и cycles=max, всё так же работает, большего dosbox не позволяет, но на SDL скорость огненных шаров точно так же правильно работает (по крайней мере, на моём компьютере), так что блоки можно ставить смело (именно для оригинальных карт, большинство пользовательских рассчитано на три клетки), а вот огненные шары только если компьютер тянет хотя бы Doom, не превращая оный в слайд-шоу.

P.S. Хоть кто-то потестировал решения на практике? Хотелось бы услышать впечатления, особенно волнует длина ножа, возможно её стоит подкорректировать. Насколько сложнее им пользоваться? Всё-таки это именно правка недоработок, а не хардкор-мод. Чтобы оценить круговой обзор боссов, хорошо подходит серия Mutantstein или dos-версия Wolfendoom, где они прежде любили "закрыть глаза" на игрока, а вообще подойдёт почти любой мод на основе 1.4, редкие авторы избегали данной ошибки (вспомнил, что у Mutantstein тоже есть SDL-версия, просто отвык учитывать корявые порты Andy Nonymous, речь идёт именно про dos-версию, разумеется). Если к какому-то dos-моду решения неприменимы, также напишите, постараюсь разобраться (хотя sdl немного подорвало мою уверенность в собственных силах). Возможно, не подойдёт к чему-то сильно навороченному вроде Klooni.

Добавлено спустя 19 часов 54 минуты 19 секунд:

Просто небольшие новости по поводу управления к SDL. Найдены промежуточные решения, работающие на скомпилированных из исходников 1.6, 1.8 и 1.9, а также некоторых модах со схожим размером, но чувствую, что в итоге лёгкого пути не будет. Вот история о том, как я сумел настроить бег и вертикаль мыши в уже скомпилированной автором версии 1.7, которая весила намного меньше скомпилированных по инструкции. Для скомпилированных версий алгоритмом было найти условие бега по маске и потом просто отсчитать от него количество байт для блокировки мыши, благо они рядом. Но другой размер (и, видимо, либо компилятор либо его настройки) - другие правила. В принципе, были известны пять вещей, примерное место условия при компиляции (диапазон 1f000-20fff), само условие в виде 000074 (маска не работала), нахождение искомого байта вертикали мыши между условием бега и следующим, нахождение байта вертикали мыши за два байта до 00, то есть, nnxxxx00, а также чётность оного байта. В принципе, этого было достаточно, просто сделал поиск по 000074, и прикинув, что при меньшем размере местоположение также с высокой вероятностью будет раньше, просто заменял все условия в определённой области на 75, если не работало, менял следующие, и так пока не нашёл нужное, потом искал 00 между условиями и проверял чётность байта на соответствующем месте, если чётный, то уменьшал на два и смотрел, уменьшилось ли поведение мыши по вертикали в игре. После нахождения осталось поменять байт, что тоже приходится делать методом подбора, мне уже встречались уменьшения на 4 и на 6 (для версии 1.7 это было 4). Вот как-то так это пока работает, не знаю, будет ли метод лучше. Кроме того, пока ещё не собрана статистика по модам, возможно даже это решение далеко не универсально. По поводу чувствительности мыши решить пока не удалось, но есть решение костыль: ищем 09xxxxxxxxxxxxxxxx09, и меняем оба 09 на 0с (иногда совпадений несколько и придётся подбирать), теперь мы можем заменить 09 на 0c и в нашем файле конфигурации (если 09 нет, речь идёт про байт скорости мыши в конфиге), и эта настройка не сбросится. Если скорости ещё мало, следует увеличить чувствительность мыши в самой системе, вместе они точно дадут быструю скорость, но, конечно, это именно костыли, также, как и autohotkey, требуемый для нормального стрейфа (как и keymapper для dosbox), но дело всё-таки движется.

Добавлено спустя 14 часов 17 минут 55 секунд:

Ещё немного новостей. Итак, условие не 000074, условие просто 74 (также есть условие 75, разумеется), так что запоминаем, что указанный выше сброс высокой чувствительности мыши в файлах 330-345 находится в диапазоне 17xxx, соответственно ищем его в новом файле и сравниваем местоположение, таким образом определяя место начала поиска для условия, находящегося в первом случае в диапазоне 1fxxx-20xxx, потом просто ищем по порядку 74 и меняем на 75, потом тестируя в игре. На самом деле, пока срабатывает поиск ?074, меняем значения скопом, пока не доходим до ошибки vswap.wl3, потом ищем уже аккуратно. После нахождения ищем вертикаль, опять же, в файлах после компиляции расстояние между бегом и вертикалью 12e, смещаем поиски вперёд или назад в зависимости от взаиморасположения предыдущих результатов, и ищем 00, после чего, если число находящееся на два байта (не включая) впереди чётное (но не ещё один 00), уменьшаем его на 2 и тестируем поведение вертикали мыши в игре, если оно меняется, подбираем блокировку вертикали с шагом -2 (мне уже попадались уменьшения на 2, 4 и 6). Также напоминаю, что последовательность скорости огненных шаров 370012, меняем 12 на 60, пока что это работает во всех проверенных модах (но самих модов проверено ещё совсем немного).

Вот, собственно, и всё. Следующее обновление если и будет, то не скоро. Честно говоря, у меня пропал стимул публиковать решения, так как есть серьёзные сомнения, что многие люди действительно не поленятся искать нужное значение, скорее предпочтя тот же autohotkey (хотя настроить правильный бег без дополнительных заморочек при игре там тоже не так уж и просто). У меня остались увеличение скорости мыши в SDL, стрейф в dos и sdl, отвязка камеры смерти от определённых боссов, которых некоторые авторы пихают в качестве промежуточных, хотя они итоговые (например, это можно увидеть у Harry Mass и DTrade), и ещё убирание шлейфа ракеты, который иногда приводит к переполнению врагов на уровне, но прямо сейчас я этим заниматься не буду. Если кому-то тема пригодится, то я рад, но скорее всего вся эта информация будет просто лежать на форуме мёртвым грузом.

Рейтинг сообщения: +1, отметил(и): JSO x
1 1
PVS
= Master Corporal =
Next rank: - Sergeant - after 42 points
248

Doom Rate: 2.02

Posts quality: +26
Ссылка на пост №10 Отправлено: 04.11.24 00:05:28
Black_Raven
Сам Wolf3D уже мало кто играет, а такое hex-редактирование - тем более, не для всех. На Wolf3D ресурсах/форумах - видел похожие темы, про такое редактирование в hex, не помню, было ли там полезное содержимое, но может что-то и есть, в твою копилку/базу.

Секретные стены/блоки - едут на 3 клетки уже на 486, вроде видел эту инфу "почти в официальных текстовиках" даже, но это не мешало прохождению оригинальных 6 эпизодов (в SOD - не помню уже), в плане - застревания на этаже, возможно поэтому - с этим ничего не делали.

В копилку, включение воспроизведения цифрового звука через спикер, Wolf3D 1.4:
Config.wl6, по адресу 0х01D2 выставить 01.
Проверял под ДОС - работает, под Вин9х - не работает, под DOSBox - не пробовал. Нашел на форуме Командера Кина, не так давно, автор сообщения - K1n9_Duk3.
Black_Raven
= Lance Corporal =
Next rank: - Master Corporal - after 39 points
161

Doom Rate: 2.98

Posts quality: +45
Ссылка на пост №11 Отправлено: 05.11.24 04:20:06
PVS пишет:
Секретные стены/блоки - едут на 3 клетки уже на 486, вроде видел эту инфу "почти в официальных текстовиках" даже, но это не мешало прохождению оригинальных 6 эпизодов (в SOD - не помню уже), в плане - застревания на этаже, возможно поэтому - с этим ничего не делали.


С блоками на три клетки блокируются некоторые вещи в секретах, а также выход на второй секретный уровень SoD из дополнительного секрета, кроме того это делает начало E3L8 просто некрасивым.

PVS пишет:
В копилку, включение воспроизведения цифрового звука через спикер, Wolf3D 1.4:
Config.wl6, по адресу 0х01D2 выставить 01.


Спасибо за поддержку темы.

0200 - параметр Sound Effects, установлен на Sound Blaster.
0100 - параметр Music, установлен на Sound Blaster.
0300 - параметр Digitized Sound, установлен на Sound Blaster.

Ваш адрес для параметра Digitized Sound, даны пояснения для настроек по умолчанию, но подразумевается, что меняя числа мы получим другие настройки. Я избегаю точных адресов, так как в разных версиях и модах они различаются, предпочитая давать инструкцию поиска. Я так понимаю, фишка в том, что данное значение параметра не выбирается в опциях самой игры. Файл конфиг вообще намного полнее настроек игры.

PVS пишет:
Сам Wolf3D уже мало кто играет, а такое hex-редактирование - тем более, не для всех.


Да, я в курсе, но это не повод забивать на тех, кто готов этим заняться. И раз уж тема кому-то интересна, то вот небольшое обновление информации. Если не удаётся найти в dos-моде скорость огненных шаров по 12c6, то ищем в области после направления взгляда последнего босса (0e060080) первое совпадение по 0e08008b, а от него ищем первое 12, это и будет наша искомая скорость шаров. Кстати, иногда направление взгляда тоже имеет на конце не 80, а 8b. Скорость шаров 60 представлена для cycles=fixed 15000, для cycles=max или sdl лучше использовать 80. Длина ножа, похоже, работает и на 5A, значение по прежнему уточняется, тут загвоздка в том, что иногда после сохранения и загрузки застрявшие враги продвигаются чуть вперёд, и прежде недостававший до них нож начинает доставать. Стрейфа без внешних утилит, похоже, можно не ждать, так как там, насколько я вижу, требуется работа с ассемблером, фактически надо вообще убрать условие от клавиши стрейфа и заменить условия направления по оси x на условие нажатых клавиш направления, проделать это без изменения размера редактируемого участка если и возможно, то очень непросто. Я ещё поэкспериментирую с занулением байт, но многого ждать не стоит. Вот скрипт стрейфа для autohotkey (похоже, придётся остановиться на нём):

*~left::
*~right::sendinput "{z down}"
*~left up::
*~right up::
{
if !getkeystate("left") & !getkeystate("right")
sendinput "{z up}"
}

Примечания к скрипту: управление по прежнему на стрелках, если кому-то хочется поменять, то меняем left и right на соответствующие настройкам игры клавиши. Стрейф переназначен на z, и я не рекомендую зажимать скриптами клавиши, имеющие функции в ОС, это может неприятно аукнуться как в игре, так и за её пределами. ~ нужна для создания комбинации. Напрашивающийся ~left::z имеет последствия, когда нажатие противоположного направления до отпускания первого меняет действие с движения на поворот, поэтому нажатие и отжатие клавиш разделены, и для последнего добавлено условие. * нужна, так как скрипт выше предполагает использование стоящего по умолчанию shift для бега/ходьбы, иначе при зажатом shift стрейфа не будет. Есть альтернативный скрипт:

loop
{
sleep 10
if getkeystate("left") or getkeystate("right")
sendinput "{z down}"
else
sendinput "{z up}"
}

но у него есть проблема. Из-за sleep при нажатии клавиш будут микроскопические повороты, а без sleep скрипт будет тормозить игру (и не только её).

PVS пишет:
На Wolf3D ресурсах/форумах - видел похожие темы, про такое редактирование в hex, не помню, было ли там полезное содержимое, но может что-то и есть, в твою копилку/базу.


Вообще, задумка такая, что это не моя копилка, а "общак". Я не хакер, и даже в рамках данного форума куча людей, способных провернуть в hex такое, что мне и не снилось.
1 1
Black_Raven
= Lance Corporal =
Next rank: - Master Corporal - after 39 points
161

Doom Rate: 2.98

Posts quality: +45
Ссылка на пост №12 Отправлено: 13.11.24 03:12:30
Кажется, я понял, почему такие темы до сих пор почти не поднимались несмотря на свою актуальность. Сейчас я уже пропатчил лично для себя несколько модов и могу сказать, что есть пара препятствий для готовых решений каждому желающему. Во-первых, эта сама сложность применения универсальных решений, красота вроде 8077 или 12c6 встречается далеко не во всех модах, зачастую всё, с чем вы остаётесь, это диапазон в пару-тройку тысяч, прикидка, нет ли соседей по участку кода до или после, которых легче найти и которыми можно сузить область поиска, а также некоторая база знаний о том, какие значения с большей вероятностью останутся прежними, но гарантий тут нет, и это бывает даже в dos-модах, а в sdl подобное практически норма, и, по сути, человек, который действительно готов потратить иногда не один час на поиск нужных значений, не нуждается в данном сборнике ответов, так как он рано или поздно придёт к самостоятельной работе с исходниками. Иными словами, готовые ответы могут идти или по простым ситуациям в простых модах или по конкретным модам, универсальные же решения просто не предназначены к применению никогда прежде не редактировавшими исполняемые файлы вольфа людьми, это раз, и всегда может найтись мод, к которому они не подойдут, это два. Конечно, я всё ещё обычный ламер, но есть подозрение, что применение универсальных решений от квалифицированных людей также потребует некоторой квалификации, например, владение языком ассемблера. Во-вторых, патчинг мода - это не только патчинг кода, мне уже приходилось работать и со спрайтами, и со звуками (например, в Armageddon были убраны обрывки приветствий оригинальных боссов в начале приветствий боссов-замен), и даже с текстовыми экранами, а уж про ошибки на самих картах говорить вообще излишне, и понятно, что тут универсальных решений быть не может в принципе, а давать инструкцию по каждому моду и даже каждому набору карт... Сомнительное занятие, честно говоря, и не только из-за громоздкости, но и из-за того, что именно считать подлежащим исправлению. Кто-то, например, будет везде расставлять лампочки, так как ему будет мозолить глаза их отсутствие, и хотя очевидно, что это вкусовщина, но порою граница между настоящей ошибкой и вкусовщиной очень тонка, даже реальная авторская задумка может кому-то прийтись ложкой дёгтя в бочке мёда, делающей неудобоваримой всю вещь целиком, причём не на уровне "мне нравится другое", а именно на уровне "это следует исправить", проблема в том, что для кого-то такой вот вопиющей ущербностью могут быть и непроставленные лампочки, тут всё очень индивидуально. В итоге, если игрок не готов мириться с ошибками, то ему придётся либо самому планировать исправления либо становиться заложником чужого вкуса. Даже если исправитель будет реальным пуристом, не стесняющимся наступить на горло собственной песне, что-то, во-первых, всё-равно проскользнёт, а во-вторых, сам игрок-то скорее всего не пурист, и видимые им ошибки с высокой вероятностью так и останутся на своих местах.

Вот напоследок несколько уточнений к решениям выше, которые могут пригодиться на начальном этапе самостоятельных поисков:
Если не работает поиск длины ножа по 8077 или 7477, следует учесть, что вместо 77 может быть совершенно другое число (например, мне недавно встретилось 01), попробуйте поискать 0080 в области, где предположительно находится данное значение, обычно это между первой и второй третью диапазона 15ххх. По поводу самой длины, я пользуюсь 5a, 60 уже позволяет резать.
Постоянный бег и скорости мыши по горизонтали и вертикали обычно располагаются рядом, найдя одно можно сильно сузить область поисков второго.
Иногда в искомых последовательностях вместо 00 бывает c0. В sdl такое встречается регулярно, в dos так навскидку не помню, но может и встречалось.

Ну и немного новой информации:
Для замены знака aardwolf третьим ключом следует найти 2a0001002b и заменить 01 на 07 (пришлось добавлять третий ключ в один мод, чтобы исправить проблемы прогрессии).
А вот удаление камеры смерти у Гитлера, к слову о "простых" решениях, на сложных модах не тестировалось: ищем в диапазоне 1a00-1fff повторение последовательности вида zzzzxxxx, где zzzz не меняется, а xxxx - каждый раз новые числа, ищем ту, которая повторяется 171 раз подряд без пропусков. Нас интересуют xxxx, находящиеся на расстоянии 1bf0 от начала, их следует занулить. Игра будет писать ошибку на экране выхода, но в самой игре ошибок быть не должно. Если же хочется избавиться от экрана ошибки, то полностью удаляем данные zzzzxxxx (только эти, а не все 171). Теперь идём в самое начало исполняемого файла и уменьшаем шестой байт на единицу, после этого ищем кучу 00 с ba на конце, и добавляем туда ещё четыре 00 (взамен удалённого ранее участка), теперь ищем 2d4454, будут два совпадения, нас интересует второе, идём от него назад на 11f, здесь обычно находится окончание очередной последовательности 00, обнуляем следующие четыре (если не подводит память) байта от данной позиции. Вот так это примерно работает в простых модах, много желающих бежать патчить первый Westlake?

Ну и пара заметок по картографическим ошибкам:
Самые частые ошибки на картах, обычно не являющиеся вкусовщиной, это ошибка с врагами, когда те либо не видят игрока либо видят, но их атаки безвредны, и ошибка с непреднамеренным открытием врагами запертых дверей. Первая является ошибкой кодов пола. Если охранник глухой, то он должен граничить хотя бы с одним нормальным кодом пола, также, если меня не подводит память, желательно, чтобы соседние клетки сверху и слева от него не были глухими, но тут немного не уверен, потом, возможно, придётся данную информацию удалить, как ложную. В случае нахождения на разных кодах пола, для правильного взаимодействия между кодами игрока и охранников требуется хотя бы один открытый дверной проём, поэтому в случае изменения кодов пола прямо внутри комнаты также возможны слепые или безвредные враги, если на этом не построено головоломок, их можно просто объединить. Ну а в случае, когда с разными кодами связаны события карты, универсального ответа уже не будет, тут требуется именно вдумчивая правка конкретной ситуации.
Что же касается открывающих дверей охранников, то сначала следует проверить, нет ли в областях за дверью участков с кодами, уже встречавшимися в комнатах перед дверью, также надо убедиться, что на карте нет кода 00. Также надо знать, что при открытии двери оцениваются не только граничащие с ней клетки, но и местонахождение игрока на момент данного открытия, поэтому если у нас между комнатами постоянно курсируют враги, то оказавшийся в дверном проёме или на месте сдвинутой стены игрок рискует разбудить весь уровень, причём работает это не всегда, точную закономерность пока не понял. Ну и конечно, стандартная головоломка на открытие запертой двери: выстрелить во врага через декорацию и подождать, пока он откроет дверь, если это не задумка автора, то надо заблокировать видимым врагам с другой стороны возможность подхода к запертым дверям. Кроме того, при упоре в препятствие враги часто меняют направление на противоположное, поэтому не следует позволять стоять перед дверью на одной линии с ней находящимся на соседних клетках врагам, так как задние развернутся и откроют дверь. Также враги могут открыть двери, если завернув в них они уменьшат расстояние между собой и игроком. Самое надёжное препятствие открытию запертых дверей - глухая стража в узких проходах, также можно расставить по бокам двери декорации, что пусть и не гарантирует её безопасность, но предотвратит много нежелательных случайностей, наконец, запертую дверь можно ещё и продублировать позже, чтобы проскочивший игрок не смог этим воспользоваться.

Что бы ещё добавить? За очки в файле конфигурации отвечает область, где по умолчанию прописаны 10270000, вдруг кому-то пригодится. Была мысль дать пару чит-хитростей вроде бесконечных патронов и отвязки активации читов от режима отладки, но там тоже не самый простой поиск, читерам прозе пользоваться CE, он может всё, даже варп.

Может, потом добавлю ещё какую-нибудь информацию, но, в целом, большинство требующих внимание моментов разобраны. Я думаю, что в теме можно задавать вопросы по конкретным модам или картам, в стиле, что и по какому адресу поменять, чтобы получить то-то и то-то в таком-то моде, или как исправить то-то и то-то на таком-то уровне в таком-то наборе карт, то есть конкретные запросы, требующие конкретных ответов. Конечно, если кто-то захочет поделиться общими приёмами, то это тоже будет замечательно. Только не надо подходить к этому как эдакой авторской теме, где на все вопросы отвечает её создатель, во-первых, я не настолько квалифицирован, чтобы гарантировать ответы на большинство возникающих запросов, во-вторых, я не настолько самоотвержен, чтобы бежать качать не интересующий меня на данный момент мод и тратить часы на поиск не интересующей меня функции, честно говоря, я думаю, что уже выложил достаточно информации, чтобы окупить создание темы, я не готов тянуть её на себе месяцы и годы. Если вдруг тема будет кому-то интересна и в ней действительно будет что-то обсуждаться, то замечательно, если нет - может, послужит кому-то справочным архивом.
1 1
PVS
= Master Corporal =
Next rank: - Sergeant - after 42 points
248

Doom Rate: 2.02

Posts quality: +26
Ссылка на пост №13 Отправлено: 16.11.24 00:21:11
Black_Raven
"Для замены знака aardwolf третьим ключом следует найти 2a0001002b и заменить 01 на 07 (пришлось добавлять третий ключ в один мод, чтобы исправить проблемы прогрессии)"
Не понял - о чем тут речь? В моде дверь закрыта на ключ 3? А причем тут спрайт aardwolf?
Оригинальный Вульф может давать только ключи 1 и 2, при этом - о ключах 3,4 он знает, можно закрывать двери на 3 и 4 ключи в редакторе. На своих картах - иногда закрывают двери на ключи 3 и 4 чтобы дополнительно сбить с толку игрока, вроде, даже в оригинальных эпизодах есть двери, закрытые на ключи 3 или 4, но найти их нельзя, хех

На счет цифрового звука через спикер, что я писал выше. В исходниках Вульфа есть этот код, я его видел и всё хотел почикать, чтобы вернуть занимаемую им память, думал он не рабочий. Когда увидел то сообщение на форуме, попробовал - а код работает, но включается только так. Интересного в этом не много, только если для старых ПК, совсем без аудиокарты или только с адлибом - можно слышать тот скрип голосов и эффектов через спикер. О Вульфе я этой инфы нигде не видел, интерес мой был только в этом.
Black_Raven
= Lance Corporal =
Next rank: - Master Corporal - after 39 points
161

Doom Rate: 2.98

Posts quality: +45
Ссылка на пост №14 Отправлено: 16.11.24 10:09:35
PVS пишет:
Не понял - о чем тут речь? В моде дверь закрыта на ключ 3? А причем тут спрайт aardwolf?
Оригинальный Вульф может давать только ключи 1 и 2, при этом - о ключах 3,4 он знает, можно закрывать двери на 3 и 4 ключи в редакторе. На своих картах - иногда закрывают двери на ключи 3 и 4 чтобы дополнительно сбить с толку игрока, вроде, даже в оригинальных эпизодах есть двери, закрытые на ключи 3 или 4, но найти их нельзя, хех


В вольфе есть не только запертые двери 3/4, но и возможность их открытия при наличии соответствующих ключей, и даже есть сами эти ключи, просто они не присвоены ни одной из вещей (я знаю, что вы знаете, но это для читателей темы). Замена превращает знак aardwolf в ключ 3, которым можно открыть первую дополнительную дверь. Выбран данный знак потому, что, как правило, не используется на картах, но можно поискать и другую вещь, если данный знак использован. Собственно, вещи в данном участке кода идут по порядку, чередуя номер вещи и тип вещи. Бывает полезно на картах, когда автор забывает, что ключ у игрока уже есть, и заставляет искать его снова (ещё это очень полезно ненавистникам нелинейности на картах, решаемых разными путями). Просто меняем тип запертой двери и добавляем соответствующий ключ. А так, кроме модов с дополнительными ключами, нестандартные запертые двери ещё используются, когда их требуется открывать врагами, а также когда их просто не планируется открывать. Собственно, понятно, что если автор заморочился с дополнительной запертой дверью, то он в курсе, что это такое, так как, насколько мне известно, во все основные редакторы данные двери требуется добавлять ручками, случайно их не поставишь (хотя тому же Butch Nordstrom это удалось, но то была другая эпоха и другие редакторы), и в любом случае проще поменять тип двери на карте, чем добавлять в код новый ключ, который всё равно потом придётся размещать на той же карте..

PVS пишет:
В исходниках Вульфа есть этот код, я его видел и всё хотел почикать, чтобы вернуть занимаемую им память, думал он не рабочий.


Я бы не стеснялся чикать вообще все вещи, на которые именно мой мод не рассчитан. Если вы делаете мод именно под Sound Blaster, то зачем занимать память другими вариантами? Я бы и разные размеры игрового окна почикал, если честно.

Вот немного читерства, а именно, облегчение варпинга в ряде старых модов, в которых при сквозном потоке уровней всё ещё доступны только первые десять. Можно использовать чит E, но это та ещё морока, а tedlevel - довольно глючный способ. Ищем xx7d0a, где xx - первый недоступный для варпинга уровень, например, для десяти уровней это будет 0b7d0a, меняем данное число на нужное нам, для 60 уровней это будет 61=3d, то есть, 3d7d0a. В некоторых модах доступны первые 20 уровней, там xx будет 15. В sdl ищем 00xxxxxxxxxx0a для 10, то есть, не первый недоступный,а последний доступный, заменяем 0a на нужный нам, для 60 это будет 3c, совпадений будет много, в исходниках порта нужное значение в диапазоне 10xxx, в модах, соответственно, смещаемся вперёд или назад (чаще вперёд).
1 1
Страница 1 из 1Перейти наверх
   Список разделов - Wolfenstein 3D и ранние игры от id - Самостоятельно патчим Wolfenstein 3-D и его моды