mirror of https://github.com/nmlgc/ReC98.git
106 lines
2.0 KiB
NASM
106 lines
2.0 KiB
NASM
; Displays the CDG image in the given [slot] centered at (⌊x_center/8⌋*8,
|
|
; y_center), then applies a dissolve effect with the given [strength]
|
|
; (mod 8, 0 = none, 7 = full) on the E bitplane.
|
|
|
|
; void pascal cdg_put_dissolve_e(int x_center, int y_center, int slot, int strength);
|
|
public CDG_PUT_DISSOLVE_E
|
|
cdg_put_dissolve_e proc near
|
|
|
|
@@h = word ptr -6
|
|
@@w = word ptr -4
|
|
@@p_offset = word ptr -2
|
|
@@strength = word ptr 4
|
|
@@slot = word ptr 6
|
|
@@y_center = word ptr 8
|
|
@@x_center = word ptr 0Ah
|
|
|
|
enter 6, 0
|
|
push si
|
|
push di
|
|
mov bx, [bp+@@slot]
|
|
shl bx, 4
|
|
mov ax, _cdg_slots.pixel_width[bx]
|
|
mov [bp+@@w], ax
|
|
mov bx, [bp+@@slot]
|
|
shl bx, 4
|
|
mov ax, _cdg_slots.pixel_height[bx]
|
|
mov [bp+@@h], ax
|
|
mov ax, [bp+@@w]
|
|
cwd
|
|
sub ax, dx
|
|
sar ax, 1
|
|
sub [bp+@@x_center], ax
|
|
mov ax, [bp+@@h]
|
|
cwd
|
|
sub ax, dx
|
|
sar ax, 1
|
|
sub [bp+@@y_center], ax
|
|
cmp byte_10BC7, 0
|
|
jz short @@put_noalpha
|
|
cmp byte_10BB5, 0
|
|
jnz short @@put_alpha
|
|
|
|
@@put_noalpha:
|
|
call cdg_put_noalpha pascal, [bp+@@x_center], [bp+@@y_center], [bp+@@slot]
|
|
jmp short @@dissolve_prepare
|
|
|
|
@@put_alpha:
|
|
call cdg_put pascal, [bp+@@x_center], [bp+@@y_center], [bp+@@slot]
|
|
|
|
@@dissolve_prepare:
|
|
and [bp+@@strength], 7
|
|
cmp [bp+@@strength], 0
|
|
jz short @@ret
|
|
mov bx, 16
|
|
mov ax, [bp+@@w]
|
|
cwd
|
|
idiv bx
|
|
mov [bp+@@w], ax
|
|
mov ax, [bp+@@y_center]
|
|
add [bp+@@h], ax
|
|
mov ax, [bp+@@x_center]
|
|
sar ax, 3
|
|
mov dx, [bp+@@y_center]
|
|
shl dx, 6
|
|
add ax, dx
|
|
mov dx, [bp+@@y_center]
|
|
shl dx, 4
|
|
add ax, dx
|
|
mov [bp+@@p_offset], ax
|
|
mov ax, 0E000h
|
|
mov es, ax
|
|
assume es:nothing
|
|
mov bx, [bp+@@strength]
|
|
shl bx, 3
|
|
add bx, offset CDG_DISSOLVE_PATTERN
|
|
mov dx, [bp+@@y_center]
|
|
|
|
@@dissolve_next_row:
|
|
mov si, dx
|
|
; Hack (and si, 3)
|
|
db 081h
|
|
db 0e6h
|
|
db 003h
|
|
db 000h
|
|
shl si, 1
|
|
mov ax, [bx+si]
|
|
not ax
|
|
mov di, [bp+@@p_offset]
|
|
mov cx, [bp+@@w]
|
|
|
|
@@dissolve_apply:
|
|
and es:[di], ax
|
|
add di, 2
|
|
loop @@dissolve_apply
|
|
add [bp+@@p_offset], (640 / 8)
|
|
inc dx
|
|
cmp dx, [bp+@@h]
|
|
jb short @@dissolve_next_row
|
|
|
|
@@ret:
|
|
pop di
|
|
pop si
|
|
leave
|
|
retn 8
|
|
cdg_put_dissolve_e endp
|