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
12 USL_DrawPongScore(word k,word c)
\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
20 US_PrintUnsigned(k);
\r
21 px = CtlPanelSX + 108;
\r
22 VWB_Bar(px,py,50,6,BackColor);
\r
23 USL_DrawString("COMP:");
\r
25 US_PrintUnsigned(c);
\r
31 boolean ball,killball,revdir,done,lastscore;
\r
40 longword balltime,waittime;
\r
41 CursorInfo cursorinfo;
\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
54 waittime = TimeCount;
\r
56 IN_ReadCursor(&cursorinfo);
\r
57 if (((cursorinfo.x < 0) || IN_KeyDown(sc_LeftArrow)) && (kx > PaddleMinX))
\r
59 else if (((cursorinfo.x > 0) || IN_KeyDown(sc_RightArrow)) && (kx < PaddleMaxX))
\r
65 balltime = TimeCount + TickBase;
\r
70 if (ball && (cycle++ % 3))
\r
74 x += (US_RndT() & 1);
\r
76 if ((cx + 6 < x) && (cx < PaddleMaxX))
\r
78 else if ((cx + 6 > x) && (cx > PaddleMinX))
\r
82 VWB_Bar(BallMinX,BallMinY - 1,
\r
83 BallMaxX - BallMinX + 5,BallMaxY - BallMinY + 7,
\r
85 VWB_DrawSprite(cx,CPaddleY,PADDLESPR);
\r
86 VWB_DrawSprite(kx,KPaddleY,PADDLESPR);
\r
91 (((bx + bdx) >> 2) > BallMaxX)
\r
92 || (((bx + bdx) >> 2) < BallMinX)
\r
95 SD_PlaySound(BALLBOUNCESND);
\r
100 if (((by + bdy) >> 2) > BallMaxY)
\r
105 SD_PlaySound(COMPSCOREDSND);
\r
106 USL_DrawPongScore(kscore,cscore);
\r
109 USL_CtlDialog("You lost!","Press any key",nil);
\r
114 else if (((by + bdy) >> 2) < BallMinY)
\r
119 SD_PlaySound(KEENSCOREDSND);
\r
120 USL_DrawPongScore(kscore,cscore);
\r
123 USL_CtlDialog("You won!","Press any key",nil);
\r
137 && ((y >= CPaddleY) && (y < CPaddleY + 3))
\r
138 && ((x >= (cx - 5)) && (x < (cx + 11)))
\r
143 SD_PlaySound(COMPPADDLESND);
\r
148 && ((y >= (KPaddleY - 3)) && (y < KPaddleY))
\r
149 && ((x >= (kx - 5)) && (x < (kx + 11)))
\r
152 if (((bdy >> 2) < 3) && !(--speedup))
\r
159 SD_PlaySound(KEENPADDLESND);
\r
164 bdx = ((x + 5 - rx) >> 1) - (1 << 2);
\r
170 VWB_DrawSprite(x,y,(x & 1)? BALL1PIXELTOTHERIGHTSPR : BALLSPR);
\r
172 else if (TimeCount >= balltime)
\r
175 bdx = 1 - (US_RndT() % 3);
\r
179 bx = (BallMinX + ((BallMaxX - BallMinX) / 2)) << 2;
\r
180 by = (BallMinY + ((BallMaxY - BallMinY) / 2)) << 2;
\r
183 while (waittime == TimeCount)
\r
184 ; // DEBUG - do adaptiveness
\r
185 } while ((LastScan != sc_Escape) && !done);
\r
186 IN_ClearKeysDown();
\r
191 USL_PongCustom(UserCall call,struct UserItem far *item)
\r
193 if (call != uic_SetupCard)
\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