1. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление
    1. Если вы сделали перевод или русификацию игры, то вы можете поделиться своим творением здесь.
    2. О правилах вступления в группу переводчиков можно прочитать здесь.
    3. Русификации следует искать там.
  2. Пожалуйста, внимательно прочитайте правила раздела.

[песочница] Dangerous Dave in the Haunted Mansion

Тема в разделе "Переводы своими руками", создана пользователем Dimouse, 10 апр 2012.

  1. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    28.747
    1. Подробные описания форматов файлов можно посмотреть здесь
    2. О "вскрытии" игры, с подробным описанием процесса, и примерами программ (исходниками) при этом используемых, можно прочесть здесь

    Шрифты и тексты находятся внутри исполняемого файла, который запакован c помощью LZ.

    Что нужно:
    1. Достать из экзешника шрифт.
    2. Вставить шрифт назад
    3. Выдрать графику с текстом (включая те, что 320х200)
    4. Вставить ее обратно
     
    AndyFox нравится это.
  2.  
  3. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.215
    Не совсем понятно, какая работа программиста нужна с ресурсами Dangerous Dave 2? Текст там находится в .EXE-файле (это видно, если его распаковать, т.к. он упакован PKLITE).

    e463b927151f6d9554da5f784ef941b5.jpg
     
    AndyFox нравится это.
  4. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    28.747
    Geryon, перенес ваше сообщение в существующую тему. Как видно, в шапке уже есть ответ на ваш вопрос.
     
  5. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.215
    Все указанные пункты, кроме пункта 2, умеет программа KEENGRAPH. Разработчик этой программы специально создал её сборку для работы с DD2.

    Обсуждение темы на keenmodding.org

    Программа портит тайлы при импорте, поэтому после импорта необходимо заменить EGATILES.DD2 на оригинальный.


    Что касается импорта шрифта (он зашит в HAUNTED.EXE) - к счастью, сразу после данных о шрифте идет вот этот экранчик:

    a5b8d6b9d10341687c3c5da1b2d5fd51.jpg

    Если им пожертвовать, освободятся 4000 байт, которых с лихвой хватит для размещения символов русского шрифта. Один символ занимает 20 или 40 байт в зависимости от ширины символа в пикселях.

    Просто добавить данные в конец файла не позволят ограничения адресации подсистемы работы со шрифтами: максимальное смещение блока данных о символе от начала блока данных шрифта не может превышать 65535 байт, а до конца файла расстояние намного больше.
     

    Вложения:

    • Dave 2 ed.zip
      Размер файла:
      1,8 МБ
      Просмотров:
      102
    Последнее редактирование: 11 дек 2012
    Neitan, AndyFox, Newbilius и 6 другим нравится это.
  6. zabrus Старожил

    zabrus

    Хелпер

    Регистрация:
    6 фев 2009
    Сообщения:
    1.481
    Geryon, сегодня обязательно посмотрю, что умеет KEENGRAPH, спасибо.
     
  7. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.203
    А просто поменять смещение начала блока шрифта на хвост программы в подпрограмме рука не поднимается ?
     
  8. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.215
    Понятия не имею, где искать это смещение начала блока. Как его найти? Пытался тупо искать шестнадцатеричное смещение 0x0108B0 в HAUNTED.EXE - ничего не нашел.
     
  9. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.203
    Geryon, сперва релоки по местам раскидай, а потом уже ищи. Это всё же EXE, а не COM !
     
  10. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.215
    :shok:

    Никогда раньше не интересовался форматом EXE. Почитал здесь, но толком не понял, как "раскидать релоки".

    Саму таблицу релокаций я нашел:

    46cb4a73971d3e1d8b9d2278eceaf72a.jpg

    Так понимаю, таблица содержит пары offset:segment, вот только при прочтении фразы...

    "Together, these two words point to a third word within the load module that must have the start segment address added to it (the start segment address corresponds to the segment address at which the beginning of the program's image has been loaded)."

    ... Д'Артаньян чувствовал, что тупеет. ©

    Как понять, какой из адресов в таблице релокаций соответствует абсолютному адресу 0x0108B0 в EXE-файле?
     
    AndyFox нравится это.
  11. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.203
    Geryon, Ну, тут всё максимально просто. Кармак не стал умничать, а просто выделил под шрифты отдельный сегмент памяти (64к). Инициализация местоположения сегмента в памяти находится по адресу 1722h в EXE (это прибавив 80h MZ-header). Так как все данные разнесены по отдельным сегментам - можно не мучаться впихивая невпихуемое, а просто переместить сами сегменты или данные куда угодно.

    соответственно работа с этим сегментом происходит по адресам (для получения смещения в файле следует прибавить 80h):
    8808h
    8948h
    9355h
    93CEh

    Сам указатель на сегмент находится по адресу 9354h.

    Великолепно сказано, шевалье !

    Но не всё столь трагично, там всего то написано, что системный загрузчик при загрузке программы в память корректирует данные находящиеся по указанным в релоках адресам относительно адресов памяти в которые грузит программу.
     
    Последнее редактирование: 12 дек 2012
    Geryon, kreol, SAS и ещё 1-му нравится это.
  12. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.215
    Кажется, до меня дошло, что в таблице релокаций хранятся относительные адреса зашитых в теле программы других относительных адресов, которые загрузчик после размещения тела программы в памяти должен будет превратить в абсолютные. Так ведь?

    Но что касается всего остального:

    ...то хочется процитировать Дюма уже полностью:

    Код:
    Д'Артаньян чувствовал, что тупеет; ему казалось, что он находится в
    доме для умалишенных и что сейчас он тоже сойдет с ума, как уже сошли те,
    которые находились перед ним. Но он вынужден был молчать, так как совершенно
    не понимал, о чем идет речь.
    Что значит "Инициализация местоположения сегмента в памяти находится по адресу 1722h"? Там что, код какой-то находится?

    И что за работа ведется по адресам 8808h, 8948h, 9355h, 93CEh? И откуда взялись эти адреса?

    По адресу 9354h, если прибавить еще 80h, находится 558BEC56h. Что это за адрес такой?

    Может быть, у нас просто разные EXE-файлы? Я рассматриваю тот, что есть в выложенном мной здесь архиве с KEENGRAPH, он пропатчен каким-то образом для корректной работы с импортированными данными.

    Дело стало только за корректным переносом сегмента данных, остальное в принципе готово, вот только невпихуемое запарывает ДОСовский экран.

    af52e782b2a5d2285e3add9f144b876a.jpg
     
    Последнее редактирование: 13 дек 2012
  13. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.203
    Geryon, Файлы игры одинаковые. Просто Д'Артаньян не желает думать. Д'Артаньян желает использовать Hex-редактор вместо отладчика. :(

    Именно ! Адресация ко всему блоку происходит не по смещению, а по сегменту, местоположение которого указывается в main напрямую:
    mov dseg:[9354], seg seg003

    Вот это seg003 мы и можем поменять на произвольный адрес памяти, где нам удобно расположить таблицу символов.

    он находится в сегменте dseg, а не посередине экзешника. И это просто переменная куда заносится адрес сегмента. В момент запуска программы там вообще ничего нет и быть не должно.

    Считывается адрес сегмента в регистр es или ds и произвдится выборка нужных данных внутри сегмента с последующим программирование EGA.

    А адреса взялись из дизассемблированной игры. С чего, по идее и должен начинаться процесс перевода.

    этот вообще лежит в сегменте seg004.
    068D mov ax, 0FA0h ; это длина блока досэкрана 4000 байт (80х25 с атрибутами цвета)
    0690 push ax ; n
    0691 xor ax, ax
    0693 push ax ; dstoff
    0694 mov ax, 0B800h ;а это начало текстового видеобуфера
    0697 push ax ; dstseg
    0698 mov ax, 0
    069B push ax ; srcoff
    069C mov ax, seg seg004 ; вот он наш экран, который так портится.
    069F push ax ; srcseg
    06A0 call _movedata
    06A3 add sp, 0Ah
    06A6 xor ax, ax
    06A8 push ax ; cmd
    06A9 call _bioskey
    06AC inc sp
    06AD inc sp
    06AE call _clrscr

    Суть такова, что берём мы этот досэкран и переносим его в хвост файла, допустим, потом корректируем длину файла в MZ-header и заносим новое смещение сегмента в адрес 069D (в экзешнике это 71D). Таким образом получаем ещё 4000 байт халявы в хвосте таблицы символов.
     
    Последнее редактирование: 13 дек 2012
    Geryon и Dimouse нравится это.
  14. zabrus Старожил

    zabrus

    Хелпер

    Регистрация:
    6 фев 2009
    Сообщения:
    1.481
    KEENGRAPH прекрасно работает, перерисованную графику прекрасно вставляет.

    Перерисовал все кроме первого титульного экрана, так как не могу определиться с переводом названия игры, предлагайте варианты.
     
  15. Genesis Злоботряс

    Genesis

    Регистрация:
    21 апр 2011
    Сообщения:
    9.176
    zabrus, Опасный Дэйв в доме с привидениями - дословно. Или Опасный Дэйв и Опасный Дом - более юмористично.
     
    zabrus нравится это.
  16. zabrus Старожил

    zabrus

    Хелпер

    Регистрация:
    6 фев 2009
    Сообщения:
    1.481
    Дословно, но не красиво при написании, на оригинальную надпись меньше всего похоже.
     
  17. kirik-82 DOSтойным играм достойный перевод

    kirik-82

    Переводчик

    Регистрация:
    19 дек 2007
    Сообщения:
    1.977
    zabrus, может, Рисковый Дэйв, т.к. в случае с "опасным" не понятно для кого он опасен, а вот "рисковый" означает, что лезет в очень опасные неприятности.
     
    Genesis, compart, zabrus и ещё 1-му нравится это.
  18. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.674
    Как бы потом с третьей частью не пересеклось:

    Dangerous Dave's Risky Rescue

    Но звучит, не отнять.
     
    zabrus нравится это.
  19. Guyver

    Guyver

    Регистрация:
    2 окт 2005
    Сообщения:
    4.969
    Можно еще Дерзкий Дейв.
     
    compart, Dimouse и zabrus нравится это.
  20. kirik-82 DOSтойным играм достойный перевод

    kirik-82

    Переводчик

    Регистрация:
    19 дек 2007
    Сообщения:
    1.977
    ну, это не проблема. в третьей части после событие первых двух, если дело дойдёт до перевода, он уже по праву станет "опасным" =)
     
    A.P.$lasH нравится это.
  21. zabrus Старожил

    zabrus

    Хелпер

    Регистрация:
    6 фев 2009
    Сообщения:
    1.481
    Рисковй мне нравится, возможно стоит еще поиграть синонимами, но вариант действительно лучше чем просто опасный.

    Но что же все таки с местом действия, пока самый нравящийся мне вариант "и особняк призраков".
     
    AndyFox нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление