1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

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

Вопросы по работе с ресурсами игр

Тема в разделе "Мастерская", создана пользователем Alex2x, 10 янв 2005.

  1. Alex2x

    Alex2x

    Регистрация:
    9 июл 2004
    Сообщения:
    207
    Пишите в эту тему если вы:

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


    Несколько полезных ссылок для работы с ресурсами игр:

    Руководство по HEX-редакторам от reg2s

    Сайты с описаниями различных игровых форматов:

    http://wiki.xentax.com/index.php/GRAFs/All
    Category:Game Formats - MultimediaWiki
    Category:Game Intro Page - ModdingWiki
    watto studios - http://www.watto.org
    oezmen.eu > Game resources

    Multi Ripper 2.80
    Mega Ripper 5.00
    +плагин Game Archive UnPacker 0.6.0.1 PRO для Total Commander

    Шапка by Dimouse

    -------------------------------------Оригинальное сообщение---------------------------------Люди, это, конечно, не техническая проблема, но никто не знает, можно ли и как вытащить из игры миди-музыку?
    //Перенесено из темы про Alone in the Dark.

    оригинальное сообщение
     
    Последнее редактирование модератором: 3 фев 2019
    OLD-NEW Player, AndyFox и Corak нравится это.
  2. warr11r Игропотрошитель

    warr11r

    Переводчик

    Регистрация:
    9 сен 2015
    Сообщения:
    2.287
    @Tigoro, это кодек для видеофайла, я с таким при переводе Phantasmagoria: A Puzzle of Flesh работал. Есть утилиты, есть исходники. Пробовал достать и встроить в avi-файл, нахрапом не получилось. Нужно знать параметры, чтобы вписать их в заголовок.
     
    Tigoro нравится это.
  3. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.422
    Распаковщик файлов ресурсов .lib старых игр Electronic Arts для DOS (вроде LHX: Attack Chopper (1990, DOS)
    https://github.com/unbalanced-sources/ealib_extr (исходники на языке NIM).
    Компилятор для linux и windows - Nim Programming Language
    Вложения:
    lhxx.7z - распакованные библиотеки из LHX
    ealib_extr-main.zip - исходник распаковщика
    ealib_extr.7z - скомпилированный вариант для линукс 64 бит; сжат upx --ultra --brute.
     

    Вложения:

    • lhxx.7z
      Размер файла:
      284,8 КБ
      Просмотров:
      11
    • ealib_extr-main.zip
      Размер файла:
      2,2 КБ
      Просмотров:
      18
    • ealib_extr.7z
      Размер файла:
      43,9 КБ
      Просмотров:
      17
    Последнее редактирование: 11 янв 2025
    MrFlibble, Gamerun и Dimouse нравится это.
  4. LASTOFASS

    LASTOFASS

    Хелпер

    Регистрация:
    20 сен 2021
    Сообщения:
    211
     

    Вложения:

  5. kreol Старший офицер Чёрной Гвардии

    kreol

    Администратор

    Регистрация:
    2 июл 2007
    Сообщения:
    121.959
    @LASTOFASS, перенёс твоё сообщение сюда, сообщения нарушителя правил удалил.
    А то получается, что он написал в теме, не имеющей отношения к вопросу, после удаления мной его предыдущего сообщения, но получил помощь и теперь, наверное, считает себя "победителем", - но так, естественно, не будет: все сообщения не по теме удалены.

    Для посетителей форума: искать различные утилиты по работе с ресурсами игр нужно в этой теме (или хотя бы в этом разделе). Данные утилиты и их поиск не имеют никакого отношения к техническим проблемам с играми, которые обсуждаются в разделе "Установка и запуск игр". Сообщения по данным вопросам, оставленные в упомянутом разделе, будут переноситься сюда либо удаляться.
     
  6. Gamerun

    Gamerun

    Хелпер

    Регистрация:
    13 июн 2010
    Сообщения:
    9.218
    Несколько полезных утилит к The Settlers IV (2001, Windows):
    https://github.com/settlers-united/s4-ASILoader (оригинальный репозиторий)- загрузчик мод-плагинов к игре. Поддерживаются версии Gold Edition и History Edition.
    https://github.com/settlers-united/s4-ModApi (оригинальный репозиторий) - API-библиотека для разработки модов.
    https://github.com/tomsoftware/Settlers.ts - утилита для просмотра карт и ресурсов, в том числе графических.

    https://github.com/settlers-united/s3-skripte - утилита для The Settlers III (1998, Windows) по созданию скриптов.
     
    Последнее редактирование: 12 мар 2025
    Aynane нравится это.
  7. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.422
    Переписанный с ява на C++ распаковщик библиотек в формате NL (сигнатура в начале заголовка), оригинальный код утилиты на ява https://github.com/old-games/game-utilities/tree/master/NikitaTools. Во вложении код, пример библиотеки из игры Ворона (1992, DOS) и скомпилированная утилита для linux amd64. Формат библиотек 'RS' (в заголовке) не поддерживается, как и в оригинальном коде.
     

    Вложения:

    • nlunpack.7z
      Размер файла:
      88,5 КБ
      Просмотров:
      18
    Последнее редактирование: 6 апр 2025
    rusty_dragon, ZaRR и Dimouse нравится это.
  8. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.422
    Патчер под линукс для исходного кода dosbox на замену шрифтов (в int10_memory.cpp) и включение keyboardlayout в режим RU (в dosbox.cpp). Образцы шрифтов в hex на замену взяты из RKM и DOSBox скомпилированного с шрифтами от MC 1502. Исходный код утилиты прилагается + скрипт на питоне конверта fnt в hexdump вида кода dosbox и скрипт для автоматизации патча. Может быть кому-то пригодится, но, велосипед тот ещё :-)
     

    Вложения:

  9. Jurgen Krace

    Jurgen Krace

    Регистрация:
    13 мар 2007
    Сообщения:
    1.209
    Хочу достать ресурсы (графику) из игры Deuteros: The Next Millennium, игра амижная. Кому-нибудь уже доводилось подобным заниматься? Есть ли какие-то советы?
     
  10. MAZterXP

    MAZterXP

    Хелпер

    Регистрация:
    4 ноя 2018
    Сообщения:
    1.616
    Кто-нибудь может вытащить музыку в midi/mus из игры Grand Prix Unlimited? Информация о музыке есть внутри gpu.exe:

    GPU1.MUS
    FSGPU2.MUS
    FGPU3.MUS

    Но эти файлы скрыты внутри других, возможно в GPU.DAT файле.

    На Vogons.org была тема про распаковку midi из других Accolade игр и даже была дана ссылка на музыку уже вытащенную из различных игр (не только PC, но и множество других платформ), но как и ожидалось среди них нет необходимой.

    Написано, что надо достать распаковщик, а затем можно будет им распаковать, но для меня это непостижимая опция.
     
    Последнее редактирование: 16 июн 2025
  11. redunka

    redunka

    Хелпер

    Регистрация:
    27 май 2020
    Сообщения:
    1.334
    А вот этот архив оттуда - это же вроде та игра, нет?
     
    MAZterXP нравится это.
  12. MAZterXP

    MAZterXP

    Хелпер

    Регистрация:
    4 ноя 2018
    Сообщения:
    1.616
    Ого, вероятно он, я искал по gpu.
     
    redunka нравится это.
  13. Jurgen Krace

    Jurgen Krace

    Регистрация:
    13 мар 2007
    Сообщения:
    1.209
    Можно ли вытащить музыку из Terminal Velocity?

    В ютюбах есть весь ost, но там нет того тестового сэмпла, который звучит в сетапе при настройке звука!
     
  14. Tigoro AI General

    Tigoro

    Регистрация:
    4 фев 2010
    Сообщения:
    3.422
    @Jurgen Krace, а вы знаток :-)

    Это звучит аудиопример, входит в состав пакета драйверов DigPak/MidPak (их и нужно настроить для звуковой системы игры).

    SETD.SND: Rob Wallace
    Original Music by: Rob Wallace, composed for Roland Sound Canvas; digitized into 8 bit sound by John W. Ratcliff for this demo.

    Вложение - оригинал + описание и конверт в wav. На сколько помню, можно найти и в более лучшем качестве этот фрагмент (в каких-то играх он играл получше, чем просто 8 бит 11кгц), только для этого нужно перебрать много игр и программ на базе этого аудиодвижка. Возможно, за счёт карты звучало более лучше, чем SB Pro. Либо путаю аудиофрамент и в вариантах где было и 8 и 16 бит, он был другой.
     

    Вложения:

    Последнее редактирование: 15 июл 2025
    Jurgen Krace, Dimouse и mcrstar нравится это.
  15. Quester

    Quester

    Legacy

    Регистрация:
    25 сен 2003
    Сообщения:
    720
    Разбирал форматы файлов Dark Sun и Al-Quadim, искал тексты.
    По Dark Sun: в GFF файлах лежат файлы GPL, которые, судя по всему, являются сценариями.
    В Al-Quadim они лежат сразу в открытом виде, с наименованием GPLxx.COD.
    Если я правильно понял по отладке кода - это оверлеи от компилятора Borland C++. Никогда с оверлеями не работал, поэтому как это действует понять не могу. Но в GPL файлах не вижу текстов диалогов, хотя они явно там должны быть.
    Может есть желающие попробовать отладить код и разобраться как вытащить текст?
     
    Dimouse нравится это.
  16. oFF_rus .

    oFF_rus

    Legacy

    Регистрация:
    25 фев 2007
    Сообщения:
    2.164
    Сомнительно, хотя бы потому что основной исполняемый файл Al-Qadim скомпилирован Watcom C++.

    Похоже там есть набор неких команд/опкодов, но конкретно строки начинаются с опкода 05. После этого опкода лежит сама строка, закодированная в 7-битной кодировке, т.е. каждые 8 байт файла кодируют 9 символов текста. Старшие 7 бит первого байта кодируют первый символ. Младший бит первого байта это старший бит следующего символа, а старшие 6 бит второго байт это младшие биты второго символа и т.д. Концом строки считается символ с кодом 3 (при декодировании такого символа обработка текущей строки прекращается и в результат вместо символа с кодом 3 вставляется символ с кодом 0). Все символы с кодами меньше чем у пробела (0x20) при декодировании заменяются на пробелы.

    Код:
    cseg01:00023D4D                 movsx   eax, keyIndex
    cseg01:00023D54                 add     eax, eax
    cseg01:00023D56                 movzx   edx, gplIndexes[eax]
    cseg01:00023D5D                 mov     eax, currentGPLAddr
    cseg01:00023D62                 add     eax, edx
    cseg01:00023D64                 mov     al, [eax]
    cseg01:00023D66                 mov     [ebp+opcode], al
    cseg01:00023D69                 cmp     [ebp+opcode], 2
    cseg01:00023D6D                 jb      short loc_23D7D
    cseg01:00023D6F                 cmp     [ebp+opcode], 2
    cseg01:00023D73                 jbe     short loc_23D9B
    cseg01:00023D75                 cmp     [ebp+opcode], 5
    cseg01:00023D79                 jz      short @@readMessage
    cseg01:00023D7B                 jmp     short loc_23DB1
    ...
    cseg01:00023DA7 @@readMessage:                          ; CODE XREF: sub_23D44+35j
    cseg01:00023DA7                 call    ReadNextGPLByte
    cseg01:00023DAC                 call    DecodeText
    
    Код:
    cseg01:00023DCD ; =============== S U B R O U T I N E =======================================
    cseg01:00023DCD
    cseg01:00023DCD ; Attributes: bp-based frame
    cseg01:00023DCD
    cseg01:00023DCD DecodeText      proc near               ; CODE XREF: sub_23D44+68p
    cseg01:00023DCD
    cseg01:00023DCD result          = dword ptr -14h
    cseg01:00023DCD currentChar     = dword ptr -10h
    cseg01:00023DCD decodedChar     = dword ptr -0Ch
    cseg01:00023DCD strPosition     = dword ptr -8
    cseg01:00023DCD currentRShift   = byte ptr -4
    cseg01:00023DCD
    cseg01:00023DCD                 push    ebx
    cseg01:00023DCE                 push    ecx
    cseg01:00023DCF                 push    edx
    cseg01:00023DD0                 push    esi
    cseg01:00023DD1                 push    edi
    cseg01:00023DD2                 enter   14h, 0
    cseg01:00023DD6                 mov     [ebp+strPosition], 0
    cseg01:00023DDD                 mov     [ebp+currentChar], 0
    cseg01:00023DE4                 mov     [ebp+currentRShift], 1
    cseg01:00023DE8
    cseg01:00023DE8 @@nextChar:                             ; CODE XREF: DecodeText:loc_23EA7j
    cseg01:00023DE8                 cmp     word ptr [ebp+strPosition], 299
    cseg01:00023DEE                 jnb     @@stringMaxReached
    cseg01:00023DF4                 cmp     [ebp+currentRShift], 0
    cseg01:00023DF8                 jbe     short @@newByteStart
    cseg01:00023DFA                 mov     eax, [ebp+currentChar]
    cseg01:00023DFD                 shl     eax, 8
    cseg01:00023E00                 and     eax, 0FF00h
    cseg01:00023E05                 mov     [ebp+currentChar], eax
    cseg01:00023E08                 call    ReadNextByte
    cseg01:00023E0D                 movzx   eax, al
    cseg01:00023E10                 or      [ebp+currentChar], eax
    cseg01:00023E13
    cseg01:00023E13 @@newByteStart:                         ; CODE XREF: DecodeText+2Bj
    cseg01:00023E13                 movzx   ecx, [ebp+currentRShift]
    cseg01:00023E17                 mov     edx, [ebp+currentChar]
    cseg01:00023E1A                 shr     edx, cl
    cseg01:00023E1C                 and     edx, 7Fh
    cseg01:00023E1F                 mov     [ebp+decodedChar], edx
    cseg01:00023E22                 movzx   edx, word ptr [ebp+strPosition]
    cseg01:00023E26                 mov     ecx, textBufferAddr
    cseg01:00023E2C                 add     edx, ecx
    cseg01:00023E2E                 mov     al, byte ptr [ebp+decodedChar]
    cseg01:00023E31                 mov     [edx], al
    cseg01:00023E33                 movzx   edx, word ptr [ebp+strPosition]
    cseg01:00023E37                 mov     ecx, textBufferAddr
    cseg01:00023E3D                 add     edx, ecx
    cseg01:00023E3F                 cmp     byte ptr [edx], 3
    cseg01:00023E42                 jnz     short @@notEndOfStr
    cseg01:00023E44                 movzx   eax, word ptr [ebp+strPosition]
    cseg01:00023E48                 mov     edx, textBufferAddr
    cseg01:00023E4E                 add     eax, edx
    cseg01:00023E50                 mov     byte ptr [eax], 0
    cseg01:00023E53                 mov     eax, textBufferAddr
    cseg01:00023E58                 mov     [ebp+result], eax
    cseg01:00023E5B                 jmp     @@exit
    cseg01:00023E60 ; ---------------------------------------------------------------------------
    cseg01:00023E60
    cseg01:00023E60 @@notEndOfStr:                          ; CODE XREF: DecodeText+75j
    cseg01:00023E60                 movzx   eax, word ptr [ebp+strPosition]
    cseg01:00023E64                 mov     edx, textBufferAddr
    cseg01:00023E6A                 add     eax, edx
    cseg01:00023E6C                 cmp     byte ptr [eax], 20h
    cseg01:00023E6F                 jb      short @@controlChar
    cseg01:00023E71                 movzx   eax, word ptr [ebp+strPosition]
    cseg01:00023E75                 mov     edx, textBufferAddr
    cseg01:00023E7B                 add     eax, edx
    cseg01:00023E7D                 cmp     byte ptr [eax], 7Eh
    cseg01:00023E80                 jbe     short @@normalChar
    cseg01:00023E82
    cseg01:00023E82 @@controlChar:                          ; CODE XREF: DecodeText+A2j
    cseg01:00023E82                 movzx   eax, word ptr [ebp+strPosition]
    cseg01:00023E86                 mov     edx, textBufferAddr
    cseg01:00023E8C                 add     eax, edx
    cseg01:00023E8E                 mov     byte ptr [eax], 20h
    cseg01:00023E91
    cseg01:00023E91 @@normalChar:                           ; CODE XREF: DecodeText+B3j
    cseg01:00023E91                 mov     eax, [ebp+strPosition]
    cseg01:00023E94                 inc     [ebp+strPosition]
    cseg01:00023E97                 mov     al, [ebp+currentRShift]
    cseg01:00023E9A                 inc     [ebp+currentRShift]
    cseg01:00023E9D                 cmp     [ebp+currentRShift], 7
    cseg01:00023EA1                 jbe     short loc_23EA7
    cseg01:00023EA3                 mov     [ebp+currentRShift], 0
    cseg01:00023EA7
    cseg01:00023EA7 loc_23EA7:                              ; CODE XREF: DecodeText+D4j
    cseg01:00023EA7                 jmp     @@nextChar
    cseg01:00023EAC ; ---------------------------------------------------------------------------
    cseg01:00023EAC
    cseg01:00023EAC @@stringMaxReached:                     ; CODE XREF: DecodeText+21j
    cseg01:00023EAC                 movzx   edx, word ptr [ebp+strPosition]
    cseg01:00023EB0                 mov     eax, textBufferAddr
    cseg01:00023EB5                 add     eax, edx
    cseg01:00023EB7                 mov     byte ptr [eax], 0
    cseg01:00023EBA                 movsx   eax, keyIndex
    cseg01:00023EC1                 add     eax, eax
    cseg01:00023EC3                 movzx   eax, gplIndexes[eax]
    cseg01:00023ECA                 mov     edx, currentGPLAddr
    cseg01:00023ED0                 add     eax, edx
    cseg01:00023ED2                 cmp     byte ptr [eax], 0
    cseg01:00023ED5                 jnz     short loc_23EE0
    cseg01:00023ED7                 mov     stringNotFinished, 1
    cseg01:00023EDE                 jmp     short loc_23EE7
    cseg01:00023EE0 ; ---------------------------------------------------------------------------
    cseg01:00023EE0
    cseg01:00023EE0 loc_23EE0:                              ; CODE XREF: DecodeText+108j
    cseg01:00023EE0                 mov     stringNotFinished, 0
    cseg01:00023EE7
    cseg01:00023EE7 loc_23EE7:                              ; CODE XREF: DecodeText+111j
    cseg01:00023EE7                 mov     eax, textBufferAddr
    cseg01:00023EEC                 mov     [ebp+result], eax
    cseg01:00023EEF
    cseg01:00023EEF @@exit:                                 ; CODE XREF: DecodeText+8Ej
    cseg01:00023EEF                 mov     eax, [ebp+result]
    cseg01:00023EF2                 leave
    cseg01:00023EF3                 pop     edi
    cseg01:00023EF4                 pop     esi
    cseg01:00023EF5                 pop     edx
    cseg01:00023EF6                 pop     ecx
    cseg01:00023EF7                 pop     ebx
    cseg01:00023EF8                 retn
    cseg01:00023EF8 DecodeText      endp
    
     
    Dimouse нравится это.
  17. Quester

    Quester

    Legacy

    Регистрация:
    25 сен 2003
    Сообщения:
    720
    Спасибо огромное! Есть ещё подумать почему так вышло, но худо-бедно текст вытащить удалось.
    IDA Pro упорно определяет Dark Sun как собранный на Borland C++.
    --- добавлено 9 авг 2025, предыдущее сообщение размещено: 9 авг 2025 ---
    В целом разобрался с своими ошибками при декодировании, плюс вылезли случаи иногда 05 - это не опкод, а данные, поэтому иногда проскакивают "фантомные строки".
    А есть возможность найти опкоды, которые выполняют условный переход? Так можно будет увеличить длину строк.
     

    Вложения:

    • GPL11_COD.png
      GPL11_COD.png
      Размер файла:
      77,5 КБ
      Просмотров:
      14
    Dimouse нравится это.
  18. Mov AX 0xDEAD

    Mov AX 0xDEAD

    Регистрация:
    24 апр 2023
    Сообщения:
    345
    все верно,
    dark sun = Borland (реальный режим 286 ?)
    al-qadim = Watcom под dos4gw экстендер, 386
     
    Последнее редактирование: 9 авг 2025
  19. oFF_rus .

    oFF_rus

    Legacy

    Регистрация:
    25 фев 2007
    Сообщения:
    2.164
    Это могут быть следующие опкоды, которые явно меняют значение Instruction Pointer

    Код:
    Opcode12_jump
    Opcode13_call
    Opcode27
    Opcode29
    Opcode3E_if
    Opcode3F
    Opcode63
    Opcode64
    
    Например, то что можно принять за FAT в начале скриптов, на самом деле является инструкциями вызова процедур - 13h <16-bit address> (т.е. это список инструкций для вызова тех или иных функций скрипта, может быть это обработчики действий с какими-то объектами).

    Вообще в Al-Qadim 9Eh опкодов (правда некоторое количество не реализовано) и многие содержат параметры, так что при простом поиске по номеру байта может быть какое-то количество false-positive вхождений как и при поиске строк по байту 05. Чтобы надёжно парсить эти скрипты надо разбираться со всеми опкодами хотя бы до уровня сколько в них параметров и как они кодируются (только ли константы или допускается использование на их месте других опкодов - это точно допускается для опкода 13h, хотя вполне может никогда не встречаться в используемых игрой файлах).
     
    Dimouse нравится это.
  20. Quester

    Quester

    Legacy

    Регистрация:
    25 сен 2003
    Сообщения:
    720
    Понял, это будет слишком долго и муторно. Тогда будем ограничиваться в текущих строках.
    Спасибо большое!
     
  21. Mishanya235

    Mishanya235

    Регистрация:
    5 окт 2025
    Сообщения:
    7
    Здравствуйте. Хотел бы посмотреть на структуру игры GT Advance 3 на GBA - хотел бы посмотреть исходный код игры. Так сказать, понять, что под капотом. Чисто в образовательных целях. Посоветуйте, реально ли это сделать, и если да, то как.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление