// // Persona 2 Innocent Sin (PSX) JAP / Custom Name Render In Battle // Author: Sergey Shemet 06/10/2025 customNameRender: _4bit_conversion_table2: lui t8, 0x1f80 ori t8, t8, 0x390 lui t7, 0x8001 ori t7, t7, 0x3e8 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) 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 // Будем серить в scratch lui v0, 0x0403 // таблицей рассчитанных команд и ширин ori v0, 0x0201 // необходимых для спрайтов линии (cmdCount << 2) sw v0, 0x0(s3) lui v1, 0x0706 ori v1, 0x0504 sw v1, 0x4(s3) //адрес текста в a0 clear a1 lui v1, MyAddr read_char: lbu v0, 0x0(a0) nop sb v0, -0x0c(v1) // Запись символа в буфер beq v0, zero, end_of_name_read nop addiu v1, 0x1 //Увеличиваем адрес записи в буфер addiu a1, 0x1 //Счётчик +1 addiu a0, 0x2 //адрес чтения + 2 sltiu v0, a1, 0x7 bne v0, zero, read_char //Продолжаем 6 символов... nop end_of_name_read: move a0, a1 // Перебрасываем cчётчик символов в a0 addu s3, s3, a0 // получаем адрес количества спрайтов из таблицы addiu s3, -0x1 // index -1 lbu a1, 0x0(s3) // Читаем количество ширину спрайтов в a1 nop lui s3, 0x1f80 //Формируем данные rect для команды LoadImage в scratch ori s3, 0x03b0 // адрес хранения Rect lui a2, 0x0121 //Y ori a2, 0x03C8 //X sw a2, 0x0(s3) lui a2, 0x000C //Heigth sll a1, 1 //*2 = Ширина в 16 битах or a2, a1 //Совмещаем ширину sw a2, 0x4(s3) sra a1, 1 //Возвращаем ширину блоков спрайта и передаём в функцию lui t3, 0x8008 ori t3, t3, 0xf000 // Начало данных спрайта в scratch jal make_char_line_in_scratch //Формируем символы в scratch nop lui a0, 0x1f80 // Формируем аргументы команды LoadImage ori a0, 0x03b0 // адрес хранения Rect jal 0x8004f994 //Вызов LoadImage move a1, v0 //Адрес данных символов jal 0x8004f6e8 //Тут же вызов DrawSync clear a0 //Обязательно обнуляем аргумент 0 j 0x800ca148 //Возврат в оригинальную процедуру nop