From c8a0b342375506fbf86dc6297ed231d8b06111d9 Mon Sep 17 00:00:00 2001 From: Svjatoslav Agejenko Date: Tue, 26 Aug 2025 00:27:56 +0300 Subject: [PATCH] Simplified game --- Games/Pomppu Paavo/Pomppu Paavo.bas | 316 +++------------------------- Games/Pomppu Paavo/lvl/16.lvl | 20 -- Games/Pomppu Paavo/lvl/17.lvl | 11 - Games/Pomppu Paavo/lvl/18.lvl | 20 -- 4 files changed, 24 insertions(+), 343 deletions(-) delete mode 100644 Games/Pomppu Paavo/lvl/16.lvl delete mode 100644 Games/Pomppu Paavo/lvl/17.lvl delete mode 100644 Games/Pomppu Paavo/lvl/18.lvl diff --git a/Games/Pomppu Paavo/Pomppu Paavo.bas b/Games/Pomppu Paavo/Pomppu Paavo.bas index 26dcfee..dc50880 100755 --- a/Games/Pomppu Paavo/Pomppu Paavo.bas +++ b/Games/Pomppu Paavo/Pomppu Paavo.bas @@ -1,4 +1,4 @@ -DECLARE SUB RenderSpriteFromFile (p%, O%, m%, fr%, teler%) +DECLARE SUB RenderSpriteFromFile (x%, y%, spriteID%, animationFrame%) ' Pomppu Paavo ' ' This program is free software: released under Creative Commons Zero (CC0) license @@ -15,7 +15,6 @@ DECLARE SUB DisplayGameStatistics () DECLARE SUB LoadCurrentLevel (y%) DEFINT A-Z -DIM SHARED GraphicsDisplayMode DIM SHARED AsciiLevelData(1 TO 20) AS STRING * 31 DIM SHARED Companion1PositionY%, Companion1PositionX%, Companion2PositionY%, Companion2PositionX% DIM SHARED LivesRemaining%, CoinsCollected% @@ -50,31 +49,6 @@ DIM SHARED PlayerRunLeft2Sprite(51) DIM SHARED PlayerJumpingSprite(51) DIM SHARED DoorSprite(120) -' Small scale sprites (mostly 10x10 pixels) - denoted with "Small" suffix -DIM SHARED SolidTerrainSpriteSmall(51) -DIM SHARED EmptySpaceSpriteSmall(51) -DIM SHARED BoxSpriteSmall(51) -DIM SHARED PlayerSpriteBufferSmall(70) -DIM SHARED CloudSpriteSmall(209) -DIM SHARED StarSpriteSmall(50) -DIM SHARED HedgehogSpriteSmall(30) -DIM SHARED HedgehogSpriteSmall1(30) -DIM SHARED HedgehogSpriteSmall2(30) -DIM SHARED CoinSpriteSmall(30) -DIM SHARED BushSpriteSmall(100) -DIM SHARED WindowSpriteSmall(100) -DIM SHARED TrampolineSpriteSmall(50) -DIM SHARED TreeSpriteSmall(3000) -DIM SHARED RightArrowSpriteSmall(51) -DIM SHARED LeftArrowSpriteSmall(51) -DIM SHARED HoleSpriteSmall(51) -DIM SHARED PlayerRunRight1SpriteSmall(51) -DIM SHARED PlayerRunRight2SpriteSmall(51) -DIM SHARED PlayerRunLeft1SpriteSmall(51) -DIM SHARED PlayerRunLeft2SpriteSmall(51) -DIM SHARED PlayerJumpingSpriteSmall(51) -DIM SHARED DoorSpriteSmall(50) - ' Define keyboard control sequences leftArrowKey$ = CHR$(0) + "K" rightArrowKey$ = CHR$(0) + "M" @@ -89,127 +63,64 @@ CurrentLevelNumber% = 1 ' Capture sprite images from screen drawing operations. ' This technique uses GET command to save drawn graphics into arrays. GET (1, 1)-(20, 20), EmptySpaceSprite -RenderSpriteFromFile 0, 0, 1, 1, 1 +RenderSpriteFromFile 0, 0, 1, 1 GET (1, 1)-(20, 20), SolidTerrainSprite -RenderSpriteFromFile 0, 0, 4, 1, 1 +RenderSpriteFromFile 0, 0, 4, 1 GET (1, 1)-(20, 20), BoxSprite PUT (1, 180), SolidTerrainSprite, PSET PUT (300, 1), SolidTerrainSprite, PSET PUT (300, 180), SolidTerrainSprite, PSET -RenderSpriteFromFile 30, 50, 2, 1, 1 +RenderSpriteFromFile 30, 50, 2, 1 GET (31, 51)-(91, 76), CloudSprite PUT (160, 10), CloudSprite, PSET -RenderSpriteFromFile 20, 100, 3, 1, 1 +RenderSpriteFromFile 20, 100, 3, 1 GET (21, 101)-(31, 114), StarSprite CLS -RenderSpriteFromFile 0, 0, 5, 1, 1 +RenderSpriteFromFile 0, 0, 5, 1 GET (1, 1)-(11, 8), HedgehogSprite CLS -RenderSpriteFromFile 0, 0, 6, 1, 1 +RenderSpriteFromFile 0, 0, 6, 1 GET (1, 1)-(8, 10), CoinSprite CLS -RenderSpriteFromFile 0, 0, 7, 1, 1 +RenderSpriteFromFile 0, 0, 7, 1 GET (1, 1)-(31, 11), BushSprite CLS -RenderSpriteFromFile 0, 0, 8, 1, 1 +RenderSpriteFromFile 0, 0, 8, 1 GET (1, 1)-(26, 21), WindowSprite CLS -RenderSpriteFromFile 0, 0, 9, 1, 1 +RenderSpriteFromFile 0, 0, 9, 1 GET (1, 1)-(21, 11), TrampolineSprite CLS -RenderSpriteFromFile 0, 0, 11, 1, 1 +RenderSpriteFromFile 0, 0, 11, 1 GET (1, 1)-(51, 81), TreeSprite CLS -RenderSpriteFromFile 0, 0, 12, 1, 1 +RenderSpriteFromFile 0, 0, 12, 1 GET (1, 1)-(20, 20), RightArrowSprite CLS -RenderSpriteFromFile 0, 0, 12, 50, 1 +RenderSpriteFromFile 0, 0, 12, 50 GET (1, 1)-(20, 20), LeftArrowSprite CLS -RenderSpriteFromFile 0, 0, 13, 1, 1 +RenderSpriteFromFile 0, 0, 13, 1 GET (1, 1)-(20, 20), HoleSprite CLS -RenderSpriteFromFile 0, 0, 14, 1, 1 +RenderSpriteFromFile 0, 0, 14, 1 GET (1, 1)-(20, 20), PlayerRunRight1Sprite CLS -RenderSpriteFromFile 0, 0, 15, 1, 1 +RenderSpriteFromFile 0, 0, 15, 1 GET (1, 1)-(20, 20), PlayerRunRight2Sprite CLS -RenderSpriteFromFile 0, 0, 14, 50, 1 +RenderSpriteFromFile 0, 0, 14, 50 GET (1, 1)-(20, 20), PlayerRunLeft1Sprite CLS -RenderSpriteFromFile 0, 0, 15, 50, 1 +RenderSpriteFromFile 0, 0, 15, 50 GET (1, 1)-(20, 20), PlayerRunLeft2Sprite CLS -RenderSpriteFromFile 0, 0, 16, 1, 1 +RenderSpriteFromFile 0, 0, 16, 1 GET (1, 1)-(20, 20), PlayerJumpingSprite CLS -' Capture small scale versions of sprites (half size) -GET (1, 1)-(10, 10), EmptySpaceSpriteSmall -RenderSpriteFromFile 0, 0, 1, 1, 2 -GET (1, 1)-(10, 10), SolidTerrainSpriteSmall -RenderSpriteFromFile 0, 0, 4, 1, 2 -GET (1, 1)-(10, 10), BoxSpriteSmall -PUT (1, 180), SolidTerrainSprite, PSET -PUT (300, 1), SolidTerrainSprite, PSET -PUT (300, 180), SolidTerrainSprite, PSET -RenderSpriteFromFile 30, 50, 2, 1, 2 -GET (16, 26)-(46, 38), CloudSpriteSmall -RenderSpriteFromFile 20, 100, 3, 1, 2 -GET (11, 51)-(16, 72), StarSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 5, 1, 2 -GET (1, 1)-(6, 4), HedgehogSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 6, 1, 2 -GET (1, 1)-(4, 5), CoinSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 7, 1, 2 -GET (1, 1)-(16, 6), BushSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 8, 1, 2 -GET (1, 1)-(13, 11), WindowSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 9, 1, 2 -GET (1, 1)-(11, 6), TrampolineSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 11, 1, 2 -GET (1, 1)-(26, 41), TreeSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 12, 1, 2 -GET (1, 1)-(10, 10), RightArrowSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 12, 50, 2 -GET (1, 1)-(10, 10), LeftArrowSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 13, 1, 2 -GET (1, 1)-(10, 10), HoleSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 14, 1, 2 -GET (1, 1)-(10, 10), PlayerRunRight1SpriteSmall -CLS -RenderSpriteFromFile 0, 0, 15, 1, 2 -GET (1, 1)-(10, 10), PlayerRunRight2SpriteSmall -CLS -RenderSpriteFromFile 0, 0, 14, 50, 2 -GET (1, 1)-(10, 10), PlayerRunLeft1SpriteSmall -CLS -RenderSpriteFromFile 0, 0, 15, 50, 2 -GET (1, 1)-(10, 10), PlayerRunLeft2SpriteSmall -CLS -RenderSpriteFromFile 0, 0, 16, 1, 2 -GET (1, 1)-(10, 10), PlayerJumpingSpriteSmall -CLS -RenderSpriteFromFile 0, 0, 17, 1, 1 -GET (1, 1)-(21, 31), DoorSprite -CLS -RenderSpriteFromFile 0, 0, 17, 1, 2 -GET (1, 1)-(11, 16), IntroScreen -CLS - -RenderSpriteFromFile -1, -1, 10, 4, 1 +RenderSpriteFromFile -1, -1, 10, 4 GET (1, 1)-(318, 124), IntroScreen key$ = INPUT$(1) @@ -221,7 +132,6 @@ Companion1HorizontalVelocity = 1 Companion2HorizontalVelocity = 1 MainGameLoop: keyboardInput$ = INKEY$ -IF GraphicsDisplayMode = 2 THEN b = b * 2: GOTO SmallScaleGameLoop IF b > 0 THEN GET (a, b)-(a + 20, b + 20), PlayerSpriteBuffer IF b > 0 THEN IF PlayerAnimationState = 1 THEN PUT (a, b), PlayerRunRight1Sprite, OR IF b > 0 THEN IF PlayerAnimationState = 2 THEN PUT (a, b), PlayerRunRight2Sprite, OR @@ -356,144 +266,6 @@ sipa = sipa + 1 IF sipa = 3 THEN sipa = 1 GOTO MainGameLoop - -SmallScaleGameLoop: -keyboardInput$ = INKEY$ -IF GraphicsDisplayMode = 1 THEN b = b / 2: GOTO MainGameLoop -IF b > 0 THEN GET (a \ 2, b \ 2)-((a + 20) \ 2, (b + 20) \ 2), PlayerSpriteBufferSmall -IF b > 0 THEN IF PlayerAnimationState = 1 THEN PUT (a \ 2, b \ 2), PlayerRunRight1SpriteSmall, OR -IF b > 0 THEN IF PlayerAnimationState = 2 THEN PUT (a \ 2, b \ 2), PlayerRunRight2SpriteSmall, OR -IF b > 0 THEN IF PlayerAnimationState = 10 THEN PUT (a \ 2, b \ 2), PlayerRunLeft1SpriteSmall, OR -IF b > 0 THEN IF PlayerAnimationState = 20 THEN PUT (a \ 2, b \ 2), PlayerRunLeft2SpriteSmall, OR -IF b > 0 THEN IF PlayerAnimationState = 3 THEN PUT (a \ 2, b \ 2), PlayerJumpingSpriteSmall, 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)-((Companion2PositionX% + 10) \ 2, (Companion2PositionY% + 10) \ 2), HedgehogSpriteSmall2 -PUT (Companion2PositionX% \ 2, Companion2PositionY% \ 2), HedgehogSpriteSmall, OR - -' Small delay to limit framerate -SOUND 0, .8 - -' 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 - -' Left side collision checks -IF TerrainGrid((a + 21) \ 20, (b + 22) \ 20) = "z" THEN eda = 1: r = 9: lke = 0 -IF TerrainGrid((a + 21) \ 20, (b + 37) \ 20) = "z" THEN eda = 1: r = 9: lke = 0 - -' Top collision checks -IF TerrainGrid((a + 22) \ 20, (b + 21) \ 20) = "z" THEN all = 0: cd = 10: lke = 0 -IF TerrainGrid((a + 37) \ 20, (b + 21) \ 20) = "z" THEN all = 0: cd = 10: lke = 0 - -' Bottom collision checks (landing on ground) -IF TerrainGrid((a + 22) \ 20, (b + 38) \ 20) = "z" THEN all = -1: r1 = 2: lk = 1: lke = 0 -IF TerrainGrid((a + 37) \ 20, (b + 38) \ 20) = "z" THEN all = -1: r1 = 2: lk = 1: lke = 0 - -qwer = qwer + 1: IF ObjectGrid((a + 30) \ 20, (b + 30) \ 20) = "q" AND qwer > 20 THEN qwer = 1: LivesRemaining% = LivesRemaining% - 1: eda = -5: all = -3: DisplayGameStatistics -IF qwer > 100 THEN qwer = 50 - -' Coin collection logic -IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "1" THEN CoinsCollected% = CoinsCollected% + 1: kustuta1 = 1: DisplayGameStatistics: TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "" - -' Trampoline effect -IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "v" THEN all = -8: PlayerAnimationState = 3 - -' Conveyor belt movement triggers -IF ObjectGrid((a + 30) \ 20, (b + 38) \ 20) = ">" THEN eda = 3 -IF ObjectGrid((a + 30) \ 20, (b + 38) \ 20) = "<" THEN eda = -3 - -lke = lke + 1 -r = r + 1: IF r > 10 THEN r = 0: IF eda > 0 THEN eda = eda - 1: ELSE IF eda < 0 THEN eda = eda + 1 -r1 = r1 + 1: IF r1 > 3 THEN r1 = 0: all = all + 1 -lk = lk + 1: cd = cd - 1 - -' Breakable block interaction -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 - -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 - -' First companion hedgehog terrain collision checks -IF TerrainGrid((Companion1PositionX% + 25) \ 20, (Companion1PositionY% + 25) \ 20) = "z" THEN Companion1VerticalVelocity = -1 -IF TerrainGrid((Companion1PositionX% + 30) \ 20, (Companion1PositionY% + 10) \ 20) = "z" THEN Companion1HorizontalVelocity = -1 -IF TerrainGrid((Companion1PositionX% + 20) \ 20, (Companion1PositionY% + 10) \ 20) = "z" THEN Companion1HorizontalVelocity = 1 - -' Second companion hedgehog terrain collision checks -IF TerrainGrid((Companion2PositionX% + 25) \ 20, (Companion2PositionY% + 25) \ 20) = "z" THEN Companion2VerticalVelocity = -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 Companion1HorizontalVelocity = -1 -IF Companion1PositionX% < 3 THEN Companion1HorizontalVelocity = 1 -IF Companion2PositionX% > 600 THEN Companion2HorizontalVelocity = -1 -IF Companion2PositionX% < 3 THEN Companion2HorizontalVelocity = 1 - -' Restore previous companion positions -PUT (Companion2PositionX% \ 2, Companion2PositionY% \ 2), HedgehogSpriteSmall2, PSET -PUT (Companion1PositionX% \ 2, Companion1PositionY% \ 2), HedgehogSpriteSmall1, PSET - -' Restore previous player position -IF b > 0 THEN PUT (a \ 2, b \ 2), PlayerSpriteBufferSmall, PSET - -' Handle sprite clearing after coin collection -IF kustuta = 1 THEN kustuta = 0: PUT (((a + 10) \ 20) * 10, (b \ 20) * 10), EmptySpaceSpriteSmall, PSET -IF kustuta1 = 1 THEN kustuta1 = 0: PUT (((a + 10) \ 20) * 10, ((b + 10) \ 20) * 10), EmptySpaceSpriteSmall, PSET -IF kustuta2 = 1 THEN kustuta2 = 0: PUT (((a + 10) \ 20) * 10, ((b + 28) \ 20) * 10), EmptySpaceSpriteSmall, PSET - -IF makk = 1 THEN makk = 0: a = a - 20 - -ObjectGrid((Companion2PositionX% + 25) \ 20, (Companion2PositionY% + 8) \ 20) = "": ObjectGrid((Companion1PositionX% + 25) \ 20, (Companion1PositionY% + 8) \ 20) = "" - -' Update companion positions -Companion1PositionX% = Companion1PositionX% + Companion1HorizontalVelocity -Companion1PositionY% = Companion1PositionY% + Companion1VerticalVelocity -Companion2PositionX% = Companion2PositionX% + Companion2HorizontalVelocity -Companion2PositionY% = Companion2PositionY% + Companion2VerticalVelocity - -' Mark new companion positions in object grid -ObjectGrid((Companion2PositionX% + 25) \ 20, (Companion2PositionY% + 8) \ 20) = "q": ObjectGrid((Companion1PositionX% + 25) \ 20, (Companion1PositionY% + 8) \ 20) = "q" -Companion1VerticalVelocity = Companion1VerticalVelocity + 1: IF Companion1VerticalVelocity > 2 THEN Companion1VerticalVelocity = 2 -Companion2VerticalVelocity = Companion2VerticalVelocity + 1: IF Companion2VerticalVelocity > 2 THEN Companion2VerticalVelocity = 2 - -' Update player position based on velocity -a = a + eda -b = b + all - -' Level transition when reaching right edge -IF a > 594 THEN a = 2: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: Companion1HorizontalVelocity = 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 - -' Player falls off bottom of screen -IF b > 358 THEN LivesRemaining% = LivesRemaining% - 1: DisplayGameStatistics: CurrentLevelNumber% = CurrentLevelNumber% - 1: LoadCurrentLevel CurrentLevelNumber%: b = 100: a = 2: DisplayGameStatistics - -' Teleportation triggers ("u" and "U" markers in level data) -IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "u" THEN a = DoorExitX% + 5: b = DoorExitY%: eda = 0 -IF TerrainGrid((a + 30) \ 20, (b + 30) \ 20) = "U" THEN a = DoorEntryX% + 5: b = DoorEntryY%: eda = 0 - -IF keyboardInput$ = rightArrowKey$ THEN eda = eda + 1: IF eda > 3 THEN eda = 3: r = 0 ELSE IF lke > 10 THEN eda = 5 -IF keyboardInput$ = rightArrowKey$ THEN IF sipa = 1 THEN PlayerAnimationState = 1: ELSE PlayerAnimationState = 2 -IF keyboardInput$ = leftArrowKey$ THEN IF sipa = 1 THEN PlayerAnimationState = 10: ELSE PlayerAnimationState = 20 -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: PlayerAnimationState = 3 -IF keyboardInput$ = downArrowKey$ THEN all = all + 1 -IF keyboardInput$ = "/" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 1: LoadCurrentLevel CurrentLevelNumber%: Companion1HorizontalVelocity = 1: Companion2HorizontalVelocity = 1 -IF keyboardInput$ = "+" THEN a = 2: b = 50: CurrentLevelNumber% = CurrentLevelNumber% + 5: LoadCurrentLevel CurrentLevelNumber%: Companion1HorizontalVelocity = 1: Companion2HorizontalVelocity = 1 -IF keyboardInput$ = "q" THEN END - -sipa = sipa + 1 -IF sipa = 3 THEN sipa = 1 - -GOTO SmallScaleGameLoop - SUB DisplayGameStatistics ' ' Updates and displays the game's status information (coins, lives) @@ -557,7 +329,7 @@ ELSE SELECT CASE y CASE 19 CLS - RenderSpriteFromFile 1, 1, 10, 3, 1 + RenderSpriteFromFile 1, 1, 10, 3 LOCATE 20, 1 PRINT "end" ' Wait for 50 frames before accepting input @@ -579,7 +351,6 @@ ELSE GraphicsDisplayMode% = 2 END SELECT END IF -IF GraphicsDisplayMode = 2 THEN GOTO 124 FOR e = 0 TO 9 FOR D = 0 TO 15 q$ = RIGHT$(LEFT$(AsciiLevelData(e + 1), D + 1), 1) @@ -601,33 +372,9 @@ IF q$ = "u" THEN PUT (D * 20, e * 20), DoorSprite, PSET: TerrainGrid(D + 1, e + IF q$ = "U" THEN PUT (D * 20, e * 20), DoorSprite, PSET: TerrainGrid(D + 1, e + 1) = "U": DoorExitX% = D * 20: DoorExitY% = e * 20 NEXT D NEXT e -GOTO 123 -124 -FOR e = 0 TO 19 -FOR D = 0 TO 30 -q$ = RIGHT$(LEFT$(AsciiLevelData(e + 1), D + 1), 1) -IF q$ = "m" THEN PUT (D * 10, e * 10), SolidTerrainSpriteSmall, PSET: TerrainGrid(D + 1, e + 1) = "z" -IF q$ = "o" THEN PUT (D * 10, e * 10), BoxSpriteSmall, PSET: TerrainGrid(D + 1, e + 1) = "z": ObjectGrid(D + 1, e + 1) = "o" -IF q$ = "." THEN PUT (D * 10, e * 10), StarSpriteSmall, PSET -IF q$ = "-" THEN PUT (D * 10, e * 10), CloudSpriteSmall, PSET -IF q$ = "x" THEN Companion1PositionX% = D * 20: Companion1PositionY% = (e + 1) * 20 -IF q$ = "y" THEN Companion2PositionX% = D * 20: Companion2PositionY% = (e + 1) * 20 -IF q$ = "1" THEN PUT (D * 10, e * 10), CoinSpriteSmall, PSET: TerrainGrid(D + 1, e + 1) = "1" -IF q$ = "p" THEN PUT (D * 10, (e * 10) + 5), BushSpriteSmall, PSET -IF q$ = "h" THEN PUT (D * 10, e * 10), WindowSpriteSmall, PSET -IF q$ = "v" THEN PUT (D * 10, (e * 10) + 5), TrampolineSpriteSmall, PSET: TerrainGrid(D + 1, e + 1) = "v" -IF q$ = "t" THEN PUT (D * 10, e * 10), TreeSpriteSmall, PSET -IF q$ = ">" THEN PUT (D * 10, e * 10), RightArrowSpriteSmall, PSET: TerrainGrid(D + 1, e + 1) = "z": ObjectGrid(D + 1, e + 1) = ">" -IF q$ = "<" THEN PUT (D * 10, e * 10), LeftArrowSpriteSmall, PSET: TerrainGrid(D + 1, e + 1) = "z": ObjectGrid(D + 1, e + 1) = "<" -IF q$ = "a" THEN PUT (D * 10, e * 10), HoleSpriteSmall, PSET: TerrainGrid(D + 1, e + 1) = "z": ObjectGrid(D + 1, e + 1) = "a" -IF q$ = "u" THEN PUT (D * 10, e * 10), DoorSpriteSmall, PSET: TerrainGrid(D + 1, e + 1) = "u": DoorEntryX% = D * 20: DoorEntryY% = e * 20 -IF q$ = "U" THEN PUT (D * 10, e * 10), DoorSpriteSmall, PSET: TerrainGrid(D + 1, e + 1) = "U": DoorExitX% = D * 20: DoorExitY% = e * 20 -NEXT D -NEXT e -123 END SUB -SUB RenderSpriteFromFile (x%, y%, spriteID%, animationFrame%, scaleFactor%) +SUB RenderSpriteFromFile (x%, y%, spriteID%, animationFrame%) ' ' Renders a sprite on screen by loading pixel data from external file ' File format explanation: @@ -647,7 +394,6 @@ SUB RenderSpriteFromFile (x%, y%, spriteID%, animationFrame%, scaleFactor%) ' 1 = normal rendering ' 50 = horizontally flipped ' Other values = scaled rendering (value = scale factor) -' scaleFactor% = Pixel scaling factor (1 = full size, 2 = half size) DIM rowText AS STRING fileName$ = "img/" + LTRIM$(STR$(spriteID%)) + ".i01" @@ -661,28 +407,14 @@ CLOSE #1 ' Handle special rendering modes based on animationFrame parameter IF animationFrame% = 50 THEN GOTO DrawFlippedSprite -IF animationFrame% > 1 THEN GOTO DrawScaledSprite -' Normal rendering mode (1:1 pixels) FOR rowIndex% = 1 TO 100 IF spritePixelRows(rowIndex%) = "" THEN GOTO FinishDrawing FOR columnIndex% = 1 TO LEN(spritePixelRows(rowIndex%)) ' Convert character digit to numeric color value (0-3) pixelColor% = ASC(RIGHT$(LEFT$(spritePixelRows(rowIndex%), columnIndex%), 1)) - 48 ' Calculate actual screen position considering scaleFactor - PSET ((x% + columnIndex%) \ scaleFactor%, (y% + rowIndex%) \ scaleFactor%), pixelColor% - NEXT columnIndex% -NEXT rowIndex% -GOTO FinishDrawing - -DrawScaledSprite: -' Scaled rendering mode (stretches pixels) -FOR rowIndex% = 1 TO 100 - IF spritePixelRows(rowIndex%) = "" THEN GOTO FinishDrawing - FOR columnIndex% = 1 TO LEN(spritePixelRows(rowIndex%)) - pixelColor% = ASC(RIGHT$(LEFT$(spritePixelRows(rowIndex%), columnIndex%), 1)) - 48 - ' Draw filled rectangle instead of single pixel - LINE (x% + (columnIndex% * animationFrame%), y% + (rowIndex% * animationFrame%))-(x% + (columnIndex% * animationFrame%) + animationFrame%, y% + (rowIndex% * animationFrame%) + animationFrame%), pixelColor%, BF + PSET ((x% + columnIndex%), (y% + rowIndex%)), pixelColor% NEXT columnIndex% NEXT rowIndex% GOTO FinishDrawing @@ -693,7 +425,7 @@ FOR rowIndex% = 1 TO 100 IF spritePixelRows(rowIndex%) = "" THEN GOTO FinishDrawing FOR columnIndex% = 1 TO LEN(spritePixelRows(rowIndex%)) ' Note: X position is mirrored (right-to-left) - PSET ((x% + (LEN(spritePixelRows(rowIndex%)) - columnIndex% + 1)) \ scaleFactor%, (y% + rowIndex%) \ scaleFactor%), ASC(RIGHT$(LEFT$(spritePixelRows(rowIndex%), columnIndex%), 1)) - 48 + PSET ((x% + (LEN(spritePixelRows(rowIndex%)) - columnIndex% + 1)), (y% + rowIndex%)), ASC(RIGHT$(LEFT$(spritePixelRows(rowIndex%), columnIndex%), 1)) - 48 NEXT columnIndex% NEXT rowIndex% diff --git a/Games/Pomppu Paavo/lvl/16.lvl b/Games/Pomppu Paavo/lvl/16.lvl deleted file mode 100644 index 63740c8..0000000 --- a/Games/Pomppu Paavo/lvl/16.lvl +++ /dev/null @@ -1,20 +0,0 @@ -2 0 -m11 aa m 11111 m -m11 a a a < m -m11 >aam v t a m -m11om y o a am -m11 oooo t m ->>>om p p m m -m mmm mamamom mm m -m v mmmmm mam 11m mmmmmm m -m mmmmmmmmm mam 1mm mm m -mm m1 m mam111m m m -m m o m mam vm m -m m m1111m vmammmmm m m -m m mmmmm 11 -mmmmmm m mamammmmm mm -m m mam1111m m >m -m m m1m111m m m - m mammmm mm>>> <<<>>m - m m x m m m -mmmmm mmmmmmm mmm mm diff --git a/Games/Pomppu Paavo/lvl/17.lvl b/Games/Pomppu Paavo/lvl/17.lvl deleted file mode 100644 index a89e365..0000000 --- a/Games/Pomppu Paavo/lvl/17.lvl +++ /dev/null @@ -1,11 +0,0 @@ -1 0 -mu 1111 m -mmmmmmm <<<>>>> -oo m11111111m m mm m -oo m11111111m m mm h m m -oo mmmmmmmmmm m m vm m -oo mm mmmmmmm m - v m -mom mmmmmm v m -m m m mmmmmm mm h h m -m m -m <<<<<<<<<<<<<<<<<<<<<<<<<<< m -mam m -mammooooommaaammm maaaaavm -mam oo a ma m111111m -mam oo <<< h mh h mma<>amm -mam moom << m -my mm m m m -mmmmmmmmmmmm<