INTRODUCTION
============
I got inspired by looking at Petwalk by AvlixA (2021 entry). I like to walk a lot in the nearby grassy fields in the sunshine. Of course, avoiding all the dog piles. This game will help you learn the methods.
"This will be an easy pi(l)e" - I told myself while outlining the program. - "It's a simple mover, with some extra features, like
FEATURES
========
- Full-screen, multicolored playfield of piles
- Hiding and revealing all the piles in a blink
- Joystick control (diagonal movements included)
- Quick gameplay
- Safe start: hiding piles on first vertical step
- Reveal piles on the go once per level
- Grade levels and a fitting ending
- Three different sounds!!
- In-game instructions
So it went out of control pretty quick. It took me several days to fit every line in 80 chars. At the end, only some letters and a bit of sound variety were clipped out.
STARTING VIA EMULATOR
=====================
Recommended emulator: YAPEÂ http://yape.homeserver.hu/
How to start the game:
1. File / Attach disk image...
2. Select and open the .d64 image
3. Enter command: DLOAD"*" and press Enter
4. If you wish to LIST the program, see PROGRAM LINES OVERVIEW down below.
5. Enter command: RUN and press Enter
GAME INSTRUCTIONS
=================
Use an emulated or real joystick in port 1. (NOTE: YAPE sometimes has problems with emulated joystick handling, so make sure every direction is working properly.) You start at GRADE 1. A playfield of dog piles appears (even more in later levels). You start with your figure at the bottom, and you need to reach the top row (any columns). First, moving the stick left/right, try to get in a "lane" which needs the least turns. As soon as you step one upwards, all the piles get hidden, and you must maneuver by memory. If you step in a dog pile, you have to leave the school at that grade and let the next player try. You have one chance to reveal all the piles per level, for this, press the fire button. After one move, they disappear permanently. In the latter levels (there are 8 of them), you'll need precise planning and counting steps to succeed.
PROGRAM LINES OVERVIEW
======================
Use the LIST command to view the program lines. You can use the LIST from-to syntax to list certain intervals, eg. LIST 0-4.
(Among some: joystick directions data)
0 INIT: set up volume, constants, function, arrays
1 INIT: set up more constants, background; print instructions; set multicolor mode; wait a bit
2 NEXT LEVEL: reset vertical movement; grade up; print grade; wait a bit; set tint color to background as multicolor; clear screen; set up extra colors; loop start; drop sound
3 place random sh*t; loop end; set starting coordinates; print instructions
4 MAIN LOOP: if stepped in sh*t, go to 8; else place player; if top row reached, print applause; go to 9
5 wait for joystick input; if only trigger pressed and player not in bottom row and reveal possible, then make reveal impossible, reveal sh*t, set visible flag, go to 4; else remember current player position, focus on joystick directions without fire
6 if joystick is moved, then make stepping sound, update and limit X,Y coordinates, erase player from remembered position; else go to 4
7 if sh*ts visible, then if player left bottom row, then unset visible flag, hide sh*t, print more instructions; go to 4
8 FAIL: make stepping into sh*t sound; reveal sh*t; print failed message, actual grade, call for next player; wait a bit; reset program
9 END OF LEVEL: if level is less than 8, then go to 2; else print success message, wait for keypress, reset program
COLOR TRICKS
============
All the sh*ts' color can be set to the same as background (color 0) at once if the chosen character uses only global (multi)colors (color 2 and 3, since 1 is by different positions). So only 01s and 10s can be used for fitting characters (11 is set to the same as the background). "Upper left curve" character is the most similar to sh*t in this mode (#85). Color 1 code must be #8 higher to turn on multicolor mode for that particular position. Setting color 3 is buggy, doesn't work with COLOR instruction, I used POKEs instead.
FUNCTIONS
=========
FNP() POKE address from X,Y (=3072+X+Y*40)
VARIABLES
=========
const B background color code (117)
const F fire code (128)
G grade (level) (1-8)
I loop/temp var
J joystick input (0-8,128-136)
const K =1024
const M mode poke address ($FF17=65303)
R reveal possible (0/1025)
const S sh*t code (85)
const T =16
const T$ erase top line, prepare print string
V sh*ts visible? (sets to 0 on movement) (0/1)
X temp var at dogpiling (0-~920)
X,Y player coordinates (0-39,0-24)
const X(0-8),Y(0-8) joystick directions (-1/0/1)