-
Content Count
805 -
Joined
-
Last visited
Content Type
Profiles
Member Map
Forums
Blogs
Gallery
Calendar
Store
Everything posted by InfernalKeith
-
I like the idea of separating out crops and herds. My worry was, if each square can be in too many "states" (farmland, water, overrun by zombies, etc) we'd rapidly run out of graphic characters in different color sets to use. A lot will probably depend on making several states be in the same color, but distinguishable to the user's eye -- unplowed land vs. plowed, for example. One possible solution: require the barns and silos to take up 2x2 squares, and make them sprites. Make it a requirement that they're placed on cleared land, and perhaps set some kind of limit on how many of each (to get around the four sprites-per-line jazz). We want them to take up a proper amount of real estate, to force the player to plan properly, but their only function in actual game mechanics will be to increase the variable that allows for maximum stored amount of crops/cattle. I gotta go get some real-life work done, but I'll do some puzzling out on paper of formulas and mechanics today, and come back to this later tonight.
-
Holy crap, three new messages in this thread just since I started typing the post above. This place is on fire!
-
OK, I brainstormed this on the drive home from dropping off kids this morning. Here's one proposal for a way to do it, see what you guys think. (And again, I need my head examined, I don't have time for yet another project right now). I see the farm portion of the game and an action bit as two separate programs. The farm screen is, say, 16x32, with eight lines at the bottom for stats, alerts, etc. The "map" of the farm consists of squares in various states, such as: uncultivated land plowed ("reclaimed") land planted land grazing land (need x amount per livestock) water (there'll be a river on one side of the map; digging a canal from it will increase the max amount of crops, and max amount of sustainable population) house (need housing units per x number of people) barn (allows storage of x amount of grain and animals) A square can also be "overrun" which means it's infested by zombies, and nothing can be done with it. Each turn you get x number of "moves" depending on your population, morale, etc. You have to allocate food, decide where to plant, to send people out to dig canals, plow land, build more shelters, etc. You can also select an "overrun" square, adjacent to your cleared turf, and pick how many people to take along on a 'zombie clearing.' At that point the game saves its variables and loads the zombie attack portion, which should be a simple, fast, assembly-based arcade sequence. Once that's over and casualties are counted, it transfers control back to the farm program. In addition, the zombies will periodically attack new squares of turf, so even if the player doesn't aggressively go after the zombies, they'll be forced into "battle mode" to defend their existing farmland, buildings, etc. "Winning" could be a certain population threshhold, or the clearing of the entire map of zombies. There's more detail to work out, about how overrun the map would be at the start, the formulae for how fast food grows, etc, but this gives you the general idea. Let me know if doing it this way appeals to anyone. If not, I'm totally ok with it (and will likely make a game like this in 30 years when my schedule opens up). If you DID want to go with this idea, I'd be happy to tackle the XB farm portion of things, and would love for someone else to handle a fast-paced assembly arcade portion, nicer graphics, etc.
-
Okay, because I can't stop thinking about this idea... it's really similar to a game I wanted to do! I was gonna call it "Fort Zombie," but I Googled that title and it's an actual game coming out for PC. I'm thinking of a turn-based farm-type game, which would be a more graphical version of the classic Hammurabi -- you have to allocate land for planting, seeds to grow stuff, assign labor to harvest, assign grain for feed, account for rats and spoilage, etc. Then, in the midst of all this, there could be sprite-based arcade action sequences where you go out with your prime zombie response team to blast the undead as they infiltrate sectors of your map. You could build walls and moats, till and rotate land, etc. Ooh, and have to allow space for your population to live as well, and morale could go up or down depending on how densely they're forced to live and how much they have to work. Argh! Stop it! Too many ideas, no time!! [email protected][email protected]@!#ergeRG3hmbrg f
-
I'm still under TI quarantine till Sunday.
-
Okay, I'm gonna throw a curveball into this idea. Bear with me on this one... ZOMBIE FARMVILLE No, the animals aren't zombies. But it's the fabled zombie apocalypse, and you have x number of people hiding out on your farm. You have to continue to manage the farm, grow crops, keep the animals fed, and provide food for all these refugees... but at the same time, you have to allocate people to keep zombies off the perimeter, prevent them from destroying crops and killing animals, and most of all, keep your people alive. I had an idea for a game like this a while ago, but figured the zombie thing had been done to (wait for it) death... but Zombie Farmville... THERE's a hook.
-
I did the cut-and-paste... the graphics look great, dude. Can't wait to see this project grow.
-
Loading one piece of code from another
InfernalKeith replied to InfernalKeith's topic in TI-99/4A Development
Not before I have more than a fistful of crappily-drawn buildings on graph paper. -
Loading one piece of code from another
InfernalKeith replied to InfernalKeith's topic in TI-99/4A Development
I'm actually not too worried about the current game. I know it could be much faster, but I noticed even running it in CPU Overdrive mode in Classic99, that the speed of the cats becomes almost too fast for gameplay. If you were deploying the tools in real time, instead of pausing the action, it would definitely work better as a faster game. I will concede that a few of the tools, like 'cut screen in 2' and especially the Catdozer, are unacceptably slow at the moment. I'm thinking more of Downward at the moment -- I'm thinking it would be a much richer game if I could load in modules for the various places the character visits (inns, bazaars, temples, farms, etc) instead of having to cram it all into one main program. Now that many people are using CF drives or their emulator, the problem of disk load time may not be as bad. The big trick will be to make sure I'm more organized so that the same standard batch of variables gets transferred between modules, and you don't wind up leaving the bazaar with zero gold because I forgot to save and load it from the master variable file. I dunno. Once I dive back into the game, I'll try out a rudimentary version of what I'm talking about and see how it works. -
I got it, and my CF drive, pretty recently. I was already hip-deep in coding Herding Cats on my stock hardware, so I just learned enough to get my code onto the drive, then copied and pasted into Classic99 (which I also just started using). I was so busy doing all that, I haven't yet explored any of this stuff much. I really enjoyed finishing Cats without the constant jet engine of the PE Box fan, though. Now that the dust is settling, I will probably bow to practicality and reality and start working in Classic99, so I plan to spend a little time learning the ropes of all this new stuff this weekend. Low tech note: to get my code off the floppy disk and onto the CF in the first place, I saved it to tape.
-
I'll delete what I have and re-download later, and see if I can get it to run in Classic99 or on my 99/4A. I was having trouble getting things onto the CF drive before, but I haven't really had the time to mess with TiDir much yet, to figure it out (or, heaven forbid, read the directions).
-
If points are no object, like in cheat mode, I can generally end up saving a decent amount of cats - lots of bulldozing is involved. Once all thirty levels are implemented, that level will be WAY higher up than five, if we don't simplify it a little bit. That's the one my son drew up... the little sadist. On the other hand, level four is a little too easy. I think it works great visually, but you can generally beat it with one tool. I wanna make that one a little harder.
-
Soooo... should I grab the older version of Classic99 to make it work, or wait for a fix? And to be clear, it won't work at all in the newest version? How about if I just run it on my 99/4A?
-
How far have you gotten into it? One of the drawbacks of a deadline is that we didn't get to do a TON of play-testing. I know levels five and six may be TOO hard. The trick to level one is to do nothing... and to decide if that one cat outside the restraining wall is REALLY worth saving... remember, the "cat-pocalypse" doesn't cost you any points. Honestly, the idea just hit me in November. I was working on my trading/RPG hybrid game Downward, and I thought of asterisks just going around the screen, totally at random. That's all I thought of... and within five minutes I had the whole concept for the game. I think it owes a debt to the game Lemmings, but it's kinda the "anti-Lemmings," because in that game, you use the characters to manipulate their environment. In HC, you can't make the little buggers do anything. Two-player mode will have two exits. Some tools will be eliminated and a couple new ones, exclusive to that version, will be introduced. Right now, my plan is to either give the opposing sides the right to "buzz in" whenever they want and make changes, but charge them points to do so, or to allow them each one move every X cycles. I will probably try both approaches and see which one works best. And I won't release it unless I can come up with at least serviceable AI -- two-player-only games with no AI drive me batty. I'm down for any suggestions - like I said earlier, there are a million minor tweaks I wanna make already. I have an idea for one or two more tools in this version, too, depending on how the memory looks after I strip out the DATA statements and go to disk-file loading.
-
Figuring on my next project being done in sections, which could load in as needed. Let's say, for argument's sake, that all I'm doing is a simple 500 RUN DSK1."NEXTBIT" to go from one to the next. I seem to recall that characters redefined in program 1 will stay redefined in program 2, but that variables won't. True? Also, if you had one relative file on the disk with all the needed variables, and you wrote to it before RUNning a new segment (then loaded all the data back in when the new segment took over), are there any complications (besides a huge slowdown)?
-
I'd be okay with putting it on cassette, but I figure anyone with a disk drive is very likely to also have 32K. I'd like to make some games that could be run on an unexpanded TI, although I know XB eats up character sets AND memory, so it'd be a challenge to do something fun and interesting without it being so slow as to be unplayable.
-
Impressive, my friend! I would love to use this utility to help design the graphics for my next game. Perhaps it's time to give up on the ol' graph paper, at least for the characters and small icons. Mapping is too much fun on pencil and paper.
-
Hopefully it'll be a moot point, as I'm gonna have to strip out all those DATA statements and have the levels load from disk. We designed 30 and could only fit 7, so even a chunk of memory savings won't be enough to cram in 23 more. And it only makes sense to allow the loading of levels (and a level editor) for future playability. I never paid a lot of attention to memory-saving devices because a) I naively thought my little idea wouldn't top out at 48K (at one point I REALLY naively thought I could fit it in 16K and put it on tape), and b) I'm still really rusty... this is my first completed program of any sort since, oh, 1989 or so. Hope to hear some feedback on the game itself today, if anyone gets a chance to try it out. There are already a few things driving me batty about it, like the cursor for the Wrecking Ball tool. If you're gonna demolish a whole wall or fill in a series of holes with said tool, it moves itself back to the top left corner of the screen after each use, so you have to keep dragging it back over to the area where you're working. A simple fix... but there are about 9,000 things like that I want to mess with. Gonna force myself to leave it alone for a few days, though, and then do some revamping this weekend as I plug away toward the final release.
-
Check the posting above -- a few lines get truncated in the pasting process, and have to be manually fixed. I recommend pasting it into Wordpad, then copying that into Classic99. There are four lines (I think) listed above that need fixed if you go the cut-and-paste route.
-
Ah, crap. Just delete line 11070. I fixed that in the listing I put up online, but then didn't save the corrected listing before exiting Classic99. I should get more sleep.
-
THAT was it. I knew there was some way to univerally do that, but I was a sleep-deprived moron at the time. Anyway, here's a zipped version of the file if you'd rather download than paste. It should run just fine on either a stock TI 99/4A or in Classic99. Herding Cats.zip
-
retroclouds game programming competition (RGPC)
InfernalKeith replied to retroclouds's topic in TI-99/4A Development
Zipped Herding Cats file enclosed in this message. Herding Cats.zip -
OK folks, here it is. Go into your forum settings and turn off viewing images and smilies, and it should look fine. The following lines will truncate when you paste this code into Classic99, and must be fixed manually: 104 2250 2420 2500 There are a few minor edits I need to make to the documentation above. Mainly, the fact that there are only seven levels, and that expanding the exit requires clearing the area around it first - it does not allow you to expand the exit on top of existing structures. Move Exit, however, does work like that - you can plop the exit anywhere, even on top of a group of cats, and they'll be saved. Like I've said before, this is some ugly code. Those of you who hate GOTO statements are probably already shedding a tear at this disturbance in the Force. Consider this a beta, and a rough first draft. Once I rewrite it to load levels from disk, I'll free up some memory and be able to start cleaning up and optimizing code. Right now, it's literally one line away from MEMORY FULL. Please report any bugs, constructive criticism, etc here. (I know the Catdozer is really slow.) Thanks, you guys. I'm nervous about putting this out there, but I think it's a pretty neat little game. Keith 80 DIM CATX(30),CATY(30),TOOL$(24),TOOLCOST(24) 90 RESTORE :: RANDOMIZE :: CALL CLEAR 99 CALL CHAR(139,"00183C3C7E7EFFFF",140,"FFFF7E7E3C3C1800",141,"C0F0FCFEFEFCF0C0",142,"030F3F7F7F3F0F03") 100 CALL CHAR(143,"FFFFFFFFFFFFFFFF",35,"040303837C7C44AA",37,"AA55AA55AA55AA55",40,"FFFFFFFFFFFFFFFF") 101 CALL CHARPAT(45,X$) :: CALL CHAR(94,X$) :: CALL CHARPAT(36,X$) :: CALL CHAR(61,X$) 102 CALL CHAR(38,"040303837C7C44AA",41,"FF818181818181FF") 103 CALL CHAR(95,"0000FFFFFFFF000000",120,"FFFFFFFFFFFFFFFF",128,"FFFFFFFFFFFFFFFF") :: CALL COLOR(12,12,1) :: CALL COLOR(13,3,1) 104 CALL CHARPAT(44,X$) :: CALL CHAR(92,X$) :: CALL CHAR(92,X$) :: CALL CHARPAT(46,X$) :: CALL CHAR(91,X$) :: CALL CHARPAT(33,X$) :: CALL CHAR(93,X$) 105 LEVEL=1 :: TIME,SCORE,PULTFLAG=0 :: GOSUB 10000 107 RESTORE 9710 :: FOR X=1 TO 17 :: READ TOOL$(X) :: NEXT X 108 FOR X=1 TO 17 :: READ TOOLCOST(X) :: NEXT X 110 CALL COLOR(14,5,1) :: CALL COLOR(2,7,1) 120 DISPLAY AT(20,1):"____________________________" 130 IMAGE TIME #### 1P ###### 140 DISPLAY AT(21,1):USING 130:TIME,SCORE 150 ON LEVEL GOSUB 11000,12000,12100,11100,11200,11300,11400 160 READ N$,CYCLES,PGOAL,RCAT,ECAT,WRAP,EXITX,EXITY,CTOT 163 CSTARTOT=CTOT :: CFLAGX,CFLAGY,CSAVE,BET=0 :: GOSUB 8500 165 DISPLAY AT(21,1):USING 130:TIME,SCORE 170 FOR X=1 TO 19 :: READ X$ :: DISPLAY AT(X,1)$ :: NEXT X 180 FOR X=EXITX TO EXITX+7 :: FOR Y=EXITY TO EXITY+3 :: CALL HCHAR(X,Y,40) :: NEXT Y :: NEXT X 190 IF RCAT=1 THEN GOSUB 9500 ELSE GOSUB 9600 195 FOR X=30 TO CTOT+1 STEP-1 :: CATX(X),CATY(X)=0 :: NEXT X 210 DISPLAY AT(24,1):"PUSH SPACE TO USE YOUR TOOLS" :: DISPLAY AT(23,29-LEN(N$)):N$ :: DISPLAY AT(23,1):"LEVEL";LEVEL; 220 GOSUB 9000 230 GOSUB 8700 240 IF LEVEL=-1 THEN CALL CLEAR :: GOTO 105 250 LEVEL=LEVEL+1 :: CFLAGX,CFLAGY,TIME,XF,PULTFLAG=0 :: IF LEVEL<8 THEN 140 260 CALL CLEAR :: PRINT " Y O U D I D I T !!!! ############################" 270 PRINT :: PRINT "WE ARE PRETTY MUCH OUT OF MEMORY\ OR THIS WOULD BE A BIT MORE EXCITING[" 280 PRINT :: PRINT "BUT I THANK YOU\ AND THE CATS THANK YOU\ FOR PLAYING[" 290 PRINT :: PRINT "^ KEITH BERGMAN FEB[ 2010 ^" 300 CALL ANY :: CALL CLEAR :: STOP 2000 TOOL=65 2010 DISPLAY AT(22,1):"":"":"" :: DISPLAY AT(21,1):USING 130:TIME,SCORE 2020 DISPLAY AT(24,1):"ARROWS SELECT^ENTER CONFIRMS" 2038 IF TOOL=64 THEN TOOL=88 2039 IF TOOL=89 THEN TOOL=65 2040 DISPLAY AT(23,1):" COST:";STR$(TOOLCOST(TOOL-64)) :: DISPLAY AT(23,1):CHR$(TOOL);":";TOOL$(TOOL-64); 2050 CALL KEY(0,K,S) :: IF S=0 THEN 2050 2060 IF K=11 THEN TOOL=TOOL-1 :: GOTO 2038 2070 IF K=10 THEN TOOL=TOOL+1 :: GOTO 2038 2080 IF K=13 THEN 2105 2090 IF K<65 OR K>81 THEN 2050 2100 TOOL=K :: GOTO 2040 2105 IF TOOLCOST(TOOL-64)>SCORE THEN CALL SOUND(100,110,0) :: GOTO 2010 2107 SCORE=SCORE-TOOLCOST(TOOL-64) 2110 ON TOOL-64 GOTO 3260,3270,3350,3180,3170,3130,3030,2740,2660,2630,2560,2420,2290,2210,2170,2120,2140 2120 DISPLAY AT(23,1):"":"PUSH SPACE TO USE YOUR TOOLS" :: DISPLAY AT(23,29-LEN(N$)):N$ :: DISPLAY AT(23,1):"LEVEL";LEVEL; 2130 RETURN 2140 DISPLAY AT(23,1):"ARE YOU SURE? Y OR N":"" 2150 CALL KEY(0,K,S) :: IF S=0 THEN 2150 ELSE IF K<>89 THEN 2010 2160 CALL CLEAR :: GOTO 105 2170 DISPLAY AT(23,1):"ARE YOU SURE? Y OR N":"" 2180 CALL KEY(0,K,S) :: IF S=0 THEN 2180 ELSE IF K<>89 THEN 2010 2190 FOR X=1 TO 30 :: IF CATX(X)>0 THEN CALL HCHAR(CATX(X),CATY(X),32) :: CALL COLOR(1,7,1) :: CALL SOUND(300,-6,0) :: CALL SOUND(300,-7,0) 2200 CALL COLOR(1,2,1) :: CATX(X),CATY(X)=0 :: NEXT X :: CTOT=0 :: BET=0 :: RETURN 2210 CALL PICK(XX,YY) 2220 CALL GCHAR(XX,YY,W) :: IF W=32 OR W=40 THEN CALL SOUND(100,110,0) :: SCORE=SCORE+200 :: GOTO 2010 2225 IF W=128 OR W=120 THEN CFLAGX,CFLAGY=0 2230 IF W=37 OR W=36 OR W=143 OR W=120 OR W=128 THEN CALL HCHAR(XX,YY,32) :: CALL SOUND(100,-5,0) :: GOTO 2010 2240 DISPLAY AT(23,1):"THE OBJECT IS TO HERD CATS\ NOT KILL THEM]" 2250 ZZ=1 2260 IF CATX(ZZ)=XX AND CATY(ZZ)=YY THEN CATX(ZZ),CATY(ZZ)=0 :: CTOT=CTOT-1 :: CALL HCHAR(XX,YY,32) :: CALL SOUND(300,-6,0) :: CALL SOUND(300,-7,0) 2270 IF CATX(ZZ)<>0 THEN ZZ=ZZ+1 :: GOTO 2260 2280 CALL PAUSE :: GOTO 2010 2290 IF EXITY<13 OR EXITY>17 THEN 2300 ELSE DISPLAY AT(23,1):"YOU MUST MOVE THE EXIT FIRST":"" :: CALL SOUND(200,110,0) 2295 CALL PAUSE :: SCORE=SCORE+1000 :: GOTO 2010 2300 DISPLAY AT(23,1):"ARE YOU SURE? Y OR N":"" 2310 CALL KEY(0,K,S) :: IF S=0 THEN 2310 ELSE IF K<>89 THEN 2010 2320 IF EXITY<17 THEN KILL=17 ELSE KILL=1 2330 FOR XX=KILL TO KILL+15 :: FOR YY=1 TO 19 2340 CALL GCHAR(YY,XX,ZZ) :: IF ZZ<>35 THEN CALL HCHAR(YY,XX,36) :: GOTO 2390 2360 CALL MEOW :: WW=1 2370 IF CATX(WW)=YY AND CATY(WW)=XX THEN CATX(WW),CATY(WW)=0 :: CALL HCHAR(YY,XX,36) :: CTOT=CTOT-1 :: GOTO 2390 2380 WW=WW+1 :: GOTO 2370 2390 NEXT YY :: NEXT XX 2400 FOR XX=1 TO 19 :: IF KILL=1 THEN CALL HCHAR(XX,16,37) :: CALL HCHAR(XX,1,37) 2405 IF KILL=17 THEN CALL HCHAR(XX,17,37) :: CALL HCHAR(XX,32,17) 2410 NEXT XX :: GOTO 2010 2420 IF TIME>CYCLES-(CYCLES/10)OR BET<>0 THEN DISPLAY AT(23,1):"SORRY, THE HOUSE IS CLOSED.":"" :: CALL SOUND(300,-7,0) :: CALL PAUSE :: SCORE=SCORE+50 :: GOTO 2120 2440 DISPLAY AT(23,1):"BETTING ON HOW MANY CATS[[[ 1[EXIT 2[DIE 3[CANCEL BET" 2450 CALL KEY(0,K,S) :: IF S=0 THEN 2450 2460 IF K<49 OR K>50 THEN SCORE=SCORE+50 :: GOTO 2120 2470 BET=500-((INT(TIME/CYCLES))*500) 2480 IF K=49 THEN BET=BET-(CSAVE*50) 2490 IF K=50 THEN BET=BET-((CSTARTOT-CTOT-CSAVE)*50) 2495 YY=BET/10 :: ZZ=INT(RND*(YY*2))-YY :: BET=BET+ZZ 2500 IF BET<25 THEN DISPLAY AT(23,1):"SORRY, CAN'T HELP YA\ SPORT[":"" :: CALL SOUND(300,-7,0) :: CALL PAUSE :: SCORE=SCORE+50 :: BET=0 :: GOTO 2120 2510 IF K=50 THEN DISPLAY AT(23,1):"I PAY";BET;"PER DEAD CAT^YOU":"PAY";BET;"PER SAFE CAT^OK?" :: BET=-BET 2520 IF K=49 THEN DISPLAY AT(23,1):"OK\ I PAY";BET;"PER SAFE CAT[":"YOU PAY";BET;"PER GONER. OK?" 2530 CALL KEY(0,K,S) :: IF S=0 AND K<>89 AND K<>78 THEN 2530 2540 IF K=78 THEN SCORE=SCORE+50 :: BET=0 :: GOTO 2120 2550 DISPLAY AT(23,1):"PLEASURE DOIN' BUSINESS,":"YA RUBE]" :: CALL PAUSE :: GOTO 2120 2560 DISPLAY AT(23,1):"ARE YOU SURE? Y OR N":" " 2570 CALL KEY(0,K,S) :: IF S=0 THEN 2570 ELSE IF K<>89 THEN SCORE=SCORE+2000 :: GOTO 2120 2575 DISPLAY AT(23,1):"CAN I GET AN AMEN?]":" " 2580 FOR ZZ=1 TO CSTARTOT :: IF CATX(ZZ)>0 THEN 2610 2590 CATX(ZZ)=INT(RND*19)+1 :: CATY(ZZ)=INT(RND*32)+1 :: CALL GCHAR(CATX(ZZ),CATY(ZZ),YY) :: IF YY<>32 THEN 2590 2600 CALL HCHAR(CATX(ZZ),CATY(ZZ),35) :: CALL SOUND(400,1047,0,880,0) :: CALL COLOR(1,16,1) :: CALL COLOR(1,2,1) 2610 NEXT ZZ :: CTOT=CSTARTOT-CSAVE 2620 GOTO 2010 2630 CALL PICK(XX,YY) 2640 CALL GCHAR(XX,YY,W) :: IF W<>32 THEN CALL SOUND(200,110,0) :: SCORE=SCORE+200 :: GOTO 2010 2650 CALL HCHAR(XX,YY,37) :: CALL SOUND(150,-5,0,110,7) :: GOTO 2010 2660 IF PULTFLAG<>0 THEN CALL SOUND(100,110,0) :: SCORE=SCORE+4000 :: GOTO 2010 2670 ! 2680 DISPLAY AT(23,1):"ARE YOU SURE? Y OR N":"" 2690 CALL KEY(0,K,S) :: IF S=0 THEN 2690 ELSE IF K<>89 THEN SCORE=SCORE+4000 :: GOTO 2010 2695 CALL PICK(XX,YY) :: IF XX>15 OR YY>28 THEN CALL SOUND(100,110,0) :: GOTO 2695 2700 FOR AA=XX TO XX+4 :: FOR BB=YY TO YY+4 :: CALL GCHAR(AA,BB,CC) :: IF CC<>32 THEN NOFLAG=1 2705 NEXT BB :: NEXT AA 2710 IF NOFLAG THEN 2730 2720 FOR AA=XX TO XX+4 :: FOR BB=YY TO YY+4 :: CALL HCHAR(AA,BB,143) :: CALL SOUND(20,-5,0) :: NEXT BB :: NEXT AA 2722 DISPLAY AT(23,1):"DIRECTION FOR CAT^A^PULT? ENTER N S E W" 2724 CALL KEY(0,K,S) :: IF S=0 THEN 2724 ELSE IF K<>78 AND K<>83 AND K<>69 AND K<>87 THEN 2724 2725 IF K=78 THEN PULTFLAG=1 ELSE IF K=83 THEN PULTFLAG=2 ELSE IF K=69 THEN PULTFLAG=3 ELSE PULTFLAG=4 2727 CALL HCHAR(XX+2,YY+2,PULTFLAG+138) :: GOTO 2120 2730 NOFLAG=0 :: CALL SOUND(200,110,0) :: DISPLAY AT(23,1):"THIS LOCATION IS NOT CLEAR[" :: CALL PAUSE :: SCORE=SCORE+4000 :: GOTO 2010 2740 DISPLAY AT(23,1):"CATDOZER GOES":"1[L^R 2[R^L 3[CANCEL" 2750 CALL KEY(0,K,S) :: IF S=0 THEN 2750 ELSE IF K<49 OR K>51 THEN 2750 2760 IF K=51 THEN SCORE=SCORE+5000 :: GOTO 2120 2770 XX=1 :: BULLDIR=K-48 :: IF BULLDIR=1 THEN YY=1 ELSE YY=32 2775 DISPLAY AT(23,1):"UP^DOWN ARROWS TO SELECT\":"ENTER CONFIRMS[" 2780 CALL SPRITE(#1,41,7,((XX-1)*+1,((YY-1)*+1) 2790 DISPLAY AT(23,1):"UP^DOWN ARROWS TO SELECT\ ENTER CONFIRMS[" 2800 CALL KEY(0,K,S) :: IF S=0 THEN 2800 2810 IF K=11 THEN AA=1 :: XX=XX-1 :: IF XX=0 THEN XX=15 2820 IF K=10 THEN AA=1 :: XX=XX+1 :: IF XX=16 THEN XX=1 2830 IF K<>13 THEN IF AA=0 THEN 2800 ELSE AA=0 :: GOTO 2780 2840 DISPLAY AT(23,1):"MAKE WAY FOR THE CATDOZER]":"" 2845 FOR BB=1 TO 32 2850 FOR AA=1 TO 5 :: CALL SPRITE(#AA,143,11,(((XX-1)*+1)+(((AA-1)*+1),((YY-1)*+1) :: NEXT AA 2865 CALL SOUND(-1000,110,0,127,0,-7,3) 2870 FOR CC=XX TO XX+4 :: CALL GCHAR(CC,YY,WW) 2880 IF WW=37 OR WW=143 OR WW=35 OR WW=142 OR WW=141 OR WW=140 OR WW=139 THEN CALL HCHAR(CC,YY,32) 2890 IF WW<>35 THEN 2920 2900 W=1 2910 IF CATX(W)=CC AND CATY(W)=YY THEN CATX(W)=-10 2915 W=W+1 :: IF W<31 THEN 2910 2920 IF WW=143 OR WW=128 THEN CALL HCHAR(CC,YY,32) :: CFLAGX,CFLAGY=0 2922 IF WW<>40 THEN 2930 2924 FOR W=1 TO 30 :: IF CATX(W)=-10 THEN CALL SAFE :: CSAVE=CSAVE+1 :: SCORE=SCORE+1000 :: CTOT=CTOT-1 :: CATX(W)=-1 2925 NEXT W 2930 NEXT CC :: IF BULLDIR=1 THEN YY=YY+1 ELSE YY=YY-1 2940 NEXT BB 2950 CALL DELSPRITE(ALL) :: IF YY=33 THEN YY=32 ELSE IF YY=0 THEN YY=1 2960 FOR BB=1 TO 30 2970 IF CATX(BB)<>-10 THEN 3010 2980 CALL GCHAR(XX,YY,WW) :: IF WW<>32 THEN 3000 2990 CATX(BB)=XX :: CATY(BB)=YY :: CALL HCHAR(XX,YY,35) :: CALL SOUND(40,440,0) 3000 XX=XX+1 :: IF XX=20 THEN XX=1 3010 NEXT BB 3020 GOTO 2120 3030 DISPLAY AT(23,1):"ARE YOU SURE? Y OR N":"" 3040 CALL KEY(0,K,S) :: IF S=0 THEN 3040 ELSE IF K<>89 THEN SCORE=SCORE+3500 :: GOTO 2120 3050 DISPLAY AT(23,1):"BUMP TABLE FROM WHICH SIDE?":"ENTER N S E OR W" 3060 CALL KEY(0,K,S) :: IF S=0 THEN 3060 3070 IF K=78 THEN BUMP=1 ELSE IF K=83 THEN BUMP=2 ELSE IF K=69 THEN BUMP=3 ELSE IF K=87 THEN BUMP=4 ELSE 3060 3080 FOR LC=1 TO 30 3090 IF CATX(LC)<1 THEN 3120 3100 ON BUMP GOSUB 10710,10720,10730,10740 3110 CALL GCHAR(TEMPX,TEMPY,Y) :: GOSUB 9060 :: IF WALLFLAG=1 THEN WALLFLAG=0 3120 NEXT LC :: GOTO 2120 3130 DISPLAY AT(23,1):"ARE YOU SURE? Y OR N":"" 3140 CALL KEY(0,K,S) :: IF S=0 THEN 3140 ELSE IF K<>89 THEN SCORE=SCORE+500 :: GOTO 2120 3150 CALL SOUND(400,880,0,440,0) :: TIME=TIME-100 :: IF TIME<1 THEN TIME=1 3160 GOTO 2120 3170 IF XF<>0 THEN 3250 ELSE XF=2 :: XF2=0 :: GOTO 3185 3180 IF XF<>0 THEN 3250 ELSE XF=1 :: XF2=0 3185 IF EXITX+7+XF>19 OR EXITY+3+XF>32 THEN DISPLAY AT(23,1):"NOT ENOUGH ROOM TO EXPAND[":"" :: XF2=XF :: XF=0 :: GOTO 3250 3187 DISPLAY AT(23,1):"ARE YOU SURE? PRESS Y OR N":"" 3188 CALL KEY(0,K,S) :: IF S=0 THEN 3188 ELSE IF K<>89 THEN SCORE=SCORE+1500*XF :: XF=0 :: GOTO 2120 3190 FOR ZZ=EXITX+8 TO EXITX+7+XF :: FOR YY=EXITY TO EXITY+3+XF :: CALL GCHAR(ZZ,YY,QQ) :: IF QQ<>32 THEN XF2=1 3195 NEXT YY :: NEXT ZZ 3200 FOR ZZ=EXITY+4 TO EXITY+3+XF :: FOR YY=EXITX TO EXITX+7+XF :: CALL GCHAR(YY,ZZ,QQ) :: IF QQ<>32 THEN XF2=1 3205 NEXT YY :: NEXT ZZ 3210 IF XF2=1 THEN DISPLAY AT(23,1):"YOU MUST CLEAR SPACE FIRST[":"" :: XF2=XF :: XF=0 :: GOTO 3250 3220 FOR ZZ=EXITX+8 TO EXITX+7+XF :: FOR YY=EXITY TO EXITY+3+XF :: CALL HCHAR(ZZ,YY,40) :: CALL SOUND(20,-5,0) :: NEXT YY :: NEXT ZZ 3230 FOR ZZ=EXITY+4 TO EXITY+3+XF :: FOR YY=EXITX TO EXITX+7+XF :: CALL HCHAR(YY,ZZ,40) :: CALL SOUND(20,-5,0) :: NEXT YY :: NEXT ZZ 3240 GOTO 2120 3250 CALL SOUND(100,110,0) :: SCORE=SCORE+(1500*XF2) :: CALL PAUSE :: GOTO 2120 3260 ZZ=128 :: GOTO 3280 3270 ZZ=120 3280 IF CFLAGX<>0 THEN 3345 3290 DISPLAY AT(23,1):"ARE YOU SURE? PRESS Y OR N":"" 3300 CALL KEY(0,K,S) :: IF S=0 THEN 3300 ELSE IF K<>89 THEN SCORE=SCORE+2500 :: GOTO 2120 3310 CALL PICK(XX,YY) :: CALL GCHAR(XX,YY,QQ) :: IF QQ<>32 THEN 3345 3320 IF ZZ=128 THEN CFLAGX=XX :: CFLAGY=YY ELSE CFLAGX=-XX :: CFLAGY=-YY 3330 CALL HCHAR(XX,YY,ZZ) 3340 CALL SOUND(200,880,0,440,0) :: GOTO 2120 3345 CALL SOUND(100,110,0) :: SCORE=SCORE+2500 :: GOTO 2120 3350 IF XF<>0 THEN 3470 3360 DISPLAY AT(23,1):"ARE YOU SURE? Y OR N":" " 3370 CALL KEY(0,K,S) :: IF S=0 THEN 3370 ELSE IF K<>89 THEN SCORE=SCORE+5000 :: GOTO 2120 3380 CALL PICK(XX,YY) :: IF XX>11 OR YY>29 THEN 3470 3390 FOR QQ=EXITX TO EXITX+7 :: FOR WW=EXITY TO EXITY+3 :: CALL HCHAR(QQ,WW,32) :: CALL SOUND(20,-7,0,110,0) :: NEXT WW :: NEXT QQ 3400 FOR QQ=XX TO XX+7 :: FOR WW=YY TO YY+3 3410 CALL GCHAR(QQ,WW,ZZ) 3420 IF ZZ=35 THEN 3450 3430 IF ZZ=128 OR ZZ=120 THEN CFLAGX,CFLAGY=0 3440 CALL HCHAR(QQ,WW,40) :: CALL SOUND(20,-5,0) 3445 NEXT WW :: NEXT QQ :: EXITX=XX :: EXITY=YY :: GOTO 2120 3450 FOR VV=1 TO 30 :: IF CATX(VV)=QQ AND CATY(VV)=WW THEN CATX(VV)=-1 :: CALL SAFE :: CSAVE=CSAVE+1 :: CTOT=CTOT-1 3460 NEXT VV :: GOTO 3440 3470 CALL SOUND(100,110,0) :: CALL PAUSE :: SCORE=SCORE+5000 :: GOTO 2120 8500 FOR X=1 TO 19 :: DISPLAY AT(X,1):"" :: CALL HCHAR(X,1,32,2) :: CALL HCHAR(X,31,32,2) :: NEXT X 8510 DISPLAY AT(2,2):"WELCOME TO LEVEL";LEVEL;":" 8520 DISPLAY AT(3,2):"'";N$;"'" 8530 DISPLAY AT(5,2):"YOU MUST REACH";PGOAL;"POINTS" 8540 DISPLAY AT(6,2):"IN";CYCLES;"MOVES[" 8550 DISPLAY AT(8,2):"CATS EXPLODE ON CONTACT?:" :: IF ECAT=1 THEN CALL HCHAR(8,30,89)ELSE CALL HCHAR(8,30,78) 8560 DISPLAY AT(9,2):"CATS WRAP AROUND SCRN?:" :: IF WRAP=1 THEN CALL HCHAR(9,28,89)ELSE CALL HCHAR(9,28,78) 8570 DISPLAY AT(13,2):"PRESS ANY KEY TO HERD CATS]" :: CALL ANY 8580 RETURN 8700 CALL SOUND(2000,1397,0,1480,5) :: FOR X=1 TO 19 :: DISPLAY AT(X,1):"" :: CALL HCHAR(X,1,32,2) :: CALL HCHAR(X,31,32,2) :: NEXT X 8710 DISPLAY AT(2,1):"L E V E L C O M P L E T E D" :: DISPLAY AT(23,1):"":"" 8720 DISPLAY AT(5,1):"YOU STARTED WITH";CSTARTOT;"CATS[[[":"AND SAVED";CSAVE;"OF THEM[" 8730 DISPLAY AT(8,1):"YOU NEEDED";PGOAL;"POINTS[[[":"YOU NOW HAVE";SCORE 8735 IF BET=0 THEN 8740 8737 IF BET>0 THEN BET=BET*(CSAVE-(CSTARTOT-CSAVE)) 8738 IF BET<0 THEN BET=ABS(BET) :: BET=BET*((CSTARTOT-CSAVE)-CSAVE) 8739 DISPLAY AT(11,1):"CAT BOOKIE WINNINGS:";BET :: SCORE=SCORE+BET :: DISPLAY AT(21,1):USING 130:TIME,SCORE 8740 IF SCORE<PGOAL THEN DISPLAY AT(13,1):"YOUR LICENSE TO HERD CATS IS":" HEREBY REVOKED]]" :: LEVEL=-1 8750 IF SCORE>=PGOAL THEN DISPLAY AT(13,1):"CONGRATULATIONS\ CAT HERDER]" 8760 CALL ANY :: RETURN 9000 ! 9005 X=0 9008 CALL KEY(0,K,S) :: IF K=32 THEN GOSUB 2000 9010 TIME=TIME+1 :: DISPLAY AT(21,1):USING 130:TIME,SCORE :: IF TIME=CYCLES OR CTOT=0 THEN RETURN 9020 Z=0 :: X=X+1 :: IF X=31 THEN X=1 9024 IF CATX(X)<1 THEN 9020 9025 TRY=0 9030 TRY=TRY+1 :: Y=INT(RND*+1 :: ON Y GOSUB 9400,9410,9420,9430,9440,9450,9460,9470 9035 IF TRY=6 THEN CALL SOUND(100,110,0) :: GOTO 9008 9040 IF Z=0 THEN 9030 ELSE Z=0 9041 IF TEMPX<CATX(X)AND ABS(CFLAGX)<TEMPX AND CFLAGX<0 THEN W=1 9042 IF TEMPX<CATX(X)AND ABS(CFLAGX)>TEMPX AND CFLAGX>0 THEN W=1 9043 IF TEMPY>CATY(X)AND ABS(CFLAGY)>TEMPY AND CFLAGY<0 THEN W=1 9044 IF TEMPY>CATY(X)AND ABS(CFLAGY)<TEMPY AND CFLAGY>0 THEN W=1 9045 IF TEMPX>CATX(X)AND ABS(CFLAGX)>TEMPX AND CFLAGX<0 THEN W=1 9046 IF TEMPX>CATX(X)AND ABS(CFLAGX)<TEMPX AND CFLAGX>0 THEN W=1 9047 IF TEMPY<CATY(X)AND ABS(CFLAGY)<TEMPY AND CFLAGY<0 THEN W=1 9048 IF TEMPY<CATY(X)AND ABS(CFLAGY)>TEMPY AND CFLAGY>0 THEN W=1 9049 IF W=1 THEN W=INT(RND*100) :: IF W<87 THEN W=0 :: GOTO 9030 9050 W=0 :: CALL GCHAR(TEMPX,TEMPY,Y) 9055 LC=X :: GOSUB 9060 :: IF WALLFLAG=1 THEN WALLFLAG=0 :: GOTO 9030 ELSE 9008 9060 IF Y=36 THEN CALL HCHAR(CATX(LC),CATY(LC),32) :: CALL FALL :: CTOT=CTOT-1 :: CATX(LC)=0 :: RETURN 9070 IF Y=40 THEN CALL HCHAR(CATX(LC),CATY(LC),32) :: CALL SAFE :: CTOT=CTOT-1 :: SCORE=SCORE+1000 :: CATX(LC)=-1 :: CSAVE=CSAVE+1 :: RETURN 9075 IF Y=32 THEN CALL HCHAR(CATX(LC),CATY(LC),32) :: CALL HCHAR(TEMPX,TEMPY,35) :: CATX(LC)=TEMPX :: CATY(LC)=TEMPY :: RETURN 9080 IF Y<>143 THEN 9090 9081 CALL HCHAR(CATX(LC),CATY(LC),32) :: AA=CATX(LC) :: BB=CATY(LC) :: CATX(LC)=TEMPX :: CATY(LC)=TEMPY 9082 FOR ZZ=880 TO 110 STEP-110 :: CALL SOUND(-100,ZZ,0) :: NEXT ZZ :: FOR ZZ=110 TO 1430 STEP 110 :: CALL SOUND(-100,ZZ,0) :: NEXT ZZ 9083 ON PULTFLAG GOSUB 10810,10830,10850,10870 9084 CALL GCHAR(TEMPX,TEMPY,Y) :: CATX(LC)=AA :: CATY(LC)=BB :: IF Y=32 OR Y=36 OR Y=40 THEN 9060 ELSE 9100 9090 IF ECAT=0 THEN CALL SOUND(50,-3,0) :: Z=0 :: WALLFLAG=1 :: RETURN 9100 CTOT=CTOT-1 :: CALL HCHAR(CATX(LC),CATY(LC),32) :: CATX(LC)=-1 :: CALL COLOR(1,7,1) :: CALL SOUND(300,-6,0) :: CALL SOUND(300,-7,10) 9105 CALL COLOR(1,2,1) :: RETURN 9110 RETURN 9400 TEMPX=CATX(X)-1 :: TEMPY=CATY(X) :: IF TEMPX=0 AND WRAP=1 THEN TEMPX=19 :: Z=1 :: GOTO 9405 9402 IF TEMPX>0 THEN Z=1 9405 RETURN 9410 TEMPX=CATX(X)-1 :: TEMPY=CATY(X)+1 :: IF TEMPX=0 AND TEMPY=33 AND WRAP=1 THEN TEMPX=19 :: TEMPY=1 :: Z=1 :: GOTO 9415 9412 IF TEMPX=0 AND WRAP=1 THEN TEMPX=19 :: Z=1 :: GOTO 9415 9413 IF TEMPY=33 AND WRAP=1 THEN TEMPY=1 :: Z=1 :: GOTO 9415 9414 IF TEMPX>0 AND TEMPY<33 THEN Z=1 9415 RETURN 9420 TEMPX=CATX(X) :: TEMPY=CATY(X)+1 :: IF TEMPY=33 AND WRAP=1 THEN TEMPY=1 :: Z=1 :: GOTO 9425 9422 IF TEMPY<33 THEN Z=1 9425 RETURN 9430 TEMPX=CATX(X)+1 :: TEMPY=CATY(X)+1 :: IF TEMPX=20 AND TEMPY=33 AND WRAP=1 THEN TEMPX,TEMPY,Z=1 :: GOTO 9435 9432 IF TEMPX=20 AND WRAP=1 THEN TEMPX,Z=1 :: GOTO 9435 9433 IF TEMPY=33 AND WRAP=1 THEN TEMPY,Z=1 :: GOTO 9435 9434 IF TEMPX<20 AND TEMPY<33 THEN Z=1 9435 RETURN 9440 TEMPX=CATX(X)+1 :: TEMPY=CATY(X) :: IF TEMPX=20 AND WRAP=1 THEN TEMPX=1 :: Z=1 :: GOTO 9445 9442 IF TEMPX<20 THEN Z=1 9445 RETURN 9450 TEMPX=CATX(X)+1 :: TEMPY=CATY(X)-1 :: IF TEMPX=20 AND TEMPY=0 AND WRAP=1 THEN TEMPX=1 :: TEMPY=32 :: Z=1 :: GOTO 9455 9452 IF TEMPX=20 AND WRAP=1 THEN TEMPX=1 :: Z=1 :: GOTO 9455 9453 IF TEMPY=0 AND WRAP=1 THEN TEMPY=32 :: Z=1 :: GOTO 9455 9454 IF TEMPX<20 AND TEMPY>0 THEN Z=1 9455 RETURN 9460 TEMPX=CATX(X) :: TEMPY=CATY(X)-1 :: IF TEMPY=0 AND WRAP=1 THEN TEMPY=32 :: Z=1 :: GOTO 9465 9462 IF TEMPY>0 THEN Z=1 9465 RETURN 9470 TEMPX=CATX(X)-1 :: TEMPY=CATY(X)-1 :: IF TEMPX=0 AND TEMPY=0 AND WRAP=1 THEN TEMPX=19 :: TEMPY=32 :: Z=1 :: GOTO 9475 9472 IF TEMPX=0 AND WRAP=1 THEN TEMPX=19 :: Z=1 :: GOTO 9475 9473 IF TEMPY=0 AND WRAP=1 THEN TEMPY=32 :: Z=1 :: GOTO 9475 9474 IF TEMPX>0 AND TEMPY>0 THEN Z=1 9475 RETURN 9500 FOR X=1 TO CTOT 9520 Y=INT(RND*19)+1 :: Z=INT(RND*28)+1 :: CALL GCHAR(Y,Z,W) :: IF W<>32 THEN 9520 9525 CALL HCHAR(Y,Z,35) :: CATX(X)=Y :: CATY(X)=Z :: NEXT X 9540 RETURN 9600 FOR X=1 TO CTOT :: READ CATX(X),CATY(X) :: CALL HCHAR(CATX(X),CATY(X),35) :: NEXT X 9610 RETURN 9710 DATA "CATNIP MAGNET","CAT REPELLENT","MOVE EXIT","EXPAND EXIT","EXPAND EXIT X2","TURN BACK TIME" 9720 DATA "BUMP TABLE","CATDOZER","CAT^A^PULT","BUILD WALL","CAT RAPTURE","CAT BOOKIE","CUT TABLE IN 2" 9730 DATA "WRECKING BALL","CAT^POCALYPSE","CONTINUE","QUIT TO MAIN" 9740 DATA 2500,2500,5000,1500,3000,500,3500,5000,4000,200,2000,50,1000,200,0,0,0,0,0,0,0,0,0,0 10000 CALL CLEAR 10010 DISPLAY AT(1,3):"H E R D I N G C A T S" :: DISPLAY AT(2,2):"VERSION 0[8 FEBRUARY 2010" 10020 DISPLAY AT(21,5):"C 2010 KEITH BERGMAN":" FOR ORPHANTECH[COM":"":"EMAIL^ [email protected]" 10050 DISPLAY AT(11,1):"1[ START GAME":"2[ EXIT" 10060 CALL KEY(0,K,S) :: IF S=0 THEN 10060 ELSE IF K<49 OR K>51 THEN 10060 10070 ON K-48 GOTO 10080,10090,10120 10080 CALL CLEAR :: CALL CHAR(36,"FFFFFFFFFFFFFFFF") :: RETURN 10090 CALL CLEAR :: STOP 10120 CALL CLEAR :: INPUT "LEVEL?":LEVEL :: SCORE=99999 :: GOTO 10080 10700 ! 10710 TEMPY=CATY(LC) :: TEMPX=INT(RND*3)+16 :: RETURN 10720 TEMPY=CATY(LC) :: TEMPX=INT(RND*3)+1 :: RETURN 10730 TEMPX=CATX(LC) :: TEMPY=INT(RND*3)+1 :: RETURN 10740 TEMPX=CATX(LC) :: TEMPY=INT(RND*3)+29 :: RETURN 10800 ! 10810 TEMPY=CATY(X) :: TEMPX=CATX(X)-(INT(RND*5)+10) :: IF TEMPX<0 THEN IF WRAP=0 THEN TEMPX=1 ELSE TEMPX=TEMPX+19 10820 RETURN 10830 TEMPY=CATY(X) :: TEMPX=CATX(X)+(INT(RND*5)+10) :: IF TEMPX>19 THEN IF WRAP=0 THEN TEMPX=19 ELSE TEMPX=TEMPX-19 10840 RETURN 10850 TEMPX=CATX(X) :: TEMPY=CATY(X)+(INT(RND*+21) :: IF TEMPY>32 THEN IF WRAP=0 THEN TEMPY=32 ELSE TEMPY=TEMPY-32 10860 RETURN 10870 TEMPX=CATX(X) :: TEMPY=CATY(X)-INT(RND*+21) :: IF TEMPY<1 THEN IF WRAP=0 THEN TEMPY=1 ELSE TEMPY=TEMPY+32 10880 RETURN 11000 RESTORE 11010 :: RETURN 11010 DATA "NICE AND EASY",250,10000,0,0,0,6,15,15 11020 DATA " ","$ $"," "," %%%%%%%%"," % %" 11030 DATA " % %"," % %"," % %"," % %" 11040 DATA "$ % % $"," % %"," % %"," % %"," % %" 11050 DATA " %%%%%%%%"," "," ","$ $"," " 11060 DATA 5,8,5,15,5,17,5,19,6,14,7,19,8,14,9,19,10,14,11,19,12,14,13,19,14,14,14,16,14,18 11100 RESTORE 11110 :: RETURN 11105 REM LEVEL 4 11110 DATA "A BRIDGE TOO FAR",400,32000,0,0,0,6,27,20 11120 DATA "$$$$$$$$$$$$$$$$$$$$$$$$$$$$","$$$$$$$$$$$$$$$$$$$$$$$$$$$$","$$$$$$$$$$$$$$$$$$$$$$$$ "," $$$$$$$$$$$$$$$$$$$$ " 11130 DATA " $$$$$$$$$$$$$$"," $$$$$$$$$$$"," $$$"," "," " 11140 DATA " $$$$"," $$$$$$$"," $$$$$$$$$$$$"," $$$$$$$$$$$$$$$$"," $$$$$$$$$$$$$$$$$$$" 11150 DATA " $$$$$$$$$$$$$$$$$$$$$","$$$$$$$$$$$$$$$$$$$$$$$$","$$$$$$$$$$$$$$$$$$$$$$$$$","$$$$$$$$$$$$$$$$$$$$$$$$$$$$" 11160 DATA "$$$$$$$$$$$$$$$$$$$$$$$$$$$$" 11170 DATA 4,1,5,5,6,3,7,6,7,13,8,2,8,5,8,7,9,1,9,14 11180 DATA 10,3,10,5,10,7,11,7,12,1,12,4,13,7,14,2,16,1,14,5 11190 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 11200 RESTORE 11210 :: RETURN 11205 REM LEVEL 5 11210 DATA "WALL MANIA",750,38000,0,0,1,7,13,30 11220 DATA " % % %%% "," % % $ % $ %"," %% %%%","% %" 11230 DATA " %%%","$ % %%%%% $ %%%%","$ % % % %","$ % % %%% %" 11240 DATA "$ % $ % %"," % %% %%%%"," % % % $"," % %% % %$" 11250 DATA " %%% % % %$ % %"," %% % %$ % %"," % %%%%%%$"," % %$" 11260 DATA "$ % % $ %$ % %"," % %%%% % %"," %%% $ % %%%%" 11270 DATA 1,11,1,12,1,13,1,14,2,25,2,26,4,4,4,5,4,8,4,9 11280 DATA 7,17,8,17,9,17,7,28,7,29,9,21,9,22,11,26,11,27,14,21 11290 DATA 18,27,18,28,19,22,19,23,18,7,13,9,14,1,15,4,12,5,12,6 11300 RESTORE 11310 :: RETURN 11305 REM LEVEL 6 11310 DATA "SNAKE THE TRAP",600,42000,1,1,0,1,29,25 11320 DATA " %%%%%%%%%%%%%%%%%%%%$$$$"," % %$$$$","$ % %%%%%"," % %" 11330 DATA " % %"," % % $"," %% % % %"," % % % %" 11340 DATA " % % $ % % %"," % % % % %"," % % % % %"," % % % % %" 11350 DATA " % % % % %"," % $ % %"," $ % % $ %"," % % %" 11360 DATA " % % %"," % % %"," %%%%%%%%%%%%%%%%%%%%%%%%%" 11400 RESTORE 11410 :: RETURN 11405 REM LEVEL 7 11410 DATA "V FOR VICTORY",500,48000,0,0,0,12,15,22 11420 DATA "% %"," % %"," % %"," % %" 11430 DATA " $ % % $"," % %"," $ % % $"," $ % % $" 11440 DATA " $ $ % % $ $"," $ % % $"," $ $ % % $ $"," $ $ % % $ $" 11450 DATA " $ $ $ $ $ $"," $ $ $ $"," $ $ $ $ $ $"," $ $ $ $" 11460 DATA " $ $ $ $ $ $"," $ $ $ $"," $ $ $ $ $ $" 11470 DATA 1,4,1,29,2,5,2,28,3,6,3,27,4,7,4,26,5,8,5,25 11480 DATA 6,9,6,24,7,10,7,23,8,11,8,22,9,12,9,21,10,13,10,20 11490 DATA 11,14,11,19 12000 RESTORE 12010 :: RETURN 12010 DATA "MIND THE HOLES",400,20000,1,0,0,11,24,20 12020 DATA " %%"," %% $ $"," $ %%"," %%" 12030 DATA " $"," $"," %% %%"," %% %%" 12040 DATA " %% %%"," %% %%"," "," $"," %%"," %% $" 12050 DATA " %%"," $ %%"," $"," $"," " 12100 RESTORE 12110 :: RETURN 12110 DATA "WRONG SIDE OF TRAX",400,26000,0,0,1,6,3,15 12120 DATA " $ $ $ $ $ $ $"," $ $ $ $ $ $ $"," $ $ $ $ $ $ $"," $ $ $ $ $ $ $" 12130 DATA " $ $ $ $ $ $ $"," $ $ $ $ $ $ $"," $ $ $ $ $ $ $"," % $ $ $ $ $ $ $" 12140 DATA " %% $ $ $ $ $ $ $"," %%%%%% $ $ $ $ $ $ $"," %% $ $ $ $ $ $ $"," % $ $ $ $ $ $ $" 12150 DATA " $ $ $ $ $ $ $"," $ $ $ $ $ $ $"," $ $ $ $ $ $ $"," $ $ $ $ $ $ $" 12160 DATA " $ $ $ $ $ $ $"," $ $ $ $ $ $ $"," $ $ $ $ $ $ $" 12170 DATA 2,10,3,5,3,13,4,8,4,12,9,12,14,9,17,4,17,13,18,7,3,19,8,30,10,22,16,20,19,29 12180 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 32000 SUB ANY 32010 CALL SOUND(-200,523,20) 32020 CALL KEY(0,K,S) :: IF S<>0 THEN SUBEXIT 32030 CALL SOUND(-200,440,20) 32040 CALL KEY(0,K,S) :: IF S<>0 THEN SUBEXIT 32050 CALL SOUND(-200,262,20) 32060 CALL KEY(0,K,S) :: IF S<>0 THEN SUBEXIT 32070 GOTO 32010 32080 SUBEND 32090 SUB FALL 32100 FOR W=880 TO 110 STEP-20 32105 CALL SOUND(-50,W,7) :: NEXT W 32110 CALL SOUND(200,-7,0) :: CALL COLOR(1,7,1) :: CALL COLOR(1,2,1) 32120 SUBEND 32125 SUB SAFE 32130 CALL SOUND(50,440,0) :: CALL SOUND(50,523,0) :: CALL SOUND(200,880,0,988,0) 32135 FOR W=1 TO 30 STEP 3 :: CALL SOUND(-40,880,W,988,W) :: NEXT W 32140 SUBEND 32150 SUB UPD 32160 DISPLAY AT(21,1):USING 130:TIME,SCORE 32170 SUBEND 32180 SUB EXP 32190 CALL SOUND(500,-7,0) :: CALL SOUND(500,-7, :: CALL SOUND(600,-7,20) 32200 SUBEND 32300 SUB PICK(XX,YY) 32305 XX=1 :: YY=3 32307 DISPLAY AT(23,1):"ARROWS MOVE\ ENTER SELECTS.":"" 32310 CALL SPRITE(#1,41,7,((XX-1)*+1,((YY-1)*+1) 32320 CALL KEY(0,K,S) :: IF S=0 THEN 32320 ELSE IF K<8 OR K>13 THEN 32320 32330 IF K=11 THEN XX=XX-1 :: IF XX=0 THEN XX=19 32340 IF K=10 THEN XX=XX+1 :: IF XX=20 THEN XX=1 32350 IF K=8 THEN YY=YY-1 :: IF YY=0 THEN YY=32 32360 IF K=9 THEN YY=YY+1 :: IF YY=33 THEN YY=1 32370 IF K<>13 THEN 32310 32380 DISPLAY AT(23,1):"ARE YOU SURE? Y OR N":"" 32390 CALL KEY(0,K,S) :: IF S=0 THEN 32390 ELSE IF K<>89 THEN 32307 32400 DISPLAY AT(23,1):"":"" :: CALL DELSPRITE(#1) 32410 SUBEND 32420 SUB MEOW 32430 CALL SOUND(100,3400,0) :: FOR AA=3200 TO 1200 STEP-200 :: CALL SOUND(-50,AA,5) :: NEXT AA 32440 SUBEND 32450 SUB PAUSE 32460 FOR AA=1 TO 400 :: NEXT AA 32470 SUBEND
-
Okay, I tried to post the listing, and got emoticons throughout. Can someone remind me how to turn that off? I'm about to collapse, so I'll post this in the morning. - Keith
-
Bah. MEMORY FULL and I've only added level 7. You may only get seven levels tonight. This is a pain in my ass.
