Prepare submission
This commit is contained in:
7
Makefile
7
Makefile
@@ -1,4 +1,4 @@
|
|||||||
all: decman.tap listing.txt
|
all: decman.tap listing.txt decman.wav
|
||||||
|
|
||||||
listing.txt: decman.tap
|
listing.txt: decman.tap
|
||||||
echo "DEC-Man Listing for the 2026 BASIC 10Liner Competition (PUR-80 Category) by mcphail (btl AT mcphail.uk)" > $@
|
echo "DEC-Man Listing for the 2026 BASIC 10Liner Competition (PUR-80 Category) by mcphail (btl AT mcphail.uk)" > $@
|
||||||
@@ -12,7 +12,10 @@ listing.txt: decman.tap
|
|||||||
decman.tap: pac.bas
|
decman.tap: pac.bas
|
||||||
zmakebas -l -i 1 -s 1 -n DEC-Man -a 1 -o $@ $^
|
zmakebas -l -i 1 -s 1 -n DEC-Man -a 1 -o $@ $^
|
||||||
|
|
||||||
|
decman.wav: decman.tap
|
||||||
|
tape2wav $^ $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.tap listing.txt
|
rm -f *.tap listing.txt *.wav
|
||||||
|
|
||||||
.PHONY: all clean
|
.PHONY: all clean
|
||||||
BIN
decman.gif
Normal file
BIN
decman.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 141 KiB |
BIN
decman.wav
Normal file
BIN
decman.wav
Normal file
Binary file not shown.
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