Форум Magic Team


 

Новости:

01.01.2017: Релиз испанской версии Naruto - Ninja Council (GBA)
02.12.2016: Добавлена документация по Kruptar 7
09.10.2015: Обновление перевода игры Battletoads (NES) [версия 1.3]
22.01.2015: Kruptar Open Source
18.10.2014: Релиз обновлённой русской версии Castlevania - Dawn of Sorrow (GBA) от Owls Group
01.05.2014: Релиз русской версии Taiyou no Yuusha Firebird (NES)
24.06.2012: Добавлена доработанная документация и инструкция
26.05.2012: Обновление ORITON [версия 2.050]
11.05.2012: Обновление ORITON [версия 2.048]
11.03.2012: Обновление Kruptar 7 [версия 7.1.1.17]
29.01.2012: Обновление LZ77Restructor 2 [версия 1.02]
01.01.2012: Релиз русской версии Drill Dozer (GBA)

Подробнее на страничке новостей.
Ознакомьтесь с правилами нашего форума.


  • Форум
  • Поиск
  • Вход
  • Регистрация

  • Форум Magic Team »
  • Переводы, переводы, переводы... »
  • Ромхакинг и перевод »
  • Помощь с круптаром
« предыдущая тема следующая тема »
  • Печать
Страницы: 1 [2] 3 4 ... 6   Вниз

Автор Тема: Помощь с круптаром  (Прочитано 67754 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Oraculum

  • Magic Team
  • Сообщений: 534
  • Репутация: +11/-4
  • oraculum[гав-гав]ro.ru
    • Просмотр профиля
Помощь с круптаром
« Ответ #25 : 24 Март 2012, 23:06:10 »
Цитата: Anton от 24 Март 2012, 23:01:44
так убирать эту хрень (cp1251)?
Так-то да, но можешь ещё таблицу прикрепить, что ясно всё было.

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #26 : 24 Март 2012, 23:44:05 »
Убрал... перестал ругаться. Надо же.
(в аттаче все прикреплено (только таблица с cp1251, архив просто уже был со всем барахлом, лень перепаковывать было), но у меня там другие проблемы есть)... некоторые строки текста не отображает.
 Хотя визуально все выглядит правильно.
 
 TrickZter, можно тебя попросить очередной раз о помощи?
(Ну или кто-нить еще может добрый поможет? :) )
 
 Игра: Skyward Sword (Wii).
 Имеем: проекты к части текстовых файлов, таблицы, плагин (в нем коды, где участвует стоп-байт), - которые мне сделал dnd1, но который очередной раз пропал.
 Цель: доделать проекты к остальным файлам (если плагин сделан правильно, и если я пойму принцип)...
 
 Текстовые файлы в формате *.msbt.
 Пойнтеры начинаются в блоке TXT2, заканчиваются сразу перед текстом.
 После заголовка "TXT2" идут 12 байт, нам не сильно нужные, потом идет 4 байта, указывающих, сколько всего текстовых блоков ("диалогов") в файле (в примере, который в аттаче: 00 00 00 98 (это якобы 152 диалога, так оно и в проекте), Дальше пошел первый пойнтер: 00 00 02 64. Последний: 00 00 0F F0 (?).
 Текст в диапазоне 0000FF4-0004CAF.
 Смещение, получается, FF4-264=D90.
 
 Судя по тому, что в сделанных проектах, которые даже частично работают, параметры такие:
 пойнтеры 4 байтные, интервал=0, shiftLeft=0, Multiply=2, Align=1, Motorola=True, SeekSame=True.
 
 Теперь проблема: открыв проект, видим, например, строку 35 (слово "Saved"). (в строках 38 и 41 похожая проблема, тоже).
 После нее идет строка {Tag 426} (это один из управляющих, или как их там, кодов: 00 0E 00 02 00 02 00 04 00 00), в таблице/плагине записан.
 Сразу после этого кода идет стоп-байт "00 00", потом перенос "00 0A" (но в круптаре его не показывает - идет сразу следующий блок с текстом: "Are you sure you want to quit?".
 Но в оригинальном файле между "Saved" и "Are you sure you want to quit?" есть еще коды, и надписи на кнопках: Save/Save and quit/Cancel ("quit" выделено красным цветом: 000E0000000300020001 quit 000E000000030002FFFF).
 А круптар их не показывает...
 
 Пробовал данный файл в игре, практически все нормально работает, но с этими Save/Save and quit/Cancel - косяк.
 (Вместо трех кнопок с этими надписями показывает тоже три кнопки, но одна пустая, а на двух других надписи "Yes" и "No" почему-то. (Это даже и не переводя - это просто если пересчитать пойнтеры и вставить в игру).
 
 Мне, собсно, интересно, где ошибка?
 В проекте, таблице или плагине?
 
 В остальных проектах тоже нашел ошибки (судя по тому, что показывает игра), но то потом...

Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #27 : 25 Март 2012, 05:30:14 »
Цитата: Anton от 24 Март 2012, 23:44:05
Сразу после этого кода идет стоп-байт "00 00", потом перенос "00 0A" (но в круптаре его не показывает - идет сразу следующий блок с текстом: "Are you sure you want to quit?".
На стоп-байте чтение обычно прерывается.

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #28 : 25 Март 2012, 10:16:44 »
Цитата: Джинни от 25 Март 2012, 05:30:14
На стоп-байте чтение обычно прерывается.
Я это знаю, но стоп-байт присутствует же в других кодах.
Пусть продолжает считывать то, что СРАЗУ за этим стоп-байтом - 00 0A. Но не хочет. Дальше-то диалоги читает, но почему-то пропускает эти вот save/save and quit/cancel.
Пробовал в таблицу записывать и его, сразу за 00 0E 00 02 00 02 00 04 00 00, и последующий 000A, все равно спотыкается.
Т.е. делал и такую строку: 00 0E 00 02 00 02 00 04 00 00 00 00, и такую 00 0E 00 02 00 02 00 04 00 00 00 00 00 0A - не показывает save/save and quit/cancel...
Зато если поставить тупо неправильное смещение, начинает эти строки видеть, но остальное все, естественно, разлазится.

Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #29 : 25 Март 2012, 16:57:37 »
Присутствует, не присутствует. Если плагин не определяет, что 0000 является частью другого контрольного кода, то считывание останавливается.

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #30 : 25 Март 2012, 17:12:42 »
Ты не мог бы посмотреть приаттаченный выше проект и сказать, где ошибки?
Если в плагине, тогда облом. Но может и не в нем...

Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #31 : 25 Март 2012, 17:43:58 »
В том архиве нет исходников плагина.

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #32 : 25 Март 2012, 18:52:55 »
У меня их тоже нет. Нельзя просто посмотреть, правильно ли составлен проект/таблица, хотя бы?
Если все правильно - значит ошибка в плагине.
Если нет - укажи ошибки в проекте/таблице.
Если не хочешь смотреть - так и скажи.


Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #33 : 25 Март 2012, 19:55:21 »
В таблице встречаются коды с большим количеством нулей. Какие-то из них плагин не учитывает и заканчивает чтение на 0000.

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #34 : 25 Март 2012, 20:35:21 »
В данном файле - спотыкается именно на коде 00 0E 00 02 00 02 00 04 00 00 - {Tag 426}.
Дальше-то он читает текст: "Are you sure you want to quit?".
Но перед этим пропускается блок текста с "Save/Save and quit..." ?
(и дальше по файлу, после {Tag 426} - тоже спотыкается).

Это точно ошибка в плагине? Не в таблицах?
Просто в проектах к Wind Waker и Phantom Hourglass, которые тоже делал dnd1, ошибок в плагинах не было, поэтому я и в смущении...

Сам проект правильно составлен? Пойнтеры именно такие, и с такими параметрами, как в проекте?












Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #35 : 26 Март 2012, 06:51:00 »
Цитата: Anton от 25 Март 2012, 20:35:21
Это точно ошибка в плагине? Не в таблицах?
Точно в плагине.

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #36 : 26 Март 2012, 09:33:20 »
Цитата: Джинни от 26 Март 2012, 06:51:00
Точно в плагине.

Понятно, спасибо.
Тогда облом пока...

Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #37 : 26 Март 2012, 10:31:28 »
Цитата: Джинни от 26 Март 2012, 06:51:00
Multiply=2, Align=1,
Кстати, для двухбайтной кодировки нужно ставить Align = 2 (в новой версии этот пункт называется ptCharSize, а Multiply - ptAlignment).

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #38 : 26 Март 2012, 10:47:37 »
Цитата: Джинни от 26 Март 2012, 10:31:28
Кстати, для двухбайтной кодировки нужно ставить Align = 2

Где-то я об этом тут уже читал... Но оно одинаково показывает, что с 1, что с 2.
Поставлю 2, как скажешь.

В общем, залез я в дебри...
Поставил дельфи, скачал исходники плагинов.
Открыл null.dpr.
Куда и как вписывать нужные мне комбинации кодов... ? (вот эти все дела интересные: 000E000300010000 и т.д.)
Или не все так просто?




Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #39 : 26 Март 2012, 11:50:19 »
Ну там нет такого. чтобы надо было что-то куда-то вписывать. Нужно переписать код чтения строки. Функция GetStrings.

Массив ROM содержит весь загруженный ROM-файл в памяти. Переменная X - адрес откуда считывать.
ROM[X] ссылается на первый байт считываемой строки.

Код: [Выделить]
function GetStrings(X, Sz: Integer): PTextStrings; stdcall;
var
 PW: PWord;  PC: PAnsiChar absolute PW;
begin
 New(Result, Init);
 with Result.Add^ do
 begin
  PW := Addr(ROM[X]);
  while PW^ <> 0 do
  begin
   if PW^ = $0E00 then // Если контрольный код, то считать 8 байтов данных в строку
   begin
    Str := Str + PC^ + PC^;
    Inc(PW);   
    Str := Str + PC^ + PC^;
    Inc(PW);   
    Str := Str + PC^ + PC^;
    Inc(PW);
    Str := Str + PC^ + PC^;
    Inc(PW);
   end; // Считать 2 байта в строку
   Str := Str + PC^ + PC^;
   Inc(PW);
  end;
 end;
end;

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #40 : 26 Март 2012, 13:27:44 »
Цитата: Джинни от 26 Март 2012, 11:50:19
Переменная X - адрес откуда считывать.

А если там много файлов, и адреса все разные, а плагин нужен общий?

Что-то туго мне с этим всем...

Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #41 : 26 Март 2012, 13:34:58 »
Плагин одновременно только с одним файлом работает. Но можно сделать так, что в массиве ROM будет храниться список файлов. Этот список загружать плагином. Вместо пойнтеров передавать номера файлов. Каждый файл загружать и сохранять внутри плагина самостоятельно.

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #42 : 26 Март 2012, 13:45:19 »
Не для меня эта кухня, короче...
Смотрю готовый плагин (тот, который есть) в хексе - там куча этих кодов есть: 000Е. Т.е. все, которые прописаны в таблице, есть и в файле плагина. Разделены байтами 000А (перевод каретки), (в игре такой же код).
Ты говоришь, их вписывать не надо...
Названий файлов с текстом, для которых он делалася - не вижу.
Ничего не понимаю. Не моя это кухня, не моя. И до автора не могу достучаться, пропал...


Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #43 : 26 Март 2012, 14:13:11 »
Код для простого плагина, который будет всё это загружать, парой постов выше. Просто замени функцию и скомпилируй.
Только проект NULL.dpr переименуй во что-нибудь другое и внутри файла, где написано null измени название.
Для функции GetData вот такой код:

Код: [Выделить]
function GetData(TextStrings: PTextStrings): AnsiString; stdcall;
var
 R: PTextString;
 I: Integer;
begin
 Result := '';
 If TextStrings = NIL then Exit;
 With TextStrings^ do
 begin
  R := Root;
  While R <> NIL do
  begin
   Result := Result + R^.Str + #0 + #0;
   R := R^.Next;
  end;
 end;
end;


Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #44 : 26 Март 2012, 14:40:00 »
Попробовал. Заменил, скомпилил, подгрузил в проект, обновил список пойнтеров.
Вместо текста одни нолики показывает...


Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #45 : 26 Март 2012, 15:18:49 »
Выложи файл проекта, файл с оригинальным текстом и исходники плагина, который ты сделал.

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #46 : 26 Март 2012, 15:41:28 »
В аттаче.
Только я не "сделал" исходники. Поменял просто на тот код, который ты мне дал ).

Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #47 : 26 Март 2012, 16:27:38 »
Да знаю я, как вы меняете.

[Дата добавления: 26 Март 2012, 16:37:09]
Окей. Моя ошибочка.

Код: [Выделить]
function GetStrings(X, Sz: Integer): PTextStrings; stdcall;
type
 TWordRec = packed record
  A: Char;
  B: Char;
 end;
var
 PW: PWord;  PC: ^TWordRec absolute PW;
begin
 New(Result, Init);
 with Result.Add^ do
 begin
  PW := Addr(ROM[X]);
  while PW^ <> 0 do
  begin
   if PW^ = $0E00 then
   begin
    Str := Str + PC.A + PC.B;
    Inc(PW);   
    Str := Str + PC.A + PC.B;
    Inc(PW);   
    Str := Str + PC.A + PC.B;
    Inc(PW);
    Str := Str + PC.A + PC.B;
    Inc(PW);
   end;
   Str := Str + PC.A + PC.B;
   Inc(PW);
  end;
 end;
end;
Вот на это поменяй, всё будет работать.

Оффлайн Anton

  • Пользователь
  • Сообщений: 325
  • Репутация: +7/-0
    • Просмотр профиля
    • Zelda64rus
Помощь с круптаром
« Ответ #48 : 26 Март 2012, 17:25:06 »
Текст показало. Но - точно так же, как и было - после Saved (строка 35 в проекте) опять пишет код {Tag 426}, и опять выкинуло тексты:
{Tag 15}Save{Tag 18}Save and {Tag 2}quit{Tag 14}{Tag 19}Cancel

В строках 38 и 41 такая же ситуация - вместо {Tag 15}Save{Tag 18}Save and {Tag 2}quit{Tag 14}{Tag 19}Cancel - код {Tag 426}.

Почему оно их упорно выкидывает?..

И нолики (/00/00) в конце диалогов пропали (при kpflags h01). (при h00 появляются только байты переноса, а стопов нет).
Хотя нолики, это, наверное, не очень смертельно, да? )

И коды вот эти, которые с 000E начинаются, могут быть вроде не только 10-байтные, а еще и 12, и, по-моему, даже 14-байтными (в других файлах с текстом наблюдал).
И один код 8-байтный: 000E000200000000={Link} (имя игрока).





Оффлайн Джинни

  • Администратор
  • Сообщений: 1339
  • Репутация: +666/-0
  • Metamorphosis
    • Просмотр профиля
    • Magic Team
Помощь с круптаром
« Ответ #49 : 26 Март 2012, 17:27:53 »
Ноликов и не должно быть. Так плагин написан.
Проблемы-то какие? Вынимает он как положено. Если там есть ещё какие-то коды, которые начинаются не с 000У, то их тоже надо учесть.

  • Печать
Страницы: 1 [2] 3 4 ... 6   Вверх
« предыдущая тема следующая тема »
  • Форум Magic Team »
  • Переводы, переводы, переводы... »
  • Ромхакинг и перевод »
  • Помощь с круптаром
 

  • SMF 2.0.12 | SMF © 2011, Simple Machines
  • XHTML
  • RSS
  • Мобильная версия

  • GreenUP by Neekiinh0.

Размер занимаемой памяти: 2.75 мегабайта.
Страница сгенерирована за 0.183 секунд. Запросов: 78.