Obsession Development's
GameBoy SokoBan
Created by Emil Brink in July, 1997
This is version 1.20, from 1998-03-05

# Table of Contents

##

1. Changes since Last Version
2. Legal Notice - Important!
3. Introduction
4. The Title Screen
5. How to Play
6. The In-Game Menu
7. Closing Remarks

# 1. Changes since Last Version

This documents version 1.20 of the game. The last released version was the first official release ever; it had number 1.10. These are the changes that have been made since that version:

- Fixed a subtle bug in the title screen scroll
- Replaced next and previous level commands with a "goto level" command - much smoother
- Added keyboard repeat in game menu
- Added version info to ROM title string
- Changed flashing-speed of start-message :^)

# 2. Legal Notice - Important!

This software is distributed free of charge and as-is, without any form of warranty, neither explicit or implied. This is free software; you use it on your own risk, and absolutely no-one except for yourself can be held as responsible for damage of ANY KIND inflicted to other persons, animals, equipment or anything else by the (correct or incorrect) use of this software.

This software has NOT been tested on actual Nintendo GameBoy hardware, nor is it intended for use on such hardware. I am in no way a professional GameBoy developer--I'm just a (random) hacker who happened to write a piece of software which seems to produce a certain result when put through an emulator of such hardware. The phrasing "for Nintendo GameBoy" (or similiar wording) which may appear in the software or its documentation does not refer to actual hardware, it refers only to the fact that this software has worked on a GameBoy simulator more than once.

GameBoy is a registred trademark of Nintendo

This game is freeware, meaning it is perfectly legal (and encouraged) for you to re-distribute it anywhere. However, if you do so, it is requested that you always include the complete package, with this documentation included. This is because the author of this software hates undocumented software, and wouldn't really like seeing his own work turning into such cruft. Also, this is not in the public domain! If you paid more than a reasonable "distribution cost", you've been ripped off by someone up to no good! Sad.

# 3. Introduction

This file documents Obsession Development's implementation of the popular little puzzle game called "SokoBan" for Nintendo's GameBoy platform. As stated above, it has not been tested on actual hardware, but only emulated.

It was originally written, from scratch, in less than a week, during the period 1997-07-18 to 1997-07-24. This game is actually the very first program I have ever written for the Z80 & GameBoy! Before 1997-07-18, I had never seen any Z80 assembly code, much less written any. To be honest, I found programming for the GameBoy to be rather nice and easy... Of course, I have yet to try to make any advanced stuff.

In my humble opinion, this game turned out to be pretty nice, with the following fancy features included for your pleasure:

- Nice intro
- Even nicer title screen
- 49 different levels to conquer
- Lets you jump to any level, replay current level, and abort game during play
- Puts no strain on your ears `;^)`
- All this in a lean, mean 32KB package

# 4. The Title Screen

After watching a short intro, you end up glaring at a screen containing a big logo, some texts, a (rather cool, IMHO) scroll, and a flashing message telling you to press START to play. This is the Title Screen, and it is where you are kept between games. There really isn't that much to do on the title screen, except to read all the texts, of course. When you've done that, hit START to begin brainwrestling! For completeness, I have chosen to include a picture showing the title screen in all its glory:

(It can be noticed that the logo is really sad. That is because I've made it myself. I still hope for a "real" logo by one of our (comparatively infinitely more talented) artists.)

# 5. How to Play

If you've played SokoBan before, you can probably skip this section. After all, there is only so much to say about how to play a game this simple. If you haven't played it before, there are a few things you need to know, though. Basically, it goes like this:

## 5.1 What's that?

The game consists of a sequence of levels. Each level consists of a rectangular array of building blocks, each 8x8 pixels big. There are five types of such blocks:

Floor
  These are just empty spaces, where you can walk around freely.
Wall
  Walls are the exact opposite of empty blocks, since their purpose is to limit your freedom of movement, often creating devious mazes, rooms and halls while doing so.
Crate
  A crate is a boxlike thing, which can stand on the floor. You can walk up to it, and give it a push, and if there is no obstacle blocking the way (such as a wall, another crate, or a landed crate) it will move in the direction you pushed.
Landing zone
  The landing zones are places whose only purpose in life is to serve as parking slots for crates. You can push a crate onto a landing zone, and it will stay there.
Landed block
  This is what you get when you push a crate onto a landing zone. You can push on this too, to release the crate again. You can also push crates from one landing zone onto another.

  NOTE: The goal of the game is to turn all crates into landed crates, i.e., push all crates onto landing zones. Once you do this on a level, you will be swiftly transported to the next level. They say that a picture says more than a thousand words, so I guess I better throw you some pixels saying far more than the blabbering above:

  This picture shows all the blocks plus the player character (to the right, above the 'E' in "MOVES"), and also the panel which is the name given to the line of text at the bottom of the screen. The panel shows you the number of the level you are on, and also how many times you have moved so far. It is a general goal of playing SokoBan to minimize the number of moves made in order to complete a level. Unfortunately (or, perhaps, fortunately) this version of the game does not keep any "highscores", so once you finish a level, your moves-count is lost forever.

  ## 5.2 What can I do?

  Not that much, really. The first thing you can do is to forget about your (emulated?) GameBoy's A and B firing buttons, since they're not used at all by this game. Once you have popped those out of your mind, push these button descriptions in:
  Arrow keys
    The GameBoy features four arrow keys arranged into something commonly called a directional pad. You can use these four keys to move your player. To go up, just tap the up key. It's really that easy! Note that the game won't allow you to move diagonally, and it will also not allow you to keep an arrow depressed; for repeated movement, you must release and press again.

  The SELECT key
    When playing, pressing SELECT has no effect whatsoever. However, if you first press START to open up the in-game menu, SELECT becomes important; it is the key used to select the different options.

  The START key
    If you press START during game, the so-called in-game menu will appear from below. For a description of this menu, see the next section. Also, when (if?) you manage to complete a level, a flashing message will appear in the lower part of the screen, telling you what you just did. To get rid of this text and start playing the next level, you should press START.

  # 6. The In-Game Menu

  As stated above, if you press the START button while playing, a menu called the in-game menu will come in from below. It looks like this:

  Note that little arrow. It is the menu cursor, and it's purpose is to show you which option you have highlighted. It does this, quite effectively, by simply standing on the option's line, thus pointing it out. You can move this arrow with the up and down arrows on the directional pad, and you can also hit SELECT to select (amazing) the currently highlighted option.

  Here's a run-down of the options presented:

  Restart level
    This is the option of choice when you screw things up! It will reset the level to the way it was when you first saw it, and in the process reset your movement count to a big 0.
  Goto level XX
    This item allows you to instantly move between the levels in the game. Move the arrow to this line, and use the left and right directional buttons to change the number shown. When the correct number is displayed, press SELECT to begin playing it!
  Abort game
    Selecting this brings you back to the Title Screen. Enjoy, but be careful since there is no verification or anything. It just happens!
  Continue game
    Select this one to continue play where you left off. An easier way is to simply press START again, since if the menu is open, doing so hides it.

  # 7. Closing Remarks

  Obsession Development's SokoBan for GameBoy was developed under Linux 2.0.29 and 2.0.30, using the Virtual GameBoy GameBoy emulator by Marat Fayzullin (core emulator), Marcel de Kogel (MS-D*S version), Thierry Lescot (SVGA-lib version) and Hans de Goede (additional features). All code was written using the jed editor by John E. Davis. Assembling, linking and "fixing" of the code was done using the tools from RGBDS v1.06 by Carsten Sorensen. The levels (all 49 of them) were "borrowed" from the Amiga game BoxMan (part of WBGames, which, incidentally, was written by Marat Fayzullin!). I hope that doesn't upset anybody...

  Mindnumbingly useless project facts:

  - Source code size: ~51KB, ~2900 lines, or as `wc` puts it:

        sokoban/src> wc sokoban.z80
           2907    7760   52080 sokoban.z80
        sokoban/src

  - Assembly time: <½ second, on my Pentium-133
  - Linking time: not long...
  - Level data size: ~12KB
  - Graphics size: perhaps 5KB
  - Sound size: so, you hear sound? Oh-oh... Time to see a doctor!
  Actually, I'm pretty sorry there's no bopping music and banging sound F/X to listen to while playing this game, but hey - give me a break, huh?! I haven't even been programming this little thing for a week yet, and I have absolutely no experience when it comes to sound generation (other than playing samples on the Amiga)! If you feel that you have the know-how not only to compose great music for the GameBoy, but also to provide perhaps some replay code, feel free to contact me about it!

  If you think this game looks more like a demo on, say, the Amiga(TM) than a proper GameBoy game, you just may be right... `;^)`That is because I once was an Amiga demo programmer; perhaps some of you are old/experienced/cool enough to even remember somebody called WIZEX who wrote some neat demos/intros/fluortablettros for an Amiga group named OXYGEN in the early nineties - that's me!!

  If you feel like getting in touch with me, for any (approximately serious, please - I get more than enough junk already!) reason please don't hesitate to mail me directly at emil@obsession.se. Also, you can visit our company pages at www.obsession.se, perhaps there's a more recent version of this game there?

  Although I (for legal reasons) can't suggest that you try this game on an actual GameBoy (by burning your own EEPROM version - it's only 32KB), I would be very much interested in hearing about any attempts--by responsible persons who have read the Legal Notice--to do so.

  Oh, well. I guess I have to wrap this up now. What else can I say? Nothing special, except that I think programming the GameBoy has been a lot of fun. I won't make any promises, but don't be surprised if more stuff comes along...

  Last updated 1998-03-05 by Emil Brink, author.