Spiky Harold
| Spiky Harold | ||
|---|---|---|
| Game No. | 537 | |
| Voting | 5.00 points, 1 votes | |
| Developer | Andrew Rogers, Simon Clarke | |
| Publisher | Firebird | |
| Musician | Graham Marsh (BOGG) | |
| HVSC-File | /MUSICIANS/B/BOGG/Spiky_Harold.sid | |
| Release | 1986 | |
| Platform | Amstrad CPC, Atari 400/800, C64, C16, ZX Spectrum | |
| Genre | Platformer | |
| Gamemode | Single player | |
| Operation | ||
| Media | ||
| Language | ||
Description[edit | edit source]
Spiky Harold is an action-adventure game that spans 57 screens. There is no scrolling; the screens are displayed using a flip-screen method. The player controls Harold the hedgehog as he searches for food through a labyrinth of caves, avoiding numerous enemies along the way. Once the player has collected all the food and extra lives within a limited time and finally reached Harold's burrow, the mission is complete and the game is successfully finished.
Backstory[edit | edit source]

Winter is approaching, and a bitter frost is forecast for the next day. Harold the hedgehog must therefore fatten himself up within a day to survive the cold season in hibernation. So Harold sets off through an underground labyrinth of caves to collect and eat the food scattered there. Unfortunately, these caves are teeming with numerous enemies, each of which can cost our hedgehog one of his initial 19 lives at the slightest touch. Therefore, careful route planning and precise timing of every move are essential.
Design[edit | edit source]
The labyrinth where Harold the hedgehog searches for food is richly detailed and — especially on the surface — vibrantly colorful. He and his enemies are mostly beautifully animated, but as monochrome white sprites, they still appear somewhat primitive. Controlling the hedgehog with a joystick or keyboard doesn't require pixel-perfect positioning and is therefore straightforward and enjoyable; however, the numerous enemies often necessitate precise timing.
![]() |
![]() |
![]() |
Graphics[edit | edit source]
The graphics are rendered in monochrome bitmap mode, using only a 256x160 pixel section for the scenes from Harold's habitat (bitmap at address $E000, corresponding color information in the screen memory starting at address $C400). Switching from one screen to the next sometimes takes almost 5 seconds, during which time the screen goes black. A total of four monochrome sprites are used to represent the hedgehog (sprites 0-3), while sprites 4-6 each represent an enemy. All other objects on the screen are incorporated into the bitmap graphics. To detect whether Harold has come into contact with an opponent, the game relies on the sprite-sprite collision detection of the VIC (register at address $D01E).
Sound[edit | edit source]
During the display of the title screen, a three-part musical piece plays, starting with a rock sound and becoming more experimental towards the end.
The game itself is constantly accompanied by a variation of the Flight of the Bumblebee, a monophonic sequence composed of notes of equal length. This becomes intrusive after a short time, but fortunately, it can be turned off.
Hints[edit | edit source]
The goal of the game is to collect a total of 57 items of 8 different types — mostly edible — by placing Harold the hedgehog directly to the right or left of them. Harold then eats his find without the player having to trigger this action. Harold's movements stop for about half a second during this time.
Usually, this simply increases the number of collected items, bringing the player closer to their goal of having a total of 57 items ready for hibernation. The only additional functions are the extra life (left image in the gallery below), which naturally increases the number of Harold's remaining lives, and the wine glass (right image), which briefly reverses the joystick controls.
![]() Extra life |
![]() Apple |
![]() Egg |
![]() Cherries |
![]() Acorn |
![]() Potato |
![]() Grapes |
![]() Wine glass |
Controls[edit | edit source]

Spiky Harold can be controlled either with a joystick in port 1 or with the keyboard. Both the selection between these two input devices and, if necessary, the redefinition of the keyboard layout can be done via a menu on the start screen.
The game can be started from this menu using the menu item "F1 START". If the key bindings have not been changed, the following assignments apply:
or Z : The hedgehog moves left
or X : The hedgehog moves right
or SPACE : The hedgehog jumps (vertically, or left or right in combination with one of the above control commands)- RETURN : Turn music off and on
- H : Pause (stop game; music continues playing)
- S : Resume game
The key combination RUN/STOP RESTORE quits the current game and returns to the start screen.
Screen Layout[edit | edit source]

Enemies[edit | edit source]
Each of the 57 screens is inhabited by 3 enemies who do not actively attack Harold, but periodically block his path, sometimes in very inconvenient ways. Because the slightest contact with an enemy costs Harold a life, he must carefully plan the timing of his moves.
Since the enemy paths have different cycle lengths, it can be advantageous to wait for several cycles before guiding Harold through a dangerous area. Thus, in the animation showing Harold trapped in a column (right image of the gallery in the section "Design"), the three opponents repeat their movement patterns (from left to right) every 252, every 204, and every 402 frame repetitions (at a frame rate of approximately 50 Hz for the PAL television standard). It therefore takes more than one and a half hours (exactly: 1 hour, 35 minutes, and 26.29 seconds at a frame rate of 50.124565 Hz) for the current position of all three opponents to be exactly recreated.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Tips[edit | edit source]
- The time limit of one day (24 hours) is verified using the real-time clock of CIA 1, which is assumed to operate at a frequency of 60 Hz. If the C64 is powered by the standard German mains frequency of 50 Hz, the maximum playtime increases to 28 hours and 48 minutes.
![]() |
![]() |
Solution[edit | edit source]
"Spiky Harold" can only be solved by determining and memorizing the hedgehog's route and the corresponding timing for each room, and then practicing the controls until it works (almost) every time. A longplay video can be helpful when planning the route, and a trainer can be useful for practicing afterward — and then, well-prepared, it's time to climb the high score!
![]() |
![]() |
Map[edit | edit source]
The following image shows the layout of the cave system, including all the objects to be collected. At the start of the game, Harold begins his journey in the upper left corner; his burrow, which he must eventually reach with a full stomach, is located in the upper right corner. The passage at the right end of the bottom row leads back to the starting point of the game.

Plan[edit | edit source]
The following illustration schematically shows the layout of the labyrinth. The colors code the objects available in each room (yellow: extra life, light green: apple, turquoise: egg, red: cherries, dark green: acorn, beige: potato, purple: grapes, white: wine glass). These items are always distributed the same way at the start of the game.
![]() Schematic representation of the labyrinth |
Cheats[edit | edit source]
In the CSDb there are several cracks with a trainer function. Only the version from Hackersoft with its diverse configuration options (left image in the gallery below) is truly recommended. The other two versions, on the other hand, offer no options whatsoever: In the crack of "The Hobbit" (middle image), sprite collision detection is simply permanently disabled, and in the variant from Fantasy Cracking Service (right image), the number of lives increases by 2 with each collision instead of decreasing.
![]() |
![]() |
![]() |
Collision handling with opponents is implemented so simply in the program code that developing your own trainers is also easy:
950D: LDA $D01E ; Read VIC sprite-sprite collision register 9510: AND $0F ; Isolate bits for hedgehog (sprite 0...3) 9512: BEQ $9576 ; Jump if hedgehog is not involved in any collision 9514: LDA #$02 9516: STA *$3B 9518: SED ; Activate decimal mode 9519: SEC ; Prepare subtraction 951A: LDA *$20 ; Get number of lives (stored in BCD format) 951C: SBC #$01 ; Subtract 1 life 951E: STA *$20 ; and save again 9520: CLD ; Deactivate decimal mode
To disable collision detection, simply change the bitmask at address $9511 from $0F to $00. Alternatively, Harold can be given any number of lives by changing the number of lives he loses after a collision at address $951D from $01 to $00.
Since the various sections of the program are copied to their final memory locations only after startup, and this is done differently in each crack, the target addresses for the POKE instructions to be entered before the program starts vary slightly. For example, for the version of BAM, they are:
POKE 22477,0 : REM DISABLE COLLISION DETECTION POKE 22489,0 : REM DO NOT LOSE A LIFE AFTER A COLLISION
Internal Data Structures[edit | edit source]
For developing custom trainer functions and for analyzing or manipulating the data used by the game, knowledge of the memory allocation and internal workings is helpful. The following table therefore compiles some information about Spiky Harold.
| Address | Content | Comments |
|---|---|---|
| $0002 | Current Room | Value range $00...$38, X-coordinate in low nibble, Y-coordinate in high nibble |
| $0010 | Joystick Mode | $00=normal, $01=reversed |
| $001F | Number of Objects Found | BCD format, value range $00...$57 |
| $0020 | Number of Lives | BCD format, value range $00...$23 |
In memory area $A000-$A0E3 there is a 228-byte table that stores the type and location of each object within the room and indicates whether the object has already been collected. Each of the 57 entries in this table, each 4 bytes long, has the following format:
Votes[edit | edit source]
| Voting of the C64-Wiki users (10=the best vote): | ||
| 5.00 points at 1 vote. You need to be logged in to cast a vote. | ||
| ZZap! 64 | 48% (Presentation 76%, Graphics 47%, Sound 80%, Hookability 51%, Lastability 44%, Value For Money 55%) | Issue 18 (October 1986) |
| Lemon64 | 4,83 | June 2, 2023 - 23 votes |
| Universal Videogame List | 3,7/5 | June 15, 2023 |
| Spectrum Computing | 6,3 | June 2, 2023 - 4 votes |
| Computer and Video Games | Graphics 9/10, Sound 7/10, Value 9/10, Playability 6/10 | Issue 61 (November 1986) |
| Commodore User | 4/10 (Graphics 5/10, Sound 2/10, Toughness 8/10, Endurance 4/10, Value 5/10) 6/10 (Graphics 6/10, Sound 2/10, Toughness 6/10, Endurance 5/10, Value 7/10) |
Issue 37 (October 1986) Issue 40 (January 1987) |
| Amstrad Action | 66% (Graphics 59%, Sonics 56%, Grab Factor 63%, Staying Power 51%) | Issue 10 (July 1986) |
| Amtix | 80% (Presentation 79%, Graphics 80%, Sound 83%, Playability 77%, Addictive qualities 79%, Value for money 85%) | Issue 10 (August 1986) |
| Crash | 65% (Use of computer 59%, Graphics 62%, Playabilty 66%, Getting started 67%, Addictive qualities 64%, Value for money 70%) | Issue 29 (June 1986) |
| Sinclair User | 1/5 | Issue 52 (July 1986) |
| Your Sinclair | 8/10 (Graphics 7/10, Playability 6/10, Value for Money 9/10, Addictiveness 7/10) | Issue 7 (July 1986) |
| Your Commodore | Originality 4/10, Playability 5/10, Graphics 6/10, Vaöue 7/10 | Issue 31 (April 1987) |
| ASM (Aktueller Software-Markt) | Grafik 9/10, Sound 7/10, Spielidee 8/10, Spielmotivation 9/10 | Ausgabe 6/1986 |
| Computer Gamer | Bright Star (Originality 2/5, Graphics 2/5, Use of Machine 3/5, Value for Money 3/5) | Issue 19 (October 1986) |
| Your Computer | 4/5 | June 1986 |
| ZX Computing | GREAT | July 1986 |
Critics[edit | edit source]
Stephan64: "A nicely designed labyrinth with pleasantly animated characters, but it quickly becomes monotonous due to the simple gameplay, the regular restart at the same starting point, and the precisely enforced movement patterns. Nevertheless, 5 out of 10 points, because 'back then' I played games like this until the C64 power supply was glowing hot."
Miscellaneous[edit | edit source]
Cover[edit | edit source]

Inlay[edit | edit source]


Cassette[edit | edit source]

Manual[edit | edit source]


Theme[edit | edit source]
Both the title screen and the game itself are accompanied by music. While the title theme is a three-part piece of music by BOGG, the game's accompaniment is a monophonic version of the Flight of the Bumblebee. The encoding of the frequency parameters is based on the information from the datasheet of the SID, thus at an assumed clock frequency of 1.000 MHz. The following gallery shows the first page of each piece of music in standard musical notation. For creative reuse of the melodies, the complete sheet music is also available as a PDF document (File:SpikyHarold Theme PDF.pdf) and in ABC musical notation (File:SpikyHarold Theme.abc.txt).
Fastloader[edit | edit source]
The cassette version of Spiky Harold uses two independent, integrated software fast loaders, which are automatically activated during loading, but only speeds up the loading by a factor of approximately 2.8. A detailed analysis of the loading routines reveals the reason for this rather poor performance: Firstly, the first loaded program part does not contain the fast loader at all, but only a short command sequence, which in turn then uses the kernel to read a 512-byte module containing the first of the two loaders.
On the other hand, while these loading routines use shorter encodings for 0 and 1 bits than the kernel, they are otherwise primarily optimized to obscure their own operation and prevent the game from being reconstructed by analyzing the tape data. This includes the fact that the first loaded program section is encrypted by XORing it with the code of the fast loader; as a result, it consists — unlike what is usually the case — of almost 50% 1 bits, which in turn are encoded by longer pulses.
Both fast load routines read an arbitrarily long sequence of blocks from the tape and place them — not necessarily directly sequentially — in the main memory of the C64. The first block is only 64 bytes long and contains an additional key, which is transferred to the address range $0200...$023F and later used to decode the program code; all subsequent blocks are 256 bytes long. The first fast loader also resynchronizes the C64 with the data stream before each block, thus wasting a lot of time and space on the cassette.
The first fast load routine expects a 4-byte header before each block, containing the synchronization character of the following block (1 byte), the block number (1 byte), and the load address (2 bytes in little-endian format). In block number 0, 64 data bytes follow this header; otherwise, 256 data bytes follow. However, instead of terminating the data structure with the checksum, an additional byte is added, indicating how many extra padding bytes (between 1 and 31 bytes) follow, which are simply skipped and ignored. This extra data alone increases the data volume by a total of 3332 bytes, given 196 blocks and an average of 16 padding bytes (plus length specification) per block. Following the checksum is an address that is accessed after the block is loaded and always points to the fast loader itself; in addition, a total of 12 blocks are interspersed throughout the data stream, which the fast loader uses to partially overwrite itself. Many of the data elements described here are likely intended solely to make it more difficult to reconstruct the program data.
The first fast load routine loads a program section at address $0C00...$C1FF and a decoder at $0800–$08FF, and then transfers control to the decoder that was just loaded. This decoder then first decodes itself and then the initially loaded program section before switching to the second fast loader at address $C000. The second loader, in turn, expects a 7-byte header before each subsequent data block on tape. This header contains the block number (1 byte), the load address, the end address of the entire block sequence, and the entry address of the contained program segment (all addresses are 2 bytes in little-endian format; entry address $0000 means "do not jump to the program segment after loading"). It loads another, unencrypted program segment into the memory area $E000...$F5FF. However, the jump vector is not used. Instead, the inserted decoding routine loads the game's start address ($7000) and finally starts the game by making an indirect jump to it.
Also not used is the curious functionality that the fast loader periodically checks the jump vector for the USR function and compares it with its default value $B242. If a discrepancy is found, the modified USR function is called via a subroutine call. For example, if the USR vector is pointed to the C64's cold boot routine by entering the following commands, the fast loader will trigger a reset of the computer after a few seconds:
POKE 785,226 : POKE 786,252
The "Spiky Harold" fast loader is identical to that of "Cholo" and very similar to that of "Willow Pattern".
Video Recording[edit | edit source]
Complete solution, title music edited into the game
Trivia[edit | edit source]
- In an interview on the retro gaming site "Remix64" [1], Graham Marsh, aka "The Mighty Bogg", the programmer of the theme music for "Spiky Harold", wonders why he hasn't received any further commissions after this score. It's up to the individual player and their musical taste to decide whether they want to share this wonder.
Highscore[edit | edit source]

- Stephan64 - 15 (07.06.2023)
- Ivanpaduano - 7 (20.08.2023)
- Leer - 0 (tt.mm.jjjj)
Links[edit | edit source]
| Wikipedia: Spiky_Harold |
- Lemon64 - Game No. 2418
- Gamebase64.com - Game No. 7213
- C64Games.de - Game No. 3548
- ready64 - Game No. 2968

- The SixtyFour Originals DataBase - Game No. 478
- Interview with the programmer of the musical accompaniment on Remix64.com
- CSDb all entries
- Universal Videogame List
- Spectrum Computing
- Spiky Harold at MobyGames
- Magazine
- Test Report No. 8969 on Kultboy.com

- ZZap64 test report , Tipps (S. 71)
- Computer and Video Games test report (p. 50)
- Commodore User review (p. 38), review (p. 80)
- Amstrad Action test report (p. 60)
- Amtix test report (p. 87)
- Crash test report (p. 31)
- Sinclair User test report (p. 44)
- Your Sinclair test report (p. 35)
- Your Commodore test report (pp. 49)
- ASM test report (p. 28)

- Computer Gamer test report (p. 23)
- MicroHobby test report (p. 14)

- Popular Computing Weekly test report (p. 10)
- Your Computer test report (p. 44)
- ZX Computing test report (p. 11)





































