Rev 532 | Rev 651 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
205 | heavyiron | 1 | ; |
2 | ; BACKGROUND SET - Compile with fasm |
||
3 | ; |
||
4 | use32 |
||
5 | org 0x0 |
||
6 | db 'MENUET01' ; 8 byte id |
||
7 | dd 0x01 ; version |
||
8 | dd START ; program start |
||
9 | dd I_END ; image size |
||
451 | heavyiron | 10 | dd 0x80000 ; reguired amount of memory |
205 | heavyiron | 11 | dd 0x80000 ; stack pointer |
12 | dd I_Param,0 |
||
13 | |||
14 | include 'lang.inc' |
||
485 | heavyiron | 15 | include '..\..\..\macros.inc' |
532 | diamond | 16 | purge mov ; decrease kpack'ed size |
205 | heavyiron | 17 | |
18 | START: |
||
451 | heavyiron | 19 | mov eax,48 |
20 | mov ebx,3 |
||
21 | mov ecx,sc |
||
22 | mov edx,sizeof.system_colors |
||
23 | mcall |
||
205 | heavyiron | 24 | |
532 | diamond | 25 | cmp dword [I_Param], 'BOOT' |
26 | jz OnBoot |
||
27 | |||
205 | heavyiron | 28 | call draw_window |
29 | |||
30 | call load_texture |
||
31 | call draw_image |
||
32 | |||
451 | heavyiron | 33 | |
205 | heavyiron | 34 | still: |
35 | |||
36 | mov eax,10 ; wait here for event |
||
485 | heavyiron | 37 | mcall |
38 | |||
39 | dec eax |
||
205 | heavyiron | 40 | jz red |
485 | heavyiron | 41 | dec eax |
42 | jnz button |
||
205 | heavyiron | 43 | |
44 | key: |
||
485 | heavyiron | 45 | mov al,2 |
46 | mcall |
||
205 | heavyiron | 47 | jmp still |
48 | |||
49 | red: |
||
50 | call draw_window |
||
51 | jmp still |
||
52 | |||
53 | button: |
||
485 | heavyiron | 54 | mov al,17 |
55 | mcall |
||
205 | heavyiron | 56 | |
57 | shr eax,8 |
||
58 | |||
532 | diamond | 59 | cmp al,101 ; tiled |
205 | heavyiron | 60 | jne no101 |
532 | diamond | 61 | mov ecx,1 |
62 | setbgrmode: |
||
205 | heavyiron | 63 | mov eax,15 |
64 | mov ebx,4 |
||
485 | heavyiron | 65 | mcall |
532 | diamond | 66 | dec ebx |
485 | heavyiron | 67 | mcall |
205 | heavyiron | 68 | jmp still |
69 | no101: |
||
70 | |||
532 | diamond | 71 | mov ecx, 2 |
72 | cmp al, 102 |
||
73 | jz setbgrmode |
||
205 | heavyiron | 74 | no102: |
75 | |||
532 | diamond | 76 | cmp al,1 ; end program |
485 | heavyiron | 77 | jnz no_end |
205 | heavyiron | 78 | or eax,-1 |
485 | heavyiron | 79 | mcall |
80 | no_end: |
||
205 | heavyiron | 81 | |
532 | diamond | 82 | cmp al,11 |
205 | heavyiron | 83 | jz bg |
532 | diamond | 84 | cmp al,12 |
205 | heavyiron | 85 | jz bg |
532 | diamond | 86 | cmp al,13 |
205 | heavyiron | 87 | jz bg |
88 | |||
532 | diamond | 89 | cmp al,121 |
205 | heavyiron | 90 | jb no_bg_select |
532 | diamond | 91 | cmp al,133 |
92 | ja no_bg_select |
||
93 | mov eax,[arrays + (eax-121)*4] |
||
205 | heavyiron | 94 | mov [usearray],eax |
95 | call load_texture |
||
96 | call draw_image |
||
97 | jmp still |
||
98 | no_bg_select: |
||
99 | |||
532 | diamond | 100 | cmp al,14+20 |
205 | heavyiron | 101 | jge bg4 |
102 | |||
103 | jmp bg2 |
||
104 | |||
105 | |||
532 | diamond | 106 | OnBoot: |
205 | heavyiron | 107 | |
108 | call load_texture |
||
109 | |||
110 | mov eax,15 |
||
111 | mov ebx,1 |
||
112 | mov ecx,256 |
||
113 | mov edx,256 |
||
485 | heavyiron | 114 | mcall |
205 | heavyiron | 115 | |
116 | mov ebx,5 |
||
117 | mov ecx,0x40000 ; <<< 0x40000 for blue, 0x40000+1 for red, |
||
118 | ; <<< 0x40000+2 for green background at boot |
||
119 | mov edx,0 |
||
120 | mov esi,256*3*256 |
||
485 | heavyiron | 121 | mcall |
205 | heavyiron | 122 | |
532 | diamond | 123 | dec ebx |
205 | heavyiron | 124 | mov ecx,2 |
485 | heavyiron | 125 | mcall |
205 | heavyiron | 126 | |
532 | diamond | 127 | dec ebx |
485 | heavyiron | 128 | mcall |
205 | heavyiron | 129 | |
130 | mov eax,-1 |
||
485 | heavyiron | 131 | mcall |
205 | heavyiron | 132 | |
133 | |||
134 | |||
135 | set_picture: |
||
136 | |||
137 | mov eax,image+99-3*16 |
||
138 | mov ebx,0x40000+255*3+255*3*256 |
||
139 | newpix: |
||
140 | mov ecx,[eax] |
||
141 | mov [ebx],cx |
||
142 | shr ecx,16 |
||
143 | mov [ebx+2],cl |
||
144 | add eax,3 |
||
145 | sub ebx,3 |
||
146 | cmp ebx,0x40002 |
||
147 | jge newpix |
||
148 | |||
149 | ret |
||
150 | |||
151 | |||
152 | load_texture: |
||
153 | |||
154 | call gentexture |
||
155 | call set_picture |
||
156 | |||
157 | ret |
||
158 | |||
159 | |||
160 | ; set background |
||
161 | |||
162 | bg: |
||
163 | |||
164 | mov edi,0x40000 |
||
165 | |||
532 | diamond | 166 | cmp al,12 |
205 | heavyiron | 167 | jnz bb1 |
532 | diamond | 168 | inc edi |
205 | heavyiron | 169 | bb1: |
532 | diamond | 170 | cmp al,13 |
205 | heavyiron | 171 | jnz bb2 |
532 | diamond | 172 | inc edi |
205 | heavyiron | 173 | bb2: |
174 | |||
175 | mov eax,15 |
||
176 | mov ebx,1 |
||
177 | mov ecx,256 |
||
178 | mov edx,256 |
||
485 | heavyiron | 179 | mcall |
205 | heavyiron | 180 | |
181 | mov ebx,5 |
||
182 | mov ecx,edi |
||
183 | mov edx,0 |
||
184 | mov esi,256*256*3 |
||
485 | heavyiron | 185 | mcall |
205 | heavyiron | 186 | |
187 | mov ebx,3 |
||
485 | heavyiron | 188 | mcall |
205 | heavyiron | 189 | |
190 | jmp still |
||
191 | |||
192 | |||
193 | ; colored background |
||
194 | |||
195 | bg2: |
||
532 | diamond | 196 | mov edi, eax |
197 | mcall 15,4,1 |
||
198 | mcall ,1,,1 |
||
199 | lea ecx, [(edi-14)*3+fill] |
||
200 | mcall ,5,,0,3*1*1 |
||
201 | mcall ,3 |
||
205 | heavyiron | 202 | |
203 | jmp still |
||
204 | |||
205 | |||
206 | ; shaped background |
||
207 | |||
208 | bg4: |
||
209 | |||
210 | shl eax,3 |
||
532 | diamond | 211 | add eax,shape - (14+20)*8 |
205 | heavyiron | 212 | mov ecx,[eax+0] |
213 | mov edx,[eax+4] |
||
214 | |||
215 | mov eax,15 |
||
216 | mov ebx,1 |
||
485 | heavyiron | 217 | mcall |
205 | heavyiron | 218 | |
219 | mov ebx,3 |
||
485 | heavyiron | 220 | mcall |
205 | heavyiron | 221 | |
222 | jmp still |
||
223 | |||
224 | |||
225 | ; ********************************************* |
||
226 | ; ******* CELLULAR TEXTURE GENERATION ********* |
||
227 | ; **** by Cesare Castiglia (dixan/sk/mfx) ***** |
||
228 | ; ********* dixan@spinningkids.org ********** |
||
229 | ; ********************************************* |
||
230 | ; * the algorythm is kinda simple. the color * |
||
231 | ; * component for every pixel is evaluated * |
||
232 | ; * according to the squared distance from * |
||
233 | ; * the closest point in 'ptarray'. * |
||
234 | ; ********************************************* |
||
235 | |||
236 | gentexture: |
||
237 | |||
532 | diamond | 238 | xor ecx,ecx ; ycounter |
239 | xor edi,edi ; pixel counter |
||
205 | heavyiron | 240 | |
241 | mov ebp,[usearray] |
||
242 | |||
243 | ylup: |
||
532 | diamond | 244 | xor ebx,ebx |
205 | heavyiron | 245 | |
246 | xlup: |
||
247 | push edi |
||
532 | diamond | 248 | xor edi, edi |
205 | heavyiron | 249 | mov esi, 512000000 ; abnormous initial value :) |
250 | |||
251 | pixlup: |
||
252 | push esi |
||
253 | mov eax,ebx ; evaluate first distance |
||
254 | sub eax, [ebp+edi] ; x-x1 |
||
255 | call wrappit |
||
256 | imul eax |
||
257 | mov esi, eax ; (x-x1)^2 |
||
258 | mov eax, ecx |
||
259 | add edi,4 |
||
260 | sub eax, [ebp+edi] ; y-y1 |
||
261 | call wrappit |
||
262 | imul eax ; (y-y1)^2 |
||
263 | add eax,esi ; (x-x1)^2+(y-y1)^2 |
||
264 | pop esi |
||
265 | |||
266 | cmp esi,eax |
||
267 | jb ok ; compare and take the smaller one |
||
268 | mov esi,eax |
||
269 | |||
270 | ok: |
||
271 | add edi,4 |
||
272 | cmp [ebp+edi],dword 777 |
||
273 | jne pixlup |
||
274 | |||
275 | mov eax,esi ; now evaluate color... |
||
276 | |||
277 | mov edi,24 ; 50 = max shaded distance |
||
278 | idiv edi |
||
279 | |||
280 | pop edi |
||
281 | mov [image+51+edi],eax |
||
282 | add edi,3 |
||
283 | |||
284 | add ebx,1 ; bounce x loop |
||
285 | cmp ebx,256 ; xsize |
||
286 | jne xlup |
||
287 | |||
288 | add ecx,1 |
||
289 | cmp ecx,256 ; ysize |
||
290 | jne ylup |
||
291 | |||
292 | ret |
||
293 | |||
294 | wrappit: |
||
295 | cmp eax,0 ; this makes the texture wrap |
||
296 | jg noabs |
||
297 | neg eax |
||
298 | noabs: |
||
299 | cmp eax,128 |
||
300 | jb nowrap |
||
301 | neg eax |
||
302 | add eax,256 |
||
303 | nowrap: |
||
304 | ret |
||
305 | |||
306 | ; ********************************************* |
||
307 | ; ******* WINDOW DEFINITIONS AND DRAW ********* |
||
308 | ; ********************************************* |
||
309 | |||
310 | |||
311 | draw_image: |
||
312 | |||
313 | mov eax,7 |
||
314 | mov ebx,0x40000 |
||
315 | mov ecx,256*65536+255 |
||
451 | heavyiron | 316 | mov edx,14*65536+40;55 |
485 | heavyiron | 317 | mcall |
205 | heavyiron | 318 | |
319 | ret |
||
320 | |||
321 | |||
451 | heavyiron | 322 | y_add equ 19 ; 30 |
205 | heavyiron | 323 | y_s equ 13 |
324 | |||
451 | heavyiron | 325 | y_add2 equ 315 ;325 |
205 | heavyiron | 326 | set equ 0 ;15 |
327 | |||
328 | draw_window: |
||
329 | |||
330 | mov eax, 12 ; tell os about draw |
||
331 | mov ebx, 1 |
||
485 | heavyiron | 332 | mcall |
205 | heavyiron | 333 | |
451 | heavyiron | 334 | xor eax, eax ; define and draw window |
205 | heavyiron | 335 | mov ebx, 220*65536+293 |
336 | mov ecx, 50*65536+408 |
||
451 | heavyiron | 337 | mov edx, [sc.work] |
551 | spraid | 338 | or edx, 0x34000000 |
485 | heavyiron | 339 | mov edi, title |
340 | mcall |
||
205 | heavyiron | 341 | |
342 | call draw_image |
||
343 | |||
344 | mov eax,8 ; Blue button |
||
451 | heavyiron | 345 | mov ebx,(set+190+27)*65536+17 |
205 | heavyiron | 346 | mov ecx,y_add*65536+y_s |
347 | mov edx,11 |
||
451 | heavyiron | 348 | mov esi,0x005555bb |
485 | heavyiron | 349 | mcall |
451 | heavyiron | 350 | ;mov eax,8 ; Red button |
351 | mov ebx,(set+208+27)*65536+17 |
||
205 | heavyiron | 352 | mov edx,12 |
451 | heavyiron | 353 | mov esi,0x00bb5555 |
485 | heavyiron | 354 | mcall |
451 | heavyiron | 355 | ;mov eax,8 ; Green button |
356 | mov ebx,(set+253)*65536+17 |
||
205 | heavyiron | 357 | mov edx,13 |
451 | heavyiron | 358 | mov esi,0x0055bb55 |
485 | heavyiron | 359 | mcall |
205 | heavyiron | 360 | |
451 | heavyiron | 361 | ;mov eax, 8 ; tiled |
362 | mov ebx, 90*65536+63 |
||
205 | heavyiron | 363 | mov ecx, y_add*65536+y_s |
364 | mov edx, 101 |
||
451 | heavyiron | 365 | mov esi, [sc.work_button] |
485 | heavyiron | 366 | mcall |
205 | heavyiron | 367 | |
451 | heavyiron | 368 | ;mov eax, 8 ; stretch |
369 | mov ebx, 154*65536+61 |
||
205 | heavyiron | 370 | mov edx, 102 |
485 | heavyiron | 371 | mcall |
205 | heavyiron | 372 | |
451 | heavyiron | 373 | mov eax, 4 |
374 | mov ebx, 215*65536+5 |
||
375 | mov ecx, [sc.work_text] |
||
205 | heavyiron | 376 | mov edx, apply_text |
377 | mov esi, apply_text.size |
||
485 | heavyiron | 378 | mcall |
205 | heavyiron | 379 | |
451 | heavyiron | 380 | mov ebx, 14*65536+301 |
205 | heavyiron | 381 | mov edx, image_buttons_text |
382 | mov esi, image_buttons_text.size |
||
485 | heavyiron | 383 | mcall |
205 | heavyiron | 384 | |
451 | heavyiron | 385 | mov ebx, 14*65536+(y_add2+27) |
205 | heavyiron | 386 | mov edx, simple_text |
387 | mov esi, simple_text.size |
||
485 | heavyiron | 388 | mcall |
205 | heavyiron | 389 | |
390 | mov ecx, (y_add2)*65536+20 |
||
451 | heavyiron | 391 | mov ebx, (13)*65536+25 |
205 | heavyiron | 392 | mov edx, 121 |
451 | heavyiron | 393 | mov esi, [sc.work_button] |
205 | heavyiron | 394 | mov edi, 9 |
395 | mov eax, 8 |
||
396 | @@: |
||
485 | heavyiron | 397 | mcall |
205 | heavyiron | 398 | add ebx, 29*65536 |
399 | inc edx |
||
400 | dec edi |
||
401 | jnz @b |
||
402 | |||
403 | |||
404 | mov edx, 34+4 |
||
405 | mov edi, 4 |
||
485 | heavyiron | 406 | ;mov eax, 8 |
451 | heavyiron | 407 | mov ebx, 13*65536+18 |
205 | heavyiron | 408 | mov ecx, y_add*65536+y_s |
409 | @@: |
||
485 | heavyiron | 410 | mcall |
205 | heavyiron | 411 | inc edx |
412 | add ebx, 19*65536 |
||
413 | dec edi |
||
414 | jnz @b |
||
415 | |||
416 | |||
417 | ;----------------------- |
||
485 | heavyiron | 418 | mov eax,8 |
451 | heavyiron | 419 | mov edx,14 ; button number |
420 | mov ebx,(13)*65536+17 ; button start x & size |
||
205 | heavyiron | 421 | mov ecx,(y_add2+40)*65536+14 ; button start y & size |
422 | |||
423 | newcb: |
||
424 | mov esi,[(edx-14)*4+colors] |
||
425 | |||
485 | heavyiron | 426 | mcall |
205 | heavyiron | 427 | |
428 | inc edx |
||
429 | add ebx,20*65536 |
||
430 | |||
431 | cmp edx,27 |
||
432 | jnz newcb |
||
433 | ;----------------------- |
||
434 | |||
435 | mov eax, 4 |
||
451 | heavyiron | 436 | mov ebx, 94*65536+4+y_add |
437 | mov ecx, [sc.work_button_text] |
||
205 | heavyiron | 438 | mov edx, la2 |
439 | mov esi, la2.size |
||
485 | heavyiron | 440 | mcall |
205 | heavyiron | 441 | |
442 | mov eax,12 |
||
443 | mov ebx,2 |
||
485 | heavyiron | 444 | mcall |
205 | heavyiron | 445 | |
446 | ret |
||
447 | |||
448 | |||
449 | |||
450 | ; DATA SECTION |
||
451 | |||
451 | heavyiron | 452 | if lang eq ru |
485 | heavyiron | 453 | title db 'Генератор фона рабочего стола',0 |
451 | heavyiron | 454 | else |
485 | heavyiron | 455 | title db 'Background',0 |
451 | heavyiron | 456 | end if |
205 | heavyiron | 457 | |
458 | lsz apply_text,\ |
||
459 | ru, "Применить:",\ |
||
460 | en, "Apply:" |
||
461 | |||
462 | lsz image_buttons_text,\ |
||
463 | ru, "Выберите образец:",\ |
||
464 | en, "Select pattern:" |
||
465 | |||
466 | lsz simple_text,\ |
||
467 | ru, "Одноцветный фон:",\ |
||
468 | en, "Single-color background:" |
||
469 | |||
470 | lsz la2,\ |
||
451 | heavyiron | 471 | ru, "ЗАМОСТИТЬ РАСТЯНУТЬ",\ |
472 | en, " TILED STRETCH" |
||
205 | heavyiron | 473 | |
474 | |||
475 | xx db 'x' |
||
476 | |||
477 | colors: |
||
478 | dd 0x770000 |
||
479 | dd 0x007700 |
||
480 | dd 0x000077 |
||
481 | dd 0x777700 |
||
482 | dd 0x770077 |
||
483 | dd 0x007777 |
||
484 | dd 0x777777 |
||
485 | dd 0x335577 |
||
486 | dd 0x775533 |
||
487 | dd 0x773355 |
||
488 | dd 0x553377 |
||
485 | heavyiron | 489 | dd 0x111111 |
205 | heavyiron | 490 | dd 0xcccccc |
491 | |||
485 | heavyiron | 492 | fill: |
493 | db 0x00,0x00,0x77 |
||
494 | db 0x00,0x77,0x00 |
||
495 | db 0x77,0x00,0x00 |
||
496 | db 0x00,0x77,0x77 |
||
497 | db 0x77,0x00,0x77 |
||
498 | db 0x77,0x77,0x00 |
||
499 | db 0x77,0x77,0x77 |
||
500 | db 0x77,0x55,0x33 |
||
501 | db 0x33,0x55,0x77 |
||
502 | db 0x55,0x33,0x77 |
||
503 | db 0x77,0x33,0x55 |
||
504 | db 0x11,0x11,0x11 |
||
505 | db 0xcc,0xcc,0xcc |
||
205 | heavyiron | 506 | |
507 | shape: |
||
508 | |||
509 | dd 1024,64 |
||
510 | dd 1024,32 |
||
511 | dd 2048,32 |
||
512 | dd 4096,32 |
||
513 | |||
514 | dd 512,16 |
||
515 | dd 1024,16 |
||
516 | dd 2048,16 |
||
517 | dd 4096,16 |
||
518 | |||
519 | dd 64,32 |
||
520 | dd 64,16 |
||
521 | dd 32,32 |
||
522 | dd 8,8 |
||
523 | dd 16,16 |
||
524 | dd 64,64 |
||
525 | |||
526 | usearray dd ptarray |
||
527 | |||
528 | arrays dd ptarray,ptarray2,ptarray3,ptarray4,ptarray5,ptarray6 |
||
529 | dd ptarray7,ptarray8,ptarray9 |
||
530 | |||
531 | ptarray: |
||
532 | |||
533 | dd 150,50 |
||
534 | dd 120,30 |
||
535 | dd 44,180 |
||
536 | dd 50,66 |
||
537 | dd 27,6 |
||
538 | dd 95,212 |
||
539 | dd 128,177 |
||
540 | dd 201,212 |
||
541 | dd 172,201 |
||
542 | dd 250,100 |
||
543 | dd 24,221 |
||
544 | dd 11,123 |
||
545 | dd 248,32 |
||
546 | dd 34,21 |
||
547 | dd 777 ; <- end of array |
||
548 | |||
549 | ptarray2: |
||
550 | |||
551 | dd 0,0,50,50,100,100,150,150,200,200,250,250 |
||
552 | dd 50,150,150,50,200,100,100,200 |
||
553 | dd 777 |
||
554 | |||
555 | ptarray3: |
||
556 | |||
557 | dd 55,150,150,55,200,105,105,200 |
||
558 | dd 30,30,220,220 |
||
559 | dd 777 |
||
560 | |||
561 | ptarray4: |
||
562 | |||
563 | dd 196,0,196,64,196,128,196,196 |
||
564 | dd 64,32,64,96,64,150,64,228 |
||
565 | dd 777 |
||
566 | |||
567 | ptarray5: |
||
568 | |||
569 | dd 196,0,196,64,196,128,196,196 |
||
570 | dd 64,0,64,64,64,128,64,196 |
||
571 | dd 777 |
||
572 | |||
573 | ptarray6: |
||
574 | |||
575 | dd 49,49,128,50,210,50 |
||
576 | dd 50,128,128,128,210,128 |
||
577 | dd 50,210,128,210,210,210 |
||
578 | |||
579 | dd 777 |
||
580 | |||
581 | ptarray7: |
||
582 | |||
583 | dd 0,0 |
||
584 | dd 196,196,64,64 |
||
585 | dd 128,0 |
||
586 | dd 0,128 |
||
587 | dd 64,64,196,64 |
||
588 | dd 196,196,64,196 |
||
589 | dd 128,128 |
||
590 | |||
591 | dd 777 |
||
592 | |||
593 | ptarray8: |
||
594 | |||
595 | dd 0, 128 |
||
596 | dd 0, 128 |
||
597 | dd 128, 0 |
||
598 | dd 0, 128 |
||
599 | dd 128, 0 |
||
600 | dd 0, 128 |
||
601 | dd 128, 0 |
||
602 | dd 0, 128 |
||
603 | dd 128, 0 |
||
604 | dd 128, 128 |
||
605 | |||
606 | dd 777 |
||
607 | |||
608 | ptarray9: |
||
609 | |||
610 | |||
611 | dd 0,248,64,128,128,64,196,48,160,160,94,224,240,96,5,5,777 |
||
612 | |||
613 | |||
460 | diamond | 614 | I_END: |
615 | sc system_colors |
||
616 | |||
205 | heavyiron | 617 | I_Param: |
618 | |||
619 | image:->><><<>><><<> |
||
620 |