From d00cd6a6041a5be0c9dd1bdad4bac816706b447c Mon Sep 17 00:00:00 2001 From: IgorA Date: Tue, 12 Jun 2012 09:56:51 +0000 Subject: [PATCH] update 'voxel_editor' git-svn-id: svn://kolibrios.org@2759 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../develop/libraries/buf2d/trunk/about.htm | 79 ++++++++- .../develop/libraries/buf2d/trunk/buf2d.asm | 23 +-- programs/media/voxel_editor/trunk/house1.vox | Bin 3988 -> 15960 bytes programs/media/voxel_editor/trunk/vaz2106.vox | Bin 0 -> 7464 bytes .../media/voxel_editor/trunk/voxel_editor.asm | 156 ++++++++++++++---- 5 files changed, 209 insertions(+), 49 deletions(-) create mode 100644 programs/media/voxel_editor/trunk/vaz2106.vox diff --git a/programs/develop/libraries/buf2d/trunk/about.htm b/programs/develop/libraries/buf2d/trunk/about.htm index 43d85831e3..5b87002478 100644 --- a/programs/develop/libraries/buf2d/trunk/about.htm +++ b/programs/develop/libraries/buf2d/trunk/about.htm @@ -49,9 +49,15 @@ table { font-size: 15px; }

Оглавление

@@ -60,11 +66,13 @@ table { font-size: 15px; }

Документация к свободной библиотеке buf2d.asm, для ОС Колибри. Эта библиотека создана для работы с 2d изображениями. С ее помощью можно создавать буфера с изображениями в памяти, и при необходимости выводить их на экран. - Изображения можно накладывать одно на другое, поддерживается работа с прозрачными изображениями, есть функция рисования лини пока на этом все.

+ Изображения можно накладывать одно на другое, поддерживается работа с прозрачными изображениями. + Есть функции рисования линий, кривых Безье, прямоугольников, окружностей. + Также есть функции для рисований воксельной графики.

-

Последнее обновление библиотеки 11.05.12.

+

Последнее обновление библиотеки 12.06.12.

-

Форматы буферов

+

Форматы буферов

Поддерживается 3 формата буферов. Каждая функция при работе с буферами может быть расчитана на работу с определенными форматами изображений.

@@ -90,11 +98,14 @@ buf_0: dd 0x80 ;+16 фоновый цвет db 24 ;+20 бит на пиксель -

lib_init

+

lib_init

Эта функция получает указатели на функции работы с памятью, вызыватся должна при загрузке библиотеки. Можете использовать макрос @use_library_mem, для ее автоматической настройки.

-

buf2d_create

-

Создает буфер и чистит его фоновым цветом.

+

buf2d_create

+

Создает буфер и чистит его фоновым цветом. Пример:

+
stdcall [buf2d_create], buf_0
+

где buf_0 - структура буфера.

+

Параметры для создания буфера берутся из структуры.

buf2d_create_f_img

Создает буфер на основе изображения в формате rgb.

@@ -229,6 +240,33 @@ stdcall [buf2d_convert_text_matrix], buf_1

100,150 - координаты точки;

eax - цвет точки (для 8 и 24 битных буферов не используемые старшие биты в eax равны 0) или значение -1 в случае ошибки.

+

buf2d_vox_brush_create

+

Создание воксельной кисти.

+ +

buf2d_vox_brush_delete

+

Удаление воксельной кисти.

+ +

buf2d_vox_obj_get_img_w_3g

+

Возврашает ширину воксельного изображения с 3-мя гранями (которое рисуется функцией buf2d_vox_obj_draw_3g), принимает указатель на кисть и масштаб.

+ +

buf2d_vox_obj_get_img_h_3g

+

Возврашает высоту воксельного изображения с 3-мя гранями (которое рисуется функцией buf2d_vox_obj_draw_3g), принимает указатель на кисть и масштаб.

+ +

buf2d_vox_obj_draw_3g

+

Рисование воксельного объекта с 3-мя гранями.

+ +

buf2d_vox_obj_draw_3g_scaled

+

Рисование части воксельного объекта.

+ +

buf2d_vox_obj_draw_3g_shadows

+

Функция рисующая тени для изображений нарисованных с помощью функции buf2d_vox_obj_draw_3g или buf2d_vox_obj_draw_3g_scaled.

+ +

buf2d_vox_obj_draw_pl

+

Функция рисующая срез воксельного обьекта.

+ +

buf2d_vox_obj_draw_pl_scaled

+

Функция рисующая срез части воксельного обьекта.

+

Константы

BUF2D_OPT_CROP_TOP equ 1

Константа для функции buf2d_crop_color, обозначает обрезку буфера сверху

@@ -271,6 +309,17 @@ import_buf2d_lib: 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_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_lib_init db 'lib_init',0 sz_buf2d_create db 'buf2d_create',0 @@ -298,7 +347,18 @@ import_buf2d_lib: 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_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_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

История

02.07.10 - самая первая версия библиотеки, 2 примера использования.

@@ -321,5 +381,6 @@ import_buf2d_lib:

20.02.12 - функции buf2d_filled_rect_by_size и buf2d_rect_by_size могут принимать отрицательные размеры для прямоугольников, в функции buf2d_line горизонтальная линия рисуется на 1 пиксель длинее (раньше не дорисовывало), некоторые функции могут рисовать в 8 битных буферах.

23.02.12 - функция buf2d_bit_blt_alpha может принимать отрицательные координаты в позиции копируемого буфера, небольшие доработки в buf2d_bit_blt_transp

11.05.12 - добавлена функция для взятия цвета точки buf2d_get_pixel, доработки в buf2d_set_pixel.

+

12.06.12 - добавлены функции для рисования воксельной графики.

\ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/buf2d.asm b/programs/develop/libraries/buf2d/trunk/buf2d.asm index df46efba8d..9d6278e9dc 100644 --- a/programs/develop/libraries/buf2d/trunk/buf2d.asm +++ b/programs/develop/libraries/buf2d/trunk/buf2d.asm @@ -2912,13 +2912,13 @@ endp align 4 proc vox_add, buf_v1:dword, buf_v2:dword, coord_x:dword, coord_y:dword, coord_z:dword pushad - mov eax,[coord_x] - mov ebx,[coord_y] + mov ebx,[coord_x] + mov eax,[coord_y] mov edi,[buf_v2] mov ecx,buf2d_h mov esi,buf2d_w imul ecx,esi - add esi,eax + add esi,ebx mov edx,buf2d_data cld ;ecx - count pixels in voxel @@ -2929,23 +2929,24 @@ pushad cmp dword[edx],0 je @f ;Їа®ўҐа塞 ЎгдҐа Ј«гЎЁ­л - push eax ecx esi + push eax ecx edi esi mov ecx,eax - stdcall buf_get_pixel, [buf_v1],ecx,ebx + mov edi,[buf_v1] + call get_pixel_32 ;stdcall buf_get_pixel, [buf_v1],ebx,ecx mov esi,[edx] add esi,[coord_z] cmp eax,esi jge .end_draw - stdcall buf_set_pixel, [buf_v1],ecx,ebx,esi ;esi = new coord z + stdcall buf_set_pixel, [buf_v1],ebx,ecx,esi ;esi = new coord z .end_draw: - pop esi ecx eax + pop esi edi ecx eax @@: add edx,4 - inc eax - cmp eax,esi + inc ebx + cmp ebx,esi jl @f - inc ebx - sub eax,buf2d_w + inc eax + sub ebx,buf2d_w @@: loop .cycle popad diff --git a/programs/media/voxel_editor/trunk/house1.vox b/programs/media/voxel_editor/trunk/house1.vox index ec0db8ab4aaed5eb22c0eda7e0145dca5812a71d..4003ee679fd3c37751c20f21b1e633078505a843 100644 GIT binary patch literal 15960 zcmeHOyN+B%5WV{tY}pno64I5($Sm;z@CV+6#0eQO8NWbAOyo&6K|+ud>`0R$t;Gj` z6H+8(I{};ZIX!h+H9a+R`)=P^d)8yA)YaAX>aObQzCG(nhkpl$N5_*7?f^Tv>bf6K zPcME0{0$)f9iTH{U%1-7@oym$$$b{+iufX0tt|N>-WD4D>6>%k_-$JgtuymRd7-w2 zM!hZak?gMM-0#0&?_OP8-23y%le>V9IDjqTd(b$h{#;{@=K0Uucqx}<9Z#Y;U9^+= z96i${iyVFq*onM@&zFD)^1Z;nar5N-ABqoj#l*{Q(v@Ysp2D8j^$*5U%*+QL%hIov zSV6|i(spPcae58-(jYo}T4>bUA|J`_icaP~;S+$)2KI%k?HiXK@vDt=4Waef?Hk{Q zU%%R#4Vj15Lv19h{1%VeAA)$0SL13UKCVw>YaMMJT{hI#^1bajy~Oy z?fV(v>u0Ksps}Xc&`TaK@9|nYPifnoEm=Qkhem$|o|*YbKRsT``>`V@lX1j}JezcS z9Ujj*An)-P@H6q5zh1`UUgm_n#^2FT+e6IxzIxL)P93#-r-~1L9sv{&KM&$%U-P+@ zHO%H4&KYAr0nU9~(dT-6YHeB@;4{}hak$34{zHuW{$2EWKU#Mm-gNgW?@JG58$PFd z9NGu;-{wHO+>=A^*h~8ox^nJ#T(;424e0mW(Xoe)>aCTJ&Z-t!)+t}B zJkGjPtGkx(U7aiaAH60+r*cO3CAG{c;c6pVRQn^oh<4lN^Pk12HrHzT-pQOqjoNfZ zK(n5Qmb+X0``CZ{_@atSq z8=d{p`4Gu6ZY{A}C%cX=pVij#?bm2I?$NsK_viSzJVQNPdT&5oBu({l9e(6^Jl^}> zV0GEctbCJV&;AS8iMok(m>Ou!*cbj)F_zDt4Rp`r@f)#&b>G+Q^wW&Yd3Vi)h&f_%psiH}{j@Qzc&Z zWt*|%8qNWtX&(9e0Ct~g960%W%nyvlwaELHG=t2`ajz#BCvVcz!`G*$T}Rj5!yf0~ z1L;l`y&0_3Jn+}@ZR_l=wO`A(EkCKZ)`wcY(S1c8^8Gx$sasAi<(|>Vlj%m|K3SqM z-!W&tqtZ_T?-BYADqD`1w4wa6Q|j?=xsjc6e5l=_{A2k^Jwt5|~pODTdh-=*CinT4p`v+w>*#gd$E`O3-T!!i#tw|C2dWvW*r(Y zH%*^N38U>8MXOY%Qt$w z;OmX;ZLHTbz;w+TbF3rSU17}o+-R|df2V-bSAQ<&oWMNNTfADxeFz|L`+N8}I(Wak ziNAZUnlskv9RB1SU>*Sc+CIW~;<2%mD+SLl)WLCUvpi_WMrVu&@w?ul7Btlr+A&)P JuygI4c>_RLwIl!l literal 3988 zcmcInu}&L75Iq|^AP2==N|5MML_(r$GVIRTcie$An%TEAvoo`^<6~UlZ!p{$jbH3Sny!lC>*3+@7W5lLxk%`9 zviAEY!CoIe=r{7+1?wfh)p9xcwOAD3q;n@1Cf{(+A?4Q z&`;0@kiQ?w#8XUb-n(S+K77z`GCN@3)GOlf73L1zH_5qsSnq>;PgcD`f97)sIz!M@m^d)*MfglQ;+Pfe4d%#x zi{2t}-BZe$ldvwfJio1dTm4S?p`O(pKvo}}Qf4h3|BQra= zf1R8W&BzSHxxMFtI7UX%TY8B-&awm5S{zt3-^Mj~H{GI`Snliv-w$4HTpRPHw;@h@ z$>NXBLvDM_-|Qp(41>)Cq@Jo|_~7iWi`mch%%|BZ#;rb*7>3Njes><=i{Eh3Ea2PI z8RC&%gf+FTi#^J@4c10ixrs-%ooa;oXKxu8zcJJo<$ifDhN1S1BZ?)%;3u0=HP{^Z z+@FK>F-X6m<@Ybw&v8C{@|&UVw>bKqXo}VSAJWu5tEt7Ro)C}x{b{O;y56~3^X{*? zHsYMkWcdCIdUAZp8IStJ`XD>k@K>;HGtZ~cFXtn;@9k>l0l%kjPaDoS^LiE&VVx|%{@XQMM@i&DUk9ANkfyybQBa9 z5Cw%%XpxZ23jo(dks?LM=eyZi#=qa}@AiC2f#mVb&d&ec+28K%j7Fo4tpS#gZVAVWVzlvx)HDE zGl~P=3n1k=o6S;=!r}>gfY+4U3UZ3EHO^K!N}Fs(HR5LQMB$D z?tSMXKb%|TJEd@Rj$v=85AH}N%cVXNt-7LD>ygta#;g2ikYn|vWhRvuKaQH@E``OX8UW;tB@&;|nx5ZG2HTm&!ME<>B3yUAzs{?YExl4WL zY^pxLN4DYp(2+~E%=gA#EXYRZyWSFI4Kn=%EHJ*OU%@Z$hU`mnh3E8I{k6&|)}Mi^ z&c~0ARvgdVSZ|<%JofyboQ!l{(5t22pzWI)#kDSPU46ytLErnEz{de!lH0&-;Fx|q zQcnV+g*7kwzpLtsi<#SdA0qU^vN^zOU6~3UQV&HpWgZXOM6xj-M~F~^KH{q7dP}_{ znGW>Ujr-<-?w-g!$zVDf8-3xe=J@5FD_*`YMQ3pIHf)k3g1^YO+==j0>fqw&<;C2e zZeDprG7;}SvVVJBcMq)DY09M%gKDF9WAy!w?5@jOSKs!8;ZKQQ??xMc?r8CDxUt?k vCwc7oUpg7-=-aHf`Bwp7o;Cn`i-vDb=DY9F{k+eQvFYEOp5A9J{qFrQswID3 literal 0 HcmV?d00001 diff --git a/programs/media/voxel_editor/trunk/voxel_editor.asm b/programs/media/voxel_editor/trunk/voxel_editor.asm index ead0afa8e8..90b8b4e96a 100644 --- a/programs/media/voxel_editor/trunk/voxel_editor.asm +++ b/programs/media/voxel_editor/trunk/voxel_editor.asm @@ -9,15 +9,15 @@ use32 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 '../../../../programs/macros.inc' +include '../../../../programs/proc32.inc' +include '../../../../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 11.06.12',0 ;Ї®¤ЇЁбм ®Є­  +caption db 'Voxel editor 12.06.12',0 ;Ї®¤ЇЁбм ®Є­  struct FileInfoBlock Function dd ? @@ -302,12 +302,7 @@ pushad 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 ;®Ў­®ў«пҐ¬ ЎгдҐа ­  нЄа ­Ґ - 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 + call on_change_color ;®в®Ўа ¦ Ґ¬ Ё§¬Ґ­Ґ­Ёп жўҐв  .end_f: popad ret @@ -472,24 +467,21 @@ draw_pok: mov eax,47 mov ecx,[v_zoom] - mov ebx,(2 shl 16) + mov ebx,(3 shl 16)+(1 shl 31) 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 ; + int 0x40 ;­®¬Ґа бҐзҐ­Ёп mov eax,4 ;аЁб®ў ­ЁҐ ⥪бв  mov ebx,(OT_CAPT_X_COLOR shl 16)+OT_CAPT_Y_COLOR+2 @@ -498,10 +490,25 @@ draw_pok: mov edx,txt_color 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 @@ -529,11 +536,11 @@ button: @@: cmp ah,6 jne @f - call but_1 + call but_zoom_p @@: cmp ah,7 jne @f - call but_2 + call but_zoom_m @@: cmp ah,8 jne @f @@ -639,6 +646,9 @@ but_open_file: 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 @@ -679,7 +689,7 @@ but_save_file: ;㢥«ЁзҐ­ЁҐ ¬ бив Ў  align 4 -but_1: +but_zoom_p: cmp dword[v_zoom],10 ;¬ ЄбЁ¬ «м­л© а §¬Ґа, ¤® Є®в®а®Ј® ¬®¦­® 㢥«ЁзЁвм 2^10=1024 jge @f inc dword[v_zoom] @@ -688,9 +698,21 @@ but_1: 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 @@ -700,8 +722,8 @@ but_1: ;㬥­м襭ЁҐ ¬ бив Ў  align 4 -but_2: - cmp dword[v_zoom],-1 +but_zoom_m: + cmp dword[v_zoom],1 jl @f dec dword[v_zoom] shr dword[n_plane],1 @@ -711,6 +733,17 @@ but_2: 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 @@ -731,21 +764,83 @@ but_4: call draw_objects ret +;б¤ўЁЈ Ґ¬ Ї«®бЄ®бвм б१  align 4 but_5: +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_6: + dec dword[n_plane] cmp dword[n_plane],0 - jle @f - dec dword[n_plane] - call draw_objects - call draw_pok - @@: + 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 @@ -922,8 +1017,10 @@ draw_objects: 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, [v_zoom], [n_plane], 0xd0d0d0 + 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, [v_zoom], [n_plane], [sc.work_graph] 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 @@ -1179,9 +1276,10 @@ import_buf2d: buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g 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 - buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows + dd 0,0 sz_init db 'lib_init',0 sz_buf2d_create db 'buf2d_create',0 @@ -1214,9 +1312,9 @@ import_buf2d: sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',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 - sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0 mouse_dd dd 0x0 sc system_colors