From f52498274d8b2dcab0a846ed44662138762c629c Mon Sep 17 00:00:00 2001 From: Svjatoslav Agejenko Date: Sun, 24 Aug 2025 22:06:49 +0300 Subject: [PATCH] Better code readability --- Games/Pomppu Paavo/Pomppu Paavo.bas | 131 +++++++++++++++------------- 1 file changed, 68 insertions(+), 63 deletions(-) diff --git a/Games/Pomppu Paavo/Pomppu Paavo.bas b/Games/Pomppu Paavo/Pomppu Paavo.bas index 907daef..edba001 100755 --- a/Games/Pomppu Paavo/Pomppu Paavo.bas +++ b/Games/Pomppu Paavo/Pomppu Paavo.bas @@ -1,3 +1,4 @@ +DECLARE SUB RenderSpriteFromFile (p%, o%, m%, fr%, teler%) ' Pomppu Paavo ' ' This program is free software: released under Creative Commons Zero (CC0) license @@ -215,7 +216,7 @@ LoadCurrentLevel 1 a = 50 b = 50 siie = 1 -siie1 = 1 +Companion2HorizontalVelocity = 1 MainGameLoop: keyboardInput$ = INKEY$ IF GraphicsDisplayMode = 2 THEN b = b * 2: GOTO SmallScaleGameLoop @@ -284,14 +285,14 @@ IF TerrainGrid((Companion1PositionX% + 20) \ 20, (Companion1PositionY% + 10) \ 2 ' Second companion hedgehog terrain collision checks IF TerrainGrid((Companion2PositionX% + 25) \ 20, (Companion2PositionY% + 25) \ 20) = "z" THEN siiall1 = -1 -IF TerrainGrid((Companion2PositionX% + 30) \ 20, (Companion2PositionY% + 10) \ 20) = "z" THEN siie1 = -1 -IF TerrainGrid((Companion2PositionX% + 20) \ 20, (Companion2PositionY% + 10) \ 20) = "z" THEN siie1 = 1 +IF TerrainGrid((Companion2PositionX% + 30) \ 20, (Companion2PositionY% + 10) \ 20) = "z" THEN Companion2HorizontalVelocity = -1 +IF TerrainGrid((Companion2PositionX% + 20) \ 20, (Companion2PositionY% + 10) \ 20) = "z" THEN Companion2HorizontalVelocity = 1 ' Screen boundary checks for companions IF Companion1PositionX% > 300 THEN siie = -1 IF Companion1PositionX% < 3 THEN siie = 1 -IF Companion2PositionX% > 300 THEN siie1 = -1 -IF Companion2PositionX% < 3 THEN siie1 = 1 +IF Companion2PositionX% > 300 THEN Companion2HorizontalVelocity = -1 +IF Companion2PositionX% < 3 THEN Companion2HorizontalVelocity = 1 ' Restore previous companion positions PUT (Companion2PositionX%, Companion2PositionY%), HedgehogSprite2, PSET @@ -312,7 +313,7 @@ ObjectGrid((Companion2PositionX% + 25) \ 20, (Companion2PositionY% + 8) \ 20) = ' Update companion positions Companion1PositionX% = Companion1PositionX% + siie Companion1PositionY% = Companion1PositionY% + siiall -Companion2PositionX% = Companion2PositionX% + siie1 +Companion2PositionX% = Companion2PositionX% + Companion2HorizontalVelocity Companion2PositionY% = Companion2PositionY% + siiall1 ' Mark new companion positions in object grid @@ -327,7 +328,7 @@ a = a + eda b = b + all ' Level transition when reaching right edge -IF a > 297 THEN a = 2: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1 +IF a > 297 THEN a = 2: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: Companion2HorizontalVelocity = 1 ' Level transition when reaching left edge IF a < 1 THEN a = 296: IF CurrentLevelNumber% = 1 THEN LoadCurrentLevel CurrentLevelNumber%: ELSE CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadCurrentLevel CurrentLevelNumber%: IF GraphicsDisplayMode = 2 THEN a = 594 @@ -345,8 +346,8 @@ IF keyboardInput$ = leftArrowKey$ THEN IF sipa = 1 THEN sipp = 10: ELSE sipp = IF keyboardInput$ = leftArrowKey$ THEN eda = eda - 1: IF eda < -3 THEN eda = -3: r = 0 ELSE IF lke > 10 THEN eda = -5 IF keyboardInput$ = upArrowKey$ AND lk < 10 THEN all = all - 5: lk = 20: r1 = 0: sipp = 3 IF keyboardInput$ = downArrowKey$ THEN all = all + 1 -IF keyboardInput$ = "/" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1 -IF keyboardInput$ = "+" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 5: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1 +IF keyboardInput$ = "/" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: Companion2HorizontalVelocity = 1 +IF keyboardInput$ = "+" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 5: LoadCurrentLevel CurrentLevelNumber%: siie = 1: Companion2HorizontalVelocity = 1 IF keyboardInput$ = "q" THEN END sipa = sipa + 1 IF sipa = 3 THEN sipa = 1 @@ -366,13 +367,16 @@ IF b > 0 THEN IF sipp = 3 THEN PUT (a \ 2, b \ 2), sippm3, OR ' Draw companions in scaled down mode GET (Companion1PositionX% \ 2, Companion1PositionY% \ 2)-((Companion1PositionX% + 10) \ 2, (Companion1PositionY% + 10) \ 2), HedgehogSpriteSmall1 PUT (Companion1PositionX% \ 2, Companion1PositionY% \ 2), HedgehogSpriteSmall, OR -GET (Companion2PositionX% \ 2, Companion2PositionY% \ 2)-((siia1 + 10) \ 2, (Companion2PositionY% + 10) \ 2), HedgehogSpriteSmall2 +GET (Companion2PositionX% \ 2, Companion2PositionY% \ 2)-((Companion2PositionX% + 10) \ 2, (Companion2PositionY% + 10) \ 2), HedgehogSpriteSmall2 PUT (Companion2PositionX% \ 2, Companion2PositionY% \ 2), HedgehogSpriteSmall, OR ' Small delay to limit framerate SOUND 0, .8 -' Check collisions with terrain (z = solid block) +' Collision detection system for small scale graphics mode. +' (z = solid block) +' Note: All coordinates are halved compared to normal scale + ' Right side collision checks IF TerrainGrid((a + 38) \ 20, (b + 37) \ 20) = "z" THEN eda = -1: r = 9: lke = 0 IF TerrainGrid((a + 38) \ 20, (b + 22) \ 20) = "z" THEN eda = -1: r = 9: lke = 0 @@ -419,14 +423,14 @@ IF TerrainGrid((Companion1PositionX% + 20) \ 20, (Companion1PositionY% + 10) \ 2 ' Second companion hedgehog terrain collision checks IF TerrainGrid((Companion2PositionX% + 25) \ 20, (Companion2PositionY% + 25) \ 20) = "z" THEN siiall1 = -1 -IF TerrainGrid((Companion2PositionX% + 30) \ 20, (Companion2PositionY% + 10) \ 20) = "z" THEN siie1 = -1 -IF TerrainGrid((Companion2PositionX% + 20) \ 20, (Companion2PositionY% + 10) \ 20) = "z" THEN siie1 = 1 +IF TerrainGrid((Companion2PositionX% + 30) \ 20, (Companion2PositionY% + 10) \ 20) = "z" THEN Companion2HorizontalVelocity = -1 +IF TerrainGrid((Companion2PositionX% + 20) \ 20, (Companion2PositionY% + 10) \ 20) = "z" THEN Companion2HorizontalVelocity = 1 ' Screen boundary checks for companions IF Companion1PositionX% > 600 THEN siie = -1 IF Companion1PositionX% < 3 THEN siie = 1 -IF Companion2PositionX% > 600 THEN siie1 = -1 -IF Companion2PositionX% < 3 THEN siie1 = 1 +IF Companion2PositionX% > 600 THEN Companion2HorizontalVelocity = -1 +IF Companion2PositionX% < 3 THEN Companion2HorizontalVelocity = 1 ' Restore previous companion positions PUT (Companion2PositionX% \ 2, Companion2PositionY% \ 2), HedgehogSpriteSmall2, PSET @@ -447,7 +451,7 @@ ObjectGrid((Companion2PositionX% + 25) \ 20, (Companion2PositionY% + 8) \ 20) = ' Update companion positions Companion1PositionX% = Companion1PositionX% + siie Companion1PositionY% = Companion1PositionY% + siiall -Companion2PositionX% = Companion2PositionX% + siie1 +Companion2PositionX% = Companion2PositionX% + Companion2HorizontalVelocity Companion2PositionY% = Companion2PositionY% + siiall1 ' Mark new companion positions in object grid @@ -460,7 +464,7 @@ a = a + eda b = b + all ' Level transition when reaching right edge -IF a > 594 THEN a = 2: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1 +IF a > 594 THEN a = 2: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: Companion2HorizontalVelocity = 1 ' Level transition when reaching left edge IF a < 1 THEN a = 594: IF CurrentLevelNumber% = 1 THEN LoadCurrentLevel CurrentLevelNumber%: ELSE CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadCurrentLevel CurrentLevelNumber%: IF GraphicsDisplayMode = 1 THEN a = 297 @@ -478,8 +482,8 @@ IF keyboardInput$ = leftArrowKey$ THEN IF sipa = 1 THEN sipp = 10: ELSE sipp = IF keyboardInput$ = leftArrowKey$ THEN eda = eda - 1: IF eda < -3 THEN eda = -3: r = 0 ELSE IF lke > 10 THEN eda = -5 IF keyboardInput$ = upArrowKey$ AND lk < 10 THEN all = all - 5: lk = 20: r1 = 0: sipp = 3 IF keyboardInput$ = downArrowKey$ THEN all = all + 1 -IF keyboardInput$ = "/" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1 -IF keyboardInput$ = "+" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 5: LoadCurrentLevel CurrentLevelNumber%: siie = 1: siie1 = 1 +IF keyboardInput$ = "/" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: siie = 1: Companion2HorizontalVelocity = 1 +IF keyboardInput$ = "+" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 5: LoadCurrentLevel CurrentLevelNumber%: siie = 1: Companion2HorizontalVelocity = 1 IF keyboardInput$ = "q" THEN END sipa = sipa + 1 @@ -515,49 +519,6 @@ SkipTextDisplay: IF LivesRemaining% < 0 THEN END END SUB -SUB RenderSpriteFromFile (p, o, m, fr, teler) -' Renders a sprite on screen loaded from file "img/.i01" -' -' File format: First line = height (number of rows) -' Subsequent lines = strings of digit characters ('0'-'3') representing pixel colors -DIM rowText AS STRING -fileName$ = "img/" + LTRIM$(STR$(m)) + ".i01" -OPEN fileName$ FOR INPUT AS #1 -INPUT #1, height% -DIM ao(1 TO 100) AS STRING -FOR a = 1 TO height% -LINE INPUT #1, ao(a) -NEXT a -CLOSE #1 -IF fr = 50 THEN GOTO DrawFlippedSprite -IF fr > 1 THEN GOTO DrawScaledSprite -FOR a = 1 TO 100 ' Normal sprite -IF ao(a) = "" THEN GOTO FinishDrawing -FOR b = 1 TO LEN(ao(a)) -PSET ((p + b) \ teler, (o + a) \ teler), ASC(RIGHT$(LEFT$(ao(a), b), 1)) - 48 -NEXT b -NEXT a -GOTO FinishDrawing -DrawScaledSprite: ' Scaled sprite -FOR a = 1 TO 100 -IF ao(a) = "" THEN GOTO FinishDrawing -FOR b = 1 TO LEN(ao(a)) -c = ASC(RIGHT$(LEFT$(ao(a), b), 1)) - 48 -LINE (p + (b * fr), o + (a * fr))-(p + (b * fr) + fr, o + (a * fr) + fr), c, BF -NEXT b -NEXT a -GOTO FinishDrawing -DrawFlippedSprite: ' Horizontally flipped sprite -FOR a = 1 TO 100 -IF ao(a) = "" THEN GOTO FinishDrawing -FOR b = 1 TO LEN(ao(a)) -PSET ((p + (LEN(ao(a)) - b + 1)) \ teler, (o + a) \ teler), ASC(RIGHT$(LEFT$(ao(a), b), 1)) - 48 -NEXT b -NEXT a -FinishDrawing: -ERASE ao -END SUB - SUB LoadCurrentLevel (y) 125 Companion1PositionX% = 0 @@ -683,4 +644,48 @@ IF q$ = "U" THEN PUT (D * 10, e * 10), DoorSpriteSmall, PSET: TerrainGrid(D + 1, NEXT D NEXT e 123 -END SUB \ No newline at end of file +END SUB + +SUB RenderSpriteFromFile (p, o, m, fr, teler) +' Renders a sprite on screen loaded from file "img/.i01" +' +' File format: First line = height (number of rows) +' Subsequent lines = strings of digit characters ('0'-'3') representing pixel colors +DIM rowText AS STRING +fileName$ = "img/" + LTRIM$(STR$(m)) + ".i01" +OPEN fileName$ FOR INPUT AS #1 +INPUT #1, height% +DIM ao(1 TO 100) AS STRING +FOR a = 1 TO height% +LINE INPUT #1, ao(a) +NEXT a +CLOSE #1 +IF fr = 50 THEN GOTO DrawFlippedSprite +IF fr > 1 THEN GOTO DrawScaledSprite +FOR a = 1 TO 100 ' Normal sprite +IF ao(a) = "" THEN GOTO FinishDrawing +FOR b = 1 TO LEN(ao(a)) +PSET ((p + b) \ teler, (o + a) \ teler), ASC(RIGHT$(LEFT$(ao(a), b), 1)) - 48 +NEXT b +NEXT a +GOTO FinishDrawing +DrawScaledSprite: ' Scaled sprite +FOR a = 1 TO 100 +IF ao(a) = "" THEN GOTO FinishDrawing +FOR b = 1 TO LEN(ao(a)) +c = ASC(RIGHT$(LEFT$(ao(a), b), 1)) - 48 +LINE (p + (b * fr), o + (a * fr))-(p + (b * fr) + fr, o + (a * fr) + fr), c, BF +NEXT b +NEXT a +GOTO FinishDrawing +DrawFlippedSprite: ' Horizontally flipped sprite +FOR a = 1 TO 100 +IF ao(a) = "" THEN GOTO FinishDrawing +FOR b = 1 TO LEN(ao(a)) +PSET ((p + (LEN(ao(a)) - b + 1)) \ teler, (o + a) \ teler), ASC(RIGHT$(LEFT$(ao(a), b), 1)) - 48 +NEXT b +NEXT a +FinishDrawing: +ERASE ao +END SUB + -- 2.20.1