89 lines
3.8 KiB
NASM
89 lines
3.8 KiB
NASM
//
|
||
// 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 |