EP battle names print src

This commit is contained in:
sShemet
2026-01-24 20:45:30 +05:00
parent a9fc3e5424
commit 80a561dbd4
9 changed files with 215 additions and 9 deletions

View File

@@ -473,7 +473,7 @@ PageTLoop:
jr ra // Возврат
addiu sp, sp, 0x50 // Восстанавливаем стек
.ascii "This game was officially cracked by SERGEY SHEMET 2021-2025. WHAT ARE YOU DOING HERE, BOY?"
.ascii "This game was officially cracked by SERGEY SHEMET 2021-2026. WHAT ARE YOU DOING HERE, BOY?"
.byte 0x00
.byte 0x00

Binary file not shown.

Binary file not shown.

View File

@@ -60,4 +60,9 @@
80090868 retuncharstocitydiv2
80090884 ismy1bytecitydiv2
800908A0 notand1_2
800908AC customnamerender
800908C8 read_chars_jap
800908F8 read_chars_rus
80090908 read_rus_char
80090924 end_of_name_read


View File

@@ -1,12 +1,14 @@
; 4 files included
; 895 lines
; 79 labels
; 6 files included
; 1033 lines
; 84 labels
; 0 equations
; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_main_grouped.asm
; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm
; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charCalcs.asm
; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm
; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_txtpatches.asm
; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_code_links_main.asm
FFFFFFFF .psx ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_main_grouped.asm line 9
800578FC setdrawtpage: ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_main_grouped.asm line 12
@@ -372,7 +374,7 @@ FFFFFFFF .open ""C:\\Users\\Sergey\\Documents\\GitHub\\Persona2-PSX-asm-sources\
80090520 addiu sp,sp,0x50 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_main_grouped.asm line 482
80090524 make_char_line_in_scratch: ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 4
80090524 addiu sp,sp,-0x18 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 6
80090528 sw ra,0x10(sp) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 7
80090528 sw s3,0x10(sp) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 7
8009052C sw t5,0x14(sp) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 8
80090530 move t5,a0 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 9
80090534 sll s3,a1,0x2 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 11
@@ -537,7 +539,7 @@ FFFFFFFF .open ""C:\\Users\\Sergey\\Documents\\GitHub\\Persona2-PSX-asm-sources\
80090770 nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 229
80090774 notshadow: ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 231
80090774 lw t5,0x14(sp) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 232
80090778 lw ra,0x10(sp) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 233
80090778 lw s3,0x10(sp) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 233
8009077C move v0,s1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 234
80090780 jr ra ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 235
80090784 addiu sp,sp,0x18 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charload_grouped.asm line 236
@@ -627,7 +629,63 @@ FFFFFFFF .open ""C:\\Users\\Sergey\\Documents\\GitHub\\Persona2-PSX-asm-sources\
800908A0 sra v0,v0,0x1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charCalcs.asm line 101
800908A4 jr ra ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charCalcs.asm line 103
800908A8 move v1,v0 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_charCalcs.asm line 104
800908AC .close ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_main_grouped.asm line 487
800908AC customnamerender: ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 7
800908AC clear a1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 52
800908B0 lui v1,-0x7FF7 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 55
800908B4 lh v0,0x0(a0) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 56
800908B8 nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 57
800908BC srl v0,v0,0xD ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 58
800908C0 bne v0,zero,0x800908F8 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 59
800908C4 nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 60
800908C8 read_chars_jap: ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 62
800908C8 lbu v0,0x0(a0) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 63
800908CC nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 64
800908D0 sb v0,-0xC(v1) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 66
800908D4 beq v0,zero,0x80090924 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 67
800908D8 nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 68
800908DC addiu v1,0x1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 69
800908E0 addiu a1,0x1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 70
800908E4 sltiu v0,a1,0x7 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 71
800908E8 bne v0,zero,0x800908C8 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 72
800908EC addiu a0,0x2 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 73
800908F0 j 0x80090924 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 75
800908F4 nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 76
800908F8 read_chars_rus: ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 79
800908F8 lh v0,0x0(a0) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 80
800908FC nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 81
80090900 andi a2,v0,0xFF ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 82
80090904 addiu a0,0x2 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 83
80090908 read_rus_char: ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 84
80090908 lbu v0,0x0(a0) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 85
8009090C nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 86
80090910 sb v0,-0xC(v1) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 87
80090914 addiu v1,0x1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 88
80090918 addiu a1,0x1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 89
8009091C bne a1,a2,0x80090908 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 90
80090920 addiu a0,0x1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 91
80090924 end_of_name_read: ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 93
80090924 lui v0,0x1F80 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 95
80090928 ori v0,0x3F0 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 96
8009092C move a0,a2 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 98
80090930 addu v0,v0,a0 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 99
80090934 addiu v0,-0x1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 100
80090938 lbu a1,0x0(v0) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 101
8009093C nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 102
80090940 sll a1,0x1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 104
80090944 sw a1,0x5E(sp) ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 106
80090948 sra a1,0x1 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 107
8009094C lui t3,-0x7FF7 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 109
80090950 ori t3,t3,0x1500 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 110
80090954 jal 0x80090524 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 112
80090958 nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 113
8009095C addiu a0,sp,0x58 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 115
80090960 jal 0x80054894 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 116
80090964 move a1,v0 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 117
80090968 jal 0x800545E8 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 118
8009096C clear a0 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 119
80090970 j 0x800D2268 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 121
80090974 nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_name_render.asm line 122
80090978 .close ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_main_grouped.asm line 488
FFFFFFFF .open ""C:\\Users\\Sergey\\Documents\\GitHub\\Persona2-PSX-asm-sources\\2_EP\\BIN\\SLPS_028.25"",0x8000F800; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_txtpatches.asm line 7
8000F800 .org 0x8001B5B8 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_txtpatches.asm line 10
8001B5B8 ori a1,r0,0x0 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_txtpatches.asm line 11
@@ -650,3 +708,8 @@ FFFFFFFF .open ""C:\\Users\\Sergey\\Documents\\GitHub\\Persona2-PSX-asm-sources\
8001BF08 j 0x800907F0 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_txtpatches.asm line 56
8001BF0C nop ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_txtpatches.asm line 57
8001BF10 .close ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_txtpatches.asm line 59
FFFFFFFF .open ""C:\\Users\\Sergey\\Documents\\GitHub\\Persona2-PSX-asm-sources\\2_EP\\BIN\\789_BATTLE_CODE_JAP.bin"",0x800AB000; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_code_links_main.asm line 2
800AB000 .org 0x800D2214 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_code_links_main.asm line 5
800D2214 j 0x800908AC ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_code_links_main.asm line 11
800D2218 move a0,s0 ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_code_links_main.asm line 12
800D221C .close ; C:\Users\Sergey\Documents\GitHub\Persona2-PSX-asm-sources\2_EP\EP_battle_code_links_main.asm line 14

View File

@@ -0,0 +1,14 @@
;BATTLE CUSTOM NAME RENDERING REDIRECT
.open "2_EP/BIN/789_BATTLE_CODE_JAP.bin", 0x800AB000
.org 0x800d2214
;ORIGINAL
; jal 0x8001bee0 //Оригинальный вызов процедуры подсчёта символов в текущем имени. Мы заменим её вызовом своего кода
; move a0, s0 //a0 - адрес имени
j customNameRender
move a0, s0
.close

View File

@@ -0,0 +1,122 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Persona 2 Eternal Punishment (PSX) JAP / Custom Name Render In Battle VRAM
// Author: Sergey Shemet 24/01/2026
//
customNameRender:
// _4bit_conversion_table2:
// lui t8, 0x1f80
// ori t8, t8, 0x390
// lui t7, 0x8001
// ori t7, t7, 0x5fc
// lw t5, 0x0(t7)
// lw t6, 0x4(t7)
// sw t5, 0x0(t8)
// sw t6, 0x4(t8)
// lw t5, 0x8(t7)
// lw t6, 0xC(t7)
// sw t5, 0x8(t8)
// sw t6, 0xC(t8)
// lw t5, 0x10(t7)
// lw t6, 0x14(t7) //Удалим этот код, потому что эта таблица в 99.999999% есть в scratchpad
// sw t5, 0x10(t8)
// sw t6, 0x14(t8)
// lw t5, 0x18(t7)
// lw t6, 0x1C(t7)
// sw t5, 0x18(t8)
// sw t6, 0x1C(t8)
// make_sprite_size_table2:
// lui s3, 0x1f80
// ori s3, 0x03f0
// lui v0, 0x0403
// ori v0, 0x0201 //И эта моя кастомная таблица тоже
// sw v0, 0x0(s3)
// lui v1, 0x0706
// ori v1, 0x0504
// sw v1, 0x4(s3)
// Занятые регистры после перехода из процедуры рендеринга
// ИХ НЕ ТРОГАТЬ (Если трогать, то сохранять в стеке, либо в вызове make_char_line_in_scratch)
// s3 - входящий a0 функции (используется позже в коде)
// s4 - адрес параметров перса (смещение 0x54)
// s5 - счётчик персов
// s6 - глобальный RECT.x VRAM
//адрес имени в a0
// заполняем буфер и активируем счётчик в зависимости от типа хранения имени
clear a1
lui v1, MyAddr
lh v0, 0x0(a0)
nop
srl v0, v0, 0xD // Проверяем 13-й бит (имя в моём формате)
bne v0, zero, read_chars_rus // Если установлен, читаем текст по-другому
nop
read_chars_jap: //читаем японское имя ГГ из IS
lbu v0, 0x0(a0)
nop
sb v0, -0x0c(v1) // Запись символа в буфер
beq v0, zero, end_of_name_read
nop
addiu v1, 0x1 //Увеличиваем адрес записи в буфер
addiu a1, 0x1 //Счётчик +1
sltiu v0, a1, 0x7
bne v0, zero, read_chars_jap //Продолжаем 6 символов... TODO: Считывать до управляющего кода! Хотя он и так остановится на 0x00 в следующей функции.
addiu a0, 0x2 //адрес чтения + 2
j end_of_name_read //Пропускаем чтение русского имени
nop
read_chars_rus: //Читаем русское имя из EP
lh v0, 0x0(a0)
nop
andi a2, v0, 0xFF //чистим количество символов и превращаем в счётчик
addiu a0, 2 //Смещаем адрес чтения текста (пропускаем управляющий код)
read_rus_char:
lbu v0, 0x0(a0) //грузим символ...
nop
sb v0, -0x0c(v1)
addiu v1, 0x1 //Увеличиваем адрес записи в буфер
addiu a1, 0x1 //Счётчик +1
bne a1, a2, read_rus_char //Продолжаем, пока не достигнем счётчика символов
addiu a0, 0x1 //адрес чтения + 1
end_of_name_read:
lui v0, 0x1f80 //Адрес хранения таблицы количества спрайтов на количество символов
ori v0, 0x03f0
move a0, a2 // Перебрасываем cчётчик символов в a0
addu v0, v0, a0 // получаем адрес количества спрайтов из таблицы
addiu v0, -0x1 // index -1
lbu a1, 0x0(v0) // Читаем количество ширину спрайтов в a1
nop
sll a1, 1 //*2 = Ширина в 16 битах
sw a1, 0x5e(sp) //Сохраняем rect.h в стек
sra a1, 1 //Возвращаем ширину блоков спрайта и передаём в функцию
lui t3, 0x8009
ori t3, t3, 0x1500 // Начало данных спрайта в RAM (LoadImage не работает со scratch!)
jal make_char_line_in_scratch //Формируем символы в RAM
nop
addiu a0, sp, 0x58 //RECT хранится в стеке...
jal 0x80054894 //Вызов LoadImage
move a1, v0 //Адрес данных символов, которые вернулись из процедуры формирования пикулей
jal 0x800545e8 //Тут же вызов DrawSync
clear a0 //Обязательно обнуляем аргумент 0
j 0x800d2268 //Возврат в оригинальную процедуру на команду смещения глобального X
nop

View File

@@ -4,7 +4,7 @@
make_char_line_in_scratch:
addiu sp, sp,-0x18
sw ra, 0x10(sp)
sw s3, 0x10(sp)
sw t5, 0x14(sp)
move t5, a0 //char num
@@ -230,7 +230,7 @@ shadow_row_loop:
NotShadow:
lw t5,0x14(sp)
lw ra,0x10(sp) //Restore stack and exit
lw s3,0x10(sp) //Restore stack and exit
move v0, s1
jr ra
addiu sp, sp, 0x18

View File

@@ -484,9 +484,11 @@ PageTLoop:
.include "2_EP/EP_charload_grouped.asm"
.include "2_EP/EP_charCalcs.asm"
.include "2_EP/EP_battle_name_render.asm"
.close
.include "2_EP/EP_txtpatches.asm" // misc text patches
.include "2_EP/EP_battle_code_links_main.asm" //links battle calls to main code funcs