mirror of https://github.com/nmlgc/ReC98.git
185 lines
3.9 KiB
NASM
185 lines
3.9 KiB
NASM
public GATHER_BULLET_TEMPLATE_PULL
|
|
gather_bullet_template_pull proc near
|
|
|
|
@@gather = word ptr 4
|
|
|
|
push bp
|
|
mov bp, sp
|
|
push si
|
|
push di
|
|
if GAME eq 5
|
|
mov cx, size _bullet_template / 2
|
|
push ds
|
|
pop es
|
|
assume es:_DATA
|
|
mov si, offset _bullet_template
|
|
mov di, [bp+@@gather]
|
|
add di, gather_t.G_bullet_template
|
|
else
|
|
push ds
|
|
pop es
|
|
assume es:_DATA
|
|
mov si, offset _bullet_template
|
|
mov di, [bp+@@gather]
|
|
add di, gather_t.G_bullet_template
|
|
mov cx, size _bullet_template / 2
|
|
endif
|
|
rep movsw
|
|
pop di
|
|
pop si
|
|
pop bp
|
|
retn 2
|
|
gather_bullet_template_pull endp
|
|
|
|
|
|
public _gather_add_bullets
|
|
_gather_add_bullets proc near
|
|
push bp
|
|
mov bp, sp
|
|
push si
|
|
push di
|
|
mov si, offset _gather_circles
|
|
xor di, di
|
|
jmp short @@more?
|
|
; ---------------------------------------------------------------------------
|
|
|
|
@@loop:
|
|
cmp [si+gather_t.G_flag], 0
|
|
jnz short @@next
|
|
mov [si+gather_t.G_flag], 1
|
|
call gather_bullet_template_pull pascal, si
|
|
mov ax, _gather_template.GT_center.x
|
|
mov [si+gather_t.G_center.x], ax
|
|
mov ax, _gather_template.GT_center.y
|
|
mov [si+gather_t.G_center.y], ax
|
|
mov ax, _gather_template.GT_radius
|
|
mov [si+gather_t.G_radius_cur], ax
|
|
mov [si+gather_t.G_radius_prev], ax
|
|
mov ax, _gather_template.GT_velocity.x
|
|
mov [si+gather_t.G_center.velocity.x], ax
|
|
mov ax, _gather_template.GT_velocity.y
|
|
mov [si+gather_t.G_center.velocity.y], ax
|
|
mov [si+gather_t.G_angle_cur], 0
|
|
mov al, _gather_template.GT_angle_delta
|
|
mov [si+gather_t.G_angle_delta], al
|
|
mov al, _gather_template.GT_col
|
|
mov [si+gather_t.G_col], al
|
|
mov ax, _gather_template.GT_ring_points
|
|
mov [si+gather_t.G_ring_points], ax
|
|
mov ax, _gather_template.GT_radius
|
|
mov bx, GATHER_FRAMES
|
|
cwd
|
|
idiv bx
|
|
mov [si+gather_t.G_radius_delta], ax
|
|
jmp short @@ret
|
|
; ---------------------------------------------------------------------------
|
|
|
|
@@next:
|
|
inc di
|
|
add si, size gather_t
|
|
|
|
@@more?:
|
|
cmp di, GATHER_CAP
|
|
jl short @@loop
|
|
|
|
@@ret:
|
|
pop di
|
|
pop si
|
|
pop bp
|
|
retn
|
|
_gather_add_bullets endp
|
|
|
|
|
|
public _gather_add_only
|
|
_gather_add_only proc near
|
|
push bp
|
|
mov bp, sp
|
|
push si
|
|
mov si, offset _gather_circles
|
|
xor cx, cx
|
|
jmp short @@more?
|
|
; ---------------------------------------------------------------------------
|
|
|
|
@@loop:
|
|
cmp [si+gather_t.G_flag], 0
|
|
jnz short @@next
|
|
mov [si+gather_t.G_flag], 1
|
|
mov [si+gather_t.G_bullet_template.spawn_type], BST_GATHER_ONLY
|
|
mov ax, _gather_template.GT_center.x
|
|
mov [si+gather_t.G_center.x], ax
|
|
mov ax, _gather_template.GT_center.y
|
|
mov [si+gather_t.G_center.y], ax
|
|
mov ax, _gather_template.GT_radius
|
|
mov [si+gather_t.G_radius_cur], ax
|
|
mov [si+gather_t.G_radius_prev], ax
|
|
mov ax, _gather_template.GT_velocity.x
|
|
mov [si+gather_t.G_center.velocity.x], ax
|
|
mov ax, _gather_template.GT_velocity.y
|
|
mov [si+gather_t.G_center.velocity.y], ax
|
|
mov [si+gather_t.G_angle_cur], 0
|
|
mov al, _gather_template.GT_angle_delta
|
|
mov [si+gather_t.G_angle_delta], al
|
|
mov al, _gather_template.GT_col
|
|
mov [si+gather_t.G_col], al
|
|
mov ax, _gather_template.GT_ring_points
|
|
mov [si+gather_t.G_ring_points], ax
|
|
mov ax, _gather_template.GT_radius
|
|
mov bx, GATHER_FRAMES
|
|
cwd
|
|
idiv bx
|
|
mov [si+gather_t.G_radius_delta], ax
|
|
jmp short @@ret
|
|
; ---------------------------------------------------------------------------
|
|
|
|
@@next:
|
|
inc cx
|
|
add si, size gather_t
|
|
|
|
@@more?:
|
|
cmp cx, GATHER_CAP
|
|
jl short @@loop
|
|
|
|
@@ret:
|
|
pop si
|
|
pop bp
|
|
retn
|
|
_gather_add_only endp
|
|
|
|
|
|
public GATHER_ADD_ONLY_3STACK
|
|
gather_add_only_3stack proc near
|
|
|
|
@@col_for_2_and_4 = byte ptr 4
|
|
@@col_for_0 = byte ptr 6
|
|
@@frame = word ptr 8
|
|
|
|
push bp
|
|
mov bp, sp
|
|
mov ax, [bp+@@frame]
|
|
or ax, ax
|
|
jz short @@0
|
|
cmp ax, 2
|
|
jz short @@2_4
|
|
cmp ax, 4
|
|
jz short @@add
|
|
pop bp
|
|
retn 6
|
|
; ---------------------------------------------------------------------------
|
|
|
|
@@0:
|
|
mov al, [bp+@@col_for_0]
|
|
jmp short @@set_col
|
|
; ---------------------------------------------------------------------------
|
|
|
|
@@2_4:
|
|
mov al, [bp+@@col_for_2_and_4]
|
|
|
|
@@set_col:
|
|
mov _gather_template.GT_col, al
|
|
|
|
@@add:
|
|
call _gather_add_only
|
|
pop bp
|
|
retn 6
|
|
gather_add_only_3stack endp
|