ReC98/th04/boss/explode_small.asm

70 lines
1.6 KiB
NASM

EXPLOSION_TYPED macro
mov [si+explosion_t.flag], 1
mov [si+explosion_t.age], 0
mov ax, _boss_pos.cur.x
mov [si+explosion_t.center.x], ax
mov ax, _boss_pos.cur.y
mov [si+explosion_t.center.y], ax
mov [si+explosion_t.EXPLOSION_radius_cur.x], 8
mov [si+explosion_t.EXPLOSION_radius_cur.y], 8
mov [si+explosion_t.EXPLOSION_radius_delta.x], (11 shl 4)
mov [si+explosion_t.EXPLOSION_radius_delta.y], (11 shl 4)
mov [si+explosion_t.angle_offset], 0
mov bx, [bp+@@type]
dec bx
cmp bx, 3
ja short @@ret
add bx, bx
jmp cs:@@switch[bx]
@@type1:
mov [si+explosion_t.angle_offset], 32
jmp short @@ret
; ---------------------------------------------------------------------------
@@type2:
mov [si+explosion_t.angle_offset], -32
jmp short @@ret
; ---------------------------------------------------------------------------
@@type3:
mov [si+explosion_t.EXPLOSION_radius_delta.x], (13 shl 4)
mov [si+explosion_t.EXPLOSION_radius_delta.y], (7 shl 4)
jmp short @@ret
; ---------------------------------------------------------------------------
@@type4:
mov [si+explosion_t.EXPLOSION_radius_delta.x], (7 shl 4)
mov [si+explosion_t.EXPLOSION_radius_delta.y], (13 shl 4)
@@ret:
call snd_se_play pascal, 15
pop si
pop bp
retn 2
@@switch label word
dw offset @@type1
dw offset @@type2
dw offset @@type3
dw offset @@type4
endm
; void pascal near boss_explode_small(unsigned int type);
public BOSS_EXPLODE_SMALL
boss_explode_small proc near
@@type = word ptr 4
push bp
mov bp, sp
push si
mov si, offset _explosions_small
cmp [si+explosion_t.flag], 0
jz short @@set
add si, size explosion_t
@@set:
EXPLOSION_TYPED
boss_explode_small endp