macro .comment
{
init_envmap:	     ; create 512x512 env map
.temp equ word [ebp-2]
	 push	  ebp
	 mov	  ebp,esp
	 sub	  esp,2
	 mov	  edi,envmap
	 fninit

	 mov	  dx,-256
    .ie_ver:
	 mov	  cx,-256
    .ie_hor:
	 mov	  .temp,cx
	 fild	  .temp
	 fmul	  st,st0
	 mov	  .temp,dx
	 fild	  .temp
	 fmul	  st,st0
	 faddp
	 fsqrt
	 mov	  .temp,254
	 fisubr   .temp
	 fmul	  [env_const]
	 fistp	  .temp
	 mov	  ax,.temp

	 or	 ax,ax
	 jge	 .ie_ok1
	 xor	 ax,ax
	 jmp	 .ie_ok2
  .ie_ok1:
	 cmp	 ax,254
	 jle	 .ie_ok2
	 mov	 ax,254
  .ie_ok2:
	 push	 dx
	 mov	 bx,ax
	 mul	 [max_color_b]
	 shr	 ax,8
	 stosb
	 mov	 ax,bx
	 mul	 [max_color_g]
	 shr	 ax,8
	 stosb
	 mov	 ax,bx
	 mul	 [max_color_r]
	 shr	 ax,8
	 stosb
	 pop	 dx

	 inc	 cx
	 cmp	 cx,256
	 jne	 .ie_hor

	 inc	 dx
	 cmp	 dx,256
	 jne	 .ie_ver

	 mov	 esp,ebp
	 pop	 ebp
ret
}
calc_bumpmap:		 ; calculate random bumpmap
;--------------in edi _ pointer to TEX_X x TEX_Y bumpmap
	 push	 edi
	 mov	 ecx,TEXTURE_SIZE
      @@:
	 push	 ecx
	 xor	 ecx,ecx
	 mov	 edx,255
	 call	 random
	 stosb
	 pop	ecx
	 loop	@b

	 pop	edi
	 mov	ecx,4
      .blur:
	 xor	esi,esi
	 mov	edx,TEXTURE_SIZE
	 xor	eax,eax
	 xor	ebx,ebx
      @@:
	 mov	ebp,esi
	 dec	ebp
	 and	ebp,TEXTURE_SIZE
	 mov	al,byte[ebp+edi]

	 mov	ebp,esi
	 inc	ebp
	 and	ebp,TEXTURE_SIZE
	 mov	bl,byte[ebp+edi]
	 add	eax,ebx

	 mov	ebp,esi
	 sub	ebp,TEX_X
	 and	ebp,TEXTURE_SIZE
	 mov	bl,byte[ebp+edi]
	 add	eax,ebx

	 mov	ebp,esi
	 add	ebp,TEX_X
	 and	ebp,TEXTURE_SIZE
	 mov	bl,byte[ebp+edi]
	 add	eax,ebx

	 shr	eax,2
	 mov	byte[esi+edi],al

	 inc	esi
	 dec	edx
	 jnz	@b

	 loop	.blur
ret
random:
;  in  - ecx - min
;        edx - max
;  out - eax - random number
	 mov	bx,[rand_seed]
	 add	bx,0x9248
	 ror	bx,3
	 mov	[rand_seed],bx

	 mov	ax,dx
	 sub	ax,cx
	 mul	bx
	 mov	ax,dx
	 add	ax,cx
	 cwde
ret
rand_seed	dw	?