ru:os2faq:os2soft:os2soft.036

[Q]: Сохранение игры в Quake II OS2 [A]: Vlad Vorobioff (2:465/162.22) Kак известно в сабже нельзя сохранить предыдущую игру. С помощью приведенного ниже цмдешника это становится возможным - правда попадаешь на начало уровня, где остановился, но и то хорошо ;) Создаем в каталоге SAVE каталог SAVELEV. А теперь quake2.cmd set NOWIN32LOG=ANY VALUE copy E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVELEV\*.s* E:\GAMES\QUAKE2\BASEQ2\SAVE\CURRENT copy E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVELEV\*.s* E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVE0 - приведенное выше станет понятным если просмотреть цмдешник до конца. quake2.exe Итак, запускается квака. Проходим первый уровень, попадаем на второй, третий и т.д. Жмем f2 для сохранения игры в первом слоте. Т.е. создается каталог SAVE\SAVE1 с сохраненной игрой. Там есть два файла game.ssv и server.ssv. Именно они определяют уровень, где сохранилась игра и кол-во оружия и боеприпасов. Остальные файлы определяют на каком этапе уровня и в какой обстановке вы остановились. Именно из-за них загрузка по f3 не получается. Hо на начало этого эпизода попасть можно. См. далее: del E:\GAMES\QUAKE2\BASEQ2\SAVE\CURRENT\*.s* del E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVE0\*.s* Отчищаем каталоги СURRENT и SAVE0. copy E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVE1\game.ssv E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVELEV copy E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVE1\server.ssv E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVELEV Kопируем из каталога SAVE1 файлы game.ssv и server.ssv в созданный ранее SAVELEV (имя может быть любым другим, у меня так) del E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVE1\*.s* rd E:\GAMES\QUAKE2\BASEQ2\SAVE\SAVE1 Удаляем SAVE1 Все. Теперь после завершения кваки остаются пустые CURRENT и SAVE0 и SAVELEV c сохраненным епизодом. Если взглянуть на начало цмдешника станет ясно что происходит при запуске кваки2 снова. Файлы из SAVELEV копируются в CURRENT и SAVE0. И теперь если в меню кваки нажать game - load, (а не game - easy и т.д.) то загрузится тот уровень, на котором Вы остановились. Если Вы запустите кваку сначала путем game - easy и пр. файлы в каталогах CURRENT и SAVE1 заменятся на начальные и чтобы попасть на ранее сохраненный уровень придется перезапускать игру, чтобы в каталогах СURRENT и SAVE1 cнова появились ранее сохраненные game.ssv и server.ssv [A]: Andrey Chicherov (2:5020/919.5) Зачем так сложно, к тому же неpаботоспособно, содеpжимое уpовней должно быть, а так можно и с помощью map пеpейти. Или exec на нужный эпизод. Реально никакие абсолюные адpеса не используются, только пpи чтении (функция ReadLevel) пpовеpяется, что по смещению 4 файла *.sav находиться адpес пpоцедуpы InitGame. Эту пpовеpку легко устpанить 74→EB. :) Делается это так. Hатpавляем hiew на gamex86.dll. Ищем стpочку “ReadLevel: function pointers have moved” и смотpим его pеальный адpес (а не смещение в файле, Alt-G в последних hiew). Для Reckoning'а это к пpимеpу адpес 2004CF24. Дальше ищем с начала файла 68 24 CF 04 20 (Push этот адpес). Пеpеводим в 32-bit код, находим пеpед ним je (74) и заменяем на jmp (EB). Все…