]> 4ch.mooo.com Git - 16.git/blob - src/lib/16_us.c
a164d2b42c2b5928ff0108d9257e0b8d42d7cf92
[16.git] / src / lib / 16_us.c
1 #if 0\r
2 \r
3 #define PaddleMinX      (CtlPanelSX + 3)\r
4 #define PaddleMaxX      (CtlPanelEX - 15)\r
5 #define BallMinX        (CtlPanelSX + 2)\r
6 #define BallMinY        (CtlPanelSY + 12 + 2)\r
7 #define BallMaxX        (CtlPanelEX - 6)\r
8 #define BallMaxY        (CtlPanelEY - 13)\r
9 #define CPaddleY        (BallMinY + 4)\r
10 #define KPaddleY        (BallMaxY - 2)\r
11 void\r
12 USL_DrawPongScore(word k,word c)\r
13 {\r
14         fontcolor = HiliteColor;\r
15         PrintY = py = CtlPanelSY + 4;\r
16         px = CtlPanelSX + 6;\r
17         VWB_Bar(px,py,42,6,BackColor);\r
18         USL_DrawString("YOU:");\r
19         PrintX = px;\r
20         US_PrintUnsigned(k);\r
21         px = CtlPanelSX + 108;\r
22         VWB_Bar(px,py,50,6,BackColor);\r
23         USL_DrawString("COMP:");\r
24         PrintX = px;\r
25         US_PrintUnsigned(c);\r
26 }\r
27 \r
28 void\r
29 USL_PlayPong(void)\r
30 {\r
31         boolean         ball,killball,revdir,done,lastscore;\r
32         word            cycle,\r
33                                 x,y,\r
34                                 kx,cx,\r
35                                 rx,\r
36                                 bx,by,\r
37                                 kscore,cscore,\r
38                                 speedup;\r
39         int                     bdx,bdy;\r
40         longword        balltime,waittime;\r
41         CursorInfo      cursorinfo;\r
42 \r
43         kx = cx = PaddleMinX + ((PaddleMaxX - PaddleMinX) / 2);\r
44         bx = by = bdx = bdy = 0;\r
45         kscore = cscore = 0;\r
46         USL_DrawPongScore(0,0);\r
47         cycle = 0;\r
48         revdir = false;\r
49         killball = true;\r
50         done = false;\r
51         lastscore = false;\r
52         do\r
53         {\r
54                 waittime = TimeCount;\r
55 \r
56                 IN_ReadCursor(&cursorinfo);\r
57                 if (((cursorinfo.x < 0) || IN_KeyDown(sc_LeftArrow)) && (kx > PaddleMinX))\r
58                         kx -= 2;\r
59                 else if (((cursorinfo.x > 0) || IN_KeyDown(sc_RightArrow)) && (kx < PaddleMaxX))\r
60                         kx += 2;\r
61 \r
62                 if (killball)\r
63                 {\r
64                         ball = false;\r
65                         balltime = TimeCount + TickBase;\r
66                         speedup = 10;\r
67                         killball = false;\r
68                 }\r
69 \r
70                 if (ball && (cycle++ % 3))\r
71                 {\r
72                         x = (bx >> 2);\r
73                         if (!(x & 1))\r
74                                 x += (US_RndT() & 1);\r
75 \r
76                         if ((cx + 6 < x) && (cx < PaddleMaxX))\r
77                                 cx += 1;\r
78                         else if ((cx + 6 > x) && (cx > PaddleMinX))\r
79                                 cx -= 1;\r
80                 }\r
81 \r
82                 VWB_Bar(BallMinX,BallMinY - 1,\r
83                                 BallMaxX - BallMinX + 5,BallMaxY - BallMinY + 7,\r
84                                 BackColor);\r
85                 VWB_DrawSprite(cx,CPaddleY,PADDLESPR);\r
86                 VWB_DrawSprite(kx,KPaddleY,PADDLESPR);\r
87                 if (ball)\r
88                 {\r
89                         if\r
90                         (\r
91                                 (((bx + bdx) >> 2) > BallMaxX)\r
92                         ||      (((bx + bdx) >> 2) < BallMinX)\r
93                         )\r
94                         {\r
95                                 SD_PlaySound(BALLBOUNCESND);\r
96                                 bdx = -bdx;\r
97                         }\r
98                         bx += bdx;\r
99 \r
100                         if (((by + bdy) >> 2) > BallMaxY)\r
101                         {\r
102                                 killball = true;\r
103                                 lastscore = false;\r
104                                 cscore++;\r
105                                 SD_PlaySound(COMPSCOREDSND);\r
106                                 USL_DrawPongScore(kscore,cscore);\r
107                                 if (cscore == 21)\r
108                                 {\r
109                                         USL_CtlDialog("You lost!","Press any key",nil);\r
110                                         done = true;\r
111                                         continue;\r
112                                 }\r
113                         }\r
114                         else if (((by + bdy) >> 2) < BallMinY)\r
115                         {\r
116                                 killball = true;\r
117                                 lastscore = true;\r
118                                 kscore++;\r
119                                 SD_PlaySound(KEENSCOREDSND);\r
120                                 USL_DrawPongScore(kscore,cscore);\r
121                                 if (kscore == 21)\r
122                                 {\r
123                                         USL_CtlDialog("You won!","Press any key",nil);\r
124                                         done = true;\r
125                                         continue;\r
126                                 }\r
127                         }\r
128                         by += bdy;\r
129 \r
130                         x = bx >> 2;\r
131                         y = by >> 2;\r
132                         if (!killball)\r
133                         {\r
134                                 if\r
135                                 (\r
136                                         (bdy < 0)\r
137                                 &&      ((y >= CPaddleY) && (y < CPaddleY + 3))\r
138                                 &&      ((x >= (cx - 5)) && (x < (cx + 11)))\r
139                                 )\r
140                                 {\r
141                                         rx = cx;\r
142                                         revdir = true;\r
143                                         SD_PlaySound(COMPPADDLESND);\r
144                                 }\r
145                                 else if\r
146                                 (\r
147                                         (bdy > 0)\r
148                                 &&      ((y >= (KPaddleY - 3)) && (y < KPaddleY))\r
149                                 &&      ((x >= (kx - 5)) && (x < (kx + 11)))\r
150                                 )\r
151                                 {\r
152                                         if (((bdy >> 2) < 3) && !(--speedup))\r
153                                         {\r
154                                                 bdy++;\r
155                                                 speedup = 10;\r
156                                         }\r
157                                         rx = kx;\r
158                                         revdir = true;\r
159                                         SD_PlaySound(KEENPADDLESND);\r
160                                 }\r
161                                 if (revdir)\r
162                                 {\r
163                                         bdy = -bdy;\r
164                                         bdx = ((x + 5 - rx) >> 1) - (1 << 2);\r
165                                         if (!bdx)\r
166                                                 bdx--;\r
167                                         revdir = false;\r
168                                 }\r
169                         }\r
170                         VWB_DrawSprite(x,y,(x & 1)? BALL1PIXELTOTHERIGHTSPR : BALLSPR);\r
171                 }\r
172                 else if (TimeCount >= balltime)\r
173                 {\r
174                         ball = true;\r
175                         bdx = 1 - (US_RndT() % 3);\r
176                         bdy = 2;\r
177                         if (lastscore)\r
178                                 bdy = -bdy;\r
179                         bx = (BallMinX + ((BallMaxX - BallMinX) / 2)) << 2;\r
180                         by = (BallMinY + ((BallMaxY - BallMinY) / 2)) << 2;\r
181                 }\r
182                 VW_UpdateScreen();\r
183                 while (waittime == TimeCount)\r
184                         ;       // DEBUG - do adaptiveness\r
185         } while ((LastScan != sc_Escape) && !done);\r
186         IN_ClearKeysDown();\r
187 }\r
188 \r
189 #pragma argsused\r
190 static boolean\r
191 USL_PongCustom(UserCall call,struct UserItem far *item)\r
192 {\r
193         if (call != uic_SetupCard)\r
194                 return(false);\r
195 \r
196         VWB_DrawPic(0,0,CP_MENUSCREENPIC);\r
197         VWB_DrawPic(CtlPanelSX + 56,CtlPanelSY,CP_PADDLEWARPIC);\r
198         VWB_Hlin(CtlPanelSX + 3,CtlPanelEX - 3,CtlPanelSY + 12,HiliteColor ^ BackColor);\r
199         VWB_Hlin(CtlPanelSX + 3,CtlPanelEX - 3,CtlPanelEY - 7,HiliteColor ^ BackColor);\r
200         USL_PlayPong();\r
201 \r
202         return(true);\r
203 }\r
204 \r
205 #endif\r