Skip to content

Commit fe11eec

Browse files
committed
replace custom input with buit-in
1 parent 786eb0f commit fe11eec

2 files changed

Lines changed: 53 additions & 152 deletions

File tree

examples/trek-portable.bas

Lines changed: 53 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
' ** SPACE BATTLE COMPUTER GAME PORTABLE VERSION **
22

33
' ** STATE MACHINE STATES **
4-
ST_QUIT=0 : ST_NEWGAME=1 : ST_NEWQUAD=2 : ST_COMMAND=3 : ST_DEAD=4
5-
ST_GAMEOVER=5 : ST_VICTORY=6 : ST_MISSIONEND=7 : ST_PLAYAGAIN=8
4+
ST_QUIT=0 : ST_NEWGAME=1 : ST_NEWQUAD=2 : ST_COMMAND=3 : ST_END=4
5+
END_DEAD=1 : END_DATE=2 : END_NOPOWER=3 : END_FAIL=4 : END_WIN=5
66

77
' ** QUADRANT CELL CODES **
88
' The short-range grid is an 8x8 integer array QUAD(), not a 192-char string:
@@ -50,16 +50,8 @@ do
5050
GameState = EnterQuadrant()
5151
case ST_COMMAND
5252
GameState = DoCommand()
53-
case ST_DEAD
54-
GameState = ShipDestroyed()
55-
case ST_GAMEOVER
56-
GameState = ShowGameOver()
57-
case ST_VICTORY
58-
GameState = ShowVictory()
59-
case ST_MISSIONEND
60-
GameState = ShowMissionEnd()
61-
case ST_PLAYAGAIN
62-
GameState = AskPlayAgain()
53+
case ST_END
54+
GameState = ShowGameEnd()
6355
end select
6456
loop until GameState = ST_QUIT
6557
end
@@ -91,7 +83,7 @@ function SetupGame()
9183

9284
' ** DISPLAY TITLE SCREEN AND WAIT FOR KEY **
9385
TitleScreen()
94-
CRPLANETT=1
86+
9587

9688
' ** RANDOM SEED GENERATOR **
9789
RANDOM_SEED=RNDINT(-1)
@@ -160,9 +152,6 @@ function SetupGame()
160152
next I
161153

162154
if GLONKIN_COUNT>MISSION_DAYS then MISSION_DAYS=GLONKIN_COUNT+1
163-
'ShowKey() : ' ** KEY TO SRS ICONS **
164-
'ShowCommands() : ' ** USE THESE COMMANDS LIST **
165-
166155

167156
' Guarantee at least one SPACESTATION and preserve original balancing tweak.
168157
if SPACESTATION_COUNT=0 then
@@ -187,6 +176,7 @@ function EnterQuadrant()
187176
VISITED_GALAXY(QUADRANT_Y,QUADRANT_X)=GALAXY(QUADRANT_Y,QUADRANT_X)
188177
if QUADRANT_Y >= 1 and QUADRANT_Y <=8 and QUADRANT_X>=1 and QUADRANT_X<=8 then
189178
print
179+
190180
if GAME_DATE=DATE_CUR then
191181
print "LOCATION:";
192182
QN$=QuadrantName$(QUADRANT_Y, QUADRANT_X, 0)
@@ -269,7 +259,7 @@ function DoCommand()
269259
if SHIELD_UNITS+SHIP_POWER <= 10 or (SHIP_POWER<=10 and DEVICE_DAMAGE(7)<>0) then
270260
print "\n** OUT OF POWER **"
271261
Pause()
272-
return ST_GAMEOVER
262+
END_REASON=END_NOPOWER : return ST_END
273263
end if
274264

275265
' COMMAND LOOP
@@ -323,7 +313,7 @@ function DoCommand()
323313
case 8
324314
return Computer()
325315
case 9
326-
return ST_MISSIONEND
316+
END_REASON=END_FAIL : return ST_END
327317
end select
328318
ShowCommands()
329319
loop
@@ -362,7 +352,7 @@ function Nav()
362352
K(I,1)=TOKEN_Y : K(I,2)=TOKEN_X : PlaceToken(C_GLONKIN, K(I,1), K(I,2))
363353
next I
364354
GLONKINsFire()
365-
if SHIPDEAD then return ST_DEAD
355+
if SHIPDEAD then END_REASON=END_DEAD : return ST_END
366356

367357
D1=0 : D6=0 : if NAV_FTL_SPEED>=1 then D6=1
368358
for I=1 to 8
@@ -411,7 +401,7 @@ function Nav()
411401
if X5<>0 then
412402
NavWarning("NAV ERROR: SHUTDOWN: "+SECTOR_Y+","+SECTOR_X+" Q "+QUADRANT_Y+","+QUADRANT_X)
413403
SRSFLAG=1 : Pause()
414-
if DATE_CUR>GAME_DATE+MISSION_DAYS then return ST_GAMEOVER
404+
if DATE_CUR>GAME_DATE+MISSION_DAYS then END_REASON=END_DATE : return ST_END
415405
end if
416406
if 8*QUADRANT_Y+QUADRANT_X<>8*Q4+Q5 then DATE_CUR=DATE_CUR+1 : ManeuverPOWER() : return ST_NEWQUAD
417407
end if
@@ -420,7 +410,7 @@ function Nav()
420410
PlaceToken(C_SHIP, SECTOR_Y, SECTOR_X)
421411
ManeuverPOWER()
422412
DATE_CUR=DATE_CUR+1
423-
if DATE_CUR>GAME_DATE+MISSION_DAYS then return ST_GAMEOVER
413+
if DATE_CUR>GAME_DATE+MISSION_DAYS then END_REASON=END_DATE : return ST_END
424414
return ShortRangeScan()
425415
end function
426416

@@ -523,7 +513,7 @@ function LASERS()
523513
print " *** GLONKIN DESTROYED ***"
524514
SECTOR_ENEMIES=SECTOR_ENEMIES-1 : GLONKIN_COUNT=GLONKIN_COUNT-1 : PlaceToken(C_EMPTY, K(I,1), K(I,2))
525515
K(I,3)=0 : GALAXY(QUADRANT_Y,QUADRANT_X)=GALAXY(QUADRANT_Y,QUADRANT_X)-100 : VISITED_GALAXY(QUADRANT_Y,QUADRANT_X)=GALAXY(QUADRANT_Y,QUADRANT_X)
526-
if GLONKIN_COUNT<=0 then return ST_VICTORY
516+
if GLONKIN_COUNT<=0 then END_REASON=END_WIN : return ST_END
527517
next I
528518

529519
' CHECK IF GLONKINS ARE LEFT
@@ -533,7 +523,7 @@ function LASERS()
533523
GLONKINsFire()
534524

535525
' CHECK IF SHIP IS DEAD
536-
if SHIPDEAD then return ST_DEAD
526+
if SHIPDEAD then END_REASON=END_DEAD : return ST_END
537527

538528
' RETURN SUCCESS
539529
return ST_COMMAND
@@ -544,7 +534,7 @@ function TorpedoEndTurn(MSG$)
544534
if MSG$<>"" then print MSG$
545535
if SECTOR_ENEMIES<>0 then Pause()
546536
GLONKINsFire()
547-
if SHIPDEAD then return ST_DEAD
537+
if SHIPDEAD then END_REASON=END_DEAD : return ST_END
548538
return ST_COMMAND
549539
end function
550540

@@ -559,8 +549,7 @@ function WARHEAD()
559549
C1=AskNumber("WARHEAD COURSE (1-9) : ", 5)
560550
if C1=9 then C1=1
561551
if C1<1 or C1>=9 then
562-
print : background 6: color 1: print "ALERT:, INCORRECT"
563-
print "COURSE DATA";:background 0: print : return ST_COMMAND
552+
print "ALERT:, INCORRECT COURSE DATA";: return ST_COMMAND
564553
end if
565554

566555
' CALCULATE WARHEAD COURSE
@@ -587,7 +576,7 @@ function WARHEAD()
587576
GLONKIN_COUNT=GLONKIN_COUNT-1
588577

589578
' CHECK IF ALL GLONKINS ARE DESTROYED
590-
if GLONKIN_COUNT<=0 then return ST_VICTORY
579+
if GLONKIN_COUNT<=0 then END_REASON=END_WIN : return ST_END
591580

592581
' FIND GLONKIN INDEX
593582
HitIdx=3
@@ -606,7 +595,7 @@ function WARHEAD()
606595
GALAXY(QUADRANT_Y,QUADRANT_X)=SECTOR_ENEMIES*100+SECTOR_BASES*10+SECTOR_PLANETS : VISITED_GALAXY(QUADRANT_Y,QUADRANT_X)=GALAXY(QUADRANT_Y,QUADRANT_X) : GLONKINsFire()
607596

608597
' CHECK IF SHIP IS DEAD
609-
if SHIPDEAD then return ST_DEAD
598+
if SHIPDEAD then END_REASON=END_DEAD : return ST_END
610599

611600
' RETURN SUCCESS
612601
return ST_COMMAND
@@ -626,7 +615,7 @@ function WARHEAD()
626615
' CHECK IF ALL SPACESTATIONS ARE DESTROYED
627616
if SPACESTATION_COUNT<=0 and GLONKIN_COUNT<=DATE_CUR-GAME_DATE-MISSION_DAYS then
628617
NavWarning("FAILURE - SPACESTATIONS DESTROYED")
629-
return ST_MISSIONEND
618+
END_REASON=END_FAIL : return ST_END
630619
end if
631620

632621
' DESTROY SPACESTATION
@@ -635,7 +624,7 @@ function WARHEAD()
635624

636625
' UPDATE QUADRANT DATA
637626
GALAXY(QUADRANT_Y,QUADRANT_X)=SECTOR_ENEMIES*100+SECTOR_BASES*10+SECTOR_PLANETS : VISITED_GALAXY(QUADRANT_Y,QUADRANT_X)=GALAXY(QUADRANT_Y,QUADRANT_X) : GLONKINsFire()
638-
if SHIPDEAD then return ST_DEAD
627+
if SHIPDEAD then END_REASON=END_DEAD : return ST_END
639628
return ST_COMMAND
640629
loop
641630

@@ -694,7 +683,7 @@ function Damage()
694683
for I=1 to 8
695684
print " ";DEVICE_NAME$(I);left$(SPACE_PAD$,20-len(DEVICE_NAME$(I)));
696685

697-
if DEVICE_DAMAGE(I)<0 then print CCOL$;"DAMAGED ";DEVICE_DAMAGE(I);
686+
if DEVICE_DAMAGE(I)<0 then print "DAMAGED ";DEVICE_DAMAGE(I);
698687
if DEVICE_DAMAGE(I)>=0 then print "OPERATIONAL ";DEVICE_DAMAGE(I);
699688
next I
700689
return ST_COMMAND
@@ -714,7 +703,7 @@ function GLONKINsFire()
714703

715704
' CALCULATE HIT POINTS
716705
H=((K(I,3)/FND(1))*(200+RNDINT(100)))\100 : SHIELD_UNITS=SHIELD_UNITS-H : K(I,3)=K(I,3)\(2+RNDINT(2))
717-
print : print H;" UNIT HIT STARSHIP FROM ";K(I,1);",";K(I,2)
706+
print H;" UNIT HIT STARSHIP FROM ";K(I,1);",";K(I,2)
718707

719708
' CHECK IF SHIELDS ARE DOWN
720709
if SHIELD_UNITS<=0 then SHIPDEAD=1 : return
@@ -733,31 +722,19 @@ function GLONKINsFire()
733722
end function
734723

735724

736-
' ** ===== END-OF-GAME STATES ===== **
737-
function ShowGameOver()
738-
print "\nIT IS DATE ";DATE_CUR
739-
return ST_MISSIONEND
740-
end function
741-
742-
743-
' ** ===== SHIP DESTROYED ===== **
744-
function ShipDestroyed()
745-
Pause()
746-
print "\n THE STARSHIP HAS BEEN DESTROYED.\nTHE EARTH WILL BE CONQUERED"
747-
return ST_GAMEOVER
748-
end function
749-
750-
751-
' ** ===== SHOW MISSION END ===== **
752-
function ShowMissionEnd()
753-
print "\nTHERE WERE ";GLONKIN_COUNT;" GLONKIN BATTLE CRUISERS"
754-
print "LEFT AT THE END OF YOUR MISSION."
755-
return ST_PLAYAGAIN
756-
end function
757-
758-
759-
' ** ===== ASK PLAY AGAIN ===== **
760-
function AskPlayAgain()
725+
' ** ===== END-OF-GAME ===== **
726+
function ShowGameEnd()
727+
if END_REASON=END_DEAD or END_REASON=END_WIN then Pause()
728+
if END_REASON=END_DEAD then print "\nTHE STARSHIP HAS BEEN DESTROYED.\nTHE EARTH WILL BE CONQUERED"
729+
if END_REASON=END_DATE then print "\nMISSION TIME EXPIRED. DATE ";DATE_CUR
730+
if END_REASON=END_WIN then print "\nCONGRATULATIONS, YOU SAVED THE EARTH!"
731+
if END_REASON=END_FAIL then print "\nMISSION FAILED."
732+
print "\nGLONKINS LEFT: ";GLONKIN_COUNT
733+
print "DATE: ";DATE_CUR
734+
if END_REASON=END_WIN then
735+
EL=DATE_CUR-GAME_DATE : if EL<1 then EL=1
736+
print "SCORE: ";int(1000*(K7/EL)^2)
737+
end if
761738
if SPACESTATION_COUNT=0 then return ST_QUIT
762739
print "\nGAME OVER"
763740
A$=Ask$("\nPLAY AGAIN (YES/NO) : ", 3)
@@ -766,16 +743,6 @@ function AskPlayAgain()
766743
end function
767744

768745

769-
' ** ===== SHOW VICTORY ===== **
770-
function ShowVictory()
771-
Pause()
772-
print "\nCONGRATULATIONS, YOU SAVED THE EARTH!\nSCORE:";
773-
EL=DATE_CUR-GAME_DATE : if EL<1 then EL=1
774-
print int(1000*(K7/EL)^2)
775-
return ST_PLAYAGAIN
776-
end function
777-
778-
779746
' ** ===== SHORT RANGE SCAN & SUMMARY (SLS CHAINS INTO LRS) ===== **
780747
function ShortRangeScan()
781748
if ATAKFLAG=1 then
@@ -1043,48 +1010,22 @@ end function
10431010
' ** ===== COMPUTER STATUS REPORT ===== **
10441011
function ComputerStatusReport()
10451012

1046-
print " STATUS REPORT: \n"
1047-
1048-
if GLONKIN_COUNT>1 then
1049-
X$="S"
1050-
else
1051-
X$=""
1052-
end if
1053-
1054-
print "\n GLONKINS LEFT :";GLONKIN_COUNT
1055-
print " POWER :";int(SHIP_POWER+SHIELD_UNITS)
1056-
print " WARHEADES :";int(WARHEAD_COUNT)
1057-
print "\n MISSION DEADLINE: ";GAME_DATE+MISSION_DAYS-DATE_CUR
1058-
print " DAYS"
1013+
print " STATUS REPORT: \n"
1014+
print " ENEMIES LEFT : ";GLONKIN_COUNT
1015+
print " POWER : ";SHIP_POWER+SHIELD_UNITS
1016+
print " WARHEADS : ";WARHEAD_COUNT
1017+
print " DAYS LEFT : ";GAME_DATE+MISSION_DAYS-DATE_CUR
1018+
print " SPACESTATIONS: ";SPACESTATION_COUNT
10591019

1060-
' MULTIPLE SPACESTATIONS
1061-
if SPACESTATION_COUNT<2 then
1062-
X$=""
1063-
else
1064-
X$="S"
1065-
end if
1066-
1067-
' CHECK IF ANY SPACESTATIONS ARE LEFT
1068-
if SPACESTATION_COUNT<1 then
1069-
print "\n NO SPACESTATIONS"
1070-
print "LEFT!" : return Damage()
1071-
end if
1072-
1073-
print "\n EARTH HAS ";SPACESTATION_COUNT
1074-
print " SPACESTATION";X$;" NEARBY"; chr$(13)
10751020
return Damage()
10761021
end function
10771022

10781023

10791024
' ** ===== COMPUTER NAV CALC GLONKIN ===== **
10801025
function ComputerNavCalcGLONKIN()
10811026
if SECTOR_ENEMIES<=0 then NoEnemyMsGALAXY() : return ST_COMMAND
1082-
if SECTOR_ENEMIES>1 then
1083-
X$="S"
1084-
else
1085-
X$=""
1086-
end if
1087-
print "\nFROM STARSHIP TO ENEMY SHIP";X$
1027+
1028+
print "\nFROM STARSHIP TO ENEMY "
10881029
for I=1 to 3
10891030
if K(I,3)<=0 then continue for
10901031
ComputerCalcCompute(SECTOR_X, SECTOR_Y, K(I,1), K(I,2), 10)
@@ -1181,8 +1122,7 @@ end function
11811122

11821123
' ** ===== SHARED MESSAGE: NO ENEMY IN QUADRANT ===== **
11831124
function NoEnemyMsGALAXY()
1184-
print : background 6: color 1: print "ALERT:"
1185-
print " NO ENEMY SHIPS DETECTED";:background 0: print
1125+
print "ALERT: NO ENEMY SHIPS DETECTED"
11861126
return
11871127
end function
11881128

@@ -1251,10 +1191,9 @@ end function
12511191

12521192
' PRINT CAPTION$, READ UP TO MAX_LEN CHARS; RETURN TYPED LINE (LII$ ALSO SET)
12531193
function Ask$(CAPTION$, MAX_LEN)
1254-
LX=MAX_LEN
12551194
print CAPTION$;
1256-
GetInput()
1257-
return LII$
1195+
input LII$
1196+
return UCASE$(left$(LII$, MAX_LEN))
12581197
end function
12591198

12601199
function AskNumber(CAPTION$, MAX_LEN)
@@ -1263,43 +1202,16 @@ function AskNumber(CAPTION$, MAX_LEN)
12631202
end function
12641203

12651204

1266-
' ** GET INPUT **
1267-
' GET CHARACTERS UNTIL RETURN IS PRESSED
1268-
function GetInput()
1269-
' ** LX = MAX INPUT LII$ = OUTPUT STRING **
1270-
' ** ACCEPTS A-Z/0-9/PUNCT + SPACE, CHR$(20)=BACKSPACE, ENTER ENDS **
1271-
LII$=""
1272-
do
1273-
get Y$
1274-
Y$=ucase$(Y$)
1275-
if Y$="" then continue do
1276-
if asc(Y$)=0 then Y$=chr$(13)
1277-
1278-
if asc(Y$)=13 and LX=0 then
1279-
print " "
1280-
print FCOL$
1281-
return
1282-
end if
1283-
if asc(Y$)=13 then print : print FCOL$ : return
1284-
1285-
if asc(Y$)=20 and len(LII$)<1 then continue do
1286-
if Y$=chr$(20) then Y$="" : LII$=left$(LII$,(len(LII$)-1))
1287-
1288-
if asc(Y$)<>32 and (asc(Y$)<46 or asc(Y$)>90) then continue do
1289-
1290-
if len(LII$)<LX then print Y$;
1291-
if len(LII$)<LX then LII$=LII$+Y$
1292-
loop
1293-
end function
1294-
12951205
' ** PAUSE WITHOUT CR**
12961206
function Pause()
1297-
if CRPLANETT=1 then CR$="PRESS RETURN TO BEGIN"
1298-
if CRPLANETT=0 then CR$="PRESS RETURN TO CONTINUE"
1299-
LX=0 : print " ":print CR$:print " "
1300-
GetInput()
1301-
CRPLANETT=0
1302-
return
1207+
1208+
PRINT "\nPRESS A KEY TO CONTINUE"
1209+
Y$=""
1210+
while Y$=""
1211+
get Y$
1212+
wend
1213+
1214+
return
13031215
end function
13041216

13051217
' ** KEY TO SRS ICONS **

tmp_chr_test.bas

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)