; ; BACKGROUND SET - Compile with fasm ; use32 org 0x0 db 'MENUET01' ; 8 byte id dd 0x01 ; version dd START ; program start dd I_END ; image size dd 0x80000 ; reguired amount of memory dd 0x80000 ; stack pointer dd I_Param,0 include 'lang.inc' include '..\..\..\macros.inc' purge mov ; decrease kpack'ed size START: mov eax,48 mov ebx,3 mov ecx,sc mov edx,sizeof.system_colors mcall cmp dword [I_Param], 'BOOT' jz OnBoot call draw_window call load_texture call draw_image still: mov eax,10 ; wait here for event mcall dec eax jz red dec eax jnz button key: mov al,2 mcall jmp still red: call draw_window jmp still button: mov al,17 mcall shr eax,8 cmp al,101 ; tiled jne no101 mov ecx,1 setbgrmode: mov eax,15 mov ebx,4 mcall dec ebx mcall jmp still no101: mov ecx, 2 cmp al, 102 jz setbgrmode no102: cmp al,1 ; end program jnz no_end or eax,-1 mcall no_end: cmp al,11 jz bg cmp al,12 jz bg cmp al,13 jz bg cmp al,121 jb no_bg_select cmp al,133 ja no_bg_select mov eax,[arrays + (eax-121)*4] mov [usearray],eax call load_texture call draw_image jmp still no_bg_select: cmp al,14+20 jge bg4 jmp bg2 OnBoot: call load_texture mov eax,15 mov ebx,1 mov ecx,256 mov edx,256 mcall mov ebx,5 mov ecx,0x40000 ; <<< 0x40000 for blue, 0x40000+1 for red, ; <<< 0x40000+2 for green background at boot mov edx,0 mov esi,256*3*256 mcall dec ebx mov ecx,2 mcall dec ebx mcall mov eax,-1 mcall set_picture: mov eax,image+99-3*16 mov ebx,0x40000+255*3+255*3*256 newpix: mov ecx,[eax] mov [ebx],cx shr ecx,16 mov [ebx+2],cl add eax,3 sub ebx,3 cmp ebx,0x40002 jge newpix ret load_texture: call gentexture call set_picture ret ; set background bg: mov edi,0x40000 cmp al,12 jb bb1 inc edi bb1: cmp al,13 jb bb2 inc edi bb2: mov eax,15 mov ebx,1 mov ecx,256 mov edx,256 mcall mov ebx,5 mov ecx,edi mov edx,0 mov esi,256*256*3 mcall mov ebx,3 mcall jmp still ; colored background bg2: mov edi, eax mcall 15,4,1 mcall ,1,,1 lea ecx, [(edi-14)*3+fill] mcall ,5,,0,3*1*1 mcall ,3 jmp still ; shaped background bg4: shl eax,3 add eax,shape - (14+20)*8 mov ecx,[eax+0] mov edx,[eax+4] mov eax,15 mov ebx,1 mcall mov ebx,3 mcall jmp still ; ********************************************* ; ******* CELLULAR TEXTURE GENERATION ********* ; **** by Cesare Castiglia (dixan/sk/mfx) ***** ; ********* dixan@spinningkids.org ********** ; ********************************************* ; * the algorythm is kinda simple. the color * ; * component for every pixel is evaluated * ; * according to the squared distance from * ; * the closest point in 'ptarray'. * ; ********************************************* gentexture: xor ecx,ecx ; ycounter xor edi,edi ; pixel counter mov ebp,[usearray] ylup: xor ebx,ebx xlup: push edi xor edi, edi mov esi, 512000000 ; abnormous initial value :) pixlup: push esi mov eax,ebx ; evaluate first distance sub eax, [ebp+edi] ; x-x1 call wrappit imul eax mov esi, eax ; (x-x1)^2 mov eax, ecx add edi,4 sub eax, [ebp+edi] ; y-y1 call wrappit imul eax ; (y-y1)^2 add eax,esi ; (x-x1)^2+(y-y1)^2 pop esi cmp esi,eax jb ok ; compare and take the smaller one mov esi,eax ok: add edi,4 cmp [ebp+edi],dword 777 jne pixlup mov eax,esi ; now evaluate color... mov edi,24 ; 50 = max shaded distance idiv edi pop edi mov [image+51+edi],eax add edi,3 add ebx,1 ; bounce x loop cmp ebx,256 ; xsize jne xlup add ecx,1 cmp ecx,256 ; ysize jne ylup ret wrappit: cmp eax,0 ; this makes the texture wrap jg noabs neg eax noabs: cmp eax,128 jb nowrap neg eax add eax,256 nowrap: ret ; ********************************************* ; ******* WINDOW DEFINITIONS AND DRAW ********* ; ********************************************* draw_image: mov eax,7 mov ebx,0x40000 mov ecx,256*65536+255 mov edx,14*65536+40;55 mcall ret y_add equ 19 ; 30 y_s equ 13 y_add2 equ 315 ;325 set equ 0 ;15 draw_window: mov eax, 12 ; tell os about draw mov ebx, 1 mcall xor eax, eax ; define and draw window mov ebx, 220*65536+293 mov ecx, 50*65536+408 mov edx, [sc.work] or edx, 0x34000000 mov edi, title mcall call draw_image mov eax,8 ; Blue button mov ebx,(set+190+27)*65536+17 mov ecx,y_add*65536+y_s mov edx,11 mov esi,0x005555bb mcall ;mov eax,8 ; Red button mov ebx,(set+208+27)*65536+17 mov edx,12 mov esi,0x00bb5555 mcall ;mov eax,8 ; Green button mov ebx,(set+253)*65536+17 mov edx,13 mov esi,0x0055bb55 mcall ;mov eax, 8 ; tiled mov ebx, 90*65536+63 mov ecx, y_add*65536+y_s mov edx, 101 mov esi, [sc.work_button] mcall ;mov eax, 8 ; stretch mov ebx, 154*65536+61 mov edx, 102 mcall mov eax, 4 mov ebx, 215*65536+5 mov ecx, [sc.work_text] mov edx, apply_text mov esi, apply_text.size mcall mov ebx, 14*65536+301 mov edx, image_buttons_text mov esi, image_buttons_text.size mcall mov ebx, 14*65536+(y_add2+27) mov edx, simple_text mov esi, simple_text.size mcall mov ecx, (y_add2)*65536+20 mov ebx, (13)*65536+25 mov edx, 121 mov esi, [sc.work_button] mov edi, 9 mov eax, 8 @@: mcall add ebx, 29*65536 inc edx dec edi jnz @b mov edx, 34+4 mov edi, 4 ;mov eax, 8 mov ebx, 13*65536+18 mov ecx, y_add*65536+y_s @@: mcall inc edx add ebx, 19*65536 dec edi jnz @b ;----------------------- mov eax,8 mov edx,14 ; button number mov ebx,(13)*65536+17 ; button start x & size mov ecx,(y_add2+40)*65536+14 ; button start y & size newcb: mov esi,[(edx-14)*4+colors] mcall inc edx add ebx,20*65536 cmp edx,27 jnz newcb ;----------------------- mov eax, 4 mov ebx, 94*65536+4+y_add mov ecx, [sc.work_button_text] mov edx, la2 mov esi, la2.size mcall mov eax,12 mov ebx,2 mcall ret ; DATA SECTION if lang eq ru title db 'ƒ¥­¥à â®à ä®­  à ¡®ç¥£® á⮫ ',0 else title db 'Background',0 end if lsz apply_text,\ ru, "ਬ¥­¨âì:",\ en, "Apply:" lsz image_buttons_text,\ ru, "‚ë¡¥à¨â¥ ®¡à §¥æ:",\ en, "Select pattern:" lsz simple_text,\ ru, "Ž¤­®æ¢¥â­ë© ä®­:",\ en, "Single-color background:" lsz la2,\ ru, "‡€ŒŽ‘’ˆ’œ €‘’Ÿ“’œ",\ en, " TILED STRETCH" xx db 'x' colors: dd 0x770000 dd 0x007700 dd 0x000077 dd 0x777700 dd 0x770077 dd 0x007777 dd 0x777777 dd 0x335577 dd 0x775533 dd 0x773355 dd 0x553377 dd 0x111111 dd 0xcccccc fill: db 0x00,0x00,0x77 db 0x00,0x77,0x00 db 0x77,0x00,0x00 db 0x00,0x77,0x77 db 0x77,0x00,0x77 db 0x77,0x77,0x00 db 0x77,0x77,0x77 db 0x77,0x55,0x33 db 0x33,0x55,0x77 db 0x55,0x33,0x77 db 0x77,0x33,0x55 db 0x11,0x11,0x11 db 0xcc,0xcc,0xcc shape: dd 1024,64 dd 1024,32 dd 2048,32 dd 4096,32 dd 512,16 dd 1024,16 dd 2048,16 dd 4096,16 dd 64,32 dd 64,16 dd 32,32 dd 8,8 dd 16,16 dd 64,64 usearray dd ptarray arrays dd ptarray,ptarray2,ptarray3,ptarray4,ptarray5,ptarray6 dd ptarray7,ptarray8,ptarray9 ptarray: dd 150,50 dd 120,30 dd 44,180 dd 50,66 dd 27,6 dd 95,212 dd 128,177 dd 201,212 dd 172,201 dd 250,100 dd 24,221 dd 11,123 dd 248,32 dd 34,21 dd 777 ; <- end of array ptarray2: dd 0,0,50,50,100,100,150,150,200,200,250,250 dd 50,150,150,50,200,100,100,200 dd 777 ptarray3: dd 55,150,150,55,200,105,105,200 dd 30,30,220,220 dd 777 ptarray4: dd 196,0,196,64,196,128,196,196 dd 64,32,64,96,64,150,64,228 dd 777 ptarray5: dd 196,0,196,64,196,128,196,196 dd 64,0,64,64,64,128,64,196 dd 777 ptarray6: dd 49,49,128,50,210,50 dd 50,128,128,128,210,128 dd 50,210,128,210,210,210 dd 777 ptarray7: dd 0,0 dd 196,196,64,64 dd 128,0 dd 0,128 dd 64,64,196,64 dd 196,196,64,196 dd 128,128 dd 777 ptarray8: dd 0, 128 dd 0, 128 dd 128, 0 dd 0, 128 dd 128, 0 dd 0, 128 dd 128, 0 dd 0, 128 dd 128, 0 dd 128, 128 dd 777 ptarray9: dd 0,248,64,128,128,64,196,48,160,160,94,224,240,96,5,5,777 I_END: sc system_colors I_Param: image: