' Coin Hunt ' A FreeBASIC game by MagicalWizzy (found here: https://retrocoders.phatcode.net/index.php?topic=198.0;topicseen) ' This BASIC Anywhere Machine version by Charlie Veniot ' Changes (additions, edits, deletes) noted with the pencil emoji: ✏ ' ✏: all instances of "chr" changed to "chr$" ' ✏: all instances of "str" changed to "chr$" ' ✏: BAM does not have the "multikey" function, so mods noted in the code _INITAUDIO ' ✏ _ALERT(_ string$(40, "-") + CHR$(13) + _ "Welcome to Coin Hunt!\n" + _ string$(40, "-") + CHR$(13) + CHR$(13) + _ "Use the arrow keys to move your player around to get all the coins!" + CHR$(13) + CHR$(13) + _ "Make sure you avoid those pesky monsters as they are likely to run up on you at any time!\n\n" ) '✏ added _ALERT CONST KEY_UP$ = CHR$(0)+CHR$(72), _ KEY_LEFT$ = CHR$(0)+CHR$(75), _ KEY_RIGHT$ = CHR$(0)+CHR$(77), _ KEY_DOWN$ = CHR$(0)+CHR$(80) ' ✏ Added KEY constants Dim i as integer Dim ii as integer Dim iii as integer Dim CoinCount as integer Dim MonsterCount as integer Dim CoinX(500) as byte Dim CoinY(500) As byte Dim MonsterX(500) as byte Dim MonsterY(500) As byte Dim PlayerX as byte Dim PlayerY AS Byte Dim MonsterOnCoin as byte ' ✏ BAM does not have the boolean type Dim CoinsCollected as integer Dim Score as integer Dim Level as integer Dim Lives as Byte Dim Cycle as Byte Declare Sub UpdateScore(score as integer, level as integer, lives as integer) Randomize Timer screen _newimage(800, 304, 0) '✏ Screen 19 ' Welcome Screen CLS Color 14 Locate 17,35 Print string$(4, "-") + " Welcome to Coin Hunt! " + string$(3, "-") '✏ Modified Locate 18,35 Print " MagicalWizzy (2022)" Locate 19,31 '✏ Added Print "(BAM version and mods by Charlie Veniot)" '✏ Added Locate 21,20 '✏ 20,20 Print "Collect all the coins without being attacked by the monsters :)" Locate 22,35 '✏ 21,35 Print " Press any key to begin." junk$ = input$(1) '✏ Sleep ' First Start Variables Cycle = 1 Score = 0 Level = 1 Lives = 3 RestartLevel: ' Draw Border Cls Color 9 Print chr$(201);: For i=1 to 98: Print chr$(205);: Next: Print chr$(187); For ii = 2 to 36 Locate ii,1: Print Chr$(186) Locate ii,100: Print Chr$(186); Next Print chr$(200);: For i=1 to 98: Print chr$(205);: Next: Print chr$(188); Color 15 Locate 1, 16: Print " Coin Hunt! by MagicalWizzy (BAM version and mods by Charlie Veniot)" '✏ modified PlayerX = 51 PlayerY = 18 CoinCount = 20 + (Level - 1) * 5 MonsterCount = 10 + (Level - 1) * 5 MonsterOnCoin = False CoinsCollected = 0 UpdateScore(Score,Level,Lives) ' Draw Coins and Monsters For i = 1 to CoinCount redocoin: CoinX(i) = int(rnd*98)+2 CoinY(i) = int(rnd*35)+2 if CoinX(i) = PlayerX And CoinY(i) = PlayerY Then goto redocoin end if next For i = 1 to MonsterCount RegenMonster: MonsterX(i) = int(rnd*98)+2 MonsterY(i) = int(rnd*35)+2 ' Check if Monster is too close to player. if MonsterY(i) >= 16 AND MonsterY(i) <= 20 And MonsterX(i) >= 49 AND MonsterX(i) <= 53 Then goto RegenMonster next ' Draw Coins and Monsters Color 14 For i = 1 to CoinCount Locate CoinY(i), CoinX(i) Print chr$(248); next Color 12 For i = 1 to MonsterCount Locate MonsterY(i), MonsterX(i) Print chr$(234); next ' Draw Player Color 15 Locate PlayerY,PlayerX Print chr$(153); ' Main Game Loop Do keyGet$ = INKEY$ '✏ ADDED WHILE INKEY$ <> "" : WEND ' :'✏ ADDED ' Check if Player moves... '✏ If MultiKey(1) then '✏ ' Escape pressed, close game '✏ end '✏ End if If TRUE THEN '✏ Cycle = 2 then Cycle = 1 Color 15 If keyGet$ = KEY_RIGHT$ THEN '✏ MultiKey(77) then Locate PlayerY, PlayerX Print " "; PlayerX = PlayerX + 1 If PlayerX >= 99 then PlayerX = 99 Locate PlayerY, PlayerX Print chr$(153); end if If keyGet$ = KEY_LEFT$ THEN '✏ MultiKey(75) then Locate PlayerY, PlayerX Print " "; PlayerX = PlayerX - 1 If PlayerX <= 2 then PlayerX = 2 Locate PlayerY, PlayerX Print chr$(153); end if If keyGet$ = KEY_UP$ THEN '✏ MultiKey(72) then Locate PlayerY, PlayerX Print " "; PlayerY = PlayerY - 1 If PlayerY <= 2 then PlayerY = 2 Locate PlayerY, PlayerX Print chr$(153); end if If keyGet$ = KEY_DOWN$ THEN '✏ MultiKey(80) then Locate PlayerY, PlayerX Print " "; PlayerY = PlayerY + 1 If PlayerY >= 36 then PlayerY = 36 Locate PlayerY, PlayerX Print chr$(153); end if Else Cycle = 2 end if ' Check if monster eats player For i = 1 to MonsterCount If PlayerX = MonsterX(i) And PlayerY = MonsterY(i) Then Locate 17,32 Color 11 Print "A monster just ate you for breakfast!" Beep Sleep 5 '✏ 5000, 1 Beep Lives = Lives - 1 If Lives = 0 then end Goto RestartLevel end if next ' Check if Player found a Coin. for i = 1 to CoinCount if PlayerX = CoinX(i) and PlayerY = CoinY(i) then CoinsCollected = CoinsCollected + 1 ' Way to ignore coin once collected CoinX(i) = 0 Score = Score + 1 UpdateScore(Score, Level, Lives) end if next ' Problems with coins disappearing - redrawing all coins Color 14 For i = 1 to CoinCount If CoinX(i) <> 0 Then Locate CoinY(i), CoinX(i) Print chr$(248); end if next ' Move monsters about For i = 1 to MonsterCount ' Check if a coin is under the monster. For iii = 1 to CoinCount if CoinX(iii) = MonsterX(i) AND CoinY(iii) = MonsterY(i) Then if CoinX(i) <> 0 Then MonsterOnCoin = True End if end if next ii = int(rnd*6)+1 Color 14 Select Case ii case 1 Locate MonsterY(i), MonsterX(i) If MonsterOnCoin = True then Print chr$(248); Else Print " "; MonsterX(i) = MonsterX(i) - 1 If MonsterX(i) <= 2 then MonsterX(i) = 2 Case 2 Locate MonsterY(i), MonsterX(i) If MonsterOnCoin = True then Print chr$(248); Else Print " "; MonsterX(i) = MonsterX(i) + 1 If MonsterX(i) >= 99 then MonsterX(i) = 99 Case 3 Locate MonsterY(i), MonsterX(i) If MonsterOnCoin = True then Print chr$(248); Else Print " "; MonsterY(i) = MonsterY(i) - 1. If MonsterY(i) <= 2 then MonsterY(i) = 2 Case 4 Locate MonsterY(i), MonsterX(i) If MonsterOnCoin = True then Print chr$(248); Else Print " "; MonsterY(i) = MonsterY(i) + 1 If MonsterY(i) >= 36 then MonsterY(i) = 36 Case 5 ' Monster stays still Case 6 ' Also stays still end select MonsterOnCoin = False Color 12 Locate MonsterY(i), MonsterX(i) Print chr$(234); next ' Check if monster eats player For i = 1 to MonsterCount If PlayerX = MonsterX(i) And PlayerY = MonsterY(i) Then Locate 17,32 Color 11 Print "A monster just ate you for breakfast!" Beep Sleep 5 '✏ 5000, 1 Beep Lives = Lives - 1 If Lives = 0 then cls Print "You got " + str$(Score) + " coins. Well done. You did well. Game over." Sleep 5 '✏ 5000, 1 end End if Goto RestartLevel end if next If CoinsCollected >= CoinCount Then Locate 17,28 Color 11 Print "Great Job - You got all the coins! Level up." Beep Sleep 3 '✏ 3000, 1 Beep Level = Level + 1 Goto RestartLevel end if Sleep 0.07 - 0.005 * Level '✏ 70,1 loop '✏ beep '✏ Sleep End Sub UpdateScore(score as integer, level as integer, lives as integer) '✏ removed "Private" Dim i as byte Locate 37,1 Color 9 Print chr$(200);: For i=1 to 98: Print chr$(205);: Next: Print chr$(188); Color 11 Locate 37, 3 Print " Score: " + str$(score) + " "; Locate 37, 46 Print " Level: " + str$(level) + " "; Locate 37, 89 Print " Lives: " + str$(lives) + " "; end sub