Nice additions, James! Your posted code won't run as is, the forum messes up the encoded file data in the BIGFONT SUB unless you post the scource in the old CODE tag. I replaced the SUB with a fresh version and it ran OK.
I tweaked yours a little bit to fix a menu issue. The armory menu choices were not all being polled so I raised the k% value to catch those extra items. I also compacted the Player Stats display so it won't scroll off the screen. I commented out the teal color when enetering the woods, my laptop display isn't the best and I couldn't read the screen as well in that color here.
- Dav
I tweaked yours a little bit to fix a menu issue. The armory menu choices were not all being polled so I raised the k% value to catch those extra items. I also compacted the Player Stats display so it won't scroll off the screen. I commented out the teal color when enetering the woods, my laptop display isn't the best and I couldn't read the screen as well in that color here.
- Dav
Code: (Select All)
'=====================
'Further adventures in THEWOODS-MODIFIED.BAS
'=====================
'A modified version of THEWOODS.BAS by Kurt Kuzba that he
'placed in public domain and encouraged others to build on.
'It's a text adventure game in the classic BBS game style.
'Kurt posted it on the FibdoNet QUIK_BAS Echo back in 1997.
'You can find the original THEWOODS.BAS in the ABC packets.
'Kurt, thanks for the game - If you're still out there,
'Come back to the BASIC scene! You'll love QB64!
'Modified by Dav for QB64-PE 3.8, SEP/2023
'further modifeid by James Jarvis SEP/2023 - added more equipment options and more monsters
'Dav modified James version above to select all menu choices in armory (IF k%...), and...
' re-organized player STATS a little so they show without scrolling off screen. 9/20/2023
DIM SHARED q$: q$ = CHR$(34)
DIM SHARED PlayerName$, PlayerHits&, PlayerMagic&, PlayerStrength&
DIM SHARED PlayerGold&, PlayerWeapon%, PlayerExperience&, PlayerShield%, PlayerArmor%
DIM SHARED EnemyName$, EnemyHits&, EnemyMagic&, EnemyStrength&
DIM SHARED EnemyGold&, EnemyWeapon%, EnemyExperience&
DIM SHARED sprice%(16), aprice%(16), wprice%(16)
RANDOMIZE TIMER
dh = INT(_DESKTOPHEIGHT * .80)
SCREEN _NEWIMAGE(dh * 1.25, dh, 32)
BIGFONT INT(_HEIGHT / 21)
WIDTH 52, 21
FOR n = 1 TO 12
wprice%(n) = (n + (n - 2) / 2) * 60
sprice%(n) = n * 50
aprice%(n) = n * n * 50
IF n > 9 THEN
wprice%(n) = wprice%(n) * (n / 3)
sprice%(n) = sprice%(n) * 2
aprice%(n) = aprice%(n) * 3
END IF
NEXT n
'======
Restart:
'======
CLS , _RGB(32, 32, 128) 'background color
COLOR _RGB(255, 255, 255), _RGB(32, 32, 128) 'Standard Text color
COLOR _RGB(255, 255, 0)
PRINT
PRINT " -= Welcome to THE WOODS =-"
PRINT
COLOR _RGB(255, 255, 255)
PRINT " Terrible beasts are roaming the nearby woods."
PRINT " People in town live in constant fear of what "
PRINT " lurks beyond the town gate. Those who decide"
PRINT " to venture out seldom return. Something must"
PRINT " be done. Someone must save the town."
PRINT
PRINT " You have decided to be the brave hero and to"
PRINT " eliminate the evil inhabiting the woods. It"
PRINT " will NOT be easy however. You will face many"
PRINT " malevolent forces, many dark and evil beasts."
PRINT
PRINT " Go into the woods, hunt down the beasts until"
PRINT " you reach 2,000 experience points to win."
PRINT
COLOR _RGB(255, 255, 0)
PRINT " Load a Saved quest? (YN)? ";
IF WaitKey%(" YN") = 2 THEN
PRINT
INPUT " Your name? ", plyr$
loadgame plyr$
ELSE
PRINT
INPUT " Your name? ", plyr$
IF plyr$ > "" THEN
PlayerName$ = plyr$
PlayerHits& = 30
PlayerMagic& = 0
PlayerStrength& = 0
PlayerGold& = 100
PlayerWeapon% = 0
PlayerExperience& = 0
END IF
END IF
menu% = 1 'show full menu
YourStats 'Show you stats at the beginning of the game
'the main game play loop
DO
_LIMIT 60
IF PlayerHits& > 0 THEN
PRINT
IF menu% > 0 THEN
COLOR _RGB(255, 255, 255)
PRINT " You're in the middle of town. What now?"
PRINT
PRINT " (W)oods - Enter the woods."
PRINT " (H)ealer - Heal your wounds."
PRINT " (A)rmory - Buy/Sell equipment."
PRINT " (S)tats - See your stats."
PRINT " (Q)uit - Quit game."
END IF
PRINT
PRINT " [W/H/A/S/Q/?]";
SELECT CASE WaitKey%(" WHASQ?")
CASE 2: Woods
CASE 3: Healer
CASE 4: Armory
CASE 5: YourStats
CASE 6: PRINT: PRINT
PRINT " Quit this quest? (YN)? ";
IF WaitKey%(" YN") = 2 THEN
PRINT
PRINT " Save The Game? (YN)? ";
IF WaitKey%(" YN") = 2 THEN
savegame
END IF
EXIT DO
END IF
CASE 7: PRINT: menu% = 1
END SELECT
ELSE
COLOR _RGB(255, 200, 200)
IF PlayerExperience& < 2000 THEN
PRINT
PRINT " Sorry... You have perished in battle."
FOR t% = 200 TO 150 STEP -1: SOUND t%, .1: NEXT
ELSE
PRINT
PRINT " You have defeated all enemies! You WIN!!"
FOR t% = 100 TO 999 STEP 10: SOUND t%, .03: NEXT
FOR t% = 1000 TO 500 STEP -10: SOUND t%, .03: NEXT
END IF
PRINT " You had"; PlayerExperience&; "points."
EXIT DO
END IF
LOOP
COLOR _RGB(255, 255, 0)
PRINT: PRINT " Would you like to play again (YN)? ";
IF WaitKey%(" YN") = 2 THEN GOTO Restart
PRINT: PRINT " Goodbye, then..."
SLEEP 2
SYSTEM
SUB Armory
DIM price(1 TO 8) AS INTEGER
price(1) = 75
price(2) = 200
price(3) = 400
price(4) = 600
price(5) = 900
price(6) = 1500
price(7) = 2500
price(8) = 4000
DO
CLS
PRINT
PRINT "---------------------------------------------------"
PRINT " -==**[ Jake's Weapon Shop ]**==- "
PRINT "---------------------------------------------------"
PRINT
PRINT " Welcome to Jake's. We only sell the finest."
PRINT " Jake looks you over suspiciously and asks..."
PRINT " Interested in (W)eapons, (S)hields, or (A)rmor?"
PRINT
PRINT " [W/S/A or ENTER to leave] "
PRINT
SELECT CASE WaitKey%(" WSA" + CHR$(13))
CASE 2 'weapons
PRINT
PRINT "Ah yes, Weapons..."
PRINT " "
PRINT " Do you want to (B)uy or (S)ell?"
PRINT
PRINT " [B/S or ENTER to leave] "
PRINT
SELECT CASE WaitKey%(" SB" + CHR$(13))
CASE 2 'selling weapons
money% = PlayerWeapon% * 30
IF money% = 0 THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Sell what? You're not carrying anything!"
PRINT " Come back when you have something valuable."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
EXIT SUB
ELSE
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Hmm...I'll give you"; money%; "gold for ";
PRINT RTRIM$(Weapon$(PlayerWeapon%)); "."
PRINT " Is it a deal (Y/N)? ";
PRINT "---------------------------------------------------"
PRINT
COLOR _RGB(255, 255, 255)
k% = WaitKey%(" YN")
PRINT
IF k% = 2 THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Great! Here's your money. Now go away."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
PlayerGold& = PlayerGold& + money%
PlayerWeapon% = 0
EXIT SUB
END IF
END IF
CASE 3 'buying weapons
PRINT "--------------==**[ PRICES ]**==-----------------"
PRINT
FOR t% = 1 TO 12: PRINT HEX$(t%); "->";
PRINT " "; LEFT$(STR$(wprice%(t%)) + " ", 6);
PRINT " "; Weapon$(t%)
NEXT
PRINT
PRINT " You have"; PlayerGold&; "gold. Which one you want (1-C)?"
PRINT " (Hit ENTER to buy nothing)"
k% = WaitKey%(" 123456789AB" + CHR$(13))
k% = k% - 1
IF k% < 14 THEN
money% = wprice%(k%)
IF money% > PlayerGold& THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " You can't afford "; RTRIM$(Weapon$(k%)); "."
PRINT " Come back when you have more gold."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
EXIT SUB
ELSE
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Sold! Good luck with "; RTRIM$(Weapon$(k%)); "."
PRINT " Close the door on your way out."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
PlayerGold& = PlayerGold& - money%
PlayerWeapon% = k%
EXIT SUB
END IF
END IF
CASE 4, 5:
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Ok, maybe next time, says Jake with a grumble."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
EXIT SUB
END SELECT
CASE 3 'shields
PRINT
PRINT "Ah yes, Shields..."
PRINT " "
PRINT " Do you want to (B)uy or (S)ell?"
PRINT
PRINT " [B/S or ENTER to leave] "
PRINT
SELECT CASE WaitKey%(" SB" + CHR$(13))
CASE 2 'selling shields
money% = PlayerShield% * 30
IF money% = 0 THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Sell what? You're not carrying anything!"
PRINT " Come back when you have something valuable."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
EXIT SUB
ELSE
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Hmm...I'll give you"; money%; "gold for ";
PRINT RTRIM$(Shield$(PlayerShield%)); "."
PRINT " Is it a deal (Y/N)? ";
PRINT "---------------------------------------------------"
PRINT
COLOR _RGB(255, 255, 255)
k% = WaitKey%(" YN")
PRINT
IF k% = 2 THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Great! Here's your money."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
PlayerGold& = PlayerGold& + money%
PlayerShield% = 0
EXIT SUB
END IF
END IF
CASE 3 'buying shield
PRINT "--------------==**[ PRICES ]**==-----------------"
PRINT
FOR t% = 1 TO 12: PRINT HEX$(t%); "->";
PRINT " "; LEFT$(STR$(sprice%(t%)) + " ", 6);
PRINT " "; Shield$(t%)
NEXT
PRINT
PRINT " You have"; PlayerGold&; "gold. Which one you want (1-C)?"
PRINT " (Hit ENTER to buy nothing)"
k% = WaitKey%(" 123456789ABC" + CHR$(13))
k% = k% - 1
IF k% < 13 THEN
money% = sprice%(k%)
IF money% > PlayerGold& THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " You can't afford "; RTRIM$(Shield$(k%)); "."
PRINT " Come back when you have more gold."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
EXIT SUB
ELSE
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Sold! Bear that "; RTRIM$(Shield$(k%)); " well."
PRINT " Close the door on your way out."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
PlayerGold& = PlayerGold& - money%
PlayerShield% = k%
EXIT SUB
END IF
END IF
CASE 4, 5:
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Ok, maybe next time, says Jake with a grumble."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
EXIT SUB
END SELECT
CASE 4 'armor
PRINT
PRINT "Ah yes, Armor..."
PRINT " "
PRINT " Do you want to (B)uy or (S)ell?"
PRINT
PRINT " [B/S or ENTER to leave] "
PRINT
SELECT CASE WaitKey%(" SB" + CHR$(13))
CASE 2 'selling armor
money% = PlayerArmor% * 30
IF money% = 0 THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Sell what? You're not carrying anything!"
PRINT " Come back when you have something valuable."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
EXIT SUB
ELSE
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Hmm...I'll give you"; money%; "gold for ";
PRINT RTRIM$(Armor$(PlayerArmor%)); "."
PRINT " Is it a deal (Y/N)? ";
PRINT "---------------------------------------------------"
PRINT
COLOR _RGB(255, 255, 255)
k% = WaitKey%(" YN")
PRINT
IF k% = 2 THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Great! Here's your money."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
PlayerGold& = PlayerGold& + money%
PlayerArmor% = 0
EXIT SUB
END IF
END IF
CASE 3 'buying armor
PRINT "--------------==**[ PRICES ]**==-----------------"
PRINT
FOR t% = 1 TO 12: PRINT HEX$(t%); "->";
PRINT " "; LEFT$(STR$(aprice%(t%)) + " ", 6);
PRINT " "; Armor$(t%)
NEXT
PRINT
PRINT " You have"; PlayerGold&; "gold. Which one you want (1-C)?"
PRINT " (Hit ENTER to buy nothing)"
k% = WaitKey%(" 123456789ABC" + CHR$(13))
k% = k% - 1
IF k% < 15 THEN
money% = aprice%(k%)
IF money% > PlayerGold& THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " You can't afford "; RTRIM$(Armor$(k%)); "."
PRINT " Come back when you have more gold."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
EXIT SUB
ELSE
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Sold! Wear that "; RTRIM$(Armor$(k%)); " well."
PRINT " Close the door on your way out."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
PlayerGold& = PlayerGold& - money%
PlayerArmor% = k%
EXIT SUB
END IF
END IF
CASE 4, 5:
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " Ok, maybe next time, says Jake with a grumble."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
EXIT SUB
END SELECT
CASE ELSE
EXIT SUB
END SELECT
LOOP: END SUB
SUB FightMonster
level% = GetLevel%(PlayerExperience&)
MakeEnemy level%
EnemyName$ = RTRIM$(EnemyName$)
COLOR _RGB(255, 255, 0), _RGB32(200, 0, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " You came upon a "; RTRIM$(EnemyName$); "!"
PRINT "---------------------------------------------------"
menu% = 1
WHILE (PlayerHits& > 0) AND (EnemyHits& > 0)
IF menu% > 0 THEN
PRINT
PRINT " (F)ight! (D)efend! "
PRINT " (R)un Away (Y)our Stats "
PRINT " (S)urrender (V)iew Enemy "
END IF
PRINT
COLOR _RGB(255, 200, 200)
PRINT PlayerHits&;
PRINT PlayerName$
PRINT EnemyHits&;
PRINT EnemyName$
PRINT
COLOR _RGB(255, 255, 255)
PRINT " [F/D/R/S/Y/V/?] "
level% = GetLevel%(PlayerExperience&)
k% = WaitKey%(" FRSYV?D")
SELECT CASE k%
CASE 2, 8
PlayerAtt! = 1 + PlayerWeapon%
PlayerAtt! = PlayerAtt! * (1 + (PlayerStrength& / 10))
PlayerAtt! = 5 + (RND * PlayerAtt! * 5 * level%)
PlayerDef! = 1 + (PlayerStrength& / 100) + INT(RND * (PlayerShield% / 2)) + PlayerArmor%
IF k% = 8 AND PlayerShield% > 0 THEN
IF PlayerStrength& > PlayerShield% THEN
PlayerDef! = PlayerDef! + 2 * INT(RND * PlayerShield%)
ELSE
PlayerDef! = PlayerDef! + INT(RND * (PlayerShield% / 2))
END IF
PlayerAtt! = PlayerAtt! \ 2
END IF
EnemyAtt! = EnemyWeapon% * (1 + RND * (EnemyStrength& / 5))
EnemyDef! = 1 + (EnemyStrength& / 100)
IF (RND * 30) - 6 > PlayerArmor% + PlayerShield% THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " You move fast and hit first."
hits% = PlayerAtt! / EnemyDef!
IF hits% > EnemyHits& THEN hits% = EnemyHits&
EnemyHits& = EnemyHits& - hits%
PRINT " You hit for"; hits%; "points."
PlayerExperience& = PlayerExperience& + hits%
IF EnemyHits& > 0 THEN
hits% = EnemyAtt! / PlayerDef!
IF hits% > PlayerHits& THEN hits% = PlayerHits&
PlayerHits& = PlayerHits& - hits%
PRINT " You are hit for"; hits%; "points."
END IF
PRINT "---------------------------------------------------"
ELSE
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " You move slow and get hit first."
hits% = EnemyAtt! / PlayerDef!
IF hits% > PlayerHits& THEN hits% = PlayerHits&
PlayerHits& = PlayerHits& - hits%
PRINT " You are hit for"; hits%; "points."
IF PlayerHits& > 0 THEN
hits% = PlayerAtt! / EnemyDef!
IF hits% > EnemyHits& THEN hits% = EnemyHits&
EnemyHits& = EnemyHits& - hits%
PlayerExperience& = PlayerExperience& + hits%
PRINT " You hit for"; hits%; "points."
END IF
PRINT "---------------------------------------------------"
IF INSTR(EnemyName$, "Witch") > 0 AND RND * 10 < 2 THEN
PRINT " The Witch has used Her Evil Eye!"
PRINT " Your Magic is Weakened!"
PRINT "---------------------------------------------------"
PlayerMagic& = INT(PlayerMagic& / 2)
END IF
IF INSTR(EnemyName$, "Wizard") > 0 AND RND * 10 < 2 THEN
PRINT " The Wizard has used Hexed you!"
PRINT " Your Strength is Weakened!"
PRINT "---------------------------------------------------"
PlayerStrength& = INT(PlayerStrength& / 2)
END IF
IF INSTR(EnemyName$, "Druid") > 0 AND RND * 10 < 2 THEN
PRINT " The Druid has Cursed you!"
PRINT " Your Magic and Strength is Weakened!"
PRINT "---------------------------------------------------"
PlayerStrength& = INT(PlayerStrength& * .75)
PlayerMagic& = INT(PlayerMagic& * .75)
END IF
END IF
IF k% = 8 AND PlayerShield% > 0 AND RND * 20 < 2 THEN 'check for broken shield
IF INT(RND * 27) > PlayerShield% THEN
PRINT
PRINT ">>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<"
PRINT " Your "; Shield$(PlayerShield%); " has BROKEN !!"
PRINT ">>>>>>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<"
PlayerShield% = 0
END IF
END IF
IF EnemyHits& = 0 THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " You have defeated the "; RTRIM$(EnemyName$)
PRINT "---------------------------------------------------"
PlayerMagic& = PlayerMagic& + EnemyMagic& \ 10
PlayerGold& = PlayerGold& + EnemyGold&
menu% = 1
END IF
IF PlayerHits& = 0 THEN
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " You were defeated by "; RTRIM$(EnemyName$)
PRINT "---------------------------------------------------"
END IF
CASE 3
COLOR _RGB(255, 255, 0)
IF INT(RND * 12) > PlayerArmor% THEN 'yup less armor imporves chance to escape
PRINT
PRINT "---------------------------------------------------"
PRINT " You manage to escape, but it has tired you"
PRINT " and magic is weakened, and some experience points."
PRINT "---------------------------------------------------"
'modified the dedcution for running away to be variable with armor and shield weighing player down
PlayerMagic& = INT(PlayerMagic& / INT(2 + RND * 8))
PlayerStrength& = PlayerStrength& - INT((2 + RND * PlayerArmor%) + INT(RND * PlayerShield%))
IF PlayerStrength& < 0 THEN PlayerStrength& = 0
PlayerExperience& = PlayerExperience& * .9
menu% = 1
EXIT SUB
ELSE
PRINT
PRINT "!!! ------------------------------------------- !!!"
PRINT " You have FAILED TO ESCAPE !"
PRINT "!!! ------------------------------------------- !!!"
PlayerMagic& = INT(PlayerMagic& / INT(2 + RND * 8))
PlayerStrength& = PlayerStrength& - (PlayerArmor% + PlayerShield%)
IF PlayerStrength& < 0 THEN PlayerStrength& = 0
END IF
COLOR _RGB(255, 255, 255)
CASE 4
COLOR _RGB(255, 255, 0)
PRINT
PRINT "---------------------------------------------------"
PRINT " You give all your gold to "; RTRIM$(EnemyName$);
PRINT " Being broke is better than dying I suppose..."
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
menu% = 1
PlayerGold& = 0: EXIT SUB
CASE 5: YourStats
CASE 6: EnemyStats
CASE 7: menu% = 1
END SELECT
WEND
END SUB
FUNCTION GetLevel% (e&)
SELECT CASE e&
CASE IS < 100: level% = 1
CASE 101 TO 500: level% = 2
CASE ELSE: level% = 3
END SELECT
GetLevel% = level%
END FUNCTION
SUB Healer
Totalhits% = PlayerExperience& \ 10 + 30
ToHeal% = Totalhits% - PlayerHits&
CLS
COLOR _RGB(255, 200, 200)
PRINT
PRINT "---------==**[ HARRY THE HEALER ]**==------------"
PRINT
PRINT " Welcome friend. Let me heal your wounds and soul."
IF ToHeal% <= 0 THEN
PRINT
PRINT " Harry looks you over completely and says,"
PRINT " You don't require healing, friend. Goodbye..."
ELSE
PRINT
PRINT " Each hit point costs 3 gold to heal."
PRINT " You can afford to heal"; PlayerGold& \ 3; "hit points."
PRINT " To max out, You need to heal"; RTRIM$(STR$(ToHeal%)); "."
PRINT
INPUT " How many would you heal? (ENTER for max) ", heal%
IF heal% = 0 THEN heal% = ToHeal%
IF heal% > ToHeal% THEN heal% = ToHeal%
IF heal% > (PlayerGold& \ 3) THEN heal% = PlayerGold& \ 3
PlayerHits& = PlayerHits& + heal%
PlayerGold& = PlayerGold& - (heal% * 3)
PRINT
PRINT " I have healed you for"; heal%; "hit points."
PRINT " Go in peace my son..."
PRINT
END IF
PRINT "---------------------------------------------------"
COLOR _RGB(200, 200, 255)
END SUB
SUB MakeEnemy (l%)
REDIM EN(1 TO 5) AS STRING
REDIM EP(1 TO 5) AS STRING
EP(1) = "Angry "
EP(2) = "Ferocious "
EP(3) = "Snarling "
EP(4) = "Hostile "
EP(5) = "Wicked "
SELECT CASE l%
CASE 1
EN(1) = "Squirrel"
EN(2) = "Bunny"
EN(3) = "Hedgehog"
EN(4) = "Gremkin"
EN(5) = "Spider"
CASE 2
EN(1) = "Bear"
EN(2) = "Boar"
EN(3) = "Boggart"
EN(4) = "Troll"
EN(5) = "GreenMan"
CASE 3
EN(1) = "Demon"
EN(2) = "Dragon"
EN(3) = "Witch"
EN(4) = "Druid"
EN(5) = "Wizard"
END SELECT
ecl% = INT(1 + RND * (l% + 2))
EnemyName$ = EP(INT(1 + RND * ecl%)) + EN(INT(1 + RND * 5))
EnemyHits& = ((l% * 3 + RND * 12) * (1 + RND * ecl%))
EnemyMagic& = ((RND * 10 + 10) * l%)
EnemyStrength& = ((RND * 10 + 10) * l%)
EnemyGold& = ((RND * 100 + 100) * (.5 + RND * ecl%))
EnemyWeapon% = (RND * 2 + RND * (ecl% * 2))
EnemyExperience& = ((RND * 10 + 10) * ecl%)
END SUB
SUB YourStats ()
CLS ', _RGB(32, 32, 128) 'background color
COLOR _RGB(255, 255, 0)
PRINT "------------==**[ YOUR STATS ]**==---------------"
PRINT " Name : "; PlayerName$
PRINT " Hits :"; PlayerHits&;
LOCATE , 33: PRINT " Magic :"; PlayerMagic&
PRINT " Strength :"; PlayerStrength&;
LOCATE , 33: PRINT " Gold :"; PlayerGold&
PRINT " Weapon : "; Weapon$(PlayerWeapon%)
PRINT " Shield : "; Shield$(PlayerShield%)
PRINT " Armor : "; Armor$(PlayerArmor%)
PRINT " Experience :"; PlayerExperience&
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
END SUB
SUB EnemyStats ()
CLS ', _RGB(32, 32, 128) 'background color
COLOR _RGB(255, 255, 0)
PRINT "------------==**[ ENEMY STATS ]**==--------------"
PRINT " Name : "; EnemyName$
PRINT " Hits :"; EnemyHits&
PRINT " Magic :"; EnemyMagic&
PRINT " Strength :"; EnemyStrength&
PRINT " Gold :"; EnemyGold&
PRINT " Weapon : "; Weapon$(EnemyWeapon%)
PRINT " Experience :"; EnemyExperience&
PRINT "---------------------------------------------------"
COLOR _RGB(255, 255, 255)
END SUB
SUB UseMagic
PRINT
PRINT
DO
COLOR _RGB(255, 255, 100)
PRINT
PRINT "------------==**[ CAST A SPELL ]**==-------------"
PRINT
PRINT " (H)ealing Spell (requires 4 magic points)"
PRINT " (S)trength Spell (requires 9 magic points)"
PRINT " (Q)uit this menu"
PRINT
PRINT " You have"; PlayerMagic&; "magic points."
PRINT "---------------------------------------------------"
PRINT
PRINT " [H/S/Q]"
k% = WaitKey%(" HSQ" + CHR$(13))
PRINT
SELECT CASE k%
CASE 2
IF PlayerMagic& < 4 THEN
PRINT "---------------------------------------------------"
PRINT " You don't have enough magic points for that!"
PRINT "---------------------------------------------------"
ELSE
m% = 1 + RND * 9
PlayerMagic& = PlayerMagic& - 4
PlayerHits& = PlayerHits& + m%
PRINT "---------------------------------------------------"
PRINT " Your spell yields"; m%; "hits."
PRINT "---------------------------------------------------"
END IF
CASE 3
IF PlayerMagic& < 9 THEN
PRINT "---------------------------------------------------"
PRINT " You don't have enough magic points for that!"
PRINT "---------------------------------------------------"
ELSE
m% = 1 + RND * 9
PlayerMagic& = PlayerMagic& - 9
PlayerStrength& = PlayerStrength& + m%
PRINT "---------------------------------------------------"
PRINT " Your spell yields"; m%; "strength."
PRINT "---------------------------------------------------"
END IF
CASE 4, 5: COLOR _RGB(255, 255, 255): EXIT SUB
END SELECT
LOOP
END SUB
SUB WalkInWoods
COLOR _RGB(255, 255, 255) ', _RGB(0, 200, 200)
SELECT CASE (RND * 99)
CASE 0 TO 9
rndgold = INT(RND * 15) + 2
PlayerGold& = PlayerGold& + rndgold
COLOR _RGB(255, 255, 0), _RGB(0, 200, 200)
PRINT: PRINT " Lucky you! You found"; rndgold; "pieces of gold!"
COLOR _RGB(255, 255, 255), _RGB(0, 200, 200)
CASE 10 TO 19
PlayerMagic& = PlayerMagic& + 1
COLOR _RGB(100, 255, 100), _RGB(0, 200, 200)
PRINT: PRINT " A nice faerie gives you one magic point!"
COLOR _RGB(255, 255, 255), _RGB(0, 200, 200)
CASE 20 TO 29: m% = 1 + RND * 9
PlayerHits& = PlayerHits& + m%
COLOR _RGB(100, 200, 255), _RGB(0, 200, 200)
PRINT: PRINT " A friendly Elf heals you"; m%; "hit point";
IF m% = 1 THEN PRINT "!": ELSE PRINT "s!"
COLOR _RGB(255, 255, 255), _RGB(0, 200, 200)
CASE 30 TO 89
PRINT: PRINT " The path continues before you. Now what?"
CASE ELSE: FightMonster
END SELECT
END SUB
FUNCTION Weapon$ (w%)
SELECT CASE w%
CASE 0: Weapon$ = "Your Bare Hands"
CASE 1: Weapon$ = "A Cudgel"
CASE 2: Weapon$ = "A Quarterstaff"
CASE 3: Weapon$ = "A Small Knife"
CASE 4: Weapon$ = "A Big Knife"
CASE 5: Weapon$ = "A Machete"
CASE 6: Weapon$ = "A Shortsword"
CASE 7: Weapon$ = "A Rapier"
CASE 8: Weapon$ = "A Messer"
CASE 8: Weapon$ = "A Longsword"
CASE 9: Weapon$ = "A Flammard"
CASE 10: Weapon$ = "A Grand-Messer"
CASE 11: Weapon$ = "A SwordAxe"
CASE 12: Weapon$ = "A GreatSword"
END SELECT
END FUNCTION
FUNCTION Shield$ (w%)
SELECT CASE w%
CASE 0: Shield$ = "Dumb Luck"
CASE 1: Shield$ = "Wicker Buckler"
CASE 2: Shield$ = "Wooden Buckler"
CASE 3: Shield$ = "Wicker Tower Shield"
CASE 4: Shield$ = "Brass Buckler"
CASE 5: Shield$ = "Wooden Heater"
CASE 6: Shield$ = "Wooden Round Shield"
CASE 7: Shield$ = "Brass Heater"
CASE 8: Shield$ = "Wooden Round Shield"
CASE 9: Shield$ = "Wooden Tower Shield"
CASE 10: Shield$ = "Brass Round Shield"
CASE 11: Shield$ = "Wooden Kite Shield"
CASE 12: Shield$ = "Brass Kite Shield"
END SELECT
END FUNCTION
FUNCTION Armor$ (w%)
SELECT CASE w%
CASE 0: Armor$ = "Your Bare Skin"
CASE 1: Armor$ = "Leather Jerkin"
CASE 2: Armor$ = "Padded Aketon"
CASE 3: Armor$ = "Studded Leather Cotte"
CASE 4: Armor$ = "Brass Scale Hauberk"
CASE 5: Armor$ = "Iron Chain Mail"
CASE 6: Armor$ = "Double Mail"
CASE 7: Armor$ = "Plate & Mail"
CASE 8: Armor$ = "Full Plate"
CASE 9: Armor$ = "Elfin Mail"
CASE 10: Armor$ = "Rune-Scrawled Plate"
CASE 11: Armor$ = "Dwarven War Harness"
CASE 12: Armor$ = "Golem Plate"
END SELECT
END FUNCTION
SUB Woods
menu% = 1
DO
level% = GetLevel%(PlayerExperience&)
IF PlayerExperience& > 2000 THEN PlayerHits& = 0
PRINT
IF PlayerHits& = 0 THEN EXIT SUB
IF menu% <> 0 THEN
COLOR _RGB(255, 255, 255) ', _RGB(0, 200, 200)
PRINT
PRINT " You're in the woods, alone. Now what?"
PRINT
PRINT " (C)ontinue .....Walk the path."
PRINT " (T)own .........Go Back to town."
PRINT " (S)pell.........Cast a Spell."
PRINT " (Y)our Stats....Show your stats."
PRINT
END IF
menu% = 0
PRINT " [C/S/T/Y/?] "
k% = WaitKey%(" CTSY?")
SELECT CASE k%
CASE 2 'Pressed Continue walking...
SELECT CASE (RND * 99)
CASE 0 TO 9 'found gold
rndgold = INT(RND * 15) + 2
PlayerGold& = PlayerGold& + rndgold
COLOR _RGB(255, 255, 0), _RGB(200, 200, 100)
PRINT: PRINT " Lucky you! You found"; rndgold; "pieces of gold!"
COLOR _RGB(255, 255, 255), _RGB(200, 200, 100)
CASE 10 TO 19 'faerie magic
PlayerMagic& = PlayerMagic& + 1
COLOR _RGB(100, 255, 100), _RGB(200, 200, 100)
PRINT: PRINT " A nice faerie gives you one magic point!"
COLOR _RGB(255, 255, 255), _RGB(200, 200, 100)
CASE 20 TO 29 'elf heals you
m% = 1 + RND * 9
PlayerHits& = PlayerHits& + m%
COLOR _RGB(100, 200, 255), _RGB(200, 200, 100)
PRINT: PRINT " A friendly Elf heals you"; m%; "hit point";
IF m% = 1 THEN PRINT "!": ELSE PRINT "s!"
COLOR _RGB(255, 255, 255), _RGB(200, 200, 100)
CASE 30 TO 89 'nothing, you just continue
PRINT: PRINT " The path continues before you. Now what?"
CASE ELSE 'Monster fight!
FightMonster: menu% = 1
END SELECT
CASE 3: EXIT SUB 'back to town
CASE 4: UseMagic: menu% = 1 'you use your magic
CASE 5: YourStats 'show your stats
CASE 6: menu% = 1 'Pressed ? for help
END SELECT
LOOP
END SUB
FUNCTION WaitKey% (keys$)
DO
_LIMIT 60
k% = INSTR(keys$, UCASE$(INKEY$))
LOOP WHILE k% < 2
WaitKey% = k%
END FUNCTION
SUB BIGFONT (size)
'loads a custom size CP437 font (like QB64's built-in one)'
'You can make/use any size now.
A$ = ""
A$ = A$ + "haIgm]0MLEMMXkS^ST\\T]lHiaboe<Nl8c71HYa3f0VPiWa9H07n5a_0bn:K"
A$ = A$ + ";#FB8;c773hBD8T42E_#C:=QBC39PSQB=DB2UhdhVBB^9=_D2EQ#Ala?JFmi"
A$ = A$ + "ejeGKNiYTV4\UNkOWcmL791Y0Iefg<NdmNWiLfWmIoO_?WkeP10H6`NP0HS["
A$ = A$ + "KMGj5l9Nf7lH0HC;3of5MAGb9ef>>V6V60Vfa[_^=_m>j[Y]NOC7PDY`?kKc"
A$ = A$ + "gd0IQB1o20VfnaO?eFkH7m=nh8TP=]8ljY]e^_e]DhRj<;0CoG1`5>lfj\S`"
A$ = A$ + "IOn5Z6o]G6oLbK3oRZONcW6QoL`[Gfffn0gBQ5]P_=NmC3#5__^kMcMlg=[o"
A$ = A$ + "a=RPjY`[?W]ga]dWICVEPonZafW]W>fNWObWOGk3P[h7POg7[_Nga07oM<8f"
A$ = A$ + "f[2agZnF0=g`?kjkmmOT[]nel;PVZJ]hg0?OKcLadaGiKoLOB06[_P\Y8lOJ"
A$ = A$ + "#5Pl2kCZm?FO04TU^4o[1Bn:5m=VLhOH8jj9mj4UF4Te<4D9R7[U6eP\fS#H"
A$ = A$ + "5]c]X6G?2l1mUORGl9Rl3CcgPP3Yf?27leNXQi017VViP9PXlI5<D`Bg[8lC"
A$ = A$ + "8OFXkk2MW7jMNL?lKIT21l_VF:3>F2D;LOV8TRaP9n:<aIA^f=aF7iJaK2<#"
A$ = A$ + "L8<Ak3Q9<_mJcKe[TDPTc\936fA:ngRlXaf?Q:5<^GQ:NaoU>Jo437Vj6iV1"
A$ = A$ + "CjiCm;DJYL^oDO^mEPnIARTN`G4_b`GW:h^aS?8:nE5\4h>P72nB`S0?6lT`"
A$ = A$ + "G3n6`g4n^`g3nA`;PJd_>l_2S2oK`APa=OZPk;hn3NXP7>h;7l41OUP36l\1"
A$ = A$ + "OW\;=kJbN7IOTLOjLkMY;HY=]dSMY[OYM\d>cGAnIU?G1X#55Z[`\:<W2c[`"
A$ = A$ + "R:\\2]DHU5FCQ^;\W23Fh^;L?5^_2On2?FQW\`cDh05Nf2o]5n7JN==_fV?["
A$ = A$ + "V_^VgLcKYiK0]l#_nl<n]?Ho`G1N64oNF7nmJ`?5no0oBhG?1lkY#lk_a3o6"
A$ = A$ + "2a_i_dUXhG8SOIW2lKS>lKXb`_G\iCeQOMfleChgho?6o#SoJSo:SoBSoRSo"
A$ = A$ + "2SoS7o7=nc=ngKl_mh7LloZao6SOPaojSo<SodSglAKnX;mXckXcmXciXchX"
A$ = A$ + "eNDcA6o8SMX7j#Ol3]n3Uke>UGKi_jGkEOZGmAOe?i[^cGM7_b?iEnn_bGOT"
A$ = A$ + "GITGNTonAN^An_?bgOT_k87LTobANbANdA^oAn8SLWSL7S\kA^eAfn8KJT[I"
A$ = A$ + "T;OT;KT;LTe?bJNYGnUn7NYGlUnj_dOi;md_dG1if?hKUTeoQnbPBTY#kYE1"
A$ = A$ + "ESFZ[1V>D;D7jiJVX]gjQI1YQI3=0c1b0c5J4V7<OH1`2Aig5SB]=QF<c1;5"
A$ = A$ + "b3;3:0=3;7>6hHQS3>NX5h4#keW4\2XEX=X8\BX4Lb`ZPE3W2LZ`Y1[1>Mhm"
A$ = A$ + "0W1JUo<Qc2>KhLPc5F7LN`jQg;lnPc7f0L1`52G4\Ahm3G<L9`U2G6Li`70J"
A$ = A$ + "7^2h:Q[2^JhJP?8L]`e1M0K2f<Zke9\5H[`fP^P[7^1XKHk#?#_#O`=2m3k0"
A$ = A$ + "60f9LC`=3g2L[`^P?4\KhfPK7ejf3B0Z2o4TZbZZNJe<mJ[K6c\RjWEjIg`L"
A$ = A$ + "b<g6WglG`2GdRGBCIc]dl;[#c;oH>fSkhKi4>aCJ5]fFaEFjTGeZ?UCmdFcY"
A$ = A$ + "oN>SeNVWeIO>Wkj>_eoNOOWo6^P;lRfhkoR_T;mb^l?#kGaENEGmel1_f[[S"
A$ = A$ + "=]i`>gbFgFGGo=dmfkYgn^anga0klV^iKiFge7Jggf]O7kiCoI^ooX?kWk1n"
A$ = A$ + "CN`?oO:l5nR?lGjAfknnb?jSmWmWohko9PWj_h[lEQ?n7N`kjKO_oa2;k?4N"
A$ = A$ + "n?a?i5o8X?Fh_6nX3m=N8h?h>oHoXWn73gmo=hgcSeBVBdGon_Ub1Ll68O[5"
A$ = A$ + "Tn_7d>d?4niViJ>Ec5J^NcmJN6coD5c\REDAgEL?ElHEllElc2VE`E7\]P?E"
A$ = A$ + "`S5lM2NmD#ZIUJUYf#Z#lmNBMoYNfDoZ:?V:_^:k_bQZlaZliZlWFi_\Z:ZJ"
A$ = A$ + "VEeFEQE][ZfKE?GEoZZWGe[Yj[^jk^j7_j3Fm;<]:VfLWfI=]]<]kJJ?nd6N"
A$ = A$ + "JSECfJFG=K[Vk_VmGcgYV3=mY=mU>me>m?hdgedo\Co_Jj_N]cZfFZm\Z=\f"
A$ = A$ + "k\f7_fOH]7Y^IFg:[KMe]Ujj_^1[K_emm[k`cX^I\RILYcHgch1VaGM63?SO"
A$ = A$ + "c<Wi<?^I^^I^YINGcLOc<JVobjWKm]Eo6Zoj[ocDoG]nG]naVe\Ve9>[e?[^"
A$ = A$ + "aggm\NlIm2YQdK8MgYO`d?NjXd_n\[JfIWmJWm5>knVmGHf_D3;ZQef`0=lH"
A$ = A$ + "=llcYZidfLfdL^WilhcIh<EUIeIj9c3TIhi2cmHVkE>g?nL?hLoI=>k6GISG"
A$ = A$ + "ISkZamfhcghAVga=_;MNM?_?cl>hlnGVoLWoI=o]=oM=om=oGL1YF`:F#k;h"
A$ = A$ + ">G`3_P3\PGL1S^`U^`CNQGj2kKQ?h2?`2OQ5ncGDM;J5;jbGdNFdm^Xm]XO`"
A$ = A$ + "RNi5mcGlBFlZGLhR_g5oT;nK]hGLao;;ng\TY]Ti]TSI9WjBf`B^^U<`B^[U"
A$ = A$ + "lIGbC]TXUlB;iWeDE=U]YEfdjKjjJjVJjNJjQKj0=ml=m?W=Ef5UmmTmbcfG"
A$ = A$ + "fk=k3Wm0IOi\obLc<g9VKSij;g3TKOiNjLOWL3WkeGj3^\Y]\WJIO[Um3Gfo"
A$ = A$ + "DQZ:\T2_W2KZ`]GHO5>DceeljK^_VOPV?HcodUGeb?^U_nUOmXESBXnd[Vjh"
A$ = A$ + "#k:E3WhCHPCJ=?IeYPog]m4EEi;_VW<X2lDh92X_^Bj[ObZ[bLTelT6jk;V>"
A$ = A$ + "Gj2iBW[Ti;?fmH>San[CML_a;D:hPP69H#F<>]JAkB#YRUX6W;Mn<i<I:F:4"
A$ = A$ + "SnK\n27KHc#AAQELPa6nXk=<H`#fYLe^n6`m^1dBf2A[G#Yd5Cg#YLIbW9OY"
A$ = A$ + "PB5cT;OYR=T?MAC^<iBSOOHXIX`8l_]4B7>jiDAk7M_EdNH#fSL8jkTO1oNj"
A$ = A$ + ";TQ;U7N:S3=:8\:BXJY6bD4afRU:D\Dn:;U?3RfHog;1N4mYQ31NH82=nLNH"
A$ = A$ + "i917o06WJF4V`l=8<b`O#Xb_;A_aFc]WA<Yo4DE#``8TQ1REY9BH966lk4`a"
A$ = A$ + "oU0WhGalR1AJY5K4h#<Td1jE4b4=f`AdTPR9S>1I#]<f`S=L8bUdHR8h<5h3"
A$ = A$ + "bA`_QaW8QHPCW8T5;H2?KIhPa_EAkHloe2#1J28P9_ID^1J39lFc:9PTQV_9"
A$ = A$ + "GJS`>`nT9O#FTA49SBE[mGO`:>0gIJn6Bd]:>02OLn^ZHniYkgOQDAH8?Rj5"
A$ = A$ + ":CTWZ96o5ZH0=7CWWT2CgPRg4KP`678laZf]SS:EZl3>76[D]B;AXVVA]<5E"
A$ = A$ + "i_CcT>O2^:Q^Af[6[_8ETQc=RVg2LIiHBc#Whi]H9=8[2oV85RAd;jPIdHT?"
A$ = A$ + ":D08RWSo0\^1Y32\6<2UdjARBPTIJVRb7\43ZG]KFDnXWCH`QYiJE>IV0E;>"
A$ = A$ + "?6g1#<RUc65`g2bQBRi;QOG63nQd^[4IE4f55ZoQ\E4=FMAR#29HBcND2U^d"
A$ = A$ + "Z>jYkPdRDKPT0J=]E:eCc1O;<KFj<e6BXbT\o>IM6S5M>jMDLG<S:7OSWBPP"
A$ = A$ + "AT1IN<\:R`W>_Wn2B4EmGNfa2<j7a#5=a\cUD>n:ISV]W^:\kXNLj6eS2STN"
A$ = A$ + "IJYR3PDOmXWMhIPa62iHb<=58I3\SXL[P1H[AcJ13NTMSC5478iE#U1Hj#A<"
A$ = A$ + "n?XEbZ[Kn[ZBUHa\<iiojK=P>R>7\:LT=6QII9IATTSNiHeIWiFM`9LQdi8?"
A$ = A$ + "n3:V6#lgLYYc7[?V^;dZVNcXkRUZTdnS^g9BnEI1;<A:O39PFndZfN4ImQNQ"
A$ = A$ + ">M>#imIEZL^eRMXXd5BNn#NU_<K4KgZ1BVSXcNB\hX:NgHkcN6i;_O2nQDn<"
A$ = A$ + "2GQ\7CmP]dUXSNSIkD=J8o[i#NdXXZ6>oCRCaflcD<1NYc9oGZ]5WnU__\jI"
A$ = A$ + "]o4n>L\IA782:[mY5On>oMFJM5]K=OQbYH_ZXMKl6=TFmfVVD?bTGlXPLYf9"
A$ = A$ + "n;iA3=OdG4KcTVMXlMUTgX6HeK3KcT=b#n^B]1TdaVKR]M?XHknd=ZlUBCDi"
A$ = A$ + ";VVD`:MXl<AfWn3Qd\?EbD>2GIn>nZAlHoF[SX4:6HEndNBK\o1[1MQVCc2;"
A$ = A$ + "UV2VBXgReMNTHCS3[^=0]6KJ<5T]H`gdF9OSST9IbJLa<iC`KYiADTcU^SA`"
A$ = A$ + "TC?OK5`L;EOK>;4TVG9U:EB=3aF84KaR^WXB:aN8RBjg8fhKQ?#SX8O6BJn8"
A$ = A$ + "o3SJd`Z9HlPTNB45H6K3chT=J#R6#WXY]DE;la>A^[U8l\j7Nm=fnOa<fHiR"
A$ = A$ + "B#6\MFdK2b6[gTGUA4Ga5EI4a6ThQ;:JBRMS\S4YabDN\Bj;=f\XaO0d9N;4"
A$ = A$ + "M8W#6BCB_ZWBEGf<4B]6UT28M:RbAh:Gk]AaI:nm5`n:`f;6f5nV;WDVlAR3"
A$ = A$ + "NbL4=DTiHN#>7=T\dMJDJ15U`OJ0AO[dPe>\85hcN4j]8fiI_M6<ObJe7iaF"
A$ = A$ + "?[LOahCLc[3ChB[YSWF<Mc9Y:_Ao4Rm9:bH[GND3`9[6;kh5gQhgWdS9]HB["
A$ = A$ + "EQ<>OU8kR8^2ma2eaZ;dZf6JeI3mdWbT8ZKNV9J?5C_lRUD^P6?HTed53FR4"
A$ = A$ + "bfNBPO=h`_dDjCil`[j`4bZSS7D`941W8n#I;ihT<UBQ#A4H<9:D11KjD\IK"
A$ = A$ + "CK:9N8aCb^CUY62#^mA2M?h`D_`8B6RW8#IbD^\fR3h=6C:aHC<=fBf]TJMR"
A$ = A$ + "aGU`nE3fLUbiTB9J]>oHhaad[n64?;RgLl<2HE#eMg<:Zo#a]AJ_\HYXMaVA"
A$ = A$ + "1a_5gVZI=l<R2>g^Q4S2BhiAabh3Bb]=<1EAG\G9R?e575ORE0>QAV:Xjccf"
A$ = A$ + "HHlTb`f#IC;I?c6QKaJ;b=n[bUcR6;h4S_f5OLBLXlQ_LJNjHM#EP8GV68_#"
A$ = A$ + "<b;ncXh]TT\h`oY\2RU]7TcF9>[?j<B6_431DNRlDRR2T869A<D4afBR7;dc"
A$ = A$ + "b#6eJOjLH2PfL7UiShS:<>h?:<;>=f4bXB=<XXWi<7]BX5Hi1:3?a^6RJ43W"
A$ = A$ + "LLEVHYWnBCnf?c;XCJ9]fRZ]DK0Haf3Hh7I=M69fU[`3ola>ENOiZmH[DS`l"
A$ = A$ + "8TC=0S0=Ym>52B6BYe^[Zd2AbI_413IFRVVb<5MA53[6WBHUa3>C4:ncYi3i"
A$ = A$ + "V2:5CSZ<_0N?J5IDHD^#0UA_TX>Z;9OXFF21=MaB6YiXR6KHbDUIXS<?cXff"
A$ = A$ + "77G:DXHLa38KZ^DF9RZ?\[GR5gFW1f^LT]L5Te6KAWVLj_TG][>2<UcEE\Hj"
A$ = A$ + "_6D[Z4A;bJIhPER8V7ZIPH7NGL5afbeL]U8UBcaYVF\QAmk`dhOTi9EAKZjK"
A$ = A$ + "66kE>ObnJJ19]3YM^2?NAm9[KWc6]emS5SY59fG^_QTJU8];CPCSTT]BX?BF"
A$ = A$ + "3ULRGM\NClhFTmALJ6>e3[?RQU8HLh#TVhg4\kEVe1JnCYfK]>4iQ;A\_#d?"
A$ = A$ + "=S?9RWAlY7WQNIIVKmac\A_<`AjDT4CCTV76?k;;ggdiLa\C#B#<>Ll3`DIb"
A$ = A$ + ">:ZNF^NB9[NR<fAdXAEJPnT#6Flh:FcBW\FYNnbdBL4WlLHIbAR^SlfV=VdO"
A$ = A$ + "jM`PXIJbSm1`AgEGC;m;^X6IR=ZV?faJ6_8]LJCf8am>9A<Y=`ITJa7;m[TU"
A$ = A$ + "#cic`N>XTdEc2`KJLZIbK3Jb6U:[OZ\=eOTee]Omb47XNfUZF\;AaLQN29L8"
A$ = A$ + "REflmWbend_6JnE1[\LoU86\HR`MPb6?f:5Vgg#Al<65Z?blHn0Ua4V3LSCB"
A$ = A$ + "mUER_ec[eETGL4L>d1I7o18?_I#Z4EK;nkS26d<:2G:7A1DfL4?LHRhfAeB["
A$ = A$ + "6=m>CAKVZ<?C2NTC8=RmF8QZGWUhV`Vd<dZhTfYgUF[^#;R27ak36DLPe7Y?"
A$ = A$ + "L8V[kS;aaaTAXHR7NEaEeTlBO`GFNnaEFVm98c3Ej;D[4AXjfSWCTbXjFb>?"
A$ = A$ + "#L8=ViQ3;RaQ6#b3gjj\XA;RoC6PQZ8\R?];hSHQ[HJ??bJF<FYEE1O8[c:["
A$ = A$ + "KM2>T6[T?M6>GjLJlnD1YUZ:8n9UdMdBOd774Th9Pn;kd\<O7=hiiTZZ_Fi8"
A$ = A$ + "5SHC6\gBbN;ijQfhBaeKZVh<>Yn;EKR3HHh8NTYEfj`B]A2YiP]F\D6_B<8D"
A$ = A$ + "09LMFhj1a>VYBMCZ58;9enSPYd?OiVWV<ole9G`5M:Y^H=naTHS8Y5YKnbQY"
A$ = A$ + "iJ\JG1;m=;o#S1K]iXk53iQ<PEWW\CeBekTNYN9C79NJR\4C;9e[O_enceca"
A$ = A$ + "Snb6X^;CCe#8\MW4L5:P;S?^j#R81ijcZg53WBU9K9E<V]1H5]2MhQEb:Z<m"
A$ = A$ + "g<>In<>INENgYoIS^VC=f[_FOiUVBOiIVJOiClE2ObILfG5m?KV3YSdj7B9\"
A$ = A$ + "g^LDP6AW;S_bNIY8NTJKcJNT]P8>aa#m_an1anE?Go]d>Okne2WRHVnT`O^c"
A$ = A$ + "6hKRol:JW\1QSmXJIkB#3K=I=kV#]o\nDBh?ggHD\G\HiS6lSYA[<#9=fV#^"
A$ = A$ + "d9L`RTL=9FTTnSmOaNeC;?cBCF`YLR4Qc=>VPJDH<bilIi7OQJG=?7m8;gTV"
A$ = A$ + "5bRc\9Ai>0Yn4D]7TeERFK8^4:Bm9Xf?DIS1;_`e]Em<Ba065:EffEdIWAKe"
A$ = A$ + "O^4kXVE_EB;S8n[A577W09SI[kOSN[=Z6eA1M1B]l6M=SlFMDYD5U_N0NBMU"
A$ = A$ + "Bk]N0l2M;QX7<XG<KYfP^^M9[oNJGmF\aSJ3kSeoL:OAnaDP`RigC^[?QPh;"
A$ = A$ + "bQPiXk=:Y?`j2C4;NC4o>^Rb^J:cI=8eK?:d?PDFF:bFfN]Z5Jl:oWbeg;PZ"
A$ = A$ + "L6SG1RgB^ZD5IG\82RiHUG<``i1aag>Z4mb`\f197IGC\Uk_ZHan:;<A_WUL"
A$ = A$ + "f0\cSX9^Q:LB[jJD9[M65YGndELP89V8MmhYO5W3bJBI;[U5o]:;BlflDg]N"
A$ = A$ + "]IUml#[L]hdBnShH#FdBP`751^89f0cXHl]K`_2ai;[Ff5ejH7ib8P;CU7?P"
A$ = A$ + "SOn1\[iFVBaFL9cCQjRFAa6X6ZSlfK9_MGOI3Y0BKn0:VMS\f3lRBhT1JWU1"
A$ = A$ + "ZG\a9b09XR<Z4C9EaP#=7\bT3TEN<^NU4UYQ9\>[5;i4:M[NW_0[_P<SWbJg"
A$ = A$ + "]1N=e>N_egLBF\TPd5W_aE3obbMBCV\\U#QH^SEWhL3]<DfhEl]LlX8J;U?N"
A$ = A$ + "5hh8I:KLUUWTLEDGi[PSo`kVcCjj08NFMI8`[LHT\D0Lm5dUTT3<F]gVbIST"
A$ = A$ + "PCC9bd=^^[dND:CJ]f[N[89]MU4lVR:C:R:7::ER\3cD;FJ8NLf?kGQg3:]j"
A$ = A$ + "_:DNef=M\RC^Ea[<9K8fJdDUeRL[fWTDH2359Y?c?N\\ikT;]DKW<^Z[Z4U\"
A$ = A$ + "QFoW4AWcUf^f`8\>Fk^gJb[mKA=F4[]<oZ0[aU`NldjXKmEIAj:Ld8JMjR[n"
A$ = A$ + "G9N_4`^Z<abGdNhk0AlbHAeOG67>XAIa]UJmiA;HhVOb[bG#IA7hZjGDLL23"
A$ = A$ + "bdNdn1Ao[c2NkNhSUQ\kF`4i>8b>YcI\[Q0Q\bb0akm#IEK8`OTMCeabOmUL"
A$ = A$ + "`<A=\88FPRR`:Ic#RfDQl6;D#eb[=[GE2Uh#dXBY<=E97aD3eK]ZfJ5L>b^M"
A$ = A$ + "d`=`B_CI5:J`I:S\<V\J5ZT#i5]##F?Mjgba`G6HB7S9<4I;g^1?6;o]J<:J"
A$ = A$ + "cHJRSCXHJNZ6YbFoUhm?jT>J1JTDU?:B0RCf8h9OXFCVjIRcMEYL8cObZQT]"
A$ = A$ + "DBC1[9In#iWPG<iXFoIRNE<ShGAc\B8HF_:AARi;ISiPaDZnlG\=NgL9Re=f"
A$ = A$ + "VRHQ;bFcBIg\hfdZ2`mX;DMSb=EE>:M2idb[RT:XVXFBNk]_O;73e[8;Y>aa"
A$ = A$ + "`Vd\g#X62;3n5Vbi`4TAW`HX2Y9W8^P7PHoOX<:=FcWcDH2SVjm;WQUAm65["
A$ = A$ + "I<oQP;\QGN#T1H96d<D<Xa1kfP[VEan8`NYk4bS<?]fE^LY#HD313_JMi5_A"
A$ = A$ + "TK[iX4FZ\GnjmflZZQl7F6<lXR>hHC#CPdPN4]0_m3YVK0_SAE8BD;19JA]V"
A$ = A$ + "BK:E7Hl];D=7cQ[2E;_<_#EZ[3S^;J4o#\>P]ZEN15bUbZ<o6;LREaZL9o9A"
A$ = A$ + "XGZ[E\0oK=<CHA^LHj1bF:gfX2cVV:HVDjNb4\C2I6fabd_inSEYi988CPDF"
A$ = A$ + "[<1`J^0JM12dM:1B7;P`Lij>ZH\nhM3X61]gl[JIel]E[bg3I3NE^BMM55Go"
A$ = A$ + ":EVk87bF8[Y6VNdOc4PYO=a\J4>Pj3c6]gS3Z?Y4LPThZ[d3^R]M0WLhiHag"
A$ = A$ + "DNbiejh3>?NF8BWkLgU4E]XY\nd1Bm_B\WKV#=`hk;SBLU0RRgQ<lE9;8Vj8"
A$ = A$ + "5L[KSToJ6AGd_D9YMefgV3AX=GDDUci2b]_k\cINO1Cf4`hDiEVOh8<BZHmo"
A$ = A$ + "1I^hKjnA[T6>MVlU]Odd\1RlGl5e7[gjV5_o:U#bciE4UbZf77=]]FSnEl;f"
A$ = A$ + "4CD\MDkn?eFQ:Y4RFlWi0lFCUe6DcDl6Lf5ACLQ=em8YU^ISl?AfATg8MciU"
A$ = A$ + "FFWaTk>?c#f[i<Gd=IKMne<foN[YDRJ`J_?7R[iRj\LDOlTZ0Mllo`R_bEIW"
A$ = A$ + "nB>Ki\Y<RI^9cNf?`#jB`kO_CHIKlNA;D[EHSfm7ZM7]Uc]OA2e]d6KFUn8Y"
A$ = A$ + "oIaE_jmQfX#kCid2Q#ilaaFPJXd2F;iK<i[eAnhki3RW5C5\[dQoHT>I=EiA"
A$ = A$ + ";S[4Jai2;[7OPFWV1In#>Y^hLdNfL7ejl#5h]AnZ#G#A^K;4k^NTa<nFgRf4"
A$ = A$ + "KofNoll>lnH#[5DReDJEj2BYkRF^>JfEeQ9HafGYeY[9MM\8Nkl95liKR_k0"
A$ = A$ + "TMU\^5a\ZLHd#Ad=<fQSRT<?E>^UGlfOOgofiN:h]km7`kTk5QgYkkogm^?H"
A$ = A$ + "nMbmfQFoaAm[ohXNe_Wm;E_^BndVT#:3E9J?N>T\Fc3Q0<H#:RIIMI8I>I_O"
A$ = A$ + "[e>8NGT:Jgl^jaNW4Zih[i1Zk?eO[^_<4o0ejEK1dOWFfMak=E>2oJPF_N?;"
A$ = A$ + "T8:gb[mR;Bg8_c\<HohlXiIRHb>MS\cA=lN;WTJ5kM^=Rb4lOe#nb:JYGn91"
A$ = A$ + "8D\5OeNXRf;K7\bKFQ9c_X_KgTk<e:]`e1IJgkVXFhl_l^fJAUHM2:akfJJ3"
A$ = A$ + "F;ke2A6T^?3Um:UA;M0aBhJWC#13=hgl?GiL\aF`kUUJSGGD=f8Y>2S=LZ=#"
A$ = A$ + "g5Jjnm?8KlnmWNF\8kgOJCZbgGSPQF9oASB]oOm1[J]>L1kCUTn0OoQV5]7R"
A$ = A$ + "h::>=8_6Xmaj;^el#ZHoAf=olGQdW6R_W9YnccE:LPaZ;enYk9`\Z\;]WbM]"
A$ = A$ + "Y4e6RlUJoH`Q\Y>;NXkI76>i58=L43ZSL82M]hS]MiEXaE[UVCXNPefY>_ZF"
A$ = A$ + "X5ac\Q4=57mbK<;9H?Mg3c3J2H9l0;^IK[\mRKAaAk`cn_6R]94HaP2<7QJS"
A$ = A$ + "N?^8]SbTi0<_Qg]BY?n:TUT5=TY<9UfP`Z6;?RliXl9JQ`aAVBSWae8MNGSB"
A$ = A$ + "OH?<XY;ZD]VQ8VZ>mUaVQKURT81f:SK?_Y3aV`E8PU6LdO1GB;E0SgK84J`d"
A$ = A$ + "f`ghYTWL#dlB`3A^9_\NIQFY76;Z#JW57TF^L1V3akjK]eA4L?\WlF=:_8SC"
A$ = A$ + "VKHA^S3>Gh_AN]]X6D;ALi5:#U#aP=4JQC>^FK[[V38TJ?G70\CN#gG^^6E^"
A$ = A$ + "^D\\]8D`9oXkI5jNaaQ;i4gb8\Y5h;De4\hR]]FL11K1i>lQJ?=0T`Q2LN_a"
A$ = A$ + "6[oD[?M9O<UIH;bcJB:_WUm]cglFI?9aHOe>Djdfn:U8i<\LB1VTBi0SBnbJ"
A$ = A$ + "3PhVJl#fZ6_aCAgFd#2MgJMj^UldOmdQIRV:K`j62>Vg8kCddL50#R#TCWW>"
A$ = A$ + "0jm`]SfEO\45e?Johakd:i^;FU[8:H5]SXXNoWckgUJS]J8j]\N^XjB2^JNO"
A$ = A$ + "Z^VfJk>URX5Q>3=\LNP3f9`[22ETlQ:JXSE7?64V9jLQ^m9QcFE]NF[XNZF\"
A$ = A$ + "8dCHaVA]kEL]?>9JWD7]aTEE0WLGP[m1XDJmF[FDG4n<=GRhHBR4CHbF`Qhb"
A$ = A$ + "#2kT=4KKXX_\XDd7W09K^#g3#Z=YbPQKO0iX]AjCE0ZcfH>R9cD=#lTCC;k\"
A$ = A$ + "DO:Ml\aAaSWBnTm9<gXkJ7a7:mL1Phk:Q;F>8P_gVba?o96U[mPakI:Pf?ii"
A$ = A$ + "4PCOHXhOSbM`nKdifnQLKlgLoJF8dmKEWh9V1]b47?LB#AHE`Y1W1Lf`i1W?"
A$ = A$ + "LA`U0O0hZP[5f<\Eh6PNQM0g<lQPk#^oSJDo#aV]HSL\4NmZ`?E:EJ=CedWR"
A$ = A$ + "bM8JejgAgknfn`mgoSnm5ljS]O1Nm?iFjES_[l0cN;KPl?nACP;QHj57QNHX"
A$ = A$ + "Dk9M1KShUoCkAkj=9`QSkW\]n:oGI_e[eSGn>S^oQQ?:l9POOhnPo#hc1o9`"
A$ = A$ + "31?2lX`O>lG0O=h[3OCh_1n^`O;lg1om`?161N=hO4nO2o_PoEho;l_1_1<^"
A$ = A$ + "\C1W<JZUGIn]Q_RlVFYfhM<]geFNISJZFffH:[?]ZS1E9_Zc[Ka#mjPbPK1M"
A$ = A$ + "LcHg0CNbEdgKd[]YginXO?Un>G7iT_R[6jD9UDf[4K=Y9ie4gBUC\7bjBk9o"
A$ = A$ + "i;=YBJkm=AhLg>8Ie2hB_b[c]]DHNXQ01FjU;BQVhQ;cO5N2\dkLBkm;1fGY"
A$ = A$ + "KB[aaQXHTM]ijTY?1XEX4L:`Y3W9L^`k5^0hm3G6L5`e0M0M2M1K7^AHW`]2"
A$ = A$ + "g6m#\RbYd^cclnTAc\TbIV[RVl;[ba_adX`OYAmH3hAZZ<E[O2`V_HSL\4N]"
A$ = A$ + "A_Vo=lcbmJC<Q9b]94]g_3_9l]hK_h9me_nP9^L24c9b<A>N<kgm]JM#JGll"
A$ = A$ + "_:=?mHo5`To\\hOo?c4\[9mKgWi9okiI^`kdWA:_KmLji]kc9XOGmlmioOhi"
A$ = A$ + "GeoAmLkig1?3SLk1Wg=OF;m^ec2[gEOfLmObNNSmfiIofk6?cY0HV`S3fWEa"
A$ = A$ + "E2eYWK`cGRNN5XFj:ec3`_MGjidcFc_TNNUHF?OCmlZ`[nadC3fDdc[hYcmR"
A$ = A$ + ">gPW?Kml:`aMIji1`J`gbiY`fl7YWG9fj7E?_:lkoNH\QK4a4:BAh\gh:;B7"
A$ = A$ + "V`gLaX7g]RNKk6mmf?NIWKMWMg1Nbj`H8k16P?f?fR>aL1>ElC<4T[K3mTCn"
A$ = A$ + "cK5oKK`:`?]RM^gN6HMmfoFk<kYVU77lHKU>QFKm4JK5]ejTQ6G>>0dSWc^h"
A$ = A$ + "Q=;n6^l>kO7MeK?Ic>I]70kC4jaG=h^38lOIbQOZ`4HBIZdDUYJcd<eHV^YF"
A$ = A$ + "CMVIHVYYNc\<Y=cfdPI>V<ViJJd<?cl=;`\#cR<;f\4CCV\84VZW8ZoGRW7Z"
A$ = A$ + "VUJbSak?8lAP?3LG`O<lUQ_8V?`mIF6V;`MSAnoP`nPO1<:l5hWLZ3im\CmS"
A$ = A$ + "1G?b:XWNZm0ONTULS#O<kIWX4QldCMGHlIdC?eW6cahfQmPAZm<`3K:HJf\L"
A$ = A$ + "caH>FcaI>NC;`WcL2VCdLB`7e\2C[Vf<5=[dDbLbVEIF]iD<W:Z?lY<WVI=`"
A$ = A$ + "SH>Mh?0ndVgSi<<[eLVVcbLfVcaL^VeI>?cj=_GckcLnV=H^0c5J^8c6=_Oc"
A$ = A$ + "5K^4cUJ^<cUKn0Vf=GQi:=GUiZ=GSi3J^FceIj`\9cV=QV>=Ka\Ecf<MI^Nc"
A$ = A$ + "=Hjf\MC?VN=mI^ACoVMH6`\Cc=I^Ic]H^Ec^<O8c^=gVif=gQI?VO?cMJn`V"
A$ = A$ + "1=OTZgI?M]2lUNlLdS]Z7KC?FD?^BmH9mh9[7GUNLejaCA?NVjacB?NfjacE"
A$ = A$ + "?^>iH[jhgZ>^]ZSK[jhfZ>^]ZSK[jhfZ>^]ZSK[jhfZ>^]ZSK[jhfZ>oJE7o"
A$ = A$ + "FeaOEjacDaScZ]:?_>fnfkXb;MKM>#7EN9M]e]gA`6gFGl_Fl<?U:kXknfF7"
A$ = A$ + "E6fIg3dAeMfg>jZkNkYbM`]JP>fI#OK[[JjlFfLgM\m`=e=eWf`AXZnjL78`"
A$ = A$ + "ZYSnk_gK^k>gb0EcW]cnV>O\o^fjf6#na`N_iNTcfD_3\]JdV5fCM^cfd>jT"
A$ = A$ + "1KK]N:C_gn7HKm^eNkYS^[[[N60]XdiV70=ZDKWgh>kjVjXk>kIcMFifjMWk"
A$ = A$ + "XcIdOWgDgm^e^fL7MgC_3<MZaK]o>jNPnLW^Y1VfU\^F9aQE#WdZNb:LWDdN"
A$ = A$ + "BKfCFYmTEK?iD\WLbfCFUmTBj9[d2Wf\M_TM8:IQLA;LJcn=]IKCKFhDbRZ["
A$ = A$ + "dfhRFdX=g9fA_=;nDdMRmWFYM8Je=XF8gV5EGY[aF8_B;n\Bglb2iEJkN9g4"
A$ = A$ + "d1WE:ZKm]Y^kMcg#e8_T>FYLEgKA>fo0je3\S]eAHWEbo]j`KP?FcFjZk^k<"
A$ = A$ + "LCmN;CG>[OTSGm0mgE7KMWm97kG_>\7iHgKYZ=gEoK^k>[Y[N^Y=]C\C3#WY"
A$ = A$ + "Og>fNGXlH7K^CD0jVLG4\SMfCEKYc]SR#YXoDi>j37lDK^kM^Y:gFWMP3AHG"
A$ = A$ + "M\mNk9\f]_cMX2EM>C_cAIOa=ehScNbHoGSl3nVg6Mdooo4noEAM%%h1"
btemp$ = ""
FOR i& = 1 TO LEN(A$) STEP 4: B$ = MID$(A$, i&, 4)
IF INSTR(1, B$, "%") THEN
FOR C% = 1 TO LEN(B$): F$ = MID$(B$, C%, 1)
IF F$ <> "%" THEN C$ = C$ + F$
NEXT: B$ = C$: END IF: FOR j = 1 TO LEN(B$)
IF MID$(B$, j, 1) = "#" THEN
MID$(B$, j) = "@": END IF: NEXT
FOR t% = LEN(B$) TO 1 STEP -1
B& = B& * 64 + ASC(MID$(B$, t%)) - 48
NEXT: X$ = "": FOR t% = 1 TO LEN(B$) - 1
X$ = X$ + CHR$(B& AND 255): B& = B& \ 256
NEXT: btemp$ = btemp$ + X$: NEXT
BASFILE$ = _INFLATE$(btemp$, 25152): btemp$ = ""
_FONT _LOADFONT(BASFILE$, size, "memory, monospace")
END SUB
SUB savegame
OPEN PlayerName$ + ".wpl" FOR OUTPUT AS #1
WRITE #1, PlayerName$
WRITE #1, PlayerHits&
WRITE #1, PlayerMagic&
WRITE #1, PlayerStrength&
WRITE #1, PlayerGold&
WRITE #1, PlayerWeapon%
WRITE #1, PlayerExperience&
WRITE #1, PlayerShield%
WRITE #1, PlayerArmor%
CLOSE #1
PRINT
PRINT "Game Saved"
PRINT
END SUB
SUB loadgame (PN$)
PRINT "Loading "; PN$;
OPEN PN$ + ".wpl" FOR INPUT AS #1
INPUT #1, PlayerName$
_DELAY .1: PRINT ".";
INPUT #1, PlayerHits&
_DELAY .1: PRINT ".";
INPUT #1, PlayerMagic&
_DELAY .1: PRINT ".";
INPUT #1, PlayerStrength&
_DELAY .1: PRINT ".";
INPUT #1, PlayerGold&
_DELAY .1: PRINT ".";
INPUT #1, PlayerWeapon%
_DELAY .1: PRINT ".";
INPUT #1, PlayerExperience&
_DELAY .1: PRINT ".";
INPUT #1, PlayerShield%
_DELAY .1: PRINT ".";
INPUT #1, PlayerArmor%
_DELAY .1: PRINT ".";
CLOSE #1
_DELAY .1: PRINT "LOADED";
_DELAY .5
END SUB