ReC98/th04/main/pointnum/add.asm

58 lines
1.2 KiB
NASM
Raw Normal View History

public @POINTNUMS_ADD_YELLOW$QIIUI, @POINTNUMS_ADD_WHITE$QIIUI
pointnums_add proc near
@@number = word ptr 4
@@center_y = word ptr 6
@@center_x = word ptr 8
@pointnums_add_yellow$qiiui:
mov bl, _pointnum_yellow_p
inc _pointnum_yellow_p
cmp bl, (POINTNUM_YELLOW_COUNT - 1)
jb short @@skip_past_white_numbers
mov _pointnum_yellow_p, 0
@@skip_past_white_numbers:
xor bh, bh
add bx, POINTNUM_WHITE_COUNT
jmp short @@add
@pointnums_add_white$qiiui:
mov bl, _pointnum_white_p
mov bh, 0
inc _pointnum_white_p
cmp bl, (POINTNUM_WHITE_COUNT - 1)
jb short @@add
mov _pointnum_white_p, 0
@@add:
shl bx, 4
add bx, offset _pointnums
mov word ptr [bx+pointnum_t.flag], 1 ; flag = 1, age = 0
push bp
mov bp, sp
mov ax, [bp+@@center_x]
mov [bx+pointnum_t.PN_center_cur.x], ax
mov ax, [bp+@@center_y]
mov [bx+pointnum_t.PN_center_cur.y], ax
if GAME eq 5
push si
mov si, bx
else
mov [bx+pointnum_t.PN_width], 0
mov al, _pointnum_times_2
mov [bx+pointnum_t.PN_times_2], al
endif
lea ax, [bx+pointnum_t.PN_digits_lebcd + (POINTNUM_DIGITS - 1)]
call pointnum_digits_set pascal, ax, [bp+@@number]
if GAME eq 5
mov [si+pointnum_t.PN_width], ax
pop si
endif
pop bp
retn 6
pointnums_add endp
nop