Prepare submission
This commit is contained in:
124
instructions.txt
Normal file
124
instructions.txt
Normal file
@@ -0,0 +1,124 @@
|
||||
___ ___ __ ___ ___ ____ ____
|
||||
| \ / _] / ] | T T / T| \
|
||||
| \ / [_ / / _____ | _ _ |Y o || _ Y
|
||||
| D YY _] / / | || \_/ || || | |
|
||||
| || [_ / \_l_____j| | || _ || | |
|
||||
| || T\ | | | || | || | | by mcphail
|
||||
l_____jl_____j \____j l___j___jl__j__jl__j__j btl AT mcphail.uk
|
||||
|
||||
- An exciting arcade game for the ZX Spectrum
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
You are DEC-Man and must search the haunted castle for delicious protein pills
|
||||
whilst avoiding "Stinky", the terrifying ghost who will ruin your day! Use the
|
||||
magical teleporter to zip to the other end of the main corridor to escape his
|
||||
spectral clutches. If you survive, you get to come back another day!
|
||||
|
||||
---Controls-------------------------------------------------------------------
|
||||
|
||||
Up - "E"
|
||||
Down - "D"
|
||||
Left - "O"
|
||||
Right - "P"
|
||||
|
||||
---Features-------------------------------------------------------------------
|
||||
|
||||
- Exciting action!
|
||||
- Several colours!
|
||||
- Thrilling* sound!
|
||||
- An intelligent enemy who will hunt you down!
|
||||
- Working teleporter!
|
||||
|
||||
* - not actually thrilling.
|
||||
|
||||
---Loading--------------------------------------------------------------------
|
||||
|
||||
The "decman.tap" file can be loaded in any standard ZX Spectrum emulator, of
|
||||
which there are many. I recommend FUSE, which is available for Windows, Mac
|
||||
and Linux. Alternatively, the "decman.wav" file can be played through the tape
|
||||
socket of an original ZX Spectrum and loaded with 'LOAD ""' in the usual way.
|
||||
The game will auto-run when loaded.
|
||||
|
||||
---Listing--------------------------------------------------------------------
|
||||
|
||||
Press "CAPS-Shift"+"SPACE" (Shift and Space on an emulator) to BREAK into the
|
||||
program then type "LIST" (using the 'K' key) then "ENTER" to see the listing.
|
||||
It can be seen that all lines are maximum 80 characters. For convenience, a
|
||||
full listing is included in the "listing.txt" file which accompanies this
|
||||
game. This has been produced using the "listbasic" utility from the FUSE
|
||||
suite of tools. Note that line 1 has 4 extra colour-control characters added
|
||||
which are represented in the listing as € symbols, to prove the 80-character
|
||||
limit has not been exceeded.
|
||||
|
||||
---Submission-----------------------------------------------------------------
|
||||
|
||||
This game is being submitted for the 2026 BASIC 10Liner competition. It has
|
||||
been written by me, mcphail, and is all my own work. No AI has been used in
|
||||
the production of this game. I can be reached at "btl AT mcphail.uk".
|
||||
|
||||
It uses standard Sinclair BASIC, as shipped on the original 16 and 48K
|
||||
ZX Spectrum computers in the UK.
|
||||
|
||||
I believe this submission meets all the criteria for the PUR-80 category.
|
||||
|
||||
---Notes----------------------------------------------------------------------
|
||||
|
||||
This game was written in VSCode using my "speccydev" dev container. The source
|
||||
code and build system is available at:
|
||||
https://boarstone.mcphail.uk/mcphail/BASIC10Liner2026 .
|
||||
I used the "zmakebas" utility to build the code into the .tap file.
|
||||
|
||||
Sinclair BASIC is a poor choice for this competition due to its verbose
|
||||
keyword structure, and the Spectrum is a tricky target as there are no subtle
|
||||
ways to print characters to the screen without using lengthy "PRINT" commands.
|
||||
Furthermore, there is no "ELSE" keyword so an "IF...THEN" construct
|
||||
effectively ends a line. On the other hand, "DATA" statements can be placed
|
||||
anywhere in the program and function definitions can be made before or after
|
||||
the function is actually called. This allows the creative programmer to move
|
||||
some data and logic to the dead spaces at the end of lines.
|
||||
|
||||
I only use 2 "IF...THEN" statements in the program. Most of the logic is
|
||||
constructed using boolean comparisons as part of "LET" assignments. This saves
|
||||
a little space and prevents premature line closure.
|
||||
|
||||
Most of the graphics are created by POKEing the screen attribute area to make
|
||||
coloured blocks. It isn't pretty, but it is character-efficient and the
|
||||
squares can be PEEKed for collision detection.
|
||||
|
||||
Lines 1-3 create the play board. The coordinates of the walls in the upper-
|
||||
left quadrant are read in and mirrored to the other 3 quadrants. As there was
|
||||
a little spare space in these lines, the defined function "b" is located here.
|
||||
This will be described later.
|
||||
|
||||
Line 4 creates the teleport squares and starts the main game loop.
|
||||
|
||||
Line 5 reads the keyboard input. If a direction key is pressed, it uses
|
||||
defined function "a" to check if that direction does not contain a wall and
|
||||
sets the new intended character direction if that is the case. Line 6 will
|
||||
keep the player going in the original direction if there has not been a valid
|
||||
change in direction.
|
||||
|
||||
Line 7 teleports the player to the other end of the main corridor if they are
|
||||
on the teleport square and prints the player at the new location.
|
||||
|
||||
Line 8 will move the ghost up or down to match the player's row if there is no
|
||||
wall in the way. If the ghost cannot move up or down, it will try to move left
|
||||
or right towards the player (calling defined function "b" to do this as there
|
||||
was no space left on this line), again if there is no wall in the way. The
|
||||
algorithm is a bit 'loose', which creates emergent behaviour where the ghost
|
||||
will sometimes branch away from a pursuit and try to head-off the player at
|
||||
the next corner, which is quite fun!
|
||||
|
||||
Line 9 will cause the ghost to back up a square if it cannot move towards the
|
||||
player due to walls. This keeps the ghost in motion at all times. A check is
|
||||
made for a player-ghost collision and the game restarted if that is the case.
|
||||
|
||||
Line 10 increments the pill counter if one has been eaten, and either restarts
|
||||
the game loop or plays the victory sound if the board has been cleared. The
|
||||
defined function "a" is stuck on the end here, and is used multiple times in
|
||||
the program to check for wall collisions by player or ghost.
|
||||
|
||||
DEC-Man is, of course, a play on Pacman and "DEC" for "10", in the spirit of
|
||||
the competition.
|
||||
|
||||
---Have fun and thanks for the opportunity to make this!----------------------
|
||||
Reference in New Issue
Block a user