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