/programs/media/voxel_editor/trunk/box.vox |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/voxel_editor/trunk/build_ru.bat |
---|
0,0 → 1,8 |
if not exist bin mkdir bin |
if not exist bin\toolbar.png @copy toolbar.png bin\toolbar.png |
@copy *.vox bin\*.vox |
if not exist bin\buf2d.obj @fasm.exe -m 16384 ..\..\..\develop\libraries\buf2d\trunk\buf2d.asm bin\buf2d.obj |
@kpack bin\buf2d.obj |
@fasm.exe -m 16384 voxel_editor.asm bin\voxel_editor.kex |
@kpack bin\voxel_editor.kex |
pause |
/programs/media/voxel_editor/trunk/dll.inc |
---|
0,0 → 1,99 |
proc dll.Load, import_table:dword |
mov esi,[import_table] |
.next_lib: mov edx,[esi] |
or edx,edx |
jz .exit |
push esi |
mov esi,[esi+4] |
mov edi,s_libdir.fname |
@@: lodsb |
stosb |
or al,al |
jnz @b |
mcall 68,19,s_libdir |
or eax,eax |
jz .fail |
stdcall dll.Link,eax,edx |
push eax |
mov eax, [eax] |
cmp dword [eax], 'lib_' |
pop eax |
jnz @f |
stdcall dll.Init,[eax+4] |
@@: |
pop esi |
add esi,8 |
jmp .next_lib |
.exit: xor eax,eax |
ret |
.fail: add esp,4 |
xor eax,eax |
inc eax |
ret |
endp |
proc dll.Link, exp:dword,imp:dword |
push eax |
mov esi,[imp] |
test esi,esi |
jz .done |
.next: lodsd |
test eax,eax |
jz .done |
stdcall dll.GetProcAddress,[exp],eax |
or eax,eax |
jz @f |
mov [esi-4],eax |
jmp .next |
@@: mov dword[esp],0 |
.done: pop eax |
ret |
endp |
proc dll.Init, dllentry:dword |
pushad |
mov eax,mem.Alloc |
mov ebx,mem.Free |
mov ecx,mem.ReAlloc |
mov edx,dll.Load |
stdcall [dllentry] |
popad |
ret |
endp |
proc dll.GetProcAddress, exp:dword,sz_name:dword |
mov edx,[exp] |
xor eax,eax |
.next: or edx,edx |
jz .end |
cmp dword[edx],0 |
jz .end |
stdcall strcmp,[edx],[sz_name] |
test eax,eax |
jz .ok |
add edx,8 |
jmp .next |
.ok: mov eax,[edx+4] |
.end: ret |
endp |
proc strcmp, str1:dword,str2:dword |
push esi edi |
mov esi,[str1] |
mov edi,[str2] |
xor eax,eax |
@@: lodsb |
scasb |
jne .fail |
or al,al |
jnz @b |
jmp .ok |
.fail: or eax,-1 |
.ok: pop edi esi |
ret |
endp |
s_libdir: |
db '/sys/lib/' |
.fname rb 32 |
/programs/media/voxel_editor/trunk/house0.vox |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/voxel_editor/trunk/house1.vox |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/voxel_editor/trunk/mem.inc |
---|
0,0 → 1,48 |
;----------------------------------------------------------------------------- |
proc mem.Alloc,size ;///////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx |
mov ecx,[size] |
;*** add ecx,4 |
mcall 68,12 |
;*** add ecx,-4 |
;*** mov [eax],ecx |
;*** add eax,4 |
pop ecx ebx |
ret |
endp |
;----------------------------------------------------------------------------- |
proc mem.ReAlloc,mptr,size ;////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx edx |
mov ecx,[size] |
or ecx,ecx |
jz @f |
;*** add ecx,4 |
@@: mov edx,[mptr] |
or edx,edx |
jz @f |
;*** add edx,-4 |
@@: mcall 68,20 |
or eax,eax |
jz @f |
;*** add ecx,-4 |
;*** mov [eax],ecx |
;*** add eax,4 |
@@: pop edx ecx ebx |
ret |
endp |
;----------------------------------------------------------------------------- |
proc mem.Free,mptr ;////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx |
mov ecx,[mptr] |
or ecx,ecx |
jz @f |
;*** add ecx,-4 |
@@: mcall 68,13 |
pop ecx ebx |
ret |
endp |
/programs/media/voxel_editor/trunk/toolbar.png |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/media/voxel_editor/trunk/vox_draw.inc |
---|
0,0 → 1,1249 |
; |
BUF_STRUCT_SIZE equ 21 |
buf2d_data equ dword[edi] ;¤ ë¥ ¡ãä¥à ¨§®¡à ¦¥¨ï |
buf2d_w equ dword[edi+8] ;è¨à¨ ¡ãä¥à |
buf2d_h equ dword[edi+12] ;¢ëá®â ¡ãä¥à |
buf2d_l equ word[edi+4] |
buf2d_t equ word[edi+6] ;®âáâ㯠ᢥàåã |
buf2d_size_lt equ dword[edi+4] ;®âáâ㯠᫥¢ ¨ á¯à ¢ ¤«ï ¡ãä¥à |
buf2d_color equ dword[edi+16] ;梥â ä® ¡ãä¥à |
buf2d_bits equ byte[edi+20] ;ª®«¨ç¥á⢮ ¡¨â ¢ 1-© â®çª¥ ¨§®¡à ¦¥¨ï |
vox_offs_tree_table equ 4 |
vox_offs_data equ 12 |
;description: |
; äãªæ¨ï à¨áãîé ï ®¤¨®çë© ¢®ªá¥« |
;input: |
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â ) |
; buf_z - ¡ãä¥à £«ã¡¨ë (32 ¡¨â ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥ ᮢ¯ ¤ âì á buf_i) |
; buf_v - ¡ãä¥à á ¨§®¡à ¦¥¨¥¬ ¢®ªá¥«ï (32 ¡¨â ) |
; v_color - 梥â |
align 4 |
proc draw_vox, buf_i:dword, buf_z:dword, buf_v:dword,\ |
coord_x:dword, coord_y:dword, coord_z:dword, v_color:dword |
pushad |
mov eax,[coord_x] |
mov ebx,[coord_y] |
mov edi,[buf_v] |
mov ecx,buf2d_h |
mov esi,buf2d_w |
imul ecx,esi |
add esi,eax |
mov edx,buf2d_data |
cld |
;ecx - count pixels in voxel |
;edx - 㪠§ â¥«ì ¤ ë¥ ¢ ¢®ªá¥«ì®¬ ¡ãä¥à¥ |
;edi - 㪠§ â¥«ì ¢®ªá¥«ìë© ¡ãä¥à |
;esi - width voxel buffer add coord x |
.cycle: |
cmp dword[edx],0 |
je @f |
;¯à®¢¥à塞 ¡ãä¥à £«ã¡¨ë |
push eax |
stdcall [buf2d_get_pixel], [buf_z],eax,ebx |
sub eax,[coord_z] |
cmp eax,[edx] |
jl .dr_pixel |
pop eax |
jmp @f |
.dr_pixel: |
;à¨á㥬 â®çªã |
pop eax |
stdcall [buf2d_set_pixel], [buf_i],eax,ebx,[v_color] |
push ecx |
mov ecx,[coord_z] |
add ecx,[edx] |
stdcall [buf2d_set_pixel], [buf_z],eax,ebx,ecx |
pop ecx |
@@: |
add edx,4 |
inc eax |
cmp eax,esi |
jl @f |
inc ebx |
sub eax,buf2d_w |
@@: |
loop .cycle |
popad |
ret |
endp |
;description: |
; äãªæ¨ï à¨áãîé ï ¢®ªá¥«ìë© ®¡ê¥ªâ |
;input: |
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â ) |
; buf_z - ¡ãä¥à £«ã¡¨ë (32 ¡¨â ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥ ᮢ¯ ¤ âì á buf_i) |
; h_br - ª¨áâì á ¨§®¡à ¦¥¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â ) |
; v_obj - ¢®ªá¥«ìë© ®¡ê¥ªâ |
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ¨ï ¨§®¡à ¦¥¨ï |
align 4 |
proc buf2d_vox_obj_draw_3g, buf_i:dword, buf_z:dword, h_br:dword, v_obj:dword,\ |
coord_x:dword, coord_y:dword, coord_z:dword, k_scale:dword |
pushad |
mov edi,[v_obj] |
mov eax,[k_scale] |
mov ebx,[coord_x] |
;--- |
;â¥á⮢ ï à ¬ª |
mov ecx,[h_br] |
movzx edx,byte[ecx] |
movzx esi,byte[ecx+1] |
cmp eax,1 |
jl .end_c0 |
mov ecx,eax |
shl edx,cl |
shl esi,cl |
.end_c0: |
stdcall [buf2d_rect_by_size], [buf_i], ebx,[coord_y],edx,esi, 0xd0d0d0 |
;--- |
mov ecx,[coord_y] |
mov edx,eax |
add edi,vox_offs_data |
mov esi,[coord_z] |
stdcall vox_go_in_node, [buf_i], [buf_z], [h_br], [v_obj] |
popad |
ret |
endp |
;description: |
; äãªæ¨ï à¨áãîé ï ⥨ |
;input: |
; buf_i - ¡ãä¥à ¢ ª®â®à®¬ à¨áã¥âáï (24 ¡¨â ) |
; buf_z - ¡ãä¥à £«ã¡¨ë (32 ¡¨â ¯® ç¨á«ã ¯¨ªá¥«¥© ¤®«¦¥ ᮢ¯ ¤ âì á buf_i) |
; h_br - ª¨áâì á ¨§®¡à ¦¥¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â ) |
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ¨ï ¨§®¡à ¦¥¨ï |
align 4 |
proc buf2d_vox_obj_draw_3g_shadows, buf_i:dword, buf_z:dword, h_br:dword, \ |
coord_x:dword, coord_y:dword, color:dword, k_scale:dword, prop:dword |
locals |
correct_z dd 0 ;ª®à¥ªâ¨à®¢ª ¤«ï ¡ãä¥à £«ã¡¨ë |
endl |
pushad |
mov eax,[k_scale] |
add eax,[prop] |
mov dword[correct_z],8 |
sub [correct_z],eax |
mov ebx,[coord_x] |
;correct_z = 8-k_scale-prop |
stdcall buf2d_vox_obj_get_img_w_3g, [h_br],[k_scale] |
mov edx,eax ;edx - è¨à¨ ¨§®¡à ¦¥¨ï |
stdcall buf2d_vox_obj_get_img_h_3g, [h_br],[k_scale] |
mov esi,eax |
mov edi,[coord_y] |
mov ecx,edx |
add edx,ebx ;è¨à¨ + ®âáâ㯠᫥¢ |
imul ecx,esi |
cld |
.cycle_0: |
stdcall [buf2d_get_pixel], [buf_z],ebx,edi |
cmp eax,0 |
je @f |
stdcall vox_correct_z, [correct_z] |
push eax |
stdcall [buf2d_get_pixel], [buf_i],ebx,edi |
stdcall combine_colors_3,eax,[color] ;,eax |
stdcall [buf2d_set_pixel], [buf_i],ebx,edi,eax |
@@: |
inc ebx |
cmp ebx,edx |
jl @f |
mov ebx,[coord_x] |
inc edi |
@@: |
loop .cycle_0 |
popad |
ret |
endp |
;output: |
; eax - scaled coord z |
align 4 |
proc vox_correct_z uses ecx, correct_z:dword |
mov ecx,[correct_z] |
cmp ecx,0 |
je .end_f |
jl .end_0 |
shl eax,cl |
jmp .end_f |
.end_0: |
neg ecx |
inc ecx |
shr eax,cl |
.end_f: |
ret |
endp |
;output: |
; eax - color |
align 4 |
proc combine_colors_3 uses ebx ecx edx edi esi, col_0:dword, col_1:dword, alpha:dword |
mov ebx,[col_0] |
mov ecx,[col_1] |
movzx di,byte[alpha] ;pro |
mov si,0x00ff ;---get transparent--- |
sub si,di ;256-pro |
;---blye--- |
movzx ax,bl |
imul ax,si |
movzx dx,cl |
imul dx,di |
add ax,dx |
mov cl,ah |
;---green--- |
movzx ax,bh |
imul ax,si |
movzx dx,ch |
imul dx,di |
add ax,dx |
mov ch,ah |
shr ebx,16 |
ror ecx,16 |
;---red--- |
movzx ax,bl |
imul ax,si |
movzx dx,cl |
imul dx,di |
add ax,dx |
shl eax,8 |
ror ecx,16 |
mov ax,cx |
and eax,0xffffff |
ret |
endp |
;input: |
; h_br - ª¨áâì á ¨§®¡à ¦¥¨ï¬¨ ¢®ªá¥«¥© (32 ¡¨â ) |
; ebx - coord_x |
; ecx - coord_y |
; esi - coord_z |
; edx - ã஢¥ì ⥪ã襣® 㧫 |
; edi - 㪠§ â¥«ì ¤ ë¥ ¢®ªá¥«ì®£® ®¡ê¥ªâ |
align 4 |
proc vox_go_in_node, buf_i:dword, buf_z:dword, h_br:dword, v_obj:dword |
;, coord_z:dword |
cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï |
je .sub_trees |
;४ãàá¨¢ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢ |
push eax ecx |
;¯à®à¨á®¢ª à ¬ª¨ ¥á«¨ à §¬¥à 㧫 = 1 |
cmp edx,0 |
jne .end_2 |
push eax |
stdcall vox_get_sub_brush,[h_br],0 ;®¯à¥¤¥«ï¥¬ ª¨áâì ¤«ï à¨á®¢ ¨ï |
cmp eax,0 ;¥á«¨ ª¨áâì ¥ ©¤¥ |
je @f |
stdcall draw_vox, [buf_i], [buf_z], eax, ebx,ecx,esi, [edi] |
@@: |
pop eax |
.end_2: |
;¢å®¤ ¢ãâàì 㧫 |
dec edx |
;--- |
push ebx |
;mov eax,(7-4/2) |
mov ebx,[h_br] |
movzx eax,byte[ebx+1] |
movzx ebx,byte[ebx+2] |
shr ebx,1 |
sub eax,ebx |
cmp edx,1 |
jl .end_c1 |
push ecx |
mov ecx,edx |
shl eax,cl |
shl ebx,cl ;??? |
pop ecx |
.end_c1: |
add esi,ebx ;??? |
pop ebx |
add ecx,eax ;ª®à¥ªâ¨à®¢ª ¢ëá®âë ¯®¤ ¢®ªá¥«ì ¨¦¥£® ã஢ï |
;--- |
mov ah,byte[edi+3] |
add edi,4 |
mov al,8 |
.cycle: |
bt ax,8 ;â¥áâ¨à㥬 ⮫쪮 ah |
jnc .c_next |
push ebx ecx esi |
stdcall vox_corect_coords, [h_br], [v_obj] |
stdcall vox_go_in_node, [buf_i], [buf_z], [h_br], [v_obj] |
pop esi ecx ebx |
.c_next: |
shr ah,1 |
dec al |
jnz .cycle |
;¢ë室 ¨§ 㧫 |
inc edx |
pop ecx eax |
jmp .end_f |
.sub_trees: |
;à¨á㥬 㧥« |
push eax |
stdcall vox_get_sub_brush,[h_br],edx ;®¯à¥¤¥«ï¥¬ ª¨áâì ¤«ï à¨á®¢ ¨ï |
cmp eax,0 ;¥á«¨ ª¨áâì ¥ ©¤¥ |
je @f |
stdcall draw_vox, [buf_i], [buf_z], eax, ebx,ecx,esi, [edi] |
@@: |
pop eax |
add edi,4 |
.end_f: |
ret |
endp |
;¨§¢«¥ª ¥¬ ¨§ h_br 㪠§ â¥«ì ¡ãä¥à á ¨§®¡à ¦¥¨¥¬ ¢®ªá¥«ï, 㪠§ ®£® ¯®à浪 n |
align 4 |
proc vox_get_sub_brush uses ebx ecx, h_br:dword, n:dword |
xor eax,eax |
mov ebx,[n] |
cmp ebx,0 |
jl @f |
mov ecx,[h_br] |
cmp bl,byte[ecx+3] |
jg @f |
add ecx,4 |
imul ebx,BUF_STRUCT_SIZE |
mov eax,ebx |
add eax,ecx |
@@: |
ret |
endp |
;äãªæ¨ï ¤«ï ª®à¥ªâ¨à®¢ª¨ ª®®à¤¨ â |
; ¯à ¢«¥¨ï ®á¥© ª®®à¤¨ â ¢ ¢®ªá¥«¥: |
;*z |
;| |
;+ |
; * y |
; / |
;+ |
; \ |
; * x |
;input: |
; al - ®¬¥à 㧫 ¢ ¤¥à¥¢¥ (®â 1 ¤® 8) |
; ebx - ª®®à¤¨ â x |
; ecx - ª®®à¤¨ â y |
; esi - ª®®à¤¨ â z |
; edx - ã஢¥ì ⥪ã襣® 㧫 |
;output: |
; ebx - ®¢ ï ª®®à¤¨ â x |
; ecx - ®¢ ï ª®®à¤¨ â y |
; esi - ®¢ ï ª®®à¤¨ â z |
align 4 |
proc vox_corect_coords, h_br:dword, v_obj:dword |
locals |
osn_w_2 dd ? ;è¨à¨ ®á®¢ ¨ï ¥¤¨¨ç®£® ¢®ªá¥«ï : 2 |
vox_h dd ? ;¢ëá®â ¥¤¨¨ç®£® ¢®ªá¥«ï |
endl |
cmp edx,0 |
jl .end_f ;¤«ï ãáª®à¥¨ï ®âà¨á®¢ª¨ |
push eax edi |
and eax,15 ;¢ë¤¥«ï¥¬ ®¬¥à 㧫 ¢ ¤¥à¥¢¥ |
mov edi,[v_obj] |
add edi,vox_offs_tree_table |
add edi,8 |
sub edi,eax |
push ebx ecx |
mov ebx,[h_br] |
movzx ecx,byte[ebx] |
shr ecx,1 |
mov dword[osn_w_2],ecx |
movzx ecx,byte[ebx+2] |
movzx ebx,byte[ebx+1] |
sub ebx,ecx |
mov dword[vox_h],ebx |
shr ecx,1 |
mov eax,ecx ;eax - ¢ëá®â ®á®¢ ¨ï ¥¤¨¨ç®£® ¢®ªá¥«ï : 2 |
pop ecx ebx |
cmp edx,1 |
jl .no_scale ;¢® ¨§¡¥¦ ¨¥ § 横«¨¢ ¨ï |
push ecx |
mov ecx,edx |
shl eax,cl |
shl dword[osn_w_2],cl |
shl dword[vox_h],cl |
pop ecx |
.no_scale: |
; add esi,eax ;¬¥ï¥¬ £«ã¡¨ã ¤«ï ¡ãä¥à z (ª®¬¯¥á æ¨ï ¤«ï ª®®à¤¨ âë y) |
bt word[edi],0 ;test voxel coord x |
jnc @f |
add ebx,[osn_w_2] |
add ecx,eax |
add esi,eax ;¬¥ï¥¬ £«ã¡¨ã ¤«ï ¡ãä¥à z |
@@: |
bt word[edi],1 ;test voxel coord y |
jnc @f |
add ebx,[osn_w_2] |
sub ecx,eax |
sub esi,eax ;¬¥ï¥¬ £«ã¡¨ã ¤«ï ¡ãä¥à z |
@@: |
bt word[edi],2 ;test voxel coord z |
jnc @f |
sub ecx,[vox_h] |
@@: |
pop edi eax |
.end_f: |
ret |
endp |
; |
;x0y0 - x1y0 |
;x1y0 - x1y1 |
;x0y1 - x0y0 |
;x1y1 - x0y1 |
align 4 |
proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword |
mov ebx,[v_obj] |
add ebx,vox_offs_tree_table |
mov ecx,2 |
cld |
@@: |
mov eax,dword[ebx] |
mov byte[ebx+1],al |
mov byte[ebx+3],ah |
shr eax,16 |
mov byte[ebx],al |
mov byte[ebx+2],ah |
add ebx,4 |
loop @b |
ret |
endp |
; |
;y0z0 - y0z1 |
;y0z1 - y1z1 |
;y1z1 - y1z0 |
;y1z0 - y0z0 |
align 4 |
proc vox_obj_rot_x uses eax ebx ecx, v_obj:dword |
mov ebx,[v_obj] |
add ebx,vox_offs_tree_table |
mov eax,dword[ebx] |
mov ecx,dword[ebx+4] |
mov byte[ebx+4],al |
mov byte[ebx+5],ah |
shr eax,16 |
mov byte[ebx+0],al |
mov byte[ebx+1],ah |
mov byte[ebx+6],cl |
mov byte[ebx+7],ch |
shr ecx,16 |
mov byte[ebx+2],cl |
mov byte[ebx+3],ch |
ret |
endp |
;à¨á®¢ ¨¥ á१ ¨§®¡à ¦¥¨ï |
; v_size - à §¬¥à ª¢ ¤à â á ¢®ªá¥«¥¬ |
; k_scale - á⥯¥ì ¤¥â «¨§ 樨 ¨§®¡à ¦¥¨ï |
; n_plane - ®¬¥à ¯«®áª®á⨠á¥ç¨ï (¢ ¯à¥¤¥« å ®â 0 ¤® 2^k_scale - 1) |
; b_color - æ¢¥â £à ¨æë |
align 4 |
proc buf2d_vox_obj_draw_pl, buf_i:dword, v_obj:dword, coord_x:dword,\ |
coord_y:dword, v_size:dword, k_scale:dword, n_plane:dword, b_color:dword |
cmp [k_scale],0 |
jl .end_f |
pushad |
mov eax,[v_size] |
mov ecx,[k_scale] |
mov ebx,eax |
cmp ecx,1 |
jl @f |
shl ebx,cl |
@@: |
;ebx - ¯®«ë© à §¬¥à ¨§®¡à ¦¥¨ï |
stdcall [buf2d_rect_by_size], [buf_i], [coord_x],[coord_y],ebx,ebx, [b_color] ;à ¬ª à¨á㮪 |
add ebx,[coord_y] |
mov edx,[n_plane] |
imul edx,eax |
add edx,[coord_x] |
stdcall [buf2d_filled_rect_by_size], [buf_i], edx,ebx, eax,eax, [b_color] ;ª¢ ¤à ⨪, ¯®ª §ë¢ î騩 ®¬¥à á¥ç¥¨ï |
;à¨á®¢ ¨¥ â®ç¥ª ¤«ï á¥âª¨ |
push ecx |
mov edi,1 |
cmp ecx,1 |
jl @f |
shl edi,cl |
@@: |
dec edi |
cmp edi,1 |
jl .end_0 |
mov ecx,edi |
imul ecx,edi |
mov ebx,[coord_x] |
mov edx,[coord_y] |
add edx,eax |
xor esi,esi |
cld |
@@: |
add ebx,eax |
inc esi |
stdcall [buf2d_set_pixel], [buf_i], ebx,edx, [b_color] |
cmp esi,edi |
jl .end_1 |
;¯¥à¥å®¤ â®ç¥ª ®¢ãî áâபã |
xor esi,esi |
mov ebx,[coord_x] |
add edx,eax |
.end_1: |
loop @b |
.end_0: |
pop ecx |
;eax - à §¬¥à ®¤®£® ª¢ ¤à â |
;edi - 㪠§ ⥫ì à¨áã¥¬ë¥ ¤ ë¥ ¨§ ®¡ê¥ªâ |
mov ebx,[coord_x] |
mov edx,[coord_y] |
mov edi,[v_obj] |
add edi,vox_offs_data |
xor esi,esi |
push eax |
imul eax,[n_plane] |
stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj], eax |
popad |
.end_f: |
ret |
endp |
;input: |
; ebx - coord_x |
; edx - coord_y |
; esi - coord_z |
; ecx - ã஢¥ì ⥪ã襣® 㧫 |
; edi - 㪠§ â¥«ì ¤ ë¥ ¢®ªá¥«ì®£® ®¡ê¥ªâ |
align 4 |
proc draw_sub_vox_obj_pl, buf_i:dword, v_obj:dword, clip_z:dword,\ |
v_size:dword |
cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï |
je .sub_trees |
;¯à®à¨á®¢ª à ¬ª¨ ¥á«¨ à §¬¥à 㧫 = 1 |
cmp ecx,0 |
jne @f |
;¯à®¢¥àª £«ã¡¨ë esi |
;clip_z=n_plane*v_size |
stdcall vox_is_clip, [clip_z],[v_size] |
cmp eax,0 |
je @f |
push ecx |
mov ecx,dword[edi] |
and ecx,0xffffff |
stdcall [buf2d_rect_by_size], [buf_i], ebx,edx, [v_size],[v_size],ecx |
pop ecx |
@@: |
;४ãàá¨¢ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢ |
push edx |
;¢å®¤ ¢ãâàì 㧫 |
dec ecx |
;--- |
mov eax,[v_size] |
cmp ecx,1 |
jl @f |
shl eax,cl |
@@: |
add edx,eax ;ª®à¥ªâ¨à®¢ª ¢ëá®âë ¯®¤ ¢®ªá¥«ì ¨¦¥£® ã஢ï |
;--- |
mov ah,byte[edi+3] |
add edi,4 |
mov al,8 |
.cycle: |
bt ax,8 ;â¥áâ¨à㥬 ⮫쪮 ah |
jnc .c_next |
push eax ebx edx esi |
stdcall vox_corect_coords_pl, [v_obj],[v_size] |
stdcall draw_sub_vox_obj_pl, [buf_i],[v_obj],[clip_z],[v_size] |
pop esi edx ebx eax |
.c_next: |
shr ah,1 |
dec al |
jnz .cycle |
;¢ë室 ¨§ 㧫 |
inc ecx |
pop edx |
jmp .end_f |
.sub_trees: |
cmp ecx,0 |
jl .end_0 ;¥ à¨á㥬 ®ç¥ì ¬ «¥ìª¨¥ ¢®ªá¥«¨ |
;¯à®¢¥àª £«ã¡¨ë esi |
;clip_z=n_plane*v_size |
stdcall vox_is_clip, [clip_z],[v_size] |
cmp eax,0 |
je .end_0 |
;à¨á㥬 㧥« |
mov eax,[edi] |
and eax,0xffffff |
push eax ;梥â 㧫 |
mov eax,[v_size] |
cmp ecx,1 |
jl @f |
shl eax,cl ;à §¬¥à 㧫 |
@@: |
stdcall [buf2d_filled_rect_by_size], [buf_i], ebx,edx, eax,eax |
.end_0: |
add edi,4 |
.end_f: |
ret |
endp |
;¯à®¢¥àª £«ã¡¨ë esi |
;input: |
; ecx - ã஢¥ì ⥪ã襣® 㧫 |
; esi - coord z |
; clip_z - n_plane*v_size |
;output: |
; eax - 0 if no draw, 1 if draw |
align 4 |
proc vox_is_clip uses ebx edi, clip_z:dword, v_size:dword |
xor eax,eax |
mov ebx,[clip_z] |
mov edi,[v_size] |
cmp ecx,1 |
jl @f |
shl edi,cl |
@@: |
;edi = 2^ecx |
add edi,esi |
cmp edi,ebx ;if (esi+2^ecx*v_size <= (n_plane*v_size)) no draw |
jle @f |
add ebx,[v_size] |
cmp esi,ebx ;if (esi >= (n_plane+1)*v_size) no draw |
jge @f |
inc eax |
@@: |
ret |
endp |
;äãªæ¨ï ¤«ï ª®à¥ªâ¨à®¢ª¨ ª®®à¤¨ â |
; ¯à ¢«¥¨ï ®á¥© ª®®à¤¨ â ¢ ¢®ªá¥«¥: |
;*z |
;| |
;+-* x |
;input: |
; al - ®¬¥à 㧫 ¢ ¤¥à¥¢¥ (®â 1 ¤® 8) |
; ebx - ª®®à¤¨ â x |
; edx - ª®®à¤¨ â y |
; esi - ª®®à¤¨ â z |
; ecx - ã஢¥ì ⥪ã襣® 㧫 |
;output: |
; ebx - ®¢ ï ª®®à¤¨ â x |
; edx - ®¢ ï ª®®à¤¨ â y |
; esi - ®¢ ï ª®®à¤¨ â z |
align 4 |
proc vox_corect_coords_pl, v_obj:dword, v_size:dword |
cmp ecx,0 |
jl .end_f ;¤«ï ãáª®à¥¨ï ®âà¨á®¢ª¨ |
push eax edi |
and eax,15 ;¢ë¤¥«ï¥¬ ®¬¥à 㧫 ¢ ¤¥à¥¢¥ |
mov edi,[v_obj] |
add edi,vox_offs_tree_table |
add edi,8 |
sub edi,eax |
mov eax,[v_size] ;eax - ¢ëá®â ®á®¢ ¨ï ¥¤¨¨ç®£® ¢®ªá¥«ï |
cmp ecx,1 |
jl @f ;¢® ¨§¡¥¦ ¨¥ § 横«¨¢ ¨ï |
shl eax,cl |
@@: |
bt word[edi],0 ;test voxel coord x |
jnc @f |
add ebx,eax |
@@: |
bt word[edi],1 ;test voxel coord y |
jnc @f |
add esi,eax ;¬¥ï¥¬ £«ã¡¨ã ¤«ï ¡ãä¥à z |
@@: |
bt word[edi],2 ;test voxel coord z |
jnc @f |
sub edx,eax |
@@: |
pop edi eax |
.end_f: |
ret |
endp |
; |
;output: |
; eax - ç¨á«® 㧫®¢ ¢ ®¡ê¥ªâ¥ v_obj |
align 4 |
proc vox_obj_get_nodes uses edi, v_obj:dword |
mov edi,[v_obj] |
add edi,vox_offs_data |
xor eax,eax |
stdcall vox_obj_rec0 |
ret |
endp |
;input: |
; edi - 㪠§ â¥«ì ¤ ë¥ ¢®ªá¥«ì®£® ®¡ê¥ªâ |
;output: |
; eax - eax + ç¨á«® 㧫®¢ ¢ ¤ ëå ¢®ªá. ®¡ê¥ªâ |
; edi - 㪠§ ⥫ì ᬥé¥ë¥ ¤ ë¥ ¢®ªá. ®¡ê¥ªâ |
align 4 |
proc vox_obj_rec0 |
inc eax |
cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï |
je .sub_trees |
;४ãàá¨¢ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢ |
push ebx ecx |
mov bh,byte[edi+3] |
add edi,4 |
mov bl,8 |
.cycle: |
bt bx,8 ;â¥áâ¨à㥬 ⮫쪮 bh |
jnc .c_next |
stdcall vox_obj_rec0 |
.c_next: |
shr bh,1 |
dec bl |
jnz .cycle |
pop ecx ebx |
jmp .end_f |
.sub_trees: |
add edi,4 |
.end_f: |
ret |
endp |
; |
;output: |
; eax - à §¬¥à ¢ ¡ ©â å § ¨¬ ¥¬ë© ®¡ê¥ªâ®¬ v_obj |
align 4 |
proc buf2d_vox_obj_get_size, v_obj:dword |
stdcall vox_obj_get_nodes,[v_obj] |
shl eax,2 |
add eax,vox_offs_data |
ret |
endp |
if 0 |
;output: |
; eax - 㪠§ â¥«ì ¤ ë¥ ¢®ªá¥«ï |
align 4 |
proc buf2d_vox_obj_is_node uses ebx ecx edx edi esi, v_obj:dword,\ |
coord_x:dword,coord_y:dword,coord_z:dword,k_scale:dword |
mov edi,[v_obj] |
add edi,vox_offs_data |
mov esi,[k_scale] |
xor eax,eax |
xor edx,edx |
stdcall vox_obj_rec1, [v_obj],[coord_x],[coord_y],[coord_z], 0,0,0 |
ret |
endp |
;input: |
; eax - ... |
; edx - ... |
; edi - 㪠§ â¥«ì ¤ ë¥ ¢®ªá¥«ì®£® ®¡ê¥ªâ |
; esi - ã஢¥ì ¨áª®¬®£® ¢®ªá¥«ï |
align 4 |
proc vox_obj_rec1, v_obj:dword, coord_x:dword,coord_y:dword,coord_z, tc_x:dword,tc_y:dword,tc_z |
cmp edx,esi |
jne @f |
mov ebx,[tc_x] |
cmp [coord_x],ebx |
jne @f |
mov ebx,[tc_y] |
cmp [coord_y],ebx |
jne @f |
mov ebx,[tc_z] |
cmp [coord_z],ebx |
jne @f |
mov eax,edi |
@@: |
cmp eax,0 |
jne .end_f ;¥á«¨ 㪠§ ⥫ì 㦥 ©¤¥ |
cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï |
je .sub_trees |
inc edx |
shl dword[tc_x],1 |
shl dword[tc_y],1 |
shl dword[tc_z],1 |
;४ãàá¨¢ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢ |
mov bh,byte[edi+3] |
add edi,4 |
;mov bl,8 |
xor bl,bl |
.cycle: |
bt bx,8 ;â¥áâ¨à㥬 ⮫쪮 bh |
jnc .c_next |
push dword[tc_x] |
push dword[tc_y] |
push dword[tc_z] |
push edx |
movzx edx,bl |
add edx,[v_obj] |
add edx,vox_offs_tree_table |
bt word[edx],0 ;coord x |
jnc .end_x |
inc dword[tc_x] |
.end_x: |
bt word[edx],1 ;coord y |
jnc .end_y |
inc dword[tc_y] |
.end_y: |
bt word[edx],2 ;coord z |
jnc .end_z |
inc dword[tc_z] |
.end_z: |
pop edx |
push ebx ecx |
stdcall vox_obj_rec1, [v_obj],[coord_x],[coord_y],[coord_z], [tc_x],[tc_y],[tc_z] |
pop ecx ebx |
pop dword[tc_z] |
pop dword[tc_y] |
pop dword[tc_x] |
.c_next: |
shr bh,1 |
inc bl |
;jnz .cycle |
cmp bl,8 |
jl .cycle |
dec edx |
jmp .end_f |
.sub_trees: |
add edi,4 |
.end_f: |
ret |
endp |
end if |
; ᮧ¤ ¨¥ ¢®ªá¥«ï ¢ 3 íâ ¯ : |
; 1) ¨é¥¬ ¬¥áâ® ¢ áâàãªâãॠ¤¥à¥¢ , ªã¤ ¤® ¢áâ ¢¨âì (¥á«¨ ¢¥â¢ì áãé¥áâ¢ã¥â, 2-© íâ ¯ ¯à®¯ã᪠¥¬) |
; 2) ¢áâ ¢«ï¥¬ ®¢ãî ¢¥â¢ì á ¢®ªá¥«¥¬ (3-© íâ ¯ 㦥 ¥ ¤¥« ¥¬) |
; 3) ¬¥ï¥¬ 梥⠢®ªá¥«ï |
align 4 |
proc buf2d_vox_obj_create_node, v_obj:dword,coord_x:dword,coord_y:dword,\ |
coord_z:dword,color:dword,k_scale:dword |
pushad |
locals |
p_node dd 0 ;த¨â¥«ì᪨© 㧥« |
endl |
;stdcall print_err, txt_f1, txt_b |
mov edi,[v_obj] |
add edi,vox_offs_data |
mov esi,[k_scale] |
cmp esi,1 |
jl .change |
; *** (1) *** |
.found: |
stdcall vox_obj_get_node_position, [v_obj],[coord_x],[coord_y],[coord_z],esi |
movzx bx,byte[edi+3] |
mov [p_node],edi |
add edi,4 |
;stdcall print_err, txt_chi, txt_e |
cmp eax,0 |
je .end_1 |
mov ecx,eax |
cld |
@@: ; 横« ¤«ï ¯à®¯ã᪠¯à¥¤ë¤ãé¨å ¯®¤¤¥à¥¢ì¥¢ ¢ 㧫¥ |
bt bx,0 ;¯à®¢¥à塞 ¥áâì «¨ ¤®ç¥à¨¥ 㧫ë |
jnc .end_0 |
;stdcall print_err, txt_st, txt_e |
xor eax,eax |
stdcall vox_obj_rec0 ;¢ eax ¢ëç¨á«ï¥âáï ç¨á«® ¤®ç¥à¨å 㧫®¢, ¢ ¤ ®© ¢¥â¢¨ |
.end_0: |
shr bx,1 |
loop @b |
.end_1: |
bt bx,0 |
jnc .creat ;¥á«¨ ¯®¤¤¥à¥¢ ¥ áãé¥áâ¢ã¥â, ¯¥à¥å®¤¨¬ ª ᮧ¤ ¨î |
dec esi |
cmp esi,0 |
jg .found |
jmp .change |
; *** (2) *** |
.creat: |
mov edx,[color] ;¬¥ï¥¬ 梥â |
and edx,0xffffff ;¤«ï ¯à®ä¨« ªâ¨ª¨ |
mov ecx,esi |
stdcall vox_obj_add_nodes_mem, [v_obj],edi,ecx ;à áè¨à塞 ¬¥áâ® § ¨¬ ¥¬®¥ ®¡ê¥ªâ®¬, ¤«ï ¤®¡ ¢«¥¨ï ®¢ëå 㧫®¢ |
mov ebx,[p_node] |
cld |
@@: |
mov dword[edi],edx |
stdcall vox_obj_get_node_bit_mask, [v_obj],[coord_x],[coord_y],[coord_z],esi |
or byte[ebx+3],al |
mov ebx,edi |
add edi,4 |
dec esi |
loop @b |
jmp .end_2 |
; *** (3) *** |
.change: |
mov eax,[color] ;¬¥ï¥¬ 梥â |
mov word[edi],ax |
shr eax,16 |
mov byte[edi+2],al |
.end_2: |
popad |
ret |
endp |
; 㤠«¥¨¥ ¢®ªá¥«ï ¢ 3 íâ ¯ : |
; 1) ¨é¥¬ ¬¥áâ® ¢ áâàãªâãॠ¤¥à¥¢ , £¤¥ ¥áâì 㤠«ï¥¬ë© 㧥« (¥á«¨ ¢¥â¢ì ¥ áãé¥áâ¢ã¥â, ¢ë室¨¬ ¨§ äãªæ¨¨) |
; 2) ¢áâ ¢«ï¥¬ ®¢ãî ¢¥â¢ì á ¢®ªá¥«¥¬ |
align 4 |
proc buf2d_vox_obj_delete_node, v_obj:dword,coord_x:dword,coord_y:dword,\ |
coord_z:dword,k_scale:dword |
pushad |
locals |
p_node dd 0 ;த¨â¥«ì᪨© 㧥« |
endl |
mov edi,[v_obj] |
add edi,vox_offs_data |
mov esi,[k_scale] |
cmp esi,1 |
jl .end_2 |
; *** (1) *** |
.found: |
stdcall vox_obj_get_node_position, [v_obj],[coord_x],[coord_y],[coord_z],esi |
movzx bx,byte[edi+3] |
mov [p_node],edi |
add edi,4 |
cmp eax,0 |
je .end_1 |
mov ecx,eax |
cld |
@@: ; 横« ¤«ï ¯à®¯ã᪠¯à¥¤ë¤ãé¨å ¯®¤¤¥à¥¢ì¥¢ ¢ 㧫¥ |
bt bx,0 ;¯à®¢¥à塞 ¥áâì «¨ ¤®ç¥à¨¥ 㧫ë |
jnc .end_0 |
xor eax,eax |
stdcall vox_obj_rec0 ;¢ eax ¢ëç¨á«ï¥âáï ç¨á«® ¤®ç¥à¨å 㧫®¢, ¢ ¤ ®© ¢¥â¢¨ |
.end_0: |
shr bx,1 |
loop @b |
.end_1: |
bt bx,0 |
jnc .end_2 ;¥á«¨ ¯®¤¤¥à¥¢ ¥ áãé¥áâ¢ã¥â |
dec esi |
cmp esi,0 |
jg .found |
; *** (2) *** |
;delete |
stdcall vox_obj_del_nodes_mem, [v_obj],edi ;á㦠¥¬ ¬¥áâ® § ¨¬ ¥¬®¥ ®¡ê¥ªâ®¬, ¯à¨ 㤠«¥¨¨ 㧫 |
mov ebx,[p_node] |
stdcall vox_obj_get_node_bit_mask, [v_obj],[coord_x],[coord_y],[coord_z],esi |
xor byte[ebx+3],al |
.end_2: |
popad |
ret |
endp |
; ᤢ¨£ ¥â ã§«ë ¤«ï ¤®¡ ¢«¥¨ï ®¢ëå 㧫®¢ |
;input: |
; p_insert - ¯®§¨æ¨ï ¤«ï ¢áâ ¢ª¨ |
; count - ª®««¨ç¥á⢮ ¢áâ ¢«ï¥¬ëå 㧫®¢ |
align 4 |
proc vox_obj_add_nodes_mem uses eax ecx edi esi, v_obj:dword,p_insert:dword,count:dword |
stdcall buf2d_vox_obj_get_size,[v_obj] |
mov esi,[v_obj] |
add esi,eax ;esi - 㪠§ â¥«ì ª®¥æ ä ©« |
mov edi,[count] |
shl edi,2 |
add edi,esi ;edi - 㪠§ â¥«ì ¡ã¤ã騩 ª®¥æ ä ©« |
mov ecx,esi |
sub ecx,[p_insert] |
shr ecx,2 ;ecx - ç¨á«® 横«®¢ ¤«ï ª®¯¨à®¢ ¨ï |
sub esi,4 ;esi - 㪠§ â¥«ì ¯®á«¥¤¨© 㧥« |
sub edi,4 ;edi - 㪠§ â¥«ì ¡ã¤ã騩 ¯®á«¥¤¨© 㧥« |
std |
rep movsd ;ᤢ¨£ ¥¬ ¯ ¬ïâì |
ret |
endp |
;input: |
; p_insert - ¯®§¨æ¨ï ¤«ï ... |
align 4 |
proc vox_obj_del_nodes_mem uses eax ecx edi esi, v_obj:dword,p_insert:dword |
stdcall buf2d_vox_obj_get_size,[v_obj] |
mov ecx,eax |
mov edi,[p_insert] |
add ecx,[v_obj] |
sub ecx,edi |
xor eax,eax |
stdcall vox_obj_rec0 |
shr ecx,2 |
sub ecx,eax ;ecx - ç¨á«® 横«®¢ ¤«ï ª®¯¨à®¢ ¨ï |
shl eax,2 |
add eax,[p_insert] |
mov esi,eax |
mov edi,[p_insert] |
cld |
rep movsd ;ᤢ¨£ ¥¬ ¯ ¬ïâì |
ret |
endp |
; ®¯à¥¤¥«¥¨¥ ¯®§¨æ¨¨ 㧫 ¢ ¤¥à¥¢¥ (®â 0 ¤® 7) |
align 4 |
proc vox_obj_get_node_position uses ebx ecx edi, v_obj:dword,\ |
coord_x:dword,coord_y:dword,coord_z:dword,k_scale:dword |
mov ecx,[k_scale] |
dec ecx |
mov eax,[coord_x] |
mov ebx,[coord_y] |
mov edi,[coord_z] |
cmp ecx,1 |
jl .end_0 |
shr eax,cl |
shr ebx,cl |
shr edi,cl |
.end_0: |
and eax,1 |
bt ebx,0 |
jnc @f |
bts eax,1 |
@@: |
bt edi,0 |
jnc @f |
bts eax,2 |
@@: |
mov edi,[v_obj] |
add edi,vox_offs_tree_table |
@@: |
cmp al,byte[edi] |
je @f |
inc edi |
jmp @b |
@@: |
sub edi,[v_obj] |
sub edi,vox_offs_tree_table |
mov eax,edi |
ret |
endp |
;output: |
; eax - 1,2,4,8,16, ... ,128 |
align 4 |
proc vox_obj_get_node_bit_mask uses ebx ecx edi, v_obj:dword,\ |
coord_x:dword,coord_y:dword,coord_z:dword,k_scale:dword |
mov ecx,[k_scale] |
dec ecx |
mov eax,[coord_x] |
mov ebx,[coord_y] |
mov edi,[coord_z] |
cmp ecx,1 |
jl .end_0 |
shr eax,cl |
shr ebx,cl |
shr edi,cl |
.end_0: |
and eax,1 |
bt ebx,0 |
jnc @f |
bts eax,1 |
@@: |
bt edi,0 |
jnc @f |
bts eax,2 |
@@: |
mov ecx,[v_obj] |
add ecx,vox_offs_tree_table |
@@: |
cmp al,byte[ecx] |
je @f |
inc ecx |
jmp @b |
@@: |
mov eax,1 ;ãáâ ¢«¨¢ ¥¬ ¯¥à¢® ç «ì®¥ § 票¥ ¡¨â |
sub ecx,[v_obj] |
sub ecx,vox_offs_tree_table |
jz @f |
shl eax,cl ;ᤢ¨£ ¥¬ ¡¨â |
@@: |
ret |
endp |
align 4 |
proc buf2d_vox_obj_get_img_w_3g uses ecx, h_br:dword,k_scale:dword |
mov ecx,[h_br] |
movzx eax,byte[ecx] |
cmp dword[k_scale],1 |
jl .end_c0 |
mov ecx,[k_scale] |
shl eax,cl |
.end_c0: |
ret |
endp |
align 4 |
proc buf2d_vox_obj_get_img_h_3g uses ecx, h_br:dword,k_scale:dword |
mov ecx,[h_br] |
movzx eax,byte[ecx+1] |
cmp dword[k_scale],1 |
jl .end_c0 |
mov ecx,[k_scale] |
shl eax,cl |
.end_c0: |
ret |
endp |
;äãªæ¨ï ¤«ï à¨á®¢ ¨ï ¯ «¨âàë |
align 4 |
proc buf2d_draw_palete, buf:dword, coord_x:dword, coord_y:dword,\ |
cell_w:dword, cell_h:dword, colors_w:dword, colors:dword |
pushad |
mov ebx,[coord_x] |
mov edx,[coord_y] |
mov ecx,[colors] |
xor edi,edi |
mov esi,[cell_h] |
cld |
.cycle_0: |
stdcall get_palete_color, ecx,3 |
stdcall [buf2d_filled_rect_by_size], [buf], ebx,edx, [cell_w],esi,eax |
inc edi |
cmp edi,[colors_w] |
jl @f |
mov ebx,[coord_x] |
sub ebx,[cell_w] |
dec ebx |
add edx,esi ;¢ëá®â ï祩ª¨ |
inc edx ;®âáâ㯠¬¥¦¤ã ï祩ª ¬¨ |
xor edi,edi |
@@: |
add ebx,[cell_w] |
inc ebx |
loop .cycle_0 |
popad |
ret |
endp |
;input: |
; ¥á«¨ r = 1 â® äãªæ¨ï ¢®§¢à é ¥â 8 梥⮢, 2 - 64, 3 - 512 |
;output: |
; eax - color |
align 4 |
proc get_palete_color uses ebx ecx edx edi, ind:dword, r:dword |
mov ecx,[r] |
xor edi,edi |
inc edi |
mov ebx,[ind] |
;b = b xor (b shr 1) |
;¯à¥®¡à §ã¥¬ ¨¤¥ªá ¢ ª®¤¨à®¢ªã à¥ï ¤«ï ¯®«ãç¥¨ï ¡®«¥¥ ¯« ¢ëå 梥⮢ëå ¯¥à¥å®¤®¢ |
mov eax,ebx |
shr eax,1 |
xor ebx,eax |
mov edx,ebx |
shr edx,cl |
mov eax,edx |
shr eax,cl |
mov ch,8 |
sub ch,cl |
shr ecx,8 |
shl ebx,cl |
shl edx,cl |
shl eax,cl |
shl edi,cl |
dec edi ;edi - 1...1b |
or ebx,edi |
or edx,edi |
or eax,edi |
shl eax,8 |
mov al,dl |
shl eax,8 |
mov al,bl |
and eax,0xffffff |
ret |
endp |
if 0 |
txt_f1 db 13,10,'f1',0 |
txt_chi db ' chi',0 |
txt_st db ' st',0 |
txt_b db 'beg' |
txt_e db 13,10,0 |
align 4 |
proc print_err, fun:dword, mes:dword ;¢ë¢®¤¨¬ á®®¡é¥¨¥ ®¡ 訡ª¥ ¤®áªã ®â« ¤ª¨ |
pushad |
mov eax,63 |
mov ebx,1 |
mov esi,[fun] |
@@: |
mov cl,byte[esi] |
int 0x40 |
inc esi |
cmp byte[esi],0 |
jne @b |
mov cl,':' |
int 0x40 |
mov cl,' ' |
int 0x40 |
mov esi,[mes] |
@@: |
mov cl,byte[esi] |
int 0x40 |
inc esi |
cmp byte[esi],0 |
jne @b |
popad |
ret |
endp |
end if |
/programs/media/voxel_editor/trunk/voxel_editor.asm |
---|
0,0 → 1,1114 |
use32 |
org 0x0 |
db 'MENUET01' ;¨¤¥â¨ä. ¨á¯®«ï¥¬®£® ä ©« ¢á¥£¤ 8 ¡ ©â |
dd 0x1 |
dd start |
dd i_end ;à §¬¥à ¯à¨«®¦¥¨ï |
dd mem |
dd stacktop |
dd 0 |
dd sys_path |
include 'd:/kolibri/svn/programs/macros.inc' |
include 'd:/kolibri/svn/programs/proc32.inc' |
include 'd:/kolibri/svn/programs/develop/libraries/box_lib/load_lib.mac' |
include 'mem.inc' |
include 'dll.inc' |
include 'vox_draw.inc' |
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load |
caption db 'Voxel editor 5.06.12',0 ;¯®¤¯¨áì ®ª |
struct FileInfoBlock |
Function dd ? |
Position dd ? |
Flags dd ? |
Count dd ? |
Buffer dd ? |
db ? |
FileName dd ? |
ends |
run_file_70 FileInfoBlock |
image_data dd 0 ;㪠§ â¥«ì ¢à¥¬¥ãî ¯ ¬ïâì. ¤«ï 㦥 ¯à¥®¡à §®¢ ¨ï ¨§®¡à ¦¥¨ï |
fn_toolbar db 'toolbar.png',0 |
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 |
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*14 |
image_data_toolbar dd 0 |
max_open_file_size equ 64*1024 ;64 Kb |
macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥¨© |
;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬ |
if path eqtype '' ;¯à®¢¥à塞 § ¤ «¨ áâப®© ¯ à ¬¥âà path |
jmp @f |
local .path_str |
.path_str db path ;ä®à¬¨à㥬 «®ª «ìãî ¯¥à¥¬¥ãî |
db 0 |
@@: |
;32 - áâ ¤ àâë© ¤à¥á ¯® ª®â®à®¬ã ¤®«¦¥ ¡ëâì ¡ãä¥à á á¨áâ¥¬ë¬ ¯ã⥬ |
copy_path .path_str,[32],file_name,0x0 |
else |
copy_path path,[32],file_name,0x0 ;ä®à¬¨à㥬 ¯®«ë© ¯ãâì ª ä ©«ã ¨§®¡à ¦¥¨ï, ¯®¤à §ã¬¥¢ ¥¬ çâ® ® ¢ ®¤®© ¯ ¯ª¥ á ¯à®£à ¬¬®© |
end if |
stdcall mem.Alloc, dword size ;¢ë¤¥«ï¥¬ ¯ ¬ïâì ¤«ï ¨§®¡à ¦¥¨ï |
mov [buf],eax |
mov eax,70 ;70-ï äãªæ¨ï à ¡®â á ä ©« ¬¨ |
mov [run_file_70.Function], 0 |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov [run_file_70.Count], dword size |
m2m [run_file_70.Buffer], [buf] |
mov byte[run_file_70+20], 0 |
mov [run_file_70.FileName], file_name |
mov ebx,run_file_70 |
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
cmp ebx,0xffffffff |
je @f |
;®¯à¥¤¥«ï¥¬ ¢¨¤ ¨§®¡à ¦¥¨ï ¨ ¯¥à¥¢®¤¨¬ ¥£® ¢® ¢à¥¬¥ë© ¡ãä¥à image_data |
stdcall dword[img_decode], dword[buf],ebx,0 |
mov dword[image_data],eax |
;¯à¥®¡à §ã¥¬ ¨§®¡à ¦¥¨¥ ª ä®à¬ âã rgb |
stdcall dword[img_to_rgb2], dword[image_data],dword[buf] |
;㤠«ï¥¬ ¢à¥¬¥ë© ¡ãä¥à image_data |
stdcall dword[img_destroy], dword[image_data] |
@@: |
} |
OT_MAP_X equ 0 |
OT_MAP_Y equ 0 |
TILE_SIZE equ 10 |
align 4 |
start: |
load_libraries l_libs_start,l_libs_end |
;¯à®¢¥àª ᪮«ìª® ã¤ ç® § £ã§¨« áì ¡¨¡«¨®â¥ª |
mov ebp,lib_2 |
cmp dword [ebp+ll_struc_size-4],0 |
jz @f |
mcall -1 ;exit not correct |
@@: |
mcall 48,3,sc,sizeof.system_colors |
mcall 40,0x27 |
stdcall [OpenDialog_Init],OpenDialog_data ;¯®¤£®â®¢ª ¤¨ «®£ |
stdcall [buf2d_create], buf_0 ;ᮧ¤ ¨¥ ¡ãä¥à ¨§®¡à ¦¥¨ï |
stdcall [buf2d_create], buf_0z ;ᮧ¤ ¨¥ ¡ãä¥à £«ã¡¨ë |
stdcall [buf2d_create], buf_pl ;ᮧ¤ ¨¥ ¡ãä¥à ¤«ï á¥ç¥¨ï |
stdcall [buf2d_vox_brush_create], buf_vox, vox_6_7_z |
load_image_file fn_toolbar, image_data_toolbar,IMAGE_TOOLBAR_SIZE |
stdcall mem.Alloc,max_open_file_size |
mov dword[open_file_vox],eax |
call but_new_file |
align 4 |
red_win: |
call draw_window |
align 4 |
still: |
mcall 10 |
cmp al,1 |
jz red_win |
cmp al,2 |
jz key |
cmp al,3 |
jz button |
cmp al,6 |
jne @f |
mcall 9,procinfo,-1 |
cmp ax,word[procinfo+4] |
jne @f ;®ª® ¥ ªâ¨¢® |
call mouse |
@@: |
jmp still |
align 4 |
mouse: |
pushad |
mcall 37,2 |
bt eax,0 ;left button |
jnc .end_f |
mcall 37,1 ;get mouse coords |
mov ebx,eax |
and eax,0xffff |
cmp dword[v_pen_mode],2 ;select color |
jne .end_2 |
stdcall get_buf_color, buf_0 |
stdcall get_buf_color, buf_pl |
jmp .end_f |
.end_2: |
movzx edx,word[buf_pl.t] |
add edx,OT_MAP_Y |
cmp eax,edx |
jl .end_f |
sub eax,edx |
xor edx,edx |
mov ecx,TILE_SIZE ;H |
div ecx |
shr ebx,16 |
movzx edx,word[buf_pl.l] |
add edx,OT_MAP_X |
cmp ebx,edx |
jl .end_f |
call convert_y ;¯à¥®¡à §®¢ ¨¥ ª®®à¤¨ âë y |
cmp eax,0 |
jge .end_0 ;®£à ¨ç¥¨¥ ¯® ¨¦¥© ª®®à¤¨ ⥠y |
cmp eax,-1 |
jne .end_f |
;¬¥ï¥¬ á¥ç¥¨¥, ¯®¯ «¨ ª¢ ¤à ⨪ |
sub ebx,edx |
mov eax,ebx |
xor edx,edx |
mov ecx,TILE_SIZE ;W |
div ecx |
mov [n_plane],eax |
jmp .end_1 |
.end_0: |
mov [v_cur_y],eax ;Y-coord |
sub ebx,edx |
mov eax,ebx |
xor edx,edx |
mov ecx,TILE_SIZE ;W |
div ecx |
mov [v_cur_x],eax ;X-coord |
cmp dword[v_pen_mode],0 |
jne @f |
stdcall buf2d_vox_obj_delete_node, [open_file_vox], [v_cur_x],[n_plane],[v_cur_y], [v_zoom] |
@@: |
cmp dword[v_pen_mode],1 |
jne .end_1 |
stdcall buf2d_vox_obj_create_node, [open_file_vox], [v_cur_x],[n_plane],[v_cur_y], [v_color], [v_zoom] |
.end_1: |
call draw_objects |
call draw_pok |
.end_f: |
popad |
ret |
align 4 |
proc get_buf_color uses eax ebx edi, buf:dword |
mov edi,[buf] |
cmp ax,buf2d_t |
jl .end_f |
sub ax,buf2d_t |
cmp eax,buf2d_h |
jg .end_f |
shr ebx,16 |
cmp bx,buf2d_l |
jl .end_f |
sub bx,buf2d_l |
cmp ebx,buf2d_w |
jg .end_f |
stdcall [buf2d_get_pixel], edi,ebx,eax |
mov [v_color],eax |
stdcall [buf2d_filled_rect_by_size], buf_0, 5,3, 8,8,eax |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
.end_f: |
ret |
endp |
;¯à¥®¡à §®¢ë¢ ¥¬ ª®®à¤¨ âã y (§ 票¥ ¤®«¦® 㢥«¨ç¨¢ âìáï á ¨§ã ¢¢¥àå) |
align 4 |
convert_y: |
push ecx edx |
mov ecx,[v_zoom] |
mov edx,1 |
cmp ecx,1 |
jl .end_0 |
cld |
@@: |
shl edx,1 |
loop @b |
.end_0: |
sub edx,eax |
dec edx |
mov eax,edx |
pop edx ecx |
ret |
align 4 |
draw_window: |
pushad |
mcall 12,1 |
; *** à¨á®¢ ¨¥ £« ¢®£® ®ª (¢ë¯®«ï¥âáï 1 à § ¯à¨ § ¯ã᪥) *** |
xor eax,eax |
mov ebx,(20 shl 16)+540 |
mov ecx,(20 shl 16)+415 |
mov edx,[sc.work] |
or edx,(3 shl 24)+0x30000000 |
mov edi,caption |
int 0x40 |
; *** ᮧ¤ ¨¥ ª®¯®ª ¯ ¥«ì *** |
mov eax,8 |
mov ebx,(5 shl 16)+20 |
mov ecx,(5 shl 16)+20 |
mov edx,3 |
mov esi,[sc.work_button] |
int 0x40 |
mov ebx,(30 shl 16)+20 |
mov edx,4 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,5 |
int 0x40 |
add ebx,30 shl 16 |
mov edx,6 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,7 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,8 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,9 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,10 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,11 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,12 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,13 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,14 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,15 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,16 |
int 0x40 |
; *** à¨á®¢ ¨¥ ¨ª®®ª ª®¯ª å *** |
mov eax,7 |
mov ebx,[image_data_toolbar] |
mov ecx,(16 shl 16)+16 |
mov edx,(7 shl 16)+7 ;icon new |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ;icon open |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ;icon save |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(30 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ; |
int 0x40 |
; *** à¨á®¢ ¨¥ ¡ãä¥à®¢ *** |
call draw_objects |
call draw_pok |
mcall 12,2 |
popad |
ret |
align 4 |
draw_pok: |
mov eax,4 ;à¨á®¢ ¨¥ ⥪áâ |
mov ebx,(365 shl 16)+5 |
mov ecx,[sc.work_text] |
or ecx,0x80000000 ;or (1 shl 30) |
mov edx,txt_zoom |
;mov edi,[sc.work] |
int 0x40 |
add bx,9 |
mov edx,txt_cur_x |
int 0x40 |
add bx,9 |
mov edx,txt_cur_y |
int 0x40 |
add bx,9 |
mov edx,txt_n_plane |
int 0x40 |
mov eax,47 |
mov ecx,[v_zoom] |
mov ebx,(2 shl 16) |
mov edx,((365+6*9) shl 16)+5 |
mov esi,[sc.work_button_text] |
or esi,(1 shl 30) |
mov edi,[sc.work_button] |
int 0x40 ;¬ áèâ ¡ |
mov ebx,(5 shl 16) |
mov ecx,[v_cur_x] |
add edx,(6*2)*65536+9 |
int 0x40 ; |
mov ebx,(5 shl 16) |
mov ecx,[v_cur_y] |
add edx,(6*0)*65536+9 |
int 0x40 ; |
mov ebx,(5 shl 16) |
mov ecx,[n_plane] |
add edx,(6*0)*65536+9 |
int 0x40 ; |
ret |
align 4 |
key: |
mcall 2 |
jmp still |
align 4 |
button: |
mcall 17 |
cmp ah,3 |
jne @f |
call but_new_file |
call draw_objects |
call draw_pok |
@@: |
cmp ah,4 |
jne @f |
call but_open_file |
@@: |
cmp ah,5 |
jne @f |
call but_save_file |
@@: |
cmp ah,6 |
jne @f |
call but_1 |
@@: |
cmp ah,7 |
jne @f |
call but_2 |
@@: |
cmp ah,8 |
jne @f |
call but_3 |
@@: |
cmp ah,9 |
jne @f |
call but_4 |
@@: |
cmp ah,10 |
jne @f |
call but_5 |
@@: |
cmp ah,11 |
jne @f |
call but_6 |
@@: |
cmp ah,12 |
jne @f |
call but_7 |
@@: |
cmp ah,13 |
jne @f |
call but_8 |
@@: |
cmp ah,14 |
jne @f |
mov dword[v_pen_mode],2 ;select color |
call draw_palete |
@@: |
cmp ah,15 |
jne @f |
call but_light |
@@: |
cmp ah,16 |
jne @f |
call but_rend_2_2 |
@@: |
cmp ah,1 |
jne still |
.exit: |
stdcall [buf2d_delete],buf_0 |
stdcall [buf2d_delete],buf_0z |
cmp dword[buf_r_img],0 |
je @f |
stdcall [buf2d_delete],buf_r_img |
stdcall [buf2d_delete],buf_r_z |
@@: |
stdcall [buf2d_vox_brush_delete], buf_vox |
stdcall mem.Free,[image_data_toolbar] |
stdcall mem.Free,[open_file_vox] |
mcall -1 |
align 4 |
vox_new_data: |
db 2,0,0,0 |
db 000b,001b,010b,011b, 100b,101b,110b,111b ;default table |
dd 0 ;null node |
align 4 |
proc but_new_file uses ecx edi esi |
mov ecx,vox_offs_data+4 |
mov esi,vox_new_data |
mov edi,[open_file_vox] |
cld |
rep movsb |
ret |
endp |
align 4 |
open_file_vox dd 0 ;㪠§ â¥«ì ®¡« áâì ¤«ï ®âªàëâ¨ï ä ©«®¢ |
align 4 |
but_open_file: |
pushad |
copy_path open_dialog_name,communication_area_default_path,file_name,0 |
mov [OpenDialog_data.type],0 |
stdcall [OpenDialog_Start],OpenDialog_data |
cmp [OpenDialog_data.status],2 |
je .end_open_file |
;ª®¤ ¯à¨ 㤠箬 ®âªàë⨨ ¤¨ «®£ |
mov eax,70 ;70-ï äãªæ¨ï à ¡®â á ä ©« ¬¨ |
mov [run_file_70.Function], 0 |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov dword[run_file_70.Count], max_open_file_size |
m2m [run_file_70.Buffer], [open_file_vox] |
mov byte[run_file_70+20], 0 |
mov dword[run_file_70.FileName], openfile_path |
mov ebx,run_file_70 |
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
cmp ebx,0xffffffff |
je .end_open_file |
add ebx,[open_file_vox] |
mov byte[ebx],0 ; á«ãç © ¥á«¨ à ¥¥ ¡ë« ®âªàëâ ä ©« ¡®«ì襣® à §¬¥à ç¨á⨬ ª®¥æ ¡ãä¥à á ä ©«®¬ |
mcall 71,1,openfile_path |
;--- |
; |
mov eax,[open_file_vox] |
movzx eax,byte[eax] |
and eax,0xff ;¡¥à¥¬ ¬ áèâ ¡ ¯® 㬮«ç ¨î |
mov dword[v_zoom],eax ;¡¥à¥¬ ¬ áèâ ¡ ¯® 㬮«ç ¨î |
call draw_objects |
.end_open_file: |
popad |
ret |
align 4 |
but_save_file: |
pushad |
copy_path open_dialog_name,communication_area_default_path,file_name,0 |
mov [OpenDialog_data.type],1 |
stdcall [OpenDialog_Start],OpenDialog_data |
cmp [OpenDialog_data.status],2 |
je .end_save_file |
;ª®¤ ¯à¨ 㤠箬 ®âªàë⨨ ¤¨ «®£ |
mov eax,dword[v_zoom] ;§ ¤ ¥¬ ¬ áèâ ¡ ¯® 㬮«ç ¨î |
mov ebx,[open_file_vox] |
mov byte[ebx],al |
stdcall buf2d_vox_obj_get_size, ebx |
mov dword[run_file_70.Count], eax ;à §¬¥à ä ©« |
mov eax,70 ;70-ï äãªæ¨ï à ¡®â á ä ©« ¬¨ |
mov [run_file_70.Function], 2 |
mov [run_file_70.Position], 0 |
mov [run_file_70.Flags], 0 |
mov ebx, dword[open_file_vox] |
mov [run_file_70.Buffer], ebx |
mov byte[run_file_70+20], 0 |
mov dword[run_file_70.FileName], openfile_path |
mov ebx,run_file_70 |
int 0x40 ;§ £à㦠¥¬ ä ©« ¨§®¡à ¦¥¨ï |
cmp ebx,0xffffffff |
je .end_save_file |
.end_save_file: |
popad |
ret |
align 4 |
but_1: |
cmp dword[v_zoom],7 |
jge @f |
inc dword[v_zoom] |
shl dword[n_plane],1 |
call draw_objects |
call draw_pok |
@@: |
ret |
align 4 |
but_2: |
cmp dword[v_zoom],-1 |
jl @f |
dec dword[v_zoom] |
shr dword[n_plane],1 |
call draw_objects |
call draw_pok |
@@: |
ret |
align 4 |
but_3: |
stdcall vox_obj_rot_z, [open_file_vox] |
call draw_objects |
ret |
align 4 |
but_4: |
stdcall vox_obj_rot_x, [open_file_vox] |
call draw_objects |
ret |
align 4 |
but_5: |
inc dword[n_plane] |
call draw_objects |
call draw_pok |
ret |
align 4 |
but_6: |
cmp dword[n_plane],0 |
jle @f |
dec dword[n_plane] |
call draw_objects |
call draw_pok |
@@: |
ret |
align 4 |
but_7: |
push eax |
mov eax,dword[v_pen_mode] |
mov dword[v_pen_mode],1 ;draw |
cmp eax,2 |
jne @f |
call draw_objects |
@@: |
pop eax |
ret |
align 4 |
but_8: |
push eax |
mov eax,dword[v_pen_mode] |
mov dword[v_pen_mode],0 ;clear |
cmp eax,2 |
jne @f |
call draw_objects |
@@: |
pop eax |
ret |
align 4 |
but_light: |
xor dword[mode_light],1 |
call draw_objects |
ret |
align 4 |
but_rend_2_2: |
push edi |
cmp dword[buf_r_img],0 |
jne @f |
;ᮧ¤ ¨¥ ¡ãä¥à ¤«ï ।¥à |
push ecx esi |
mov edi,buf_r_img |
mov esi,buf_0 |
mov ecx,BUF_STRUCT_SIZE |
cld |
rep movsb ;ª®¯¨à㥬 ¢á¥ ¯ à ¬¥âàë á ®á®¢®£® ¡ãä¥à |
mov edi,buf_r_img |
mov buf2d_data,0 |
shl buf2d_w,1 ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¡ãä¥à |
shl buf2d_h,1 |
stdcall [buf2d_create],buf_r_img |
mov edi,buf_r_z |
mov esi,buf_0z |
mov ecx,BUF_STRUCT_SIZE |
cld |
rep movsb ;ª®¯¨à㥬 ¢á¥ ¯ à ¬¥âàë á ®á®¢®£® ¡ãä¥à |
mov edi,buf_r_z |
mov buf2d_data,0 |
shl buf2d_w,1 ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¡ãä¥à |
shl buf2d_h,1 |
stdcall [buf2d_create],buf_r_z |
pop esi ecx |
@@: |
stdcall [buf2d_clear], buf_r_img, [buf_0.color] ;ç¨á⨬ ¡ãä¥à |
stdcall [buf2d_clear], buf_r_z, 0 ;ç¨á⨬ ¡ãä¥à |
push eax ebx ecx |
mov eax,[v_zoom] |
inc eax |
stdcall buf2d_vox_obj_draw_3g, buf_r_img, buf_r_z, buf_vox, [open_file_vox], 0,0, 0, eax |
bt dword[mode_light],0 |
jnc @f |
stdcall buf2d_vox_obj_draw_3g_shadows, buf_r_img, buf_r_z, buf_vox, 0,0, 0, eax, 3 |
@@: |
mov edi,buf_r_img |
stdcall [buf2d_img_hdiv2], edi |
shr buf2d_h,1 |
stdcall [buf2d_img_wdiv2], edi |
shr buf2d_w,1 |
stdcall buf2d_vox_obj_get_img_w_3g, buf_vox,[v_zoom] |
mov ebx,[buf_0.w] |
sub ebx,eax |
shr ebx,1 ;ebx - ¤«ï æ¥â஢ª¨ ¬ «¥ìª¨å ¨§®¡à ¦¥¨© ¯® £®à¨§®â «¨ |
stdcall buf2d_vox_obj_get_img_h_3g, buf_vox,[v_zoom] |
cmp eax,[buf_0.h] |
jg @f |
mov ecx,[buf_0.h] |
sub ecx,eax |
shr ecx,1 ;ecx - ¤«ï æ¥â஢ª¨ ¬ «¥ìª¨å ¨§®¡à ¦¥¨© ¯® |
@@: |
stdcall [buf2d_bit_blt], buf_0, ebx,ecx, edi |
shl buf2d_h,1 |
shl buf2d_w,1 |
pop ecx ebx eax |
pop edi |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
ret |
align 4 |
draw_palete: |
stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à |
stdcall [buf2d_filled_rect_by_size], buf_0, 5,3, 8,8,[v_color] |
stdcall buf2d_draw_palete, buf_0, 5,14, 9,6, 18, 512 |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
ret |
v_zoom dd 2 ;⥪ã騩 ¬ áèâ ¡ |
v_cur_x dd 0 ;ª®®à¤¨ â ªãàá®à x |
v_cur_y dd 0 ;ª®®à¤¨ â ªãàá®à y (® ®áì ¢ ®¡ê¥ªâ¥ z) |
n_plane dd 0 ;¯«®áª®áâì á¥ç¥¨ï |
v_color dd 0xff ;梥⠪ à ¤ è |
v_pen_mode dd 1 ;०¨¬: 0-áâ¨à ¨ï, 1-à¨á®¢ ¨ï |
mode_light dd 1 ;०¨¬ ®á¢¥é¥¨ï |
txt_zoom db ' áèâ ¡:',0 |
txt_cur_x db 'x:',0 |
txt_cur_y db 'y:',0 |
txt_n_plane db '¥ç¥¨¥:',0 |
align 4 |
draw_objects: |
stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à |
stdcall [buf2d_clear], buf_0z, 0 ;ç¨á⨬ ¡ãä¥à |
stdcall [buf2d_clear], buf_pl, [buf_pl.color] ;ç¨á⨬ ¡ãä¥à |
cmp dword[v_pen_mode],2 |
jne @f |
call draw_palete |
jmp .end_f |
@@: |
push eax ebx ecx |
stdcall buf2d_vox_obj_get_img_w_3g, buf_vox,[v_zoom] |
mov ebx,[buf_0.w] |
sub ebx,eax |
shr ebx,1 ;ebx - ¤«ï æ¥â஢ª¨ ¬ «¥ìª¨å ¨§®¡à ¦¥¨© ¯® £®à¨§®â «¨ |
xor ecx,ecx |
stdcall buf2d_vox_obj_get_img_h_3g, buf_vox,[v_zoom] |
cmp eax,[buf_0.h] |
jg @f |
mov ecx,[buf_0.h] |
sub ecx,eax |
shr ecx,1 ;ecx - ¤«ï æ¥â஢ª¨ ¬ «¥ìª¨å ¨§®¡à ¦¥¨© ¯® |
@@: |
stdcall buf2d_vox_obj_draw_3g, buf_0, buf_0z, buf_vox, [open_file_vox], ebx,ecx, 0, [v_zoom] |
bt dword[mode_light],0 |
jnc @f |
stdcall buf2d_vox_obj_draw_3g_shadows, buf_0, buf_0z, buf_vox, ebx,ecx, 0, [v_zoom], 3 |
@@: |
pop ecx ebx eax |
.end_0: |
stdcall buf2d_vox_obj_draw_pl, buf_pl, [open_file_vox], OT_MAP_X,OT_MAP_Y,TILE_SIZE, [v_zoom], [n_plane], 0xd0d0d0 |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
.end_f: |
ret |
if 0 |
;input: |
; buf - 㪠§ ⥫ì áâபã, ç¨á«® ¤®«¦® ¡ëâì ¢ 10 ¨«¨ 16 à¨ç®¬ ¢¨¤¥ |
;output: |
; eax - ç¨á«® |
align 4 |
proc conv_str_to_int, buf:dword |
xor eax,eax |
push ebx ecx esi |
xor ebx,ebx |
mov esi,[buf] |
;®¯à¥¤¥«¥¨¥ ®âà¨æ ⥫ìëå ç¨á¥« |
xor ecx,ecx |
inc ecx |
cmp byte[esi],'-' |
jne @f |
dec ecx |
inc esi |
@@: |
cmp word[esi],'0x' |
je .load_digit_16 |
.load_digit_10: ;áç¨âë¢ ¨¥ 10-â¨çëå æ¨äà |
mov bl,byte[esi] |
cmp bl,'0' |
jl @f |
cmp bl,'9' |
jg @f |
sub bl,'0' |
imul eax,10 |
add eax,ebx |
inc esi |
jmp .load_digit_10 |
jmp @f |
.load_digit_16: ;áç¨âë¢ ¨¥ 16-à¨çëå æ¨äà |
add esi,2 |
.cycle_16: |
mov bl,byte[esi] |
cmp bl,'0' |
jl @f |
cmp bl,'f' |
jg @f |
cmp bl,'9' |
jle .us1 |
cmp bl,'A' |
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'9' ¨ <'A' |
.us1: ;á®áâ ¢®¥ ãá«®¢¨¥ |
cmp bl,'F' |
jle .us2 |
cmp bl,'a' |
jl @f ;®âᥨ¢ ¥¬ ᨬ¢®«ë >'F' ¨ <'a' |
sub bl,32 ;¯¥à¥¢®¤¨¬ ᨬ¢®«ë ¢ ¢¥à娩 ॣ¨áâà, ¤«ï ã¯à®é¥¨ï ¨å ¯®á«¥¤ã饩 ®¡à ¡®âª¨ |
.us2: ;á®áâ ¢®¥ ãá«®¢¨¥ |
sub bl,'0' |
cmp bl,9 |
jle .cor1 |
sub bl,7 ;convert 'A' to '10' |
.cor1: |
shl eax,4 |
add eax,ebx |
inc esi |
jmp .cycle_16 |
@@: |
cmp ecx,0 ;¥á«¨ ç¨á«® ®âà¨æ ⥫쮥 |
jne @f |
sub ecx,eax |
mov eax,ecx |
@@: |
pop esi ecx ebx |
ret |
endp |
end if |
;¤ ë¥ ¤«ï ¤¨ «®£ ®âªàëâ¨ï ä ©«®¢ |
align 4 |
OpenDialog_data: |
.type dd 0 ;0 - ®âªàëâì, 1 - á®åà ¨âì, 2 - ¢ë¡à âì ¤â४â®à¨î |
.procinfo dd procinfo ;+4 |
.com_area_name dd communication_area_name ;+8 |
.com_area dd 0 ;+12 |
.opendir_path dd plugin_path ;+16 |
.dir_default_path dd default_dir ;+20 |
.start_path dd file_name ;+24 ¯ãâì ª ¤¨ «®£ã ®âªàëâ¨ï ä ©«®¢ |
.draw_window dd draw_window ;+28 |
.status dd 0 ;+32 |
.openfile_path dd openfile_path ;+36 ¯ãâì ª ®âªàë¢ ¥¬®¬ã ä ©«ã |
.filename_area dd filename_area ;+40 |
.filter_area dd Filter |
.x: |
.x_size dw 420 ;+48 ; Window X size |
.x_start dw 10 ;+50 ; Window X position |
.y: |
.y_size dw 320 ;+52 ; Window y size |
.y_start dw 10 ;+54 ; Window Y position |
default_dir db '/rd/1',0 |
communication_area_name: |
db 'FFFFFFFF_open_dialog',0 |
open_dialog_name: |
db 'opendial',0 |
communication_area_default_path: |
db '/rd/1/File managers/',0 |
Filter: |
dd Filter.end - Filter ;.1 |
.1: |
db 'VOX',0 |
.end: |
db 0 |
head_f_i: |
head_f_l db '¨á⥬ ï ®è¨¡ª ',0 |
system_dir_0 db '/sys/lib/' |
lib_name_0 db 'proc_lib.obj',0 |
err_message_found_lib_0 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'proc_lib.obj',39,0 |
err_message_import_0 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'proc_lib.obj',39,0 |
system_dir_1 db '/sys/lib/' |
lib_name_1 db 'libimg.obj',0 |
err_message_found_lib_1 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'libimg.obj',39,0 |
err_message_import_1 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'libimg.obj',39,0 |
system_dir_2 db '/sys/lib/' |
lib_name_2 db 'buf2d.obj',0 |
err_msg_found_lib_2 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'buf2d.obj',39,0 |
err_msg_import_2 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'buf2d',39,0 |
l_libs_start: |
lib0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\ |
err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i |
lib1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\ |
err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i |
lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\ |
err_msg_found_lib_2,head_f_l,import_buf2d,err_msg_import_2,head_f_i |
l_libs_end: |
align 4 |
import_libimg: |
dd alib_init1 |
img_is_img dd aimg_is_img |
img_info dd aimg_info |
img_from_file dd aimg_from_file |
img_to_file dd aimg_to_file |
img_from_rgb dd aimg_from_rgb |
img_to_rgb dd aimg_to_rgb |
img_to_rgb2 dd aimg_to_rgb2 |
img_decode dd aimg_decode |
img_encode dd aimg_encode |
img_create dd aimg_create |
img_destroy dd aimg_destroy |
img_destroy_layer dd aimg_destroy_layer |
img_count dd aimg_count |
img_lock_bits dd aimg_lock_bits |
img_unlock_bits dd aimg_unlock_bits |
img_flip dd aimg_flip |
img_flip_layer dd aimg_flip_layer |
img_rotate dd aimg_rotate |
img_rotate_layer dd aimg_rotate_layer |
img_draw dd aimg_draw |
dd 0,0 |
alib_init1 db 'lib_init',0 |
aimg_is_img db 'img_is_img',0 ;®¯à¥¤¥«ï¥â ¯® ¤ ë¬, ¬®¦¥â «¨ ¡¨¡«¨®â¥ª ᤥ« âì ¨§ ¨å ¨§®¡à ¦¥¨¥ |
aimg_info db 'img_info',0 |
aimg_from_file db 'img_from_file',0 |
aimg_to_file db 'img_to_file',0 |
aimg_from_rgb db 'img_from_rgb',0 |
aimg_to_rgb db 'img_to_rgb',0 ;¯à¥®¡à §®¢ ¨¥ ¨§®¡à ¦¥¨ï ¢ ¤ ë¥ RGB |
aimg_to_rgb2 db 'img_to_rgb2',0 |
aimg_decode db 'img_decode',0 ; ¢â®¬ â¨ç¥áª¨ ®¯à¥¤¥«ï¥â ä®à¬ â £à ä¨ç¥áª¨å ¤ ëå |
aimg_encode db 'img_encode',0 |
aimg_create db 'img_create',0 |
aimg_destroy db 'img_destroy',0 |
aimg_destroy_layer db 'img_destroy_layer',0 |
aimg_count db 'img_count',0 |
aimg_lock_bits db 'img_lock_bits',0 |
aimg_unlock_bits db 'img_unlock_bits',0 |
aimg_flip db 'img_flip',0 |
aimg_flip_layer db 'img_flip_layer',0 |
aimg_rotate db 'img_rotate',0 |
aimg_rotate_layer db 'img_rotate_layer',0 |
aimg_draw db 'img_draw',0 |
align 4 |
proclib_import: ;®¯¨á ¨¥ íªá¯®àâ¨à㥬ëå äãªæ¨© |
OpenDialog_Init dd aOpenDialog_Init |
OpenDialog_Start dd aOpenDialog_Start |
dd 0,0 |
aOpenDialog_Init db 'OpenDialog_init',0 |
aOpenDialog_Start db 'OpenDialog_start',0 |
align 4 |
import_buf2d: |
init dd sz_init |
buf2d_create dd sz_buf2d_create |
buf2d_create_f_img dd sz_buf2d_create_f_img |
buf2d_clear dd sz_buf2d_clear |
buf2d_draw dd sz_buf2d_draw |
buf2d_delete dd sz_buf2d_delete |
buf2d_line dd sz_buf2d_line |
buf2d_rect_by_size dd sz_buf2d_rect_by_size |
buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size |
buf2d_circle dd sz_buf2d_circle |
buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 |
buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 |
buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 |
buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 |
buf2d_bit_blt dd sz_buf2d_bit_blt |
buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp |
buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha |
buf2d_curve_bezier dd sz_buf2d_curve_bezier |
buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix |
buf2d_draw_text dd sz_buf2d_draw_text |
buf2d_crop_color dd sz_buf2d_crop_color |
buf2d_offset_h dd sz_buf2d_offset_h |
buf2d_flood_fill dd sz_buf2d_flood_fill |
buf2d_set_pixel dd sz_buf2d_set_pixel |
buf2d_get_pixel dd sz_buf2d_get_pixel |
buf2d_vox_brush_create dd sz_buf2d_vox_brush_create |
buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete |
dd 0,0 |
sz_init db 'lib_init',0 |
sz_buf2d_create db 'buf2d_create',0 |
sz_buf2d_create_f_img db 'buf2d_create_f_img',0 |
sz_buf2d_clear db 'buf2d_clear',0 |
sz_buf2d_draw db 'buf2d_draw',0 |
sz_buf2d_delete db 'buf2d_delete',0 |
sz_buf2d_line db 'buf2d_line',0 |
sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 |
sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 |
sz_buf2d_circle db 'buf2d_circle',0 |
sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 |
sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 |
sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 |
sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 |
sz_buf2d_bit_blt db 'buf2d_bit_blt',0 |
sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 |
sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 |
sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 |
sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 |
sz_buf2d_draw_text db 'buf2d_draw_text',0 |
sz_buf2d_crop_color db 'buf2d_crop_color',0 |
sz_buf2d_offset_h db 'buf2d_offset_h',0 |
sz_buf2d_flood_fill db 'buf2d_flood_fill',0 |
sz_buf2d_set_pixel db 'buf2d_set_pixel',0 |
sz_buf2d_get_pixel db 'buf2d_get_pixel',0 |
sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0 |
sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0 |
mouse_dd dd 0x0 |
sc system_colors |
align 16 |
procinfo process_information |
;¡ãä¥à ®á®¢®£® ¨§®¡à ¦¥¨ï |
align 4 |
buf_0: dd 0 ;㪠§ â¥«ì ¤aë¥ ¨§®¡à ¦¥¨ï |
.l: dw 5 ;+4 left |
.t: dw 45 ;+6 top |
.w: dd 192 ;+8 w |
.h: dd 224 ;+12 h |
.color: dd 0xffffff ;+16 color |
db 24 ;+20 bit in pixel |
;¡ãä¥à £«ã¡¨ë ®á®¢®£® ¨§®¡à ¦¥¨ï |
align 4 |
buf_0z: dd 0 |
dw 0 ;+4 left |
dw 0 ;+6 top |
.w: dd 192 ;+8 w |
.h: dd 224 ;+12 h |
.color: dd 0 ;+16 color |
db 32 ;+20 bit in pixel |
;¡ãä¥à ¤«ï à¨á®¢ ¨ï á१ ®¡ê¥ªâ |
align 4 |
buf_pl: dd 0 |
.l: dw 10+192 ;+4 left |
.t: dw 45 ;+6 top |
.w: dd 320 ;+8 w |
.h: dd 330 ;+12 h |
.color: dd 0xffffff ;+16 color |
db 24 ;+20 bit in pixel |
;¡ãä¥à ¤«ï ã«ãç襮£® ।¥à |
align 4 |
buf_r_img: |
rb BUF_STRUCT_SIZE |
align 4 |
buf_r_z: |
rb BUF_STRUCT_SIZE |
;¤ ë¥ ¤«ï ᮧ¤ ¨ï ¬¨¨¬ «ì®£® ¥¤¨¨ç®£® ¢®ªá¥«ï |
align 4 |
vox_6_7_z: |
dd 0,0,1,1,0,0,\ |
0,2,2,2,2,0,\ |
2,2,2,2,2,2,\ |
2,3,2,2,3,2,\ |
2,3,3,3,3,2,\ |
0,3,3,3,3,0,\ |
0,0,3,3,0,0 |
align 4 |
buf_vox: |
db 6,7,4,3 ;w,h,h_osn,n |
rb BUF_STRUCT_SIZE*(2+1) |
i_end: |
rb 2048 |
stacktop: |
sys_path rb 1024 |
file_name: |
rb 1024 ;4096 |
library_path rb 1024 |
plugin_path rb 4096 |
openfile_path rb 4096 |
filename_area rb 256 |
mem: |