You have opened a new restaurant called Basic Burger. However, jealous competitors have contaminated your food. Your three chefs must assemble Basic Burgers while avoiding contaminated food. The contaminated food moves faster than your chef, but can be killed by falling burger parts or flying peppers (your trigger).
Your pepper shaker contains only five flying peppers. To renew them, you must catch the bouncing pepper shaker which occasionally travels through the maze.
Assembling burgers, killing contaminated food and collecting bouncing money earns points. For each 10000 points, you earn a new chef.
The contaminated food comes in from the sides. By listening to their entering sound, you can tell which side the food will enter from.
At the start of each round, a random maze is generated with up and down ladders. The speed of all players increases from rounds 1 to 7
Pressing START will restart Basic Burgers at level 1. Pressing the SPACE BAR will pause/resume the game.
Listing 1 creates two files which the Basic Burger program needs. The first file MHD (motion handler) may be used in games of your own design. The second file contains the modified character set, the player control stacks for MHD and the player images.
Listing 2 is Basic Burger, a 16K cassette or 24K disk maze game with as many as nine fast-moving objects on the screen at once.
This program illustrates many of the features of MHD (i.e., cyclic action, maze logic with variable homing logic, auto action on collision, auto action on boundary violation, adjustable player speeds, Missile support, joystick and trigger support.
Cassette users must add Listing 2C to Listing 2. When Basic Burger is RUN, cassette users will be asked to mount the tape created by Listing 1 and press RETURN. After debugging Basic Burger, the program plus the two files it uses may be placed on a single tape by typing GOTO 25000.
This section is for programmers wishing to incorporate MHD into their own games. Maze games or simple shoot-em-up games can be handled. MHD is a 1K machine language program that runs concurrently with Atari BASIC via deferred VBI (vertical blank interrupt). Its features are:
Users will need familiarity with player/missile graphics (if necessary, see COMPUTE!s First Book of Atari Graphics, Chapter 5). The user needs to specify where MHD, player control stacks, PMBASE and the grid table are to be loaded (see Figure 1). There are a series of OS and MHD POKEs to specify various options (see Tables 1 and 2). Subroutine 20000 sets up all of the above for Basic Burger.
The heart of MHD is the player control stacks. Player stacks 0-7 control players 0-3 and missiles 0-3. Each stack is 32 bytes long (see Figures 2 and 4). All stacks are turned on with I=USR(ADR(VECTOR$),ON) and off with I=USR(ADR(VECTOR$),OFF).
Study Figure 4 carefully to learn how to control your player's position, speed, collision actions, images and boundary action. Individual stacks can be turned off by POKEing X to 0. To remove image from screen, POKE X to 2, a boundary violation. MHD will remove player and turn the stack off.
DX and DY may be negative. To POKE in a negative number, add 256 to it and POKE in the result. For example, -2 becomes 256-2, or 254.
The following equation, called the grid equation, states that there are grid points every B steps in the X direction, and every A steps in the Y direction.
Displacement = 16 * (Y/A) + (X/B) - CConstant C is used to place the grid's corner at a given location (i. e., C = 16 * (Y0/A) - (X0/B), where (X0, Y0) is the upper left-hand corner of the grid. YO/A and XO/B must be integers.
The grid table is a 256-byte table which defines legal directions for the players to move at each grid point. The grid equation yields a displacement from the start of the table. The value at the displacement defines legal directions for the grid point (i. e., 1 = up, 2 = dovm, 4 = left, 8 = right). For example, if down and left are the legal directions, then the value of the grid point is 2 + 4, or 6.
MHD options are selected by changing MHD directly (see Table 2). Listing 3 gives the source code for MHD, allowing special patches to be added. The source code is for the BASM assembler, a subset of the BASM compiler. MHD and the player control stacks must lie on a page boundary.
Programmers should keep this article to incorporate MHD into their own games.
OS POKES FOR PMG | ||
---|---|---|
Register | Description | Content |
559 | Resolution | 46=Double, 62=Single (1) |
623 | Priority | (1 P0-P3, PF0-PF3; 2 P0, Pl, PF0, PF1, P2, P3, PF2, PF3; 4 PF0-PF3, P0-P3; 8 PF0, PF1, P0, P1, PF2, PF3, P2, P3)+16 if missiles have own color (register 711). |
704-707 | Player color | Hue * 16 + intensity |
53256-53259 | Player width | 0=Normal, 1=Double, 3=Quadruple |
53260 | Width of missiles | Two bits for each missile specify width |
53277 | Enable player/missile | 3=Enable (1) |
53278 | Hit clear | 0 clears collision registers 53252-53255 (player to playfields) 53260-53263 (player to player) 53256-53259 (missile to players) |
53279 | Page of player/ missile area | PEEK(106)-8=Double
resolution, PEEK(106)-16=Single resolution (1) |
(1) Most common POKE(s) to this register. |
MHD POKES |
---|
POKE CONTENT DEFAULT VALUE ON+1011 Page address of MHD 100 ON+2 Page of player control stack 152 ON+132 Page of player/missile base 152 ON+1006 Grid table address (0,6) page 6 ON+31 MHD exit address, user VBLANK (98, 288) XITVBV ON+63 0=Rapid fire 203=Life trig between shots ON+100 26= Limit bullets 30=Don't limit bullets ON+102 Bullet limit 255 ON+435=4 Enable missiles as and 5th player i.e. 8 ON+951=0 Stack player 4 252 ON+574 2=Continuous cyclic action 20=Cyclic action when moving. RESULT GRID EQUATION POKES OF POKES POKES TO MAKE A=8 default POKE ON+987,10:POKE ON+988,234:POKE ON+941,7 A=16 POKE ON+987,234:POKE ON+988,234:POKE ON+941,15 A=4 POKE ON+987,10:POKE ON+988,10:POKE ON+941,3 B=16 default POKE ON+994,74:POKE ON+934,15 B=8 POKE ON+994,234:POKE ON+934,7 C POKE ON+1003,C |
MEMORY LAYOUT FOR BASIC BURGER |
---|
Dispacement from PMBASE PGS CONTENT-512 -2 Modified character set 0 0 Player control stack 256 1 Player images 768 3 Missiles 1024 4 Player 0 Chef 1280 5 Player 1 Hot Dog 1536 6 Player 2 Pickle 1792 7 Player 3 Chicken 2048 8 MHD 1012 Bytes; Screen memory 960 bytes 4096 16 Top of memory |
INDIVIDUAL PLAYER CONTROL STACKS |
---|
Player Displacement stack from start Controls0 0 Player 0 Chef 1 32 Player 1 Hot Dog 2 64 Player 2 Pickle 3 96 Player 3 Chicken 4 128 Missile 0 Left Pepper 5 160 Missile 1 Right Pepper 6 192 Missile 2 Bouncing Pepper 7 224 Missile 3 Bouncing Money |
IMAGE LOCATIONS |
---|
Displacement from start Images0 Two hot dog images 32 Two pickle images 64 Two chicken images 96 Six chef images 192 Flying peppers 200 Four bouncing pepper images 232 Four bouncing bill images |
PLAYER CONTROL STACK |
---|
Displacement from start Content0 X Horizontal position 1 Y Vertical position 2 DX Change in X per change 3 DY Change in Y per change 4 IJIFFIES Jiffies per image change 5 XJIFFIES Jiffies per X change 6 YJIFFIES Jiffies per Y change 7 PPFC Player to playfields collision command 8 PPC Player to players collision command 9 PMC Player to missiles collision command 10 #IMAGES Number of images to cycle 11 IMSZ Image size 12 IMPTR Image pointer used by MHD 13 LSBIM Image address, least significant byte 14 MSBIM Image address, most significant byte 15 HI+BFLG Homing intelligence + boundary flag 16 XMIN Lower horizontal limit 17 XMAX Upper horizontal limit 18 YMIN Lower vertical limit 19 YMAX Upper vertical limit 20 ICNT MHD counter used with IJIFFIES 21 XCNT MHD counter used with XJIFFIES 22 YCNT MHD counter used with YJIFFIES 23 PX Prior X without collision 24 PY Prior Y used to reset on collision 25 LY Last Y used to remove old image 26 CONTROL 26-31 control special functions 27 Dx Defines DX,DY for stick or maze players 28 Dy For trigger add to CPLR's X,Y to form missile's X,Y. 29 CPLR Player to home in on (CONTROL 16) 30 HX or BULLET COUNT 31 HY or Last trigger position Collision command (0=Stop, 64=Reset, 128=Remove on collision) +WITH (bits 0-3) HI (2,4,6 ... 254) Random to hound dog. BFLG (0=Remove on violation, 1=Stop on boundary) 1 Jiffy= 1/60 of a second CONTROL (255=None, 0-3=Trigger, 4-7=4-way stick, 8-11=8-way stick, 16=Maze player with homing logic, 20-23=Maze Stick) Maze player has intelligence HI and homes in on CPLR. If CPLR=255, then maze player homes in on HX,HY. Note: If player stack is not used, set X=0 and CONTROL=255. |
5 REM PROGRAM CREATES TWO FILES FOR BA SIC BURGER 10 REM LOAD MHD IN MEMORY 20 PGTOP=PEEK(106):PG=PGTOP-8:LINE=100 00:GOSUB 1000 30 REM LOAD PLAYER STACKS IN MEMORY 40 ? CHR$(253):PG=PGTOP-11:LINE=10700: GOSUB 1000 50 REM LOAD PLAYER IMAGES IN MEMORY 60 ? CHR$(253):PG=PGTOP-10:LINE=11000: GOSUB 1000 70 REM MODIFY CHARACTER SET IN MEMORY 80 ? CHR$(253):PG=PGTOP-13:LINE=11300: GOSUB 1000:? CHR$(253) 90 B=PG*256:A=PEEK(756)*256:FOR I=128 TO 511:POKE B+I,PEEK(A+I):NEXT I:FOR I =256 TO 263:POKE B+I,255:NEXT I 96 A=B+512:RESTORE 97:FOR I=0 TO 7:REA D B:POKE A-272+I,B:POKE A-257-I,B:NEXT I 97 DATA 255,231,195,129,231,231,231,25 5 99 DIM F1$(20),F2$(20):F1$="C:":F2$=F1 $:SP=128 100 ? "MAKE CASETTE (0), OR DISK(1)";: INPUT CD:IF CD THEN F1$="D:MHD.ML":F2$ ="D:BURGER.BIN":SP=0 105 IF CD=0 THEN ? "INSERT CASSETTE, P USH PLAY AND":? "RECORD AND PRESS RETU RN" 110 IO=2:PG=PGTOP-8:OPEN #IO,8,SP,F1$: NUM=1012 120 GOSUB 20110 130 REM WRITE CHSET STACK AND IMAGES 140 PG=PGTOP-13:NUM=1023:POKE 764,12:O PEN #IO,8,SP,F2$ 150 GOSUB 20110:POKE (PGTOP-8)*256,0:E ND 1000 REM SUBR LOAD DATA IN MEMORY 1010 RESTORE LINE:B=PG*256:SUM=0:TRAP 1030 1020 FOR J=0 TO 15:READ A:POKE B,A:SUM =SUM+A:B=B+1:NEXT J 1030 IF LINE<>PEEK(183)+256*PEEK(184) THEN ? LINE;" MISSING":END 1040 READ A:IF SUM<>ABS(A) THEN ? "CHE CKSUM ERROR LINE ";LINE:END 1050 ? LINE:LINE=LINE+10:IF A>0 THEN 1 020 1060 TRAP 40000:RETURN 9999 REM MHD.ML 10000 DATA 216,169,152,133,204,169,255 ,133,0,133,209,230,0,165,0,201,2369 10010 DATA 8,208,14,165,209,208,3,141, 30,208,160,8,162,0,76,98,4067 10020 DATA 228,10,10,10,10,10,133,203, 160,0,177,203,208,85,160,26,5700 10030 DATA 177,203,201,4,176,213,170,1 60,31,189,132,2,209,203,240,203,8213 10040 DATA 145,203,168,208,198,165,204 ,133,206,160,29,177,203,10,10,10,10442 10050 DATA 10,10,133,205,160,0,177,205 ,240,177,160,30,177,203,24,105,12458 10060 DATA 1,145,203,160,30,201,255,20 8,4,169,255,145,203,160,27,177,14801 10070 DATA 203,160,0,24,113,205,145,20 3,160,28,177,203,160,1,24,113,16720 10080 DATA 205,145,203,169,152,133,208 ,165,0,201,4,144,2,169,255,24,18899 10090 DATA 105,4,74,170,169,0,106,133, 207,138,101,208,133,208,165,0,20820 10100 DATA 73,4,170,160,7,177,203,61,0 ,208,208,56,200,177,203,61,22788 10110 DATA 8,208,208,48,169,1,133,205, 165,0,201,4,176,81,170,200,24765 10120 DATA 177,203,240,75,133,206,202, 48,4,6,205,144,249,160,0,70,26887 10130 DATA 206,144,7,185,8,208,37,205, 208,8,200,192,4,208,240,24,28971 10140 DATA 144,45,160,9,177,203,10,144 ,14,169,0,133,209,160,0,145,30693 10150 DATA 203,32,187,103,76,11,100,10 ,144,18,160,23,177,203,160,0,32300 10160 DATA 132,209,145,203,160,24,177, 203,160,1,145,203,76,174,101,160,34573 10170 DATA 21,177,203,24,105,1,145,203 ,160,5,209,203,144,43,160,21,36397 10180 DATA 169,0,145,203,168,177,203,1 60,23,145,203,24,160,2,113,203,38495 10190 DATA 160,16,209,203,176,10,160,1 5,177,203,41,1,240,171,208,9,40494 10200 DATA 200,209,203,176,241,160,0,1 45,203,160,22,177,203,24,105,1,42723 10210 DATA 145,203,160,6,209,203,144,4 4,160,22,169,0,145,203,160,1,44697 10220 DATA 177,203,160,24,145,203,24,1 60,3,113,203,160,18,209,203,176,46878 10230 DATA 10,160,15,177,203,41,1,208, 11,240,193,200,209,203,176,241,49166 10240 DATA 160,1,145,203,160,20,177,20 3,24,105,1,145,203,160,4,209,51086 10250 DATA 203,144,27,160,20,169,0,145 ,203,160,12,177,203,24,105,1,52839 10260 DATA 145,203,160,10,209,203,144, 6,160,12,169,0,145,203,166,0,54774 10270 DATA 160,0,224,8,208,17,202,138, 73,3,10,234,234,113,203,157,56758 10280 DATA 4,208,202,16,242,48,5,177,2 03,157,0,208,160,12,177,203,58780 10290 DATA 170,136,169,0,24,202,48,4,1 13,203,208,249,160,13,24,113,60616 10300 DATA 203,133,205,200,169,0,113,2 03,133,206,160,1,177,203,72,160,62954 10310 DATA 25,209,203,240,3,32,187,103 ,104,160,25,145,203,24,101,207,64925 10320 DATA 133,207,160,11,177,203,168, 136,166,0,189,179,103,170,138,49,67114 10330 DATA 207,17,205,145,207,136,16,2 46,160,26,177,203,48,108,201,4,69220 10340 DATA 144,104,201,12,176,103,133, 205,41,3,170,169,0,160,2,145,70988 10350 DATA 203,200,145,203,189,120,2,7 3,15,133,206,208,8,160,20,169,73042 10360 DATA 0,145,203,240,69,70,206,144 ,10,160,28,169,0,241,203,160,75090 10370 DATA 3,145,203,70,206,144,8,160, 28,177,203,160,3,145,203,70,77018 10380 DATA 206,144,10,160,27,169,0,241 ,203,160,2,145,203,70,206,144,79108 10390 DATA 8,160,27,177,203,160,2,145, 203,165,205,201,8,176,11,160,81119 10400 DATA 2,177,203,240,5,200,169,0,1 45,203,76,11,100,201,16,240,83107 10410 DATA 112,41,3,170,32,161,103,240 ,13,169,12,192,0,240,2,169,84766 10420 DATA 3,133,206,24,144,50,32,215, 103,160,2,177,203,48,10,165,86441 10430 DATA 206,41,8,208,12,145,203,240 ,8,165,206,41,4,208,2,145,88283 10440 DATA 203,200,177,203,48,10,165,2 06,41,2,208,12,145,203,240,8,90354 10450 DATA 165,206,41,1,208,2,145,203, 189,120,2,73,15,37,206,133,92100 10460 DATA 206,208,12,160,2,177,203,20 0,17,203,208,12,76,61,102,169,94116 10470 DATA 0,160,2,145,203,200,145,203 ,169,4,133,205,76,69,102,208,96140 10480 DATA 137,160,21,177,203,208,248, 32,161,103,208,243,32,215,103,240,98631 10490 DATA 222,160,2,177,203,240,14,48 ,6,165,206,41,11,208,25,165,100524 10500 DATA 206,41,7,208,19,200,177,203 ,48,8,240,14,165,206,41,14,102321 10510 DATA 208,6,165,206,41,13,240,183 ,133,206,160,15,173,10,210,209,104499 10520 DATA 203,144,17,173,10,210,41,3, 170,189,175,103,37,206,240,243,106663 10530 DATA 133,206,208,155,160,29,177, 203,48,27,10,10,10,10,10,133,108192 10540 DATA 207,165,204,133,208,160,0,1 77,207,160,30,145,203,160,1,177,110529 10550 DATA 207,160,31,145,203,160,30,1 77,203,160,0,209,203,240,12,48,112717 10560 DATA 4,169,8,208,2,169,4,37,206, 208,197,160,31,177,203,160,114660 10570 DATA 1,209,203,48,4,169,2,208,2, 169,1,37,206,208,177,240,116544 10580 DATA 162,160,0,177,203,41,15,208 ,5,200,177,203,41,7,96,1,118240 10590 DATA 2,4,8,0,0,0,0,252,243,207,6 3,166,0,189,179,103,119656 10600 DATA 133,1,160,11,177,203,170,16 0,25,177,203,168,177,207,37,1,121666 10610 DATA 145,207,200,202,208,246,96, 160,1,177,203,10,234,133,206,136,124230 10620 DATA 177,203,74,74,74,74,24,101, 206,56,233,0,168,185,0,6,125885 10630 DATA 133,206,96,100,0,0,0,0,0,0, 0,0,0,0,0,0,-126420 10690 REM PLAYER CONTROL STACKS *** 10695 REM CHEF 10700 DATA 0,0,0,0,10,4,5,0,143,0,2,16 ,0,160,145,1,486 10710 DATA 60,196,40,137,0,0,0,0,0,0,2 0,1,1,0,0,0,941 10715 REM HOT DOG 10720 DATA 0,0,0,0,10,3,4,139,0,131,2, 16,0,0,145,150,1541 10730 DATA 10,250,16,250,0,0,0,0,0,0,1 6,1,1,0,0,0,2085 10735 REM PICKEL 10740 DATA 0,0,0,0,10,3,4,139,0,131,2, 16,0,32,145,150,2717 10750 DATA 10,250,16,250,0,0,0,0,0,0,1 6,1,1,0,0,0,3261 10755 REM CHICKEN 10760 DATA 0,0,0,0,20,3,4,139,0,131,2, 16,0,64,145,150,3935 10770 DATA 10,250,16,250,0,0,0,0,0,0,1 6,1,1,0,0,0,4479 10775 REM RIGHT FLYING PEPPER 10780 DATA 0,0,1,1,0,1,1,139,142,0,1,5 ,0,192,145,0,5107 10790 DATA 32,216,16,200,0,0,0,0,0,0,0 ,4,255,0,0,0,5830 10795 REM LEFT FLYING PEPPER 10800 DATA 0,0,255,1,0,1,1,139,142,0,1 ,5,0,192,145,0,6712 10810 DATA 32,216,16,200,0,0,0,0,0,0,0 ,2,255,0,0,0,7433 10815 REM BOUNCING P 10820 DATA 0,0,0,0,4,5,6,0,1,0,4,8,0,2 00,145,1,7807 10830 DATA 32,240,40,137,0,0,0,0,0,0,1 6,1,1,1,0,0,8275 10835 REM BOUNCING MONEY 10840 DATA 0,0,0,0,4,5,6,0,129,0,4,8,0 ,232,145,0,8808 10850 DATA 32,240,40,137,0,0,0,0,0,0,1 6,1,1,1,0,0,-9276 10990 REM IMAGES FOR PLAYERS **** 10995 REM TWO HOT DOG IMAGES 11000 DATA 48,120,180,252,252,126,126, 62,62,126,126,252,252,252,120,48,2404 11010 DATA 12,30,45,62,62,126,126,252, 252,126,126,62,62,62,30,12,3851 11015 REM TWO PICKEL IMAGES 11020 DATA 0,24,0,126,0,90,0,255,0,231 ,0,90,0,126,0,24,4817 11030 DATA 0,0,0,0,0,0,126,255,126,0,0 ,0,0,0,0,0,5324 11035 REM TWO CHICKEN IMAGES 11040 DATA 0,0,24,60,60,126,126,126,12 6,60,60,60,24,24,24,60,6284 11050 DATA 0,0,60,24,24,24,60,60,60,12 6,126,126,126,60,60,24,7244 11055 REM 2 MV LEFT,2 MV RT,2 CLIMBING CHEF IMAGES 11060 DATA 0,0,0,0,62,127,62,28,28,12, 63,127,92,28,54,54,7981 11070 DATA 0,0,0,0,62,127,62,28,28,12, 127,127,29,28,54,99,8764 11080 DATA 0,0,0,0,62,127,62,28,28,24, 63,127,92,28,54,54,9513 11090 DATA 0,0,0,0,62,127,62,28,28,24, 127,127,29,28,54,99,10308 11100 DATA 0,0,0,0,0,124,254,124,56,56 ,126,254,254,252,108,12,11928 11110 DATA 0,0,0,0,0,124,254,124,56,56 ,252,254,254,126,108,96,13632 11115 REM FLYING PEPPER, 4 BOUNCING P 11120 DATA 15,0,15,0,15,0,0,0,48,48,48 ,32,32,32,0,0,13917 11130 DATA 0,48,48,48,32,32,32,0,0,0,4 8,48,48,32,32,32,14397 11135 REM , 4 MONEY IMAGES 11140 DATA 0,48,48,48,32,32,32,0,0,0,0 ,0,192,192,192,192,15405 11150 DATA 0,0,0,192,192,192,192,0,0,0 ,192,192,192,192,0,0,16941 11160 DATA 0,0,0,192,192,192,192,0,0,0 ,0,0,0,0,0,0,-17709 11290 REM 16 REDEFINED CHARACTERS *** 11300 DATA 0,0,0,0,0,0,0,0,255,255,0,2 55,0,255,0,255,1275 11310 DATA 3,7,15,31,63,127,255,255,25 5,255,191,255,255,255,223,255,3975 11320 DATA 192,240,248,252,254,255,191 ,255,0,255,0,255,0,255,0,255,6882 11330 DATA 19,63,127,255,255,127,63,6, 96,252,254,255,255,254,252,200,9615 11340 DATA 255,191,255,127,63,31,15,3, 255,191,255,254,252,248,240,192,12442 11350 DATA 0,0,0,0,0,0,0,255,31,63,127 ,191,255,127,63,31,13585 11360 DATA 248,252,254,255,191,254,252 ,248,28,191,255,255,255,255,253,56,17087 11370 DATA 0,0,0,0,0,0,24,60,24,24,60, 36,36,44,110,126,-17631 20110 REM IO=(1=READ,2=WRITE) 20120 REM PG=PAGE , NUM =# OF BYTES 20130 IOCB=832+IO*16:POKE IOCB+2,3+4*I O:POKE IOCB+4,0:POKE IOCB+5,PG 20140 I=INT(NUM/256):POKE IOCB+8,NUM-I *256:POKE IOCB+9,I 20150 I=USR(ADR("hhh*LVd"),IO*16):CLOS E #IO:RETURN |
![]() |
(see CCHECK & DCHECK or UNICHECK) 5 DATA 771,738,722,884,34,857,16,424,3 49,88,667,293,346,991,751,7931 110 DATA 123,4,909,25,65,590,547,424,9 24,502,1,910,182,723,185,6114 10020 DATA 412,553,26,530,574,696,807, 730,415,486,309,502,327,405,15,6787 10170 DATA 491,587,509,525,462,777,568 ,446,453,457,307,340,464,752,530,7668 10320 DATA 65,626,500,716,498,266,707, 484,242,414,286,236,464,460,722,6686 10470 DATA 454,887,514,289,804,762,747 ,44,783,276,236,178,849,599,821,8243 10620 DATA 274,852,632,889,617,375,251 ,892,579,460,175,578,328,199,598,7699 10775 DATA 11,875,874,214,901,853,757, 305,579,438,431,836,363,70,733,8240 11010 DATA 86,771,4,369,26,699,712,503 ,578,397,576,571,130,132,222,5776 11120 DATA 987,284,310,368,844,897,922 ,886,567,339,810,885,360,194,414,9067 20110 DATA 736,579,477,205,172,2169 |
1 REM ** BASIC BURGER ** 2 REM BY DAVID H. BUTLER 4 K1=1:K2=2:K3=3:K4=4:K5=5:K6=6 5 DIM UP$(K1),VECTOR$(11),FOOD$(18),B$ (12):LIFE=K3:BPNT=10000:B$=" ":LEVEL=PEEK(1750) 10 RESTORE 1600:FOR I=K1 TO 11:READ A: VECTOR$(I)=CHR$(A):NEXT I:FOR I=K1 TO 18:READ A:FOOD$(I)=CHR$(A):NEXT I 90 GRAPHICS 17:POKE 77,K0:GOSUB 20000: POKE 756,PGCHSET:PFLG=K0:GOSUB 7800:BF LG=PFLG:SOUND K1,20,12,8:POKE 764,255 163 IF PEEK(53279)=K6 OR NOT STRIG(K0 ) THEN GOSUB 550:RUN 164 IF LIFE=K0 THEN I=USR(ADR(VECTOR$) ,OFF):GOSUB 1500:POSITION K6,K0:? #K6; "0";:GOTO 163 165 GOSUB 550:BLUE=170:XOLD=128:POKE A +K1,40:POKE A,XOLD:I=USR(ADR(VECTOR$), ON) 169 REM START OF MAIN LOOP 170 X=PEEK(A):X1=INT(X/32+0.5)*32:IF NOT X THEN GOSUB 9100:GOTO 163 175 Z=PEEK(A+K2)<>K0:IF Z THEN SOUND K 0,250,K2,Z*K4 180 IF X-XOLD>24 THEN X0=XOLD:XOLD=X1: X1=X1-8:GOSUB 1000 181 IF XOLD-X>24 THEN X0=X1:X1=XOLD:XO LD=X0:GOSUB 1000 183 YOLD=PEEK(A+K1):POSITION K0,K0:? # K6;"LIVES ";LIFE;" SCORE ";PNT;:IF PEE K(53279)=K6 THEN LIFE=K0:GOTO 164 |
![]() |
184 IF PNT>=BPNT THEN GOSUB 9410 186 I=PEEK(PEPPER)*K2+K1:POSITION K1,2 2:? #K6;B$(K1,I);:POSITION K1,23:? #K6 ;B$(K1,I); 187 IF NOT BFLG THEN IF PEEK(20)>60 T HEN POSITION 14,23:? #K6;" "; 190 POKE 53761,K0:REM QUICK SO.0,0,0,0 191 IF NOT PFLG THEN IF PEEK(53770)<K 4 THEN PFLG=K1:B=A+K6*32:GOSUB 1120 192 IF PFLG=K1 THEN B=PEEK(53258)/K2:I F B<>INT(B) THEN GOSUB 8270:POKE A+192 ,K2:PFLG=K0:GOSUB 9300:POKE 53278,K0 193 IF NOT BFLG THEN IF PEEK(53770)<7 THEN BFLG=K1:B=A+224:GOSUB 1120 194 IF BFLG AND NOT PEEK(A+224) THEN POSITION 14,23:? #K6;"B=";BONUS;:BFLG= K0:PNT=PNT+BONUS:POKE 20,K0:GOSUB 9300 195 IF PEEK(764)=33 THEN GOSUB 9000 200 GOSUB 1100:GOSUB 990:GOTO 170 540 REM REMOVE ALL PLAYERS, SET DX AND DY TO ZERO ON ALL BUT PEPPERS 550 FOR I=K0 TO 7:B=A+I*32:POKE B,K2:P OKE 53248+I,K0:IF I<>K4 AND I<>K5 THEN POKE B+K2,K0:POKE B+K3,K0 560 NEXT I:POKE A+21,K0:POKE 53278,K0: BFLG=K0:PFLG=K0:D=K0:RETURN 980 REM CHOOSE CHEF IMAGE 990 DX=PEEK(A+K2):POKE A+13,96*(DX=255 )+128*(DX=K1)+160*(DX=K0) 993 REM FLYING PEPPER SOUND 995 P=PEEK(A+128):IF NOT P THEN P=PEE K(A+160) 996 DX=ABS(P-PEEK(A))/10:SOUND K1,K5,K 4,(8-DX)*(DX<8)*(P<>K0):RETURN 999 REM FALLING BURGER ROUTINE 1000 Y=INT((YOLD-40)/24+0.5)*24+40:PY= Y/8-K2:PX=X0/8-K5:LOCATE PX,PY,OUT:IN= 32 1010 IF IN=OUT THEN RETURN 1025 REM REMOVE FOOD ON TOP BURGER PAR T 1030 FOR I=32 TO 96 STEP 32:B=PEEK(I+A ):IF PEEK(A+I+K1)=Y THEN IF B>X0 AND B <X1 THEN POKE I+A,K2 1040 NEXT I 1045 PNT=PNT+100:POSITION PX,PY:? #K6; " "; 1050 FD=K6*(OUT=34)+9*(OUT=K6)+12*(OUT =139)+15*(OUT=40)+K1:SOUND K0,255-PY*1 0,10,K4 1051 POKE 53763,K0:IF PEEK(A+128) THEN SOUND K1,K5,K4,K4 1055 FOOD=K3*(IN=170)+K6*(IN=34)+9*(IN =K6)+12*(IN=139)+15*(IN=40)+K1:IF PEEK (764)=33 THEN GOSUB 9000 1060 IF PY>16 THEN LOCATE PX,PY+K1,IN: IF IN<>32 THEN PNT=PNT+400*(PY=17):POK E 53761,K0:GOTO 1095 1070 IF IN=32 OR IN=BLUE THEN POSITION PX,PY:? #K6;FOOD$(FOOD,FOOD+K2);:IF ( IN=BLUE) AND PEEK(A+K3) THEN GOSUB 990 1075 PY=PY+K1:LOCATE PX,PY,IN:POSITION PX,PY:? #K6;FOOD$(FD,FD+K2);:IF IN<>3 2 AND IN<>BLUE THEN OUT=IN:GOTO 1050 1090 GOTO 1055 1091 REM TEST FOR END OF ROUND 1095 FOR I=K4 TO 16 STEP K4:LOCATE I,1 7,B:IF B=32 THEN POP :RETURN 1096 NEXT I:POP :PNT=PNT+800:FOR I=K1 TO K3:PNT=PNT+100*( NOT PEEK(A+I*32)): NEXT I:GOSUB 550:GOSUB 9200:GOTO 10 1099 REM BRING FOOD TO LIFE 1100 IF RND(K0)<0.75 THEN RETURN 1105 B=A+32+32*INT(K3*RND(K0)):IF PEEK (B) THEN RETURN 1110 D=D+K1:PNT=PNT+(D>K3)*100 1120 Y=40+INT(RND(K0)*K5)*24:X1=32+192 *INT(RND(K0)*K2):POKE B+K1,Y:POKE B+K2 ,K0:POKE B+K3,K0:POKE B,X1:RETURN 1500 REM PUT DEAD CHEF ON SCREEN 1510 I=PEEK(A+25)+A+1024:B=PEEK(A+13)+ 256*PEEK(A+14):FOR J=K4 TO 15:POKE I+J ,PEEK(B+J):NEXT J:RETURN 1600 DATA 104,104,170,104,168,169,7,32 ,92,228,96 1610 DATA 32,32,32,170,170,170,34,35,3 6,6,13,7,139,131,140,40,35,41 7800 REM SET SPEEDS 7810 LEVEL=LEVEL+(LEVEL<7):RESTORE 788 0:POSITION 14,22:? #K6;"L=";LEVEL; |
![]() |
7815 FOR I=K1 TO LEVEL:READ B,C,BONUS: NEXT I 7820 POSITION K2,K2:? #K6;"GET READY T O PLAY"; 7830 POSITION K2,21:? #K6;"BASIC BURGE R"; 7840 POKE A+K5,B+K1:POKE A+K6,C+K1:POK E A+197,B+K2:POKE A+198,C+K2 7850 FOR I=K1 TO K3:POKE A+I*32+K5,B:P OKE A+I*32+K6,C:NEXT I:PEPPER=A+128+30 :IF NOT PNT THEN POKE PEPPER,K0 7880 DATA 4,3,500,3,4,750,3,3,1000,3,2 ,1500,2,3,2000,2,2,3000,2,1,5000 7890 POSITION K2,22:? #K6;"PEPPERS=";K 5-PEEK(PEPPER); 7900 POSITION K2,23:? #K6;"LIVES=";LIF E;" SC=";PNT; |
![]() |
7905 IF PNT>BPNT THEN GOSUB 9400 8000 REM DRAW RANDOM MAZE 8010 FOR I=K0 TO 192 STEP 16:RESTORE 8 050:C=( NOT I)+K2*(I=192) 8020 FOR J=K1 TO 16:READ B 8030 POKE 1536+I+J,B-C*(B=K3) 8040 NEXT J:IF PEEK(53279)=K5 THEN LEV EL=LEVEL*(LEVEL<>7):POKE 1750,LEVEL:PO P :GOTO 7800 8045 NEXT I 8050 DATA 8,8,8,3,12,3,12,3,12,3,12,3, 4,4,4,4 8055 REM ADD BASIC MAZE 8060 FOR I=K2 TO 11 STEP K3:POSITION K 2,I 8070 IF I=K2 THEN ? #K6;"************* ****":GOTO 8090 8080 ? #K6;"%***%***%***%***%" 8090 ? #K6;" ! ! ! ! !" 8100 ? #K6;" % % % % %" 8110 NEXT I:POSITION K2,14:? #K6;"%*** %***%***%***%"; |
![]() |
8120 REM ADD FOOD MODIFY MAZE 8130 FOR I=K3 TO 15 STEP K4:FD=7 8140 B=K3+K3*INT(RND(K0)*K5) 8150 FOR J=K3 TO 15 STEP K3 8160 IF J=B THEN POSITION I,J-K1:? #K6 ;" ";:GOTO 8190 8170 POSITION I,J:? #K6;FOOD$(FD,FD+K2 );:FD=FD+K3 8180 GRID=1536+16*(J-K3)+(I+K5)/K2:POK E GRID,PEEK(GRID)+8:POKE GRID+K2,PEEK( GRID+K2)+K4 8190 NEXT J:NEXT I 8200 REM ADD ONE WAY LADDERS 8210 FOR I=K3 TO 19 STEP K4 8220 UP= NOT UP:UP$="?":IF UP THEN UP$ =">" |
![]() |
8230 J=K4+K3*INT(RND(K0)*K4):GRID=1536 +16*(J-K4)+(I+K5)/K2 8240 B=GRID+48*( NOT UP):IF PEEK(B)-UP =K1 THEN 8230 8250 POKE B,PEEK(B)-UP-UP-( NOT UP) 8260 POSITION I-K1,J:? #K6;UP$;:NEXT I 8270 POSITION K2,21:FOR I=K1 TO 17:? # K6;CHR$(96);:NEXT I:POSITION K2,22:FOR I=K1 TO K5:? #K6;" ";CHR$(14);:NEXT I 8280 POSITION K0,23:? #K6;" / / / / / "; 8285 IF PNT AND NOT PFLG THEN RETURN 8290 B=A+128:POKE PEPPER,K0:POKE B+26, K0:POKE PEPPER+32,K0:POKE B+32+26,K0:R ETURN 9000 POKE 764,255:I=USR(ADR(VECTOR$),O FF):GOSUB 9220 9010 IF PEEK(764)<>33 THEN 9010 9020 POKE 764,255:I=USR(ADR(VECTOR$),O N):RETURN 9100 REM KILL CHEF SOUND 9110 LIFE=LIFE-K1:FOR D=15 TO K0 STEP -K1:SOUND K0,255*RND(K0),10,D:NEXT D:P FLF=D:BFLG=D:RETURN 9200 REM END ROUND SOUND 9210 FOR I=160 TO 80 STEP -K1:SOUND K0 ,I,10,K6:NEXT I:SOUND K1,60,14,K6:SOUN D K2,96,14,K6 9220 POKE 53761,K0:FOR I=K1 TO 150:NEX T I:SOUND K1,K0,K0,K0:SOUND K2,K0,K0,K 0:RETURN 9300 FOR I=K1 TO 10:SOUND K0,20*RND(K0 ),10,8:NEXT I:POKE 53761,K0:RETURN 9390 DATA 38,32,26,20,32,26 9400 REM BONUS CHEF 9410 LIFE=LIFE+K1:BPNT=BPNT+10000:REST ORE 9390:FOR I=K1 TO K6:READ B:SOUND K 0,B,10,K6:FOR B=K0 TO 10:NEXT B:NEXT I 9420 POKE 53761,K0:RETURN 20000 REM ONE TIME SET UP 20015 REM ASSIGN COLORS TO PLAYERS 20020 POKE 704,14:POKE 705,70:POKE 706 ,PEEK(709):POKE 707,24:POKE 711,22 20025 REM LOAD IN MHD IF NOT LOADED 20030 PGTOP=PEEK(106):PGCHSET=PGTOP-18 :PG=PGTOP-8:LET ON=PG*256:NUM=1012 20035 IF PEEK(ON)=216 THEN 20090 20040 IO=K1:OPEN #IO,K4,K0,"D:MHD.ML": GOSUB 20110:GOSUB 20160 20045 REM MHD RET.=DEFERRED VBLANK 20050 POKE ON+31,PEEK(548):POKE ON+32, PEEK(549):LEVEL=K0:POKE 1750,LEVEL 20055 POKE ON+100,26:POKE ON+102,K5:RE M LIMIT PEPPERS TO 5. 20060 POKE ON+146,24:REM SINGLE RESOLU TION. 20065 POKE ON+951,240:POKE ON+952,240: REM CHANGE MISSILE KEEP MASK. 20070 POKE ON+1003,80:REM GRID EQUATIO N=2Y+X/16-80 . 20075 REM LOAD IN CHSET+STACKS+IMAGES 20080 OPEN #IO,K4,K0,"D:BURGER.BIN":NU M=1032:PG=PGCHSET:GOSUB 20110:POSITION K2,10:? #K6;"CLEARING PM AREA"; 20085 B=(PGTOP-16)*256:FOR I=768 TO 20 47:POKE B+I,K0:NEXT I:REM CLEAR PM ARE A 20090 A=PGTOP-16:POKE 54279,A:POKE ON+ 132,A:POKE 559,62:POKE 53277,K3:POKE O N+K2,A:POKE 623,17:POKE 53260,208 20095 A=A*256:FOR I=K0 TO 7:POKE A+I*3 2+14,PGTOP-15:NEXT I:REM PG ADDRESS OF IMAGES 20100 OFF=PEEK(ON+31)+PEEK(ON+32)*256: RETURN 20110 REM IO=(1=READ,2=WRITE) 20120 REM PG=PAGE , NUM =# OF BYTES 20130 IOCB=832+IO*16:POKE IOCB+K2,K3+K 4*IO:POKE IOCB+K4,K0:POKE IOCB+K5,PG 20140 I=INT(NUM/256):POKE IOCB+8,NUM-I *256:POKE IOCB+9,I 20150 I=USR(ADR("hhh*LVd"),IO*16):CLOS E #IO:RETURN |
![]() |
20155 REM MAKE MHD RELOCATABLE 20160 RESTORE 20170:FOR I=K1 TO 14:REA D A:POKE ON+A,PEEK(ON+A)-PEEK(ON+1011) +PG:NEXT I:POKE ON+1011,PG:RETURN 20170 DATA 243,246,270,503,524,652,662 ,680,750,766,777,782,843,959 |
(see CCHECK & DCHECK or UNICHECK) 1 DATA 150,445,59,972,42,311,590,285,4 99,481,318,484,332,324,920,6212 184 DATA 222,626,598,651,401,10,899,50 2,323,354,344,511,660,642,508,7251 993 DATA 998,967,775,317,837,739,469,8 01,488,390,677,954,898,833,780,10923 1075 DATA 176,730,186,496,55,681,224,7 99,797,361,227,104,201,119,895,6051 7810 DATA 722,778,104,143,5,491,313,25 ,989,142,673,586,173,352,619,6115 8045 DATA 512,769,77,233,45,369,765,79 5,262,939,914,724,391,777,367,7939 8180 DATA 785,514,987,397,53,96,496,29 8,959,919,538,949,605,842,882,9320 9020 DATA 347,339,428,462,70,941,118,6 6,915,464,343,511,44,592,606,6246 20030 DATA 798,896,751,843,894,481,889 ,814,665,406,834,714,396,496,954,10831 20110 DATA 736,579,445,205,172,246,683 ,42,3108 |
20036 REM ADD TO BASIC BURGER FOR CASS ETTE SYSTEMS 20037 POSITION 2,10:? #6;"MOUNT TAPE H IT KEY"; 20040 IO=1:OPEN #IO,4,128,"C":GOSUB 20 110:GOSUB 20160 20080 POKE 764,12:OPEN #IO,4,128,"C":N UM=1032:PG=PGCHSET:GOSUB 20110:POSITIO N 2,10:? #6;"CLEARING PM AREA "; 25000 REM MAKE TAPE BACKUP 25010 IF PEEK(ON)<>216 THEN ? "RUN BAS IC BURGER BEFORE SAVEING":END 25020 TRAP 25030:LPRINT :REM LPRINT BE FORE SAUE 25030 TRAP 40000:? "MOUNT TAPE. HIT RE TURN" 25040 CSAUE :IO=2:NUM=1012:POKE 764,12 :OPEN #IO,8,128,"C":PG=PGTOP-8:GOSUB 2 0110 25050 NUM=1032:PG=PGCHSET:POKE 764,12: OPEN #IO,8,128,"C":GOSUB 20110 |