Better code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 24 Aug 2025 18:38:16 +0000 (21:38 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Sun, 24 Aug 2025 18:38:16 +0000 (21:38 +0300)
Games/Pomppu Paavo/Pomppu Paavo.bas

index 13dabc4..944df00 100755 (executable)
 \r
 DECLARE SUB DisplayGameStatistics ()\r
 DECLARE SUB LoadCurrentLevel (y%)\r
-DECLARE SUB DrawSprite (p%, o%, m%, fr%, teler%)\r
 \r
 DEFINT A-Z\r
-DIM SHARED graphicsMode\r
+DIM SHARED GraphicsDisplayMode\r
 DIM SHARED asciiLevelData(1 TO 20) AS STRING * 31\r
 DIM SHARED Companion1PositionY%, Companion1PositionX%, Companion2PositionY%, Companion2PositionX%\r
 DIM SHARED LivesRemaining%, CoinsCollected%\r
@@ -87,127 +86,127 @@ CurrentLevelNumber% = 1
 \r
 ' Capture sprite images from screen drawing operations\r
 GET (1, 1)-(20, 20), EmptySpaceSprite\r
-DrawSprite 0, 0, 1, 1, 1\r
+RenderSpriteFromFile 0, 0, 1, 1, 1\r
 GET (1, 1)-(20, 20), SolidTerrainSprite\r
-DrawSprite 0, 0, 4, 1, 1\r
+RenderSpriteFromFile 0, 0, 4, 1, 1\r
 GET (1, 1)-(20, 20), kast\r
 PUT (1, 180), SolidTerrainSprite, PSET\r
 PUT (300, 1), SolidTerrainSprite, PSET\r
 PUT (300, 180), SolidTerrainSprite, PSET\r
-DrawSprite 30, 50, 2, 1, 1\r
+RenderSpriteFromFile 30, 50, 2, 1, 1\r
 GET (31, 51)-(91, 76), pilv\r
 PUT (160, 10), pilv, PSET\r
-DrawSprite 20, 100, 3, 1, 1\r
+RenderSpriteFromFile 20, 100, 3, 1, 1\r
 GET (21, 101)-(31, 114), taht\r
 CLS\r
-DrawSprite 0, 0, 5, 1, 1\r
+RenderSpriteFromFile 0, 0, 5, 1, 1\r
 GET (1, 1)-(11, 8), siil\r
 CLS\r
-DrawSprite 0, 0, 6, 1, 1\r
+RenderSpriteFromFile 0, 0, 6, 1, 1\r
 GET (1, 1)-(8, 10), CoinSprite\r
 CLS\r
-DrawSprite 0, 0, 7, 1, 1\r
+RenderSpriteFromFile 0, 0, 7, 1, 1\r
 GET (1, 1)-(31, 11), poosas\r
 CLS\r
-DrawSprite 0, 0, 8, 1, 1\r
+RenderSpriteFromFile 0, 0, 8, 1, 1\r
 GET (1, 1)-(26, 21), WindowSprite\r
 CLS\r
-DrawSprite 0, 0, 9, 1, 1\r
+RenderSpriteFromFile 0, 0, 9, 1, 1\r
 GET (1, 1)-(21, 11), TrampolineSprite\r
 CLS\r
-DrawSprite 0, 0, 11, 1, 1\r
+RenderSpriteFromFile 0, 0, 11, 1, 1\r
 GET (1, 1)-(51, 81), TreeSprite\r
 CLS\r
-DrawSprite 0, 0, 12, 1, 1\r
+RenderSpriteFromFile 0, 0, 12, 1, 1\r
 GET (1, 1)-(20, 20), noolt\r
 CLS\r
-DrawSprite 0, 0, 12, 50, 1\r
+RenderSpriteFromFile 0, 0, 12, 50, 1\r
 GET (1, 1)-(20, 20), noolt1\r
 CLS\r
-DrawSprite 0, 0, 13, 1, 1\r
+RenderSpriteFromFile 0, 0, 13, 1, 1\r
 GET (1, 1)-(20, 20), HoleSprite\r
 CLS\r
-DrawSprite 0, 0, 14, 1, 1\r
+RenderSpriteFromFile 0, 0, 14, 1, 1\r
 GET (1, 1)-(20, 20), sipp1\r
 CLS\r
-DrawSprite 0, 0, 15, 1, 1\r
+RenderSpriteFromFile 0, 0, 15, 1, 1\r
 GET (1, 1)-(20, 20), sipp2\r
 CLS\r
-DrawSprite 0, 0, 14, 50, 1\r
+RenderSpriteFromFile 0, 0, 14, 50, 1\r
 GET (1, 1)-(20, 20), sipp10\r
 CLS\r
-DrawSprite 0, 0, 15, 50, 1\r
+RenderSpriteFromFile 0, 0, 15, 50, 1\r
 GET (1, 1)-(20, 20), sipp20\r
 CLS\r
-DrawSprite 0, 0, 16, 1, 1\r
+RenderSpriteFromFile 0, 0, 16, 1, 1\r
 GET (1, 1)-(20, 20), sipp3\r
 CLS\r
 \r
 \r
 ' Capture small scale versions of sprites\r
 GET (1, 1)-(10, 10), EmptySpaceSpriteSmall\r
-DrawSprite 0, 0, 1, 1, 2\r
+RenderSpriteFromFile 0, 0, 1, 1, 2\r
 GET (1, 1)-(10, 10), SolidTerrainSpriteSmall\r
-DrawSprite 0, 0, 4, 1, 2\r
+RenderSpriteFromFile 0, 0, 4, 1, 2\r
 GET (1, 1)-(10, 10), kastm\r
 PUT (1, 180), SolidTerrainSprite, PSET\r
 PUT (300, 1), SolidTerrainSprite, PSET\r
 PUT (300, 180), SolidTerrainSprite, PSET\r
-DrawSprite 30, 50, 2, 1, 2\r
+RenderSpriteFromFile 30, 50, 2, 1, 2\r
 GET (16, 26)-(46, 38), pilvm\r
-DrawSprite 20, 100, 3, 1, 2\r
+RenderSpriteFromFile 20, 100, 3, 1, 2\r
 GET (11, 51)-(16, 72), tahtm\r
 CLS\r
-DrawSprite 0, 0, 5, 1, 2\r
+RenderSpriteFromFile 0, 0, 5, 1, 2\r
 GET (1, 1)-(6, 4), siilm\r
 CLS\r
-DrawSprite 0, 0, 6, 1, 2\r
+RenderSpriteFromFile 0, 0, 6, 1, 2\r
 GET (1, 1)-(4, 5), CoinSpriteSmall\r
 CLS\r
-DrawSprite 0, 0, 7, 1, 2\r
+RenderSpriteFromFile 0, 0, 7, 1, 2\r
 GET (1, 1)-(16, 6), poosasm\r
 CLS\r
-DrawSprite 0, 0, 8, 1, 2\r
+RenderSpriteFromFile 0, 0, 8, 1, 2\r
 GET (1, 1)-(13, 11), WindowSpriteSmall\r
 CLS\r
-DrawSprite 0, 0, 9, 1, 2\r
+RenderSpriteFromFile 0, 0, 9, 1, 2\r
 GET (1, 1)-(11, 6), TrampolineSpriteSmall\r
 CLS\r
-DrawSprite 0, 0, 11, 1, 2\r
+RenderSpriteFromFile 0, 0, 11, 1, 2\r
 GET (1, 1)-(26, 41), TreeSpriteSmall\r
 CLS\r
-DrawSprite 0, 0, 12, 1, 2\r
+RenderSpriteFromFile 0, 0, 12, 1, 2\r
 GET (1, 1)-(10, 10), nooltm\r
 CLS\r
-DrawSprite 0, 0, 12, 50, 2\r
+RenderSpriteFromFile 0, 0, 12, 50, 2\r
 GET (1, 1)-(10, 10), nooltm1\r
 CLS\r
-DrawSprite 0, 0, 13, 1, 2\r
+RenderSpriteFromFile 0, 0, 13, 1, 2\r
 GET (1, 1)-(10, 10), HoleSpriteSmall\r
 CLS\r
-DrawSprite 0, 0, 14, 1, 2\r
+RenderSpriteFromFile 0, 0, 14, 1, 2\r
 GET (1, 1)-(10, 10), sippm1\r
 CLS\r
-DrawSprite 0, 0, 15, 1, 2\r
+RenderSpriteFromFile 0, 0, 15, 1, 2\r
 GET (1, 1)-(10, 10), sippm2\r
 CLS\r
-DrawSprite 0, 0, 14, 50, 2\r
+RenderSpriteFromFile 0, 0, 14, 50, 2\r
 GET (1, 1)-(10, 10), sippm10\r
 CLS\r
-DrawSprite 0, 0, 15, 50, 2\r
+RenderSpriteFromFile 0, 0, 15, 50, 2\r
 GET (1, 1)-(10, 10), sippm20\r
 CLS\r
-DrawSprite 0, 0, 16, 1, 2\r
+RenderSpriteFromFile 0, 0, 16, 1, 2\r
 GET (1, 1)-(10, 10), sippm3\r
 CLS\r
-DrawSprite 0, 0, 17, 1, 1\r
+RenderSpriteFromFile 0, 0, 17, 1, 1\r
 GET (1, 1)-(21, 31), DoorSprite\r
 CLS\r
-DrawSprite 0, 0, 17, 1, 2\r
+RenderSpriteFromFile 0, 0, 17, 1, 2\r
 GET (1, 1)-(11, 16), IntroScreen\r
 CLS\r
 \r
-DrawSprite -1, -1, 10, 4, 1\r
+RenderSpriteFromFile -1, -1, 10, 4, 1\r
 GET (1, 1)-(318, 124), IntroScreen\r
 \r
 key$ = INPUT$(1)\r
@@ -218,8 +217,8 @@ b = 50
 siie = 1\r
 siie1 = 1\r
 MainGameLoop:\r
-kbd$ = INKEY$\r
-IF graphicsMode = 2 THEN b = b * 2: GOTO mainLoopSmallScale\r
+keyboardInput$ = INKEY$\r
+IF GraphicsDisplayMode = 2 THEN b = b * 2: GOTO mainLoopSmallScale\r
 IF b > 0 THEN GET (a, b)-(a + 20, b + 20), mar1\r
 IF b > 0 THEN IF sipp = 1 THEN PUT (a, b), sipp1, OR\r
 IF b > 0 THEN IF sipp = 2 THEN PUT (a, b), sipp2, OR\r
@@ -331,7 +330,7 @@ b = b + all
 IF a > 297 THEN a = 2: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
 \r
 ' Level transition when reaching left edge\r
-IF a < 1 THEN a = 296: IF CurrentLevelNumber% = 1 THEN LoadCurrentLevel CurrentLevelNumber%:  ELSE CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadCurrentLevel CurrentLevelNumber%: IF graphicsMode = 2 THEN a = 594\r
+IF a < 1 THEN a = 296: IF CurrentLevelNumber% = 1 THEN LoadCurrentLevel CurrentLevelNumber%:  ELSE CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadCurrentLevel CurrentLevelNumber%: IF GraphicsDisplayMode = 2 THEN a = 594\r
 \r
 ' Player falls off bottom of screen\r
 IF b > 179 THEN LivesRemaining% = LivesRemaining% - 1: DisplayGameStatistics: CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadCurrentLevel CurrentLevelNumber%: b = 100: a = 2: DisplayGameStatistics\r
@@ -340,23 +339,23 @@ IF b > 179 THEN LivesRemaining% = LivesRemaining% - 1: DisplayGameStatistics: Cu
 IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "u" THEN a = DoorExitX% + 10: b = DoorExitY%: eda = 0\r
 IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "U" THEN a = DoorEntryX% + 10: b = DoorEntryY%: eda = 0\r
 \r
-IF kbd$ = rightArrowKey$ THEN eda = eda + 1: IF eda > 3 THEN eda = 3: r = 0 ELSE IF lke > 10 THEN eda = 5\r
-IF kbd$ = rightArrowKey$ THEN IF sipa = 1 THEN sipp = 1:  ELSE sipp = 2\r
-IF kbd$ = leftArrowKey$ THEN IF sipa = 1 THEN sipp = 10:  ELSE sipp = 20\r
-IF kbd$ = leftArrowKey$ THEN eda = eda - 1: IF eda < -3 THEN eda = -3: r = 0 ELSE IF lke > 10 THEN eda = -5\r
-IF kbd$ = upArrowKey$ AND lk < 10 THEN all = all - 5: lk = 20: r1 = 0: sipp = 3\r
-IF kbd$ = downArrowKey$ THEN all = all + 1\r
-IF kbd$ = "/" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
-IF kbd$ = "+" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 5: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
-IF kbd$ = "q" THEN END\r
+IF keyboardInput$ = rightArrowKey$ THEN eda = eda + 1: IF eda > 3 THEN eda = 3: r = 0 ELSE IF lke > 10 THEN eda = 5\r
+IF keyboardInput$ = rightArrowKey$ THEN IF sipa = 1 THEN sipp = 1:  ELSE sipp = 2\r
+IF keyboardInput$ = leftArrowKey$ THEN IF sipa = 1 THEN sipp = 10:  ELSE sipp = 20\r
+IF keyboardInput$ = leftArrowKey$ THEN eda = eda - 1: IF eda < -3 THEN eda = -3: r = 0 ELSE IF lke > 10 THEN eda = -5\r
+IF keyboardInput$ = upArrowKey$ AND lk < 10 THEN all = all - 5: lk = 20: r1 = 0: sipp = 3\r
+IF keyboardInput$ = downArrowKey$ THEN all = all + 1\r
+IF keyboardInput$ = "/" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
+IF keyboardInput$ = "+" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 5: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
+IF keyboardInput$ = "q" THEN END\r
 sipa = sipa + 1\r
 IF sipa = 3 THEN sipa = 1\r
 GOTO MainGameLoop\r
 \r
 \r
 mainLoopSmallScale:\r
-kbd$ = INKEY$\r
-IF graphicsMode = 1 THEN b = b / 2: GOTO MainGameLoop\r
+keyboardInput$ = INKEY$\r
+IF GraphicsDisplayMode = 1 THEN b = b / 2: GOTO MainGameLoop\r
 IF b > 0 THEN GET (a \ 2, b \ 2)-((a + 20) \ 2, (b + 20) \ 2), marm1\r
 IF b > 0 THEN IF sipp = 1 THEN PUT (a \ 2, b \ 2), sippm1, OR\r
 IF b > 0 THEN IF sipp = 2 THEN PUT (a \ 2, b \ 2), sippm2, OR\r
@@ -464,7 +463,7 @@ b = b + all
 IF a > 594 THEN a = 2: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
 \r
 ' Level transition when reaching left edge\r
-IF a < 1 THEN a = 594: IF CurrentLevelNumber% = 1 THEN LoadCurrentLevel CurrentLevelNumber%:  ELSE CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadCurrentLevel CurrentLevelNumber%: IF graphicsMode = 1 THEN a = 297\r
+IF a < 1 THEN a = 594: IF CurrentLevelNumber% = 1 THEN LoadCurrentLevel CurrentLevelNumber%:  ELSE CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadCurrentLevel CurrentLevelNumber%: IF GraphicsDisplayMode = 1 THEN a = 297\r
 \r
 ' Player falls off bottom of screen\r
 IF b > 358 THEN LivesRemaining% = LivesRemaining% - 1: DisplayGameStatistics: CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadCurrentLevel CurrentLevelNumber%: b = 100: a = 2: DisplayGameStatistics\r
@@ -473,15 +472,15 @@ IF b > 358 THEN LivesRemaining% = LivesRemaining% - 1: DisplayGameStatistics: Cu
 IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "u" THEN a = DoorExitX% + 5: b = DoorExitY%: eda = 0\r
 IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "U" THEN a = DoorEntryX% + 5: b = DoorEntryY%: eda = 0\r
 \r
-IF kbd$ = rightArrowKey$ THEN eda = eda + 1: IF eda > 3 THEN eda = 3: r = 0 ELSE IF lke > 10 THEN eda = 5\r
-IF kbd$ = rightArrowKey$ THEN IF sipa = 1 THEN sipp = 1:  ELSE sipp = 2\r
-IF kbd$ = leftArrowKey$ THEN IF sipa = 1 THEN sipp = 10:  ELSE sipp = 20\r
-IF kbd$ = leftArrowKey$ THEN eda = eda - 1: IF eda < -3 THEN eda = -3: r = 0 ELSE IF lke > 10 THEN eda = -5\r
-IF kbd$ = upArrowKey$ AND lk < 10 THEN all = all - 5: lk = 20: r1 = 0: sipp = 3\r
-IF kbd$ = downArrowKey$ THEN all = all + 1\r
-IF kbd$ = "/" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
-IF kbd$ = "+" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 5: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
-IF kbd$ = "q" THEN END\r
+IF keyboardInput$ = rightArrowKey$ THEN eda = eda + 1: IF eda > 3 THEN eda = 3: r = 0 ELSE IF lke > 10 THEN eda = 5\r
+IF keyboardInput$ = rightArrowKey$ THEN IF sipa = 1 THEN sipp = 1:  ELSE sipp = 2\r
+IF keyboardInput$ = leftArrowKey$ THEN IF sipa = 1 THEN sipp = 10:  ELSE sipp = 20\r
+IF keyboardInput$ = leftArrowKey$ THEN eda = eda - 1: IF eda < -3 THEN eda = -3: r = 0 ELSE IF lke > 10 THEN eda = -5\r
+IF keyboardInput$ = upArrowKey$ AND lk < 10 THEN all = all - 5: lk = 20: r1 = 0: sipp = 3\r
+IF keyboardInput$ = downArrowKey$ THEN all = all + 1\r
+IF keyboardInput$ = "/" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
+IF keyboardInput$ = "+" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 5: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
+IF keyboardInput$ = "q" THEN END\r
 \r
 sipa = sipa + 1\r
 IF sipa = 3 THEN sipa = 1\r
@@ -490,18 +489,18 @@ GOTO mainLoopSmallScale
 \r
 SUB DisplayGameStatistics\r
 '\r
-' Updates and displays the game's status information (coins collected, lives remaining)\r
+' Updates and displays the game's status information (coins, lives)\r
 ' Handles game over condition when lives reach zero.\r
 '\r
-' This subroutine is called whenever the game state changes that affects statistics:\r
-' - When a coin is collected\r
-' - When the player loses a life\r
-' - Periodically during gameplay\r
+' This subroutine is called whenever:\r
+' - A coin is collected\r
+' - The player loses a life (from hazards or falling)\r
+' - Periodically during gameplay for live updates\r
 \r
 LOCATE 1, 1\r
-IF GraphicsMode% = 2 THEN GOTO SkipTextDisplay\r
+IF GraphicsDisplayMode% = 2 THEN GOTO SkipTextDisplay\r
 \r
-' Clear previous stats display\r
+' Clear previous stats display to prevent text overlap\r
 PRINT "                "\r
 \r
 ' Award extra life every 10 coins collected\r
@@ -516,7 +515,7 @@ SkipTextDisplay:
 IF LivesRemaining% < 0 THEN END\r
 END SUB\r
 \r
-SUB DrawSprite (p, o, m, fr, teler)\r
+SUB RenderSpriteFromFile (p, o, m, fr, teler)\r
 ' Renders a sprite on screen loaded from file "img/<m>.i01"\r
 '\r
 ' File format: First line = height (number of rows)\r
@@ -582,7 +581,7 @@ LOCATE 3, 10
 IF y >= 1 AND y <= 18 THEN\r
   fileName$ = "lvl/" + LTRIM$(STR$(y)) + ".lvl"\r
   OPEN fileName$ FOR INPUT AS #1\r
-  INPUT #1, graphicsMode, increment\r
+  INPUT #1, GraphicsDisplayMode, increment\r
   i% = 1\r
   WHILE NOT EOF(1)\r
     LINE INPUT #1, asciiLevelData(i%)\r
@@ -594,7 +593,7 @@ ELSE
   SELECT CASE y\r
   CASE 19\r
     CLS\r
-    DrawSprite 1, 1, 10, 3, 1\r
+    RenderSpriteFromFile 1, 1, 10, 3, 1\r
     LOCATE 20, 1\r
     PRINT "end"\r
     FOR a = 1 TO 50\r
@@ -635,10 +634,10 @@ ELSE
     asciiLevelData(17) = "                               "\r
     asciiLevelData(18) = "                               "\r
     asciiLevelData(19) = "                               "\r
-    graphicsMode = 2\r
+    GraphicsDisplayMode = 2\r
   END SELECT\r
 END IF\r
-IF graphicsMode = 2 THEN GOTO 124\r
+IF GraphicsDisplayMode = 2 THEN GOTO 124\r
 FOR e = 0 TO 9\r
 FOR D = 0 TO 15\r
 q$ = RIGHT$(LEFT$(asciiLevelData(e + 1), D + 1), 1)\r