20,7 → 20,7 |
debug equ 0 |
|
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load |
capt db 'info 3ds 18.08.11',0 ;¯®¤¯¨áì ®ª |
capt db 'info 3ds 20.08.11',0 ;¯®¤¯¨áì ®ª |
|
struct FileInfoBlock |
Function dd ? |
45,9 → 45,9 |
TREE_ICON_SYS16_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*11+54 ;à §¬¥à bmp ä ©« á á¨á⥬묨 ¨ª®ª ¬¨ |
icon_tl_sys dd 0 ;㪠§ ⥥«ì ¯ ¬ïâì ¤«ï åà ¥¨ï á¨á⥬ëå ¨ª®®ª |
icon_toolbar dd 0 ;㪠§ ⥥«ì ¯ ¬ïâì ¤«ï åà ¥¨ï ¨ª®®ª ®¡ê¥ªâ®¢ |
TOOLBAR_ICON_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*6+54 ;à §¬¥à bmp ä ©« á ¨ª®ª ¬¨ ®¡ê¥ªâ®¢ |
TOOLBAR_ICON_BMP_SIZE equ IMAGE_TOOLBAR_ICON_SIZE*7+54 ;à §¬¥à bmp ä ©« á ¨ª®ª ¬¨ ®¡ê¥ªâ®¢ |
; |
IMAGE_FILE1_SIZE equ 128*144*3 ;à §¬¥à ä ©« á ¨§®¡à ¦¥¨¥¬ 640 x 480 |
IMAGE_FILE1_SIZE equ 128*144*3+54 ;à §¬¥à ä ©« á ¨§®¡à ¦¥¨¥¬ |
|
macro load_image_file path,buf,size { ;¬ ªà®á ¤«ï § £à㧪¨ ¨§®¡à ¦¥¨© |
;path - ¬®¦¥â ¡ëâì ¯¥à¥¬¥®© ¨«¨ áâப®¢ë¬ ¯ à ¬¥â஬ |
89,13 → 89,14 |
} |
|
;-------------------------------------- |
sizeof.block_3ds equ 5 |
sizeof.block_3ds equ 9 |
|
macro block_3ds id,icon,par |
macro block_3ds id,icon,par,caption |
{ |
dw id ;¨¤¥â¨ä¨ª â®à ¡«®ª ¢ ä ©«¥ 3ds |
dw icon ;®¬¥à ¨ª®ª¨ ¤«ï ¡«®ª |
db par ;ᮤ¥à¦¨â «¨ ¡«®ª ¯®¤¡«®ª¨ (0-¤ 1-¥â) |
dw id ;+0 ¨¤¥â¨ä¨ª â®à ¡«®ª ¢ ä ©«¥ 3ds |
dw icon ;+2 ®¬¥à ¨ª®ª¨ ¤«ï ¡«®ª |
db par ;+4 ᮤ¥à¦¨â «¨ ¡«®ª ¯®¤¡«®ª¨ (0-¤ 1-¥â) |
dd caption+0 ;+5 ®¯¨á ¨¥ ¡«®ª |
} |
|
CHUNK_MAIN equ 0x4D4D ; [-] áæ¥ |
141,7 → 142,7 |
|
align 4 |
type_bloks: |
block_3ds 0x0002,5,1 ;¨ä®à¬ æ¨ï ® ¢¥àᨨ ä ©« |
block_3ds 0x0002,5,1,txt_0002 |
block_3ds 0x3d3e,5,1 ;mesh version |
block_3ds 0xA010,4,0 ;material ambient color |
block_3ds 0xA020,4,0 ;material diffuse color |
149,22 → 150,23 |
block_3ds CHUNK_color_1, 4,1 ; [+] 梥â rgb (byte format) |
block_3ds CHUNK_ambient_color,3,0 ; [-] ambient color |
block_3ds CHUNK_OBJMESH, 3,0 ; [-] ¢áïç¥áª¨¥ ®¡ê¥ªâë |
block_3ds CHUNK_OBJBLOCK, 3,1 ; [+] ®¡ê¥ªâ |
block_3ds CHUNK_OBJBLOCK, 3,1,txt_4000 |
block_3ds CHUNK_TRIMESH, 3,0 ; [-] trimesh-®¡ê¥ªâ |
block_3ds CHUNK_VERTLIST, 3,1 ; [+] ᯨ᮪ ¢¥àè¨ |
block_3ds CHUNK_FACELIST, 3,1 ; [+] ᯨ᮪ £à ¥© |
block_3ds CHUNK_VERTLIST, 3,1,txt_4110 |
block_3ds CHUNK_FACELIST, 3,1,txt_4120 |
block_3ds CHUNK_FACEMAT, 3,1 ; [+] ¬ â¥à¨ «ë £à ¥© |
block_3ds CHUNK_MAPLIST, 3,1 ; [+] ⥪áâãàë¥ ª®®à¤¨ âë |
block_3ds CHUNK_TRMATRIX, 3,1 ; [+] ¬ âà¨æ ¯¥à¥¢®¤ |
block_3ds CHUNK_CAMERA, 3,1 ; [+] ®¡ê¥ªâ-ª ¬¥à |
block_3ds CHUNK_MATERIAL, 3,0 ; [-] ¬ â¥à¨ « |
block_3ds CHUNK_MATNAME, 3,1 ; [+] §¢ ¨¥ ¬ â¥à¨ « |
block_3ds CHUNK_TEXTURE, 3,0 ; [-] ⥪áâãà ¬ â¥à¨ « |
block_3ds CHUNK_MAPFILE, 3,1 ; [+] ¨¬ï ä ©« ⥪áâãàë |
block_3ds CHUNK_KEYFRAMER, 3,0 ; [-] ¨ä®à¬ æ¨ï ®¡ ¨¬ 樨 |
block_3ds CHUNK_TRACKINFO, 3,0 ; [-] ¯®¢¥¤¥¨¥ ®¡ê¥ªâ |
block_3ds CHUNK_TRACKOBJNAME,3,1 ; [+] §¢ ¨¥ í⮣® ®¡ê¥ªâ |
block_3ds CHUNK_TRACKPIVOT, 3,1 ; [+] æ¥âà ¢à é¥¨ï ®¡ê¥ªâ |
block_3ds 0x4600,3,1,txt_4600 |
block_3ds CHUNK_MATERIAL, 3,0,txt_afff |
block_3ds CHUNK_MATNAME, 3,1,txt_a000 |
block_3ds CHUNK_TEXTURE, 3,0,txt_a200 |
block_3ds CHUNK_MAPFILE, 6,1,txt_a300 |
block_3ds CHUNK_KEYFRAMER, 3,0,txt_b000 |
block_3ds CHUNK_TRACKINFO, 3,0,txt_b002 |
block_3ds CHUNK_TRACKOBJNAME,3,1,txt_b010 |
block_3ds CHUNK_TRACKPIVOT, 3,1,txt_b013 |
block_3ds CHUNK_TRACKPOS, 3,1 ; [+] âà ¥ªâ®à¨ï ®¡ê¥ªâ |
block_3ds CHUNK_TRACKROTATE, 3,1 ; [+] âà ¥ªâ®à¨ï ¢à é¥¨ï ®¡ê¥ªâ |
block_3ds CHUNK_TRACKCAMERA, 3,0 ; [-] ¯®¢¥¤¥¨¥ ª ¬¥àë |
173,13 → 175,44 |
block_3ds CHUNK_TRACKCAMTGT, 3,0 ; [-] ¯®¢¥¤¥¨¥ "楫¨" ª ¬¥àë |
.end: |
|
if lang eq ru |
txt_0002 db '3ds ¢¥àá¨ï',0 |
txt_4000 db '¡ê¥ªâ (á ¨¬¥¥¬)',0 |
txt_4110 db '¯¨á®ª ¢¥àè¨',0 |
txt_4120 db '¯¨á®ª £à ¥©',0 |
txt_4600 db '¢¥â',0 |
txt_a000 db ' §¢ ¨¥ ¬ â¥à¨ « ',0 |
txt_a200 db '¥ªáâãà ¬ â¥à¨ « 1',0 |
txt_a300 db '¬ï ä ©« ⥪áâãàë',0 |
txt_afff db ' â¥à¨ «',0 |
txt_b000 db 'ä®à¬ æ¨ï ®¡ ¨¬ 樨',0 |
txt_b002 db '®¢¥¤¥¨¥ ®¡ê¥ªâ ',0 |
txt_b010 db ' §¢ ¨¥ ®¡ê¥ªâ ',0 |
txt_b013 db '¥âà ¢à é¥¨ï ®¡ê¥ªâ ',0 |
else |
txt_0002 db '3ds version',0 |
txt_4000 db 'Object (with name)',0 |
txt_4110 db 'Vertices list',0 |
txt_4120 db 'Faces description',0 |
txt_4600 db 'Light',0 |
txt_a000 db 'Material name',0 |
txt_a200 db 'Texture map 1',0 |
txt_a300 db 'Mapping filename',0 |
txt_afff db 'Meterial',0 |
txt_b000 db 'Keyframer',0 |
txt_b002 db 'Mesh information',0 |
txt_b010 db 'Object name',0 |
txt_b013 db 'Object pivot point',0 |
end if |
|
align 4 |
file_3ds: |
.offs: dd 0 ;+0 㪠§ ⥫ì ç «® ¡«®ª |
.size: dd 0 ;+4 à §¬¥à ¡«®ª (¤«ï 1-£® ¯ à ¬¥âà = à §¬¥à ä ©« 3ds) |
rb 8*MAX_FILE_LEVEL+4 |
rb 8*MAX_FILE_LEVEL |
|
size_one_list equ 14 |
size_one_list equ 40 |
list_offs_text equ 12 ;ᤢ¨£ ç « ⥪áâ ¢ «¨á⥠|
buffer rb size_one_list ;¡ãä¥à ¤«ï ¤®¡ ¢«¥¨ï áâàãªâãà ¢ ᯨ᮪ tree1 |
|
if lang eq ru |
288,6 → 321,13 |
align 4 |
timer_funct: |
pushad |
if debug |
mov eax,4 |
mov ebx,(5 shl 16)+8 |
mov ecx,0xff+0x80000000 |
mov edx,txt_0002 |
int 0x40 |
end if |
mcall 26,9 |
mov [last_time],eax |
|
305,7 → 345,12 |
je @f |
mov dword[offs_last_timer],eax |
call buf_draw_beg |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs,5,35,0xd000 |
stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs,5,35,0xb000 |
mov edx,dword[ebx+8] |
cmp edx,0 ;ᬮâਬ ¥áâì «¨ ®¯¨á ¨¥ ¡«®ª |
je .no_info |
stdcall [buf2d_draw_text], buf_0, buf_1,edx,5,45,0xb000 |
.no_info: |
add ecx,eax ;¯®«ãç ¥¬ à §¬¥à ¡«®ª |
stdcall buf_draw_hex_table,eax,ecx ;¤®¡ ¢«¥¨¥ 16-à¨çëå ¤ ëå |
stdcall [buf2d_draw], buf_0 ;®¡®¢«ï¥¬ ¡ãä¥à íªà ¥ |
328,11 → 373,11 |
proc buf_draw_hex_table, offs:dword, size_line:dword |
pushad |
locals |
coord_y dd 45 |
coord_y dd 55 ;ª®®à¤¨ â y ¤«ï ç « ¢ë¢®¤ â ¡«¨æë |
endl |
mov esi,dword[offs] |
mov edi,dword[open_file_lif] |
add edi,dword[file_3ds+4] ;edi - 㪠§ â¥«ì ª®¥æ ä ©« ¢ ¯ ¬ï⨠|
add edi,dword[file_3ds.size] ;edi - 㪠§ â¥«ì ª®¥æ ä ©« ¢ ¯ ¬ï⨠|
mov dword[txt_3ds_offs.dig],0 |
cld |
.cycle_rows: |
525,7 → 570,7 |
mov dword[level_stack],0 ;®¡ã«ï¥¬ ã஢¥ì á⥪ |
mov dword[offs_last_timer],0 |
;--- ¤®¡ ¢«¥¨¥ £« ¢®£® ¡«®ª ¢ ᯨ᮪ |
stdcall add_3ds_object, ID_ICON_CHUNK_MAIN,0,dword[esi+2] |
stdcall add_3ds_object, ID_ICON_CHUNK_MAIN,0,dword[esi+2],0 |
call block_children ;¢å®¤ ¢ ¤®ç¥à¨© ¡«®ª |
|
mov edi,dword[file_3ds.offs] |
537,20 → 582,19 |
cmp esi,edi ;¥á«¨ ª®¥æ ä ©« |
jge .end_cycle |
|
mov edx,dword[esi+2] ;à §¬¥à ¡«®ª |
call block_analiz |
mov edx,dword[esi+2] ;à §¬¥à ¡«®ª |
|
cmp dword[eax],0 |
cmp dword[bl_found],0 |
jne @f |
;®¡ê¥ªâ ¥ ¨§¢¥á⮣® ¢¨¤ |
stdcall add_3ds_object, ID_ICON_CHUNK_NOT_FOUND,dword[level_stack],edx |
stdcall add_3ds_object, ID_ICON_CHUNK_NOT_FOUND,dword[level_stack],edx,0 |
call block_next |
jmp .cycle_main |
@@: |
;®¡ê¥ªâ ¨§¢¥á⮣® ¢¨¤ |
mov ecx,dword[eax] |
mov ecx,dword[bl_found] |
mov bx,word[ecx+2] ;®¬¥à ¨ª®ª¨ ¤«ï ®¡ê¥ªâ |
stdcall add_3ds_object, ebx,dword[level_stack],edx |
stdcall add_3ds_object, ebx,dword[level_stack],edx,dword[ecx+5] |
cmp byte[ecx+4],1 |
je .bl_data |
;¡«®ª ᮤ¥à¦¨â ¤®ç¥à¨¥ ¡«®ª¨ |
559,7 → 603,6 |
.bl_data: |
;¡«®ª ᮤ¥à¦¨â ¤ ë¥ |
call block_analiz_data |
call block_next |
jmp .cycle_main |
.end_cycle: |
stdcall [tl_cur_beg], tree1 |
574,28 → 617,48 |
; «¨§ ¤ ëå ¡«®ª |
;input: |
; esi - memory pointer |
;output: |
; eax - new stack pointer |
; esi - new memory pointer |
align 4 |
block_analiz_data: |
pushad |
mov ax,word[esi] |
push ebx ecx edx edi |
mov dx,word[esi] |
mov ecx,dword[esi+2] |
sub ecx,6 ;à §¬¥à ¤ ëå ¢ ¡«®ª¥ |
add esi,6 |
mov ebx,dword[level_stack] |
inc ebx |
;cmp ax,CHUNK_color_1 |
;jne @f |
; .cycle_0: |
; stdcall add_3ds_object, ID_ICON_DATA,ebx,3 |
; add esi,3 |
; sub ecx,3 |
; cmp ecx,0 |
; jg .cycle_0 |
; jmp .end_f |
;@@: |
stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx |
; *** «¨§ ¡«®ª®¢ á à §ë¬¨ ¤ 묨 ¨ ¢ë¤¥«¥¨¥¬ ¯®¤¡«®ª®¢ |
cmp dx,CHUNK_OBJBLOCK ;®¡ê¥ªâ |
jne @f |
.cycle_0: |
push ax |
cld |
xor al,al |
mov edi,esi |
repne scasb |
pop ax |
sub edi,esi ;edi - strlen |
stdcall add_3ds_object, ID_ICON_DATA,ebx,edi,0 ; §¢ ¨¥ ®¡ê¥ªâ |
add esi,edi |
sub ecx,edi |
jmp .next_bl |
@@: |
; *** «¨§ ¡«®ª á ¤ 묨 ¯® 㬮«ç ¨î (¡¥§ ¢ë¤¥«¥¨ï ¯®¤¡«®ª®¢) |
stdcall add_3ds_object, ID_ICON_DATA,ebx,ecx,0 |
sub esi,6 ;¢®ááâ ®¢«¥¨¥ esi |
call block_next |
jmp .end_f |
.next_bl: |
; *** áâனª¨ ¤«ï «¨§ ®áâ ¢è¨åáï ¯®¤¡«®ª®¢ |
mov dword[eax],esi ;㪠§ ⥫ì ç «® ¡«®ª |
mov ebx,dword[esi+2] |
mov dword[eax+4],ebx ;à §¬¥à ¡«®ª |
inc dword[level_stack] |
add eax,8 |
.end_f: |
popad |
pop edi edx ecx ebx |
ret |
|
;¢å®¤ ¢ 1-© ¤®ç¥à¨© ¡«®ª |
633,6 → 696,7 |
add esi,dword[esi+2] ;¯à®¯ã᪠¥¬ ¤ ë¥ ¡«®ª |
|
;¯à®¢¥àª à §¬¥à®¢ த¨â¥«ì᪮£® ¡«®ª , ¤«ï ¢®§¬®¦®£® ¢ë室 ¢¥à娩 ã஢¥ì ¥á«¨ ª®¥æ ¡«®ª |
@@: |
mov ebx,dword[eax-8] |
add ebx,dword[eax-4] |
cmp esi,ebx |
639,19 → 703,22 |
jl @f |
dec dword[level_stack] |
sub eax,8 |
cmp dword[level_stack],0 |
jg @b |
@@: |
pop ebx |
ret |
|
;äãªæ¨ï ¯®¨áª áâàãªâãàë ®¯¨áë¢ î饩 ¡«®ª |
;input: |
;eax - pointer to stack |
;esi - memory pointer |
;output: |
;dword[eax] - pointer to chunk struct (= 0 if not found) |
;dword[bl_found] - pointer to chunk struct (= 0 if not found) |
align 4 |
bl_found dd 0 |
block_analiz: |
pushad |
mov dword[eax],0 |
mov dword[bl_found],0 |
mov ecx,type_bloks |
@@: |
mov bx,word[ecx] |
662,7 → 729,7 |
jl @b |
jmp .no_found |
.found: |
mov dword[eax],ecx |
mov dword[bl_found],ecx |
.no_found: |
popad |
ret |
670,7 → 737,7 |
;input: |
; esi - 㪠§ â¥«ì «¨§¨àã¥¬ë¥ ¤ ë¥ |
align 4 |
proc add_3ds_object, icon:dword,level:dword,size_bl:dword |
proc add_3ds_object, icon:dword,level:dword,size_bl:dword,info_bl:dword |
pushad |
mov bx,word[icon] |
shl ebx,16 |
681,13 → 748,27 |
mov dword[buffer],eax ;ᬥ饨¥ ¡«®ª |
mov ecx,dword[size_bl] |
mov dword[buffer+4],ecx ;à §¬¥à ¡«®ª (¨á¯®«ì§ã¥âáï ¢ äãªæ¨¨ buf_draw_hex_table ¤«ï à¨á®¢ ¨ï «¨¨¨) |
stdcall hex_in_str, buffer+8,dword[esi+1],2 |
stdcall hex_in_str, buffer+10,dword[esi],2 ;ª®¤ 3ds ¡«®ª |
mov byte[buffer+12],0 |
mov ecx,dword[info_bl] |
mov dword[buffer+8],ecx |
stdcall hex_in_str, buffer+list_offs_text,dword[esi+1],2 |
stdcall hex_in_str, buffer+list_offs_text+2,dword[esi],2 ;ª®¤ 3ds ¡«®ª |
cmp ecx,0 |
jne @f |
mov byte[buffer+list_offs_text+4],0 ;0 - ᨬ¢®« ª®¥æ áâப¨ |
jmp .no_capt |
@@: |
mov byte[buffer+list_offs_text+4],' ' |
mov esi,ecx |
mov edi,buffer+list_offs_text+5 |
mov ecx,size_one_list-(list_offs_text+5) |
cld |
rep movsb |
mov byte[buffer+size_one_list-1],0 ;0 - ᨬ¢®« ª®¥æ áâப¨ |
.no_capt: |
stdcall [tl_node_add], buffer, ebx, tree1 |
stdcall [tl_cur_next], tree1 |
if debug |
stdcall print_err,sz_add_3ds_object,buffer+8 |
stdcall print_err,sz_add_3ds_object,buffer+list_offs_text |
end if |
popad |
ret |
1128,8 → 1209,8 |
db 24 ;+20 bit in pixel |
|
el_focus dd tree1 |
tree1 tree_list size_one_list,100+2, tl_key_no_edit+tl_draw_par_line,\ |
16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,195-16,250, 0,8,0, el_focus,\ |
tree1 tree_list size_one_list,200+2, tl_key_no_edit+tl_draw_par_line,\ |
16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,35,195-16,250, 16,list_offs_text,0, el_focus,\ |
w_scr_t1,0 |
|
align 4 |