Better code readability
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Thu, 21 Aug 2025 17:13:56 +0000 (20:13 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Thu, 21 Aug 2025 17:13:56 +0000 (20:13 +0300)
Games/Pomppu Paavo.bas

index 8840726..132000a 100755 (executable)
@@ -228,68 +228,121 @@ IF b > 0 THEN IF sipp = 10 THEN PUT (a, b), sipp10, OR
 IF b > 0 THEN IF sipp = 20 THEN PUT (a, b), sipp20, OR\r
 IF b > 0 THEN IF sipp = 3 THEN PUT (a, b), sipp3, OR\r
 \r
+' Draw first companion hedgehog\r
 GET (FirstCompanionX%, FirstCompanionY%)-(FirstCompanionX% + 10, FirstCompanionY% + 10), siil1\r
 PUT (FirstCompanionX%, FirstCompanionY%), siil, OR\r
+\r
+' Draw second companion hedgehog\r
 GET (SecondCompanionX%, SecondCompanionY%)-(SecondCompanionX% + 10, SecondCompanionY% + 10), siil2\r
 PUT (SecondCompanionX%, SecondCompanionY%), siil, OR\r
+\r
+' Create short delay using sound command (workaround for no built-in delay)\r
 SOUND 0, .8\r
+\r
+' Check collisions with terrain (z = solid block)\r
+' Right side collision checks\r
 IF TerrainGrid((a + 38) \ 20, (b + 37) \ 20) = "z" THEN eda = -1: r = 9: lke = 0\r
 IF TerrainGrid((a + 38) \ 20, (b + 22) \ 20) = "z" THEN eda = -1: r = 9: lke = 0\r
 \r
+' Left side collision checks\r
 IF TerrainGrid((a + 21) \ 20, (b + 22) \ 20) = "z" THEN eda = 1: r = 9: lke = 0\r
 IF TerrainGrid((a + 21) \ 20, (b + 37) \ 20) = "z" THEN eda = 1: r = 9: lke = 0\r
 \r
+' Top collision checks\r
 IF TerrainGrid((a + 22) \ 20, (b + 21) \ 20) = "z" THEN all = 0: cd = 10: lke = 0\r
 IF TerrainGrid((a + 37) \ 20, (b + 21) \ 20) = "z" THEN all = 0: cd = 10: lke = 0\r
 \r
+' Bottom collision checks (landing on ground)\r
 IF TerrainGrid((a + 22) \ 20, (b + 38) \ 20) = "z" THEN all = -1: r1 = 2: lk = 1: lke = 0\r
 IF TerrainGrid((a + 37) \ 20, (b + 38) \ 20) = "z" THEN all = -1: r1 = 2: lk = 1: lke = 0\r
 \r
 qwer = qwer + 1: IF ObjectGrid((a + 30) \ 20, (b + 30) \ 20) = "q" AND qwer > 20 THEN qwer = 1: LivesRemaining% = LivesRemaining% - 1: eda = -10: all = -5: DisplayGameStatistics\r
 IF qwer > 100 THEN qwer = 50\r
-                IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "1" THEN CoinsCollected% = CoinsCollected% + 1: kustuta1 = 1: DisplayGameStatistics: TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = ""\r
+\r
+' Coin collection logic\r
+IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "1" THEN CoinsCollected% = CoinsCollected% + 1: kustuta1 = 1: DisplayGameStatistics: TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = ""\r
+\r
+' Trampoline effect\r
 IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "v" THEN all = -8: sipp = 3\r
+\r
+' Conveyor belt movement triggers\r
 IF ObjectGrid((a + 30) \ 20, (b + 38) \ 20) = ">" THEN eda = 3\r
 IF ObjectGrid((a + 30) \ 20, (b + 38) \ 20) = "<" THEN eda = -3\r
+\r
 lke = lke + 1\r
 r = r + 1: IF r > 10 THEN r = 0: IF eda > 0 THEN eda = eda - 1:  ELSE IF eda < 0 THEN eda = eda + 1\r
 r1 = r1 + 1: IF r1 > 3 THEN r1 = 0: all = all + 1\r
 lk = lk + 1: cd = cd - 1\r
+\r
+' Breakable block interaction\r
 IF ObjectGrid((a + 30) \ 20, (b + 21) \ 20) = "o" THEN TerrainGrid((a + 30) \ 20, (b + 21) \ 20) = "": ObjectGrid((a + 30) \ 20, (b + 21) \ 20) = "": kustuta = 1\r
+\r
 IF ObjectGrid((a + 30) \ 20, (b + 38) \ 20) = "a" THEN TerrainGrid((a + 30) \ 20, (b + 38) \ 20) = "": ObjectGrid((a + 30) \ 20, (b + 38) \ 20) = "": kustuta2 = 1\r
+\r
+' First companion hedgehog terrain collision checks\r
 IF TerrainGrid((FirstCompanionX% + 25) \ 20, (FirstCompanionY% + 25) \ 20) = "z" THEN siiall = -1\r
 IF TerrainGrid((FirstCompanionX% + 30) \ 20, (FirstCompanionY% + 10) \ 20) = "z" THEN siie = -1\r
 IF TerrainGrid((FirstCompanionX% + 20) \ 20, (FirstCompanionY% + 10) \ 20) = "z" THEN siie = 1\r
+\r
+' Second companion hedgehog terrain collision checks\r
 IF TerrainGrid((SecondCompanionX% + 25) \ 20, (SecondCompanionY% + 25) \ 20) = "z" THEN siiall1 = -1\r
 IF TerrainGrid((SecondCompanionX% + 30) \ 20, (SecondCompanionY% + 10) \ 20) = "z" THEN siie1 = -1\r
 IF TerrainGrid((SecondCompanionX% + 20) \ 20, (SecondCompanionY% + 10) \ 20) = "z" THEN siie1 = 1\r
+\r
+' Screen boundary checks for companions\r
 IF FirstCompanionX% > 300 THEN siie = -1\r
 IF FirstCompanionX% < 3 THEN siie = 1\r
 IF SecondCompanionX% > 300 THEN siie1 = -1\r
 IF SecondCompanionX% < 3 THEN siie1 = 1\r
+\r
+' Restore previous companion positions\r
 PUT (SecondCompanionX%, SecondCompanionY%), siil2, PSET\r
 PUT (FirstCompanionX%, FirstCompanionY%), siil1, PSET\r
+\r
+' Restore previous player position\r
 IF b > 0 THEN PUT (a, b), mar1, PSET\r
+\r
+' Handle sprite clearing after coin collection\r
 IF kustuta = 1 THEN kustuta = 0: PUT (((a + 10) \ 20) * 20, (b \ 20) * 20), EmptySpaceSprite, PSET\r
 IF kustuta1 = 1 THEN kustuta1 = 0: PUT (((a + 10) \ 20) * 20, ((b + 10) \ 20) * 20), EmptySpaceSprite, PSET\r
 IF kustuta2 = 1 THEN kustuta2 = 0: PUT (((a + 10) \ 20) * 20, ((b + 28) \ 20) * 20), EmptySpaceSprite, PSET\r
+\r
 IF makk = 1 THEN makk = 0: a = a - 20\r
+\r
 ObjectGrid((SecondCompanionX% + 25) \ 20, (SecondCompanionY% + 8) \ 20) = "": ObjectGrid((FirstCompanionX% + 25) \ 20, (FirstCompanionY% + 8) \ 20) = ""\r
+\r
+' Update companion positions\r
 FirstCompanionX% = FirstCompanionX% + siie\r
 FirstCompanionY% = FirstCompanionY% + siiall\r
 SecondCompanionX% = SecondCompanionX% + siie1\r
 SecondCompanionY% = SecondCompanionY% + siiall1\r
+\r
+' Mark new companion positions in object grid\r
 ObjectGrid((SecondCompanionX% + 25) \ 20, (SecondCompanionY% + 8) \ 20) = "q": ObjectGrid((FirstCompanionX% + 25) \ 20, (FirstCompanionY% + 8) \ 20) = "q"\r
+\r
+' Apply gravity to companions (max downward velocity = 2)\r
 siiall = siiall + 1: IF siiall > 2 THEN siiall = 2\r
 siiall1 = siiall1 + 1: IF siiall1 > 2 THEN siiall1 = 2\r
+\r
+' Update player position based on velocity\r
 a = a + eda\r
 b = b + all\r
+\r
+' Level transition when reaching right edge\r
 IF a > 297 THEN a = 2: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadLevel CurrentLevelNumber%: siie = 1: siie1 = 1\r
+\r
+' Level transition when reaching left edge\r
 IF a < 1 THEN a = 296: IF CurrentLevelNumber% = 1 THEN LoadLevel CurrentLevelNumber%:  ELSE CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadLevel CurrentLevelNumber%: IF graphicsMode = 2 THEN a = 594\r
+\r
+' Player falls off bottom of screen\r
 IF b > 179 THEN LivesRemaining% = LivesRemaining% - 1: DisplayGameStatistics: CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadLevel CurrentLevelNumber%: b = 100: a = 2: DisplayGameStatistics\r
+\r
+' Teleportation triggers ("u" and "U" markers in level data)\r
 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
 WEND\r
+\r
 a$ = kbd$: kbd$ = ""\r
 IF a$ = rightArrowKey$ THEN eda = eda + 1: IF eda > 3 THEN eda = 3: r = 0 ELSE IF lke > 10 THEN eda = 5\r
 IF a$ = rightArrowKey$ THEN IF sipa = 1 THEN sipp = 1:  ELSE sipp = 2\r