PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Русификация игр и софта для PSP (https://www.pspx.ru/forum/forumdisplay.php?f=190)
-   -   Ищу программера для помощи в модификации PSP-движка (Never7, Ever17, Remember11 и тп) (https://www.pspx.ru/forum/showthread.php?t=105110)

ErikPshat 04.02.2015 13:51

Если в файле не находятся коды кнопок (скорее они завуалированы), то вполне возможно, что игра использует языковые нормы. Если выставлено на японию, то и кнопки будут браться в соответствии с японской раскладкой.
Можно попробовать наобум поменять региональность. Возможно япония - это 0х1, а россия 0х8
Код:

0x0000C7E0: 0x3C050001 '...<' - lui        $a1, 0x1
Попробовать по адресу 0х0000C880 сменить 1 на 8.

riku.kh3 04.02.2015 14:03

http://bbs.blacklabel-translations.c...?tid=35&pid=84

Не факт, короче, что в самой игре используется, скорее в HOME-менюшке только.

ErikPshat 04.02.2015 14:38

Хотя проверил, не канает.

Тогда получается, что нужно здесь перед и после сменить регистр $zr (zero) на 1.
Код:

0x0000C7D0: 0x00002025 '% ..' - move      $a0, $zr
0x0000C7D4: 0x0C045016 '.P..' - jal        sceImposeSetLanguageMode
0x0000C7D8: 0x00002825 '%(..' - move      $a1, $zr

Нет, так тоже не катит.

А-ха-ха :D, при нажатии на кнопку :home: раньше на японском предлагалось выйти по кнопке :circle:
А теперь написано по-русски "Выйти из игры" - "Да - Нет" и выходит по :cross:
Но в самой игре кнопки так и остались.

riku.kh3 04.02.2015 14:54

ErikPshat, выпиши, пожалуйста, какие там точно оффсеты в EBOOT'е поменять, пригодится, однозначно. У меня просто самой PSP нет, даже не проверить что там по нажатию HOME выскакивает. Не то может чего поменяю и даже не пойму получилось или нет :)

ErikPshat 04.02.2015 15:01

Может нужно выполнить ещё 2-ой шаг инструкции:
Цитата:

Код:

li    $a0, <number from 0 to 11>
jal    sceImposeSetLanguageMode()
li    $a1, <number 0 or 1>

to change the move instruction to li instruction, open the file with hex editor and patch the values as follows:

$a0: 2120 xxxx -> xxxx 0424
$a1: 2128 xxxx -> xxxx 0524

where xxxx is the value you want (it's 0000 ($zero) for japanese settings)
to set the language to english and X as OK button, change them to

$a0: 0100 0424
$a1: 0100 0524

the 0424 and 0524 will change the move instruction to li instruction, and the xxxx are the desired value.
А у нас этот код лежит здесь
Код:

0x0000C7DC: 0x3C040011 '...<' - lui        $a0, 0x11
0x0000C7E0: 0x3C050001 '...<' - lui        $a1, 0x1

Правда номера функций у нас не сходятся.



Цитата:

Сообщение от riku.kh3 (Сообщение 1093293)
выпиши, пожалуйста, какие там точно оффсеты в EBOOT'е поменять, пригодится, однозначно

Ну так к адресу нужно прибавить размер ELF-заголовка A0
Код:

0x0000C7D0: 0x00002025 '% ..' - move      $a0, $zr
0x0000C7D8: 0x00002825 '%(..' - move      $a1, $zr

  • 0x0000C7D0 + A0 = 0x0000C870 - по этому адресу меняем на значение 25200001
  • 0x0000C7D8 + A0 = 0x0000C878 - по этому адресу меняем на значение 25280001

Scorpeg 04.02.2015 15:22

Короче для игры таки придётся какой-то хитрый план реализовывать. Кто раскурит процедуру опроса кнопок для riku? :) Это ерунда с языком влияет только на экран выхода.

riku.kh3 04.02.2015 15:26

ErikPshat,
Как я понял, если просто '00' на '08' заменить, то li на move изменится, а если как там написано, то:
Нажмите для увеличения

Выглядит правильно? 'li a0,0x8' мы в итоге имеем и 'li a1,0x1' :scratch_one-s_head:

В ELF получается
Offset 0xC870: 25200000 --> 08000424
Offset 0xC878: 25280000 --> 01000524

Проверить возможности нет.

Цитата:

Сообщение от Scorpeg (Сообщение 1093297)
Короче для игры таки придётся какой-то хитрый план реализовывать. Кто раскурит процедуру опроса кнопок для riku? :) Это ерунда с языком влияет только на экран выхода.

Да, тут все грустно. Во многих других играх зато эта ерунда на все остальное тоже влияет, но тут не судьба :(

ErikPshat 04.02.2015 16:01

riku.kh3,
Эмм, странно. У меня так и осталось move. Только регистр сменился с $zr на $t0.
Это просто твой дебаггер по-своему коррелирует функцию, хотя мы меняем действительно сам номер функции, а не её значение.
Пользуйся лучше PRXTool, это же специально для PSP разработанный дебаггер, а то мы разговариваем на разных языках.
По идее у тебя адрес правильно указывает.
  • 0x0000C7D0 + 0x08804000 = 0x088107D0 - по этому адресу меняем на значение 25200001
  • 0x0000C7D8 + 0x08804000 = 0x088107D8 - по этому адресу меняем на значение 25280001
У меня теперь так показывает:
Код:

        0x0000C7D0: 0x01002025 '% ..' - move      $a0, $t0
        0x0000C7D4: 0x0C045016 '.P..' - jal        sceImposeSetLanguageMode
        0x0000C7D8: 0x01002825 '%(..' - move      $a1, $t0

Цитата:

Сообщение от Scorpeg (Сообщение 1093297)
Это ерунда с языком влияет только на экран выхода.

Ну это тоже нужный момент в плане русификации игры :)

riku.kh3 04.02.2015 16:15

ErikPshat,
Цитата:

Сообщение от ErikPshat (Сообщение 1093301)
Эмм, странно. У меня так и осталось move. Только регистр сменился с $zr на $t0.
Это просто твой дебаггер по-своему коррелирует функцию, хотя мы меняем действительно сам номер функции, а не её значение.
Пользуйся лучше PRXTool, это же специально для PSP разработанный дебаггер, а то мы разговариваем на разных языках.
По идее у тебя адрес правильно указывает.
  • 0x0000C7D0 + 0x08804000 = 0x088107D0 - по этому адресу меняем на значение 25200001
  • 0x0000C7D8 + 0x08804000 = 0x088107D8 - по этому адресу меняем на значение 25280001
У меня теперь так показывает:
Код:

        0x0000C7D0: 0x01002025 '% ..' - move      $a0, $t0
        0x0000C7D4: 0x0C045016 '.P..' - jal        sceImposeSetLanguageMode
        0x0000C7D8: 0x01002825 '%(..' - move      $a1, $t0


Насчет дебаггера ты прав, в нетронутом оригинале он у меня так показывает:
Нажмите для увеличения

Там явно $move должен стоять.

Но в посте по предыдущей ссылке написано, что с 'move $a1, $at' хоть и работает, но нестабильно и может проблемы вызывать:
Цитата:

now, you can patch it to english simply by navigating to the address of $a1 and setting it to 0100, however this method is prone to errors as it may conflict with previous instructions used elsewhere. This method patches the $zero value from register $a1 to $at and it just so happens that $at seems to nearly always have a value of 1. However this method causes some odd behavior as it patches both language and button mapping to 1 somehow overwriting the setting of register $a0.
Поэтому и решил сделать как там и заменить его на $li, ну и код языка, тоже, Русский вместо английского.

riku.kh3 04.02.2015 19:41

Вложений: 1
Сейчас посмотрел - процедура, в которой sceCtrlReadBufferPositive используется у Sharin no Kuni точно такая же, как в другой 5pb игре - Corpse Party BoS... но у той игры есть английская версия с крестиком в качестве выбора. Не знаю, может поможет если на различия посмотреть (в английской они есть).
Нажмите для увеличения

Scorpeg 04.02.2015 20:02

Может помочь, осталось только блин теперь скачать эту корпсе парти :) А еще проще скачать японскую и английскую корпсы и сравнить.

riku.kh3 04.02.2015 20:12

У меня обе японская и английская. В японской Corpse Party там все точно так же, как и в Sharin no Kuni, можно сразу с ней сравнивать.

Scorpeg 04.02.2015 20:19

Ну у тебя текст, а мне бы пощупать.

Из твоих данных понятно, что они заменили:

Код:

        0x000D2AA0: 0x9605000A '....' - lhu        $a1, 10($s0)
        0x000D2AA4: 0xAE000038 '8...' - sw        $zr, 56($s0)
        0x000D2AA8: 0x30A40001 '...0' - andi      $a0, $a1, 0x1
        0x000D2AAC: 0x10800033 '3...' - beqz      $a0, loc_000D2B7C
        0x000D2AB0: 0xA600003E '>...' - sh        $zr, 62($s0)

на вот это:

Код:

loc_000B3664:
        0x000B3664: 0xAE000038 '8...' - sw        $zr, 56($s0)
        0x000B3668: 0x8E040004 '....' - lw        $a0, 4($s0)
        0x000B366C: 0x10800010 '....' - beqz      $a0, loc_000B36B0
        0x000B3670: 0xA600003E '>...' - sh        $zr, 62($s0)
        0x000B3674: 0x0C024FBB '.O..' - jal        sub_00093EEC
        0x000B3678: 0x86040024 '$...' - lh        $a0, 36($s0)
        0x000B367C: 0x28440040 '@.D(' - slti      $a0, $v0, 64
        0x000B3680: 0x10800006 '....' - beqz      $a0, loc_000B369C
        0x000B3684: 0x00000000 '....' - nop       
        0x000B3688: 0x0C024FBB '.O..' - jal        sub_00093EEC
        0x000B368C: 0x86040026 '&...' - lh        $a0, 38($s0)
        0x000B3690: 0x28440040 '@.D(' - slti      $a0, $v0, 64
        0x000B3694: 0x54800007 '...T' - bnezl      $a0, loc_000B36B4
        0x000B3698: 0x9605000A '....' - lhu        $a1, 10($s0)

loc_000B369C:
        0x000B369C: 0x0C03AEE9 '....' - jal        sceKernelPowerTick
        0x000B36A0: 0x00002025 '% ..' - move      $a0, $zr
        0x000B36A4: 0x3C04000F '...<' - lui        $a0, 0xF
        0x000B36A8: 0x0C024BBC '.K..' - jal        sub_00092EF0
; Data ref 0x000F633C "backlight on.\n"
        0x000B36AC: 0x2484633C '<c.$' - addiu      $a0, $a0, 25404

loc_000B36B0:
        0x000B36B0: 0x9605000A '....' - lhu        $a1, 10($s0)

loc_000B36B4:
        0x000B36B4: 0x30A40001 '...0' - andi      $a0, $a1, 0x1
        0x000B36B8: 0x10800034 '4...' - beqz      $a0, loc_000B378C
        0x000B36BC: 0x30A40002 '...0' - andi      $a0, $a1, 0x2

Чето мне кажется, что это всё какая-то левая ненужная лабуда, к опросу клавиш не относящаяся. Экрану подсветку включают. Хотя есть одна идея...

riku.kh3 04.02.2015 20:42

Совсем не поможет, значит? :scratch_one-s_head:

Scorpeg 04.02.2015 21:05

Ну надо скачать эту корпсе парти, посмотреть. Качается с нитроромов, осталось 16 часов :)

Но эти изменения мне напоминают просто включение подсветки, если долго ничего не нажимаешь. Вот скачаю и точно скажу. Ну или сам всё занули, чтобы стало как в японской версии - если не начнет работать как японская, значит это не оно.

ErikPshat 05.02.2015 08:19

Вложений: 1
Похоже с кнопками труба. Читать массивы асма замучаешься, но при сильном желании можно :)

Что могу ещё предложить, так это подписать EBOOT.BIN оригинальной родной подписью (во вложении)
Ложим декриптованный EBOOT.prx, запускаем батник, получаем подписанный EBOOT.BIN

Scorpeg 05.02.2015 09:24

А что это дает?

Короче скачалась игра, эти изменения - это не оно. Если их занулить и сделать процедуру как в японской версии - ничего не меняется. Где-то в проверке считанных данных это всё устанавливается, в общем. А не в читалке (что в принципе логично). Это просто в Ever17 была тупая читалка, где можно было другое значение легко подсунуть. А тут приходит сразу битмаска. В принципе есть мысль, взять в j ra воткнуть j моя процедура, а там в процедуре уже сделать анализатор - если нажали кружок - выключаем бит кружка и включаем бит крестика и наоборот.

Блин, вот почему дебаггер не может мне в определенном диапазоне указать, какие ячейки памяти менялись во время процедуры :( Логирование же наше всё.

ErikPshat 05.02.2015 10:50

Цитата:

Сообщение от Scorpeg (Сообщение 1093340)
А что это дает?

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

Это хреново, что дебаггер не отлавливает нажатия клавиш. Может они в SYSTEM.CFG находятся?

Тут ещё нарыл несколько ссылок, думаю вы это всё давно видели

Yoti 05.02.2015 12:02

Заметка для меня:
e_ehsize + (e_phnum * e_phentsize) + (e_shnum * e_shentsize)

Scorpeg 05.02.2015 12:32

Yoti, могу тебе скрипт дать на php, который расширяет ELF-файлы и вставляет новые секции (иначе зачем тебе размеры хедеров?). Я правда только для Ever17 его тестировал. И он говнокод :) И я его решил не использовать в финальной версии, а досунуть свой код после шрифта просто. Он же всегда в памяти.

Erik, ну я все ссылки видел по Ever17. Как бы я с dsp (переводчик Ever17 и автор AE) общался как раз по поводу его перевода.

Scorpeg добавил 05.02.2015 в 12:11
Цитата:

Сообщение от ErikPshat (Сообщение 1093343)
Это хреново, что дебаггер не отлавливает нажатия клавиш. Может они в SYSTEM.CFG находятся?

Не, 99% что нет. Можешь для теста поменять от какой-нибудь игры сустем с сустем от этой - он вроде только на инфу в XMB влияет.

Scorpeg добавил 05.02.2015 в 12:32
Короче, план такой.

По адресу 088A1108 (сразу через 1 инструкцию после jal zz_sceCtrlReadBufferPositive) встраиваю j XXXX
По адресу XXXX размещаю чето типа:
Код:

        lw        a0,0x4(sp) - это в a0 битовая маска нажатых клавиш
        andi a1,a0,4000
        je a1,4000,x1 - прыгаем если 4000 (хз есть ли такая команда, я пишу из головы)
        andi a1,a0,2000
        je a1,4000,x2 - прыгаем если 2000 (4000 точно не нажат)
        j return

x1        // тут у нас значит установлен 4000, значит надо поставить 2000
        // однако 2000 тоже может быть установлен, поэтому надо сначала это проверить

        andi a1,a0,2000
        je a1,2000,return // это означает что оба два у нас установлены, поэтому менять нечего

        // иначе это значит, что 2000 не нажат, а 4000 нажат
        // убираем 4000 и ставим 2000

        xori a0,a0,4000
        ori a0,a0,2000

        j return

x2        // тут у нас значит 4000 не нажат, а нажат только 2000
        xori a0,a0,2000
        ori a0,a0,4000

        j return

Как план?


Текущее время: 02:20. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.