Smiler 4 - Grinner on Tour

--------------------------



Version 1.0 Digital Prawn 28th March 2010



AY music by The Simulacra



Platform: ZX Spectrum 48K & ZX Spectrum 128K

Can use AY hardware if available on 48K systems.



Keys

----



q,a,o,p - Move Smiler (or Grinner)

s - switch between Smiler and Grinner characters

m - wait one turn

r - restart level

x - quit current game (return to main menu)

0 - toggle between BEEPER sound fx and 6 different AY chip tunes



In addition, numeric keys 0-9 are used on the level selector

screen to enter level passcodes.



Background

----------



Cousin Grinner has turned up when you least expect him (the git), 

and he is literally green with envy at your success (Yes he's the

green one). Nevertheless he wishes to take part in the adventurous 

fun and will assist Smiler in reaching home. He's brought his own

problems with him though in the form of magenta frowners which

will try to hunt him down.



Instructions

------------

Using the above keys, you must navigate both Smiler and Grinner 

into the green house.



Rules are the same as previous games in the Smiler series except:-

You use the 's' key to swap between controlling Smiler and Grinner.

Smiler is yellow and Grinner is green when active. Whilst inactive,

they appear as dithered dark blue. 



Smiler or Grinner can be killed by a frowner of either colour (red or

magenta) regardless of whether they are active or inactive.



Red frowners chase Smiler (as in the previous game). Magenta frowners

chase Grinner, however either type can kill either player character

if they happen to get in the way.



The level is completed only when both Smiler and Grinner are at the

green house at the same time. The green house is a safe square though

and whilst either Smiler or Grinner are on top of it, they cannot be

killed by frowners. Frowners cannot move onto the green house.



Smiler and grinner can occupy the same square as each other and can

pass each other, however frowners can't do this.



Various obstacles obstruct your path though, as follows:-



Red houses: Block your path. You must find a way around them.



Arrows:



Smiler (or Grinner) may only move onto an arrow in the direction

indicated, but they can move off an arrow in any direction provided

they are not otherwise obstructed. The same rule applies to frowners.

However, only Smiler and Grinner cause arrows to turn, Frowners do not.



Magenta Arrows: Rotate all arrows on the screen clockwise 90 degrees.



Red Arrows: Rotate all arrows on the screen anti-clockwise 90 degrees.



Blue Arrows: Rotate all blue arrows 180 degrees. Rotate all Magenta

arrows clockwise 90 degrees. Roatate all Red arrows anti-clockwise

90 degrees. Do not rotate white arrows.



White Arrows: These do not rotate any arrows, however they cause 

frowners to die should they step onto them.



Frowners: Only can move one square at a time and like the player can't

move diagonally. If a Frowner catches either player character, or if a

player character steps on a Frowner, then they get killed and the level

 is restarted.

Frowners can only move when the player presses a key. Unless otherwise

obstructed, red frowners will invariably attempt to move towards Smiler,

magenta frowners towards Grinner,  even if that means them blindly moving

 onto white arrows.



The wait key 'm' is crucial on some levels in order to cause Frowners

to move into areas desired by the player.



When 's' is pressed to swap between player characters, a turn is used up

 and frowners can move during the swap.



Each level has a 6-digit access code displayed at the bottom of the screen.

On completing each screen, you automatically gain access to the next one.



To select a screen, just enter the 6-digit access code on the level selection

screen, or just press ENTER to start on screen 1.



To change screens, just press 'x' to quit the current game and then enter a

new code.



Hint: Pay attention to where you leave Smiler or Grinner whilst they are

inactive. You can effectively manipulate the movement of frowners or block

their movement on certain levels by deliberately leaving Smiler or Grinner

inactive in certain positions.



Developer Notes (Adapted from Smiler 3)

---------------------------------------

The game contains six different AY-tunes. Five of them were composed by

"The Simulacra" and one of them by me. The first two tunes were made

 specifically by The Simulacra for the Smiler 4 game, the others were 

used in previous Smiler games.



The AY music will play back even on a 48K system if the hardware is present.

Without the hardware, playback is simply ignored, thus the '0' key

could be used just to mute the sound FX on a standard 48K system.



As this game, written in C is starting to bloat to around 20K of compiled

code, I now use lower contdended memory to store the dormant AY tunes, with

only the currently playing tune being relocated to upper memory on demand.



For this game, I have fully playtested all 20 levels and know them all to

be completable. Again, the difficulty level varies.



The white arrows were originally green, but this really didn't show up too

well on a cyan background.



This game has large levels, same size as Smiler 3 at 16x11 (including the outer

 perimiter) and thus it took me quite a bit longer to do the level design than

 for the previous games. The addition of the Grinner player character also made

the game take longer to playest that the previous games.



Extra coding for Smiler 4 was done in one evening, but the level design and 

playtesting took several days.



The lower screen area is printed to, but this is seamless in Z88DK which has

rows 22 and 23 available unlike ZX BASIC which uses a separate stream.



Bugs (Same bugs as Smiler 3, possibly more added!)

--------------------------------------------------



Will these ever be fixed, who knows?



Most keys can be used to 'wait a turn' apart from 'm', but I recommend using

'm' as other keys may be reserved in future games and 'm' is in a convenient

location on the keyboard. A side-effect of this behaviour is that even pressing

the '0' key to change the music can cause Frowners to move. So, the recommendation

is to restart the level with 'r' after changing tunes.



The tunes still can't be changed on the main menu - only in the game itself.



This game is a bit more sluggish than the previous three games as the main game

logic is now more complicated, thanks to the Frowners and also the fact that the

 levels are larger. So to compensate, I have re-enabled keyboard auto-repeat

 which speeds play up a bit. However, sometimes unless the movement keys are pressed

 fairly rapidly, it is possible to accidentally move two spaces instead of one.

The alternative was to turn auto-repeat off like in the second game, but I found that

 it made this particular game annoyingly slow to play.



Sometimes after you restart a level or get killed, further game actions may still

be processed e.g. a Frowner may kill you after you pressed 'r' to restart the level,

but before the level actually restarts. I have determined that these things do not

affect the actual gameplay in any way.



Sometimes when AY music is playing, you may have to press a key to advance to the

next level on completion. This issue does not occur when using BEEPER SFX.



Cheat

-----

To go to any level, just consult the supplied C source code, as it contains all level

codes.



Credits

-------

Game designed and coded by Digital Prawn.



Also uses AY music player "vtplayer" writen by Sergey Bulba.



AY Chip music by The Simulacra.



Uses Z88DK sound effects libraries by Stefano Bodrato & IM2 and malloc

libraries by aralbrec. Not to mention much other code that made its way

into the Z88DK system. ZX-Blockeditor by Claus Jahn was also used to

construct the final tapefile.



Sprites originally desgined in SevenUp sprite editor v1.20 by Metalbrain

which also gave me the idea (via the sprite rotation function) of using rotating arrows

in the first Smiler game onwards.



So big thanks to all of the above for making the game possible.



