A downloadable Bouncing Goatfish
HELLO, AND WELCOME TO GOATFISH 2!
Join Goatfish on a DEEP DIVE into 8-bit history, as she tries to discover the names of several classic computer games while EATING as much as she can!
RUNNING THE GAME
To run Goatfish 2 from disk, insert the disk and type:
To run from tape, insert the tape and type:
PLAYING THE GAME
On the main menu, press I for instructions, C for credits, or any other key to play.
EAT TO SURVIVE
JOYSTICK/ARROWS to SWIM
FIRE/SPACE to DIVE
(P) to PAUSE
(ESC) to QUIT
In the game, Goatfish swims deeper and deeper into the ocean looking for delicious food to eat. However, every time she lands on a platform, she will bounce! Reach the yellow “brick” gate to complete a level!
Goatfish’s energy is shown at the bottom of the screen, along with your score. Collect food to maintain Goatfish’s energy and increase your score, while avoiding the angry red faces and large urchins (which will deplete her energy).
Try to eat as much food as possible in each bounce, to help Goatfish keep moving fast!
Sometimes low-value food (such as apples) isn't worth collecting, unless more than one can be eaten in one bounce.
If Goatfish hits multiple angry faces or urchins at once, she will only be hurt by one of them.
On level 2, Goatfish’s energy depletes slightly more quickly, and even more quickly on level 3!
If a high-value food item is surrounded by urchins, it may still be worth collecting even if Goatfish hits an urchin – but of course avoiding the urchins is much more satisfying (and healthy)!
Diving is optional but helps Goatfish move quickly through areas you are comfortable with.
Maximum forward speed is doubled, but so is energy consumption.
Useful for rushing past urchins but hitting one whilst diving causes double damage.
Try not to dive when bouncing up, as the bounce must complete before the dive takes effect. Diving too early will just waste energy.
Bouncing while diving causes larger jumps, depending on the speed Goatfish is travelling at. This can help with jumping over dangerous areas or reaching other platforms.
If it isn’t necessary, try not to dive right before collecting food or hitting a platform. Smaller bounces will help Goatfish move through the ocean more quickly.
LARCENAS LEGACY GESTURE
As Goatfish’s ocean world consists of platforms, I thought it would be ideal to include a tribute to Larcenas Legacy in the form of a platform tile, so I drew a sprite based on the yellow bricks thrown by Larcenas.
The yellow brick tiles represent the end-of-level gate, and Goatfish must land on it in order to complete the current level. Beware of missing the gate, as danger lurks beneath!
For many years I have been very interested in the sprite scaling effects used in the arcade games of the late 1980s and early 1990s, particularly those used in many of Sega’s classic games.
I have wondered for a long time if it would be possible to create something similar on the humble Amstrad CPC464, which was the computer of my childhood all those years ago.
Goatfish 2 features real-time sprite scaling for all objects in the game world, apart from Goatfish herself. The scaling technique is based on the method used by the Neo Geo console, though of course without that console’s hardware assistance.
Goatfish 2 makes extensive use of compression (often in real-time during gameplay) in order to fit everything into memory. The game uses a double-buffered display, so efficient memory usage is very important. Only two copies of each food, platform and urchin sprite are stored in memory (one on a byte boundary, and one shifted). All the other sizes of each sprite are scaled in real-time from those base sprites.
The code became very messy during a long and difficult optimisation phase, and as a result it is unfortunately quite hard to follow now. A game like this needs to be fast enough to be playable and responsive, so I spent a lot of time experimenting with ideas to make things go faster!
The game design is heavily influenced by the classic game Bounder, by Gremlin Graphics. The gameplay is somewhat similar, though Goatfish 2 is presented from a 3D viewpoint.
I tried to employ careful use of colour to make levels easier to "read" and understand visually, although it does get a little more visually confusing later, particularly on the last level.
Regarding level design, I wanted to pay tribute to a number of classic 8-bit computer games (look carefully and you'll find clues throughout the game).
Thanks to my beautiful wife and daughters, who were very patient during the long development of Goatfish 2.
Thanks to Antonia for designing the Goatfish character, and for the delightful little tune that plays on the main menu – I think she has captured the spirit of the game very well, and I am very proud of her!
Thanks to Zoe for designing the angry red faces and large urchins. She enjoys contributing to my games and I’m very happy that some of her creations are in the game!
Thanks to Fran Gallego and the rest of the CPCTelera team. Without your incredible (and very generous) efforts, none of this would have been possible.
Thank you for playing Goatfish 2, I hope you enjoy it.
Written by Ervin Pajor in 2022
Goatfish character devised by Antonia
Music by Antonia
Urchins by Zoe
Goatfish 2 is licensed with the GNU GENERAL PUBLIC LICENSE Version 3 (https://www.gnu.org/licenses/gpl-3.0.en.html)
C / Z80 assembly
Sublime Text build 4126: code editor
Photofiltre 7.2.1: graphics
Arkos Tracker 1.0: music and sound effects
RASM 1.8a: data file compilation
BlitzMAX 1.51: to write tools to convert image files into data files
Blitz3D 1108: to write the level editor
WinAPE 2.0 Beta 2: for testing
COMPILING THE SOURCE CODE
Create a new cpctelera project called "gf2".
Download "source code.zip" from this page, and extract the contents.
Copy the extracted "src" folder into the "gf2" project folder.
cfg\build_config.mk must be modified to include the following lines:
PROJNAME := gf2
Z80CODELOC := 0x2000
To compile, navigate to the gf2 project folder and type:
make cleanall && make