Jump to content
IGNORED

Apex Software Bomber, Alien Attack & Pilot. Are They on Any DB?


wyerd

Recommended Posts

I found these cassette based games while looking for something else. Are they listed on any DB and would anyone be interested in them, although I'm unable to verify that they still work? I can do a hires scan if required.

 

IMG_1729.JPG

 

IMG_1730.JPG

 

IMG_1731.JPG

 

IMG_1732.JPG

 

IMG_1733.JPG

 

IMG_1734.JPG

 

IMG_1735.JPG

  • Like 4
Link to comment
Share on other sites

Bomber: ouh this was one of my very first favourites, :)

 

I can remember that I entered it from a german magazine, had some errors from my reading,

and was so proud some days later to show my dad that I found my typo-error :) :)

Was playing it all the day then :)

 

 

100 REM BOMBER ©1984 R. BAUER
110 RANDOMIZE
120 CALL CLEAR
130 CALL CHAR(96,"00FF999999FFFFFF")
140 CALL CHAR(136,"00000000267EBFFB")
150 CALL CHAR(128,"49FB7F7E7E7FFFFF")
160 CALL CHAR(112,"0000001F84FE3F12")
170 CALL CHAR(104,"FFFFFF")
180 CALL CHAR(42,"00000000000E0E")
190 CALL COLOR(9,5,16)
200 CALL COLOR(11,2,1)
210 CALL COLOR(10,15,1)
220 CALL COLOR(13,5,11)
230 REM START NEUES SPIEL
240 PZ=0
250 REM HAEUSER AUFBAUEN
260 CALL CLEAR
270 I=3
280 J=RND*8+3
290 FOR B=1 TO RND*5
300 CALL VCHAR(J,I,96,24-J)
310 I=I+1
320 IF I>31 THEN 360
330 NEXT B
340 I=I+1
350 IF I<32 THEN 280
360 CALL HCHAR(24,1,104,32)
370 REM START BOMBER
380 FX=1
390 FY=1
400 LX=0
410 LY=1
420 LX=LX+1
430 IF LX<32 THEN 460
440 LY=LY+1
450 LX=1
460 CALL SOUND(-1000,-6,24-FY)
470 FX=FX+1
480 IF FX<32 THEN 510
490 FX=1
500 FY=FY+1
510 CALL GCHAR(FY,FX,T)
520 IF T=96 THEN 840
530 CALL GCHAR(FY+1,FX+1,T)
540 IF T=96 THEN 550 ELSE 1440
550 IF BZ<2 THEN 840
560 CALL HCHAR(FY,FX,112)
570 CALL HCHAR(LY,LX,32)
580 PZ=PZ+1
590 CALL KEY(0,KEY,S)
600 IF S=0 THEN 650
610 IF BZ>0 THEN 660
620 BY=FY
630 BX=FX
640 BZ=1
650 IF BZ=0 THEN 770
660 CALL HCHAR(BY,BX,32)
670 BX=BX+1
680 BY=BY+1
690 IF BX<32 THEN 720
700 BX=1
710 BY=BY+1
720 IF BY>22 THEN 800
730 CALL GCHAR(BY,BX,X)
740 IF X=96 THEN 800
750 CALL HCHAR(BY,BX,42)
760 BZ=BZ+1
770 IF FY<23 THEN 420
780 IF FX<31 THEN 420
790 GOTO 250
800 CALL VCHAR(1,BX,32,BY)
810 CALL SOUND(-2000,-5,0)
820 BZ=0
830 GOTO 770
840 GOSUB 1250
850 DRUCK$=" PUNKTZAHL = "&STR$(PZ)
860 VTAB=1
870 HTAB=2
880 GOSUB 1010
890 IF HS>PZ THEN 920
900 HS=PZ
910 GOSUB 1190
920 DRUCK$=" HIGHSCORE = "&STR$(HS)
930 GOSUB 1010
940 DRUCK$=" NOCH EIN SPIEL ? "
950 GOSUB 1010
960 CALL KEY(0,KEY,S)
970 IF S=0 THEN 960
980 IF KEY=74 THEN 230
990 IF KEY<>78 THEN 960
1000 END
1010 REM PRINTROUTINE
1020 FOR DRI=1 TO LEN(DRUCK$)
1030 CODE=ASC(SEG$(DRUCK$,DRI,1))
1040 GOSUB 1080
1050 NEXT DRI
1060 GOSUB 1130
1070 RETURN
1080 REM COUNT
1090 CALL HCHAR(VTAB,HTAB,CODE)
1100 HTAB=HTAB+1
1110 IF HTAB<32 THEN 1180
1120 REM CROUT
1130 VTAB=VTAB+1
1140 HTAB=2
1150 IF VTAB<25 THEN 1180
1160 VTAB=24
1170 PRINT
1180 RETURN
1190 FOR SI=1 TO 5
1200 FOR SJ=-3 TO-1
1210 CALL SOUND(100,SJ,1)
1220 NEXT SJ
1230 NEXT SI
1240 RETURN
1250 FX=FX+1
1260 CALL HCHAR(FY,FX-1,112)
1270 CALL HCHAR(FY,FX-2,32)
1280 CALL HCHAR(FY,FX-1,32)
1290 L=24
1300 CALL SOUND(-1000,-7,1)
1310 CALL HCHAR(FY,FX,128)
1320 FOR J=1 TO 250
1330 NEXT J
1340 CALL HCHAR(FY,FX,32)
1350 FY=FY+1
1360 IF FY=24 THEN 1410
1370 CALL HCHAR(FY,FX,32)
1380 CALL SOUND(-100,-5,L)
1390 L=L-1
1400 GOTO 1350
1410 CALL SOUND(100,-7,L-1)
1420 CALL HCHAR(FY-1,FX,136)
1430 RETURN
1440 CALL GCHAR(FY+1,FX,T)
1450 IF T=96 THEN 1460 ELSE 560
1460 CALL SOUND(-100,392,2)
1470 GOTO 560

 

 

post-41141-0-67969600-1437750208_thumb.jpg

 

 

R_BAUER.dsk

  • Like 2
Link to comment
Share on other sites

Next thing I did with this program: I added a highscore file to it. This makes it even more fun!

 

 

Edit: And I seem to have converted it to Extended Basic. So here's the complete code:

 

 

100 RANDOMIZE
105 A=2
110 CALL CLEAR
120 CALL CHAR(96,"00FF999999FFFFFF")
130 CALL CHAR(112,"000000000086CFFE")
140 CALL CHAR(104,"FFFFFF")
150 CALL CHAR(42,"000000607806")
155 PZ=0
160 CALL COLOR(9,A,16)
170 CALL COLOR(11,16,1)
180 CALL COLOR(10,15,1)
190 REM START NEUES SPIEL
210 REM HAEUSER AUFBAUEN
215 SG=3
220 CALL CLEAR
230 I=2
240 J=RND*8+3
250 FOR B=1 TO RND*(SG+1)
260 CALL VCHAR(J,I,96,24-J)
270 I=I+1
280 IF I>31 THEN 320
290 NEXT B
300 I=I+1
310 IF I<32 THEN 240
320 CALL HCHAR(24,1,104,32)
330 REM START BOMBER
340 FX=1
350 FY=1
360 LX=0
370 LY=1
380 LX=LX+1
390 IF LX<32 THEN 420
400 LY=LY+1
410 LX=1
420 CALL SOUND(-1000,-6,24-FY)
430 FX=FX+1
440 IF FX<32 THEN 470
450 FX=1
460 FY=FY+1
470 CALL GCHAR(FY,FX,T)
480 IF T=96 THEN 800
490 CALL GCHAR(FY+1,FX+1,T)
500 IF T<>96 THEN 520
510 IF BZ<2 THEN 800
520 CALL HCHAR(FY,FX,112)
530 CALL HCHAR(LY,LX,32)
540 PZ=PZ+1
550 CALL KEY(0,KEY,S)
560 IF S=0 THEN 610
570 IF BZ>0 THEN 620
580 BY=FY
590 BX=FX
600 BZ=1
610 IF BZ=0 THEN 730
620 CALL HCHAR(BY,BX,32)
630 BX=BX+1
640 BY=BY+1
650 IF BX<32 THEN 680
660 BX=1
670 BY=BY+1
680 IF BY>22 THEN 760
690 CALL GCHAR(BY,BX,X)
700 IF X=96 THEN 760
710 CALL HCHAR(BY,BX,42)
720 BZ=BZ+1
730 IF FY<23 THEN 380
740 IF FX<31 THEN 380
750 A=A+1 :: GOTO 160
760 CALL VCHAR(1,BX,32,BY)
770 CALL SOUND(-2000,-5,0)
780 BZ=0
790 GOTO 730
800 DISPLAY AT(1,2):"PUNKTZAHL = ";PZ
810 IF HS>PZ THEN 840
820 HS=PZ
830 GOSUB 910
840 DISPLAY AT(2,2):"HIGHSCORE = ";HS
845 CALL BESTENLISTE(PZ)
850 DISPLAY AT(3,2):"NOCH EIN SPIEL? <J> <N>"
860 CALL KEY(0,K,S)
870 IF S=0 THEN 860
880 IF K=74 THEN 105
890 IF K<>78 THEN 860
900 END
910 FOR SI=1 TO 5
920 FOR SJ=-3 TO -1
930 CALL SOUND(100,SJ,1)
940 NEXT SJ
950 NEXT SI
960 RETURN
20000 SUB BESTENLISTE(Z)
20010 OPEN #1:"DSK1.SCORES",SEQUENTIAL,INTERNAL,UPDATE,VARIABLE :: FOR A=1 TO 10 :: INPUT #1:NAME$(A),P(A) :: NEXT A
20020 IF Z<P(10) THEN 20070
20030 FOR A=1 TO 10 :: IF Z>P(A) OR P(A)=0 THEN 20050
20040 NEXT A :: GOTO 20070
20050 FOR B=9 TO A STEP -1 :: P(B+1)=P(B) :: NAME$(B+1)=NAME$(B) :: NEXT B
20060 CALL CLEAR :: INPUT "NAME: ":NAME$(A) :: P(A)=Z
20070 DISPLAY AT(1, ERASE ALL :"BESTENLISTE":"       ==========="
20080 CALL CHAR(33,"1818181818181818")
20090 CALL VCHAR(4,7,33,21) :: CALL VCHAR(4,18,33,21)
20100 RESTORE #1 :: DISPLAY AT(4,1):"RANG   NAME       PUNKTE"
20110 FOR A=1 TO 10 :: DISPLAY AT(A*2+4,1) SIZE(-3):STR$(A);"." :: DISPLAY AT(A*2+4,6) SIZE(10):NAME$(A)
20120 DISPLAY AT(A*2+4,17) SIZE(10)(A) :: PRINT #1:NAME$(A),P(A) :: NEXT A :: CLOSE #1
20130 CALL KEY(0,K,S) :: IF S=0 THEN 20130 ELSE CALL CLEAR
20140 SUBEND
Edited by mizapf
  • Like 3
Link to comment
Share on other sites

OK, seems as if that SCORES file must be created before. Let me see ...

 

It's an INT/VAR 80 file (don't ask me...) that contains records like <Name>,<Points>

 

Try:

OPEN #1:"DSK1.SCORES",SEQUENTIAL,INTERNAL,OUTPUT,VARIABLE :: FOR A=1 TO 10 :: PRINT #1:"NOBODY", 0 :: NEXT A :: CLOSE #1
Edited by mizapf
  • Like 1
Link to comment
Share on other sites

For English speaking/reading people...

 

 

 

 

 

Just ran it, it errored after I scored so many points - it said something about line 185 (I switched off quite abruptly without reading properly )

 

Nice little type-in. Can't wait for the Apex Bomber if someone can 'digitize' that, I used to have it :)

Edited by Retrospect
Link to comment
Share on other sites

I found these cassette based games while looking for something else. Are they listed on any DB and would anyone be interested in them, although I'm unable to verify that they still work? I can do a hires scan if required.

 

IMG_1729.JPG

 

IMG_1730.JPG

 

IMG_1731.JPG

 

IMG_1732.JPG

 

IMG_1733.JPG

 

IMG_1734.JPG

 

IMG_1735.JPG

These are very interesting to me, they are UK games that are VERY rare and hard to get hold of, I had Bomber and would love for a file to be created of the cassette if at all possible, so it can be played in Classic99 emulator.

Link to comment
Share on other sites

Now that is a heck of a good game! And it runs fine in XB. I haven't tried it in BASIC but I imagine it would be slower. Since you've moved over to XB, how about converting the plane and the bomb to sprites. The playability wouldn't improve, but it would be just a bit more polished in appearance.

  • Like 1
Link to comment
Share on other sites

Yes, it is a good game, I tweaked it a little more, added a little speech too. Both files and the PDF are in the ZIP file (attached).

 

I'd like to see what else someone can add to the program. Let's make it a group thing! I liked your idea for sprites. Heck someone could make it a random day or night thing too, possibly even with stars (like Parsec). Let's see what we can do with this thing. Who knows, once it's all jazzed up, someone might even make it an E/A 5 game... who knows where this can lead.

 

gallery_35324_1027_54305.gif

BOMBER-XBS.zip

  • Like 1
Link to comment
Share on other sites

Hi,

cool work, on my former favorite :)

 

One question: For the highscore-file, is it possible to integrate a check in the main programm,

like "Open #1:Scores,bla" and "On Error..." (If not exists) GOSUB 20500 (to Create the file once) ?

...or does Basic break the program if the file does not exist ?

maybe maybe

Link to comment
Share on other sites

I think I remember that 30 years ago I had that same idea, to enhance TI BASIC programs with sprites (like Dive Bomber, Space Defense etc.) but never really got that far (maybe because I was distracted by assembly programming ... :-) )

 

Programming with sprites in Extended Basic always turned out for me to be less fun than one would guess at first thought. The problem is the sprite automotion.

 

What you see in TI BASIC is a sort of discrete time sequence. The aircraft advances one column, the bomb advances one column. This is a perfectly reproducible process; simulations with hundreds or thousands of agents are done in the same way. Here, you will get the same results when you drop a bomb at the same position with the same environment.

 

Replace the bomb with a sprite. You will certainly want to use automotion because we cannot afford to let the sprite be repositioned by the Basic program; this would look basically the same as with plain characters. But with automotion we switch from the discrete simulation to some kind of event-based simulation: When does the sprite hit a building? Unfortunately, we do not have a means to trigger and handle an event (like "when the sprite hits the wall, do this") except for testing for sprite coincidence (COINC). So I would expect that after dropping the bomb we would have to continuously poll the sprite location and check whether at the current position there is a wall.

 

What I wanted to say is: Sprites seem to be a simple means to get smooth action into a game, but although Extended Basic is pretty fast, it is not fast enough to ensure a flawless experience without sprites going halfway through a barrier or seemingly passing through a target.

 

Notwithstanding, why not try it? Let's see the best approach. Maybe finally we learn to write better programs.

  • Like 1
Link to comment
Share on other sites

You could turn the closest hittable wall into a series of SPRITEs, one after another, all the way down... Then do a COINC(ALL) check... Upon coincidence, the necessary checks can be done to determine which part of the wall was hit.

 

If the SPRITEs are numbered sequentially from top to bottom, it would be trivial to determine which ones to delete based on where the coincidence took place on the wall.

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...