ReC98/th05/main/bullet/b6_custombullets_render.asm

65 lines
1.2 KiB
NASM

B6BF_FREE = 0
B6BF_CLOUD = 1
public @SHINKI_CUSTOMBULLETS_RENDER$QV
@shinki_custombullets_render$qv proc near
push bp
mov bp, sp
push si
push di
mov si, offset b6balls
mov di, 1
jmp short @@more?
; ---------------------------------------------------------------------------
@@loop:
cmp [si+b6ball_t.flag], B6BF_FREE
jz short @@next
cmp [si+b6ball_t.flag], B6BF_CLOUD
jnz short @@no_cloud
mov ah, V_WHITE
call @grcg_setcolor_direct_raw$qv
mov ax, [si+b6ball_t.pos.cur.x]
sar ax, 4
add ax, PLAYFIELD_LEFT
push ax
mov ax, [si+b6ball_t.pos.cur.y]
sar ax, 4
add ax, PLAYFIELD_TOP
push ax
mov ax, [si+b6ball_t.cloud_radius]
mov bx, 16
cwd
idiv bx
push ax
call grcg_circlefill
jmp short @@next
; ---------------------------------------------------------------------------
@@no_cloud:
mov ax, GRAM_400
mov es, ax
mov ax, [si+b6ball_t.pos.cur.y]
sar ax, 4
mov dx, ax
mov ax, [si+b6ball_t.pos.cur.x]
sar ax, 4
add ax, (PLAYFIELD_LEFT - (B6BALL_W / 2))
or dx, dx
jl short @@next
call z_super_roll_put_tiny_32x32_raw pascal, [si+b6ball_t.B6B_patnum_tiny]
@@next:
inc di
add si, size b6ball_t
@@more?:
cmp di, 1 + B6BALL_COUNT
jl short @@loop
call cheetos_render
pop di
pop si
pop bp
retn
@shinki_custombullets_render$qv endp