16,7 → 16,7 |
include 'vox_draw.inc' |
|
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load |
caption db 'Voxel editor 01.10.12',0 ;¯®¤¯¨áì ®ª |
caption db 'Voxel editor 16.11.12',0 ;¯®¤¯¨áì ®ª |
|
struct FileInfoBlock |
Function dd ? |
109,6 → 109,7 |
PEN_MODE_NONE equ -1 |
PEN_MODE_CLEAR equ 0 ;०¨¬ áâ¨à ¨ï |
PEN_MODE_SELECT_COLOR equ 2 ;०¨¬ ¢ë¡®à 梥â |
PEN_MODE_BRUSH equ 3 ;०¨¬ à ¡®âë á ª¨áâìî |
|
align 4 |
start: |
346,11 → 347,22 |
push dword[v_color] |
@@: |
|
mov ecx,dword[v_zoom] |
mov edi,eax |
mov esi,ebx |
mcall 66,3 |
and eax,3 ;3 -> ¡¨â 0 «¥¢ë© Shift ¦ â, ¡¨â 1 ¯à ¢ë© Shift ¦ â |
jz .shift_end |
;¥á«¨ ¦ â Shift, ⮠। ªâ¨à㥬 ¢¥à奬 ã஢¥ |
;¤«ï í⮣® ¢á¥ ª®®à¤¨ âë ¤¥«¨¬ 2 ®â ¬ áâ ¡ ®â¨¬ ¥¬ 1 |
shr edx,1 |
shr esi,1 |
shr edi,1 |
dec ecx |
.shift_end: |
|
;¢ë§®¢ ®¡é¨å ¯ à ¬¥â஢ ¤«ï äãªæ¨© |
push dword[v_zoom] |
push edx |
push ebx |
push eax |
push ecx edx esi edi |
push dword[open_file_vox] |
|
;¢ë§®¢ äãªæ¨© |
357,11 → 369,11 |
cmp dword[v_pen_mode],1 |
jne @f |
call buf2d_vox_obj_create_node |
;stdcall buf2d_vox_obj_create_node, [open_file_vox], eax,ebx,edx, [v_zoom], [v_color] |
;stdcall buf2d_vox_obj_create_node, [open_file_vox], edi,esi,edx, [v_zoom], [v_color] |
jmp .end_1 |
@@: |
call buf2d_vox_obj_delete_node |
;stdcall buf2d_vox_obj_delete_node, [open_file_vox], eax,ebx,edx, [v_zoom] |
;stdcall buf2d_vox_obj_delete_node, [open_file_vox], edi,esi,edx, [v_zoom] |
|
.end_1: |
call draw_objects |
1195,8 → 1207,7 |
dec dword[brush_w] |
pushad |
call draw_pok |
call draw_vox_cursor |
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
call draw_plane |
popad |
@@: |
ret |
1208,8 → 1219,7 |
inc dword[brush_w] |
pushad |
call draw_pok |
call draw_vox_cursor |
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
call draw_plane |
popad |
@@: |
ret |
1221,8 → 1231,7 |
dec dword[brush_h] |
pushad |
call draw_pok |
call draw_vox_cursor |
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
call draw_plane |
popad |
@@: |
ret |
1234,8 → 1243,7 |
inc dword[brush_h] |
pushad |
call draw_pok |
call draw_vox_cursor |
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
call draw_plane |
popad |
@@: |
ret |
1242,7 → 1250,7 |
|
align 4 |
but_brush_copy: |
cmp dword[v_pen_mode],3 |
cmp dword[v_pen_mode],PEN_MODE_BRUSH |
jne .end_f |
pushad |
mov eax,[v_cur_x] |
1297,7 → 1305,7 |
|
align 4 |
but_brush_draw: |
cmp dword[v_pen_mode],3 |
cmp dword[v_pen_mode],PEN_MODE_BRUSH |
jne .end_f |
pushad |
mov eax,[v_cur_x] |
1355,7 → 1363,7 |
|
align 4 |
but_brush_clear: |
cmp dword[v_pen_mode],3 |
cmp dword[v_pen_mode],PEN_MODE_BRUSH |
jne .end_f |
pushad |
mov eax,[v_cur_x] |
1445,11 → 1453,11 |
txt_space db ' ',0 |
txt_buf rb 16 |
|
;à¨á®¢ ¨¥ ¡ãä¥à á ¢®ªá¥«ì묨 ®¡ê¥ªâ ¬¨ |
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],PEN_MODE_SELECT_COLOR |
jne @f |
1477,8 → 1485,6 |
;®¡ëçë© à¥¦¨¬ ¨§®¡à ¦¥¨ï |
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_0z, [buf_vox],\ |
[open_file_vox], ebx,ecx, 0, eax |
stdcall [buf2d_vox_obj_draw_pl], buf_pl, [open_file_vox],\ |
OT_MAP_X,OT_MAP_Y,[tile_size], eax, [n_plane], [sc.work_graph] |
stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_0z,\ |
[open_file_vox], 0,0, eax |
bt dword[mode_light],0 |
1491,8 → 1497,6 |
sub eax,[scaled_zoom] |
stdcall [buf2d_vox_obj_draw_3g_scaled], buf_0, buf_0z, [buf_vox],\ |
[open_file_vox], 0,0, 0, [scaled_zoom], [cam_x],[cam_y],[cam_z],eax, [sc.work_graph] ;scroll -> 2^eax |
stdcall [buf2d_vox_obj_draw_pl_scaled], buf_pl, [open_file_vox],\ |
OT_MAP_X,OT_MAP_Y,[tile_size], [scaled_zoom], [n_plane], [sc.work_graph],[cam_x],[cam_y],[cam_z],eax |
bt dword[mode_light],0 |
jnc .end_2 |
stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_0z, [buf_vox], 0,0, 0, [scaled_zoom], 3 |
1500,11 → 1504,35 |
.end_0: |
pop ecx ebx eax |
|
call draw_plane |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
.end_f: |
ret |
|
;à¨á®¢ ¨¥ ¯«®áª®á⨠á á¥ç¥¨¥¬ ®¡ê¥ªâ |
align 4 |
proc draw_plane uses eax |
stdcall [buf2d_clear], buf_pl, [buf_pl.color] ;ç¨á⨬ ¡ãä¥à |
|
mov eax,[v_zoom] |
cmp eax,[scaled_zoom] |
jg @f |
;®¡ëçë© à¥¦¨¬ ¨§®¡à ¦¥¨ï |
stdcall [buf2d_vox_obj_draw_pl], buf_pl, [open_file_vox],\ |
OT_MAP_X,OT_MAP_Y,[tile_size], eax, [n_plane], [sc.work_graph] |
jmp .end_0 |
@@: |
;०¨¬ ¬ áèâ ¡¨à®¢ ¨ï ¨§®¡à ¦¥¨ï |
sub eax,[scaled_zoom] |
stdcall [buf2d_vox_obj_draw_pl_scaled], buf_pl, [open_file_vox],\ |
OT_MAP_X,OT_MAP_Y,[tile_size], [scaled_zoom], [n_plane], [sc.work_graph],[cam_x],[cam_y],[cam_z],eax |
.end_0: |
|
call draw_vox_cursor |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
.end_f: |
ret |
endp |
|
;à¨á®¢ ¨¥ ªãàá®à |
align 4 |
1531,6 → 1559,8 |
imul ebx,edi |
add ebx,OT_MAP_Y |
inc eax |
cmp dword[v_pen_mode],PEN_MODE_BRUSH |
je .brush |
inc ebx |
sub edi,2 |
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,edi,[sc.work_graph] |
1537,9 → 1567,6 |
dec ebx |
add edi,2 |
|
cmp dword[v_pen_mode],3 |
je .brush |
|
;£®à¨§®â «ìë¥ «¨¨¨ |
sub eax,2 |
mov ecx,edi |
1569,6 → 1596,42 |
imul esi,[tile_size] |
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,esi,[sc.work_graph] |
|
;à¨á®¢ ¨¥ â®ç¥ª ¤«ï ª¨á⨠|
mov ecx,[brush_w] |
mov edx,[tile_size] |
sub eax,edx ;eax-=tile_size |
shr edx,2 |
add eax,edx ;eax+=tile_size/4 |
add ebx,edx ;ebx+=tile_size/4 |
mov edx,eax |
mov esi,[tile_size] |
imul esi,ecx |
imul ecx,[brush_h] |
add esi,edx |
;eax = from edx to esi |
mov edi,brush_data |
cld |
@@: |
add eax,[tile_size] |
bt dword[edi],31 |
jc .no_pixel |
bt dword[edi],30 |
jc .sel_color |
push dword[edi] |
jmp .set_pixel |
.sel_color: |
push [v_color] |
.set_pixel: |
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, 3,3 ;, [edi] |
.no_pixel: |
add edi,4 |
cmp eax,esi |
jl .end_line |
mov eax,edx |
add ebx,[tile_size] |
.end_line: |
loop @b |
|
.end_f: |
popad |
ret |