Jump to content
IGNORED

City Descender


tibasic

Recommended Posts

Hi, it's been a while ...

 

I had some time over Christmas to start writing a game. I have finally completed it although it might need some polishing. 

 

In the game you are piloting a space shuttle on an emergency return to Earth. It did not have time to deploy its payload so it is a bit heavy and does not have enough energy to glide to a suitable runway. It is heading towards a city so you will have to sling out trusses from the shuttle's payload bay to build a runway on top of the city. Enjoy! 

 

I have attached a file called 'DESCEND.zip' that is for the Classic99 emulator but can also be run from the JS99'er web emulator. Type 'OLD DSK1.DESCEND'. I have also attached a file called Descend.dsk which can be used on JS99'er and also Classic99 emulator (but you need set the path to it). Type 'OLD DSK1.DESCENDER'. Also the listing is below if you prefer to copy paste it.

 

The keys are:

 

Note some of the keys have dual use depending on your situation, i.e. the context of your situation decides what the action will be (let me know if this is confusing).

 

space bar: drop a truss for the runway on top of a building

X: descend quickly to save time

X: when on the runway it is important to press this key to brake and stop

Z: file a laser above the city or fire a missile to destroy a truss or building that is in your way

 

Listing

Spoiler


100 REM  CITY DESCENDER  
110 REM  
120 REM  BY "TIBASIC" 
130 REM  ON  ATARIAGE.COM 
140 REM  
150 REM ** BLOCK CHARS **   
160 DIM A$(16)
170 A$(1)="0000000000000000"
180 A$(2)="000000000F0F0F0F"
190 A$(3)="00000000F0F0F0F0"
200 A$(4)="00000000FFFFFFFF"
210 A$(5)="0F0F0F0F00000000"
220 A$(6)="0F0F0F0F0F0F0F0F"
230 A$(7)="0F0F0F0FF0F0F0F0"
240 A$(8)="0F0F0F0FFFFFFFFF"
250 A$(9)="F0F0F0F000000000"
260 A$(10)="F0F0F0F00F0F0F0F"
270 A$(11)="F0F0F0F0F0F0F0F0"
280 A$(12)="F0F0F0F0FFFFFFFF"
290 A$(13)="FFFFFFFF00000000"
300 A$(14)="FFFFFFFF0F0F0F0F"
310 A$(15)="FFFFFFFFF0F0F0F0"
320 A$(16)="FFFFFFFFFFFFFFFF"
330 CLR$="CKHFGLONDE"
340 FOR I=1 TO 16
350 CALL CHAR(96-1+I,A$(I))
360 NEXT I
370 REM ** INTRO COLOURS ** 
380 FOR I=1 TO 12
390 CALL COLOR(I,16,1)
400 NEXT I
410 CALL COLOR(9,2,1)
420 CALL COLOR(10,16,1)
430 CALL COLOR(11,2,1)
440 CALL COLOR(12,14,1)
450 REM ** TITLE ** 
460 CALL CLEAR
470 CALL SCREEN(5)
480 CALL CHAR(120,"FF422418182442FF")
490 PRINT " C I T Y  D E S C E N D E R":" xxxxxxxxxxxxxxxxxxxxxxxxxx "::::::::::::
500 PRINT "        INSTRUCTIONS?"
510 FOR I=1 TO 5
520 CALL SOUND(10,110+RND*200,0)
530 NEXT I
540 CALL KEY(0,K,S)
550 IF S=0 THEN 540
560 GOSUB 3920
570 IF K=89 THEN 590 ELSE 780
580 REM ** INSTRUCTIONS ** 
590 CALL CLEAR
600 CALL COLOR(10,2,1)
610 FOR I=1 TO 19
620 READ SHUTTLE$
630 CALL HCHAR(24,1,ASC(SEG$(SHUTTLE$,1,1)))
640 CALL HCHAR(24,2,ASC(SEG$(SHUTTLE$,2,1)))
650 CALL HCHAR(24,31,ASC(SEG$(SHUTTLE$,31,1)))
660 CALL HCHAR(24,32,ASC(SEG$(SHUTTLE$,32,1)))
670 PRINT SEG$(SHUTTLE$,3,28)
680 NEXT I
690 PRINT
700 PRINT "      PRESS ANY KEY TO PLAY"
710 CALL SOUND(200,1000,5)
720 CALL SOUND(200,300,5)
730 CALL SOUND(200,1000,5)
740 CALL KEY(0,K,S)
750 IF S=0 THEN 740
760 GOSUB 3920
770 REM ** SET SCREEN ** 
780 DIM H(32)
790 CALL CLEAR
800 CALL SCREEN(2)
810 FOR I=1 TO 8
820 CALL COLOR(I,16,1)
830 NEXT I
840 FOR I=9 TO 11
850 CALL COLOR(I,16,1)
860 NEXT I
870 CALL COLOR(12,15,16)
880 CALL COLOR(13,16,1)
890 CALL COLOR(14,16,1)
900 CALL COLOR(16,5,16)
910 REM ** CHARACTERS ** 
920 CALL CHAR(120,"FFFFE1C000009999")
930 CALL CHAR(121,"E0D6000000C7D7C7")
940 CALL CHAR(122,"1FCF010000E3EBE3")
950 CALL CHAR(123,"FFFF55FFFFCCFFFF")
960 CALL CHAR(124,"FFF0FFFFC3FFFFFF")
970 CALL CHAR(128,"0000001818000000")
980 CALL CHAR(129,"0066660000666600")
990 CALL CHAR(130,"C3C300000000C3C3")
1000 CALL CHAR(131,"FF422418182442FF")
1010 CALL CHAR(132,"0000000FFF0F0000")
1020 CALL CHAR(133,"000000000F000000")
1030 CALL CHAR(134,"00000000FF000000")
1040 CALL CHAR(135,"00000080C0FEC080")
1050 CALL CHAR(136,"80C0E0FEFFFF0000")
1060 CALL CHAR(137,"80C0A09E81FF0000")
1070 CALL CHAR(138,"0042183CFF3C1842")
1080 CALL CHAR(139,"000103000F000301")
1090 CALL CHAR(140,"55AA55AA55AA55AA")
1100 CALL CHAR(144,"FF9999FFFF9999FF")
1110 CALL CHAR(145,"FF8181FFFF8181FF")
1120 CALL CHAR(146,"FF999999999999FF")
1130 CALL CHAR(152,"00CFFFF3FF9FFF8F")
1140 PRINT ;"REMEMBER ON RUNWAY PRESS X";
1150 RL=4
1160 LEV=2
1170 W$="SHIPS: 3  SCORE: 0     LEVEL: "&STR$((LEV-1)+10*(RL-4))
1180 TY=1
1190 TX=0
1200 GOSUB 3880
1210 W$=" HIGH: "&STR$(HISCORE)
1220 TY=2
1230 TX=10
1240 GOSUB 3880
1250 L=3
1260 SC=0
1270 H(1)=3
1280 REM ** SCENARY **  
1290 CALL HCHAR(3,1,134,32)
1300 CALL HCHAR(21,1,152,32)
1310 CALL HCHAR(22,1,123,32)
1320 CALL HCHAR(23,1,124,32)
1330 CALL HCHAR(23,4,121)
1340 CALL HCHAR(23,5,122)
1350 CALL HCHAR(22,28,120)
1360 CALL HCHAR(23,22,121)
1370 CALL HCHAR(23,23,122)
1380 CALL HCHAR(22,12,120)
1390 REM ** INFO ** 
1400 INV=LEV*30*0.5
1410 W$="INVENTORY: "&STR$(INV)
1420 GOSUB 3840
1430 TX=15
1440 W$="RUNWAY LENGTH: "&STR$(RL)
1450 GOSUB 3870
1460 W$=STR$(LEV-1)
1470 TY=1
1480 TX=30
1490 GOSUB 3880
1500 REM ** CITY ** 
1510 CALL COLOR(15,ASC(SEG$(CLR$,LEV-1,1))-64,16)
1520 FOR I=2 TO 32
1530 H(I)=INT(RND*LEV)+3
1540 T=0
1550 T=-INT(RND*(1.9-(H(I)>6)))*(H(I)>5)
1560 CALL VCHAR(24-H(I),I,144+T,H(I)-3)
1570 CALL SOUND(-1000,1000,30,110-(H(I)>3)*100,15,1000-I*10,30,-4,5)
1580 NEXT I
1590 X=1
1600 Y=5
1610 OLDX=X
1620 OLDY=Y
1630 CH=136
1640 RW=0
1650 XB=0
1660 CALL SOUND(200,262,0)
1670 CALL SOUND(200,330,0)
1680 CALL SOUND(200,392,0)
1690 REM ** START GAME ** 
1700 CALL KEY(0,K,S)
1710 IF S=0 THEN 1720 ELSE 1750
1720 OH=0
1730 CH=136
1740 GOTO 2570
1750 IF K=ASC("Q")THEN 3330
1760 REM ** DESCEND **     
1770 REM ** OR BRAKE **                    
1780 IF K<>88 THEN 1900
1790 CALL HCHAR(Y,32,32)
1800 Y=Y+1
1810 IF Y=24-4-LEV THEN 1820 ELSE 1830
1820 CALL CHAR(136,"0080C0E0FEFFFF22")
1830 CALL GCHAR(Y,X,C)
1840 Y=Y+(C>32)
1850 RW=RW-(C=131)-(C=152)
1860 CALL SOUND(-1000,1000,30,1000,30,1110-(RW/RL)*1000,30,-8,-(RW=0)*30)
1870 IF RW=RL THEN 3150
1880 OP=0
1890 REM ** FIRE **   
1900 IF K=90 THEN 1920 ELSE 2360
1910 REM ** MISSILE ** 
1920 IF Y>24-4-LEV THEN 1940 ELSE 2210
1930 REM ** MISSILE LOOP **       
1940 FOR I=X-(X<32)TO 32
1950 CALL GCHAR(Y,I,MC)
1960 IF MC>32 THEN 2020
1970 IF I=32 THEN 2360
1980 CALL HCHAR(Y,I,135)
1990 CALL HCHAR(Y,I,32)
2000 NEXT I
2010 REM ** DESTRUCTION **  
2020 CALL GCHAR(Y-1,I,AB)
2030 IF AB>32 THEN 2040 ELSE 2100
2040 CALL VCHAR(21-(H(I)-3),I,140,H(I)-3)
2050 CALL SOUND(1000,-7,0)
2060 FOR J=21-(H(I)-3)TO 20
2070 CALL VCHAR(J,I,32)
2080 NEXT J
2090 GOTO 2140
2100 CALL HCHAR(Y,I,140)
2110 CALL SOUND(200,-7,0)
2120 CALL HCHAR(Y,I,32)
2130 H(I)=H(I)-1
2140 SC=SC+100*(MC=144)
2150 CALL HCHAR(1,18,32,5)
2160 IF SC>0 THEN 2180
2170 SC=0
2180 GOSUB 3760
2190 GOTO 2360
2200 REM ** LASER **  
2210 IF X>30 THEN 2360
2220 CALL HCHAR(Y,X+1,138)
2230 CALL HCHAR(Y,X+2,134,30-X)
2240 CALL HCHAR(Y,X+1,32,31-X)
2250 FOR I=1 TO 5
2260 CALL SOUND(10,110+RND*200,0)
2270 NEXT I
2280 IF OP>=23 THEN 2290 ELSE 2360
2290 CALL HCHAR(Y,32,140)
2300 CALL SOUND(1000,-7,0)
2310 CALL HCHAR(Y,32,32)
2320 SC=SC+100
2330 GOSUB 3760
2340 OP=0
2350 REM ** DROP TRUSS ** 
2360 IF K=32 THEN 2370 ELSE 2570
2370 IF XB>=INV THEN 2380 ELSE 2410
2380 W$="NO MORE TRUSSES LEFT"
2390 GOSUB 3840
2400 GOTO 2570
2410 IF (H(X)>=3+LEV)THEN 2570
2420 OH=OH+1
2430 IF (OH>10)THEN 2440 ELSE 2490
2440 CH=137
2450 IF OH>12 THEN 2460 ELSE 2490
2460 GOSUB 3650
2470 IF L=0 THEN 3480
2480 CH=136
2490 CALL VCHAR(Y+1,X,131)
2500 H(X)=H(X)+1
2510 CALL VCHAR(Y+1,X,32)
2520 CALL VCHAR((24-H(X)),X,131)
2530 XB=XB+1
2540 CALL SOUND(-100,300,5)
2550 CALL SOUND(-100,1000,5)
2560 REM ** MOVE PLAYER **  
2570 X=X+1
2580 REM ** END OF ROW ** 
2590 IF X<>33 THEN 2740
2600 X=1
2610 Y=Y+1
2620 IF Y=24-4-LEV THEN 2630 ELSE 2640
2630 CALL CHAR(136,"0080C0E0FEFFFF22")
2640 CALL HCHAR(24,12,32,3)
2650 N$=STR$(INV-XB)
2660 NY=24
2670 NX=11
2680 GOSUB 3800
2690 OP=0
2700 IF RND>0.5 THEN 2710 ELSE 2740
2710 IF Y>24-4-LEV THEN 2740 ELSE 2720
2720 OP=1
2730 REM ** COLLISION ** 
2740 IF Y>24-4-LEV THEN 2750 ELSE 2860
2750 CALL GCHAR(Y,X,C)
2760 IF C>32 THEN 2770 ELSE 2860
2770 CALL HCHAR(OLDY,OLDX,32)
2780 CALL HCHAR(Y,X,C)
2790 CALL SOUND(500,-5,0)
2800 GOSUB 3720
2810 IF L=0 THEN 3490
2820 X=1
2830 Y=5
2840 CALL CHAR(136,"80C0E0FEFFFF0000")
2850 REM ** PLOT PLAYER **  
2860 CALL HCHAR(OLDY,OLDX,32)
2870 CALL HCHAR(Y,X,CH)
2880 OLDX=X
2890 OLDY=Y
2900 REM ** DRONE ** 
2910 IF OP=1 THEN 2920 ELSE 2930
2920 OP=2+INT(RND*20)
2930 IF OP>=2 THEN 2940 ELSE 3130
2940 IF OP=23 THEN 2950 ELSE 3000
2950 CALL HCHAR(Y,32,132)
2960 CALL HCHAR(Y,31,139)
2970 CALL SOUND(10,-5,20)
2980 CALL VCHAR(Y,31,32,2)
2990 GOTO 3120
3000 IF OP=24 THEN 3010 ELSE 3040
3010 CALL HCHAR(Y,(31-X)/2+X,133)
3020 CALL HCHAR(Y,(31-X)/2+X,32)
3030 GOTO 3120
3040 IF OP=25 THEN 3050 ELSE 3120
3050 CALL HCHAR(Y,X+1,133)
3060 CALL HCHAR(Y,X+1,32)
3070 GOSUB 3660
3080 CALL HCHAR(Y,32,32)
3090 OP=0
3100 IF L=0 THEN 3480
3110 GOTO 3130
3120 OP=OP+1
3130 GOTO 1700
3140 REM ** LANDED ** 
3150 FOR I=0 TO 20 STEP 3
3160 CALL SOUND(-50,700,I,2100,I,4200,I)
3170 NEXT I
3180 W$="WELL DONE YOU HAVE LANDED!"
3190 GOSUB 3840
3200 XB_SC=(INV-XB)*10
3210 W$="LEVEL "&STR$(LEV-1)&" POINTS = "&STR$(XB_SC)
3220 GOSUB 3840
3230 SC=SC+XB_SC
3240 GOSUB 3760
3250 CALL HCHAR(24,1,32,32)
3260 CALL SOUND(100,880,0)
3270 CALL HCHAR(10,1,32,32*14)
3280 LEV=LEV+1
3290 RL=RL-2*(LEV>6)
3300 CALL CHAR(136,"80C0E0FEFFFF0000")
3310 REM ** COMPLETED ** 
3320 IF LEV=12 THEN 3330 ELSE 3470
3330 CALL SOUND(250,131,0)
3340 CALL SOUND(100,165,0)
3350 CALL SOUND(100,175,0)
3360 CALL SOUND(100,196,0)
3370 W$="    * * CONGRATULATIONS * *"
3380 GOSUB 3840
3390 W$="* * ALL LEVELS COMPLETED! * *"
3400 GOSUB 3840
3410 W$="BONUS POINTS = 1000"
3420 GOSUB 3840
3430 SC=SC+1000
3440 GOSUB 3760
3450 CALL SOUND(100,523,0)
3460 GOTO 3510
3470 GOTO 1270
3480 CALL HCHAR(Y,X,32)
3490 W$="        G A M E  O V E R    "
3500 GOSUB 3840
3510 IF SC>HISCORE THEN 3520 ELSE 3570
3520 HISCORE=SC
3530 NY=2
3540 NX=17
3550 GOSUB 3790
3560 CALL SOUND(100,523,0)
3570 W$="          PLAY AGAIN?"
3580 GOSUB 3840
3590 CALL KEY(0,K,S)
3600 IF S=0 THEN 3590
3610 IF K=89 THEN 3620 ELSE 3640
3620 GOSUB 3920
3630 GOTO 780
3640 END
3650 REM ** LIVES **  
3660 CALL HCHAR(Y,X,128)
3670 CALL SOUND(-200,-5,0)
3680 CALL HCHAR(Y,X,129)
3690 CALL SOUND(-200,-6,0)
3700 CALL HCHAR(Y,X,130)
3710 CALL SOUND(-200,-7,0)
3720 L=L-1
3730 OH=0
3740 CALL HCHAR(1,8,48+L)
3750 RETURN
3760 REM ** SCORE ** 
3770 NY=1
3780 NX=17
3790 N$=STR$(SC)
3800 FOR I=1 TO LEN(N$)
3810 CALL HCHAR(NY,NX+I,48+VAL(SEG$(N$,I,1)))
3820 NEXT I
3830 RETURN
3840 REM ** WRITE TEXT **  
3850 CALL HCHAR(24,1,32,32)
3860 TX=0
3870 TY=24
3880 FOR I=1 TO LEN(W$)
3890 CALL HCHAR(TY,I+TX,ASC(SEG$(W$,I,1)))
3900 NEXT I
3910 RETURN
3920 FOR I=0 TO 8
3930 CALL SOUND(-3000,1000,30,1000,30,1000-I*100,30,-8,0)
3940 NEXT I
3950 RETURN
3960 DATA " ccb        INSTRUCTIONS        "
3970 DATA " icfb                           "
3980 DATA " ddjm   SPACEBAR TO CONSTRUCT   "
3990 DATA "  jm`k  RUNWAY (4+ SECTIONS)    "
4000 DATA "  agjdj                         "
4010 DATA "  d`mbmb  X TO DESCEND AND TO   "
4020 DATA "   kgj`k  BRAKE ON THE RUNWAY   "
4030 DATA "   do``ek                       "
4040 DATA "   ogllhob  Z FOR LASER         "
4050 DATA "  aon```dnhcccccb               "
4060 DATA "  dmo```aac````ddlmliccccc      "
4070 DATA "  gkgoll`POINTS FOR     `fob    "
4080 DATA "  ooolac```LANDING OR`````mib   "
4090 DATA "  llo``   SHOOTING DRONE`acglc  "
4100 DATA "  dokoooooooogcgoookcj``booookkb"
4110 DATA "     dllmooooooooooooooocgoooooo"
4120 DATA "           ooojllllllooooooooool"
4130 DATA "           ollh             oll "
4140 DATA "dllllllollllllllllllllhh    l ac"
 

 

 

Descender.png

Descender2.png

Info_descender.png

Descender.dsk Instructions_Descender.pdf

DESCEND.zip

Edited by tibasic
Add zip file of DESCEND file
  • Like 14
  • Thanks 2
Link to comment
Share on other sites

Nicely done!  For some reason Chrome won't let me download the file, claiming it's dangerous, but I cut and pasted the listing into Classic99.  I'll have more time to play it later, but my first impression is that it's a great take on the City Bomber concept, with a lot going on and extra surprises.  It looks awesome, too!

Link to comment
Share on other sites

I normally pass on city bomber games, but this is actually pretty good😊.

Also, when i downloaded the file DESCEND, the forum put a ".bin" ending on it.

I have a habit of scanning for and snatching the downloads first, then going back and reading the post.

So at first, i thought this file was a FinalGrom cart lol.

Edited by jrhodes
Link to comment
Share on other sites

17 hours ago, sometimes99er said:

Very nice. 👍

Thanks!

 

17 hours ago, InfernalKeith said:

Nicely done!  For some reason Chrome won't let me download the file, claiming it's dangerous, but I cut and pasted the listing into Classic99.  I'll have more time to play it later, but my first impression is that it's a great take on the City Bomber concept, with a lot going on and extra surprises.  It looks awesome, too!

Thanks for compliment. Great you got the game to run. I guess the problem with the file might be it doesn't have the extension. I've re-attached the file as a zip file so hopefully it wont give any problems.

 

16 hours ago, senior_falcon said:

Nice to see that games are still being written for plain vanilla TI BASIC. Well done!

Thanks, yes I like it. It's a very simple language and easy to program but of coarse it has its limits.

 

15 hours ago, jrhodes said:

I normally pass on city bomber games, but this is actually pretty good😊.

Also, when i downloaded the file DESCEND, the forum put a ".bin" ending on it.

I have a habit of scanning for and snatching the downloads first, then going back and reading the post.

So at first, i thought this file was a FinalGrom cart lol.

Great, glad you like! I can remember playing City Bomber on someone's ZX81 in the 80s before we got a TI99 and thinking it was amazing but it does seem a bit too simplistic now. I've added the DESCEND file as a zip now so hopefully that's better.

 

Edited by tibasic
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...