//
//      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