almost works
This commit is contained in:
Binary file not shown.
@@ -121,3 +121,14 @@ Custom regs:
|
|||||||
s2 - char count for current sprite
|
s2 - char count for current sprite
|
||||||
|
|
||||||
s8 - chunk block index (cpu2vram)
|
s8 - chunk block index (cpu2vram)
|
||||||
|
|
||||||
|
|
||||||
|
- всегда за тобой
|
||||||
|
- splash screen переводчика
|
||||||
|
- имя в боёвке
|
||||||
|
- группа пернатых феникс р
|
||||||
|
- розовый аргус
|
||||||
|
- майя-прайм
|
||||||
|
- оракул где-то рядом
|
||||||
|
- ортр
|
||||||
|
- аэшма
|
||||||
@@ -170,39 +170,51 @@ shadow_row_loop:
|
|||||||
|
|
||||||
// Внутренний цикл по пикселям в строке
|
// Внутренний цикл по пикселям в строке
|
||||||
shadow_pixel_loop:
|
shadow_pixel_loop:
|
||||||
sll v0, a2, 0x2 // v0 = смещение битов (X * 4)
|
move a1, a2 // a1 = текущий X пиксель
|
||||||
sllv v0, t2, v0 // v0 = маска исходного пикселя
|
addiu a1, a1, 0x1 // +1 пиксель вправо
|
||||||
|
sll a1, a1, 0x2 // ×4 (перевод в биты)
|
||||||
|
|
||||||
|
sll v0, a2, 0x2 // v0 = смещение исходного пикселя (X * 4)
|
||||||
|
sllv v0, t2, v0 // v0 = маска для исходного пикселя
|
||||||
and v0, t0, v0 // проверяем есть ли исходный пиксель
|
and v0, t0, v0 // проверяем есть ли исходный пиксель
|
||||||
beq v0, zero, no_s // если нет, пропускаем
|
beq v0, zero, no_s // если пикселя нет, пропускаем
|
||||||
|
|
||||||
// ВЫЧИСЛЯЕМ АДРЕС ТЕНИ С УЧЕТОМ ГРАНИЦ
|
|
||||||
move t8, t7 // по умолчанию тот же спрайт
|
|
||||||
move v1, a1 // позиция тени в том же спрайте
|
|
||||||
|
|
||||||
// Если это пиксель 7 (последний), тень в следующем спрайте
|
|
||||||
sltiu v0, a2, 7 // проверяем X < 7
|
|
||||||
bne v0, zero, same_sprite // если не граничный, остаемся в том же спрайте
|
|
||||||
|
|
||||||
// Граничный случай: пиксель 7 -> тень в следующем спрайте, позиция 0
|
|
||||||
addiu t8, t7, 4 // следующий спрайт
|
|
||||||
li v1, 0x0 // позиция тени = 0 (младшие 4 бита)
|
|
||||||
|
|
||||||
same_sprite:
|
|
||||||
lw v0, 0x0(t8) // загружаем целевой спрайт для тени
|
|
||||||
nop
|
nop
|
||||||
sllv a3, t2, v1 // маска для позиции тени
|
|
||||||
and v1, v0, a3 // проверяем занято ли место
|
|
||||||
bne v1, zero, no_s // если занято, пропускаем
|
|
||||||
|
|
||||||
sllv v1, t1, v1 // цвет тени в нужной позиции
|
// Проверяем граничный случай (8-й пиксель)
|
||||||
or v0, v0, v1 // добавляем тень
|
li v0, 0x7 // последний пиксель (X = 7)
|
||||||
|
bne a2, v0, normal_case // если не 8-й пиксель - обычная обработка
|
||||||
|
nop
|
||||||
|
// Граничный случай: 8-й пиксель исходного спрайта
|
||||||
|
// Тень будет в позиции a1 = 32 (8 × 4) - это следующий word!
|
||||||
|
addu t8, t7, s3 // адрес следующей строки
|
||||||
|
addiu t8, t8, 0x4 // переходим к следующему word
|
||||||
|
lw v1, 0x0(t8) // загружаем следующий word
|
||||||
|
li v0, 0xF // маска для ПЕРВОГО пикселя в новом word
|
||||||
|
and v0, v1, v0 // проверяем занятость (биты 0-3 нового word)
|
||||||
|
bne v0, zero, no_s // если занято - пропускаем
|
||||||
|
nop
|
||||||
|
move v0, t1 // цвет тени (в биты 0-3 нового word)
|
||||||
|
or v0, v1, v0 // добавляем тень
|
||||||
|
sw v0, 0x0(t8) // сохраняем
|
||||||
|
b no_s
|
||||||
|
nop
|
||||||
|
|
||||||
|
normal_case:
|
||||||
|
addu t8, t7, s3 // этот же word в следующей строке
|
||||||
|
lw v1, 0x0(t8) // следующая строка
|
||||||
|
sllv v0, t2, a1 // маска для пикселя тени
|
||||||
|
and v0, v1, v0 // проверяем занятость
|
||||||
|
bne v0, zero, no_s // если занято - пропускаем
|
||||||
|
nop
|
||||||
|
sllv v0, t1, a1 // цвет тени
|
||||||
|
or v0, v1, v0 // добавляем тень
|
||||||
sw v0, 0x0(t8) // сохраняем
|
sw v0, 0x0(t8) // сохраняем
|
||||||
|
|
||||||
no_s:
|
no_s:
|
||||||
addiu a2, a2, 0x1 // следующий пиксель (X+1)
|
addiu a2, a2, 0x1 // следующий пиксель
|
||||||
sltiu v0, a2, 0x8 // проверяем X < 8 (ВСЕ 8 пикселей!)
|
sltiu v0, a2, 0x8 // X < 8 (все 8 пикселей!)
|
||||||
bne v0, zero, shadow_pixel_loop // продолжаем цикл по пикселям
|
bne v0, zero, shadow_pixel_loop
|
||||||
addiu a1, a1, 0x4 // следующая позиция тени (+4 бита = +1 пиксель)
|
nop
|
||||||
|
|
||||||
addiu t5, t5, 0x04
|
addiu t5, t5, 0x04
|
||||||
bne t5, s3, shadow_sprites_loop
|
bne t5, s3, shadow_sprites_loop
|
||||||
|
|||||||
@@ -253,7 +253,8 @@ TextGroupReadLoop:
|
|||||||
sll v0, 1
|
sll v0, 1
|
||||||
addu t6, v0 // Сдвигаем X (прочитаем со следующим блоком символов)
|
addu t6, v0 // Сдвигаем X (прочитаем со следующим блоком символов)
|
||||||
rect_set_width:
|
rect_set_width:
|
||||||
sh v0, 0x10(s3) //И, не отходя от кассы, сохраняем в rect эту ширину
|
sll v0, t5, 3 //Количество блоков спрайта * 8 = ширина спрайта
|
||||||
|
sh v0, 0x10(s3) // Сохраняем ширину спрайта
|
||||||
|
|
||||||
PageLoop:
|
PageLoop:
|
||||||
// Создание цепочки копирования спрайта
|
// Создание цепочки копирования спрайта
|
||||||
|
|||||||
BIN
SLPS_021.00
BIN
SLPS_021.00
Binary file not shown.
@@ -28,48 +28,49 @@
|
|||||||
80090244 rect_cmd_init
|
80090244 rect_cmd_init
|
||||||
8009026C rect_set_x
|
8009026C rect_set_x
|
||||||
80090280 rect_set_width
|
80090280 rect_set_width
|
||||||
80090284 pageloop
|
80090288 pageloop
|
||||||
800902B4 rect_copy_scratch_to_ram
|
800902B8 rect_copy_scratch_to_ram
|
||||||
800902E0 rect_scratch_connect
|
800902E4 rect_scratch_connect
|
||||||
80090334 cpu2vram_cmd_loop
|
80090338 cpu2vram_cmd_loop
|
||||||
8009039C copy_char_data_start
|
800903A0 copy_char_data_start
|
||||||
800903B8 copy_char_data_loop
|
800903BC copy_char_data_loop
|
||||||
800903E0 set_flush_cache_cmd
|
800903E4 set_flush_cache_cmd
|
||||||
800903F0 cpu2vram_dma_link
|
800903F4 cpu2vram_dma_link
|
||||||
8009044C chunk_making_end
|
80090450 chunk_making_end
|
||||||
80090468 textend
|
8009046C textend
|
||||||
80090484 pagetloop
|
80090488 pagetloop
|
||||||
80090518 .asc:005A
|
8009051C .asc:005A
|
||||||
80090572 .byt:0001
|
80090576 .byt:0001
|
||||||
80090573 .byt:0001
|
80090577 .byt:0001
|
||||||
80090574 make_char_line_in_scratch
|
80090578 make_char_line_in_scratch
|
||||||
80090590 char_data_clear
|
80090594 char_data_clear
|
||||||
800905A0 char_data_loop
|
800905A4 char_data_loop
|
||||||
800905CC chars_font_loop
|
800905D0 chars_font_loop
|
||||||
800905F4 char_lines_loop
|
800905F8 char_lines_loop
|
||||||
80090604 its_not_empty
|
80090608 its_not_empty
|
||||||
80090694 not_last
|
80090698 not_last
|
||||||
800906A0 divideby4
|
800906A4 divideby4
|
||||||
800906A0 zero_jump
|
800906A4 zero_jump
|
||||||
800906B0 spacejump
|
800906B4 spacejump
|
||||||
800906CC sprite_end
|
800906D0 sprite_end
|
||||||
800906E4 make_shadow
|
800906E8 make_shadow
|
||||||
80090708 shadow_row_loop
|
8009070C shadow_row_loop
|
||||||
8009070C shadow_sprites_loop
|
80090710 shadow_sprites_loop
|
||||||
8009071C shadow_pixel_loop
|
80090720 shadow_pixel_loop
|
||||||
80090750 no_s
|
80090754 normal_case
|
||||||
8009077C notshadow
|
80090778 no_s
|
||||||
80090790 returncharsinstring
|
800907A4 notshadow
|
||||||
800907AC ismy1bytestring
|
800907B8 returncharsinstring
|
||||||
800907C8 notand1
|
800907D4 ismy1bytestring
|
||||||
800907D8 getnewchar
|
800907F0 notand1
|
||||||
800907DC startreading
|
80090800 getnewchar
|
||||||
800907F8 calcnextxcustom
|
80090804 startreading
|
||||||
80090820 japoldtext
|
80090820 calcnextxcustom
|
||||||
80090828 ihavestringlength
|
80090848 japoldtext
|
||||||
80090840 retuncharstocity
|
80090850 ihavestringlength
|
||||||
8009085C ismy1bytecity
|
80090868 retuncharstocity
|
||||||
80090870 retuncharstocitydiv2
|
80090884 ismy1bytecity
|
||||||
8009088C ismy1bytecitydiv2
|
80090898 retuncharstocitydiv2
|
||||||
800908A8 notand1_2
|
800908B4 ismy1bytecitydiv2
|
||||||
|
800908D0 notand1_2
|
||||||
|
|
||||||
Reference in New Issue
Block a user