Новости:

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)

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

Главное меню

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Просмотр сообщений

Сообщения - Alex

#1
Флудилка / Болтология
03 июля 2012, 00:56:28
Вот вроде бы соорудили форум новый: http://vit.hostzi.com
#2
Флудилка / Болтология
26 июня 2012, 10:15:24
Цитата: SN.ap от 25 июня 2012, 01:51:51Помогите люди добрые. Интернет обыскал, но так как он необъятен как баобаб - не нашел куда проект по переводу Breath of Fire III переместился (что ранее на форуме vit.fluda.net обитал). Неужели всё накрылось медным тазом? :'(
Да нет, ничего не накрылось. Просто ждем завершения хакинга от BSV. Так-то все готово, только надо плашки с названиями локаций перерисовать, что я буду делать очень долго, наверное :)
#3
Мы с dnd1, я так понимаю, пользовались плагином, который написал Гривер. Только его нужно еще модифицировать под большее число элементов в массиве, и я не знаю, как он с двухбайтовой кодировкой работает. Может, Джинни что-то подскажет.

library New_Plug;

uses
  ShareMem,SysUtils,
  Needs in 'K:\Translations\zeldaTP\Kruptar_PlugSrc\Needs.pas';

{$E .kpl}

resourcestring
SKPLDescription = 'The Legend of Zelda: Twilight Princess';

Var
ROM: PBytes = NIL;
RomSize: Integer = 0;
EndsRoot: PTableItem = NIL;
MaxCodes: Integer = 0;
Align: Integer = 1;

Function Description: String; stdcall;
begin
Result := SKPLDescription;
end;

Function NeedEnd: Boolean; stdcall;
begin
Result := True;
end;

Function GetMethod: TMethod; stdcall;
begin
Result := tmNone;
end;

Procedure SetVariables(X: PBytes; Sz: Integer; ER: PTableItem; MC, AL: Integer); stdcall;
begin
ROM := X;
RomSize := Sz;
EndsRoot := ER;
MaxCodes := MC;
Align := AL;
end;

Function GetData(TextStrings: PTextStrings): String; stdcall;
Var R: PTextString;
begin
Result := '';
If TextStrings = NIL then Exit;
With TextStrings^ do
begin
  R := Root;
  While R <> NIL do
  begin
   Result := Result + R^.Str;
   R := R^.Next;
  end;
end;
end;

Function GetStrings(X, Sz: Integer): PTextStrings; stdcall;
Const
ArrayNumber = 172;// Количество массивов
MatchingArray: array[0..ArrayNumber-1, 0..9] of byte = ((6,$1A, $06, $FF, $00, $00, $00,0,0,0),
(6, $1A, $06, $FF, $00, $00, $01,0,0,0),
(6, $1A, $06, $FF, $00, $00, $02,0,0,0),
(6, $1A, $06, $FF, $00, $00, $03,0,0,0),
(6, $1A, $06, $FF, $00, $00, $04,0,0,0),
(6, $1A, $06, $FF, $00, $00, $05,0,0,0),
(6, $1A, $06, $FF, $00, $00, $06,0,0,0),
(6, $1A, $06, $FF, $00, $00, $07,0,0,0),
(6, $1A, $06, $FF, $00, $00, $08,0,0,0),

(5, $1A, $05, $00, $00, $00,0,0,0,0),
(5, $1A, $05, $00, $00, $01,0,0,0,0),
(5, $1A, $05, $00, $00, $02,0,0,0,0),
(5, $1A, $05, $00, $00, $0A,0,0,0,0),
(5, $1A, $05, $00, $00, $0B,0,0,0,0),
(5, $1A, $05, $00, $00, $0C,0,0,0,0),
(5, $1A, $05, $00, $00, $0D,0,0,0,0),
(5, $1A, $05, $00, $00, $0E,0,0,0,0),
(5, $1A, $05, $00, $00, $0F,0,0,0,0),
(5, $1A, $05, $00, $00, $10,0,0,0,0),
(5, $1A, $05, $00, $00, $11,0,0,0,0),
(5, $1A, $05, $00, $00, $12,0,0,0,0),
(5, $1A, $05, $00, $00, $13,0,0,0,0),
(5, $1A, $05, $00, $00, $14,0,0,0,0),
(5, $1A, $05, $00, $00, $15,0,0,0,0),
(5, $1A, $05, $00, $00, $16,0,0,0,0),
(5, $1A, $05, $00, $00, $17,0,0,0,0),
(5, $1A, $05, $00, $00, $18,0,0,0,0),
(5, $1A, $05, $00, $00, $1A,0,0,0,0),
(5, $1A, $05, $00, $00, $1B,0,0,0,0),
(5, $1A, $05, $00, $00, $1C,0,0,0,0),
(5, $1A, $05, $00, $00, $1D,0,0,0,0),
(5, $1A, $05, $00, $00, $20,0,0,0,0),
(5, $1A, $05, $00, $00, $21,0,0,0,0),
(5, $1A, $05, $00, $00, $23,0,0,0,0),
(5, $1A, $05, $00, $00, $29,0,0,0,0),
(5, $1A, $05, $00, $00, $2B,0,0,0,0),
(5, $1A, $05, $00, $00, $2C,0,0,0,0),
(5, $1A, $05, $00, $00, $2D,0,0,0,0),
(5, $1A, $05, $00, $00, $2E,0,0,0,0),
(5, $1A, $05, $00, $00, $31,0,0,0,0),
(5, $1A, $05, $00, $00, $32,0,0,0,0),
(5, $1A, $05, $00, $00, $35,0,0,0,0),
(5, $1A, $05, $00, $00, $38,0,0,0,0),
(5, $1A, $05, $00, $00, $39,0,0,0,0),
(5, $1A, $05, $00, $00, $3B,0,0,0,0),
(5, $1A, $05, $00, $00, $19,0,0,0,0),

(5, $1A, $05, $01, $00, $00,0,0,0,0),
(5, $1A, $05, $01, $00, $0A,0,0,0,0),
(5, $1A, $05, $01, $00, $14,0,0,0,0),

(5, $1A, $05, $03, $00, $01,0,0,0,0),
(5, $1A, $05, $03, $00, $02,0,0,0,0),
(5, $1A, $05, $03, $00, $04,0,0,0,0),
(5, $1A, $05, $03, $00, $05,0,0,0,0),
(5, $1A, $05, $03, $00, $06,0,0,0,0),
(5, $1A, $05, $03, $00, $07,0,0,0,0),
(5, $1A, $05, $03, $00, $08,0,0,0,0),
(5, $1A, $05, $03, $00, $09,0,0,0,0),
(5, $1A, $05, $03, $00, $0A,0,0,0,0),
(5, $1A, $05, $03, $00, $0B,0,0,0,0),
(5, $1A, $05, $03, $00, $0C,0,0,0,0),
(5, $1A, $05, $03, $00, $0E,0,0,0,0),
(5, $1A, $05, $03, $00, $0F,0,0,0,0),
(5, $1A, $05, $03, $00, $10,0,0,0,0),
(5, $1A, $05, $03, $00, $11,0,0,0,0),
(5, $1A, $05, $03, $00, $13,0,0,0,0),
(5, $1A, $05, $03, $00, $14,0,0,0,0),

(5, $1A, $05, $00, $00, $22,0,0,0,0),
(5, $1A, $05, $00, $00, $24,0,0,0,0),
(5, $1A, $05, $00, $00, $3C,0,0,0,0),
(5, $1A, $05, $00, $00, $3E,0,0,0,0),
(5, $1A, $05, $00, $00, $3F,0,0,0,0),

(5, $1A, $05, $05, $00, $07,0,0,0,0),
(5, $1A, $05, $05, $00, $08,0,0,0,0),
(5, $1A, $05, $05, $00, $0A,0,0,0,0),
(5, $1A, $05, $05, $00, $0B,0,0,0,0),
(5, $1A, $05, $05, $00, $0D,0,0,0,0),
(5, $1A, $05, $05, $00, $0E,0,0,0,0),
(5, $1A, $05, $06, $00, $02,0,0,0,0),
(5, $1A, $05, $06, $00, $03,0,0,0,0),
(5, $1A, $05, $06, $00, $04,0,0,0,0),
(5, $1A, $05, $06, $00, $05,0,0,0,0),
(5, $1A, $05, $06, $00, $06,0,0,0,0),
(5, $1A, $05, $06, $00, $0A,0,0,0,0),
(5, $1A, $05, $06, $00, $0B,0,0,0,0),

(6, $1A, $06, $00, $00, $08, $00,0,0,0),
(6, $1A, $06, $00, $00, $08, $01,0,0,0),
(6, $1A, $06, $00, $00, $08, $02,0,0,0),
(6, $1A, $06, $00, $00, $08, $03,0,0,0),
(6, $1A, $06, $00, $00, $08, $04,0,0,0),
(5, $1A, $06, $00, $00, $09,0,0,0,0),

(6, $1A, $06, $00, $00, $1E, $01,0,0,0),
(6, $1A, $06, $00, $00, $1F, $00,0,0,0),
(6, $1A, $06, $00, $00, $30, $00,0,0,0),
(6, $1A, $06, $00, $00, $30, $01,0,0,0),
(6, $1A, $06, $00, $00, $30, $02,0,0,0),
(6, $1A, $06, $00, $00, $30, $03,0,0,0),
(6, $1A, $06, $00, $00, $33, $01,0,0,0),
(6, $1A, $06, $00, $00, $33, $02,0,0,0),
(6, $1A, $06, $00, $00, $34, $00,0,0,0),
(6, $1A, $06, $00, $00, $37, $00,0,0,0),
(6, $1A, $06, $00, $00, $37, $01,0,0,0),
(6, $1A, $06, $00, $00, $37, $02,0,0,0),

(6, $1A, $06, $05, $00, $00, $00,0,0,0),
(6, $1A, $06, $05, $00, $00, $01,0,0,0),
(6, $1A, $06, $05, $00, $03, $00,0,0,0),
(6, $1A, $06, $05, $00, $03, $01,0,0,0),
(6, $1A, $06, $05, $00, $0C, $00,0,0,0),
(6, $1A, $06, $05, $00, $0C, $01,0,0,0),
(7, $1A, $07, $00, $00, $36, $00, $14,0,0),
(7, $1A, $07, $00, $00, $36, $00, $8A,0,0),
(7, $1A, $07, $00, $00, $36, $00, $1E,0,0),
(7, $1A, $07, $00, $00, $36, $00, $2D,0,0),
(7, $1A, $07, $00, $00, $36, $00, $3C,0,0),
(7, $1A, $07, $00, $00, $04, $00, $1E,0,0),
(7, $1A, $07, $00, $00, $04, $00, $4B,0,0),
(7, $1A, $07, $00, $00, $04, $06, $EA,0,0),
(7, $1A, $07, $00, $00, $04, $00, $2B,0,0),
(7, $1A, $07, $00, $00, $04, $00, $6D,0,0),
(7, $1A, $07, $00, $00, $04, $00, $41,0,0),
(7, $1A, $07, $00, $00, $04, $00, $21,0,0),
(7, $1A, $07, $00, $00, $04, $00, $25,0,0),

(7,$1A, $07, $00, $00, $07, $00, $00,0,0),
(7,$1A, $07, $00, $00, $07, $00, $01,0,0),
(7,$1A, $07, $00, $00, $07, $00, $02,0,0),
(7,$1A, $07, $00, $00, $07, $00, $03,0,0),
(7,$1A, $07, $00, $00, $07, $00, $04,0,0),
(7,$1A, $07, $00, $00, $07, $00, $05,0,0),
(7,$1A, $07, $00, $00, $07, $00, $06,0,0),
(7,$1A, $07, $00, $00, $07, $00, $07,0,0),
(7,$1A, $07, $00, $00, $07, $00, $08,0,0),
(7,$1A, $07, $00, $00, $07, $00, $09,0,0),
(7,$1A, $07, $00, $00, $07, $00, $0A,0,0),
(7,$1A, $07, $00, $00, $07, $00, $0B,0,0),
(7,$1A, $07, $00, $00, $07, $00, $0C,0,0),
(7,$1A, $07, $00, $00, $07, $00, $0D,0,0),
(7,$1A, $07, $00, $00, $07, $00, $0E,0,0),
(7,$1A, $07, $00, $00, $07, $00, $0F,0,0),
(7,$1A, $07, $00, $00, $07, $00, $10,0,0),
(7,$1A, $07, $00, $00, $07, $00, $11,0,0),
(7,$1A, $07, $00, $00, $07, $00, $12,0,0),
(7,$1A, $07, $00, $00, $07, $00, $13,0,0),
(7,$1A, $07, $00, $00, $07, $00, $14,0,0),
(7,$1A, $07, $00, $00, $07, $00, $15,0,0),
(7,$1A, $07, $00, $00, $07, $00, $16,0,0),
(7,$1A, $07, $00, $00, $07, $00, $17,0,0),
(7,$1A, $07, $00, $00, $07, $00, $18,0,0),
(7,$1A, $07, $00, $00, $07, $00, $19,0,0),
(7,$1A, $07, $00, $00, $07, $00, $1A,0,0),
(7,$1A, $07, $00, $00, $07, $00, $1B,0,0),
(7,$1A, $07, $00, $00, $07, $00, $1C,0,0),
(7,$1A, $07, $00, $00, $07, $00, $1D,0,0),
(7,$1A, $07, $00, $00, $07, $00, $1E,0,0),
(7,$1A, $07, $00, $00, $07, $00, $1F,0,0),
(7,$1A, $07, $00, $00, $07, $00, $2D,0,0),

(7,$1A, $07, $00, $00, $04, $00, $00,0,0),
(7,$1A, $07, $00, $00, $04, $00, $05,0,0),
(7,$1A, $07, $00, $00, $04, $00, $2D,0,0),
(7,$1A, $07, $00, $00, $04, $00, $32,0,0),
(7,$1A, $07, $00, $00, $04, $00, $3C,0,0),
(7,$1A, $07, $00, $00, $04, $00, $0F,0,0),
(7,$1A, $07, $00, $00, $04, $00, $19,0,0),
(7,$1A, $07, $00, $00, $04, $00, $14,0,0),
(7,$1A, $07, $00, $00, $04, $00, $0A,0,0),

(6,$1A, $07, $00, $00, $05, $00,0,0,0),
(6,$1A, $07, $FF, $00, $01, $00,0,0,0),
(7,$1A, $09, $03, $00, $00, $00, $00,0,0),
(9,$1A, $09, $05, $00, $09, $00, $00, $00, $C8),
(9,$1A, $09, $05, $00, $09, $00, $00, $03, $E8),
(9,$1A, $09, $05, $00, $09, $00, $00, $07, $D0),
(9,$1A, $09, $00, $00, $25, $00, $00, $00, $00),
(9,$1A, $09, $00, $00, $25, $00, $00, $00, $01),
(9,$1A, $09, $00, $00, $28, $00, $00, $01, $0E));
//Нулевой элемент последовательности содержит ее длину.  Десять знаков в каждой последовательности взяты просто с запасом


Var
B, i, j: byte;
Identity: boolean;
ControlArray: array[0..9] of byte;// C запасом
begin
Result := NIL;
If (X >= RomSize) or (X < 0) then Exit;
New(Result, Init);
With Result^.Add^ do
  begin
  Str:='';
Repeat
B := ROM^[X];
For j := 0 to ArrayNumber-1 do
Begin
  Identity:= true;
  For i := 0 to MatchingArray[j, 0]-1{-1, потому что длина задана от единицы} do
  Begin
   ControlArray[i] := ROM^[X + i];
   If ControlArray[i] <> MatchingArray[j, i+1]{+1 потому что нулевой - длина} then Identity := false;
  End;
  If Identity = true then break; // Если хоть одна последовательность совпала, дальше не ищем
End;
If B = 0 then
Begin
  Str := Str + Char(B);// Сохраняем ноль в скрипт и выходим
  Break;
End;
If Identity = true then
begin
  For i := 0 to MatchingArray[j, 0]-1 do  Str := Str + Char(ControlArray[i]); //В j сохранился номер совпавшей последовательности
  X := X + MatchingArray[j, 0]-1;
end
Else Str := Str + Char(B);
Inc(X);
Until False;
end;
end;

exports
GetMethod,
SetVariables,
GetData,
GetStrings,
DisposeStrings,
NeedEnd,
Description;

end.

#4
Закончил я тут на днях переводить Breath of Fire 3, и у меня осталась парочка предложений, в переводе которых я сомневаюсь. Может кто-нибудь помочь перевести?

?<Nina>??
????????????
???????????/02
??????????????
?????
Мы будем следовать вашему
примеру!
???

???????
???????????

?????????
???????????/02
????????????
??????????????
Здешний мужчина искусно
печет хлеб.
???

????????????
?????????????/02
??????????
??????
Что это за ???? такой?

??????VS?????
?????????????/02
????????????
??????????
DeathMac vs Kenichi?
Ну я прям не знаю...
Они не разбегутся посреди боя?

??????????
<Garland>?????/02
?????????
???????????
?????

?????????????
?????????????
Что бы ты сделал, если бы нас раскусили?

????????
???????
????????????
Место, куда мигрируют морские
охотники(хищники) в поисках
мелкой рыбешки.

??????????????
?????????????

???????????/02
???????????
???????/02
?????????????
Это гавань.
Только вот сейчас тут нет корабля.
???

?????????
????????/02
???????
????????
У вас есть корабль?
Везет...
???

?????????????
???????
?????????????/02
?????????????
??????????

???????????
???????????/02
?????EXP?????
???????????
...
Тогда появится монстр, за которого дадут много опыта.





#5
Программирование / Kruptar
14 ноября 2011, 00:56:50
Мне еще ни разу не встречалась игра, где стоп-байт не использовался бы в спец. кодах игры.

ЦитироватьЧто значит "тупо по поинтерам"? Как по-твоему круптар узнает, что строка закончилась? Если конец строки можно однозначно отличить от исполняемого кода, то круптар и так выдерет всё как надо. Если отличить невозможно, то без спецсредств (плагина или специальной проги) не обойтись.

Так поинтеры для того и нужны, чтобы указывать длину строки. Вот по этой длине текст и выдирать. Считываем первый поинтер и последующий - получаем длину строки, ну и пошло-поехало :)
#6
Программирование / Kruptar
13 ноября 2011, 21:31:39
А почему нельзя реализовать выдирание текста тупо по поинтерам? Каждый раз писать плагин, где стоп-байт участвует в кодах игры, - занятие весьма сомнительное...
#7
Спасибо, теперь всё понятно   *F_IDEA*
#8
Джинни, можешь помочь с парой диалогов? :) Просто не уверен, что предыдущий перевод точный, а сам что-то не пойму...

????????
?????????????
"I thought I could get
some time off when the
ship returned...

?????????
????????????/02
?????????
??????
"How come they can
fix everything but
the ship?

??????????????
???????????
?????????/02
??????????????
?????
??????????
This new wall is
like a vatallion...
It can't be broken!/02
Hey...what is a vatallion anyway?

Мне вот тоже интересно, что это за "?????????" такое.
#9
narc - это архив, легко вскрывается CrystalTile2.
#10
Программирование / Re: Kruptar
30 мая 2009, 00:47:14
А можно в 7 круптаре вытащить текст без использования поинтеров? :) Или как это сделать в 6?
#11
Программирование / Re: Kruptar
12 мая 2009, 22:13:52
Спасибо Гриверу за плагин :)

Вообще, во многих играх может понадобиться запись таких последовательностей. Неплохо бы сделать их запись попроще, а не через Delphi o_O
#12
Программирование / Re: Kruptar
06 мая 2009, 13:32:55
А может кто-нибудь помочь написать этот плагин, если я дам все комбинации?
Там ведь по идее не сложно, просто добавить их в исключения...
#13
Программирование / Re: Kruptar
05 мая 2009, 19:34:28
Это Zelda Twilight Princess на Куб. Хочу вот помочь Антону проект для Круптара сделать.
#14
Программирование / Re: Kruptar
05 мая 2009, 16:30:35
Теперь проблема с окончанием строки...

За окончание строки отвечает байт $00, но в тексте выделение цветом записывается последовательностью байт $1A06FF000001. Так вот, после первых же нулей круптар считает, что строка закончилась и дальше ничего не показывает.

Можно ли это как-то обойти? Может, добавить эту последовательность в исключения?
Если в таблице символов написать 1A06FF000001=<Red>, то круптар все равно считает, что строка закончилась после первых нулей.
#15
Программирование / Re: Kruptar
05 мая 2009, 10:04:46
А, все, разобрался :) Просто нужно было поставить Motorola TRUE :)
#16
Программирование / Re: Kruptar
05 мая 2009, 02:49:14
Появился еще один вопрос по поинтерам:

Имеем 4-байтный поинтер со значением 00000001h, адрес строки, на которую указывает поинтер - 0187E9h.
Чтобы посчитать смещение, нужно вычесть 0187E9h-01000000h,но это получается отрицательное число и я никак не могу записать его в круптар :(
#17
Программирование / Re: Kruptar
26 февраля 2009, 11:29:57
Теперь все отлично работает, но кое-что все же осталось )

У меня в роме есть 5 поинтеров подряд, указывающих на $00000000, а так как код окончания строки $0000, то и видит он, похоже, только первую пару нулей. Вторую пару вставлять не хочет.
#18
Программирование / Re: Kruptar
24 февраля 2009, 12:20:01
Не хочет что-то он у меня работать. При увеличении диапазона пишет "Файл не найден" и наглухо виснет. Поинтеры 4-байтовые, все должно, по идее, вставляться.

А если поставить PtAlign=2, то вместо текста извлекается не пойми что.
#19
Программирование / Re: Kruptar
22 февраля 2009, 12:16:34
ЦитироватьЕсть. Просто указать в "Блоки для текста" начальный и конечный адрес блока, куда нужно вставить текст.
Если указать в блоках адрес больше, чем есть файле, то круптар просто не видит файл куда вставлять текст.

ЦитироватьА это по-моему было только в шестой и пятой версии. Мне казалось, в седьмой это исправлено...
У меня такое творится в последней версии с сайта. Ну да ладно, я уже привык )
#20
Программирование / Kruptar
20 февраля 2009, 14:02:55
Возникла парочка вопросов по круптару:

1) Есть ли возможность автоматом добавлять нули в конец файла, если места в оригинале не хватает?

2) Есть у меня, к примеру, игра в двухбайтовой кодировке и за окончание строки отвечает код h0000, но круптар все время теряет 1 ноль и приходится ставить h000000 - тогда все нормально. Но когда в файле встречается штук 8 этих нулей подряд - один или два все время теряются и приходится дописывать вручную. Как быть?  :)