From: Svjatoslav Agejenko Date: Tue, 19 Aug 2025 21:19:56 +0000 (+0300) Subject: Fix Pomppu Paavo name and add older version X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=631ee4a326ae224a4cabcf7fa8c4e74eb8e70117;p=qbasicapps.git Fix Pomppu Paavo name and add older version --- diff --git a/Games/Pomppu Paavo 2/Pomppu Paavo.bas b/Games/Pomppu Paavo 2/Pomppu Paavo.bas new file mode 100755 index 0000000..8c35239 --- /dev/null +++ b/Games/Pomppu Paavo 2/Pomppu Paavo.bas @@ -0,0 +1,840 @@ +DECLARE SUB RenderSpriteFromFile (x%, y%, widthMultiplier%, heightMultiplier%, SpriteName$) +DECLARE SUB RenderFlippedSpriteFromFile (x%, y%, widthMultiplier%, heightMultiplier%, Filename$) +' Pomppu Paavo 2 +' +' This program is free software: released under Creative Commons Zero (CC0) license +' by Svjatoslav Agejenko. +' Email: svjatoslav@svjatoslav.eu +' Homepage: http://www.svjatoslav.eu +' +' Changelog: +' 1999, Initial version +' 2025, Improved program readability + +DECLARE SUB UpdateLoadingScreen () +DECLARE SUB HandleEscapeKey () +DECLARE SUB PlayHurtSound () +DECLARE SUB GameOverSequence () + +DECLARE SUB HandlePlayerDeath () +DEFINT A-Z +DECLARE SUB InitializeAllLevelData () +DECLARE SUB UpdateHUD (coinIncrementAmount%) +DECLARE SUB LoadCurrentLevel () +DECLARE SUB ShowIntroScreen () +DECLARE SUB WaitForUserInput () + +DIM SHARED userInput$ + +' Grid representing solid level elements (m = block, o = breakable, etc.) +DIM SHARED levelGrid(-5 TO 20, -5 TO 20) AS STRING + +' Tracks interactive objects like breakable blocks separately from main grid +DIM SHARED interactiveObjectsGrid(-5 TO 20, -5 TO 20) AS STRING + +' Stores raw text-based level layouts for all worlds +DIM SHARED levelData(1 TO 11, 1 TO 10) AS STRING * 15 + +' Background color index for each world's sky +DIM SHARED levelSkyColor(1 TO 10) AS INTEGER + +' Current active level number (1-10) +DIM SHARED currentLevelNumber AS INTEGER + +' Previously played level number (for backtracking after death) +DIM SHARED previousLevelNumber AS INTEGER + +' Temporary storage for current level's row data during loading +DIM SHARED levelRowData(1 TO 15) AS STRING * 15 + +' Buffer to store cloud sprite image data +DIM SHARED cloudSpriteBuffer(2100) + +' Buffer for solid block sprite images +DIM SHARED solidBlockSpriteBuffer(202) + +' Buffer for brick/block sprite images +DIM SHARED brickSpriteBuffer(202) + +' Buffer for power-up item sprites (like mushrooms) +DIM SHARED powerUpSpriteBuffer(1000) + +' Buffer for tree sprite images +DIM SHARED treeSpriteBuffer(2000) + +' Buffer for empty space sprite (used when clearing coins/breakables) +DIM SHARED emptySpaceSpriteBuffer(202) + +' Main coin sprite buffer +DIM SHARED coinSpriteBuffer(202) + +' Larger coin variant sprite buffer +DIM SHARED largeCoinSpriteBuffer(400) + +' Smaller coin variant sprite buffer +DIM SHARED smallCoinSpriteBuffer(200) + +' Player character animation frames (base + walking variants) +DIM SHARED playerAnimationFrames(402) + +' Primary player sprite animation frames array +DIM SHARED playerWalkingFrames(202, 1 TO 5) + +' Enemy base sprite buffers (stores background under enemies for erasing) +DIM SHARED enemyBackgroundBuffers(1 TO 230, 1 TO 10) + +' Enemy walking animation frames +DIM SHARED enemyWalkingFrames(1 TO 202, 1 TO 5) + +' X positions of all enemies (max 10 per level) +DIM SHARED enemyXPositions(1 TO 10) + +' Y positions of all enemies +DIM SHARED enemyYPositions(1 TO 10) + +' Vertical movement speeds for enemies (positive = down) +DIM SHARED enemyVerticalSpeeds(1 TO 10) + +' Horizontal movement speeds for enemies (positive = right) +DIM SHARED enemyHorizontalSpeeds(1 TO 10) + +' Array storing individual digits of coin counter (index 1=ones, 2=tens) +DIM SHARED CoinDigits(1 TO 5) + +' Pre-loaded digit images for HUD display (0-9) +DIM SHARED digitImages(100, 0 TO 11) + +' Number of remaining player lives +DIM SHARED lives + +' Total coins collected by player +DIM SHARED coinsCollected + +' Flag: set when a coin needs to be cleared from grid +DIM SHARED shouldClearCoinFlag + +' Grid X position where coin needs clearing +DIM SHARED clearCoinGridX + +' Grid Y position where coin needs clearing +DIM SHARED clearCoinGridY + +' Player's current X coordinate on screen +DIM SHARED playerX + +' Player's current Y coordinate on screen +DIM SHARED playerY + +' Counter tracking loading progress dots +DIM SHARED loadingProgressDotCount + +loadingProgressDotCount = 1 +SCREEN 13 +currentLevelNumber = 1 +previousLevelNumber = 1 +InitializeAllLevelData +1 + +' Reset entire VGA palette to black (0-254) +FOR colorIndex = 0 TO 254 +OUT &H3C8, colorIndex +OUT &H3C9, 0 +OUT &H3C9, 0 +OUT &H3C9, 0 +NEXT colorIndex + +' Set color 255 to bright white (60/63 intensity) +OUT &H3C8, 255 +OUT &H3C9, 60 +OUT &H3C9, 60 +OUT &H3C9, 60 +LOCATE 20, 3 +COLOR 255 +PRINT "LOADING " + +' Load all game assets sequentially with visual feedback +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "pilv" +GET (1, 1)-(109, 35), cloudSpriteBuffer + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "kast" +GET (1, 2)-(20, 21), solidBlockSpriteBuffer + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "tellis" +GET (1, 2)-(20, 21), brickSpriteBuffer + +UpdateLoadingScreen +GET (1, 2)-(20, 21), emptySpaceSpriteBuffer + +RenderSpriteFromFile 0, 0, 1, 1, "paavo1" +GET (1, 2)-(20, 21), playerWalkingFrames(202, 1) + +UpdateLoadingScreen +RenderFlippedSpriteFromFile 0, 0, 1, 1, "paavo1" +GET (3, 2)-(22, 21), playerWalkingFrames(202, 2) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "paavo2" +GET (1, 2)-(20, 21), playerWalkingFrames(202, 3) + +UpdateLoadingScreen +RenderFlippedSpriteFromFile 0, 0, 1, 1, "paavo2" +GET (3, 2)-(22, 21), playerWalkingFrames(202, 4) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "poosas" +GET (1, 1)-(60, 21), powerUpSpriteBuffer + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "puu" +GET (1, 1)-(40, 60), treeSpriteBuffer + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "munt" +GET (1, 1)-(10, 11), coinSpriteBuffer + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "munt1" +GET (0, 2)-(20, 11), largeCoinSpriteBuffer + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "munt2" +GET (0, 2)-(20, 11), smallCoinSpriteBuffer + +' Load all numeric digit sprites for HUD display +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "0" +GET (0, 2)-(10, 11), digitImages(100, 0) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "1" +GET (0, 2)-(10, 11), digitImages(100, 1) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "2" +GET (0, 2)-(10, 11), digitImages(100, 2) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "3" +GET (0, 2)-(10, 11), digitImages(100, 3) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "4" +GET (0, 2)-(10, 11), digitImages(100, 4) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "5" +GET (0, 2)-(10, 11), digitImages(100, 5) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "6" +GET (0, 2)-(10, 11), digitImages(100, 6) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "7" +GET (0, 2)-(10, 11), digitImages(100, 7) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "8" +GET (0, 2)-(10, 11), digitImages(100, 8) + +UpdateLoadingScreen +GET (0, 2)-(10, 11), digitImages(100, 10) +RenderSpriteFromFile 0, 0, 1, 1, "9" +GET (0, 2)-(10, 11), digitImages(100, 9) + +' Load enemy sprite frames +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "tigu" +GET (1, 2)-(20, 21), enemyWalkingFrames(202, 1) + +UpdateLoadingScreen +RenderSpriteFromFile 0, 0, 1, 1, "tigu1" +GET (3, 2)-(22, 21), enemyWalkingFrames(202, 2) + +UpdateLoadingScreen +RenderFlippedSpriteFromFile 0, 0, 1, 1, "tigu" +GET (1, 2)-(20, 21), enemyWalkingFrames(202, 3) + +UpdateLoadingScreen +RenderFlippedSpriteFromFile 0, 0, 1, 1, "tigu1" +GET (3, 2)-(22, 21), enemyWalkingFrames(202, 4) + +SCREEN 0 +SCREEN 13 +LoadCurrentLevel +playerX = 50 +playerY = 50 +horizontalMovementSpeed = 0 +currentWalkFrameIndex = 1 +leftWalkFrameIndex = 1 +rightWalkFrameIndex = 2 +coinsCollected = 0 +lives = 3 +animationFrameCounter = 1 +UpdateHUD 0 +12 +' Save current player position background before drawing character +IF playerY > 0 THEN GET (playerX, playerY)-(playerX + 20, playerY + 20), playerAnimationFrames: PUT (playerX, playerY), playerWalkingFrames(202, currentWalkFrameIndex), OR + +' Process all enemies (max 10) +FOR enemyIndex = 1 TO 10 + ' Only update visible enemies above bottom of screen + IF enemyYPositions(enemyIndex) < 170 AND animationFrameCounter = 1 THEN + ' Apply vertical and horizontal movement + enemyYPositions(enemyIndex) = enemyYPositions(enemyIndex) + enemyVerticalSpeeds(enemyIndex) + enemyXPositions(enemyIndex) = enemyXPositions(enemyIndex) + enemyHorizontalSpeeds(enemyIndex) + ' Save background under enemy for later erasing + GET (enemyXPositions(enemyIndex), enemyYPositions(enemyIndex))-(enemyXPositions(enemyIndex) + 20, enemyYPositions(enemyIndex) + 20), enemyBackgroundBuffers(202, enemyIndex) + + ' Determine which walking animation frame to show + IF enemyHorizontalSpeeds(enemyIndex) <= 0 THEN walkAnimationPhase = 1 ELSE walkAnimationPhase = 3 + IF enemyAnimationFrameCounter > 2 THEN walkAnimationPhase = walkAnimationPhase + 1: IF enemyAnimationFrameCounter = 3 THEN enemyVerticalSpeeds(enemyIndex) = enemyVerticalSpeeds(enemyIndex) + 1 + + ' Draw enemy with correct animation frame + PUT (enemyXPositions(enemyIndex), enemyYPositions(enemyIndex)), enemyWalkingFrames(202, walkAnimationPhase) + END IF +NEXT enemyIndex + +' Create short delay using silent sound (QBasic lacks proper delay function) +SOUND 0, .5 + +' Cycle through animation frames +animationFrameCounter = animationFrameCounter + 1 +IF animationFrameCounter > 3 THEN animationFrameCounter = 1 + +' Every third frame, process physics and input +IF animationFrameCounter = 1 THEN + enemyAnimationFrameCounter = enemyAnimationFrameCounter + 1 + IF enemyAnimationFrameCounter > 5 THEN enemyAnimationFrameCounter = 0 + + ' Apply gravity to player (increases downward speed each frame) + verticalMovementSpeed = verticalMovementSpeed + 1 + + ' Gradually reduce horizontal movement (friction effect) + IF horizontalMovementSpeed > 0 THEN horizontalMovementSpeed = horizontalMovementSpeed - 1: walkAnimationPhaseCounter = walkAnimationPhaseCounter + 1 + IF horizontalMovementSpeed < 0 THEN horizontalMovementSpeed = horizontalMovementSpeed + 1: walkAnimationPhaseCounter = walkAnimationPhaseCounter + 1 + + ' Alternate between walk animation phases every 2 frames + IF walkAnimationPhaseCounter > 2 THEN walkAnimationPhaseCounter = 1 + IF walkAnimationPhaseCounter = 2 THEN leftWalkFrameIndex = 1: rightWalkFrameIndex = 2 + IF walkAnimationPhaseCounter = 1 THEN leftWalkFrameIndex = 3: rightWalkFrameIndex = 4 + + ' Process enemy collisions and movements + FOR enemyIndex = 1 TO 10 + IF enemyYPositions(enemyIndex) < 170 THEN + ' Reverse vertical direction when hitting ceiling block + IF levelGrid((enemyXPositions(enemyIndex) + 20) / 20, (enemyYPositions(enemyIndex) + 9) / 20) = "m" THEN enemyVerticalSpeeds(enemyIndex) = -1 + + ' Reverse horizontal direction at screen edges + IF enemyXPositions(enemyIndex) > 270 THEN enemyHorizontalSpeeds(enemyIndex) = -1 + IF enemyXPositions(enemyIndex) < 2 THEN enemyHorizontalSpeeds(enemyIndex) = 1 + + ' Reverse horizontal direction when hitting wall blocks + IF levelGrid((enemyXPositions(enemyIndex) + 28) / 20, enemyYPositions(enemyIndex) / 20) = "m" THEN enemyHorizontalSpeeds(enemyIndex) = -1 + IF levelGrid((enemyXPositions(enemyIndex) + 10) / 20, enemyYPositions(enemyIndex) / 20) = "m" THEN enemyHorizontalSpeeds(enemyIndex) = 1 + + ' Check for collision with player (trigger death) + IF enemyXPositions(enemyIndex) - 20 < playerX AND enemyXPositions(enemyIndex) + 20 > playerX AND enemyYPositions(enemyIndex) - 5 < playerY AND enemyYPositions(enemyIndex) + 20 > playerY THEN PlayHurtSound: HandlePlayerDeath: GOTO 12 + END IF + NEXT enemyIndex +END IF + +' Check for player collisions with level geometry: + +' Ceiling collision (reverse gravity) +IF levelGrid((playerX + 15) / 20, (playerY + 9) / 20) = "m" THEN verticalMovementSpeed = -1: airTimeCounter = 0 + +' Right wall collision +IF levelGrid((playerX + 25) / 20, (playerY + 9) / 20) = "m" THEN verticalMovementSpeed = -1: airTimeCounter = 0 + +' Floor collision (stop falling) +IF levelGrid((playerX + 20) / 20, (playerY - 8) / 20) = "m" THEN verticalMovementSpeed = 1: airTimeCounter = 20 + +' Right wall collision +IF levelGrid((playerX + 28) / 20, (playerY) / 20) = "m" THEN horizontalMovementSpeed = -1: wallCollisionLock = 1 + +' Left wall collision +IF levelGrid((playerX + 10) / 20, (playerY) / 20) = "m" THEN horizontalMovementSpeed = 1: wallCollisionLock = 1 + +' Breakable block collision (turn into empty space) +IF interactiveObjectsGrid((playerX + 20) / 20, (playerY - 8) / 20) = "o" THEN verticalMovementSpeed = 1: interactiveObjectsGrid((playerX + 20) / 20, (playerY - 8) / 20) = "": levelGrid((playerX + 20) / 20, (playerY - 8) / 20) = "2": clearCoinGridX _ += ((playerX + 20) / 20) - 1: clearCoinGridY = (playerY - 8) / 20: shouldClearCoinFlag = 1: SOUND 50, .5 + +' Coin collection +IF levelGrid((playerX + 20) / 20, (playerY) / 20) = "1" THEN levelGrid((playerX + 20) / 20, (playerY) / 20) = "2": clearCoinGridX = ((playerX + 21) / 20) - 1: clearCoinGridY = (playerY) / 20: shouldClearCoinFlag = 1: coinsCollected = coinsCollected _ ++ 1: UpdateHUD 1: SOUND 1000, 1: SOUND 2000, 1 + +' Track time in air for jump control +airTimeCounter = airTimeCounter + 1 + +' Process keyboard input: +userInput$ = INKEY$ +' Jump when up arrow pressed (only if not already high in air) +IF userInput$ = CHR$(0) + "H" AND airTimeCounter < 10 THEN verticalMovementSpeed = -6 +' Move right with right arrow +IF userInput$ = CHR$(0) + "M" AND wallCollisionLock = 0 THEN horizontalMovementSpeed = horizontalMovementSpeed + 3: currentWalkFrameIndex = leftWalkFrameIndex +' Move left with left arrow +IF userInput$ = CHR$(0) + "K" AND wallCollisionLock = 0 THEN horizontalMovementSpeed = horizontalMovementSpeed - 3: currentWalkFrameIndex = rightWalkFrameIndex +' Escape key handler +IF userInput$ = CHR$(27) THEN HandleEscapeKey +' Level skip (debug only - plus key) +IF userInput$ = "+" AND wallCollisionLock = 0 THEN currentLevelNumber = currentLevelNumber + 1: LoadCurrentLevel: GOTO 12 +' Reset wall collision lock each frame +IF wallCollisionLock <> 0 THEN wallCollisionLock = 0 + +' Cap movement speeds to prevent excessive speed +IF horizontalMovementSpeed > 5 THEN horizontalMovementSpeed = 3 +IF horizontalMovementSpeed < -5 THEN horizontalMovementSpeed = -3 +IF verticalMovementSpeed > 3 THEN verticalMovementSpeed = 3 + +' Restore background where player was previously drawn +IF playerY > 0 THEN PUT (playerX, playerY), playerAnimationFrames, PSET + +' Redraw enemies on this animation frame +IF animationFrameCounter = 1 THEN + FOR enemyIndex = 10 TO 1 STEP -1 + IF enemyYPositions(enemyIndex) < 170 THEN PUT (enemyXPositions(enemyIndex), enemyYPositions(enemyIndex)), enemyBackgroundBuffers(202, enemyIndex), PSET + NEXT enemyIndex +END IF + +' Apply physics to player position +playerY = playerY + verticalMovementSpeed +playerX = playerX + horizontalMovementSpeed + +' Clear collected coin/block from screen +IF shouldClearCoinFlag > 0 THEN shouldClearCoinFlag = 0: PUT (clearCoinGridX * 20, clearCoinGridY * 20), emptySpaceSpriteBuffer, PSET + +' Level transition when reaching screen edges +IF playerX > 280 THEN currentLevelNumber = currentLevelNumber + 1: LoadCurrentLevel: playerX = 3 +IF playerX < 2 THEN currentLevelNumber = currentLevelNumber - 1: LoadCurrentLevel: playerX = 279 + +' Player death when falling off bottom of screen +IF playerY > 170 THEN FOR tone = 3000 TO 500 STEP -100: SOUND tone, .3: NEXT tone: HandlePlayerDeath +GOTO 12 + +SUB GameOverSequence +' Shows game over screen with animated death effect. +' First displays "You are killed!" text, then pixelates the screen, +' adds flying debris animation, waits for keypress, then fades to black. + +DIM deathScreenBuffer(1 TO 2000) +GET (0, 0)-(150, 20), deathScreenBuffer +LOCATE 1, 1 +PRINT "You are " +LOCATE 2, 1 +PRINT " killed! " + +' Create pixelated death effect by scaling up screen area +FOR x = 0 TO 80 + FOR y = 0 TO 16 + ' Only process non-background pixels + IF POINT(x, y) > 0 THEN + ' Draw 5x5 block for each original pixel (magnification effect) + LINE (x * 5, y * 5 + 50)-(x * 5 + 4, y * 5 + 54), 4, BF + END IF + NEXT y +NEXT x +PUT (0, 0), deathScreenBuffer, PSET + +' Add random flying debris particles +FOR particle = 1 TO 100 + x = RND * 290 + 4 + y = RND * 170 + 4 + GET (x, y)-(x + 20, y + 20), deathScreenBuffer + x = x + RND * 4 - 2 + y = y + RND * 4 - 1 + PUT (x, y), deathScreenBuffer, PSET +NEXT particle + +' Wait briefly before requiring keypress +FOR waitCount = 1 TO 50 + userInput$ = INKEY$ +NEXT waitCount +userInput$ = INPUT$(1) + +' Draw closing red lines from top and bottom +FOR lineIndex = 0 TO 10 + SOUND 0, .05 + LINE (0, lineIndex)-(320, lineIndex), 4 + LINE (0, 200 - lineIndex)-(320, 200 - lineIndex), 4 +NEXT lineIndex + +' Fade out red color channel to black +FOR fadeStep = 32 TO 0 STEP -1 + SOUND 0, .5 + OUT &H3C8, 4 + OUT &H3C9, fadeStep + OUT &H3C9, 0 + OUT &H3C9, 0 +NEXT fadeStep +END + +END SUB + +SUB HandleEscapeKey +' Handles ESC key press: performs smooth screen fadeout then exits to DOS. + +' Fade screen to black in vertical bands +FOR band = 0 TO 20 + FOR lineIndex = band TO 200 STEP 20 + LINE (0, lineIndex)-(320, lineIndex), 0 + NEXT lineIndex + SOUND 0, .5 +NEXT band +SYSTEM + +END SUB + +SUB HandlePlayerDeath +' Processes player death: moves back one level, resets player position, +' decreases remaining lives, and updates HUD display. +' Does not end game - continues playing from previous level. + +IF currentLevelNumber > 1 THEN currentLevelNumber = currentLevelNumber - 1 + +LoadCurrentLevel +playerX = 20 +playerY = 100 +lives = lives - 1 +UpdateHUD 0 +END SUB + +SUB InitializeAllLevelData +' Sets up all level layouts as text-based grids. +' Each character represents a game element: +' m = solid block +' o = breakable block +' $ = coin +' . = power-up item +' + = tree/decoration +' numbers 1-9 = enemy spawn points + +levelSkyColor(1) = 1 +levelData(1, 1) = "m " +levelData(2, 1) = "m - - " +levelData(3, 1) = "m " +levelData(4, 1) = "m $ $ $ $ " +levelData(5, 1) = "m $ $ $ $ " +levelData(6, 1) = "m + momom " +levelData(7, 1) = "m " +levelData(8, 1) = "m . . " +levelData(9, 1) = "mmmmmmmmmmmmmmm" + +levelSkyColor(2) = 1 +levelData(1, 2) = " $2- " +levelData(2, 2) = " o$ " +levelData(3, 2) = " o$ - " +levelData(4, 2) = " o$ 3 " +levelData(5, 2) = " o o1 " +levelData(6, 2) = " + mmom" +levelData(7, 2) = " omom m " +levelData(8, 2) = " $ $ $ $ m " +levelData(9, 2) = "mmmm mm" + +levelSkyColor(3) = 1 +levelData(1, 3) = " mmmmm" +levelData(2, 3) = "- $ $ mmmmm" +levelData(3, 3) = " $ $ $ mmmmm" +levelData(4, 3) = " $ $ mmmmm" +levelData(5, 3) = " . mmmmm" +levelData(6, 3) = "mmmm 1 mmmm" +levelData(7, 3) = " mm m" +levelData(8, 3) = " mmm " +levelData(9, 3) = "mmm mmmmm" + +levelSkyColor(4) = 0 +levelData(1, 4) = "mmmmmmmmmmmmmmm" +levelData(2, 4) = "m$ $ $ $ $ " +levelData(3, 4) = "mm $m $4$ $ $ " +levelData(4, 4) = "m$m mmmmmommmm" +levelData(5, 4) = "m$ 3 2 m" +levelData(6, 4) = "m1 ooooooomo m" +levelData(7, 4) = "mooo$$$$$$$m m" +levelData(8, 4) = " m" +levelData(9, 4) = "mmmmmmmmmmmmmmm" + +levelSkyColor(5) = 0 +levelData(1, 5) = "mmmmmmmmmmmmmmm" +levelData(2, 5) = " m " +levelData(3, 5) = "m m 1 3 mmmm" +levelData(4, 5) = "m m mmm o m" +levelData(5, 5) = "m m4567892o m" +levelData(6, 5) = "m mooooommo m" +levelData(7, 5) = "m mm" +levelData(8, 5) = "m mmm" +levelData(9, 5) = "mmmm mmm mmmm" + +levelSkyColor(6) = 1 +levelData(1, 6) = "m " +levelData(2, 6) = " - $ - " +levelData(3, 6) = "m $ $ " +levelData(4, 6) = "m o o $ " +levelData(5, 6) = "m o o " +levelData(6, 6) = "m + " +levelData(7, 6) = "m " +levelData(8, 6) = "mm 1 m 2 m " +levelData(9, 6) = "mmmmmmmmmmmmmmm" + +levelSkyColor(7) = 1 +levelData(1, 7) = " - " +levelData(2, 7) = " - " +levelData(3, 7) = " 1m" +levelData(4, 7) = " 2mm" +levelData(5, 7) = " 3mmm" +levelData(6, 7) = " o + 4mmmm" +levelData(7, 7) = " ooo 5mmmmm" +levelData(8, 7) = " 6mmmmmm" +levelData(9, 7) = "mmmmmmmmmmmmmmm" + +levelSkyColor(8) = 1 +levelData(1, 8) = " mmmmmmmmmmmmm" +levelData(2, 8) = " m123m456m789 " +levelData(3, 8) = " mm$mmm$mmm$mm" +levelData(4, 8) = " mm$$$$$$$$$$m" +levelData(5, 8) = " mmom$mmm$mmmm" +levelData(6, 8) = " o$$$$$$$$$ o" +levelData(7, 8) = " omooooooo o" +levelData(8, 8) = " - m " +levelData(9, 8) = "mmmmmmmmmmmmmmm" + +levelSkyColor(9) = 0 +levelData(1, 9) = " 12345" +levelData(2, 9) = " 6789 " +levelData(3, 9) = " mm" +levelData(4, 9) = " m " +levelData(5, 9) = " m " +levelData(6, 9) = " m " +levelData(7, 9) = " m " +levelData(8, 9) = " m " +levelData(9, 9) = "mm " + +levelSkyColor(10) = 1 +levelData(1, 10) = "m " +levelData(2, 10) = " - " +levelData(3, 10) = "m - " +levelData(4, 10) = "m + " +levelData(5, 10) = "m " +levelData(6, 10) = "m + 2 " +levelData(7, 10) = "m mmm " +levelData(8, 10) = "m . 1 " +levelData(9, 10) = "mmmmmmmmmmm mm" +END SUB + +SUB LoadCurrentLevel +' Loads and renders the currently selected level: +' 1. Validates level number (ends game at level 11) +' 2. Copies level data into working arrays +' 3. Resets interactive object grid +' 4. Clears enemy positions +' 5. Renders all level elements based on character codes + +IF currentLevelNumber > 10 THEN + CLS + PRINT "Mission complete!" + PRINT "Game over" + END +END IF + +' Copy level rows into temporary storage +FOR rowIndex = 1 TO 10 + levelRowData(rowIndex + 1) = levelData(rowIndex, currentLevelNumber) +NEXT rowIndex + +' Clear breakable blocks from previous level +FOR rowIndex = 1 TO 10 + FOR columnIndex = 1 TO 15 + IF levelGrid(columnIndex, rowIndex - 2) = "2" THEN MID$(levelData(rowIndex, previousLevelNumber), columnIndex) = " " + NEXT columnIndex +NEXT rowIndex +previousLevelNumber = currentLevelNumber + +' Reset entire level grids to empty +FOR x = -3 TO 20 + FOR y = -3 TO 20 + levelGrid(x, y) = "" + interactiveObjectsGrid(x, y) = "" + NEXT y +NEXT x + +' Reset all enemies to off-screen positions +FOR enemyIndex = 1 TO 10 + enemyYPositions(enemyIndex) = 1000 + enemyHorizontalSpeeds(enemyIndex) = 1 + enemyVerticalSpeeds(enemyIndex) = 0 +NEXT enemyIndex + +' Set background color and clear screen +CLS +PAINT (1, 1), levelSkyColor(currentLevelNumber) +GET (1, 2)-(20, 21), emptySpaceSpriteBuffer + +' Process each character in level data to render elements +FOR rowIndex = 2 TO 10 + FOR columnIndex = 1 TO 15 + ' Extract single character from level data row + character$ = RIGHT$(LEFT$(levelRowData(rowIndex), columnIndex), 1) + + ' Render different elements based on character code + IF character$ = "-" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), cloudSpriteBuffer, OR + IF character$ = "." THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), powerUpSpriteBuffer, OR + IF character$ = "+" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), treeSpriteBuffer, OR + IF character$ = "$" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), coinSpriteBuffer, OR: levelGrid(columnIndex, rowIndex - 2) = "1" + IF character$ = "m" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), solidBlockSpriteBuffer, PSET: levelGrid(columnIndex, rowIndex - 2) = "m" + IF character$ = "o" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), brickSpriteBuffer, PSET: levelGrid(columnIndex, rowIndex - 2) = "m": interactiveObjectsGrid(columnIndex, rowIndex - 2) = "o" + IF character$ = " " THEN levelGrid(columnIndex, rowIndex) = " " + + ' Place enemies based on numeric character codes (1-9,0) + IF character$ = "1" THEN enemyXPositions(1) = (columnIndex - 1) * 20: enemyYPositions(1) = (rowIndex - 2) * 20: GET (enemyXPositions(1), enemyYPositions(1))-(enemyXPositions(1) + 20, enemyYPositions(1) + 20), enemyBackgroundBuffers(202, 1) + IF character$ = "2" THEN enemyXPositions(2) = (columnIndex - 1) * 20: enemyYPositions(2) = (rowIndex - 2) * 20: GET (enemyXPositions(2), enemyYPositions(2))-(enemyXPositions(2) + 20, enemyYPositions(2) + 20), enemyBackgroundBuffers(202, 2) + IF character$ = "3" THEN enemyXPositions(3) = (columnIndex - 1) * 20: enemyYPositions(3) = (rowIndex - 2) * 20: GET (enemyXPositions(3), enemyYPositions(3))-(enemyXPositions(3) + 20, enemyYPositions(3) + 20), enemyBackgroundBuffers(202, 3) + IF character$ = "4" THEN enemyXPositions(4) = (columnIndex - 1) * 20: enemyYPositions(4) = (rowIndex - 2) * 20: GET (enemyXPositions(4), enemyYPositions(4))-(enemyXPositions(4) + 20, enemyYPositions(4) + 20), enemyBackgroundBuffers(202, 4) + IF character$ = "5" THEN enemyXPositions(5) = (columnIndex - 1) * 20: enemyYPositions(5) = (rowIndex - 2) * 20: GET (enemyXPositions(5), enemyYPositions(5))-(enemyXPositions(5) + 20, enemyYPositions(5) + 20), enemyBackgroundBuffers(202, 5) + IF character$ = "6" THEN enemyXPositions(6) = (columnIndex - 1) * 20: enemyYPositions(6) = (rowIndex - 2) * 20: GET (enemyXPositions(6), enemyYPositions(6))-(enemyXPositions(6) + 20, enemyYPositions(6) + 20), enemyBackgroundBuffers(202, 6) + IF character$ = "7" THEN enemyXPositions(7) = (columnIndex - 1) * 20: enemyYPositions(7) = (rowIndex - 2) * 20: GET (enemyXPositions(7), enemyYPositions(7))-(enemyXPositions(7) + 20, enemyYPositions(7) + 20), enemyBackgroundBuffers(202, 7) + IF character$ = "8" THEN enemyXPositions(8) = (columnIndex - 1) * 20: enemyYPositions(8) = (rowIndex - 2) * 20: GET (enemyXPositions(8), enemyYPositions(8))-(enemyXPositions(8) + 20, enemyYPositions(8) + 20), enemyBackgroundBuffers(202, 8) + IF character$ = "9" THEN enemyXPositions(9) = (columnIndex - 1) * 20: enemyYPositions(9) = (rowIndex - 2) * 20: GET (enemyXPositions(9), enemyYPositions(9))-(enemyXPositions(9) + 20, enemyYPositions(9) + 20), enemyBackgroundBuffers(202, 9) + IF character$ = "0" THEN enemyXPositions(10) = (columnIndex - 1) * 20: enemyYPositions(10) = (rowIndex - 2) * 20: GET (enemyXPositions(10), enemyYPositions(10))-(enemyXPositions(10) + 20, enemyYPositions(10) + 20), enemyBackgroundBuffers(202 _ +, 10) + NEXT columnIndex +NEXT rowIndex +UpdateHUD 0 +END SUB + +SUB PlayHurtSound +' Plays distinctive "hurt" sound effect with descending pitch. +' Creates two converging tones that slide downward in frequency. + +startFrequency = 1700 +endFrequency = 1900 +FOR toneStep = 1 TO 50 + startFrequency = startFrequency + 3 + endFrequency = endFrequency - 5 + SOUND startFrequency, .2 + SOUND endFrequency, .2 +NEXT toneStep +END SUB + +SUB RenderFlippedSpriteFromFile (x%, y%, widthMultiplier%, heightMultiplier%, Filename$) +' Renders sprite from text file but flips horizontally during rendering. +' File format: first line = height, subsequent lines contain ASCII art +' where each character's ASCII value determines color (offset by 40). + +x = x * 8 +y = y * 8 +spriteWidth = widthMultiplier - x +spriteHeight = heightMultiplier - y +OPEN "IMG/" + Filename$ + ".i01" FOR INPUT AS #1 +INPUT #1, spriteHeight +FOR row = 1 TO spriteHeight + LINE INPUT #1, rowText$ + FOR column = LEN(rowText$) TO 1 STEP -1 + ' Calculate screen coordinates and color from ASCII value + currentColor = ASC(LEFT$(RIGHT$(rowText$, column), 1)) - 40 + ' Draw filled rectangle for each pixel (scaled by multipliers) + LINE (x + (column * widthMultiplier), (y + (row * heightMultiplier)) + 1)-(x + ((column + 1) * widthMultiplier), y + ((row + 1) * heightMultiplier)), currentColor, BF + NEXT column +NEXT row +CLOSE +END SUB + +SUB RenderSpriteFromFile (x%, y%, widthMultiplier%, heightMultiplier%, SpriteName$) +' Renders sprite from text file in normal orientation. +' File format and rendering identical to RenderFlippedSpriteFromFile +' but processes characters left-to-right instead of right-to-left. + +spriteWidth = widthMultiplier - x +spriteHeight = heightMultiplier - y +OPEN "IMG/" + SpriteName$ + ".i01" FOR INPUT AS #1 +INPUT #1, spriteHeight +FOR row = 1 TO spriteHeight + LINE INPUT #1, rowText$ + FOR column = 1 TO LEN(rowText$) + ' Calculate color from ASCII value (offset by 40) + currentColor = ASC(RIGHT$(LEFT$(rowText$, column), 1)) - 40 + ' Draw scaled pixel block + LINE (x + (column * widthMultiplier), (y + (row * heightMultiplier)) + 1)-(x + ((column + 1) * widthMultiplier) - 1, y + ((row + 1) * heightMultiplier)), currentColor, BF + NEXT column +NEXT row +CLOSE +END SUB + +SUB ShowIntroScreen +' Displays introductory splash screen using sprite rendering. + +CLS +RenderSpriteFromFile 2, 2, 10, 1, "win.i01" +END SUB + +SUB UpdateHUD (coinIncrementAmount%) +' Updates Heads-Up Display showing coins and lives: +' - Processes coin counter (with 100-coin bonus life) +' - Draws coin counter digits +' - Shows remaining lives + +' End game if no lives remain +IF lives < 0 THEN GameOverSequence + +' Draw coin icon at left of HUD +PUT (0, 180), largeCoinSpriteBuffer, PSET + +' Add new coins to counter +CoinDigits(1) = CoinDigits(1) + coinIncrementAmount% + +' Handle decimal carry-over for coin counter +FOR digitPosition = 1 TO 3 + ' Carry from ones place to tens place + IF CoinDigits(1) > 9 THEN + CoinDigits(1) = CoinDigits(1) - 10 + CoinDigits(2) = CoinDigits(2) + 1 + END IF + + ' Convert 100 coins to extra life + IF CoinDigits(2) > 9 THEN + CoinDigits(1) = 0 + CoinDigits(2) = 0 + lives = lives + 1 + END IF +NEXT digitPosition + +LOCATE 1, 1 +digitPosition = 3 +' Draw both digits of coin counter +FOR hudElement = 1 TO 2 + digitPosition = digitPosition - 1 + PUT ((hudElement * 11) + 10, 180), digitImages(100, CoinDigits(digitPosition)), PSET +NEXT hudElement + +' Cap maximum lives at 10 +IF lives > 10 THEN lives = 10 + +' Draw "X" before lives counter +PUT (43, 180), digitImages(100, 10), PSET +' Draw small coin icon next to lives counter +PUT (53, 180), smallCoinSpriteBuffer, PSET +' Draw current lives count +PUT (73, 180), digitImages(100, lives), PSET +END SUB + +SUB UpdateLoadingScreen +' Visual progress indicator during asset loading. +' Draws black screen with incremental dots on bottom row. + +LINE (0, 0)-(319, 150), 0, BF +LOCATE 20, 10 + loadingProgressDotCount +loadingProgressDotCount = loadingProgressDotCount + 1 +PRINT "." +END SUB + +SUB WaitForUserInput +' Waits for any keyboard input before continuing. +' Clears userInput$ variable first, then polls INKEY$ until non-empty. + +userInput$ = "" +WHILE userInput$ = "" + userInput$ = INKEY$ +WEND +END SUB + diff --git a/Games/Pomppu Paavo 2/img/0.i01 b/Games/Pomppu Paavo 2/img/0.i01 new file mode 100644 index 0000000..ddf406e --- /dev/null +++ b/Games/Pomppu Paavo 2/img/0.i01 @@ -0,0 +1,11 @@ + 10 +((]]]]]](( +(]]]]]]]]( +]]]]((]]]] +]]]((((]]] +]]]((((]]] +]]]((((]]] +]]]((((]]] +]]]]((]]]] +(]]]]]]]]( +((]]]]]](( diff --git a/Games/Pomppu Paavo 2/img/1.i01 b/Games/Pomppu Paavo 2/img/1.i01 new file mode 100644 index 0000000..3d79571 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/1.i01 @@ -0,0 +1,11 @@ + 10 +((((]]]((( +(((]]]]](( +(((]]]]](( +(((]]]]](( +(((]]]]](( +(((]]]]](( +(((]]]]](( +(((]]]]](( +(((]]]]](( +((((]]]((( diff --git a/Games/Pomppu Paavo 2/img/2.i01 b/Games/Pomppu Paavo 2/img/2.i01 new file mode 100644 index 0000000..1e305a6 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/2.i01 @@ -0,0 +1,11 @@ + 10 +(]]]]]]](( +]]]]]]]]]( +]]]]((]]]] +(]](((]]]] +((((]]]]]( +(((]]]]](( +(]]]]((((( +]]]](((]]( +]]]]]]]]]] +(]]]]]]]]( diff --git a/Games/Pomppu Paavo 2/img/3.i01 b/Games/Pomppu Paavo 2/img/3.i01 new file mode 100644 index 0000000..0638abc --- /dev/null +++ b/Games/Pomppu Paavo 2/img/3.i01 @@ -0,0 +1,11 @@ + 10 +(]]]]]]]]( +]]]]]]]]]] +(]](((]]]] +(((((((]]] +(((((]]]]( +(((((]]]]( +(((((((]]] +(]](((]]]] +]]]]]]]]]] +(]]]]]]]]( diff --git a/Games/Pomppu Paavo 2/img/4.i01 b/Games/Pomppu Paavo 2/img/4.i01 new file mode 100644 index 0000000..2bfbf57 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/4.i01 @@ -0,0 +1,11 @@ + 10 +(((]](((]( +((]]](((]] +((]]]((]]] +(]]](((]]] +(]]]((]]]] +]]]]]]]]]] +(]]]]]]]]] +(((((]]]]( +(((((]]]]( +((((]]]](( diff --git a/Games/Pomppu Paavo 2/img/5.i01 b/Games/Pomppu Paavo 2/img/5.i01 new file mode 100644 index 0000000..f364c9b --- /dev/null +++ b/Games/Pomppu Paavo 2/img/5.i01 @@ -0,0 +1,11 @@ + 10 +((]]]]]](( +(]]]]]]((( +(]]((((((( +(]]((((((( +(]]]]]]]]( +((]]]]]]]] +(((((((]]] +]]](((]]]] +]]]]]]]]]( +(]]]]]]](( diff --git a/Games/Pomppu Paavo 2/img/6.i01 b/Games/Pomppu Paavo 2/img/6.i01 new file mode 100644 index 0000000..7a52db7 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/6.i01 @@ -0,0 +1,11 @@ + 10 +((]]]]]](( +]]]]]]]]]( +]]](((]]]( +]]]((((((( +]]]]]]]]]( +]]]]]]]]]] +]]]((((]]] +]]](((]]]] +]]]]]]]]]( +(]]]]]]](( diff --git a/Games/Pomppu Paavo 2/img/7.i01 b/Games/Pomppu Paavo 2/img/7.i01 new file mode 100644 index 0000000..27197cc --- /dev/null +++ b/Games/Pomppu Paavo 2/img/7.i01 @@ -0,0 +1,11 @@ + 10 +(]]]]]]]]( +]]]]]]]]]] +]]]((((]]] +(](((((]]] +((((]]]]]] +((]]]]]]]( +((((((]]]( +(((((]]](( +((((]]]((( +((((]]]((( diff --git a/Games/Pomppu Paavo 2/img/8.i01 b/Games/Pomppu Paavo 2/img/8.i01 new file mode 100644 index 0000000..5ad4835 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/8.i01 @@ -0,0 +1,11 @@ + 10 +((]]]]]](( +(]]]((]]]( +(]]((((]]( +((]]((]](( +(]]]]]]]]( +]]]]((]]]] +]]]((((]]] +]]]]((]]]] +(]]]]]]]]( +((]]]]]](( diff --git a/Games/Pomppu Paavo 2/img/9.i01 b/Games/Pomppu Paavo 2/img/9.i01 new file mode 100644 index 0000000..6e44b1c --- /dev/null +++ b/Games/Pomppu Paavo 2/img/9.i01 @@ -0,0 +1,11 @@ + 10 +(]]]]]]](( +]]]]]]]]]( +]]](((]]]] +]](((((]]] +]]](((]]]] +(]]]]]]]]] +((]]]((]]] +((((((]]]] +((]]]]]]]( +((]]]]]](( diff --git a/Games/Pomppu Paavo 2/img/kast.i01 b/Games/Pomppu Paavo 2/img/kast.i01 new file mode 100644 index 0000000..59c5b7b --- /dev/null +++ b/Games/Pomppu Paavo 2/img/kast.i01 @@ -0,0 +1,21 @@ + 20 +(DDDDDDDDDDDDDDDDDD( +D(EEEEEEEEEEEEEEEE(= +DE(EEEEEEEEEEEEEE(>= +DEE@@@@@@@@@@@@@@?>= +DEE@???????????D@?>= +DEE@??CCCCCCCCCD@?>= +DEE@?CCCCCCCCCCD@?>= +DEE@?CCCCCCCCCCD@?>= +DEE@?CCCCCCCCCCD@?>= +DEE@?CCCCCCCCCCD@?>= +DEE@?CCCCCCCCCCD@?>= +DEE@?CCCCCCCCCCD@?>= +DEE@?CCCCCCCCCCD@?>= +DEE@?CCCCCCCCCCD@?>= +DEE@?CCCCCCCCCCD@?>= +DEE@DDDDDDDDDDDD@?>= +DEE@@@@@@@@@@@@@@?>= +DE=??????????????(>= +D(>>>>>>>>>>>>>>>>(= +(==================( diff --git a/Games/Pomppu Paavo 2/img/munt.i01 b/Games/Pomppu Paavo 2/img/munt.i01 new file mode 100644 index 0000000..4b3089c --- /dev/null +++ b/Games/Pomppu Paavo 2/img/munt.i01 @@ -0,0 +1,11 @@ + 10 +(((TTTT((( +(TTTSSSSR( +TTSSSSSSSR +TSSS\\SSSR +TSSS\]SSSR +TSSS\]SSSR +TSSS\]SSSR +TSSS\]SSSR +(SRSSSSRR( +(((RRRR((( diff --git a/Games/Pomppu Paavo 2/img/munt1.i01 b/Games/Pomppu Paavo 2/img/munt1.i01 new file mode 100644 index 0000000..6b2db3b --- /dev/null +++ b/Games/Pomppu Paavo 2/img/munt1.i01 @@ -0,0 +1,11 @@ + 10 +(((TTTT((((((((((((( +(TTTSSSSR((FF((((FC( +TTSSSSSSSR(FCC((FC@( +TSSS\\SSSR((CCCFC@(( +TSSS\]SSSR(((CCC@((( +TSSS\]SSSR(((FCC@((( +TSSS\]SSSR((FCC@C@(( +TSSS\]SSSR(FC@((@C@( +(SRSSSSRR((C@((((@@( +(((RRRR((((((((((((( diff --git a/Games/Pomppu Paavo 2/img/munt2.i01 b/Games/Pomppu Paavo 2/img/munt2.i01 new file mode 100644 index 0000000..f064124 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/munt2.i01 @@ -0,0 +1,11 @@ + 10 +((QQQQ(((((((((((((( +(QQQQQQ((((FF((((FC( +((jjjj(((((FCC((FC@( +((jjjj((((((CCCFC@(( +(c(jj(c((((((CCC@((( +c]]]]]]c(((((FCC@((( +((]]]]((((((FCC@C@(( +(]]]]]]((((FC@((@C@( +XX]((]XX(((C@((((@@( +XXX((XXX(((((((((((( diff --git a/Games/Pomppu Paavo 2/img/paavo1.i01 b/Games/Pomppu Paavo 2/img/paavo1.i01 new file mode 100644 index 0000000..d24dc33 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/paavo1.i01 @@ -0,0 +1,21 @@ + 20 +(RRRRRQQQQ(((((((((( +RRQQQQQQQQQ(RRRR(((( +RQQQQQQQQQQRRQQQQ((( +RQQQQQQQQQQQQQQQ(((( +QQQQQQQQQQQQQ((((((( +QQQQQQQQQ(((((((((( +(QQQQQQQ(((((( +((((((( +(((((((( +((((((((((((( +((((((((((((((( +((((((JJJJJ((((((((( +((((((JJJJJJ(((((((( +(((((JJJJJIJ(((((((( +(((((JIIIIJJ(((((((( +((((IIIIIIIJ(((((((( +((((IIIIIIJJJ((((((( +((XXXIII(JJJJXXX(((( +(XXXXXXX((JXXXXXXX(( +((XXXXX((((XXXXXX((( diff --git a/Games/Pomppu Paavo 2/img/paavo2.i01 b/Games/Pomppu Paavo 2/img/paavo2.i01 new file mode 100644 index 0000000..0a0a944 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/paavo2.i01 @@ -0,0 +1,21 @@ + 20 +(RRRRQQQQ((((((((((( +RQQQQQQQQQ(((((((((( +QQQQQQQQQQRRRRR((((( +QQQQQQQQQQQQQQQQ(((( +QQQQQQQQQQQQQQQ((((( +QQQQQQQQ((((((((((( +QQQQQQQ((((((( +((((((( +(((((((( +((((((((((((( +((((((((((((((( +(((((JJJJJ(((((((((( +(((((JJJJJJ((((((((( +((((JJJJJIJ((((((((( +((((JIIIIJJ((((((((( +(((((IIIIIJ((((((((( +(((((IIIII(((((((((( +((((XXXXXXXX(((((((( +(((XXXXXXXXXX((((((( +((((XXXXXXXX(((((((( diff --git a/Games/Pomppu Paavo 2/img/pilv.i01 b/Games/Pomppu Paavo 2/img/pilv.i01 new file mode 100644 index 0000000..7ec44e0 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/pilv.i01 @@ -0,0 +1,31 @@ + 30 +(((((((((((((((((((((((((\\(\((((((((((((((((((((((((](((((((((]((((]((((]]((((((((((((((((((((((((( +((((((((((((((((((((((((\((((((((\\(((((((((\(((((((((]]((\(((\(((\((]](]](((((((((((((((((((((((((( +((((((((((((((((\((\((\(\]\\((\(\(((((((]((((((((](((\((\]((((\(]\(\(]]]]]]((((((((((((((((((((((((( +(((((((((((((((((((]t\\(]]]\\\](](((\((]((](](((((((]((((\(\]](\((]\(((((\\(](](\]\(((((((((]((((((( +((((((((((t((wt\\\t](tt\(]\\((\(](\\t\t((((]\t(](((\((\]\](\(\]](]]((]\(]](((]`\`\(\\]((((((((((( +(((((t((((((ttttttt(t\\(\\((\(]]]\t((\\]\]((((\(](\((\\(]\(](`\\`]](\]\\]\(t\\\`\\t(t\]((]((((((((( +((((t(tt(t((tttttt]t\\(](\\(t(t\\ttt\]tt]t\\(]\tt]](\((t]\](\t]((t]\t(]`\t(]]tt\\(tt\\]](](((((((( +((((((\(ttt(ttt\tt]tt\\\\t\]\tt\(\t]((\\\tt\((]](\\t]tt(\\\(tt(t\(`]\`]]\\\\\(\`tt``^```(`(((((( +((((tt(tttttttttt\\t]\tt]ttt(]\\\\\t\\t(\\((\\t\]t\\]]`\\\](\`]\\(\\]\`(t\\\t\\tt\\^(``]\(\]((]`(( +(((t\(t\ttt\]ttt\tt]]]\\t]ttt]]t\t\\]ttt\]](tt\(]t\\\]t\t`t\\]\\tt]\^\t]\\\\\tt\\`t\t`^`(\`\]]](( +(((((tt]]t\\twt\\\t\]tt]]t(]\t\tt]\tttt\tt]\((t(\\\t\`]t(\]t\\`\t\\(\\\t\t]^\\t\\\tt\t\\^```(`(](( +((t(](\ttttwttw]t\\tt(^t\(t]\]tt\(\t]t\\t(]]\]ttt\\tttt\]\^]\tt\]``\t`(\tt\`^\\\\\ttt\tt\\`]\\^((\(( +]t(]]]]tt]t\t^t\tt\t(\](tt]\tt]\t\\\\\]t\tt`t\\`^]\]t\]]]tt\`(`(]`\tt\\`\t\t]\\tt\ttt^t\\`\`]``(\](( +(]t]t\\t\\t\^t\^t\](\]]\]]t\(ttttt\]t\t\`\t\t\t\\\\`^t`(t(]]t]t`]]t]\\\^tt\]`\t\\t\\``t\\`\``\]t``\( +(]t(tt\\\\\\\\\]^t]]t^t]tt\t^\\]]]]`t\]\t`]\t^```\^^]`\tt^t]`\`]^^\\\\\\\\]^(`\^`\\\\\\^``\```]`\`(] +(](t^^]\\]\\\]t^\]]^]]\^^\]]t\`\^^``]t`^\\`\\`^`]\^\`t]\^^^`^]\\^^^\\\\\]]\`\^````\\]^`\`^`\```]``]( +]]]]](t]`t]^\]^]]^]^]^^]^^]`\^\]`]\]`\\\\``]`\`t\\`^]```^`]^^^^^]\^^\t\``]`\\``]\\^\^^^\\\```````]]] +((^((]](`]]`]^^`^^]^`]]\]``\\(\(\`]``\```]`^^^````^````t(]`^t]^^t`\\]^^\^\^`^\^``\]\\````^`\`]```(]( +](^]((]\`(``]]]^``^t]^^]]t]``t`]``(`````\``\``\\`\```t`^t^(^^^^^]]t^`(\\^\^`(`^^^`\^```\````\]````]( +]((^^]]`]^]^\`]``t^```````\`^`\`\``\^t```````]`````]^`^]]^^t^(^(^]``^```\\\`^]]]^^^^]``^````t]``]``( +(((^((]``^^`^^``^^^^^^]]t`t````^`^`^`^\^`]````````````^`````^^^`]`]^^^^^((]``^^`^]]^^`````]``^^(t`(] +(]^(^(`(`^]]`]`^^^`]^```^^`````t`\^`^`````````^`(`^t^`t^`^^^(```t(`^]]^^^^```^]`]``]^`(```(^(`tttt(( +^(^(^(((t](((`]]`^`t``t```^``^``````^````(^`(````^^^``^`(```^]``]^(]`^```]````````(]^``]t]`^`](^(`(( +(((tt^(^((((]`^`^```t````^```^^^]``````](`tt``]``^```(^^`]``(``t````t```(``]`^]^t`]^`(`^^^^``tt]`((( +(((((((]^](((``]`(`^`]^^^``]`]]((```(`(^```]((]^`^`````````(`((t``^`````]`^(^^```(`^`](`t]^((^(`(((( +(((((((((]((t(^`(`^``((``(^(``^(((((((((``((^``````^(^`t`(`^t``````^]((^^^`](^```((`]((`(]^`((^](((( +(((((((((((t(^``(`(t^(^(`^(^^^((^(`((^(`]((((](((````^(`((((``((``((``(^`]`(]]]]``]``]````(`(``(`((( +(((((((((((((^(^((((((^^(((^(((^(((^^`((`((]`((((^`((`(^``((```^`((((^(((t`(^`((`^(`(]`^`(((`^(((((( +((((((((((((((((((((^(((^(((((^(((((((((((((((((^(`^^`^(((^((^((``(((`((((`](((((((^(``(((`((((((((( +(((((((((((((((((((^(((((((^((^(((((((((((((((((((((^(`(^^(`((((((^^(^((`((((](`(((((((((((((((((((( diff --git a/Games/Pomppu Paavo 2/img/poosas.i01 b/Games/Pomppu Paavo 2/img/poosas.i01 new file mode 100644 index 0000000..e48b7dc --- /dev/null +++ b/Games/Pomppu Paavo 2/img/poosas.i01 @@ -0,0 +1,21 @@ + 20 +((((((((((((((((((((((((((((((q((((q(q(((((((((((((((((((((( +((((((((((q((q(((q(((qq(((((((qqŠqqqq(((((((qq(((((((((((((( +((((((((((q(q(((q(qq((qq((q((qqq(((q(qq(qq;(qq(q(((((((((((( +(((((((((qq(q(Š(((q(q(q(q((((q2qqq(qqq(q(;((;q(q(((((((((((( +(((((qqq(q(q(((222Šqqq(((Šq(qqqqŠq2qqqq2((;Š((q(((q?q((((((( +((((qq(nq(((q((2(qq2q2q(((nn(Šq(qqq(nqq2n2;(qnq?(;???((((((( +((((((qqqq2q(qqq2Š(22Š(qqq(Šqq2n(2nqq2qqq(nq?q?Š2;;;?((((((( +(((((qn(qqqqŠ(Š(qXn22XŠ(nqŠŠq2(22qq22(22(2?Y??2q;?q;22(((((( +((((q((qq2qqŠqqnq2nXŠXŠqq2ŠŠqqŠqX2q22((qq;(Yq???;;2;;2q((((( +((((((q(22(2q2(((nqqXXŠ(XX2Xq(q2Š22nq22q?qY((?(?qqqq;???(((( +(((q(qq(qqqYYXq((YXXYŠX2Š2ŠX2Šq;?2???2q;;q;X?2???;?;Y;??q((( +(((q(q(q22222YYX2(XX?X2q2?qX2q?YYYn2q;Y;X2???X?;?;;;??;;(((( +(((n(qq(Š2Š22XYqXY?XY;2;???qq?;?Y;?2Y;2;;Y;?XX9X9;;(9;??;((( +((((qnXŠ?YY22ŸŸ???YYqqX?;qXqqq;;???;@;;;;??X;;?X?q;;;9?;(?( +(nnnŠX2?2??YXŸŸX2q?X;2;;?qq;;;q;?;;;;;;;Ÿ;X;9;?X;;@;@;;?99( +qqqnqŠq222ŠXŸŸ?Y(ŸY??;qq?2;?;q?;?;;?@X;;;?Ÿ;9999;9@;;;;;9n?9 +nqnqqn2??Y??(X?YŸŸX?;?;?X?;Xq;;ŸX;nŸ@;Ÿ;;;;Ÿ9;;2;;@;;?;;9((9 +nnqqq2(?Ÿn?nŸŸŸ?ŸY22X;X?q;;;;;qqq;;q;Ÿ;;;q9X;;99;@;;9;;;?? +qnq(qqnqq???ŸŸX(?nŸqX(XXqq2;nqq;;;ŸŸqŸŸ;ŸŸ;Xq;q;9n;;??n?9 +((nn((qŸ(ŸnXnŸ(nŸXnŸn(XqqX2ŸŸ;qŸ(qq;(ŸŸqŸ(99Ÿq?;ŸŸ????? diff --git a/Games/Pomppu Paavo 2/img/puu.i01 b/Games/Pomppu Paavo 2/img/puu.i01 new file mode 100644 index 0000000..5a8ca34 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/puu.i01 @@ -0,0 +1,61 @@ + 60 +(((((((((((((((X(((((X((T((((((((((((((( +(((((((((((((((X((T((X(X(((((((((((((((( +((((((((((((X(((((X(X((((((X(X(((((((((( +(((((((((((((XX((X(((((((((T(((((((((((( +((((((XX((((XX(XTT(X(TXXT(((((X((((((((( +((((((((((((((X((X(TXXTŸŸ(XXXX(((((((((( +((((((X(X((XXX(XXXTTT(XXXTX(X((((((((((( +(((((((XX((X(XX((T((XXXX(T((XXX(X(X((((( +((((X(X((XXXT((XX(XXX(TXXTŸXX(XŸ(X(((((( +((((XXX((((XT(X(XXXTTT(XXŸXŸŸŸŸX((X((((( +(((((X((((XT((XX((XT(XTX((XX(ŸX((((ŸŸ((( +(((X((X(((TX((XXXXTXX(TTŸ(((((ŸXŸ((ŸX((( +((((X(XX((X(XX(X(TX(((TTTŸXŸ(ŸXXŸ((((((( +((((X(XXXXXX((XXTTXX(TXTTT(T(XŸX(Ÿ(XX((( +(((((X(XX(TXXTTT(TXXT(X((X((((XŸ(X(XX((( +((((((X((X(XXXXXT(XXX(TT((T(X(((((((X((( +(((XX((XX(((X(TXXX(TX(TTTTXT(Ÿ(((Ÿ((Ÿ((( +(X(((X(((X(T((X(X(XX(T(XXTX(TŸX((ŸŸX(((( +((XX(X((((((XTX(TTTXTXT(XX((XX(Ÿ(ŸŸ(((X( +((((((XXXX((X(XXTTXT(XXŸTT(T(((XŸ((XX((( +(((XXXX(X(((X(T(TTTTXXXXTX(X(XXXX(X(Ÿ(X( +(((((((((X(XXXXX(XT(X(X((X(XXX(XXX((Ÿ((( +X(((((X((X(X(X((XTT(((((XXŸ(XXXXŸ(Ÿ((XŸ( +(((XXX(XXX((X(((XTXX(T(X((Ÿ(((ŸX(XXXX(X( +(((X(((TTX((TTXTT(XXXT(XŸŸ(XXX((XXŸ((X(Ÿ +((X((((XTX(((X(XX(XTT(XXXX((XX(XXŸ(X((ŸX +(((((TX(((X((T(XTTXXXTXX(XXŸX(X((Ÿ(((((( +((X(X(TXTX(XX((XTTXX(X(XŸXXŸTŸXXXX(Ÿ(Ÿ(( +((((X(X(X((TXTTT(((XŸŸX(XT((XXXXX(Ÿ(((Ÿ( +((((X((X((T((X(TXXXXXXXŸ(TŸX(XXŸŸ((ŸŸ((( +((((X(((TXTXX(XXX(((XXX(ŸXŸŸ(XŸŸ(ŸŸŸŸŸ(( +((XX((XXXX((XX(((XX(XXX(TŸŸŸXŸ(XXXŸŸ(((( +((((((X((XTXXTTTXXXXXXšššŸ(TXTŸ(Ÿ((((X(( +(((X(((XXXTTXTT(T(TX(ŸšŸšXŸŸŸ(X(ŸŸ(X(((( +((X(((((XXT(TTT(X((T(šXšXXTŸŸŸ(ŸŸŸ(((((( +(X(XXXX(X((X((TXTT(TTŸšXXŸŸŸXX(X(Ÿ(XX((( +((((X(((XXXXTXXX(((TŸšŸXXŸXŸXŸXŸ(ŸX((((( +(((((((XX(XXX(XXTX((ŸšššTŸŸ(ŸTXX(TX(Ÿ((( +(((((XXXXXXX((X(X(ŸŸŸšššŸXŸŸŸXT(X((X(((( +(((X(((XXXXX(XT(TT(XŸšššXŸŸŸTTŸXŸ((((Ÿ(( +((((((XX(XX((X(XTXŸŸšššX((XXXXTX(((Ÿ(((( +(((((X(XXXXXXXXXŸ(Ÿ(ŸšXš(XŸXTXX((X(((((( +(((((((X(XŸX(XX((TŸŸŸXXŸŸ(XXŸXXXX(((((Ÿ( +((((((XX(XX((XXTX(X(šššŸX(XXXX(XXX(X(((( +((((((((((XXXŸXššŸ(šššXŸ(X(TXXX((X(((((( +((((((((((X(ŸX(šŸšXŸššXX(X(XXX(X(((((((( +(((((((((XXX(XŸššŸXŸšXXŸŸX(((X(((((Ÿ(((( +(((((((((((X((XššŸŸŸŸšXXX(X(ŸX(ŸŸ((((((( +((((((((((XXXŸ(ššŸŸŸŸŸXŸŸ(X(((Ÿ(ŸŸ(((((( +(((((((((((((XXX(ššŸššXX(((((X(((((((((( +(((((((((((Ÿ(X((TšŸšXXŸŸ((((X(Ÿ((((((((( +((((((((((X(((XX(ššXššŸŸ(((((((((((((((( +((((((((((((((((ŸXšXXšX(Ÿ(((((Ÿ((((((((( +((((((((((((((X(XXšŸŸŸ((Ÿ((((((((((((((( +(((((((((((Ÿ(((XX(šššš(Ÿ(((((((((((((((( +((((((((((((((((((ššššX(((Ÿ((((((((((((( +((((((((((((((Ÿ(((šššš(((((((((((((((((( +((((((((((((((((((šššš(((((((((((((((((( +(((((((((((((((Ÿ((šššš(((((((((((((((((( +((((((((((((((((((ššš((((((((((((((((((( diff --git a/Games/Pomppu Paavo 2/img/tellis.i01 b/Games/Pomppu Paavo 2/img/tellis.i01 new file mode 100755 index 0000000..f4f610b --- /dev/null +++ b/Games/Pomppu Paavo 2/img/tellis.i01 @@ -0,0 +1,21 @@ + 20 +00000000000000000000 +0@@//@/////////////0 +0@//////////@//////0 +0//@///////////////0 +0@//@//////////////0 +00000000000000000000 +/////////00@/@/@//// +/@///////00@//////// +@@///////00//@////// +@////////00///////// +00000000000000000000 +0@@////////////////0 +0/////@///@////////0 +0@///////////@/////0 +0//@/////////@@////0 +00000000000000000000 +/////////00@@/////// +/////////00@//////// +/////////00///////// +/////////00///////// diff --git a/Games/Pomppu Paavo 2/img/tigu.i01 b/Games/Pomppu Paavo 2/img/tigu.i01 new file mode 100755 index 0000000..d424018 --- /dev/null +++ b/Games/Pomppu Paavo 2/img/tigu.i01 @@ -0,0 +1,21 @@ + 20 +(((((((((((((((((((( +(((((((((((((((((((( +<((((((((((((((((((( +?((((((((<(((((((((( +??((((((??(((((((((( +(?(((((??((((((((((( +(??((???(((((((((((( +((????(((((((((((((( +(((??((((((((((((((( +((<<<((((((((((((((( +< 0 THEN GET (a, b)-(a + 20, b + 20), mar1 +IF b > 0 THEN IF sipp = 1 THEN PUT (a, b), sipp1, OR +IF b > 0 THEN IF sipp = 2 THEN PUT (a, b), sipp2, OR +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 +IF b > 0 THEN IF sipp = 3 THEN PUT (a, b), sipp3, OR + +GET (siia, siib)-(siia + 10, siib + 10), siil1 +PUT (siia, siib), siil, OR +GET (siia1, siib1)-(siia1 + 10, siib1 + 10), siil2 +PUT (siia1, siib1), siil, OR +SOUND 0, .8 +IF asend((a + 38) \ 20, (b + 37) \ 20) = "z" THEN eda = -1: r = 9: lke = 0 +IF asend((a + 38) \ 20, (b + 22) \ 20) = "z" THEN eda = -1: r = 9: lke = 0 + +IF asend((a + 21) \ 20, (b + 22) \ 20) = "z" THEN eda = 1: r = 9: lke = 0 +IF asend((a + 21) \ 20, (b + 37) \ 20) = "z" THEN eda = 1: r = 9: lke = 0 + +IF asend((a + 22) \ 20, (b + 21) \ 20) = "z" THEN all = 0: cd = 10: lke = 0 +IF asend((a + 37) \ 20, (b + 21) \ 20) = "z" THEN all = 0: cd = 10: lke = 0 + +IF asend((a + 22) \ 20, (b + 38) \ 20) = "z" THEN all = -1: r1 = 2: lk = 1: lke = 0 +IF asend((a + 37) \ 20, (b + 38) \ 20) = "z" THEN all = -1: r1 = 2: lk = 1: lke = 0 + +qwer = qwer + 1: IF asend1((a + 30) \ 20, (b + 30) \ 20) = "q" AND qwer > 20 THEN qwer = 1: elu = elu - 1: eda = -10: all = -5: elud +IF qwer > 100 THEN qwer = 50 + IF asend((a + 30) \ 20, (b + 30) \ 20) = "1" THEN raha = raha + 1: kustuta1 = 1: elud: asend((a + 30) \ 20, (b + 30) \ 20) = "" +IF asend((a + 30) \ 20, (b + 30) \ 20) = "v" THEN all = -8: sipp = 3 +IF asend1((a + 30) \ 20, (b + 38) \ 20) = ">" THEN eda = 3 +IF asend1((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 +IF asend1((a + 30) \ 20, (b + 21) \ 20) = "o" THEN asend((a + 30) \ 20, (b + 21) \ 20) = "": asend1((a + 30) \ 20, (b + 21) \ 20) = "": kustuta = 1 +IF asend1((a + 30) \ 20, (b + 38) \ 20) = "a" THEN asend((a + 30) \ 20, (b + 38) \ 20) = "": asend1((a + 30) \ 20, (b + 38) \ 20) = "": kustuta2 = 1 +IF asend((siia + 25) \ 20, (siib + 25) \ 20) = "z" THEN siiall = -1 +IF asend((siia + 30) \ 20, (siib + 10) \ 20) = "z" THEN siie = -1 +IF asend((siia + 20) \ 20, (siib + 10) \ 20) = "z" THEN siie = 1 +IF asend((siia1 + 25) \ 20, (siib1 + 25) \ 20) = "z" THEN siiall1 = -1 +IF asend((siia1 + 30) \ 20, (siib1 + 10) \ 20) = "z" THEN siie1 = -1 +IF asend((siia1 + 20) \ 20, (siib1 + 10) \ 20) = "z" THEN siie1 = 1 +IF siia > 300 THEN siie = -1 +IF siia < 3 THEN siie = 1 +IF siia1 > 300 THEN siie1 = -1 +IF siia1 < 3 THEN siie1 = 1 +PUT (siia1, siib1), siil2, PSET +PUT (siia, siib), siil1, PSET +IF b > 0 THEN PUT (a, b), mar1, PSET +IF kustuta = 1 THEN kustuta = 0: PUT (((a + 10) \ 20) * 20, (b \ 20) * 20), tuhi, PSET +IF kustuta1 = 1 THEN kustuta1 = 0: PUT (((a + 10) \ 20) * 20, ((b + 10) \ 20) * 20), tuhi, PSET +IF kustuta2 = 1 THEN kustuta2 = 0: PUT (((a + 10) \ 20) * 20, ((b + 28) \ 20) * 20), tuhi, PSET +IF makk = 1 THEN makk = 0: a = a - 20 +asend1((siia1 + 25) \ 20, (siib1 + 8) \ 20) = "": asend1((siia + 25) \ 20, (siib + 8) \ 20) = "" +siia = siia + siie +siib = siib + siiall +siia1 = siia1 + siie1 +siib1 = siib1 + siiall1 +asend1((siia1 + 25) \ 20, (siib1 + 8) \ 20) = "q": asend1((siia + 25) \ 20, (siib + 8) \ 20) = "q" +siiall = siiall + 1: IF siiall > 2 THEN siiall = 2 +siiall1 = siiall1 + 1: IF siiall1 > 2 THEN siiall1 = 2 +a = a + eda +b = b + all +IF a > 297 THEN a = 2: maa = maa + 1: level maa: siie = 1: siie1 = 1 +IF a < 1 THEN a = 296: IF maa = 1 THEN level maa: ELSE maa = maa - 1: level maa: IF voolual = 2 THEN a = 594 +IF b > 179 THEN elu = elu - 1: elud: maa = maa - 1: level maa: b = 100: a = 2: elud +IF asend((a + 30) \ 20, (b + 30) \ 20) = "u" THEN a = uks3 + 10: b = uks4: eda = 0 +IF asend((a + 30) \ 20, (b + 30) \ 20) = "U" THEN a = uks1 + 10: b = uks2: eda = 0 +WEND +a$ = kbd$: kbd$ = "" +IF a$ = par7$ THEN eda = eda + 1: IF eda > 3 THEN eda = 3: r = 0 ELSE IF lke > 10 THEN eda = 5 +IF a$ = par7$ THEN IF sipa = 1 THEN sipp = 1: ELSE sipp = 2 +IF a$ = vas7$ THEN IF sipa = 1 THEN sipp = 10: ELSE sipp = 20 +IF a$ = vas7$ THEN eda = eda - 1: IF eda < -3 THEN eda = -3: r = 0 ELSE IF lke > 10 THEN eda = -5 +IF a$ = ule7$ AND lk < 10 THEN all = all - 5: lk = 20: r1 = 0: sipp = 3 +IF a$ = all7$ THEN all = all + 1 +IF a$ = "/" THEN a = 2: b = 50: maa = maa + 1: level maa: siie = 1: siie1 = 1 +IF a$ = "+" THEN a = 2: b = 50: maa = maa + 5: level maa: siie = 1: siie1 = 1 +IF a$ = "q" THEN END +sipa = sipa + 1 +IF sipa = 3 THEN sipa = 1 +GOTO 6 + + +106 +WHILE kbd$ = "" +kbd$ = INKEY$ +IF voolual = 1 THEN b = b / 2: GOTO 6 +IF b > 0 THEN GET (a \ 2, b \ 2)-((a + 20) \ 2, (b + 20) \ 2), marm1 +IF b > 0 THEN IF sipp = 1 THEN PUT (a \ 2, b \ 2), sippm1, OR +IF b > 0 THEN IF sipp = 2 THEN PUT (a \ 2, b \ 2), sippm2, OR +IF b > 0 THEN IF sipp = 10 THEN PUT (a \ 2, b \ 2), sippm10, OR +IF b > 0 THEN IF sipp = 20 THEN PUT (a \ 2, b \ 2), sippm20, OR +IF b > 0 THEN IF sipp = 3 THEN PUT (a \ 2, b \ 2), sippm3, OR + +GET (siia \ 2, siib \ 2)-((siia + 10) \ 2, (siib + 10) \ 2), siilm1 +PUT (siia \ 2, siib \ 2), siilm, OR +GET (siia1 \ 2, siib1 \ 2)-((siia1 + 10) \ 2, (siib1 + 10) \ 2), siilm2 +PUT (siia1 \ 2, siib1 \ 2), siilm, OR +SOUND 0, .8 +IF asend((a + 38) \ 20, (b + 37) \ 20) = "z" THEN eda = -1: r = 9: lke = 0 +IF asend((a + 38) \ 20, (b + 22) \ 20) = "z" THEN eda = -1: r = 9: lke = 0 + +IF asend((a + 21) \ 20, (b + 22) \ 20) = "z" THEN eda = 1: r = 9: lke = 0 +IF asend((a + 21) \ 20, (b + 37) \ 20) = "z" THEN eda = 1: r = 9: lke = 0 + +IF asend((a + 22) \ 20, (b + 21) \ 20) = "z" THEN all = 0: cd = 10: lke = 0 +IF asend((a + 37) \ 20, (b + 21) \ 20) = "z" THEN all = 0: cd = 10: lke = 0 + +IF asend((a + 22) \ 20, (b + 38) \ 20) = "z" THEN all = -1: r1 = 2: lk = 1: lke = 0 +IF asend((a + 37) \ 20, (b + 38) \ 20) = "z" THEN all = -1: r1 = 2: lk = 1: lke = 0 + +qwer = qwer + 1: IF asend1((a + 30) \ 20, (b + 30) \ 20) = "q" AND qwer > 20 THEN qwer = 1: elu = elu - 1: eda = -5: all = -3: elud +IF qwer > 100 THEN qwer = 50 +IF asend((a + 30) \ 20, (b + 30) \ 20) = "1" THEN raha = raha + 1: kustuta1 = 1: elud: asend((a + 30) \ 20, (b + 30) \ 20) = "" +IF asend((a + 30) \ 20, (b + 30) \ 20) = "v" THEN all = -8: sipp = 3 +IF asend1((a + 30) \ 20, (b + 38) \ 20) = ">" THEN eda = 3 +IF asend1((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 +IF asend1((a + 30) \ 20, (b + 21) \ 20) = "o" THEN asend((a + 30) \ 20, (b + 21) \ 20) = "": asend1((a + 30) \ 20, (b + 21) \ 20) = "": kustuta = 1 +IF asend1((a + 30) \ 20, (b + 38) \ 20) = "a" THEN asend((a + 30) \ 20, (b + 38) \ 20) = "": asend1((a + 30) \ 20, (b + 38) \ 20) = "": kustuta2 = 1 +IF asend((siia + 25) \ 20, (siib + 25) \ 20) = "z" THEN siiall = -1 +IF asend((siia + 30) \ 20, (siib + 10) \ 20) = "z" THEN siie = -1 +IF asend((siia + 20) \ 20, (siib + 10) \ 20) = "z" THEN siie = 1 +IF asend((siia1 + 25) \ 20, (siib1 + 25) \ 20) = "z" THEN siiall1 = -1 +IF asend((siia1 + 30) \ 20, (siib1 + 10) \ 20) = "z" THEN siie1 = -1 +IF asend((siia1 + 20) \ 20, (siib1 + 10) \ 20) = "z" THEN siie1 = 1 +IF siia > 600 THEN siie = -1 +IF siia < 3 THEN siie = 1 +IF siia1 > 600 THEN siie1 = -1 +IF siia1 < 3 THEN siie1 = 1 +PUT (siia1 \ 2, siib1 \ 2), siilm2, PSET +PUT (siia \ 2, siib \ 2), siilm1, PSET +IF b > 0 THEN PUT (a \ 2, b \ 2), marm1, PSET +IF kustuta = 1 THEN kustuta = 0: PUT (((a + 10) \ 20) * 10, (b \ 20) * 10), tuhim, PSET +IF kustuta1 = 1 THEN kustuta1 = 0: PUT (((a + 10) \ 20) * 10, ((b + 10) \ 20) * 10), tuhim, PSET +IF kustuta2 = 1 THEN kustuta2 = 0: PUT (((a + 10) \ 20) * 10, ((b + 28) \ 20) * 10), tuhim, PSET +IF makk = 1 THEN makk = 0: a = a - 20 +asend1((siia1 + 25) \ 20, (siib1 + 8) \ 20) = "": asend1((siia + 25) \ 20, (siib + 8) \ 20) = "" +siia = siia + siie +siib = siib + siiall +siia1 = siia1 + siie1 +siib1 = siib1 + siiall1 +asend1((siia1 + 25) \ 20, (siib1 + 8) \ 20) = "q": asend1((siia + 25) \ 20, (siib + 8) \ 20) = "q" +siiall = siiall + 1: IF siiall > 2 THEN siiall = 2 +siiall1 = siiall1 + 1: IF siiall1 > 2 THEN siiall1 = 2 +a = a + eda +b = b + all +IF a > 594 THEN a = 2: maa = maa + 1: level maa: siie = 1: siie1 = 1 +IF a < 1 THEN a = 594: IF maa = 1 THEN level maa: ELSE maa = maa - 1: level maa: IF voolual = 1 THEN a = 297 +IF b > 358 THEN elu = elu - 1: elud: maa = maa - 1: level maa: b = 100: a = 2: elud +IF asend((a + 30) \ 20, (b + 30) \ 20) = "u" THEN a = uks3 + 5: b = uks4: eda = 0 +IF asend((a + 30) \ 20, (b + 30) \ 20) = "U" THEN a = uks1 + 5: b = uks2: eda = 0 +WEND +a$ = kbd$: kbd$ = "" +IF a$ = par7$ THEN eda = eda + 1: IF eda > 3 THEN eda = 3: r = 0 ELSE IF lke > 10 THEN eda = 5 +IF a$ = par7$ THEN IF sipa = 1 THEN sipp = 1: ELSE sipp = 2 +IF a$ = vas7$ THEN IF sipa = 1 THEN sipp = 10: ELSE sipp = 20 +IF a$ = vas7$ THEN eda = eda - 1: IF eda < -3 THEN eda = -3: r = 0 ELSE IF lke > 10 THEN eda = -5 +IF a$ = ule7$ AND lk < 10 THEN all = all - 5: lk = 20: r1 = 0: sipp = 3 +IF a$ = all7$ THEN all = all + 1 +IF a$ = "/" THEN a = 2: b = 50: maa = maa + 1: level maa: siie = 1: siie1 = 1 +IF a$ = "+" THEN a = 2: b = 50: maa = maa + 5: level maa: siie = 1: siie1 = 1 +IF a$ = "q" THEN END +sipa = sipa + 1 +IF sipa = 3 THEN sipa = 1 +GOTO 106 + +SUB elud +LOCATE 1, 1 +IF voolual = 2 THEN GOTO 12 +PRINT " " +IF raha > 9 THEN raha = 0: elu = elu + 1 +LOCATE 1, 1 +PRINT "o "; raha; " Elu "; elu +12 +IF elu < 0 THEN END +END SUB + +SUB joonist +tuhi$ = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +CLS +INPUT "laius", laius +INPUT "pikkus", pikkus +FOR a = 1 TO pikkus +text$(a) = RIGHT$(tuhi$, laius) +NEXT a +CLS +a = 1 +b = 1 +z = 3 +zx = 1 +2 +a$ = INPUT$(1) +IF zx = 1 THEN CIRCLE (a * 2, b * 2), 1, z +po = ASC(RIGHT$(LEFT$(text$(b), a), 1)) - 1 +IF zx = -1 THEN CIRCLE (a * 2, b * 2), 1, po +IF a$ = "6" THEN a = a + 1 +IF a$ = "4" THEN a = a - 1 +IF a$ = "8" THEN b = b - 1 +IF a$ = "2" THEN b = b + 1 +IF a$ = " " THEN zx = zx * -1 +IF a$ = "e" THEN GOTO 5 +IF a$ = "s" THEN GOTO 3 +IF a$ = "z" THEN z = 0 +IF a$ = "x" THEN z = 1 +IF a$ = "c" THEN z = 2 +IF a$ = "v" THEN z = 3 + +IF a < 1 THEN a = 1 +IF b < 1 THEN b = 1 +IF b > pikkus THEN b = pikkus +IF a > laius THEN a = laius +IF z > 3 THEN z = 3 +IF z < 0 THEN z = 0 +IF zx = 1 THEN MID$(text$(b), a) = CHR$(z + 1) +IF zx = 1 THEN CIRCLE (a * 2, b * 2), 1, z +IF zx = 1 THEN PAINT (a * 2, b * 2), z +o = 0 +IF zx = 1 THEN IF z = 0 THEN o = 3 +po = ASC(RIGHT$(LEFT$(text$(b), a), 1)) - 1 +IF zx = -1 THEN IF po = 0 THEN o = 3 +CIRCLE (a * 2, b * 2), 1, o +GOTO 2 +3 +INPUT "fail", a$ +save a$ +5 +END SUB + +SUB level (y) +125 +siia = 0 +siib = 0 +aiia1 = 0 +siib1 = 0 +FOR a1 = 1 TO 32 +FOR b1 = 1 TO 20 +asend(a1, b1) = "" +asend1(a1, b1) = "" +NEXT b1 +NEXT a1 +FOR a = 1 TO 10 +uun(a) = "" +NEXT a +CLS +LOCATE 3, 10 +SELECT CASE y +CASE 1 +uun(1) = " mmm" +uun(2) = " - m mm" +uun(3) = " . - mmm" +uun(4) = "o . . mymm" +uun(5) = "o -mmm" +uun(6) = "o t mxmm" +uun(7) = "o mmm" +uun(8) = "o 1 1 " +uun(9) = "o p p 1 1 1" +uun(10) = "mmmmmmmmmmmmmmmm" +voolual = 1 +CASE 2 +uun(1) = "mmmmmmmmmmmmmmmm" +uun(2) = "mm h h " +uun(3) = "mmx m mmmymmm" +uun(4) = "mmommmmmm mom m" +uun(5) = "mo 1 1 1 o1m1m" +uun(6) = "momm m m m m111m" +uun(7) = "m h mmmmoom" +uun(8) = " mm h m" +uun(9) = " v mmm mm" +uun(10) = "mmmmmmmmmmmmmmmm" +CASE 3 +uun(1) = "mmmmmmmmmmmmmmmm" +uun(2) = " h h h h h ym11" +uun(3) = "mm mmmmmmmmmmm1m" +uun(4) = "m h m xm " +uun(5) = "mm m m mmmmmmmmm" +uun(6) = "mmmm m1m " +uun(7) = "m h m1moo m" +uun(8) = "m mmmmmm m1moomm" +uun(9) = "m 11111m h h " +uun(10) = "mmmmmmmmmmmmmmmm" +CASE 4 +uun(1) = "mmmmmmmmmmmmmmmm" +uun(2) = " h1 h1 m" +uun(3) = "mmm 1 11 1 o1m" +uun(4) = " m 1 oo 1o1m" +uun(5) = "m moo oo1m" +uun(6) = " m h o " +uun(7) = "mmm h o " +uun(8) = "m o " +uun(9) = " x oy " +uun(10) = "mmmmmmmmmmmmmmmm" +CASE 5 +uun(1) = "m . y - " +uun(2) = "m m moo" +uun(3) = "m. mxm mmo" +uun(4) = "m - m mmmmmm" +uun(5) = "m . m mm " +uun(6) = "mt o o m " +uun(7) = "m o om o ooo " +uun(8) = "m ooooooooooo " +uun(9) = " v o " +uun(10) = "oooooooooooooooo" +CASE 6 +PRINT "1-2 Maailm . Kood: teine": elud +a$ = INPUT$(1) +CLS +uun(1) = " - " +uun(2) = " . " +uun(3) = " oo- oo " +uun(4) = " - 11 11 ." +uun(5) = " oo oo " +uun(6) = " m ym11 11 " +uun(7) = " m m " +uun(8) = " ooom <> <> " +uun(9) = " xmmm mmm" +uun(10) = "mmmmmmmmmmm mmm" +CASE 7 +uun(1) = " oooo " +uun(2) = " o111 . " +uun(3) = " oooo> >>>>>>" +uun(4) = " . x v m" +uun(5) = " mym m" +uun(6) = " m m" +uun(7) = " 111m" +uun(8) = " 111m" +uun(9) = " v p " +uun(10) = "oooaaaaaaaaaoooo" +CASE 8 +uun(1) = " . o" +uun(2) = " . mm o" +uun(3) = ". ommm t o" +uun(4) = " mom mm o" +uun(5) = " pmmoyxmmm o" +uun(6) = " mmmomammmm m" +uun(7) = "p mmmmv mmmm " +uun(8) = "mmmmmmmmm mmmmmm" +uun(9) = " " +uun(10) = ">>>>>>>>>>>>>>>>" +maa = maa + 1 +CASE 10 +uun(1) = "m. - m" +uun(2) = "m . m" +uun(3) = "m 111 - m" +uun(4) = "mmmmm>>> ammm" +uun(5) = "a a m" +uun(6) = "mmm t a m" +uun(7) = " ma m" +uun(8) = ">>> a m" +uun(9) = " m yx m m" +uun(10) = ">>>mmmmmmmmmmm m" +CASE 9 +uun(1) = "mammmmmmmmmmmmm " +uun(2) = "m1m y xmo " +uun(3) = "mamooo>>>a>am om" +uun(4) = "m1m m1mamo m" +uun(5) = "mamm m1mam om" +uun(6) = "m1m mm1mamo m" +uun(7) = "mammm m1ma om" +uun(8) = "m1m mmm1ma o m" +uun(9) = "m amam om" +uun(10) = "mmmmmmmm 1 THEN GOTO 4 +FOR a = 1 TO 100 +IF ao(a) = "" THEN GOTO 1 +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 1 +4 +FOR a = 1 TO 100 +IF ao(a) = "" THEN GOTO 1 +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 1 +8 +FOR a = 1 TO 100 +IF ao(a) = "" THEN GOTO 1 +FOR b = 1 TO LEN(ao(a)) +PSET ((p + b) \ teler, (o + a) \ teler), ASC(LEFT$(RIGHT$(ao(a), b), 1)) - 48 +NEXT b +NEXT a + +1 +ERASE ao +END SUB + +SUB save (y$) +OPEN y$ FOR OUTPUT AS #1 +PRINT #1, pikkus +FOR a = 1 TO pikkus +PRINT #1, text$(a) +NEXT a +CLOSE +END SUB + +SUB wiew (r$, a, b) +OPEN r$ FOR INPUT AS #2 +INPUT #2, pikkus +FOR e = 1 TO pikkus +INPUT #2, b$ +FOR D = 1 TO LEN(b$) +PSET (D + a, b + e), ASC(RIGHT$(LEFT$(b$, D), 1)) - 1 +NEXT D +NEXT e +CLOSE +END SUB diff --git a/Games/Pomppu Paavo/Pomppu Paavo.bas b/Games/Pomppu Paavo/Pomppu Paavo.bas deleted file mode 100755 index 8c35239..0000000 --- a/Games/Pomppu Paavo/Pomppu Paavo.bas +++ /dev/null @@ -1,840 +0,0 @@ -DECLARE SUB RenderSpriteFromFile (x%, y%, widthMultiplier%, heightMultiplier%, SpriteName$) -DECLARE SUB RenderFlippedSpriteFromFile (x%, y%, widthMultiplier%, heightMultiplier%, Filename$) -' Pomppu Paavo 2 -' -' This program is free software: released under Creative Commons Zero (CC0) license -' by Svjatoslav Agejenko. -' Email: svjatoslav@svjatoslav.eu -' Homepage: http://www.svjatoslav.eu -' -' Changelog: -' 1999, Initial version -' 2025, Improved program readability - -DECLARE SUB UpdateLoadingScreen () -DECLARE SUB HandleEscapeKey () -DECLARE SUB PlayHurtSound () -DECLARE SUB GameOverSequence () - -DECLARE SUB HandlePlayerDeath () -DEFINT A-Z -DECLARE SUB InitializeAllLevelData () -DECLARE SUB UpdateHUD (coinIncrementAmount%) -DECLARE SUB LoadCurrentLevel () -DECLARE SUB ShowIntroScreen () -DECLARE SUB WaitForUserInput () - -DIM SHARED userInput$ - -' Grid representing solid level elements (m = block, o = breakable, etc.) -DIM SHARED levelGrid(-5 TO 20, -5 TO 20) AS STRING - -' Tracks interactive objects like breakable blocks separately from main grid -DIM SHARED interactiveObjectsGrid(-5 TO 20, -5 TO 20) AS STRING - -' Stores raw text-based level layouts for all worlds -DIM SHARED levelData(1 TO 11, 1 TO 10) AS STRING * 15 - -' Background color index for each world's sky -DIM SHARED levelSkyColor(1 TO 10) AS INTEGER - -' Current active level number (1-10) -DIM SHARED currentLevelNumber AS INTEGER - -' Previously played level number (for backtracking after death) -DIM SHARED previousLevelNumber AS INTEGER - -' Temporary storage for current level's row data during loading -DIM SHARED levelRowData(1 TO 15) AS STRING * 15 - -' Buffer to store cloud sprite image data -DIM SHARED cloudSpriteBuffer(2100) - -' Buffer for solid block sprite images -DIM SHARED solidBlockSpriteBuffer(202) - -' Buffer for brick/block sprite images -DIM SHARED brickSpriteBuffer(202) - -' Buffer for power-up item sprites (like mushrooms) -DIM SHARED powerUpSpriteBuffer(1000) - -' Buffer for tree sprite images -DIM SHARED treeSpriteBuffer(2000) - -' Buffer for empty space sprite (used when clearing coins/breakables) -DIM SHARED emptySpaceSpriteBuffer(202) - -' Main coin sprite buffer -DIM SHARED coinSpriteBuffer(202) - -' Larger coin variant sprite buffer -DIM SHARED largeCoinSpriteBuffer(400) - -' Smaller coin variant sprite buffer -DIM SHARED smallCoinSpriteBuffer(200) - -' Player character animation frames (base + walking variants) -DIM SHARED playerAnimationFrames(402) - -' Primary player sprite animation frames array -DIM SHARED playerWalkingFrames(202, 1 TO 5) - -' Enemy base sprite buffers (stores background under enemies for erasing) -DIM SHARED enemyBackgroundBuffers(1 TO 230, 1 TO 10) - -' Enemy walking animation frames -DIM SHARED enemyWalkingFrames(1 TO 202, 1 TO 5) - -' X positions of all enemies (max 10 per level) -DIM SHARED enemyXPositions(1 TO 10) - -' Y positions of all enemies -DIM SHARED enemyYPositions(1 TO 10) - -' Vertical movement speeds for enemies (positive = down) -DIM SHARED enemyVerticalSpeeds(1 TO 10) - -' Horizontal movement speeds for enemies (positive = right) -DIM SHARED enemyHorizontalSpeeds(1 TO 10) - -' Array storing individual digits of coin counter (index 1=ones, 2=tens) -DIM SHARED CoinDigits(1 TO 5) - -' Pre-loaded digit images for HUD display (0-9) -DIM SHARED digitImages(100, 0 TO 11) - -' Number of remaining player lives -DIM SHARED lives - -' Total coins collected by player -DIM SHARED coinsCollected - -' Flag: set when a coin needs to be cleared from grid -DIM SHARED shouldClearCoinFlag - -' Grid X position where coin needs clearing -DIM SHARED clearCoinGridX - -' Grid Y position where coin needs clearing -DIM SHARED clearCoinGridY - -' Player's current X coordinate on screen -DIM SHARED playerX - -' Player's current Y coordinate on screen -DIM SHARED playerY - -' Counter tracking loading progress dots -DIM SHARED loadingProgressDotCount - -loadingProgressDotCount = 1 -SCREEN 13 -currentLevelNumber = 1 -previousLevelNumber = 1 -InitializeAllLevelData -1 - -' Reset entire VGA palette to black (0-254) -FOR colorIndex = 0 TO 254 -OUT &H3C8, colorIndex -OUT &H3C9, 0 -OUT &H3C9, 0 -OUT &H3C9, 0 -NEXT colorIndex - -' Set color 255 to bright white (60/63 intensity) -OUT &H3C8, 255 -OUT &H3C9, 60 -OUT &H3C9, 60 -OUT &H3C9, 60 -LOCATE 20, 3 -COLOR 255 -PRINT "LOADING " - -' Load all game assets sequentially with visual feedback -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "pilv" -GET (1, 1)-(109, 35), cloudSpriteBuffer - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "kast" -GET (1, 2)-(20, 21), solidBlockSpriteBuffer - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "tellis" -GET (1, 2)-(20, 21), brickSpriteBuffer - -UpdateLoadingScreen -GET (1, 2)-(20, 21), emptySpaceSpriteBuffer - -RenderSpriteFromFile 0, 0, 1, 1, "paavo1" -GET (1, 2)-(20, 21), playerWalkingFrames(202, 1) - -UpdateLoadingScreen -RenderFlippedSpriteFromFile 0, 0, 1, 1, "paavo1" -GET (3, 2)-(22, 21), playerWalkingFrames(202, 2) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "paavo2" -GET (1, 2)-(20, 21), playerWalkingFrames(202, 3) - -UpdateLoadingScreen -RenderFlippedSpriteFromFile 0, 0, 1, 1, "paavo2" -GET (3, 2)-(22, 21), playerWalkingFrames(202, 4) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "poosas" -GET (1, 1)-(60, 21), powerUpSpriteBuffer - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "puu" -GET (1, 1)-(40, 60), treeSpriteBuffer - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "munt" -GET (1, 1)-(10, 11), coinSpriteBuffer - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "munt1" -GET (0, 2)-(20, 11), largeCoinSpriteBuffer - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "munt2" -GET (0, 2)-(20, 11), smallCoinSpriteBuffer - -' Load all numeric digit sprites for HUD display -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "0" -GET (0, 2)-(10, 11), digitImages(100, 0) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "1" -GET (0, 2)-(10, 11), digitImages(100, 1) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "2" -GET (0, 2)-(10, 11), digitImages(100, 2) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "3" -GET (0, 2)-(10, 11), digitImages(100, 3) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "4" -GET (0, 2)-(10, 11), digitImages(100, 4) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "5" -GET (0, 2)-(10, 11), digitImages(100, 5) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "6" -GET (0, 2)-(10, 11), digitImages(100, 6) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "7" -GET (0, 2)-(10, 11), digitImages(100, 7) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "8" -GET (0, 2)-(10, 11), digitImages(100, 8) - -UpdateLoadingScreen -GET (0, 2)-(10, 11), digitImages(100, 10) -RenderSpriteFromFile 0, 0, 1, 1, "9" -GET (0, 2)-(10, 11), digitImages(100, 9) - -' Load enemy sprite frames -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "tigu" -GET (1, 2)-(20, 21), enemyWalkingFrames(202, 1) - -UpdateLoadingScreen -RenderSpriteFromFile 0, 0, 1, 1, "tigu1" -GET (3, 2)-(22, 21), enemyWalkingFrames(202, 2) - -UpdateLoadingScreen -RenderFlippedSpriteFromFile 0, 0, 1, 1, "tigu" -GET (1, 2)-(20, 21), enemyWalkingFrames(202, 3) - -UpdateLoadingScreen -RenderFlippedSpriteFromFile 0, 0, 1, 1, "tigu1" -GET (3, 2)-(22, 21), enemyWalkingFrames(202, 4) - -SCREEN 0 -SCREEN 13 -LoadCurrentLevel -playerX = 50 -playerY = 50 -horizontalMovementSpeed = 0 -currentWalkFrameIndex = 1 -leftWalkFrameIndex = 1 -rightWalkFrameIndex = 2 -coinsCollected = 0 -lives = 3 -animationFrameCounter = 1 -UpdateHUD 0 -12 -' Save current player position background before drawing character -IF playerY > 0 THEN GET (playerX, playerY)-(playerX + 20, playerY + 20), playerAnimationFrames: PUT (playerX, playerY), playerWalkingFrames(202, currentWalkFrameIndex), OR - -' Process all enemies (max 10) -FOR enemyIndex = 1 TO 10 - ' Only update visible enemies above bottom of screen - IF enemyYPositions(enemyIndex) < 170 AND animationFrameCounter = 1 THEN - ' Apply vertical and horizontal movement - enemyYPositions(enemyIndex) = enemyYPositions(enemyIndex) + enemyVerticalSpeeds(enemyIndex) - enemyXPositions(enemyIndex) = enemyXPositions(enemyIndex) + enemyHorizontalSpeeds(enemyIndex) - ' Save background under enemy for later erasing - GET (enemyXPositions(enemyIndex), enemyYPositions(enemyIndex))-(enemyXPositions(enemyIndex) + 20, enemyYPositions(enemyIndex) + 20), enemyBackgroundBuffers(202, enemyIndex) - - ' Determine which walking animation frame to show - IF enemyHorizontalSpeeds(enemyIndex) <= 0 THEN walkAnimationPhase = 1 ELSE walkAnimationPhase = 3 - IF enemyAnimationFrameCounter > 2 THEN walkAnimationPhase = walkAnimationPhase + 1: IF enemyAnimationFrameCounter = 3 THEN enemyVerticalSpeeds(enemyIndex) = enemyVerticalSpeeds(enemyIndex) + 1 - - ' Draw enemy with correct animation frame - PUT (enemyXPositions(enemyIndex), enemyYPositions(enemyIndex)), enemyWalkingFrames(202, walkAnimationPhase) - END IF -NEXT enemyIndex - -' Create short delay using silent sound (QBasic lacks proper delay function) -SOUND 0, .5 - -' Cycle through animation frames -animationFrameCounter = animationFrameCounter + 1 -IF animationFrameCounter > 3 THEN animationFrameCounter = 1 - -' Every third frame, process physics and input -IF animationFrameCounter = 1 THEN - enemyAnimationFrameCounter = enemyAnimationFrameCounter + 1 - IF enemyAnimationFrameCounter > 5 THEN enemyAnimationFrameCounter = 0 - - ' Apply gravity to player (increases downward speed each frame) - verticalMovementSpeed = verticalMovementSpeed + 1 - - ' Gradually reduce horizontal movement (friction effect) - IF horizontalMovementSpeed > 0 THEN horizontalMovementSpeed = horizontalMovementSpeed - 1: walkAnimationPhaseCounter = walkAnimationPhaseCounter + 1 - IF horizontalMovementSpeed < 0 THEN horizontalMovementSpeed = horizontalMovementSpeed + 1: walkAnimationPhaseCounter = walkAnimationPhaseCounter + 1 - - ' Alternate between walk animation phases every 2 frames - IF walkAnimationPhaseCounter > 2 THEN walkAnimationPhaseCounter = 1 - IF walkAnimationPhaseCounter = 2 THEN leftWalkFrameIndex = 1: rightWalkFrameIndex = 2 - IF walkAnimationPhaseCounter = 1 THEN leftWalkFrameIndex = 3: rightWalkFrameIndex = 4 - - ' Process enemy collisions and movements - FOR enemyIndex = 1 TO 10 - IF enemyYPositions(enemyIndex) < 170 THEN - ' Reverse vertical direction when hitting ceiling block - IF levelGrid((enemyXPositions(enemyIndex) + 20) / 20, (enemyYPositions(enemyIndex) + 9) / 20) = "m" THEN enemyVerticalSpeeds(enemyIndex) = -1 - - ' Reverse horizontal direction at screen edges - IF enemyXPositions(enemyIndex) > 270 THEN enemyHorizontalSpeeds(enemyIndex) = -1 - IF enemyXPositions(enemyIndex) < 2 THEN enemyHorizontalSpeeds(enemyIndex) = 1 - - ' Reverse horizontal direction when hitting wall blocks - IF levelGrid((enemyXPositions(enemyIndex) + 28) / 20, enemyYPositions(enemyIndex) / 20) = "m" THEN enemyHorizontalSpeeds(enemyIndex) = -1 - IF levelGrid((enemyXPositions(enemyIndex) + 10) / 20, enemyYPositions(enemyIndex) / 20) = "m" THEN enemyHorizontalSpeeds(enemyIndex) = 1 - - ' Check for collision with player (trigger death) - IF enemyXPositions(enemyIndex) - 20 < playerX AND enemyXPositions(enemyIndex) + 20 > playerX AND enemyYPositions(enemyIndex) - 5 < playerY AND enemyYPositions(enemyIndex) + 20 > playerY THEN PlayHurtSound: HandlePlayerDeath: GOTO 12 - END IF - NEXT enemyIndex -END IF - -' Check for player collisions with level geometry: - -' Ceiling collision (reverse gravity) -IF levelGrid((playerX + 15) / 20, (playerY + 9) / 20) = "m" THEN verticalMovementSpeed = -1: airTimeCounter = 0 - -' Right wall collision -IF levelGrid((playerX + 25) / 20, (playerY + 9) / 20) = "m" THEN verticalMovementSpeed = -1: airTimeCounter = 0 - -' Floor collision (stop falling) -IF levelGrid((playerX + 20) / 20, (playerY - 8) / 20) = "m" THEN verticalMovementSpeed = 1: airTimeCounter = 20 - -' Right wall collision -IF levelGrid((playerX + 28) / 20, (playerY) / 20) = "m" THEN horizontalMovementSpeed = -1: wallCollisionLock = 1 - -' Left wall collision -IF levelGrid((playerX + 10) / 20, (playerY) / 20) = "m" THEN horizontalMovementSpeed = 1: wallCollisionLock = 1 - -' Breakable block collision (turn into empty space) -IF interactiveObjectsGrid((playerX + 20) / 20, (playerY - 8) / 20) = "o" THEN verticalMovementSpeed = 1: interactiveObjectsGrid((playerX + 20) / 20, (playerY - 8) / 20) = "": levelGrid((playerX + 20) / 20, (playerY - 8) / 20) = "2": clearCoinGridX _ -= ((playerX + 20) / 20) - 1: clearCoinGridY = (playerY - 8) / 20: shouldClearCoinFlag = 1: SOUND 50, .5 - -' Coin collection -IF levelGrid((playerX + 20) / 20, (playerY) / 20) = "1" THEN levelGrid((playerX + 20) / 20, (playerY) / 20) = "2": clearCoinGridX = ((playerX + 21) / 20) - 1: clearCoinGridY = (playerY) / 20: shouldClearCoinFlag = 1: coinsCollected = coinsCollected _ -+ 1: UpdateHUD 1: SOUND 1000, 1: SOUND 2000, 1 - -' Track time in air for jump control -airTimeCounter = airTimeCounter + 1 - -' Process keyboard input: -userInput$ = INKEY$ -' Jump when up arrow pressed (only if not already high in air) -IF userInput$ = CHR$(0) + "H" AND airTimeCounter < 10 THEN verticalMovementSpeed = -6 -' Move right with right arrow -IF userInput$ = CHR$(0) + "M" AND wallCollisionLock = 0 THEN horizontalMovementSpeed = horizontalMovementSpeed + 3: currentWalkFrameIndex = leftWalkFrameIndex -' Move left with left arrow -IF userInput$ = CHR$(0) + "K" AND wallCollisionLock = 0 THEN horizontalMovementSpeed = horizontalMovementSpeed - 3: currentWalkFrameIndex = rightWalkFrameIndex -' Escape key handler -IF userInput$ = CHR$(27) THEN HandleEscapeKey -' Level skip (debug only - plus key) -IF userInput$ = "+" AND wallCollisionLock = 0 THEN currentLevelNumber = currentLevelNumber + 1: LoadCurrentLevel: GOTO 12 -' Reset wall collision lock each frame -IF wallCollisionLock <> 0 THEN wallCollisionLock = 0 - -' Cap movement speeds to prevent excessive speed -IF horizontalMovementSpeed > 5 THEN horizontalMovementSpeed = 3 -IF horizontalMovementSpeed < -5 THEN horizontalMovementSpeed = -3 -IF verticalMovementSpeed > 3 THEN verticalMovementSpeed = 3 - -' Restore background where player was previously drawn -IF playerY > 0 THEN PUT (playerX, playerY), playerAnimationFrames, PSET - -' Redraw enemies on this animation frame -IF animationFrameCounter = 1 THEN - FOR enemyIndex = 10 TO 1 STEP -1 - IF enemyYPositions(enemyIndex) < 170 THEN PUT (enemyXPositions(enemyIndex), enemyYPositions(enemyIndex)), enemyBackgroundBuffers(202, enemyIndex), PSET - NEXT enemyIndex -END IF - -' Apply physics to player position -playerY = playerY + verticalMovementSpeed -playerX = playerX + horizontalMovementSpeed - -' Clear collected coin/block from screen -IF shouldClearCoinFlag > 0 THEN shouldClearCoinFlag = 0: PUT (clearCoinGridX * 20, clearCoinGridY * 20), emptySpaceSpriteBuffer, PSET - -' Level transition when reaching screen edges -IF playerX > 280 THEN currentLevelNumber = currentLevelNumber + 1: LoadCurrentLevel: playerX = 3 -IF playerX < 2 THEN currentLevelNumber = currentLevelNumber - 1: LoadCurrentLevel: playerX = 279 - -' Player death when falling off bottom of screen -IF playerY > 170 THEN FOR tone = 3000 TO 500 STEP -100: SOUND tone, .3: NEXT tone: HandlePlayerDeath -GOTO 12 - -SUB GameOverSequence -' Shows game over screen with animated death effect. -' First displays "You are killed!" text, then pixelates the screen, -' adds flying debris animation, waits for keypress, then fades to black. - -DIM deathScreenBuffer(1 TO 2000) -GET (0, 0)-(150, 20), deathScreenBuffer -LOCATE 1, 1 -PRINT "You are " -LOCATE 2, 1 -PRINT " killed! " - -' Create pixelated death effect by scaling up screen area -FOR x = 0 TO 80 - FOR y = 0 TO 16 - ' Only process non-background pixels - IF POINT(x, y) > 0 THEN - ' Draw 5x5 block for each original pixel (magnification effect) - LINE (x * 5, y * 5 + 50)-(x * 5 + 4, y * 5 + 54), 4, BF - END IF - NEXT y -NEXT x -PUT (0, 0), deathScreenBuffer, PSET - -' Add random flying debris particles -FOR particle = 1 TO 100 - x = RND * 290 + 4 - y = RND * 170 + 4 - GET (x, y)-(x + 20, y + 20), deathScreenBuffer - x = x + RND * 4 - 2 - y = y + RND * 4 - 1 - PUT (x, y), deathScreenBuffer, PSET -NEXT particle - -' Wait briefly before requiring keypress -FOR waitCount = 1 TO 50 - userInput$ = INKEY$ -NEXT waitCount -userInput$ = INPUT$(1) - -' Draw closing red lines from top and bottom -FOR lineIndex = 0 TO 10 - SOUND 0, .05 - LINE (0, lineIndex)-(320, lineIndex), 4 - LINE (0, 200 - lineIndex)-(320, 200 - lineIndex), 4 -NEXT lineIndex - -' Fade out red color channel to black -FOR fadeStep = 32 TO 0 STEP -1 - SOUND 0, .5 - OUT &H3C8, 4 - OUT &H3C9, fadeStep - OUT &H3C9, 0 - OUT &H3C9, 0 -NEXT fadeStep -END - -END SUB - -SUB HandleEscapeKey -' Handles ESC key press: performs smooth screen fadeout then exits to DOS. - -' Fade screen to black in vertical bands -FOR band = 0 TO 20 - FOR lineIndex = band TO 200 STEP 20 - LINE (0, lineIndex)-(320, lineIndex), 0 - NEXT lineIndex - SOUND 0, .5 -NEXT band -SYSTEM - -END SUB - -SUB HandlePlayerDeath -' Processes player death: moves back one level, resets player position, -' decreases remaining lives, and updates HUD display. -' Does not end game - continues playing from previous level. - -IF currentLevelNumber > 1 THEN currentLevelNumber = currentLevelNumber - 1 - -LoadCurrentLevel -playerX = 20 -playerY = 100 -lives = lives - 1 -UpdateHUD 0 -END SUB - -SUB InitializeAllLevelData -' Sets up all level layouts as text-based grids. -' Each character represents a game element: -' m = solid block -' o = breakable block -' $ = coin -' . = power-up item -' + = tree/decoration -' numbers 1-9 = enemy spawn points - -levelSkyColor(1) = 1 -levelData(1, 1) = "m " -levelData(2, 1) = "m - - " -levelData(3, 1) = "m " -levelData(4, 1) = "m $ $ $ $ " -levelData(5, 1) = "m $ $ $ $ " -levelData(6, 1) = "m + momom " -levelData(7, 1) = "m " -levelData(8, 1) = "m . . " -levelData(9, 1) = "mmmmmmmmmmmmmmm" - -levelSkyColor(2) = 1 -levelData(1, 2) = " $2- " -levelData(2, 2) = " o$ " -levelData(3, 2) = " o$ - " -levelData(4, 2) = " o$ 3 " -levelData(5, 2) = " o o1 " -levelData(6, 2) = " + mmom" -levelData(7, 2) = " omom m " -levelData(8, 2) = " $ $ $ $ m " -levelData(9, 2) = "mmmm mm" - -levelSkyColor(3) = 1 -levelData(1, 3) = " mmmmm" -levelData(2, 3) = "- $ $ mmmmm" -levelData(3, 3) = " $ $ $ mmmmm" -levelData(4, 3) = " $ $ mmmmm" -levelData(5, 3) = " . mmmmm" -levelData(6, 3) = "mmmm 1 mmmm" -levelData(7, 3) = " mm m" -levelData(8, 3) = " mmm " -levelData(9, 3) = "mmm mmmmm" - -levelSkyColor(4) = 0 -levelData(1, 4) = "mmmmmmmmmmmmmmm" -levelData(2, 4) = "m$ $ $ $ $ " -levelData(3, 4) = "mm $m $4$ $ $ " -levelData(4, 4) = "m$m mmmmmommmm" -levelData(5, 4) = "m$ 3 2 m" -levelData(6, 4) = "m1 ooooooomo m" -levelData(7, 4) = "mooo$$$$$$$m m" -levelData(8, 4) = " m" -levelData(9, 4) = "mmmmmmmmmmmmmmm" - -levelSkyColor(5) = 0 -levelData(1, 5) = "mmmmmmmmmmmmmmm" -levelData(2, 5) = " m " -levelData(3, 5) = "m m 1 3 mmmm" -levelData(4, 5) = "m m mmm o m" -levelData(5, 5) = "m m4567892o m" -levelData(6, 5) = "m mooooommo m" -levelData(7, 5) = "m mm" -levelData(8, 5) = "m mmm" -levelData(9, 5) = "mmmm mmm mmmm" - -levelSkyColor(6) = 1 -levelData(1, 6) = "m " -levelData(2, 6) = " - $ - " -levelData(3, 6) = "m $ $ " -levelData(4, 6) = "m o o $ " -levelData(5, 6) = "m o o " -levelData(6, 6) = "m + " -levelData(7, 6) = "m " -levelData(8, 6) = "mm 1 m 2 m " -levelData(9, 6) = "mmmmmmmmmmmmmmm" - -levelSkyColor(7) = 1 -levelData(1, 7) = " - " -levelData(2, 7) = " - " -levelData(3, 7) = " 1m" -levelData(4, 7) = " 2mm" -levelData(5, 7) = " 3mmm" -levelData(6, 7) = " o + 4mmmm" -levelData(7, 7) = " ooo 5mmmmm" -levelData(8, 7) = " 6mmmmmm" -levelData(9, 7) = "mmmmmmmmmmmmmmm" - -levelSkyColor(8) = 1 -levelData(1, 8) = " mmmmmmmmmmmmm" -levelData(2, 8) = " m123m456m789 " -levelData(3, 8) = " mm$mmm$mmm$mm" -levelData(4, 8) = " mm$$$$$$$$$$m" -levelData(5, 8) = " mmom$mmm$mmmm" -levelData(6, 8) = " o$$$$$$$$$ o" -levelData(7, 8) = " omooooooo o" -levelData(8, 8) = " - m " -levelData(9, 8) = "mmmmmmmmmmmmmmm" - -levelSkyColor(9) = 0 -levelData(1, 9) = " 12345" -levelData(2, 9) = " 6789 " -levelData(3, 9) = " mm" -levelData(4, 9) = " m " -levelData(5, 9) = " m " -levelData(6, 9) = " m " -levelData(7, 9) = " m " -levelData(8, 9) = " m " -levelData(9, 9) = "mm " - -levelSkyColor(10) = 1 -levelData(1, 10) = "m " -levelData(2, 10) = " - " -levelData(3, 10) = "m - " -levelData(4, 10) = "m + " -levelData(5, 10) = "m " -levelData(6, 10) = "m + 2 " -levelData(7, 10) = "m mmm " -levelData(8, 10) = "m . 1 " -levelData(9, 10) = "mmmmmmmmmmm mm" -END SUB - -SUB LoadCurrentLevel -' Loads and renders the currently selected level: -' 1. Validates level number (ends game at level 11) -' 2. Copies level data into working arrays -' 3. Resets interactive object grid -' 4. Clears enemy positions -' 5. Renders all level elements based on character codes - -IF currentLevelNumber > 10 THEN - CLS - PRINT "Mission complete!" - PRINT "Game over" - END -END IF - -' Copy level rows into temporary storage -FOR rowIndex = 1 TO 10 - levelRowData(rowIndex + 1) = levelData(rowIndex, currentLevelNumber) -NEXT rowIndex - -' Clear breakable blocks from previous level -FOR rowIndex = 1 TO 10 - FOR columnIndex = 1 TO 15 - IF levelGrid(columnIndex, rowIndex - 2) = "2" THEN MID$(levelData(rowIndex, previousLevelNumber), columnIndex) = " " - NEXT columnIndex -NEXT rowIndex -previousLevelNumber = currentLevelNumber - -' Reset entire level grids to empty -FOR x = -3 TO 20 - FOR y = -3 TO 20 - levelGrid(x, y) = "" - interactiveObjectsGrid(x, y) = "" - NEXT y -NEXT x - -' Reset all enemies to off-screen positions -FOR enemyIndex = 1 TO 10 - enemyYPositions(enemyIndex) = 1000 - enemyHorizontalSpeeds(enemyIndex) = 1 - enemyVerticalSpeeds(enemyIndex) = 0 -NEXT enemyIndex - -' Set background color and clear screen -CLS -PAINT (1, 1), levelSkyColor(currentLevelNumber) -GET (1, 2)-(20, 21), emptySpaceSpriteBuffer - -' Process each character in level data to render elements -FOR rowIndex = 2 TO 10 - FOR columnIndex = 1 TO 15 - ' Extract single character from level data row - character$ = RIGHT$(LEFT$(levelRowData(rowIndex), columnIndex), 1) - - ' Render different elements based on character code - IF character$ = "-" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), cloudSpriteBuffer, OR - IF character$ = "." THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), powerUpSpriteBuffer, OR - IF character$ = "+" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), treeSpriteBuffer, OR - IF character$ = "$" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), coinSpriteBuffer, OR: levelGrid(columnIndex, rowIndex - 2) = "1" - IF character$ = "m" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), solidBlockSpriteBuffer, PSET: levelGrid(columnIndex, rowIndex - 2) = "m" - IF character$ = "o" THEN PUT ((columnIndex - 1) * 20, (rowIndex - 2) * 20), brickSpriteBuffer, PSET: levelGrid(columnIndex, rowIndex - 2) = "m": interactiveObjectsGrid(columnIndex, rowIndex - 2) = "o" - IF character$ = " " THEN levelGrid(columnIndex, rowIndex) = " " - - ' Place enemies based on numeric character codes (1-9,0) - IF character$ = "1" THEN enemyXPositions(1) = (columnIndex - 1) * 20: enemyYPositions(1) = (rowIndex - 2) * 20: GET (enemyXPositions(1), enemyYPositions(1))-(enemyXPositions(1) + 20, enemyYPositions(1) + 20), enemyBackgroundBuffers(202, 1) - IF character$ = "2" THEN enemyXPositions(2) = (columnIndex - 1) * 20: enemyYPositions(2) = (rowIndex - 2) * 20: GET (enemyXPositions(2), enemyYPositions(2))-(enemyXPositions(2) + 20, enemyYPositions(2) + 20), enemyBackgroundBuffers(202, 2) - IF character$ = "3" THEN enemyXPositions(3) = (columnIndex - 1) * 20: enemyYPositions(3) = (rowIndex - 2) * 20: GET (enemyXPositions(3), enemyYPositions(3))-(enemyXPositions(3) + 20, enemyYPositions(3) + 20), enemyBackgroundBuffers(202, 3) - IF character$ = "4" THEN enemyXPositions(4) = (columnIndex - 1) * 20: enemyYPositions(4) = (rowIndex - 2) * 20: GET (enemyXPositions(4), enemyYPositions(4))-(enemyXPositions(4) + 20, enemyYPositions(4) + 20), enemyBackgroundBuffers(202, 4) - IF character$ = "5" THEN enemyXPositions(5) = (columnIndex - 1) * 20: enemyYPositions(5) = (rowIndex - 2) * 20: GET (enemyXPositions(5), enemyYPositions(5))-(enemyXPositions(5) + 20, enemyYPositions(5) + 20), enemyBackgroundBuffers(202, 5) - IF character$ = "6" THEN enemyXPositions(6) = (columnIndex - 1) * 20: enemyYPositions(6) = (rowIndex - 2) * 20: GET (enemyXPositions(6), enemyYPositions(6))-(enemyXPositions(6) + 20, enemyYPositions(6) + 20), enemyBackgroundBuffers(202, 6) - IF character$ = "7" THEN enemyXPositions(7) = (columnIndex - 1) * 20: enemyYPositions(7) = (rowIndex - 2) * 20: GET (enemyXPositions(7), enemyYPositions(7))-(enemyXPositions(7) + 20, enemyYPositions(7) + 20), enemyBackgroundBuffers(202, 7) - IF character$ = "8" THEN enemyXPositions(8) = (columnIndex - 1) * 20: enemyYPositions(8) = (rowIndex - 2) * 20: GET (enemyXPositions(8), enemyYPositions(8))-(enemyXPositions(8) + 20, enemyYPositions(8) + 20), enemyBackgroundBuffers(202, 8) - IF character$ = "9" THEN enemyXPositions(9) = (columnIndex - 1) * 20: enemyYPositions(9) = (rowIndex - 2) * 20: GET (enemyXPositions(9), enemyYPositions(9))-(enemyXPositions(9) + 20, enemyYPositions(9) + 20), enemyBackgroundBuffers(202, 9) - IF character$ = "0" THEN enemyXPositions(10) = (columnIndex - 1) * 20: enemyYPositions(10) = (rowIndex - 2) * 20: GET (enemyXPositions(10), enemyYPositions(10))-(enemyXPositions(10) + 20, enemyYPositions(10) + 20), enemyBackgroundBuffers(202 _ -, 10) - NEXT columnIndex -NEXT rowIndex -UpdateHUD 0 -END SUB - -SUB PlayHurtSound -' Plays distinctive "hurt" sound effect with descending pitch. -' Creates two converging tones that slide downward in frequency. - -startFrequency = 1700 -endFrequency = 1900 -FOR toneStep = 1 TO 50 - startFrequency = startFrequency + 3 - endFrequency = endFrequency - 5 - SOUND startFrequency, .2 - SOUND endFrequency, .2 -NEXT toneStep -END SUB - -SUB RenderFlippedSpriteFromFile (x%, y%, widthMultiplier%, heightMultiplier%, Filename$) -' Renders sprite from text file but flips horizontally during rendering. -' File format: first line = height, subsequent lines contain ASCII art -' where each character's ASCII value determines color (offset by 40). - -x = x * 8 -y = y * 8 -spriteWidth = widthMultiplier - x -spriteHeight = heightMultiplier - y -OPEN "IMG/" + Filename$ + ".i01" FOR INPUT AS #1 -INPUT #1, spriteHeight -FOR row = 1 TO spriteHeight - LINE INPUT #1, rowText$ - FOR column = LEN(rowText$) TO 1 STEP -1 - ' Calculate screen coordinates and color from ASCII value - currentColor = ASC(LEFT$(RIGHT$(rowText$, column), 1)) - 40 - ' Draw filled rectangle for each pixel (scaled by multipliers) - LINE (x + (column * widthMultiplier), (y + (row * heightMultiplier)) + 1)-(x + ((column + 1) * widthMultiplier), y + ((row + 1) * heightMultiplier)), currentColor, BF - NEXT column -NEXT row -CLOSE -END SUB - -SUB RenderSpriteFromFile (x%, y%, widthMultiplier%, heightMultiplier%, SpriteName$) -' Renders sprite from text file in normal orientation. -' File format and rendering identical to RenderFlippedSpriteFromFile -' but processes characters left-to-right instead of right-to-left. - -spriteWidth = widthMultiplier - x -spriteHeight = heightMultiplier - y -OPEN "IMG/" + SpriteName$ + ".i01" FOR INPUT AS #1 -INPUT #1, spriteHeight -FOR row = 1 TO spriteHeight - LINE INPUT #1, rowText$ - FOR column = 1 TO LEN(rowText$) - ' Calculate color from ASCII value (offset by 40) - currentColor = ASC(RIGHT$(LEFT$(rowText$, column), 1)) - 40 - ' Draw scaled pixel block - LINE (x + (column * widthMultiplier), (y + (row * heightMultiplier)) + 1)-(x + ((column + 1) * widthMultiplier) - 1, y + ((row + 1) * heightMultiplier)), currentColor, BF - NEXT column -NEXT row -CLOSE -END SUB - -SUB ShowIntroScreen -' Displays introductory splash screen using sprite rendering. - -CLS -RenderSpriteFromFile 2, 2, 10, 1, "win.i01" -END SUB - -SUB UpdateHUD (coinIncrementAmount%) -' Updates Heads-Up Display showing coins and lives: -' - Processes coin counter (with 100-coin bonus life) -' - Draws coin counter digits -' - Shows remaining lives - -' End game if no lives remain -IF lives < 0 THEN GameOverSequence - -' Draw coin icon at left of HUD -PUT (0, 180), largeCoinSpriteBuffer, PSET - -' Add new coins to counter -CoinDigits(1) = CoinDigits(1) + coinIncrementAmount% - -' Handle decimal carry-over for coin counter -FOR digitPosition = 1 TO 3 - ' Carry from ones place to tens place - IF CoinDigits(1) > 9 THEN - CoinDigits(1) = CoinDigits(1) - 10 - CoinDigits(2) = CoinDigits(2) + 1 - END IF - - ' Convert 100 coins to extra life - IF CoinDigits(2) > 9 THEN - CoinDigits(1) = 0 - CoinDigits(2) = 0 - lives = lives + 1 - END IF -NEXT digitPosition - -LOCATE 1, 1 -digitPosition = 3 -' Draw both digits of coin counter -FOR hudElement = 1 TO 2 - digitPosition = digitPosition - 1 - PUT ((hudElement * 11) + 10, 180), digitImages(100, CoinDigits(digitPosition)), PSET -NEXT hudElement - -' Cap maximum lives at 10 -IF lives > 10 THEN lives = 10 - -' Draw "X" before lives counter -PUT (43, 180), digitImages(100, 10), PSET -' Draw small coin icon next to lives counter -PUT (53, 180), smallCoinSpriteBuffer, PSET -' Draw current lives count -PUT (73, 180), digitImages(100, lives), PSET -END SUB - -SUB UpdateLoadingScreen -' Visual progress indicator during asset loading. -' Draws black screen with incremental dots on bottom row. - -LINE (0, 0)-(319, 150), 0, BF -LOCATE 20, 10 + loadingProgressDotCount -loadingProgressDotCount = loadingProgressDotCount + 1 -PRINT "." -END SUB - -SUB WaitForUserInput -' Waits for any keyboard input before continuing. -' Clears userInput$ variable first, then polls INKEY$ until non-empty. - -userInput$ = "" -WHILE userInput$ = "" - userInput$ = INKEY$ -WEND -END SUB - diff --git a/Games/Pomppu Paavo/img/0.i01 b/Games/Pomppu Paavo/img/0.i01 deleted file mode 100644 index ddf406e..0000000 --- a/Games/Pomppu Paavo/img/0.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -((]]]]]](( -(]]]]]]]]( -]]]]((]]]] -]]]((((]]] -]]]((((]]] -]]]((((]]] -]]]((((]]] -]]]]((]]]] -(]]]]]]]]( -((]]]]]](( diff --git a/Games/Pomppu Paavo/img/1.i01 b/Games/Pomppu Paavo/img/1.i01 deleted file mode 100644 index 3d79571..0000000 --- a/Games/Pomppu Paavo/img/1.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -((((]]]((( -(((]]]]](( -(((]]]]](( -(((]]]]](( -(((]]]]](( -(((]]]]](( -(((]]]]](( -(((]]]]](( -(((]]]]](( -((((]]]((( diff --git a/Games/Pomppu Paavo/img/2.i01 b/Games/Pomppu Paavo/img/2.i01 deleted file mode 100644 index 1e305a6..0000000 --- a/Games/Pomppu Paavo/img/2.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -(]]]]]]](( -]]]]]]]]]( -]]]]((]]]] -(]](((]]]] -((((]]]]]( -(((]]]]](( -(]]]]((((( -]]]](((]]( -]]]]]]]]]] -(]]]]]]]]( diff --git a/Games/Pomppu Paavo/img/3.i01 b/Games/Pomppu Paavo/img/3.i01 deleted file mode 100644 index 0638abc..0000000 --- a/Games/Pomppu Paavo/img/3.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -(]]]]]]]]( -]]]]]]]]]] -(]](((]]]] -(((((((]]] -(((((]]]]( -(((((]]]]( -(((((((]]] -(]](((]]]] -]]]]]]]]]] -(]]]]]]]]( diff --git a/Games/Pomppu Paavo/img/4.i01 b/Games/Pomppu Paavo/img/4.i01 deleted file mode 100644 index 2bfbf57..0000000 --- a/Games/Pomppu Paavo/img/4.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -(((]](((]( -((]]](((]] -((]]]((]]] -(]]](((]]] -(]]]((]]]] -]]]]]]]]]] -(]]]]]]]]] -(((((]]]]( -(((((]]]]( -((((]]]](( diff --git a/Games/Pomppu Paavo/img/5.i01 b/Games/Pomppu Paavo/img/5.i01 deleted file mode 100644 index f364c9b..0000000 --- a/Games/Pomppu Paavo/img/5.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -((]]]]]](( -(]]]]]]((( -(]]((((((( -(]]((((((( -(]]]]]]]]( -((]]]]]]]] -(((((((]]] -]]](((]]]] -]]]]]]]]]( -(]]]]]]](( diff --git a/Games/Pomppu Paavo/img/6.i01 b/Games/Pomppu Paavo/img/6.i01 deleted file mode 100644 index 7a52db7..0000000 --- a/Games/Pomppu Paavo/img/6.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -((]]]]]](( -]]]]]]]]]( -]]](((]]]( -]]]((((((( -]]]]]]]]]( -]]]]]]]]]] -]]]((((]]] -]]](((]]]] -]]]]]]]]]( -(]]]]]]](( diff --git a/Games/Pomppu Paavo/img/7.i01 b/Games/Pomppu Paavo/img/7.i01 deleted file mode 100644 index 27197cc..0000000 --- a/Games/Pomppu Paavo/img/7.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -(]]]]]]]]( -]]]]]]]]]] -]]]((((]]] -(](((((]]] -((((]]]]]] -((]]]]]]]( -((((((]]]( -(((((]]](( -((((]]]((( -((((]]]((( diff --git a/Games/Pomppu Paavo/img/8.i01 b/Games/Pomppu Paavo/img/8.i01 deleted file mode 100644 index 5ad4835..0000000 --- a/Games/Pomppu Paavo/img/8.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -((]]]]]](( -(]]]((]]]( -(]]((((]]( -((]]((]](( -(]]]]]]]]( -]]]]((]]]] -]]]((((]]] -]]]]((]]]] -(]]]]]]]]( -((]]]]]](( diff --git a/Games/Pomppu Paavo/img/9.i01 b/Games/Pomppu Paavo/img/9.i01 deleted file mode 100644 index 6e44b1c..0000000 --- a/Games/Pomppu Paavo/img/9.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -(]]]]]]](( -]]]]]]]]]( -]]](((]]]] -]](((((]]] -]]](((]]]] -(]]]]]]]]] -((]]]((]]] -((((((]]]] -((]]]]]]]( -((]]]]]](( diff --git a/Games/Pomppu Paavo/img/kast.i01 b/Games/Pomppu Paavo/img/kast.i01 deleted file mode 100644 index 59c5b7b..0000000 --- a/Games/Pomppu Paavo/img/kast.i01 +++ /dev/null @@ -1,21 +0,0 @@ - 20 -(DDDDDDDDDDDDDDDDDD( -D(EEEEEEEEEEEEEEEE(= -DE(EEEEEEEEEEEEEE(>= -DEE@@@@@@@@@@@@@@?>= -DEE@???????????D@?>= -DEE@??CCCCCCCCCD@?>= -DEE@?CCCCCCCCCCD@?>= -DEE@?CCCCCCCCCCD@?>= -DEE@?CCCCCCCCCCD@?>= -DEE@?CCCCCCCCCCD@?>= -DEE@?CCCCCCCCCCD@?>= -DEE@?CCCCCCCCCCD@?>= -DEE@?CCCCCCCCCCD@?>= -DEE@?CCCCCCCCCCD@?>= -DEE@?CCCCCCCCCCD@?>= -DEE@DDDDDDDDDDDD@?>= -DEE@@@@@@@@@@@@@@?>= -DE=??????????????(>= -D(>>>>>>>>>>>>>>>>(= -(==================( diff --git a/Games/Pomppu Paavo/img/munt.i01 b/Games/Pomppu Paavo/img/munt.i01 deleted file mode 100644 index 4b3089c..0000000 --- a/Games/Pomppu Paavo/img/munt.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -(((TTTT((( -(TTTSSSSR( -TTSSSSSSSR -TSSS\\SSSR -TSSS\]SSSR -TSSS\]SSSR -TSSS\]SSSR -TSSS\]SSSR -(SRSSSSRR( -(((RRRR((( diff --git a/Games/Pomppu Paavo/img/munt1.i01 b/Games/Pomppu Paavo/img/munt1.i01 deleted file mode 100644 index 6b2db3b..0000000 --- a/Games/Pomppu Paavo/img/munt1.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -(((TTTT((((((((((((( -(TTTSSSSR((FF((((FC( -TTSSSSSSSR(FCC((FC@( -TSSS\\SSSR((CCCFC@(( -TSSS\]SSSR(((CCC@((( -TSSS\]SSSR(((FCC@((( -TSSS\]SSSR((FCC@C@(( -TSSS\]SSSR(FC@((@C@( -(SRSSSSRR((C@((((@@( -(((RRRR((((((((((((( diff --git a/Games/Pomppu Paavo/img/munt2.i01 b/Games/Pomppu Paavo/img/munt2.i01 deleted file mode 100644 index f064124..0000000 --- a/Games/Pomppu Paavo/img/munt2.i01 +++ /dev/null @@ -1,11 +0,0 @@ - 10 -((QQQQ(((((((((((((( -(QQQQQQ((((FF((((FC( -((jjjj(((((FCC((FC@( -((jjjj((((((CCCFC@(( -(c(jj(c((((((CCC@((( -c]]]]]]c(((((FCC@((( -((]]]]((((((FCC@C@(( -(]]]]]]((((FC@((@C@( -XX]((]XX(((C@((((@@( -XXX((XXX(((((((((((( diff --git a/Games/Pomppu Paavo/img/paavo1.i01 b/Games/Pomppu Paavo/img/paavo1.i01 deleted file mode 100644 index d24dc33..0000000 --- a/Games/Pomppu Paavo/img/paavo1.i01 +++ /dev/null @@ -1,21 +0,0 @@ - 20 -(RRRRRQQQQ(((((((((( -RRQQQQQQQQQ(RRRR(((( -RQQQQQQQQQQRRQQQQ((( -RQQQQQQQQQQQQQQQ(((( -QQQQQQQQQQQQQ((((((( -QQQQQQQQQ(((((((((( -(QQQQQQQ(((((( -((((((( -(((((((( -((((((((((((( -((((((((((((((( -((((((JJJJJ((((((((( -((((((JJJJJJ(((((((( -(((((JJJJJIJ(((((((( -(((((JIIIIJJ(((((((( -((((IIIIIIIJ(((((((( -((((IIIIIIJJJ((((((( -((XXXIII(JJJJXXX(((( -(XXXXXXX((JXXXXXXX(( -((XXXXX((((XXXXXX((( diff --git a/Games/Pomppu Paavo/img/paavo2.i01 b/Games/Pomppu Paavo/img/paavo2.i01 deleted file mode 100644 index 0a0a944..0000000 --- a/Games/Pomppu Paavo/img/paavo2.i01 +++ /dev/null @@ -1,21 +0,0 @@ - 20 -(RRRRQQQQ((((((((((( -RQQQQQQQQQ(((((((((( -QQQQQQQQQQRRRRR((((( -QQQQQQQQQQQQQQQQ(((( -QQQQQQQQQQQQQQQ((((( -QQQQQQQQ((((((((((( -QQQQQQQ((((((( -((((((( -(((((((( -((((((((((((( -((((((((((((((( -(((((JJJJJ(((((((((( -(((((JJJJJJ((((((((( -((((JJJJJIJ((((((((( -((((JIIIIJJ((((((((( -(((((IIIIIJ((((((((( -(((((IIIII(((((((((( -((((XXXXXXXX(((((((( -(((XXXXXXXXXX((((((( -((((XXXXXXXX(((((((( diff --git a/Games/Pomppu Paavo/img/pilv.i01 b/Games/Pomppu Paavo/img/pilv.i01 deleted file mode 100644 index 7ec44e0..0000000 --- a/Games/Pomppu Paavo/img/pilv.i01 +++ /dev/null @@ -1,31 +0,0 @@ - 30 -(((((((((((((((((((((((((\\(\((((((((((((((((((((((((](((((((((]((((]((((]]((((((((((((((((((((((((( -((((((((((((((((((((((((\((((((((\\(((((((((\(((((((((]]((\(((\(((\((]](]](((((((((((((((((((((((((( -((((((((((((((((\((\((\(\]\\((\(\(((((((]((((((((](((\((\]((((\(]\(\(]]]]]]((((((((((((((((((((((((( -(((((((((((((((((((]t\\(]]]\\\](](((\((]((](](((((((]((((\(\]](\((]\(((((\\(](](\]\(((((((((]((((((( -((((((((((t((wt\\\t](tt\(]\\((\(](\\t\t((((]\t(](((\((\]\](\(\]](]]((]\(]](((]`\`\(\\]((((((((((( -(((((t((((((ttttttt(t\\(\\((\(]]]\t((\\]\]((((\(](\((\\(]\(](`\\`]](\]\\]\(t\\\`\\t(t\]((]((((((((( -((((t(tt(t((tttttt]t\\(](\\(t(t\\ttt\]tt]t\\(]\tt]](\((t]\](\t]((t]\t(]`\t(]]tt\\(tt\\]](](((((((( -((((((\(ttt(ttt\tt]tt\\\\t\]\tt\(\t]((\\\tt\((]](\\t]tt(\\\(tt(t\(`]\`]]\\\\\(\`tt``^```(`(((((( -((((tt(tttttttttt\\t]\tt]ttt(]\\\\\t\\t(\\((\\t\]t\\]]`\\\](\`]\\(\\]\`(t\\\t\\tt\\^(``]\(\]((]`(( -(((t\(t\ttt\]ttt\tt]]]\\t]ttt]]t\t\\]ttt\]](tt\(]t\\\]t\t`t\\]\\tt]\^\t]\\\\\tt\\`t\t`^`(\`\]]](( -(((((tt]]t\\twt\\\t\]tt]]t(]\t\tt]\tttt\tt]\((t(\\\t\`]t(\]t\\`\t\\(\\\t\t]^\\t\\\tt\t\\^```(`(](( -((t(](\ttttwttw]t\\tt(^t\(t]\]tt\(\t]t\\t(]]\]ttt\\tttt\]\^]\tt\]``\t`(\tt\`^\\\\\ttt\tt\\`]\\^((\(( -]t(]]]]tt]t\t^t\tt\t(\](tt]\tt]\t\\\\\]t\tt`t\\`^]\]t\]]]tt\`(`(]`\tt\\`\t\t]\\tt\ttt^t\\`\`]``(\](( -(]t]t\\t\\t\^t\^t\](\]]\]]t\(ttttt\]t\t\`\t\t\t\\\\`^t`(t(]]t]t`]]t]\\\^tt\]`\t\\t\\``t\\`\``\]t``\( -(]t(tt\\\\\\\\\]^t]]t^t]tt\t^\\]]]]`t\]\t`]\t^```\^^]`\tt^t]`\`]^^\\\\\\\\]^(`\^`\\\\\\^``\```]`\`(] -(](t^^]\\]\\\]t^\]]^]]\^^\]]t\`\^^``]t`^\\`\\`^`]\^\`t]\^^^`^]\\^^^\\\\\]]\`\^````\\]^`\`^`\```]``]( -]]]]](t]`t]^\]^]]^]^]^^]^^]`\^\]`]\]`\\\\``]`\`t\\`^]```^`]^^^^^]\^^\t\``]`\\``]\\^\^^^\\\```````]]] -((^((]](`]]`]^^`^^]^`]]\]``\\(\(\`]``\```]`^^^````^````t(]`^t]^^t`\\]^^\^\^`^\^``\]\\````^`\`]```(]( -](^]((]\`(``]]]^``^t]^^]]t]``t`]``(`````\``\``\\`\```t`^t^(^^^^^]]t^`(\\^\^`(`^^^`\^```\````\]````]( -]((^^]]`]^]^\`]``t^```````\`^`\`\``\^t```````]`````]^`^]]^^t^(^(^]``^```\\\`^]]]^^^^]``^````t]``]``( -(((^((]``^^`^^``^^^^^^]]t`t````^`^`^`^\^`]````````````^`````^^^`]`]^^^^^((]``^^`^]]^^`````]``^^(t`(] -(]^(^(`(`^]]`]`^^^`]^```^^`````t`\^`^`````````^`(`^t^`t^`^^^(```t(`^]]^^^^```^]`]``]^`(```(^(`tttt(( -^(^(^(((t](((`]]`^`t``t```^``^``````^````(^`(````^^^``^`(```^]``]^(]`^```]````````(]^``]t]`^`](^(`(( -(((tt^(^((((]`^`^```t````^```^^^]``````](`tt``]``^```(^^`]``(``t````t```(``]`^]^t`]^`(`^^^^``tt]`((( -(((((((]^](((``]`(`^`]^^^``]`]]((```(`(^```]((]^`^`````````(`((t``^`````]`^(^^```(`^`](`t]^((^(`(((( -(((((((((]((t(^`(`^``((``(^(``^(((((((((``((^``````^(^`t`(`^t``````^]((^^^`](^```((`]((`(]^`((^](((( -(((((((((((t(^``(`(t^(^(`^(^^^((^(`((^(`]((((](((````^(`((((``((``((``(^`]`(]]]]``]``]````(`(``(`((( -(((((((((((((^(^((((((^^(((^(((^(((^^`((`((]`((((^`((`(^``((```^`((((^(((t`(^`((`^(`(]`^`(((`^(((((( -((((((((((((((((((((^(((^(((((^(((((((((((((((((^(`^^`^(((^((^((``(((`((((`](((((((^(``(((`((((((((( -(((((((((((((((((((^(((((((^((^(((((((((((((((((((((^(`(^^(`((((((^^(^((`((((](`(((((((((((((((((((( diff --git a/Games/Pomppu Paavo/img/poosas.i01 b/Games/Pomppu Paavo/img/poosas.i01 deleted file mode 100644 index e48b7dc..0000000 --- a/Games/Pomppu Paavo/img/poosas.i01 +++ /dev/null @@ -1,21 +0,0 @@ - 20 -((((((((((((((((((((((((((((((q((((q(q(((((((((((((((((((((( -((((((((((q((q(((q(((qq(((((((qqŠqqqq(((((((qq(((((((((((((( -((((((((((q(q(((q(qq((qq((q((qqq(((q(qq(qq;(qq(q(((((((((((( -(((((((((qq(q(Š(((q(q(q(q((((q2qqq(qqq(q(;((;q(q(((((((((((( -(((((qqq(q(q(((222Šqqq(((Šq(qqqqŠq2qqqq2((;Š((q(((q?q((((((( -((((qq(nq(((q((2(qq2q2q(((nn(Šq(qqq(nqq2n2;(qnq?(;???((((((( -((((((qqqq2q(qqq2Š(22Š(qqq(Šqq2n(2nqq2qqq(nq?q?Š2;;;?((((((( -(((((qn(qqqqŠ(Š(qXn22XŠ(nqŠŠq2(22qq22(22(2?Y??2q;?q;22(((((( -((((q((qq2qqŠqqnq2nXŠXŠqq2ŠŠqqŠqX2q22((qq;(Yq???;;2;;2q((((( -((((((q(22(2q2(((nqqXXŠ(XX2Xq(q2Š22nq22q?qY((?(?qqqq;???(((( -(((q(qq(qqqYYXq((YXXYŠX2Š2ŠX2Šq;?2???2q;;q;X?2???;?;Y;??q((( -(((q(q(q22222YYX2(XX?X2q2?qX2q?YYYn2q;Y;X2???X?;?;;;??;;(((( -(((n(qq(Š2Š22XYqXY?XY;2;???qq?;?Y;?2Y;2;;Y;?XX9X9;;(9;??;((( -((((qnXŠ?YY22ŸŸ???YYqqX?;qXqqq;;???;@;;;;??X;;?X?q;;;9?;(?( -(nnnŠX2?2??YXŸŸX2q?X;2;;?qq;;;q;?;;;;;;;Ÿ;X;9;?X;;@;@;;?99( -qqqnqŠq222ŠXŸŸ?Y(ŸY??;qq?2;?;q?;?;;?@X;;;?Ÿ;9999;9@;;;;;9n?9 -nqnqqn2??Y??(X?YŸŸX?;?;?X?;Xq;;ŸX;nŸ@;Ÿ;;;;Ÿ9;;2;;@;;?;;9((9 -nnqqq2(?Ÿn?nŸŸŸ?ŸY22X;X?q;;;;;qqq;;q;Ÿ;;;q9X;;99;@;;9;;;?? -qnq(qqnqq???ŸŸX(?nŸqX(XXqq2;nqq;;;ŸŸqŸŸ;ŸŸ;Xq;q;9n;;??n?9 -((nn((qŸ(ŸnXnŸ(nŸXnŸn(XqqX2ŸŸ;qŸ(qq;(ŸŸqŸ(99Ÿq?;ŸŸ????? diff --git a/Games/Pomppu Paavo/img/puu.i01 b/Games/Pomppu Paavo/img/puu.i01 deleted file mode 100644 index 5a8ca34..0000000 --- a/Games/Pomppu Paavo/img/puu.i01 +++ /dev/null @@ -1,61 +0,0 @@ - 60 -(((((((((((((((X(((((X((T((((((((((((((( -(((((((((((((((X((T((X(X(((((((((((((((( -((((((((((((X(((((X(X((((((X(X(((((((((( -(((((((((((((XX((X(((((((((T(((((((((((( -((((((XX((((XX(XTT(X(TXXT(((((X((((((((( -((((((((((((((X((X(TXXTŸŸ(XXXX(((((((((( -((((((X(X((XXX(XXXTTT(XXXTX(X((((((((((( -(((((((XX((X(XX((T((XXXX(T((XXX(X(X((((( -((((X(X((XXXT((XX(XXX(TXXTŸXX(XŸ(X(((((( -((((XXX((((XT(X(XXXTTT(XXŸXŸŸŸŸX((X((((( -(((((X((((XT((XX((XT(XTX((XX(ŸX((((ŸŸ((( -(((X((X(((TX((XXXXTXX(TTŸ(((((ŸXŸ((ŸX((( -((((X(XX((X(XX(X(TX(((TTTŸXŸ(ŸXXŸ((((((( -((((X(XXXXXX((XXTTXX(TXTTT(T(XŸX(Ÿ(XX((( -(((((X(XX(TXXTTT(TXXT(X((X((((XŸ(X(XX((( -((((((X((X(XXXXXT(XXX(TT((T(X(((((((X((( -(((XX((XX(((X(TXXX(TX(TTTTXT(Ÿ(((Ÿ((Ÿ((( -(X(((X(((X(T((X(X(XX(T(XXTX(TŸX((ŸŸX(((( -((XX(X((((((XTX(TTTXTXT(XX((XX(Ÿ(ŸŸ(((X( -((((((XXXX((X(XXTTXT(XXŸTT(T(((XŸ((XX((( -(((XXXX(X(((X(T(TTTTXXXXTX(X(XXXX(X(Ÿ(X( -(((((((((X(XXXXX(XT(X(X((X(XXX(XXX((Ÿ((( -X(((((X((X(X(X((XTT(((((XXŸ(XXXXŸ(Ÿ((XŸ( -(((XXX(XXX((X(((XTXX(T(X((Ÿ(((ŸX(XXXX(X( -(((X(((TTX((TTXTT(XXXT(XŸŸ(XXX((XXŸ((X(Ÿ -((X((((XTX(((X(XX(XTT(XXXX((XX(XXŸ(X((ŸX -(((((TX(((X((T(XTTXXXTXX(XXŸX(X((Ÿ(((((( -((X(X(TXTX(XX((XTTXX(X(XŸXXŸTŸXXXX(Ÿ(Ÿ(( -((((X(X(X((TXTTT(((XŸŸX(XT((XXXXX(Ÿ(((Ÿ( -((((X((X((T((X(TXXXXXXXŸ(TŸX(XXŸŸ((ŸŸ((( -((((X(((TXTXX(XXX(((XXX(ŸXŸŸ(XŸŸ(ŸŸŸŸŸ(( -((XX((XXXX((XX(((XX(XXX(TŸŸŸXŸ(XXXŸŸ(((( -((((((X((XTXXTTTXXXXXXšššŸ(TXTŸ(Ÿ((((X(( -(((X(((XXXTTXTT(T(TX(ŸšŸšXŸŸŸ(X(ŸŸ(X(((( -((X(((((XXT(TTT(X((T(šXšXXTŸŸŸ(ŸŸŸ(((((( -(X(XXXX(X((X((TXTT(TTŸšXXŸŸŸXX(X(Ÿ(XX((( -((((X(((XXXXTXXX(((TŸšŸXXŸXŸXŸXŸ(ŸX((((( -(((((((XX(XXX(XXTX((ŸšššTŸŸ(ŸTXX(TX(Ÿ((( -(((((XXXXXXX((X(X(ŸŸŸšššŸXŸŸŸXT(X((X(((( -(((X(((XXXXX(XT(TT(XŸšššXŸŸŸTTŸXŸ((((Ÿ(( -((((((XX(XX((X(XTXŸŸšššX((XXXXTX(((Ÿ(((( -(((((X(XXXXXXXXXŸ(Ÿ(ŸšXš(XŸXTXX((X(((((( -(((((((X(XŸX(XX((TŸŸŸXXŸŸ(XXŸXXXX(((((Ÿ( -((((((XX(XX((XXTX(X(šššŸX(XXXX(XXX(X(((( -((((((((((XXXŸXššŸ(šššXŸ(X(TXXX((X(((((( -((((((((((X(ŸX(šŸšXŸššXX(X(XXX(X(((((((( -(((((((((XXX(XŸššŸXŸšXXŸŸX(((X(((((Ÿ(((( -(((((((((((X((XššŸŸŸŸšXXX(X(ŸX(ŸŸ((((((( -((((((((((XXXŸ(ššŸŸŸŸŸXŸŸ(X(((Ÿ(ŸŸ(((((( -(((((((((((((XXX(ššŸššXX(((((X(((((((((( -(((((((((((Ÿ(X((TšŸšXXŸŸ((((X(Ÿ((((((((( -((((((((((X(((XX(ššXššŸŸ(((((((((((((((( -((((((((((((((((ŸXšXXšX(Ÿ(((((Ÿ((((((((( -((((((((((((((X(XXšŸŸŸ((Ÿ((((((((((((((( -(((((((((((Ÿ(((XX(šššš(Ÿ(((((((((((((((( -((((((((((((((((((ššššX(((Ÿ((((((((((((( -((((((((((((((Ÿ(((šššš(((((((((((((((((( -((((((((((((((((((šššš(((((((((((((((((( -(((((((((((((((Ÿ((šššš(((((((((((((((((( -((((((((((((((((((ššš((((((((((((((((((( diff --git a/Games/Pomppu Paavo/img/tellis.i01 b/Games/Pomppu Paavo/img/tellis.i01 deleted file mode 100755 index f4f610b..0000000 --- a/Games/Pomppu Paavo/img/tellis.i01 +++ /dev/null @@ -1,21 +0,0 @@ - 20 -00000000000000000000 -0@@//@/////////////0 -0@//////////@//////0 -0//@///////////////0 -0@//@//////////////0 -00000000000000000000 -/////////00@/@/@//// -/@///////00@//////// -@@///////00//@////// -@////////00///////// -00000000000000000000 -0@@////////////////0 -0/////@///@////////0 -0@///////////@/////0 -0//@/////////@@////0 -00000000000000000000 -/////////00@@/////// -/////////00@//////// -/////////00///////// -/////////00///////// diff --git a/Games/Pomppu Paavo/img/tigu.i01 b/Games/Pomppu Paavo/img/tigu.i01 deleted file mode 100755 index d424018..0000000 --- a/Games/Pomppu Paavo/img/tigu.i01 +++ /dev/null @@ -1,21 +0,0 @@ - 20 -(((((((((((((((((((( -(((((((((((((((((((( -<((((((((((((((((((( -?((((((((<(((((((((( -??((((((??(((((((((( -(?(((((??((((((((((( -(??((???(((((((((((( -((????(((((((((((((( -(((??((((((((((((((( -((<<<((((((((((((((( -<