Ah, ghosts. That characteristic sokoban element that everyone loves. Wait, no, they’re not.
Briefly put, the ghosts in Soko Banish were a terrible design mistake, and after years of intense shrugging, I’m finally addressing them. Why now? Because I’ve been thinking about this game again, and the prospect of creating new puzzles based around its non-traditional elements, and there simply is no way to create a good or even mildly interesting Soko Banish level around ghosts.
“But why do they need addressing? They worked fine as they were, and the game promotes itself as a sokoban action game!” Well here’s the thing, they absolutely did not work fine. They’ve been the elephant in the room for a long time and their flaws are readily apparent, but they’ve been too ingrained into this 20-year-old game for an easy solution. Here’s the rundown on what has made ghosts so frustrating from a design and gameplay perspective:
- They don’t fit the game concept. Although Soko Banish claims to combine sokoban with “action”, the strengths and focus here are clearly on the sokoban, and there isn’t any actual “action” in the game apart from the ghosts. The ghosts also do nothing beyond adding this “action” to the game, as they don’t interact with anything and there’s no way to build puzzles – the actual draw of the game – around them. Essentially, they’re like Ro’s Quest adding the growing cheese from Emerald Mine – an element of a completely different game that can be put into sokoban, but probably shouldn’t.
- They require special treatment in the engine. Ghost movements are pixel-based in a grid-based game, and they’re the only thing that is. Not even the player moves by pixels! This means that for the sake of undo/redo and save states, they need to be saved with a separate method that remembers their exact pixel position at the time the player moves, which also leads to oddities since they move independently. And because they are random and timer-based, there’s no way to include them in the LURD-formatted solution replays, which also makes “solutions” to ghost-centric levels pointless as they will simply show Ardos bumbling around dodging nothing like a confused idiot.
- Let’s face it, they’re not very fun. All they do is go in a straight line, stop at walls and turn a random direction, going straight through the objects that you’re pushing around. There’s no real way to interact with them, and if you should “die”, you can freely undo and retry with no penalty. Which is good, because it would suck if there were a penalty that made you lose progress on the puzzle, but that also illustrates why these action elements in a game about intricate and time-consuming block-pushing puzzles simply do not work.

Clearly, something needed to be done about ghosts, but what? Remove them from the game entirely? Make them an option to turn on and off? Make them act differently in “Action” stages than elsewhere, or even have multiple separate ghost elements? Make them go through college again and pick a different career path?
I decided to go one step short of the nuclear option and rework them from the ground up, but in a way that doesn’t necessarily break existing levels (which it still ended up doing, but only on two stages, and I can update those with the rest of the game so it doesn’t count). My considerations were:
- Ghosts should be tile-based. This is a no-brainer. Even as “action” elements, there’s no reason for an element to not be strictly bound to the grid that the game runs on. So that’s how they’re gonna be treated from now on, removing the need for special saving methods.
- Ghosts should be step-based. This is the most drastic change and may be divisive, as it gets rid of the action aspect of the game, but for reasons stated above, I think it’s for the better. Ghosts now run on Deadly Rooms of Death logic and only move when the player does. They’re just polite like that, you see.
- Ghosts should be predictable. Especially with the move to making them fit better into puzzles, there’s no justification for ghosts to be moving randomly. A ghost that stops at a wall will now turn according to the following pattern:
- If the player is off to the side and it can make a 90° turn towards them, it will do so.
- If it can’t, it will turn the opposite way.
- If it can do neither, it will go back the way it came.
- If the player is in front of or behind it (i.e. on the same row/column it’s moving on), it will always go back the way it came.
It’s not super intuitive, but probably the most it can be to cover all corner cases without ever having to pick at random. And because their movement is entirely replicable and dependent on the player’s position, they can now show up in solutions!
- There should only be one type of ghost. Yes, I know – more options, etc. but not only is it a hassle to code and design around ghosts potentially still working the old way, it’s also confusing and simply not worth it just to keep a boring game element with no creative potential. And if we were still going to keep the old problem ghosts in there, we might as well not have revamped them in the first place. (You may have noticed I really did not like the old ghosts and I really wanted them gone. Too bad!)
- Action levels will still be labelled action because idk, dodging enemies is technically action-ish even if they’re not real time and I don’t wanna to change it.
Testing the results, I can say I’m definitely happier with the ghosts than I used to be. They may not be as clean and simple as the other elements, but they’ve fun to play around in testing, and the rework seems like the best of both worlds if I want to keep the soul (hehehe) intact and not completely break every level that uses them retroactively. And hey, it should even be possible to build puzzles around them now, which was the concern that finally inspired the rework in the first place!
So, what are you waiting for? This version is already out as of posting this, so go try it, play around with the new ghosts, and maybe you’ll come up with some neat ways to use them!