June 7, 2012 in Projects »GameTI-83/84+Z80

Barrels is a remake of the classic game Sokoban. It features 51 fullscreen, scrolling levels. The goal of the game is to move all of the barrels to the targets to unlock the next level. The game is written in Z80 Assembler for the TI-83/84+ graphing calculator.

While I was working on Megaball, another calculator game, I had to create a menu system for the title screen. Instead of developing this title screen directly into the Megaball source, I created a new project to prototype the menu system. When the menu system was completed, I copied the system into the Megaball project. I decided to use the menu prototype as a basis for this project, a simple Sokoban clone.


Sokoban is a relatively simple game to create. The game consists of a number of walls, empty spaces, boxes (barrels in this game), targets and the player. All of these elements are placed on a two-dimensional grid. The player can can move on empty spaces, but will be stopped by walls. Boxes can be pushed by the player, but they cannot be pulled. When all of the boxes are pushed onto an appropriate target, the player has beaten the level.

The state of the game can be represented as a two-dimensional array of values. When the player moves or pushes a box, the values in the array can be adjusted to correspond with the player actions. This is pretty easy to implement on modern computers, but Barrels is a graphing calculator game with limited memory, using the z80 assembly language.

I grabbed some classic Sokoban levels and wrote a converter that would compress the levels and put them in a specific format that I could decompress and read on the calculator. The final game included 51 levels. It is pretty hard to complete all of the levels, but there were some players that had gotten very far into the game. Apparently, they could not complete some later levels. It turned out that some of the source levels that I converted, had bugs in them. Thanks to the dedicated players, I could fix them.

The TI-83/84+ graphing calculator has a very low display resolution of 96×64 pixels. Furthermore, the screen only contains black and white pixels. It is possible to simulate a grayscale palette, but for this project, I did not implement it. The low resolution of screen implies that the objects on the screen have to be tiny as well. A display resolution of 96×64 can be divided into 12×8 sprites of 8×8 pixels.

Below you can see the main sprites that are used in the game. They have a resolution of 8×8 pixels.
Barrels Sprites


Barrels TI-83 (Ion)
Barrels TI-83/84 Plus (Ion)