]> 4ch.mooo.com Git - plz.git/blob - plzpart/plzfill.c
78fdf3903a3ac2c6d56c04880b2434c7221c3876
[plz.git] / plzpart / plzfill.c
1 #include "tweak.h"\r
2 \r
3 extern far void do_line(char far *to, int dx, int dy, int cnt, char far *from, long txx1, long txy1, long txx2, long txy2, int dseg);\r
4 extern far void do_block(int ycnt);\r
5 extern far void do_clear(char far *vmem, int far *otau, int far *ntau);\r
6 \r
7 extern int acstau[256];\r
8 int     sini[2000];\r
9 char    (* far vmem)[160]=MK_FP(0x0a000,0);\r
10 /*extern*/ char far kuva1[128][256];\r
11 /*extern*/ char far kuva2[128][256];\r
12 /*extern*/ char far kuva3[128][256];\r
13 /*extern*/ char far dist1[128][256];\r
14 char    far buu[1000];\r
15 char    sinx[128], siny[128];\r
16 char    pal[768];\r
17 \r
18 int     clrtau[8][256][2];\r
19 int     clrptr=0;\r
20 \r
21 void initvect() {\r
22         int     a/*,b*/,x,y,s/*,d=0,p=0,ch*/;\r
23 \r
24         for(a=0;a<1524;a++)\r
25                 {\r
26                 sini[a]=s=sin(a/1024.0*M_PI*4)*127;\r
27                 s-=sini[a];\r
28                 }\r
29 \r
30 /*      for(a=0;a<65;a++) for(b=0;b<256;b++) // chessboard\r
31                 { x=1; if((a>>4)&1) x^=3; if((b>>5)&1) x^=3; kuva[a][b]=x; }\r
32 \r
33         pal[0*192+3*1]=pal[0*192+3*1+1]=pal[0*192+3*1+2]=40;\r
34         pal[0*192+3*2]=pal[0*192+3*2+1]=pal[0*192+3*2+2]=60;\r
35 */\r
36         for(a=1;a<32;a++)               // must-sini-valk\r
37                 { pal[0*192+a*3]=0; pal[0*192+a*3+1]=0; pal[0*192+a*3+2]=a*2; }\r
38         for(a=0;a<32;a++)\r
39                 { pal[0*192+a*3+32*3]=a*2; pal[0*192+a*3+1+32*3]=a*2; pal[0*192+a*3+2+32*3]=63; }\r
40 \r
41         for(a=0;a<32;a++)               // must-pun-kelt\r
42                 { pal[1*192+a*3]=a*2; pal[1*192+a*3+1]=0; pal[1*192+a*3+2]=0; }\r
43         for(a=0;a<32;a++)\r
44                 { pal[1*192+a*3+32*3]=63; pal[1*192+a*3+1+32*3]=a*2; pal[1*192+a*3+2+32*3]=0; }\r
45 \r
46 \r
47         for(a=0;a<32;a++)               // must-orans-viol\r
48                 { pal[2*192+a*3]=a; pal[2*192+a*3+1]=0; pal[2*192+a*3+2]=a*2/3; }\r
49         for(a=0;a<32;a++)\r
50                 { pal[2*192+a*3+32*3]=31-a; pal[2*192+a*3+1+32*3]=a*2; pal[2*192+a*3+2+32*3]=21; }\r
51 \r
52 \r
53         for(y=0;y<64;y++) for(x=0;x<256;x++)\r
54                 {\r
55                 kuva1[y][x]=sini[(y*4+sini[x*2])&511]/4+32;\r
56                 kuva2[y][x]=sini[(y*4+sini[x*2])&511]/4+32+64;\r
57                 kuva3[y][x]=sini[(y*4+sini[x*2])&511]/4+32+128;\r
58                 }\r
59 \r
60         for(y=0;y<128;y++) for(x=0;x<256;x++)\r
61                 dist1[y][x]=sini[y*8]/3;\r
62 \r
63         for(a=0;a<8*256;a++) { clrtau[0][a][0]=640; clrtau[0][a][1]=0; }\r
64         }\r
65 \r
66 extern far char * to;\r
67 extern far char * from;\r
68 extern far int * ctau;\r
69 extern far int dseg;\r
70 extern far int  xx, yy;\r
71 extern far long ay1,ay2,ax1,ax2,xx1,yy1,xx2,yy2;\r
72 extern far long txx1,txy1,tay1,tax1;\r
73 extern far long txx2,txy2,tay2,tax2;\r
74 \r
75 char*   kuvataus[]={&kuva1[0][0],&kuva2[0][0],&kuva3[0][0],&kuva1[0][0]};\r
76 char*   disttaus[]={&dist1[0][0],&dist1[0][0],&dist1[0][0],&dist1[0][9]};\r
77 \r
78 void do_poly(x1,y1,x2,y2,x3,y3,x4,y4,color, dd)\r
79 int     x1,y1,x2,y2,x3,y3,x4,y4,color, dd;\r
80         {\r
81         int     a,/*b,c,d,*/n=0,m,s1,s2,d1,d2,dx1,dy1,dx2,dy2;\r
82 \r
83         struct  points {\r
84                 int     x,y; } pnts[4],txt[4]={{64,4},{190,4},{190,60},{64,60}};\r
85 //              int     x,y; } pnts[4],txt[4]={{1,1},{63,1},{63,63},{1,63}};\r
86 \r
87         dd=(dd+1)&63;\r
88 \r
89         pnts[0].x=x1; pnts[0].y=y1;\r
90         pnts[1].x=x2; pnts[1].y=y2;\r
91         pnts[2].x=x3; pnts[2].y=y3;\r
92         pnts[3].x=x4; pnts[3].y=y4;\r
93 \r
94         for(n=0,a=1;a<4;a++) if(pnts[a].y<pnts[n].y) n=a;\r
95 \r
96         s1=n; s2=n; d1=(s1+1)&3; d2=(s2-1)&3;\r
97         dx1=pnts[d1].x-pnts[s1].x;\r
98         dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;\r
99         ax1=65536L*dx1/dy1;\r
100         xx1=((long)pnts[s1].x<<16)+0x8000L;\r
101         txx1=((long)txt[s1].x<<16)+0x8000L;\r
102         txy1=((long)txt[s1].y<<16)+0x8000L;\r
103         tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;\r
104         tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;\r
105 \r
106         dx2=pnts[d2].x-pnts[s2].x;\r
107         dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;\r
108         ax2=65536L*dx2/dy2;\r
109         xx2=((long)pnts[s2].x<<16)+0x8000L;\r
110         txx2=((long)txt[s2].x<<16)+0x8000L;\r
111         txy2=((long)txt[s2].y<<16)+0x8000L;\r
112         tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;\r
113         tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;\r
114 \r
115         yy=(long)pnts[s1].y;\r
116         from=MK_FP(kuvataus[color],0);\r
117         to=vmem[yy];            // initialize gfx pointers\r
118         dseg=disttaus[color]+dd*16;\r
119         ctau=&clrtau[clrptr][yy];\r
120         for(n=0;n<4;)\r
121                 {\r
122                 if(pnts[d1].y<pnts[d2].y) m=pnts[d1].y; else m=pnts[d2].y;\r
123                 do_block(m-yy); yy=m;\r
124 \r
125                 if(pnts[d1].y==pnts[d2].y)\r
126                         {\r
127                         s1=d1; d1=(s1+1)&3;\r
128                         s2=d2; d2=(s2-1)&3; n+=2;\r
129 \r
130                         dx1=pnts[d1].x-pnts[s1].x;\r
131                         dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;\r
132                         ax1=65536L*dx1/dy1;\r
133                         xx1=((long)pnts[s1].x<<16)+0x8000L;\r
134                         txx1=((long)txt[s1].x<<16)+0x8000L;\r
135                         txy1=((long)txt[s1].y<<16)+0x8000L;\r
136                         tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;\r
137                         tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;\r
138 \r
139                         dx2=pnts[d2].x-pnts[s2].x;\r
140                         dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;\r
141                         ax2=65536L*dx2/dy2;\r
142                         xx2=((long)pnts[s2].x<<16)+0x8000L;\r
143                         txx2=((long)txt[s2].x<<16)+0x8000L;\r
144                         txy2=((long)txt[s2].y<<16)+0x8000L;\r
145                         tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;\r
146                         tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;\r
147                         }\r
148                 else if(pnts[d1].y<pnts[d2].y)\r
149                         {\r
150                         s1=d1; d1=(s1+1)&3; n++;\r
151                         dx1=pnts[d1].x-pnts[s1].x;\r
152                         dy1=pnts[d1].y-pnts[s1].y; if(dy1==0) dy1++;\r
153                         ax1=65536L*dx1/dy1;\r
154                         xx1=((long)pnts[s1].x<<16)+0x8000L;\r
155                         txx1=((long)txt[s1].x<<16)+0x8000L;\r
156                         txy1=((long)txt[s1].y<<16)+0x8000L;\r
157                         tax1=65536L*(txt[d1].x-txt[s1].x)/dy1;\r
158                         tay1=65536L*(txt[d1].y-txt[s1].y)/dy1;\r
159                         }\r
160                 else    {\r
161                         s2=d2; d2=(s2-1)&3; n++;\r
162                         dx2=pnts[d2].x-pnts[s2].x;\r
163                         dy2=pnts[d2].y-pnts[s2].y; if(dy2==0) dy2++;\r
164                         ax2=65536L*dx2/dy2;\r
165                         xx2=((long)pnts[s2].x<<16)+0x8000L;\r
166                         txx2=((long)txt[s2].x<<16)+0x8000L;\r
167                         txy2=((long)txt[s2].y<<16)+0x8000L;\r
168                         tax2=65536L*(txt[d2].x-txt[s2].x)/dy2;\r
169                         tay2=65536L*(txt[d2].y-txt[s2].y)/dy2;\r
170                         }\r
171                 }\r
172         }\r
173 \r
174 void clear()\r
175         {\r
176         int     *otau=clrtau[(clrptr-3)&7], *ntau=clrtau[clrptr];\r
177 \r
178         clrptr=(clrptr+1)&7;\r
179 \r
180         do_clear(vmem[0],otau,ntau);\r
181         }\r
182 \r