Текст
Цитата: Meloman19 от 09.05.2017, 19:25https://github.com/Meloman19/PersonaText
Программа уже что-то может. Что собственно:
- Открывает MSG1 файлы из любого типа файла. (ищет по факту наличия независимо от формата)
- Текст формирует на основе вашего шрифта и выставленных соответствующих каждому символу знаков (оригинальный английский шрифт с картой символов уже есть, но можно брать своё)
- Может сохранять полученный текст в текстовый файл. Так же в "Tool -> Extract text from..." можно извлекать текст сразу из папки или выбранных нескольких файлов.
- Все строки текста теперь сразу визуализируются. Так же в "Tool -> Text Visualizer" можно не открывая какой-либо файл смотреть, как будет выглядит твой текст с соответствующим шрифтом.
- И само главное теперь готовый перевод можно запаковывать обратно в MSG1-файл.
https://github.com/Meloman19/PersonaText
Программа уже что-то может. Что собственно:
- Открывает MSG1 файлы из любого типа файла. (ищет по факту наличия независимо от формата)
- Текст формирует на основе вашего шрифта и выставленных соответствующих каждому символу знаков (оригинальный английский шрифт с картой символов уже есть, но можно брать своё)
- Может сохранять полученный текст в текстовый файл. Так же в "Tool -> Extract text from..." можно извлекать текст сразу из папки или выбранных нескольких файлов.
- Все строки текста теперь сразу визуализируются. Так же в "Tool -> Text Visualizer" можно не открывая какой-либо файл смотреть, как будет выглядит твой текст с соответствующим шрифтом.
- И само главное теперь готовый перевод можно запаковывать обратно в MSG1-файл.
Цитата: wrr35 от 09.05.2017, 20:10Возможность обратного экспорта в PM1 не знаю когда реализую. Основная проблема: текст изобилует различными служебными данными: какой звук воспроизводить, какое действие сделать, кто говорит и т.д. Причём всё это вплетено в текст, а не отдельными разделами, что усложняет обратную вставку байтов.
А для чего PM2 и PM3? Может как раз они эту функцию выполняют или участвуют?
Однако того, что есть достаточно, чтобы начать перевод. Так же со временем научу прогу извлекать текст из BF и BMD файлов.
BF это контейнер, в котором лежит BMD (BMD лежит как в открытом виде так и в таких вот бинарниках и контейнерах) с текстом и служебными данными. Экстрактор BF давно написан и работает вроде исправно, экстрактор BMD работает с перебоями (вот пример файла, который он недораспаковывает). Одно ясно, bmd редактируются пока без особых проблем. Также текст лежит в файлах формата ftd.
Возможность обратного экспорта в PM1 не знаю когда реализую. Основная проблема: текст изобилует различными служебными данными: какой звук воспроизводить, какое действие сделать, кто говорит и т.д. Причём всё это вплетено в текст, а не отдельными разделами, что усложняет обратную вставку байтов.
А для чего PM2 и PM3? Может как раз они эту функцию выполняют или участвуют?
Однако того, что есть достаточно, чтобы начать перевод. Так же со временем научу прогу извлекать текст из BF и BMD файлов.
BF это контейнер, в котором лежит BMD (BMD лежит как в открытом виде так и в таких вот бинарниках и контейнерах) с текстом и служебными данными. Экстрактор BF давно написан и работает вроде исправно, экстрактор BMD работает с перебоями (вот пример файла, который он недораспаковывает). Одно ясно, bmd редактируются пока без особых проблем. Также текст лежит в файлах формата ftd.
Загруженные файлы:Информация
29.4.2017
Цитата: Meloman19 от 09.05.2017, 20:35Цитата: wrr35 от 09.05.2017, 20:10Возможность обратного экспорта в PM1 не знаю когда реализую. Основная проблема: текст изобилует различными служебными данными: какой звук воспроизводить, какое действие сделать, кто говорит и т.д. Причём всё это вплетено в текст, а не отдельными разделами, что усложняет обратную вставку байтов.
А для чего PM2 и PM3? Может как раз они эту функцию выполняют или участвуют?
Однако того, что есть достаточно, чтобы начать перевод. Так же со временем научу прогу извлекать текст из BF и BMD файлов.
BF это контейнер, в котором лежит BMD (BMD лежит как в открытом виде так и в таких вот бинарниках и контейнерах) с текстом и служебными данными. Экстрактор BF давно написан и работает вроде исправно, экстрактор BMD работает с перебоями (вот пример файла, который он недораспаковывает). Одно ясно, bmd редактируются пока без особых проблем. Также текст лежит в файлах формата ftd.
Это всё я и так знаю. Тут дело в другом: понять, как именно BMD файл или по другому MSG1 (в header такое название), расположен в том же BF файле, чтобы извлекать и запаковывать без проблем.
То же самое и с самим BMD файлом. Распаковщик работает с перебоями, потому что, как я уже говорил, в тексте намешаны служебные команды и отчленить их, а потом обратно присобачить - та ещё задачка. И тут проблема в том, что некоторые команды не понятно, что делают и при этом их значение различно в английской и японской версии - это значит, что они завязаны как-то, либо на тексте, либо на чём-то другом. В этом и заключается основная сложность. А так пожалуйста:
BDM файл во всей красе.
================================================
HEADER:
4 byte - 0x07000000
4 byte - MSG1 size
8 byte - "MSG1"
4 byte - END BLOCK's position
4 byte - Unknown (Don't changed)
4 byte - Count of MSG
4 byte - Unknown (Don't changed - always "00 00 02 00")
================================================
POINTER BLOCK:
---------------
For Each MSG:
4 byte - Type of MSG (if 0 then MSG, if 1 then SEL)
4 byte - MSG's position from POINTER BLOCK's position
---------------
4 byte - NAME BLOCK position from POINTER BLOCK's start position
4 byte - Count of using Name
8 byte - Unknown (fill 0)
================================================
MSG BLOCK:
---------------
For MSG_***:
7 byte - Name of MSG
17 byte - Unknown (Don't changed - always fill 0)
2 byte - Count of Strings
2 byte - Unknown (Don't changed)
For Each String: 4 byte - Unknown (Don't changed, may be link)
4 byte - Size of Strings Block
---------------
STRING BLOCK:
"F2 05 FF FF F1 41" - Start String
"F1 21" - End String
---------------
In end add last byte is "00". After that fill with zero to near position divisible by 4.
---------------
For SEL_***
7 byte - Name of MSG
19 byte - Unknown (Don't changed - always fill 0)
2 byte - Count of Strings
4 byte - Fill 0
For Each String: 4 byte - Unknown (Don't changed, may be link)
4 byte - Size of Strings Block
---------------
STRING BLOCK:
"F2 05 FF FF F1 41" - Start String
"00" - End String
---------------
In end add last byte is "00". After that fill with zero to near position divisible by 4.
---------------
================================================
NAME BLOCK:
For each Name: 4 byte - Unknown
After that starts Names. Name end with "00". After that fill with zero to
Цитата: wrr35 от 09.05.2017, 20:10Возможность обратного экспорта в PM1 не знаю когда реализую. Основная проблема: текст изобилует различными служебными данными: какой звук воспроизводить, какое действие сделать, кто говорит и т.д. Причём всё это вплетено в текст, а не отдельными разделами, что усложняет обратную вставку байтов.
А для чего PM2 и PM3? Может как раз они эту функцию выполняют или участвуют?
Однако того, что есть достаточно, чтобы начать перевод. Так же со временем научу прогу извлекать текст из BF и BMD файлов.
BF это контейнер, в котором лежит BMD (BMD лежит как в открытом виде так и в таких вот бинарниках и контейнерах) с текстом и служебными данными. Экстрактор BF давно написан и работает вроде исправно, экстрактор BMD работает с перебоями (вот пример файла, который он недораспаковывает). Одно ясно, bmd редактируются пока без особых проблем. Также текст лежит в файлах формата ftd.
Это всё я и так знаю. Тут дело в другом: понять, как именно BMD файл или по другому MSG1 (в header такое название), расположен в том же BF файле, чтобы извлекать и запаковывать без проблем.
То же самое и с самим BMD файлом. Распаковщик работает с перебоями, потому что, как я уже говорил, в тексте намешаны служебные команды и отчленить их, а потом обратно присобачить - та ещё задачка. И тут проблема в том, что некоторые команды не понятно, что делают и при этом их значение различно в английской и японской версии - это значит, что они завязаны как-то, либо на тексте, либо на чём-то другом. В этом и заключается основная сложность. А так пожалуйста:
BDM файл во всей красе.
================================================
HEADER:
4 byte - 0x07000000
4 byte - MSG1 size
8 byte - "MSG1"
4 byte - END BLOCK's position
4 byte - Unknown (Don't changed)
4 byte - Count of MSG
4 byte - Unknown (Don't changed - always "00 00 02 00")
================================================
POINTER BLOCK:
---------------
For Each MSG:
4 byte - Type of MSG (if 0 then MSG, if 1 then SEL)
4 byte - MSG's position from POINTER BLOCK's position
---------------
4 byte - NAME BLOCK position from POINTER BLOCK's start position
4 byte - Count of using Name
8 byte - Unknown (fill 0)
================================================
MSG BLOCK:
---------------
For MSG_***:
7 byte - Name of MSG
17 byte - Unknown (Don't changed - always fill 0)
2 byte - Count of Strings
2 byte - Unknown (Don't changed)
For Each String: 4 byte - Unknown (Don't changed, may be link)
4 byte - Size of Strings Block
---------------
STRING BLOCK:
"F2 05 FF FF F1 41" - Start String
"F1 21" - End String
---------------
In end add last byte is "00". After that fill with zero to near position divisible by 4.
---------------
For SEL_***
7 byte - Name of MSG
19 byte - Unknown (Don't changed - always fill 0)
2 byte - Count of Strings
4 byte - Fill 0
For Each String: 4 byte - Unknown (Don't changed, may be link)
4 byte - Size of Strings Block
---------------
STRING BLOCK:
"F2 05 FF FF F1 41" - Start String
"00" - End String
---------------
In end add last byte is "00". After that fill with zero to near position divisible by 4.
---------------
================================================
NAME BLOCK:
For each Name: 4 byte - Unknown
After that starts Names. Name end with "00". After that fill with zero to
Цитата: sgtWhite от 10.05.2017, 08:10Meloman19, у меня вопрос по вставке готового текста в .pm1 на текущем этапе. Учитывая необходимость переноса строк, наиболее приемлемым вариантом покамест остается hex-редактор, верно?
Meloman19, у меня вопрос по вставке готового текста в .pm1 на текущем этапе. Учитывая необходимость переноса строк, наиболее приемлемым вариантом покамест остается hex-редактор, верно?
Информация
29.4.2017
Цитата: Meloman19 от 10.05.2017, 10:29Цитата: sgtWhite от 10.05.2017, 08:10Meloman19, у меня вопрос по вставке готового текста в .pm1 на текущем этапе. Учитывая необходимость переноса строк, наиболее приемлемым вариантом покамест остается hex-редактор, верно?
Ну в общем-то да) разве что я ещё могу реализовать получение в битовом виде уже переведённого текста, но вот различные элементы pm1 файла придётся уже вручную считать и вписывать.
Цитата: sgtWhite от 10.05.2017, 08:10Meloman19, у меня вопрос по вставке готового текста в .pm1 на текущем этапе. Учитывая необходимость переноса строк, наиболее приемлемым вариантом покамест остается hex-редактор, верно?
Ну в общем-то да) разве что я ещё могу реализовать получение в битовом виде уже переведённого текста, но вот различные элементы pm1 файла придётся уже вручную считать и вписывать.
Цитата: sgtWhite от 10.05.2017, 17:06Тридцать тысяч внутриигровых сообщений (это только .pm1) ручной работы - каждая буква, каждый символ, каждый перенос и пробел. Мне нравится )) Буду набивать, но в данном случае действительно следует принять во внимание бренность бытия. Хотя, если перефразировать Шекли, то, скорее всего, "трудно только первую тысячу строк - потом привыкаешь" ))
Тридцать тысяч внутриигровых сообщений (это только .pm1) ручной работы - каждая буква, каждый символ, каждый перенос и пробел. Мне нравится )) Буду набивать, но в данном случае действительно следует принять во внимание бренность бытия. Хотя, если перефразировать Шекли, то, скорее всего, "трудно только первую тысячу строк - потом привыкаешь" ))
Информация
29.4.2017
Цитата: Meloman19 от 10.05.2017, 17:54Цитата: sgtWhite от 10.05.2017, 17:06Тридцать тысяч внутриигровых сообщений (это только .pm1) ручной работы - каждая буква, каждый символ, каждый перенос и пробел. Мне нравится )) Буду набивать, но в данном случае действительно следует принять во внимание бренность бытия. Хотя, если перефразировать Шекли, то, скорее всего, "трудно только первую тысячу строк - потом привыкаешь" ))
Ну ты погоди ещё набивать - сначала всё переведи, благо готовый текст у тебя уже есть. Нужно доразобрать формат. Можно конечно пытаться вписывать текст на место прошлого, то есть не меняя длины, но зачем загонять себя в такие рамки)
Цитата: sgtWhite от 10.05.2017, 17:06Тридцать тысяч внутриигровых сообщений (это только .pm1) ручной работы - каждая буква, каждый символ, каждый перенос и пробел. Мне нравится )) Буду набивать, но в данном случае действительно следует принять во внимание бренность бытия. Хотя, если перефразировать Шекли, то, скорее всего, "трудно только первую тысячу строк - потом привыкаешь" ))
Ну ты погоди ещё набивать - сначала всё переведи, благо готовый текст у тебя уже есть. Нужно доразобрать формат. Можно конечно пытаться вписывать текст на место прошлого, то есть не меняя длины, но зачем загонять себя в такие рамки)
Цитата: sgtWhite от 11.05.2017, 00:28Цитата: Meloman19 от 10.05.2017, 17:54Можно конечно пытаться вписывать текст на место прошлого, то есть не меняя длины, но зачем загонять себя в такие рамки)
Согласен, это вообще не решение.
Цитата: Meloman19 от 10.05.2017, 17:54Можно конечно пытаться вписывать текст на место прошлого, то есть не меняя длины, но зачем загонять себя в такие рамки)
Согласен, это вообще не решение.
Информация
29.4.2017
Цитата: Meloman19 от 28.05.2017, 00:04Программа обновилась. Теперь визуализирует открытый текст. Так же отдельно можно любой свой текст смотреть.
Поможет при составлении шрифта. А так же переводчикам, чтобы имена подгонять под достаточно маленькое поле.
Программа обновилась. Теперь визуализирует открытый текст. Так же отдельно можно любой свой текст смотреть.
Поможет при составлении шрифта. А так же переводчикам, чтобы имена подгонять под достаточно маленькое поле.
Цитата: sgtWhite от 28.05.2017, 00:49Просто камня на камне не оставил ))
Просто камня на камне не оставил ))