0,0 → 1,1759 |
use32 |
org 0x0 |
db 'MENUET01' ;¨¤¥â¨ä. ¨á¯®«ï¥¬®£® ä ©« ¢á¥£¤ 8 ¡ ©â |
dd 0x1 |
dd start |
dd i_end ;à §¬¥à ¯à¨«®¦¥¨ï |
dd mem |
dd stacktop |
dd 0 |
dd sys_path |
|
include '../../../../programs/macros.inc' |
include '../../../../programs/proc32.inc' |
include '../../../../programs/develop/libraries/box_lib/load_lib.mac' |
include '../trunk/mem.inc' |
include '../trunk/dll.inc' |
include '../trunk/vox_draw.inc' |
|
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load |
caption db 'Voxel mover 13.09.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_m.png',0 |
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3 |
IMAGE_TOOLBAR_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*18 |
image_data_toolbar dd 0 |
|
;§ ç¥¨ï § ¤ ¢ ¥¬ë¥ ¯® 㬮«ç ¨î, ¡¥§ ini ä ©« |
ini_def_window_t equ 10 |
ini_def_window_l equ 10 |
ini_def_window_w equ 550 |
ini_def_window_h equ 415 |
ini_def_buf_w equ 198 ;=192+6 |
ini_def_buf_h equ 231 ;=224+7 |
ini_def_s_zoom equ 5 |
ini_def_t_size equ 10 |
ini_def_color_b equ 0xffffff |
;®¯¨á ¨¥ ¯ à ¬ â஢ ¤«ï ini ä ©« |
ini_name db 'vox_mover.ini',0 |
ini_sec_window db 'Window',0 |
key_window_t db 't',0 |
key_window_l db 'l',0 |
key_window_w db 'w',0 |
key_window_h db 'h',0 |
key_buf_w db 'buf_w',0 |
key_buf_h db 'buf_h',0 |
ini_sec_options db 'Options',0 |
key_s_zoom db 's_zoom',0 |
key_t_size db 'tile_size',0 |
key_f_size db 'file_size',0 |
key_col_b db 'c_background',0 |
|
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 |
OT_CAPT_X_COLOR equ 5 ;®âáâ㯠¤«ï ¯®¤¯¨á¨ 梥â |
OT_CAPT_Y_COLOR equ 30 |
PEN_MODE_NONE equ -1 |
PEN_MODE_CLEAR equ 0 ;०¨¬ áâ¨à ¨ï |
PEN_MODE_SELECT_COLOR equ 2 ;०¨¬ ¢ë¡®à 梥â |
|
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 ;¯®¤£®â®¢ª ¤¨ «®£ |
|
;--- load ini file --- |
copy_path ini_name,sys_path,file_name,0 |
;window startup pozition |
stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_l,ini_def_window_l |
mov word[wnd_s_pos+2],ax |
stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_w,ini_def_window_w |
mov word[wnd_s_pos],ax |
stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_t,ini_def_window_t |
mov word[wnd_s_pos+6],ax |
stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_h,ini_def_window_h |
mov word[wnd_s_pos+4],ax |
;image buffer size |
stdcall dword[ini_get_int],file_name,ini_sec_window,key_buf_w,ini_def_buf_w |
mov [buf_0.w],eax |
mov [buf_0z.w],eax |
add ax,15 |
mov [buf_pl.l],ax ;®âáâ㯠¤«ï ¯à ¢®£® ®ª |
stdcall dword[ini_get_int],file_name,ini_sec_window,key_buf_h,ini_def_buf_h |
mov [buf_0.h],eax |
mov [buf_0z.h],eax |
;梥â ä® |
stdcall dword[ini_get_color],file_name,ini_sec_window,key_col_b,ini_def_color_b |
mov [buf_0.color],eax |
mov [buf_pl.color],eax |
|
;¬ áâ ¡, ¯®á«¥ ª®â®à®£® ¡ã¤¥â 㢥«¨ç¥¨¥ |
stdcall dword[ini_get_int],file_name,ini_sec_options,key_s_zoom,ini_def_s_zoom |
mov [scaled_zoom],eax |
;à §¬¥à ª¢ ¤à ⨪ ¯«®áª®á⨠á¥ç¥¨ï |
stdcall dword[ini_get_int],file_name,ini_sec_options,key_t_size,ini_def_t_size |
mov [tile_size],eax |
|
stdcall dword[ini_get_int],file_name,ini_sec_options,key_f_size,64 |
shl eax,10 |
mov [max_open_file_size],eax |
|
mov ecx,[scaled_zoom] |
xor eax,eax |
inc eax |
shl eax,cl |
imul eax,[tile_size] |
mov [buf_pl.w],eax |
add eax,[tile_size] |
mov [buf_pl.h],eax |
|
|
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 |
stdcall mem.Alloc,[max_open_file_size] |
mov dword[moved_file_vox],eax |
|
stdcall but_new_file, [open_file_vox] |
stdcall but_new_file, [moved_file_vox] |
|
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,1 ;right button |
jnc @f |
mcall 37,1 ;get mouse coords |
mov ebx,eax |
shr ebx,16 |
and eax,0xffff |
stdcall get_buf_color, buf_0 |
stdcall get_buf_color, buf_pl |
jmp .end_f |
@@: |
bt eax,0 ;left button |
jnc .end_f |
mcall 37,1 ;get mouse coords |
mov ebx,eax |
shr ebx,16 |
and eax,0xffff |
|
push eax ebx |
mov edx,[v_zoom] |
cmp edx,[scaled_zoom] |
jle @f |
;०¨¬ ¬ áèâ ¡¨à®¢ ¨ï ¨§®¡à ¦¥¨ï |
sub edx,[scaled_zoom] |
sub ax,word[buf_0.t] |
sub bx,word[buf_0.l] |
stdcall get_mouse_ev_scale, buf_vox, ebx, eax, [scaled_zoom],edx |
cmp eax,0 |
je @f |
mov ebx,eax |
and eax,0x3fffffff |
rol ebx,2 |
and ebx,3 |
dec ebx |
|
shl ebx,2 |
add ebx,cam_x |
mov dword[ebx],eax ;change [cam_x] or [cam_y] or [cam_z] |
call draw_objects |
|
pop ebx eax |
jmp .end_f |
@@: |
pop ebx eax |
|
|
;eax - mouse coord y |
;ebx - mouse coord x |
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 |
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 |
|
.end_1: |
call draw_objects |
call draw_pok |
.end_f: |
popad |
ret |
|
;input: |
; eax - coord y |
; ebx - coord x |
align 4 |
proc get_buf_color, buf:dword |
pushad |
mov edi,[buf] |
cmp ax,buf2d_t |
jl .end_f |
sub ax,buf2d_t |
cmp eax,buf2d_h |
jg .end_f |
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 |
call on_change_color ;®â®¡à ¦ ¥¬ ¨§¬¥¥¨ï 梥â |
.end_f: |
popad |
ret |
endp |
|
;¯à¥®¡à §®¢ë¢ ¥¬ ª®®à¤¨ âã y (§ 票¥ ¤®«¦® 㢥«¨ç¨¢ âìáï á ¨§ã ¢¢¥àå) |
align 4 |
convert_y: |
push ecx edx |
mov ecx,[v_zoom] |
cmp ecx,[scaled_zoom] |
jle @f |
mov ecx,[scaled_zoom] |
@@: |
mov edx,1 |
cmp ecx,1 |
jl @f |
shl edx,cl |
@@: |
sub edx,eax |
dec edx |
mov eax,edx |
pop edx ecx |
ret |
|
align 4 |
draw_window: |
pushad |
mcall 12,1 |
|
; *** à¨á®¢ ¨¥ £« ¢®£® ®ª (¢ë¯®«ï¥âáï 1 à § ¯à¨ § ¯ã᪥) *** |
mov edx,[sc.work] |
or edx,(3 shl 24)+0x30000000 |
mov edi,caption |
mcall 0,dword[wnd_s_pos],dword[wnd_s_pos+4] |
|
; *** ᮧ¤ ¨¥ ª®¯®ª ¯ ¥«ì *** |
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 |
add ebx,25 shl 16 |
mov edx,17 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,18 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,19 |
int 0x40 |
add ebx,25 shl 16 |
mov edx,20 |
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) ;¯®¢®à®â 1 |
int 0x40 |
add ebx,IMAGE_TOOLBAR_ICON_SIZE |
add edx,(25 shl 16) ;¯®¢®à®â 2 |
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) ;।¥à 2*2 |
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,47 |
mov ecx,[v_zoom] |
mov ebx,(3 shl 16)+(1 shl 31) |
mov edx,((350+6*9) shl 16)+OT_CAPT_Y_COLOR+2 |
mov esi,[sc.work_button_text] |
or esi,(1 shl 30) |
mov edi,[sc.work_button] |
int 0x40 ;¬ áèâ ¡ |
mov ecx,[n_plane] |
add edx,115 shl 16 ;9 |
int 0x40 ;®¬¥à á¥ç¥¨ï |
|
;®¡®¢«¥¨¥ ¯ à ¬¥â஢ ªãàá®à |
mov dword[txt_curor.size],0 |
mov eax,dword[v_cur_x] |
mov edi,txt_curor.size |
call convert_int_to_str |
stdcall str_cat, edi,txt_mull |
mov eax,dword[v_cur_y] |
mov edi,txt_buf |
call convert_int_to_str |
stdcall str_cat, txt_curor.size,edi |
stdcall str_cat, txt_curor.size,txt_space ;§ ¢¥àè î騩 ¯à®¡¥« |
|
;®¡®¢«¥¨¥ ¯ à ¬¥â஢ ª¨á⨠|
mov dword[txt_mov_offs.size],0 |
mov eax,dword[mov_x] |
mov edi,txt_mov_offs.size |
call convert_int_to_str |
stdcall str_cat, edi,txt_space |
mov eax,dword[mov_y] |
mov edi,txt_buf |
call convert_int_to_str |
stdcall str_cat, txt_mov_offs.size,edi |
stdcall str_cat, txt_mov_offs.size,txt_space |
mov eax,dword[mov_z] |
mov edi,txt_buf |
call convert_int_to_str |
stdcall str_cat, txt_mov_offs.size,edi |
stdcall str_cat, txt_mov_offs.size,txt_space ;§ ¢¥àè î騩 ¯à®¡¥« |
|
mov eax,4 ;à¨á®¢ ¨¥ ⥪áâ |
mov ebx,(OT_CAPT_X_COLOR shl 16)+OT_CAPT_Y_COLOR+2 |
mov ecx,[sc.work_text] |
or ecx,0x80000000 ;or (1 shl 30) |
mov edx,txt_color |
int 0x40 |
|
mov edx,txt_curor |
add ebx,115 shl 16 |
or ecx,(1 shl 30) |
mov edi,[sc.work] |
int 0x40 |
|
mov edx,txt_mov_offs |
add ebx,115 shl 16 |
int 0x40 |
|
mov edx,txt_zoom |
add ebx,115 shl 16 |
int 0x40 |
|
mov edx,txt_n_plane |
add ebx,115 shl 16 |
int 0x40 |
|
call on_change_color |
ret |
|
align 4 |
on_change_color: |
pushad |
mov ebx,((OT_CAPT_X_COLOR+35) shl 16)+16 ;¯® ®á¨ x |
mov ecx,(OT_CAPT_Y_COLOR shl 16)+12 ;¯® ®á¨ y |
mov edx,[v_color] |
mcall 13 |
|
mov ebx,(1 shl 8)+(6 shl 16) |
mov ecx,edx |
mov edx,((OT_CAPT_X_COLOR+55) shl 16)+OT_CAPT_Y_COLOR+2 |
mov esi,[sc.work_text] |
add esi,(1 shl 30) |
mov edi,[sc.work] |
mcall 47 |
popad |
ret |
|
align 4 |
key: |
mcall 2 |
jmp still |
|
|
align 4 |
button: |
mcall 17 |
cmp ah,3 |
jne @f |
stdcall but_new_file, [open_file_vox] |
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_zoom_p |
@@: |
cmp ah,7 |
jne @f |
call but_zoom_m |
@@: |
cmp ah,8 |
jne @f |
call but_3 |
@@: |
cmp ah,9 |
jne @f |
call but_4 |
@@: |
cmp ah,10 |
jne @f |
call but_plane_inc |
@@: |
cmp ah,11 |
jne @f |
call but_plane_dec |
@@: |
cmp ah,12 |
jne @f |
call but_light |
@@: |
cmp ah,13 |
jne @f |
call but_rend_2_2 |
@@: |
cmp ah,14 |
jne @f |
call but_move |
@@: |
cmp ah,15 |
jne @f |
dec dword[mov_x] |
call draw_pok |
@@: |
cmp ah,16 |
jne @f |
inc dword[mov_x] |
call draw_pok |
@@: |
cmp ah,17 |
jne @f |
dec dword[mov_y] |
call draw_pok |
@@: |
cmp ah,18 |
jne @f |
inc dword[mov_y] |
call draw_pok |
@@: |
cmp ah,19 |
jne @f |
dec dword[mov_z] |
call draw_pok |
@@: |
cmp ah,20 |
jne @f |
inc dword[mov_z] |
call draw_pok |
@@: |
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] |
stdcall mem.Free,[moved_file_vox] |
mcall -1 |
|
;¤ ë¥ ¤«ï ¨¨æ¨ «¨§ 樨 ¢®ªá¥«ì®£® ®¡ê¥ªâ |
align 4 |
vox_new_data: |
db 2,0,0,0 |
db 0,1,2,3, 4,5,6,7 ;default table |
dd 0 ;null node |
|
;¨¨æ¨ «¨§ æ¨ï ¢®ªá¥«ì®£® ®¡ê¥ªâ |
align 4 |
proc but_new_file uses ecx edi esi, file_data:dword |
mov ecx,vox_offs_data+4 |
mov esi,vox_new_data |
mov edi,[file_data] |
cld |
rep movsb |
ret |
endp |
|
align 4 |
open_file_vox dd 0 ;㪠§ â¥«ì ®¡« áâì ¤«ï ®âªàëâ¨ï ä ©«®¢ |
moved_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 |
m2m dword[run_file_70.Count], dword[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 ;¡¥à¥¬ ¬ áèâ ¡ ¯® 㬮«ç ¨î |
mov dword[cam_x],0 |
mov dword[cam_y],0 |
mov dword[cam_z],0 |
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,[moved_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[moved_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_zoom_p: |
cmp dword[v_zoom],10 ;¬ ªá¨¬ «ìë© à §¬¥à, ¤® ª®â®à®£® ¬®¦® 㢥«¨ç¨âì 2^10=1024 |
jge @f |
inc dword[v_zoom] |
shl dword[n_plane],1 |
push eax |
mov eax,[v_zoom] |
cmp eax,[scaled_zoom] |
jl .end_0 |
push ecx |
mov ecx,[scaled_zoom] |
xor eax,eax |
inc eax |
shl eax,cl |
shl dword[cam_x],1 |
shl dword[cam_y],1 |
shl dword[cam_z],1 |
cmp eax,[n_plane] |
jg .end_1 |
;ª®à¥ªâ¨à®¢ª ¯®«§ãª |
sub [n_plane],eax |
inc dword[cam_y] |
.end_1: |
pop ecx |
.end_0: |
pop eax |
call draw_objects |
call draw_pok |
@@: |
ret |
|
;㬥ì襨¥ ¬ áèâ ¡ |
align 4 |
but_zoom_m: |
cmp dword[v_zoom],1 |
jl @f |
dec dword[v_zoom] |
shr dword[n_plane],1 |
push eax |
mov eax,[v_zoom] |
cmp eax,[scaled_zoom] |
jl .end_0 |
shr dword[cam_x],1 |
shr dword[cam_y],1 |
jnc .end_1 |
;ª®à¥ªâ¨à®¢ª ¯®«§ãª |
push ecx |
mov ecx,[scaled_zoom] |
dec ecx |
xor eax,eax |
inc eax |
shl eax,cl |
add [n_plane],eax |
pop ecx |
.end_1: |
shr dword[cam_z],1 |
.end_0: |
pop eax |
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_plane_inc: |
push eax ecx |
inc dword[n_plane] |
mov eax,[v_zoom] |
cmp eax,[scaled_zoom] |
jle .end_0 |
;¯à®¨á室¨â ¬ áèâ ¡¨à®¢ ¨¥ |
mov ecx,[scaled_zoom] |
xor eax,eax |
inc eax |
shl eax,cl |
cmp eax,[n_plane] |
jg @f |
mov dword[n_plane],0 |
inc dword[cam_y] ;¯¥à¥å®¤¨¬ ¢ á®á¥¤¨© ªã¡ |
neg ecx |
;inc ecx |
add ecx,[v_zoom] |
xor eax,eax |
inc eax |
shl eax,cl |
cmp eax,[cam_y] |
jg @f |
mov dword[cam_y],0 ;§ 横«¨¢ ¥¬ ¥á«¨ ¢ë«¥§«¨ § ¯à¥¤¥«ë ¯®á«¥¤¥£® ªã¡ |
@@: |
jmp .end_1 |
.end_0: |
;¬ áèâ ¡¨à®¢ ¨¥ ¥ ¯à®¨á室¨â |
mov ecx,eax |
xor eax,eax |
inc eax |
shl eax,cl |
cmp eax,[n_plane] |
jg .end_1 |
mov dword[n_plane],0 |
.end_1: |
call draw_objects |
call draw_pok |
pop ecx eax |
ret |
|
;ᤢ¨£ ¥¬ ¯«®áª®áâì á१ |
align 4 |
but_plane_dec: |
dec dword[n_plane] |
cmp dword[n_plane],0 |
jge .end_f |
push eax ecx |
mov ecx,[scaled_zoom] |
xor eax,eax |
inc eax |
shl eax,cl |
dec eax |
mov dword[n_plane],eax |
|
mov eax,[v_zoom] |
cmp eax,[scaled_zoom] |
jle .end_0 |
;¯à®¨á室¨â ¬ áèâ ¡¨à®¢ ¨¥ |
dec dword[cam_y] ;¯¥à¥å®¤¨¬ ¢ á®á¥¤¨© ªã¡ |
cmp dword[cam_y],0 |
jge .end_0 |
|
mov ecx,eax |
sub ecx,[scaled_zoom] |
xor eax,eax |
inc eax |
shl eax,cl |
dec eax |
mov dword[cam_y],eax ;¥á«¨ ®¬¥à ªã¡ ®ª § «áï ¬¥ìè¥ 0 ¨á¯à ¢«ï¥¬ ¬ ªá¨¬ «ì®¥ § 票¥ |
.end_0: |
pop ecx eax |
.end_f: |
call draw_objects |
call draw_pok |
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] |
cmp eax,[scaled_zoom] |
jle .end_scaled |
;।¥à 㢥«¨ç¥®© ç á⨠®¡ê¥ªâ |
mov ebx,[scaled_zoom] |
sub eax,ebx |
inc ebx |
stdcall [buf2d_vox_obj_draw_3g_scaled], buf_r_img, buf_r_z, buf_vox,\ |
[open_file_vox], 0,0, 0, ebx, [cam_x],[cam_y],[cam_z],eax, [sc.work_graph] |
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, ebx, 3 |
@@: |
xor ebx,ebx |
xor ecx,ecx |
mov edi,buf_r_img |
stdcall [buf2d_img_hdiv2], edi |
shr buf2d_h,1 |
stdcall [buf2d_img_wdiv2], edi |
shr buf2d_w,1 |
jmp .show |
.end_scaled: |
|
inc eax |
stdcall [buf2d_vox_obj_draw_3g], buf_r_img, buf_r_z, buf_vox, [open_file_vox], 0,0, 0, eax |
stdcall [buf2d_vox_obj_draw_1g], buf_r_img, buf_r_z, [open_file_vox], 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 - ¤«ï æ¥â஢ª¨ ¬ «¥ìª¨å ¨§®¡à ¦¥¨© ¯® ¢¥à⨪ «¨ |
@@: |
.show: |
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 |
but_move: |
push eax |
stdcall but_new_file, [moved_file_vox] |
mov eax,[v_zoom] |
stdcall buf_vox_obj_recreat, [open_file_vox], [moved_file_vox],\ |
[mov_x],[mov_y],[mov_z], eax |
|
stdcall [buf2d_clear], buf_0, [buf_0.color] ;ç¨á⨬ ¡ãä¥à |
stdcall [buf2d_clear], buf_0z, 0 ;ç¨á⨬ ¡ãä¥à |
cmp eax,[scaled_zoom] |
jle @f |
mov eax,[scaled_zoom] |
@@: |
stdcall [buf2d_vox_obj_draw_3g], buf_0, buf_0z, buf_vox, [moved_file_vox], 0,0,0, eax |
pop eax |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
ret |
|
;description: |
; äãªæ¨ï à¨áãîé ï ¢®ªá¥«ìë© ®¡ê¥ªâ (¢¨¤® 3 £à ¨) |
;input: |
; v_obj - ¢®ªá¥«ìë© ®¡ê¥ªâ |
; k_scale - ª®íä. ¤«ï ¬ áèâ ¡¨à®¢ ¨ï ¨§®¡à ¦¥¨ï |
align 4 |
proc buf_vox_obj_recreat, v_obj:dword, obj_n:dword,\ |
coord_x:dword, coord_y:dword, coord_z:dword, k_scale:dword |
pushad |
mov edi,[v_obj] |
mov ecx,[k_scale] |
mov ebx,[coord_x] |
mov edx,[coord_y] |
add edi,vox_offs_data |
mov esi,[coord_z] |
stdcall vox_go_in_node, [v_obj], [obj_n] |
popad |
ret |
endp |
|
;input: |
; ebx - coord_x |
; edx - coord_y |
; esi - coord_z |
; ecx - ã஢¥ì ⥪ã襣® 㧫 |
; edi - 㪠§ â¥«ì ¤ ë¥ ¢®ªá¥«ì®£® ®¡ê¥ªâ |
align 4 |
proc vox_go_in_node, v_obj:dword, obj_n:dword |
cmp byte[edi+3],0 ;ᬮâਬ ¥áâì «¨ ¯®¤¤¥à¥¢ìï |
je .sub_trees |
;४ãàá¨¢ë© ¯¥à¥¡®à ¯®¤¤¥à¥¢ì¥¢ |
push eax edx |
|
;¯à®à¨á®¢ª à ¬ª¨ ¥á«¨ à §¬¥à 㧫 = 1 |
cmp ecx,0 |
jne @f |
stdcall buf2d_vox_obj_create_node, [obj_n], ebx,edx,esi, [v_zoom], [edi] |
@@: |
|
;¢å®¤ ¢ãâàì 㧫 |
dec ecx |
mov ah,byte[edi+3] |
add edi,4 |
mov al,8 |
.cycle: |
bt ax,8 ;â¥áâ¨à㥬 ⮫쪮 ah |
jnc .c_next |
push ebx edx esi |
stdcall vox_corect_coords, [v_obj] |
stdcall vox_go_in_node, [v_obj], [obj_n] |
pop esi edx ebx |
.c_next: |
shr ah,1 |
dec al |
jnz .cycle |
|
;¢ë室 ¨§ 㧫 |
inc ecx |
pop edx eax |
|
jmp .end_f |
.sub_trees: |
;à¨á㥬 㧥« |
cmp ecx,0 |
jne @f |
stdcall buf2d_vox_obj_create_node, [obj_n], ebx,edx,esi, [v_zoom], [edi] |
@@: |
|
add edi,4 |
.end_f: |
ret |
endp |
|
;description: |
;äãªæ¨ï ¤«ï ª®à¥ªâ¨à®¢ª¨ ª®®à¤¨ â |
; ¯à ¢«¥¨ï ®á¥© ª®®à¤¨ â ¢ ¢®ªá¥«¥: |
;*z |
;| |
;+ |
; * y |
; / |
;+ |
; \ |
; * 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, v_obj: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 |
|
xor eax,eax |
inc eax |
cmp ecx,1 |
jl .no_scale ;¢® ¨§¡¥¦ ¨¥ § 横«¨¢ ¨ï |
shl eax,cl |
.no_scale: |
|
bt word[edi],0 ;test voxel coord x |
jnc @f |
add ebx,eax |
@@: |
bt word[edi],1 ;test voxel coord y |
jnc @f |
add edx,eax |
@@: |
bt word[edi],2 ;test voxel coord z |
jnc @f |
add esi,eax |
@@: |
pop edi eax |
.end_f: |
ret |
endp |
|
align 4 |
v_zoom dd 3 ;⥪ã騩 ¬ áèâ ¡ |
v_cur_x dd 0 ;ª®®à¤¨ â ªãàá®à x |
v_cur_y dd 0 ;ª®®à¤¨ â ªãàá®à y (® ®áì ¢ ®¡ê¥ªâ¥ z) |
n_plane dd 0 ;¯«®áª®áâì á¥ç¥¨ï |
v_color dd 0xff ;梥⠪ à ¤ è |
mode_light dd 1 ;०¨¬ ®á¢¥é¥¨ï |
cam_x dd 0 |
cam_y dd 0 |
cam_z dd 0 |
;ᤢ¨£¨ ®¡ê¥ªâ ¯à¨ ¯¥à¥á®§¤ ¨¨ (¯¥à¥¤¢¨¦¥¨¨) |
mov_x dd 0 |
mov_y dd 0 |
mov_z dd 0 |
scaled_zoom dd 5 ;¬ áèâ ¡ ¯®á«¥ ª®â®à®£® ç¨ ¥âáï à¨á®¢ ¨¥ ç á⨠¨§®¡à ¦¥¨ï |
tile_size dd ? ;à §¬¥à ª¢ ¤à ⨪ ¯«®áª®á⨠á á¥ç¥¨¥¬ |
max_open_file_size dd ? |
brush_w dd 5 ;è¨à¨ ª¨á⨠|
brush_h dd 5 ;¢ëá®â ª¨á⨠|
brush_data dd 1 shl 31,1 shl 30,1 shl 30,1 shl 30,1 shl 31 |
dd 1 shl 30,1 shl 30,1 shl 30,1 shl 30,1 shl 30 |
dd 1 shl 30,1 shl 30,1 shl 30,1 shl 30,1 shl 30 |
dd 1 shl 30,1 shl 30,1 shl 30,1 shl 30,1 shl 30 |
dd 1 shl 31,1 shl 30,1 shl 30,1 shl 30,1 shl 31 |
rd 999 ;32*32-25 |
|
txt_zoom db ' áèâ ¡:',0 |
txt_curor: db 'ãàá®à: ' |
.size: rb 10 |
txt_n_plane db '¥ç¥¨¥:',0 |
txt_color db '¢¥â:',0 |
txt_mov_offs: db '¬¥é¥¨¥: ' |
.size: rb 30 |
txt_mull db '*',0 |
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] ;ç¨á⨬ ¡ãä¥à |
|
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 - ¤«ï æ¥â஢ª¨ ¬ «¥ìª¨å ¨§®¡à ¦¥¨© ¯® |
@@: |
|
mov eax,[v_zoom] |
cmp eax,[scaled_zoom] |
jg @f |
;®¡ëçë© à¥¦¨¬ ¨§®¡à ¦¥¨ï |
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 |
jnc .end_1 |
stdcall [buf2d_vox_obj_draw_3g_shadows], buf_0, buf_0z, buf_vox, ebx,ecx, 0, eax, 3 |
.end_1: |
jmp .end_0 |
@@: |
;०¨¬ ¬ áèâ ¡¨à®¢ ¨ï ¨§®¡à ¦¥¨ï |
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 |
.end_2: |
.end_0: |
pop ecx ebx eax |
|
call draw_vox_cursor |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
stdcall [buf2d_draw], buf_pl ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
.end_f: |
ret |
|
;à¨á®¢ ¨¥ ªãàá®à |
align 4 |
draw_vox_cursor: |
pushad |
mov ecx,[v_zoom] |
cmp ecx,[scaled_zoom] |
jle @f |
mov ecx,[scaled_zoom] |
@@: |
xor edx,edx |
inc edx |
shl edx,cl |
|
mov eax,[v_cur_x] |
cmp eax,edx |
jge .end_f ;ªãàá®à § ¯à¥¤¥« ¬¨ ¯®«ï |
mov edi,[tile_size] |
imul eax,edi |
add eax,OT_MAP_X |
mov ebx,edx |
dec ebx |
sub ebx,[v_cur_y] |
imul ebx,edi |
add ebx,OT_MAP_Y |
inc eax |
inc ebx |
sub edi,2 |
stdcall [buf2d_rect_by_size], buf_pl, eax,ebx, edi,edi,[sc.work_graph] |
dec ebx |
add edi,2 |
|
;£®à¨§®â «ìë¥ «¨¨¨ |
sub eax,2 |
mov ecx,edi |
imul edi,edx |
shr ecx,1 |
add ebx,ecx ;æ¥â஢ª ¯® á¥à¥¤¨¥ ª«¥âª¨ |
mov ecx,OT_MAP_X |
add edi,ecx |
stdcall [buf2d_line], buf_pl, ecx,ebx, eax,ebx,[sc.work_graph] |
add eax,[tile_size] |
inc eax |
cmp eax,edi |
jge @f ;¥á«¨ ªãàá®à ªà î ¯®«ï |
dec edi |
stdcall [buf2d_line], buf_pl, eax,ebx, edi,ebx,[sc.work_graph] |
@@: |
|
.end_f: |
popad |
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 |
|
;input: |
; eax = value |
; edi = string buffer |
;output: |
align 4 |
convert_int_to_str: |
pushad |
bt eax,31 |
jae @f |
;¥á«¨ ç¨á«® ®âà¨æ ⥫쮥 |
neg eax |
;inc eax |
;clc |
mov byte[edi],'-' |
inc edi |
@@: |
mov dword[edi+1],0 |
mov word[edi+5],0 |
call .str |
popad |
ret |
|
align 4 |
.str: |
mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬ áç¨á«¥¨ï ¨§¬¥ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤ë¥ ¯ à ¬¥âàë eax - ç¨á«® |
;¯à¥à¥¢®¤ ç¨á« ¢ ASCII áâப㠢§®¤ë¥ ¤ ë¥ ecx=á¨á⥬ áç¨á«¥ï edi ¤à¥á ªã¤ § ¯¨áë¢ âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®¥æ ¯¥à¥¬¥®© |
cmp eax,ecx ;áà ¢¨âì ¥á«¨ ¢ eax ¬¥ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ @@-1 â.¥. pop eax |
jb @f |
xor edx,edx ;®ç¨áâ¨âì edx |
div ecx ;à §¤¥«¨âì - ®áâ ⮪ ¢ edx |
push edx ;¯®«®¦¨âì ¢ á⥪ |
;dec edi ;ᬥ饨¥ ¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®æ áâப¨ |
call .str ;¯¥à¥©â¨ á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥â ¯®ª ¢ eax ¥ á⠥⠬¥ìè¥ ç¥¬ ¢ ecx |
pop eax |
@@: ;cmp al,10 ;¯à®¢¥à¨âì ¥ ¬¥ìè¥ «¨ § 票¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥ï 10 ¤ ï ª®¬ ¤ - «¨è ï)) |
or al,0x30 ;¤ ï ª®¬ ¤ ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥ |
stosb ;§ ¯¨á âì í«¥¬¥â ¨§ ॣ¨áâà al ¢ ï祪㠯 ¬ï⨠es:edi |
ret ;¢¥àãâìáï ç¥ì ¨â¥à¥áë© å®¤ â.ª. ¯®ª ¢ á⥪¥ åà ¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï |
|
align 4 |
proc str_cat, str1:dword, str2:dword |
push eax ecx edi esi |
mov esi,dword[str2] |
stdcall str_len,esi |
mov ecx,eax |
inc ecx |
mov edi,dword[str1] |
stdcall str_len,edi |
add edi,eax |
cld |
repne movsb |
pop esi edi ecx eax |
ret |
endp |
|
;output: |
; eax = strlen |
align 4 |
proc str_len, str1:dword |
mov eax,[str1] |
@@: |
cmp byte[eax],0 |
je @f |
inc eax |
jmp @b |
@@: |
sub eax,[str1] |
ret |
endp |
|
;¤ ë¥ ¤«ï ¤¨ «®£ ®âªàëâ¨ï ä ©«®¢ |
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 |
|
system_dir_3 db '/sys/lib/' |
lib_name_3 db 'libini.obj',0 |
err_msg_found_lib_3 db '¥ ©¤¥ ¡¨¡«¨®â¥ª ',39,'libini.obj',39,0 |
err_msg_import_3 db '訡ª ¯à¨ ¨¬¯®à⥠¡¨¡«¨®â¥ª¨ ',39,'libini',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 |
lib_3 l_libs lib_name_3, sys_path, library_path, system_dir_3,\ |
err_msg_found_lib_3,head_f_l,import_libini,err_msg_import_3,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 |
buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g |
buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g |
buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g |
buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g |
buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled |
buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows |
buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl |
buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled |
|
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 |
sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0 |
sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0 |
sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0 |
sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0 |
sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0 |
sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0 |
sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0 |
sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0 |
|
align 4 |
import_libini: |
dd alib_init2 |
ini_get_str dd aini_get_str |
ini_get_int dd aini_get_int |
ini_get_color dd aini_get_color |
dd 0,0 |
alib_init2 db 'lib_init',0 |
aini_get_str db 'ini_get_str',0 |
aini_get_int db 'ini_get_int',0 |
aini_get_color db 'ini_get_color',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+6 ;+8 w |
.h: dd 224+7 ;+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+6 ;+8 w |
.h: dd 224+7 ;+12 h |
.color: dd 0 ;+16 color |
db 32 ;+20 bit in pixel |
|
;¡ãä¥à ¤«ï à¨á®¢ ¨ï á१ ®¡ê¥ªâ |
align 4 |
buf_pl: dd 0 |
.l: dw 15+192+6 ;+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 |
cursor_pointer dd 0 ;㪠§ â¥«ì ¤ ë¥ ¤«ï ªãàá®à |
|
|
;¤ ë¥ ¤«ï ᮧ¤ ¨ï ¬¨¨¬ «ì®£® ¥¤¨¨ç®£® ¢®ªá¥«ï |
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*(3+1) |
|
i_end: |
wnd_s_pos: ;¬¥áâ® ¤«ï áâ஥ª áâ à⮢®© ¯®§¨æ¨¨ ®ª |
rq 0 |
rb 4096 ;2048 |
stacktop: |
sys_path rb 1024 |
file_name: |
rb 1024 ;4096 |
library_path rb 1024 |
plugin_path rb 1024 ;4096 |
openfile_path rb 1024 ;4096 |
filename_area rb 256 |
mem: |