Subversion Repositories Kolibri OS

Rev

Rev 2748 | Rev 2759 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2748 Rev 2758
Line 2908... Line 2908...
2908
	ret
2908
	ret
2909
endp
2909
endp
Line 2910... Line 2910...
2910
 
2910
 
2911
;
2911
;
2912
align 4
2912
align 4
2913
proc vox_add uses ebx ecx, buf_v1:dword, buf_v2:dword, coord_x:dword, coord_y:dword, coord_z:dword
2913
proc vox_add, buf_v1:dword, buf_v2:dword, coord_x:dword, coord_y:dword, coord_z:dword
2914
pushad
2914
pushad
2915
	mov eax,[coord_x]
2915
	mov eax,[coord_x]
2916
	mov ebx,[coord_y]
2916
	mov ebx,[coord_y]
2917
	mov edi,[buf_v2]
2917
	mov edi,[buf_v2]
Line 2950... Line 2950...
2950
		loop .cycle
2950
		loop .cycle
2951
popad
2951
popad
2952
	ret
2952
	ret
2953
endp
2953
endp
Line -... Line 2954...
-
 
2954
 
-
 
2955
;description:
-
 
2956
; ¢®§¢à è ¥â è¨à¨­ã ¢®ªá¥«ì­®£® ¨§®¡à ¦¥­¨ï á 3-¬ï £à ­ï¬¨
-
 
2957
; ¯à¨­¨¬ ¥â 㪠§ â¥«ì ­  ª¨áâì ¨ ¬ áèâ ¡
-
 
2958
align 4
-
 
2959
proc buf_vox_obj_get_img_w_3g uses ecx, h_br:dword,k_scale:dword
-
 
2960
	mov ecx,[h_br]
-
 
2961
 
-
 
2962
	movzx eax,byte[ecx]
-
 
2963
	cmp dword[k_scale],1
-
 
2964
	jl .end_c0
-
 
2965
		mov ecx,[k_scale]
-
 
2966
		shl eax,cl
-
 
2967
	.end_c0:
-
 
2968
	ret
-
 
2969
endp
-
 
2970
 
-
 
2971
;description:
-
 
2972
; ¢®§¢à è ¥â ¢ëá®âã ¢®ªá¥«ì­®£® ¨§®¡à ¦¥­¨ï á 3-¬ï £à ­ï¬¨
-
 
2973
; ¯à¨­¨¬ ¥â 㪠§ â¥«ì ­  ª¨áâì ¨ ¬ áèâ ¡
-
 
2974
align 4
-
 
2975
proc buf_vox_obj_get_img_h_3g uses ecx, h_br:dword,k_scale:dword
-
 
2976
	mov ecx,[h_br]
-
 
2977
 
-
 
2978
	movzx eax,byte[ecx+1]
-
 
2979
	cmp dword[k_scale],1
-
 
2980
	jl .end_c0
-
 
2981
		mov ecx,[k_scale]
-
 
2982
		shl eax,cl
-
 
2983
	.end_c0:
-
 
2984
	ret
-
 
2985
endp
-
 
2986
 
-
 
2987
;description:
-
 
2988
; äã­ªæ¨ï à¨áãîé ï ¢®ªá¥«ì­ë© ®¡ê¥ªâ
-
 
2989
;input:
-
 
2990
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
-
 
2991
; buf_z - ¡ãä¥à £«ã¡¨­ë (32 ¡¨â  ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥­ ᮢ¯ ¤ âì á buf_i)
-
 
2992
; h_br - ª¨áâì á ¨§®¡à ¦¥­¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â )
-
 
2993
; v_obj - ¢®ªá¥«ì­ë© ®¡ê¥ªâ
-
 
2994
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ­¨ï ¨§®¡à ¦¥­¨ï
-
 
2995
align 4
-
 
2996
proc buf_vox_obj_draw_3g, buf_i:dword, buf_z:dword, h_br:dword, v_obj:dword,\
-
 
2997
coord_x:dword, coord_y:dword, coord_z:dword, k_scale:dword
-
 
2998
pushad
-
 
2999
	mov edi,[v_obj]
-
 
3000
	mov ecx,[k_scale]
-
 
3001
	mov ebx,[coord_x]
-
 
3002
 
-
 
3003
;---
-
 
3004
	;â¥á⮢ ï à ¬ª 
-
 
3005
	mov eax,[h_br]
-
 
3006
 
-
 
3007
	movzx edx,byte[eax]
-
 
3008
	movzx esi,byte[eax+1]
-
 
3009
	cmp ecx,1
-
 
3010
	jl .end_c0
-
 
3011
		shl edx,cl
-
 
3012
		shl esi,cl
-
 
3013
	.end_c0:
-
 
3014
	stdcall buf_rect_by_size, [buf_i], ebx,[coord_y],edx,esi, 0xd0d0d0
-
 
3015
;---
-
 
3016
 
-
 
3017
	mov edx,[coord_y]
-
 
3018
	add edi,vox_offs_data
-
 
3019
 
-
 
3020
	mov esi,[coord_z]
-
 
3021
	stdcall vox_go_in_node, [buf_i], [buf_z], [h_br], [v_obj]
-
 
3022
 
-
 
3023
popad
-
 
3024
	ret
-
 
3025
endp
-
 
3026
 
-
 
3027
;description:
-
 
3028
; äã­ªæ¨ï à¨áãîé ï ç áâì ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
-
 
3029
;input:
-
 
3030
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
-
 
3031
; buf_z - ¡ãä¥à £«ã¡¨­ë (32 ¡¨â  ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥­ ᮢ¯ ¤ âì á buf_i)
-
 
3032
; h_br - ª¨áâì á ¨§®¡à ¦¥­¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â )
-
 
3033
; v_obj - ¢®ªá¥«ì­ë© ®¡ê¥ªâ
-
 
3034
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ­¨ï ¨§®¡à ¦¥­¨ï
-
 
3035
align 4
-
 
3036
proc buf_vox_obj_draw_3g_scaled, buf_i:dword, buf_z:dword, h_br:dword, v_obj:dword,\
-
 
3037
coord_x:dword, coord_y:dword, coord_z:dword, k_scale:dword,\
-
 
3038
s_c_x:dword, s_c_y:dword, s_c_z:dword, s_k_scale:dword,b_color:dword
-
 
3039
pushad
-
 
3040
locals
-
 
3041
	p_node dd 0 ;த¨â¥«ì᪨© 㧥«
-
 
3042
endl
-
 
3043
	mov edi,[v_obj]
-
 
3044
	add edi,vox_offs_data
-
 
3045
 
-
 
3046
	mov ecx,[k_scale]
-
 
3047
	mov ebx,[coord_x]
-
 
3048
 
-
 
3049
	;â¥á⮢ ï à ¬ª 
-
 
3050
	mov eax,[h_br]
-
 
3051
 
-
 
3052
	movzx edx,byte[eax]
-
 
3053
	movzx esi,byte[eax+1]
-
 
3054
	cmp ecx,1
-
 
3055
	jl .end_c0
-
 
3056
		shl edx,cl
-
 
3057
		shl esi,cl
-
 
3058
	.end_c0:
-
 
3059
	;stdcall buf_rect_by_size, [buf_i], ebx,[coord_y],edx,esi, [b_color]
-
 
3060
 
-
 
3061
	;¢¥à⨪ «ì­ ï ¯®«®á 
-
 
3062
	add ebx,edx
-
 
3063
	shr edx,cl
-
 
3064
	stdcall buf_rect_by_size, [buf_i], ebx,[coord_y],edx,esi, [b_color]
-
 
3065
	mov ecx,[s_k_scale]
-
 
3066
	shr esi,cl
-
 
3067
	xor eax,eax
-
 
3068
	inc eax
-
 
3069
	shl eax,cl
-
 
3070
	dec eax
-
 
3071
	sub eax,[s_c_z] ;§­ ç¥­¨ï ¯® ®á¨ z ¢®§à áâ îâ á ­¨§ã ¢¢¥àå
-
 
3072
	imul eax,esi
-
 
3073
	add eax,[coord_y]
-
 
3074
	stdcall buf_filled_rect_by_size, [buf_i], ebx,eax,edx,esi, [b_color]
-
 
3075
	mov ebx,[coord_y]
-
 
3076
	shl esi,cl
-
 
3077
	add ebx,esi
-
 
3078
	stdcall buf_vox_obj_get_img_w_3g, [h_br],[k_scale]
-
 
3079
	shr eax,1
-
 
3080
	mov esi,[h_br]
-
 
3081
	movzx esi,byte[esi+1]
-
 
3082
	;¯®«§ã­®ª
-
 
3083
	stdcall draw_polz_hor, [buf_i], [coord_x],ebx,eax,esi, [s_c_x], [s_k_scale], [b_color]
-
 
3084
	mov edx,[coord_x]
-
 
3085
	add edx,eax
-
 
3086
	;¯®«§ã­®ª
-
 
3087
	stdcall draw_polz_hor, [buf_i], edx,ebx,eax,esi, [s_c_y], [s_k_scale], [b_color]
-
 
3088
;---
-
 
3089
 
-
 
3090
	mov esi,[s_k_scale]
-
 
3091
	cmp esi,1
-
 
3092
	jl .end_2
-
 
3093
 
-
 
3094
	; *** (1) ***
-
 
3095
	.found:
-
 
3096
	stdcall vox_obj_get_node_position, [v_obj],[s_c_x],[s_c_y],[s_c_z],esi
-
 
3097
	movzx bx,byte[edi+3]
-
 
3098
	mov [p_node],edi
-
 
3099
	add edi,4
-
 
3100
	cmp eax,0
-
 
3101
	je .end_1
-
 
3102
	mov ecx,eax
-
 
3103
	cld
-
 
3104
	@@: ;横« ¤«ï ¯à®¯ã᪠ ¯à¥¤ë¤ãé¨å ¯®¤¤¥à¥¢ì¥¢ ¢ 㧫¥
-
 
3105
		bt bx,0 ;¯à®¢¥à塞 ¥áâì «¨ ¤®ç¥à­¨¥ 㧫ë
-
 
3106
		jnc .end_0
-
 
3107
			xor eax,eax
-
 
3108
			stdcall vox_obj_rec0 ;¢ eax ¢ëç¨á«ï¥âáï ç¨á«® ¤®ç¥à­¨å 㧫®¢, ¢ ¤ ­­®© ¢¥â¢¨
-
 
3109
		.end_0:
-
 
3110
		shr bx,1
-
 
3111
		loop @b
-
 
3112
	.end_1:
-
 
3113
	bt bx,0
-
 
3114
	jnc .end_2 ;¥á«¨ ¯®¤¤¥à¥¢  ­¥ áãé¥áâ¢ã¥â
-
 
3115
	dec esi
-
 
3116
	cmp esi,0
-
 
3117
	jg .found
-
 
3118
 
-
 
3119
	; *** (2) ***
-
 
3120
	;à¨á®¢ ­¨¥ ç á⨠®¡ê¥ªâ 
-
 
3121
	mov ecx,[k_scale]
-
 
3122
	mov ebx,[coord_x]
-
 
3123
	mov edx,[coord_y]
-
 
3124
	mov esi,[coord_z]
-
 
3125
	stdcall vox_go_in_node, [buf_i], [buf_z], [h_br], [v_obj]
-
 
3126
	.end_2:
-
 
3127
 
-
 
3128
popad
-
 
3129
	ret
-
 
3130
endp
-
 
3131
 
-
 
3132
;input:
-
 
3133
; h_br - ª¨áâì á ¨§®¡à ¦¥­¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â )
-
 
3134
; ebx - coord_x
-
 
3135
; edx - coord_y
-
 
3136
; esi - coord_z
-
 
3137
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
3138
; edi - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
-
 
3139
align 4
-
 
3140
proc vox_go_in_node, buf_i:dword, buf_z:dword, h_br:dword, v_obj:dword
-
 
3141
	cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï
-
 
3142
	je .sub_trees
-
 
3143
		;४ãàᨢ­ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
-
 
3144
		push eax edx
-
 
3145
 
-
 
3146
		;¯à®à¨á®¢ª  à ¬ª¨ ¥á«¨ à §¬¥à 㧫  = 1
-
 
3147
		cmp ecx,0
-
 
3148
		jne .end_2
-
 
3149
			push eax
-
 
3150
				stdcall vox_get_sub_brush,[h_br],0 ;®¯à¥¤¥«ï¥¬ ª¨áâì ¤«ï à¨á®¢ ­¨ï
-
 
3151
				cmp eax,0 ;¥á«¨ ª¨áâì ­¥ ­ ©¤¥­ 
-
 
3152
				je @f
-
 
3153
					stdcall draw_vox, [buf_i], [buf_z], eax, ebx,edx,esi, [edi]
-
 
3154
				@@:
-
 
3155
			pop eax
-
 
3156
		.end_2:
-
 
3157
 
-
 
3158
		;¢å®¤ ¢­ãâàì 㧫 
-
 
3159
		dec ecx
-
 
3160
;---
-
 
3161
		push ebx
-
 
3162
			;mov eax,(h-h_osn/2)
-
 
3163
			mov ebx,[h_br]
-
 
3164
			movzx eax,byte[ebx+1]
-
 
3165
			movzx ebx,byte[ebx+2]
-
 
3166
			shr ebx,1
-
 
3167
			sub eax,ebx
-
 
3168
		cmp ecx,1
-
 
3169
		jl .end_c1
-
 
3170
			shl eax,cl
-
 
3171
			shl ebx,cl
-
 
3172
		.end_c1:
-
 
3173
		add esi,ebx
-
 
3174
		pop ebx
-
 
3175
		add edx,eax ;ª®à¥ªâ¨à®¢ª  ¢ëá®âë ¯®¤ ¢®ªá¥«ì ­¨¦­¥£® ã஢­ï
-
 
3176
;---
-
 
3177
		mov ah,byte[edi+3]
-
 
3178
		add edi,4
-
 
3179
		mov al,8
-
 
3180
		.cycle:
-
 
3181
			bt ax,8 ;â¥áâ¨à㥬 ⮫쪮 ah
-
 
3182
			jnc .c_next
-
 
3183
				push ebx edx esi
-
 
3184
				stdcall vox_corect_coords, [h_br], [v_obj]
-
 
3185
				stdcall vox_go_in_node, [buf_i], [buf_z], [h_br], [v_obj]
-
 
3186
				pop esi edx ebx
-
 
3187
			.c_next:
-
 
3188
			shr ah,1
-
 
3189
			dec al
-
 
3190
			jnz .cycle
-
 
3191
 
-
 
3192
		;¢ë室 ¨§ 㧫 
-
 
3193
		inc ecx
-
 
3194
		pop edx eax
-
 
3195
 
-
 
3196
		jmp .end_f
-
 
3197
	.sub_trees:
-
 
3198
		;à¨á㥬 㧥«
-
 
3199
		push eax
-
 
3200
			stdcall vox_get_sub_brush,[h_br],ecx ;®¯à¥¤¥«ï¥¬ ª¨áâì ¤«ï à¨á®¢ ­¨ï
-
 
3201
			cmp eax,0 ;¥á«¨ ª¨áâì ­¥ ­ ©¤¥­ 
-
 
3202
			je @f
-
 
3203
				stdcall draw_vox, [buf_i], [buf_z], eax, ebx,edx,esi, [edi]
-
 
3204
			@@:
-
 
3205
		pop eax
-
 
3206
 
-
 
3207
		add edi,4
-
 
3208
	.end_f:
-
 
3209
	ret
-
 
3210
endp
-
 
3211
 
-
 
3212
;description:
-
 
3213
; äã­ªæ¨ï à¨áãîé ï ®¤¨­®ç­ë© ¢®ªá¥«
-
 
3214
;input:
-
 
3215
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
-
 
3216
; buf_z - ¡ãä¥à £«ã¡¨­ë (32 ¡¨â  ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥­ ᮢ¯ ¤ âì á buf_i)
-
 
3217
; buf_v - ¡ãä¥à á ¨§®¡à ¦¥­¨¥¬ ¢®ªá¥«ï (32 ¡¨â )
-
 
3218
; v_color - 梥â
-
 
3219
align 4
-
 
3220
proc draw_vox, buf_i:dword, buf_z:dword, buf_v:dword,\
-
 
3221
coord_x:dword, coord_y:dword, coord_z:dword, v_color:dword
-
 
3222
pushad
-
 
3223
	mov eax,[coord_x]
-
 
3224
	mov ebx,[coord_y]
-
 
3225
	mov edi,[buf_v]
-
 
3226
	mov ecx,buf2d_h
-
 
3227
	mov esi,buf2d_w
-
 
3228
	imul ecx,esi
-
 
3229
	add esi,eax
-
 
3230
	mov edx,buf2d_data
-
 
3231
	cld
-
 
3232
	;ecx - count pixels in voxel
-
 
3233
	;edx - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢ ¢®ªá¥«ì­®¬ ¡ãä¥à¥
-
 
3234
	;edi - 㪠§ â¥«ì ­  ¢®ªá¥«ì­ë© ¡ãä¥à
-
 
3235
	;esi - width voxel buffer add coord x
-
 
3236
	.cycle:
-
 
3237
		cmp dword[edx],0
-
 
3238
		je @f
-
 
3239
			;¯à®¢¥à塞 ¡ãä¥à £«ã¡¨­ë
-
 
3240
			push eax
-
 
3241
			stdcall buf_get_pixel, [buf_z],eax,ebx
-
 
3242
			sub eax,[coord_z]
-
 
3243
			cmp eax,[edx]
-
 
3244
			jl .dr_pixel
-
 
3245
				pop eax
-
 
3246
				jmp @f
-
 
3247
			.dr_pixel:
-
 
3248
				;à¨á㥬 â®çªã
-
 
3249
				pop eax
-
 
3250
				stdcall buf_set_pixel, [buf_i],eax,ebx,[v_color]
-
 
3251
				push ecx
-
 
3252
				mov ecx,[coord_z]
-
 
3253
				add ecx,[edx]
-
 
3254
				stdcall buf_set_pixel, [buf_z],eax,ebx,ecx
-
 
3255
				pop ecx
-
 
3256
		@@:
-
 
3257
		add edx,4
-
 
3258
		inc eax
-
 
3259
		cmp eax,esi
-
 
3260
		jl @f
-
 
3261
			inc ebx
-
 
3262
			sub eax,buf2d_w
-
 
3263
		@@:
-
 
3264
		loop .cycle
-
 
3265
popad
-
 
3266
	ret
-
 
3267
endp
-
 
3268
 
-
 
3269
;description:
-
 
3270
;äã­ªæ¨ï ¤«ï ª®à¥ªâ¨à®¢ª¨ ª®®à¤¨­ â
-
 
3271
;­ ¯à ¢«¥­¨ï ®á¥© ª®®à¤¨­ â ¢ ¢®ªá¥«¥:
-
 
3272
;*z
-
 
3273
;|
-
 
3274
;+
-
 
3275
;  * y
-
 
3276
; /
-
 
3277
;+
-
 
3278
; \
-
 
3279
;  * x
-
 
3280
;input:
-
 
3281
;  al - ­®¬¥à 㧫  ¢ ¤¥à¥¢¥ (®â 1 ¤® 8)
-
 
3282
; ebx - ª®®à¤¨­ â  x
-
 
3283
; edx - ª®®à¤¨­ â  y
-
 
3284
; esi - ª®®à¤¨­ â  z
-
 
3285
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
3286
;output:
-
 
3287
; ebx - ­®¢ ï ª®®à¤¨­ â  x
-
 
3288
; edx - ­®¢ ï ª®®à¤¨­ â  y
-
 
3289
; esi - ­®¢ ï ª®®à¤¨­ â  z
-
 
3290
align 4
-
 
3291
proc vox_corect_coords, h_br:dword, v_obj:dword
-
 
3292
locals
-
 
3293
	osn_w_2 dd ? ;è¨à¨­  ®á­®¢ ­¨ï ¥¤¨­¨ç­®£® ¢®ªá¥«ï : 2
-
 
3294
	vox_h dd ? ;¢ëá®â  ¥¤¨­¨ç­®£® ¢®ªá¥«ï
-
 
3295
endl
-
 
3296
	cmp ecx,0
-
 
3297
	jl .end_f ;¤«ï ã᪮७¨ï ®âà¨á®¢ª¨
-
 
3298
 
-
 
3299
	push eax edi
-
 
3300
	and eax,15 ;¢ë¤¥«ï¥¬ ­®¬¥à 㧫  ¢ ¤¥à¥¢¥
-
 
3301
	mov edi,[v_obj]
-
 
3302
	add edi,vox_offs_tree_table
-
 
3303
	add edi,8
-
 
3304
	sub edi,eax
-
 
3305
 
-
 
3306
	push ebx ecx
-
 
3307
		mov ebx,[h_br]
-
 
3308
 
-
 
3309
		movzx ecx,byte[ebx]
-
 
3310
		shr ecx,1
-
 
3311
		mov dword[osn_w_2],ecx
-
 
3312
 
-
 
3313
		movzx ecx,byte[ebx+2]
-
 
3314
		movzx ebx,byte[ebx+1]
-
 
3315
		sub ebx,ecx
-
 
3316
		mov dword[vox_h],ebx
-
 
3317
		shr ecx,1
-
 
3318
		mov eax,ecx ;eax - ¢ëá®â  ®á­®¢ ­¨ï ¥¤¨­¨ç­®£® ¢®ªá¥«ï : 2
-
 
3319
	pop ecx ebx
-
 
3320
 
-
 
3321
	cmp ecx,1
-
 
3322
	jl .no_scale ;¢® ¨§¡¥¦ ­¨¥ § æ¨ª«¨¢ ­¨ï
-
 
3323
		shl eax,cl
-
 
3324
		shl dword[osn_w_2],cl
-
 
3325
		shl dword[vox_h],cl
-
 
3326
	.no_scale:
-
 
3327
 
-
 
3328
;	add esi,eax ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z (ª®¬¯¥­á æ¨ï ¤«ï ª®®à¤¨­ âë y)
-
 
3329
	bt word[edi],0 ;test voxel coord x
-
 
3330
	jnc @f
-
 
3331
		add ebx,[osn_w_2]
-
 
3332
		add edx,eax
-
 
3333
		add esi,eax ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z
-
 
3334
	@@:
-
 
3335
	bt word[edi],1 ;test voxel coord y
-
 
3336
	jnc @f
-
 
3337
		add ebx,[osn_w_2]
-
 
3338
		sub edx,eax
-
 
3339
		sub esi,eax ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z
-
 
3340
	@@:
-
 
3341
	bt word[edi],2 ;test voxel coord z
-
 
3342
	jnc @f
-
 
3343
		sub edx,[vox_h]
-
 
3344
	@@:
-
 
3345
	pop edi eax
-
 
3346
	.end_f:
-
 
3347
	ret
-
 
3348
endp
-
 
3349
 
-
 
3350
;¨§¢«¥ª ¥¬ ¨§ h_br 㪠§ â¥«ì ­  ¡ãä¥à á ¨§®¡à ¦¥­¨¥¬ ¢®ªá¥«ï, 㪠§ ­­®£® ¯®à浪  n
-
 
3351
align 4
-
 
3352
proc vox_get_sub_brush uses ebx ecx, h_br:dword, n:dword
-
 
3353
	xor eax,eax
-
 
3354
	mov ebx,[n]
-
 
3355
	cmp ebx,0
-
 
3356
	jl @f
-
 
3357
	mov ecx,[h_br]
-
 
3358
	cmp bl,byte[ecx+3]
-
 
3359
	jg @f
-
 
3360
		add ecx,4
-
 
3361
		imul ebx,BUF_STRUCT_SIZE
-
 
3362
		mov eax,ebx
-
 
3363
		add eax,ecx
-
 
3364
	@@:
-
 
3365
	ret
-
 
3366
endp
-
 
3367
 
-
 
3368
;description:
-
 
3369
; äã­ªæ¨ï à¨áãîé ï á१ ¢®ªá¥«ì­®£® ®¡ì¥ªâ 
-
 
3370
;input:
-
 
3371
; v_size - à §¬¥à ª¢ ¤à â  á ¢®ªá¥«¥¬
-
 
3372
; k_scale - á⥯¥­ì ¤¥â «¨§ æ¨¨ ¨§®¡à ¦¥­¨ï
-
 
3373
; n_plane - ­®¬¥à ¯«®áª®á⨠á¥ç­¨ï (¢ ¯à¥¤¥« å ®â 0 ¤® 2^k_scale - 1)
-
 
3374
; b_color - 梥⠣࠭¨æë
-
 
3375
align 4
-
 
3376
proc buf_vox_obj_draw_pl, buf_i:dword, v_obj:dword, coord_x:dword,\
-
 
3377
coord_y:dword, v_size:dword, k_scale:dword, n_plane:dword, b_color:dword
-
 
3378
	cmp [k_scale],0
-
 
3379
	jl .end_f
-
 
3380
pushad
-
 
3381
	mov eax,[v_size]
-
 
3382
	mov ecx,[k_scale]
-
 
3383
	mov ebx,eax
-
 
3384
	cmp ecx,1
-
 
3385
	jl @f
-
 
3386
		shl ebx,cl
-
 
3387
	@@:
-
 
3388
	;ebx - ¯®«­ë© à §¬¥à ¨§®¡à ¦¥­¨ï
-
 
3389
	stdcall buf_rect_by_size, [buf_i], [coord_x],[coord_y],ebx,ebx, [b_color] ;à ¬ª  ­  à¨áã­®ª
-
 
3390
	mov edx,ebx
-
 
3391
	add ebx,[coord_y]
-
 
3392
	stdcall draw_polz_hor, [buf_i], [coord_x],ebx,edx,eax, [n_plane], [k_scale], [b_color] ;¯®«§ã­®ª, ¯®ª §ë¢ î騩 ­®¬¥à á¥ç¥­¨ï
-
 
3393
 
-
 
3394
	;à¨á®¢ ­¨¥ â®ç¥ª ¤«ï á¥âª¨
-
 
3395
	push ecx
-
 
3396
	mov edi,1
-
 
3397
	cmp ecx,1
-
 
3398
	jl @f
-
 
3399
		shl edi,cl
-
 
3400
	@@:
-
 
3401
	dec edi
-
 
3402
	cmp edi,1
-
 
3403
	jl .end_0
-
 
3404
	mov ecx,edi
-
 
3405
	imul ecx,edi
-
 
3406
	mov ebx,[coord_x]
-
 
3407
	mov edx,[coord_y]
-
 
3408
	add edx,eax
-
 
3409
	xor esi,esi
-
 
3410
	cld
-
 
3411
	@@:
-
 
3412
		add ebx,eax
-
 
3413
		inc esi
-
 
3414
		stdcall buf_set_pixel, [buf_i], ebx,edx, [b_color]
-
 
3415
		cmp esi,edi
-
 
3416
		jl .end_1
-
 
3417
			;¯¥à¥å®¤ â®ç¥ª ­  ­®¢ãî áâபã
-
 
3418
			xor esi,esi
-
 
3419
			mov ebx,[coord_x]
-
 
3420
			add edx,eax
-
 
3421
		.end_1:
-
 
3422
		loop @b
-
 
3423
	.end_0:
-
 
3424
	pop ecx
-
 
3425
 
-
 
3426
	;eax - à §¬¥à ®¤­®£® ª¢ ¤à â 
-
 
3427
	;edi - 㪠§ â¥«ì à¨áã¥¬ë¥ ¤ ­­ë¥ ¨§ ®¡ê¥ªâ 
-
 
3428
	mov ebx,[coord_x]
-
 
3429
	mov edx,[coord_y]
-
 
3430
	mov edi,[v_obj]
-
 
3431
	add edi,vox_offs_data
-
 
3432
	xor esi,esi
-
 
3433
	push eax
-
 
3434
	imul eax,[n_plane]
-
 
3435
	stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj], eax
-
 
3436
popad
-
 
3437
	.end_f:
-
 
3438
	ret
-
 
3439
endp
-
 
3440
 
-
 
3441
;description:
-
 
3442
; äã­ªæ¨ï à¨áãîé ï á१ ç á⨠¢®ªá¥«ì­®£® ®¡ì¥ªâ 
-
 
3443
;input:
-
 
3444
; s_c_x, s_c_y, s_c_z, s_k_scale - ¯ à ¬¥âàë ®¯à¥¤¥«ïî騥 ç áâì ¢®ªá¥«ì­®£® ®¡ê¥ªâ , ª®â®à ï ¡ã¤¥â à¨á®¢ âìáï
-
 
3445
align 4
-
 
3446
proc buf_vox_obj_draw_pl_scaled, buf_i:dword, v_obj:dword, coord_x:dword,\
-
 
3447
coord_y:dword, v_size:dword, k_scale:dword, n_plane:dword, b_color:dword,\
-
 
3448
s_c_x:dword, s_c_y:dword, s_c_z:dword, s_k_scale:dword
-
 
3449
	cmp [k_scale],0
-
 
3450
	jl .end_f
-
 
3451
pushad
-
 
3452
locals
-
 
3453
	p_node dd 0 ;த¨â¥«ì᪨© 㧥«
-
 
3454
endl
-
 
3455
	mov eax,[v_size]
-
 
3456
	mov ecx,[k_scale]
-
 
3457
	mov ebx,eax
-
 
3458
	cmp ecx,1
-
 
3459
	jl @f
-
 
3460
		shl ebx,cl
-
 
3461
	@@:
-
 
3462
	;ebx - ¯®«­ë© à §¬¥à ¨§®¡à ¦¥­¨ï
-
 
3463
	stdcall buf_rect_by_size, [buf_i], [coord_x],[coord_y],ebx,ebx, [b_color] ;à ¬ª  ­  à¨áã­®ª
-
 
3464
	mov edx,ebx
-
 
3465
	add ebx,[coord_y]
-
 
3466
	stdcall draw_polz_hor, [buf_i], [coord_x],ebx,edx,eax, [n_plane], [k_scale], [b_color] ;¯®«§ã­®ª, ¯®ª §ë¢ î騩 ­®¬¥à á¥ç¥­¨ï
-
 
3467
 
-
 
3468
	;à¨á®¢ ­¨¥ â®ç¥ª ¤«ï á¥âª¨
-
 
3469
	push ecx
-
 
3470
	mov edi,1
-
 
3471
	cmp ecx,1
-
 
3472
	jl @f
-
 
3473
		shl edi,cl
-
 
3474
	@@:
-
 
3475
	dec edi
-
 
3476
	cmp edi,1
-
 
3477
	jl .end_3
-
 
3478
	mov ecx,edi
-
 
3479
	imul ecx,edi
-
 
3480
	mov ebx,[coord_x]
-
 
3481
	mov edx,[coord_y]
-
 
3482
	add edx,eax
-
 
3483
	xor esi,esi
-
 
3484
	cld
-
 
3485
	@@:
-
 
3486
		add ebx,eax
-
 
3487
		inc esi
-
 
3488
		stdcall buf_set_pixel, [buf_i], ebx,edx, [b_color]
-
 
3489
		cmp esi,edi
-
 
3490
		jl .end_4
-
 
3491
			;¯¥à¥å®¤ â®ç¥ª ­  ­®¢ãî áâபã
-
 
3492
			xor esi,esi
-
 
3493
			mov ebx,[coord_x]
-
 
3494
			add edx,eax
-
 
3495
		.end_4:
-
 
3496
		loop @b
-
 
3497
	.end_3:
-
 
3498
	pop ecx
-
 
3499
 
-
 
3500
	mov esi,[s_k_scale]
-
 
3501
	cmp esi,1
-
 
3502
	jl .end_2
-
 
3503
	mov edi,[v_obj]
-
 
3504
	add edi,vox_offs_data
-
 
3505
 
-
 
3506
	; *** (1) ***
-
 
3507
	.found:
-
 
3508
	stdcall vox_obj_get_node_position, [v_obj],[s_c_x],[s_c_y],[s_c_z],esi
-
 
3509
	movzx bx,byte[edi+3]
-
 
3510
	mov [p_node],edi
-
 
3511
	add edi,4
-
 
3512
	cmp eax,0
-
 
3513
	je .end_1
-
 
3514
	mov ecx,eax
-
 
3515
	cld
-
 
3516
	@@: ;横« ¤«ï ¯à®¯ã᪠ ¯à¥¤ë¤ãé¨å ¯®¤¤¥à¥¢ì¥¢ ¢ 㧫¥
-
 
3517
		bt bx,0 ;¯à®¢¥à塞 ¥áâì «¨ ¤®ç¥à­¨¥ 㧫ë
-
 
3518
		jnc .end_0
-
 
3519
			xor eax,eax
-
 
3520
			stdcall vox_obj_rec0 ;¢ eax ¢ëç¨á«ï¥âáï ç¨á«® ¤®ç¥à­¨å 㧫®¢, ¢ ¤ ­­®© ¢¥â¢¨
-
 
3521
		.end_0:
-
 
3522
		shr bx,1
-
 
3523
		loop @b
-
 
3524
	.end_1:
-
 
3525
	bt bx,0
-
 
3526
	jnc .end_2 ;¥á«¨ ¯®¤¤¥à¥¢  ­¥ áãé¥áâ¢ã¥â
-
 
3527
	dec esi
-
 
3528
	cmp esi,0
-
 
3529
	jg .found
-
 
3530
 
-
 
3531
	mov eax,[v_size]
-
 
3532
	;eax - à §¬¥à ®¤­®£® ª¢ ¤à â 
-
 
3533
	;edi - 㪠§ â¥«ì à¨áã¥¬ë¥ ¤ ­­ë¥ ¨§ ®¡ê¥ªâ 
-
 
3534
	mov ecx,[k_scale]
-
 
3535
	mov ebx,[coord_x]
-
 
3536
	mov edx,[coord_y]
-
 
3537
	xor esi,esi
-
 
3538
	push eax
-
 
3539
	imul eax,[n_plane]
-
 
3540
	stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj], eax
-
 
3541
 
-
 
3542
	.end_2:
-
 
3543
popad
-
 
3544
	.end_f:
-
 
3545
	ret
-
 
3546
endp
-
 
3547
 
-
 
3548
;description:
-
 
3549
; ®¯à¥¤¥«¥­¨¥ ¯®§¨æ¨¨ 㧫  ¢ ¤¥à¥¢¥ (®â 0 ¤® 7)
-
 
3550
align 4
-
 
3551
proc vox_obj_get_node_position uses ebx ecx edi, v_obj:dword,\
-
 
3552
coord_x:dword,coord_y:dword,coord_z:dword,k_scale:dword
-
 
3553
	mov ecx,[k_scale]
-
 
3554
	dec ecx
-
 
3555
	mov eax,[coord_x]
-
 
3556
	mov ebx,[coord_y]
-
 
3557
	mov edi,[coord_z]
-
 
3558
	cmp ecx,1
-
 
3559
	jl .end_0
-
 
3560
		shr eax,cl
-
 
3561
		shr ebx,cl
-
 
3562
		shr edi,cl
-
 
3563
	.end_0:
-
 
3564
	and eax,1
-
 
3565
	bt ebx,0
-
 
3566
	jnc @f
-
 
3567
		bts eax,1
-
 
3568
	@@:
-
 
3569
	bt edi,0
-
 
3570
	jnc @f
-
 
3571
		bts eax,2
-
 
3572
	@@:
-
 
3573
 
-
 
3574
	mov edi,[v_obj]
-
 
3575
	add edi,vox_offs_tree_table
-
 
3576
	@@:
-
 
3577
		cmp al,byte[edi]
-
 
3578
		je @f
-
 
3579
		inc edi
-
 
3580
		jmp @b
-
 
3581
	@@:
-
 
3582
	sub edi,[v_obj]
-
 
3583
	sub edi,vox_offs_tree_table
-
 
3584
	mov eax,edi
-
 
3585
	
-
 
3586
	ret
-
 
3587
endp
-
 
3588
 
-
 
3589
;input:
-
 
3590
; edi - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
-
 
3591
;output:
-
 
3592
; eax - eax + ç¨á«® 㧫®¢ ¢ ¤ ­­ëå ¢®ªá. ®¡ê¥ªâ 
-
 
3593
; edi - 㪠§ â¥«ì ­  ᬥ饭­ë¥ ¤ ­­ë¥ ¢®ªá. ®¡ê¥ªâ 
-
 
3594
align 4
-
 
3595
proc vox_obj_rec0
-
 
3596
	inc eax
-
 
3597
	cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï
-
 
3598
	je .sub_trees
-
 
3599
 
-
 
3600
		;४ãàᨢ­ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
-
 
3601
		push ebx ecx
-
 
3602
		mov bh,byte[edi+3]
-
 
3603
		add edi,4
-
 
3604
		mov bl,8
-
 
3605
		.cycle:
-
 
3606
			bt bx,8 ;â¥áâ¨à㥬 ⮫쪮 bh
-
 
3607
			jnc .c_next
-
 
3608
				stdcall vox_obj_rec0
-
 
3609
			.c_next:
-
 
3610
			shr bh,1
-
 
3611
			dec bl
-
 
3612
			jnz .cycle
-
 
3613
		pop ecx ebx
-
 
3614
 
-
 
3615
		jmp .end_f
-
 
3616
	.sub_trees:
-
 
3617
		add edi,4
-
 
3618
	.end_f:
-
 
3619
	ret
-
 
3620
endp
-
 
3621
 
-
 
3622
;description:
-
 
3623
; äã­ªæ¨ï à¨áãîé ï £®à¨§®­â «ì­ãî ¯®«®áã á ¯®«§ã­ª®¬
-
 
3624
align 4
-
 
3625
proc draw_polz_hor uses eax ebx ecx, buf:dword, coord_x:dword, coord_y:dword,\
-
 
3626
size_x:dword, size_y:dword, pos:dword, k_scale:dword, color:dword
-
 
3627
	mov ebx,[size_x]
-
 
3628
	stdcall buf_rect_by_size, [buf], [coord_x],[coord_y],ebx,[size_y], [color]
-
 
3629
	mov ecx,[k_scale]
-
 
3630
	shr ebx,cl
-
 
3631
	mov eax,[pos]
-
 
3632
	imul eax,ebx
-
 
3633
	add eax,[coord_x]
-
 
3634
	stdcall buf_filled_rect_by_size, [buf], eax,[coord_y],ebx,[size_y], [color]
-
 
3635
	ret
-
 
3636
endp
-
 
3637
 
-
 
3638
;input:
-
 
3639
; ebx - coord_x
-
 
3640
; edx - coord_y
-
 
3641
; esi - coord_z
-
 
3642
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
3643
; edi - 㪠§ â¥«ì ­  ¤ ­­ë¥ ¢®ªá¥«ì­®£® ®¡ê¥ªâ 
-
 
3644
align 4
-
 
3645
proc draw_sub_vox_obj_pl, buf_i:dword, v_obj:dword, clip_z:dword,\
-
 
3646
v_size:dword
-
 
3647
	cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï
-
 
3648
	je .sub_trees
-
 
3649
 
-
 
3650
		;¯à®à¨á®¢ª  à ¬ª¨ ¥á«¨ à §¬¥à 㧫  = 1
-
 
3651
		cmp ecx,0
-
 
3652
		jne @f
-
 
3653
		;¯à®¢¥àª  £«ã¡¨­ë esi
-
 
3654
		;clip_z=n_plane*v_size
-
 
3655
		stdcall vox_is_clip, [clip_z],[v_size]
-
 
3656
		cmp eax,0
-
 
3657
		je @f
-
 
3658
			push ecx
-
 
3659
			mov ecx,dword[edi]
-
 
3660
			and ecx,0xffffff
-
 
3661
			stdcall buf_rect_by_size, [buf_i], ebx,edx, [v_size],[v_size],ecx
-
 
3662
			pop ecx
-
 
3663
		@@:
-
 
3664
 
-
 
3665
		;४ãàᨢ­ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢
-
 
3666
		push edx
-
 
3667
 
-
 
3668
		;¢å®¤ ¢­ãâàì 㧫 
-
 
3669
		dec ecx
-
 
3670
 
-
 
3671
		mov eax,[v_size]
-
 
3672
		cmp ecx,1
-
 
3673
		jl @f
-
 
3674
			shl eax,cl
-
 
3675
		@@:
-
 
3676
		add edx,eax ;ª®à¥ªâ¨à®¢ª  ¢ëá®âë ¯®¤ ¢®ªá¥«ì ­¨¦­¥£® ã஢­ï
-
 
3677
 
-
 
3678
		mov ah,byte[edi+3]
-
 
3679
		add edi,4
-
 
3680
		mov al,8
-
 
3681
		.cycle:
-
 
3682
			bt ax,8 ;â¥áâ¨à㥬 ⮫쪮 ah
-
 
3683
			jnc .c_next
-
 
3684
				push eax ebx edx esi
-
 
3685
				stdcall vox_corect_coords_pl, [v_obj],[v_size]
-
 
3686
				stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj],[clip_z],[v_size]
-
 
3687
				pop esi edx ebx eax
-
 
3688
			.c_next:
-
 
3689
			shr ah,1
-
 
3690
			dec al
-
 
3691
			jnz .cycle
-
 
3692
 
-
 
3693
		;¢ë室 ¨§ 㧫 
-
 
3694
		inc ecx
-
 
3695
		pop edx
-
 
3696
 
-
 
3697
		jmp .end_f
-
 
3698
	.sub_trees:
-
 
3699
		cmp ecx,0
-
 
3700
		jl .end_0 ;­¥ à¨á㥬 ®ç¥­ì ¬ «¥­ìª¨¥ ¢®ªá¥«¨
-
 
3701
 
-
 
3702
		;¯à®¢¥àª  £«ã¡¨­ë esi
-
 
3703
		;clip_z=n_plane*v_size
-
 
3704
		stdcall vox_is_clip, [clip_z],[v_size]
-
 
3705
		cmp eax,0
-
 
3706
		je .end_0
-
 
3707
 
-
 
3708
		;à¨á㥬 㧥«
-
 
3709
		mov eax,[edi]
-
 
3710
		and eax,0xffffff
-
 
3711
		push eax ;梥â 㧫 
-
 
3712
 
-
 
3713
		mov eax,[v_size]
-
 
3714
		cmp ecx,1
-
 
3715
		jl @f
-
 
3716
			;ª¢ ¤à â ¡®«ìè¥ â¥ªã饣® ¬ áèâ ¡ 
-
 
3717
			shl eax,cl ;à §¬¥à 㧫 
-
 
3718
			stdcall buf_filled_rect_by_size, [buf_i], ebx,edx, eax,eax
-
 
3719
			push ebx edx esi
-
 
3720
			mov esi,eax
-
 
3721
			inc ebx
-
 
3722
			inc edx
-
 
3723
			sub esi,2
-
 
3724
			mov eax,[buf_i]
-
 
3725
			push dword 128
-
 
3726
			push dword[eax+16] ;+16 - b_color
-
 
3727
			stdcall combine_colors_3,[edi]
-
 
3728
			stdcall buf_rect_by_size, [buf_i], ebx,edx, esi,esi,eax
-
 
3729
			pop esi edx ebx
-
 
3730
			jmp .end_0
-
 
3731
		@@:
-
 
3732
			;ª¢ ¤à â ⥪ã饣® ¬ áèâ ¡ 
-
 
3733
			stdcall buf_filled_rect_by_size, [buf_i], ebx,edx, eax,eax
-
 
3734
 
-
 
3735
		.end_0:
-
 
3736
		add edi,4
-
 
3737
	.end_f:
-
 
3738
	ret
-
 
3739
endp
-
 
3740
 
-
 
3741
;description:
-
 
3742
; ¢á¯®¬®£ â¥«ì­ ï äã­ªæ¨ï ¤«ï ¯à®¢¥àª¨ £«ã¡¨­ë esi
-
 
3743
;input:
-
 
3744
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
3745
; esi - coord z
-
 
3746
; clip_z - n_plane*v_size
-
 
3747
;output:
-
 
3748
; eax - 0 if no draw, 1 if draw
-
 
3749
align 4
-
 
3750
proc vox_is_clip uses ebx edi, clip_z:dword, v_size:dword
-
 
3751
	xor eax,eax
-
 
3752
	mov ebx,[clip_z]
-
 
3753
	mov edi,[v_size]
-
 
3754
	cmp ecx,1
-
 
3755
	jl @f
-
 
3756
		shl edi,cl
-
 
3757
	@@:
-
 
3758
	;edi = 2^ecx
-
 
3759
	add edi,esi
-
 
3760
	cmp edi,ebx ;if (esi+2^ecx*v_size <= (n_plane*v_size)) no draw
-
 
3761
	jle @f
-
 
3762
	add ebx,[v_size]
-
 
3763
	cmp esi,ebx ;if (esi >= (n_plane+1)*v_size) no draw
-
 
3764
	jge @f
-
 
3765
		inc eax
-
 
3766
	@@:
-
 
3767
	ret
-
 
3768
endp
-
 
3769
 
-
 
3770
;äã­ªæ¨ï ¤«ï ª®à¥ªâ¨à®¢ª¨ ª®®à¤¨­ â
-
 
3771
;­ ¯à ¢«¥­¨ï ®á¥© ª®®à¤¨­ â ¢ ¢®ªá¥«¥:
-
 
3772
;*z
-
 
3773
;|
-
 
3774
;+-* x
-
 
3775
;input:
-
 
3776
;  al - ­®¬¥à 㧫  ¢ ¤¥à¥¢¥ (®â 1 ¤® 8)
-
 
3777
; ebx - ª®®à¤¨­ â  x
-
 
3778
; edx - ª®®à¤¨­ â  y
-
 
3779
; esi - ª®®à¤¨­ â  z
-
 
3780
; ecx - ã஢¥­ì ⥪ã襣® 㧫 
-
 
3781
;output:
-
 
3782
; ebx - ­®¢ ï ª®®à¤¨­ â  x
-
 
3783
; edx - ­®¢ ï ª®®à¤¨­ â  y
-
 
3784
; esi - ­®¢ ï ª®®à¤¨­ â  z
-
 
3785
align 4
-
 
3786
proc vox_corect_coords_pl, v_obj:dword, v_size:dword
-
 
3787
	cmp ecx,0
-
 
3788
	jl .end_f ;¤«ï ã᪮७¨ï ®âà¨á®¢ª¨
-
 
3789
 
-
 
3790
	push eax edi
-
 
3791
	and eax,15 ;¢ë¤¥«ï¥¬ ­®¬¥à 㧫  ¢ ¤¥à¥¢¥
-
 
3792
	mov edi,[v_obj]
-
 
3793
	add edi,vox_offs_tree_table
-
 
3794
	add edi,8
-
 
3795
	sub edi,eax
-
 
3796
 
-
 
3797
	mov eax,[v_size] ;eax - ¢ëá®â  ®á­®¢ ­¨ï ¥¤¨­¨ç­®£® ¢®ªá¥«ï
-
 
3798
	cmp ecx,1
-
 
3799
	jl @f ;¢® ¨§¡¥¦ ­¨¥ § æ¨ª«¨¢ ­¨ï
-
 
3800
		shl eax,cl
-
 
3801
	@@:
-
 
3802
 
-
 
3803
	bt word[edi],0 ;test voxel coord x
-
 
3804
	jnc @f
-
 
3805
		add ebx,eax
-
 
3806
	@@:
-
 
3807
	bt word[edi],1 ;test voxel coord y
-
 
3808
	jnc @f
-
 
3809
		add esi,eax ;¬¥­ï¥¬ £«ã¡¨­ã ¤«ï ¡ãä¥à  z
-
 
3810
	@@:
-
 
3811
	bt word[edi],2 ;test voxel coord z
-
 
3812
	jnc @f
-
 
3813
		sub edx,eax
-
 
3814
	@@:
-
 
3815
	pop edi eax
-
 
3816
	.end_f:
-
 
3817
	ret
-
 
3818
endp
-
 
3819
 
-
 
3820
;description:
-
 
3821
; äã­ªæ¨ï à¨áãîé ï ⥭¨
-
 
3822
;input:
-
 
3823
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â )
-
 
3824
; buf_z - ¡ãä¥à £«ã¡¨­ë (32 ¡¨â  ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥­ ᮢ¯ ¤ âì á buf_i)
-
 
3825
; h_br - ª¨áâì á ¨§®¡à ¦¥­¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â )
-
 
3826
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ­¨ï ¨§®¡à ¦¥­¨ï
-
 
3827
align 4
-
 
3828
proc buf_vox_obj_draw_3g_shadows, buf_i:dword, buf_z:dword, h_br:dword, \
-
 
3829
coord_x:dword, coord_y:dword, color:dword, k_scale:dword, prop:dword
-
 
3830
locals
-
 
3831
	correct_z dd 0 ;ª®à¥ªâ¨à®¢ª  ¤«ï ¡ãä¥à  £«ã¡¨­ë
-
 
3832
endl
-
 
3833
pushad
-
 
3834
	mov eax,[k_scale]
-
 
3835
	add eax,[prop]
-
 
3836
	mov dword[correct_z],8
-
 
3837
	sub [correct_z],eax
-
 
3838
	mov ebx,[coord_x]
-
 
3839
	;correct_z = 8-k_scale-prop
-
 
3840
 
-
 
3841
	stdcall buf_vox_obj_get_img_w_3g, [h_br],[k_scale]
-
 
3842
	mov edx,eax ;edx - è¨à¨­  ¨§®¡à ¦¥­¨ï
-
 
3843
	stdcall buf_vox_obj_get_img_h_3g, [h_br],[k_scale]
-
 
3844
	mov esi,eax
-
 
3845
 
-
 
3846
	mov edi,[coord_y]
-
 
3847
	mov ecx,edx
-
 
3848
	add edx,ebx ;è¨à¨­  + ®âáâ㯠᫥¢ 
-
 
3849
	imul ecx,esi
-
 
3850
	cld
-
 
3851
	.cycle_0:
-
 
3852
		stdcall buf_get_pixel, [buf_z],ebx,edi
-
 
3853
		cmp eax,0
-
 
3854
		je @f
-
 
3855
			stdcall vox_correct_z, [correct_z]
-
 
3856
			push eax
-
 
3857
			stdcall buf_get_pixel, [buf_i],ebx,edi
-
 
3858
			stdcall combine_colors_3,eax,[color] ;,eax
-
 
3859
			stdcall buf_set_pixel, [buf_i],ebx,edi,eax
-
 
3860
		@@:
-
 
3861
		inc ebx
-
 
3862
		cmp ebx,edx
-
 
3863
		jl @f
-
 
3864
			mov ebx,[coord_x]
-
 
3865
			inc edi
-
 
3866
		@@:
-
 
3867
		loop .cycle_0
-
 
3868
 
-
 
3869
popad
-
 
3870
	ret
-
 
3871
endp
-
 
3872
 
-
 
3873
;output:
-
 
3874
; eax - scaled coord z
-
 
3875
align 4
-
 
3876
proc vox_correct_z uses ecx, correct_z:dword
-
 
3877
	mov ecx,[correct_z]
-
 
3878
	cmp ecx,0
-
 
3879
	je .end_f
-
 
3880
	jl .end_0
-
 
3881
		shl eax,cl
-
 
3882
		jmp .end_f
-
 
3883
	.end_0:
-
 
3884
		neg ecx
-
 
3885
		inc ecx
-
 
3886
		shr eax,cl
-
 
3887
	.end_f:
-
 
3888
	ret
-
 
3889
endp
-
 
3890
 
-
 
3891
;output:
-
 
3892
; eax - color
-
 
3893
align 4
-
 
3894
proc combine_colors_3 uses ebx ecx edx edi esi, col_0:dword, col_1:dword, alpha:dword
-
 
3895
 
-
 
3896
	mov ebx,[col_0]
-
 
3897
	mov ecx,[col_1]
-
 
3898
	movzx di,byte[alpha] ;pro
-
 
3899
	mov si,0x00ff ;---get transparent---
-
 
3900
	sub si,di ;256-pro
-
 
3901
 
-
 
3902
	;---blye---
-
 
3903
	movzx ax,bl
-
 
3904
	imul ax,si
-
 
3905
	movzx dx,cl
-
 
3906
	imul dx,di
-
 
3907
	add ax,dx
-
 
3908
	mov cl,ah
-
 
3909
	;---green---
-
 
3910
	movzx ax,bh
-
 
3911
	imul ax,si
-
 
3912
	movzx dx,ch
-
 
3913
	imul dx,di
-
 
3914
	add ax,dx
-
 
3915
	mov ch,ah
-
 
3916
	shr ebx,16
-
 
3917
	ror ecx,16
-
 
3918
	;---red---
-
 
3919
	movzx ax,bl
-
 
3920
	imul ax,si
-
 
3921
	movzx dx,cl
-
 
3922
	imul dx,di
-
 
3923
	add ax,dx
-
 
3924
 
-
 
3925
	shl eax,8
-
 
3926
	ror ecx,16
-
 
3927
	mov ax,cx
-
 
3928
	and eax,0xffffff
-
 
3929
 
-
 
3930
	ret
-
 
3931
endp
2954
 
3932
 
2955
txt_err_n8b db 'need buffer 8 bit',13,10,0
3933
txt_err_n8b db 'need buffer 8 bit',13,10,0
2956
txt_err_n24b db 'need buffer 24 bit',13,10,0
3934
txt_err_n24b db 'need buffer 24 bit',13,10,0
Line 2957... Line 3935...
2957
txt_err_n8_24b db 'need buffer 8 or 24 bit',13,10,0
3935
txt_err_n8_24b db 'need buffer 8 or 24 bit',13,10,0
Line 2985... Line 3963...
2985
	dd sz_buf2d_flood_fill, buf_flood_fill
3963
	dd sz_buf2d_flood_fill, buf_flood_fill
2986
	dd sz_buf2d_set_pixel, buf_set_pixel
3964
	dd sz_buf2d_set_pixel, buf_set_pixel
2987
	dd sz_buf2d_get_pixel, buf_get_pixel
3965
	dd sz_buf2d_get_pixel, buf_get_pixel
2988
	dd sz_buf2d_vox_brush_create, vox_brush_create
3966
	dd sz_buf2d_vox_brush_create, vox_brush_create
2989
	dd sz_buf2d_vox_brush_delete, vox_brush_delete
3967
	dd sz_buf2d_vox_brush_delete, vox_brush_delete
-
 
3968
	dd sz_buf2d_vox_obj_get_img_w_3g, buf_vox_obj_get_img_w_3g
-
 
3969
	dd sz_buf2d_vox_obj_get_img_h_3g, buf_vox_obj_get_img_h_3g
-
 
3970
	dd sz_buf2d_vox_obj_draw_3g, buf_vox_obj_draw_3g
-
 
3971
	dd sz_buf2d_vox_obj_draw_3g_scaled, buf_vox_obj_draw_3g_scaled
-
 
3972
	dd sz_buf2d_vox_obj_draw_pl, buf_vox_obj_draw_pl
-
 
3973
	dd sz_buf2d_vox_obj_draw_pl_scaled, buf_vox_obj_draw_pl_scaled
-
 
3974
	dd sz_buf2d_vox_obj_draw_3g_shadows, buf_vox_obj_draw_3g_shadows
2990
	dd 0,0
3975
	dd 0,0
2991
	sz_lib_init db 'lib_init',0
3976
	sz_lib_init db 'lib_init',0
2992
	sz_buf2d_create db 'buf2d_create',0
3977
	sz_buf2d_create db 'buf2d_create',0
2993
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
3978
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
2994
	sz_buf2d_clear db 'buf2d_clear',0 ;®ç¨á⪠ ¡ãä¥à  㪠§ ­­ë¬ 梥⮬
3979
	sz_buf2d_clear db 'buf2d_clear',0 ;®ç¨á⪠ ¡ãä¥à  㪠§ ­­ë¬ 梥⮬
Line 3015... Line 4000...
3015
	sz_buf2d_flood_fill db 'buf2d_flood_fill',0
4000
	sz_buf2d_flood_fill db 'buf2d_flood_fill',0
3016
	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
4001
	sz_buf2d_set_pixel db 'buf2d_set_pixel',0
3017
	sz_buf2d_get_pixel db 'buf2d_get_pixel',0
4002
	sz_buf2d_get_pixel db 'buf2d_get_pixel',0
3018
	sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
4003
	sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
3019
	sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
4004
	sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
-
 
4005
	sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
-
 
4006
	sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
-
 
4007
	sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
-
 
4008
	sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
-
 
4009
	sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
-
 
4010
	sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
-
 
4011
	sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0