part1=1 ;literki etc. part2=1 ;stars wonders part3=1 ;2d bump mapping part4=1 ;kura's water part5=1 ;two ZOOOOOM-rotators .386 assume cs:code code segment use16 Segment0 equ 06000h Segment1 equ 07000h ;makeTlo Segment2 equ 08000h ;toonel#1.1 Segment3 equ 09000h ;toonel#1.2 SegmentEkr equ 0a000h o equ offset w equ word ptr b equ byte ptr d equ dword ptr org 100h start: push cs pop ax cmp ax,5000h jge _exit push cs pop es lea di,cos mov cx,1024 MakeCos: mov _angle,cx fldpi fimul _angle fidiv _512 fcos fimul _128 fistp wyn mov ax,wyn mov es:[di],ax inc di inc di dec cx jnz MakeCos call GetFontAddr INCLUDE INC\bway.inc call make_Bump call calc_toonel mov ax,Segment1 mov es,ax call Make_Tlo mov ax,13h int 10h call SetPal mov ax,0a000h mov es,ax xor di,di mov ax,Segment1 mov ds,ax xor si,si mov cx,16000 rep movsd IFDEF part1 ; writeln 'FARMER' lea bp,ple mov ax,0a000h mov es,ax mov di,320*72+19 mov ax,SegFont mov ds,ax call napis4 lea bp,ple2 mov ax,0a000h mov es,ax mov di,320*130+19 mov ax,SegFont mov ds,ax call napis1 ; make fleshes call flesh call SetPal mov di,(320*24)+134 call draw_Kura mov cx,230 du: call wait_vbl loop du call flesh call setPal ENDIF IFDEF part2 mov ax,Segment1 mov ds,ax mov ax,Segment0 mov es,ax xor si,si xor di,di mov dx,128 u1: mov cx,256 rep movsb add si,320-256 dec dx jnz u1 mov dx,128 q1: mov cx,256 rep movsb sub si,320+256 dec dx jnz q1 mov cx,280 keyeStars: push cx call draw_toonel mov di,(170*320)+315-16*2 call draw_kura2 call drawSeg1 add liczn,258*2 call wait_vbl pop cx dec cx jnz keyeStars ENDIF IFDEF part3 call flesh mov ax,SegmentEkr mov es,ax call zerofill mov jest_czekanie,1 mov ax,Segment0 mov es,ax xor di,di xor ax,ax mov cx,32000 rep stosw lea bp,ple4 mov ax,SegFont mov di,320*72+19 mov ds,ax call napis4 mov ax,Segment1 mov es,ax xor di,di xor ax,ax mov cx,32000 rep stosw ;mov jest_czekanie,1 lea bp,ple3 mov ax,SegFont mov di,320*72+19 mov ds,ax call napis4 mov di,20*320+130 call draw_kura mov di,20*320+60 call draw_kura mov di,20*320+200 call draw_kura mov di,125*320+130 call draw_kura mov di,125*320+60 call draw_kura mov di,125*320+200 call draw_kura call soften call Soften mov cx,200 keye2: push cx cmp flesz_kura,0 jne pleop mov flesz_kura,1 call calc_Bump call setPal pleop: call wait_vbl call calc_bump pop cx dec cx jnz keye2 ENDIF IFDEF part4 call flesh mov ax,0a000h mov es,ax call ZeroFill call setPal push cs pop es lea di,obrazek mov cx,128*128 mov al,63 rep stosb mov jest_czekanie,1 mov ax,Segment2 mov es,ax call zeroFill mov licznikBump,0 _part4: mov bx,licznikBump add licznikBump,6 shl bx,2 mov ax,[trasaWater+0][bx] sar ax,1 add ax,128 mov bp,ax mov ax,[trasaWater+2][bx] sar ax,2 add ax,54 shl ax,8 add bp,ax mov ax,Segment2 mov es,ax mov w es:[bp],0fefeh cmp licznikBump,360 jl sluchamy_tiamata2 mov licznikBump,0 sluchamy_tiamata2: call CalculateWater call DrawWater call wait_vbl call DrawWaterOnScreen mov di,(170*320)+315-16*2 call draw_kura2 cmp wewne,30 jl bez_napis cmp wewne,580 je outtt cmp wewne,380 je ploe cmp wewne,330 je ploe cmp wewne,280 je ploe cmp wewne,230 je ploe cmp wewne,180 je ploe cmp wewne,130 je ploe cmp wewne,80 jne loe ploe: push es mov ax,Segment2 mov es,ax mov di,(256*50)+120 lea si,kura mov ch,13 p11: mov cl,16 p22: mov al,cs:[si] or al,al jz p33 mov ax,0fefeh mov es:[di],ax p33: add di,2 inc si dec cl jnz p22 add di,256-32 dec ch jnz p11 pop es loe: mov cx,ileFont lea si,ple5 lea di,ple6 heyOp: mov al,cs:[si] cmp al,'$' je outOp mov cs:[di],al inc si inc di loop heyOp outOp: mov b cs:[di],'$' inc ileFont lea bp,ple6 mov di,320*180+1 mov ax,SegFont mov ds,ax call napis1 bez_napis: inc wewne call wait_vbl mov ax,0a000h mov es,ax xor di,di mov ax,Segment0 mov ds,ax xor si,si mov cx,32000 rep movsw jmp _part4 outtt: ENDIF IFDEF part5 mov ax,Segment0 mov ds,ax mov ax,Segment2 mov es,ax mov fs,ax mov si,(30*320)+32 xor di,di mov dx,128 pleR1: mov cx,256 rep movsb add si,320-256 dec dx jnz pleR1 mov dx,128 pleR2: mov cx,256 rep movsb sub si,320+256 dec dx jnz pleR2 mov ax,Segment0 mov es,ax xor di,di mov al,10 mov cx,64000 rep stosb mov cx,180 _part5: push cx mov ax,kat_1 mov kat,ax mov SegAdd,0 call rotater mov ax,kat_2 mov kat,ax mov SegAdd,1 call rotater add kat_1,6 sub kat_2,8 call drawRotozoomonScreen mov di,(170*320)+315-16*2 call draw_kura2 call wait_vbl mov ax,0a000h mov es,ax xor di,di mov ax,Segment0 mov ds,ax xor si,si mov cx,32000 rep movsw pop cx loop _part5 call flesh call SetPal mov jest_czekanie,0 lea bp,ple7 mov ax,SegFont mov di,320*42+19 mov ds,ax call napis4 lea bp,ple8 mov di,320*120+19 call napis1 lea bp,ple9 mov di,320*150+19 call napis1 mov cx,100 ddy: call wait_vbl loop ddy call maz ENDIF call flesh call setpal mov ax,Segment3 mov fs,ax mov es,ax xor di,di mov cx,65535 xor al,al rep stosb push cs pop ds mov bx,0 mov cx,16 jajkuj: push cx bx xor di,di add di,bx call dKuraz mov di,20 add di,bx call dKuraz mov di,40 add di,bx call dKuraz mov di,60 add di,bx call dKuraz mov di,80 add di,bx call dKuraz mov di,100 add di,bx call dKuraz mov di,120 add di,bx call dKuraz mov di,140 add di,bx call dKuraz mov di,160 add di,bx call dKuraz mov di,180 add di,bx call dKuraz mov di,200 add di,bx call dKuraz mov di,220 add di,bx call dKuraz mov di,240 add di,bx call dKuraz pop bx cx add bx,256*16 loop jajkuj mov jest_czekanie,1 mov ileFont,1 mov kolorr,119 mov wewne,0 mov cx,300 part6: push cx call kuraz call drawKurazOnScreen mov di,(320*24)+134 call draw_Kura mov di,(320*124)+134 call draw_Kura mov cx,ileFont lea si,plea lea di,ple6 heyO1: mov al,cs:[si] cmp al,'$' je outO1 mov cs:[di],al inc si inc di loop heyO1 outO1: mov b cs:[di],'$' inc ileFont lea bp,ple6 mov di,320*(100-7)+10 mov ax,SegFont mov ds,ax call napis1 bez_napis1: inc wewne cmp wewne,70 jl dpd mov wewne,0 inc ileFont dpd: call wait_vbl mov ax,0a000h mov es,ax xor di,di mov ax,Segment0 mov ds,ax xor si,si mov cx,32000 rep movsw pop cx loop part6 mov jest_Czekanie,1 mov ax,segment0 mov es,ax call zerofill mov guruCol,63*3 lea bp,pleb mov ax,SegFont mov di,320*72+19 mov ds,ax call napis4 mov flesz_kura,0 call make_Bump call flesh mov ax,SegmentEkr xor di,di mov es,ax xor ax,ax mov cx,32000 rep stosw mov ax,Segment1 mov es,ax xor di,di xor ax,ax mov cx,32000 rep stosw ;mov jest_czekanie,1 lea bp,pleb mov ax,SegFont mov di,320*72+19 mov ds,ax call napis4 mov di,20*320+130 call draw_kura mov di,20*320+60 call draw_kura mov di,20*320+200 call draw_kura mov di,125*320+130 call draw_kura mov di,125*320+60 call draw_kura mov di,125*320+200 call draw_kura call soften call Soften mov cx,180 keye2dd: push cx cmp flesz_kura,0 jne pleopdd mov flesz_kura,1 call calc_Bump call setPal pleopdd: call wait_vbl call calc_bump pop cx dec cx jnz keye2dd mov ax,Segment3 mov es,ax xor di,di mov cx,65535 oddq: mov al,es:[di] cmp al,63 jne niccc sub al,10 mov es:[di],al niccc: inc di loop oddq call flesh call setpal mov gupui,1 mov kolorr,3eh*2-13 mov ax,Segment0 mov es,ax xor di,di mov al,10 mov cx,64000 rep stosb mov cx,240 _part55: push cx mov ax,kat_1 mov kat,ax call rotater2 add kat_1,6 sub kat_2,8 call polozyc mov di,(170*320)+315-16*2 call draw_kura2 mov kolorr,3eh mov ax,SegFont mov ds,ax lea bp,int1 mov di,320*20+10 call napis1 lea bp,int2 mov di,320*35+10 call napis1 mov kolorr,64+63 lea bp,int5 mov di,320*100+10 call napis1 lea bp,int6 mov di,320*115+10 call napis1 lea bp,int7 mov di,320*130+10 call napis1 mov kolorr,64+64+64+3eh lea bp,int8 mov di,320*155+10 call napis1 call wait_vbl mov ax,0a000h mov es,ax xor di,di mov ax,Segment0 mov ds,ax xor si,si mov cx,32000 rep movsw pop cx loop _part55 call maz _exit: mov ax,3 int 10h ret maz: mov ax,0a000h mov es,ax xor di,di mov si,64000-320 mov cx,100 ops: push di cx xor al,al mov cx,320 rep stosb mov di,si mov cx,320 rep stosb pop cx di add di,320 sub si,320 call wait_vbl dec cx jnz ops ret kat_1 dw 0 kat_2 dw 0 ileFont dw 1 wewne dw 0 ;napis po wodzie dkuraz: lea si,kura mov dx,13 pioa: mov cx,16 rep movsb add di,256-16 dec dx jnz pioa ret DrawKurazOnScreen: mov ax,Segment1 mov ds,ax xor si,si mov ax,Segment0 mov es,ax xor di,di mov bp,200 xor bx,bx qqw1: mov cx,320 xor dx,dx qqw2: mov bl,dh mov al,ds:[si][bx] mov es:[di],al mov es:[di+320],al inc di add dx,(256*256)/320 dec cx jnz qqw2 add si,256 dec bp jnz qqw1 ret DrawWaterOnScreen: mov ax,Segment1 mov ds,ax mov si,128*4 mov ax,Segment0 mov es,ax xor di,di mov bp,100 xor bx,bx dw1: mov cx,320 xor dx,dx dw2: mov bl,dh mov al,ds:[si][bx] mov es:[di],al mov es:[di+320],al inc di add dx,(128*256)/320 dec cx jnz dw2 add si,128 add di,320 dec bp jnz dw1 ret DrawRotoZoomOnScreen: mov ax,Segment1 mov ds,ax xor si,si mov ax,Segment0 mov es,ax mov di,15 mov bp,200 xor bx,bx dq11: mov cx,256 xor dx,dx dq21: movsb dec cx jnz dq21 add di,320-256 dec bp jnz dq11 ret ; ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²² INCLUDE inc\water.inc INCLUDE inc\polozyc.inc INCLUDE inc\tlo.inc INCLUDE inc\rotater.inc INCLUDE INC\kolo.inc INCLUDE INC\kuraz.inc INCLUDE inc\toonel.inc INCLUDE inc\bump.inc ; ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²² zeroFill: xor di,di xor al,al mov cx,65535 rep stosb ret jest_czekanie db 0 napis4: mov si,OFsFont movzx ax,byte ptr cs:[bp] cmp ax,'$' je out_of_kura imul ax,14 add si,ax push di mov ch,14 cz1: mov cl,8 lodsb cz2: test al,10000000b jz pli mov bl,guruCol mov bh,guruCol mov es:[di+0],bx mov es:[di+2],bx mov es:[di+4],bx mov es:[di+322],bx mov es:[di+324],bx mov es:[di+642],bx mov es:[di+644],bx mov es:[di+962],bx pli: rol al,1 add di,6 dec cl jnz cz2 add di,(320*4)-(8*6) dec ch jnz cz1 pop di add di,8*6 inc bp cmp jest_czekanie,1 je napis4 mov cx,40 ra1: call wait_vbl loop ra1 jmp napis4 out_of_kura: ret kolorr db 3eh gurucol db 7fh gupui db 0 napis1: mov si,OFsFont movzx ax,byte ptr cs:[bp] cmp ax,'$' je oqt_of_kura imul ax,14 add si,ax push di mov ch,14 cq1: mov cl,8 lodsb cq2: test al,10000000b jz pqi mov bl,kolorr mov b es:[di],bl pqi: rol al,1 inc di dec cl jnz cq2 add di,320-8 dec ch jnz cq1 cmp gupui,1 je plum_P mov d es:[di-17*320],0bfbfbfbfh mov d es:[di-17*320+4],0bfbfbfbfh plum_P: pop di add di,8 inc bp cmp jest_czekanie,1 je napis1 mov cx,2 rq1: call wait_vbl loop rq1 jmp napis1 oqt_of_kura: ret GetFontAddr: mov ah,11h ;font 8*14 mov al,30h mov bh,2 int 10h mov SegFont,es mov OfsFont,bp ret SetPal: call wait_vbl xor ax,ax mov cx,64 mov dx,03c8h sp1: out dx,al inc dx out dx,al out dx,al out dx,al dec dx inc al dec cx jnz Sp1 mov cx,64 mov bl,al sp2: mov al,bl out dx,al inc dx mov al,bl out dx,al out dx,al mov al,0 out dx,al dec dx inc bl dec cx jnz Sp2 mov cx,64 sp3: mov al,bl out dx,al inc dx mov al,bl out dx,al mov al,0 out dx,al out dx,al dec dx inc bl dec cx jnz sp3 mov cx,64 sp4: mov al,bl out dx,al inc dx mov al,0 out dx,al out dx,al mov al,bl out dx,al dec dx inc bl dec cx jnz sp4 ret Wait_Vbl: mov dx,03dah hey: in al,dx test al,8 jne hey hey2: in al,dx test al,8 je hey2 ret flesh: call wait_vbl mov cx,256 mov dx,03c8h xor bl,bl fl1: mov al,bl out dx,al inc dx mov al,63 out dx,al out dx,al out dx,al dec dx inc bl dec cx jnz fl1 ret draw_kura: lea si,kura mov ch,13 dk1: mov cl,16 dk2: mov al,cs:[si] or al,al jz ndk mov ah,al mov es:[di+000],ax mov es:[di+002],ax mov es:[di+320],ax mov es:[di+322],ax mov es:[di+640],ax mov es:[di+642],ax mov es:[di+960],ax mov es:[di+962],ax ndk: add di,4 inc si dec cl jnz dk2 add di,(320*4)-(16*4) dec ch jnz dk1 ret draw_kura2: lea si,kura mov ch,13 dq1: mov cl,16 dq2: mov al,cs:[si] or al,al jz nqk mov ah,al mov es:[di+000],ax mov es:[di+320],ax nqk: add di,2 inc si dec cl jnz dq2 add di,(320*2)-(16*2) dec ch jnz dq1 ret drawSeg1: mov ax,0a000h mov es,ax xor di,di mov ax,Segment1 mov ds,ax xor si,si mov cx,32000 rep movsw ret ;es:di-segment Soften: mov di,321 mov ch,198 sof1: mov dx,318 sof2: mov al,es:[di-1] add al,es:[di+1] add al,es:[di-320] add al,es:[di+320] shr al,2 mov es:[di],al inc di dec dx jnz sof2 add di,2 dec ch jnz sof1 ret flesz_kura db 0 ple db 'FARMER$' ple2 db 'Only KURA''s power makes it possible$' ple3 db '+KURA+$' ple4 db ' KURA $' ple5 db 'Cold water+KURA = very stupid egg !$' ple7 db 'STOP!$' ple8 db 'And now coming up 64000 points$' ple9 db 'big environmen KURAZ! EGG RLZ$' plea db 'HERE IT IS A VERY STRANGE DUCK DUCK :($' pleb db '2-KURY$' int1 db 'FARMER&KURA was coded in one day$' int2 db 'in pure fucking r-mode...$' int5 db 'GREETINGS:$' int6 db 'Absence,Pulse,Substance,Motion$' int7 db 'Poison,Tcman,Camorra...and YOU$' int8 db 'THANX FOR WATCHING DIZ 4KB$ ' ; ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²² INCLUDE INC\kura.inc INCLUDE INC\vars.inc ; ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²² code ends end start