Новости:

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)

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

Главное меню

Помощь с круптаром

Автор lupus, 19 июня 2011, 11:37:15

« назад - далее »

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

greengh0st

Ну по идее он же все равно будет считать перенос энтером, как лишний байт или нет?

Anton

Судя по тому, что в хексе видно - лишнего байта нет. Его ж в принципе нет. Текст идет сплошняком.
Зато теперь все очень удобно, в круптаре я делаю "строки" по 16 символов, и гораздо приятнее работать. Пробелами тока вручную добивать надо до 16.

greengh0st

Наверное фишка в том, что если у тебя есть байт переноса, то он его подставляет при переносе строки энтером. а если нет то нет. Не знал о таком))) ну зато теперь буду знать)))

Rus

Здравствуйте.
Есть такая кодировка UTF-8, а в играх её использующих кроме указателей присутствует ещё и контроль размера сообщения. Т.е. 4 байта указатель на текст, 4 байта на размер текста, потом идентификатор или сразу след указатель и опять 4 байта на размер и т.д.
Вопрос такой.
Как должен выглядеть плагин, чтобы при работе размер пересчитывался в соответствии с изменениями указателей, или же это делается стандартными методами?(Делается, но довольно криво, нет нужных арифметический действий типа чётности размера или размера без байтов окончания и если размер указан перед указателями, то тоже косячит на первом указателе) решается плагинами... глюки в этом месте всё же есть!
Тексты вроде научился от лишних "стопбайтов" внутри кодов избавлять при помощи короткой функции считывания, а вот таких примеров не видел... Или плохо искал? (Плохо смотрел, надо было меню переменные или околопойнтерные переменные поглядеть)
Спойлер
Ну и ладна, внешний фиксер справляется, но про решение в плагине всё равно было бы интересно узнать.

Так же данный плагин был бы полезен для понимания ошибки в ptrt2ptr (Slam объяснил что это работает только для указателя ссылающегося на один указатель, а я пытался применить его для указателя ссылающегося на блок указателей) , т.е. чтобы можно было не только вытаскивать текст через двойные указатели, но и складывать его обратно с изменением обоих и выравнивания для внешних указателей (кратность) 8, 16, 32.
I'm not a window cleaner (Ц)

Anton

Присоединяюсь к вопросу. Перевод Ocarina 3D из-за этого стоит уже поднялся, внешней прогой.
Про решение вопроса Круптаром все равно интересно.

Anton

Я так понял, никто не знает, как пересчитать размер диалога именно в Круптаре? Или это невозможно?
4 байта пойнтер на диалог, после него в четырёх байтах указан размер этого диалога, потом еще 12 байт интервал, потом следующий пойнтер, размер диалога... и т.д.

Guyver

Нужна помощь с компиляцей любой последней версии круптара c работающей (!) функцией pnFixed. Если вдруг кто-то сможет мне помочь, то мне нужно изменить в коде:

Function TPointers.Add: PPointer;
begin
New(Result);
If Root = NIL then Root := Result Else Cur^.Next := Result;
Cur := Result;
Inc(Count);
Result^.pnPos := 0;
Result^.pnPtr := 0;
Result^.pnPtrOrig := 0;
Result^.pnParamData := '';
Result^.pnStrings := NIL;
Result^.pnFixed := False;
Result^.Next := NIL;
end;

Всего 1 строчку на это:

Result^.pnFixed := True;


И скомпилировать проект... Help!



Если такой функции в исходниках нет, то поменять


if pnFixed then
begin
TextStrings := StringsToTextStrings(pnTable2, pnStrings,
ptDestCharSize, Project);

на

if not pnFixed then
begin
TextStrings := StringsToTextStrings(pnTable2, pnStrings,
ptDestCharSize, Project);

А нижеследующие 2 строчки с not pnFixed поменять на pnFixed... Я не совсем уверен, но должно сработать. Т.е. выбирать фиксированный поинтер или нет не надо будет, и всё будет работать как мне нужно...

Вячеслав

Здравствуйте.
Помогите разобраться с Круптаром )
Как правильно добавлять в проект пойнтеры, когда старший и младший байт разнесены, предполагаю что используется ptSplittedPtrs, однако мои пробы не увенчались успехом, а в мануале об этом к сожалению мало сказано.


Пример:


00012A38 | A2D2A004
000123B3 | 

[Дата добавления: 07 ноября 2020, 20:36:15]

Здравствуйте.
Помогите разобраться с Круптаром )
Как правильно добавлять в проект пойнтеры, когда старший и младший байт разнесены ? Предполагаю что необходимо использовать ptSplittedPtrs, однако мои пробы не увенчались успехом, а в мануале об этом к сожалению очень мало сказано.


Пример #1


Адрес начало
000123A8|         A2|D2|A0|04
000123B3|         A2|B1|A0|04
000123BC|         A2|F7|A0|04


Пойнтеры D204, B104, F704 (смещение 24010) что за байты А2 и А0 перед старшим и младшим байтом пойнтера, для меня загадка, однако они не изменяются во всем роме, поэтому не сильно заботят.


Пример #2



Адрес начало
00013CC7|        03|3B|50|6B|8A|32|32|32|32|32


Пойнтеры 0332, 3В32, 5032, 6В32, 8A32 (смещение 24010) между старшим и младшим 4 байта

Griever

Ну во втором примере точно должен сработать ptSplittedPtrs. В ptInterval выставляешь 4 (количество байт между старшим и младшим байтами поинтера) и ptSplittedPtrs в True.ptPointerSize должен быть 2. Не забудь про ptBIG_ENDIAN в False.

Вячеслав

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