Archive entry by Ste Pickford on Tue, 07 Jul 2009
Subject: Solstice 2
This is one of my favourite graphics.
It's a large - almost full screen - drawing of the main character in our SNES adventure game Equinox (Solstice 2 in Japan), from around 1991.
The reason we added a large, lavish, memory hungry graphic like this to the game is quite interesting.
The game was split into two sections, a large, scrolling, almost-3D 'overworld' section, where your character walked around on a rotating map, avoiding monsters, crossing bridges, and finding dungeon entrances. When you used a dungeon entrance the game switched to a completely different indoor 'underworld' section, with discreet rooms built from blocks, in isometric 3D.
These two sections were effectively completely different games. They were coded separately, used completely different art and audio assets, a different main character sprite, different movement and collision systems, different user interface etc. When you entered or left a dungeon and switched between these two game sections, the game had to pretty much remove all the code and assets from RAM, and load completely different data from the cartridge, all in one go.
Cartridges were pretty good at this - loading into RAM from cartridge was much faster than from CD - but it still took a couple of seconds because we were changing *everything* - not just one level's backgrounds, or one set of enemies. Because all the graphical assets were removed while this took place, this meant a couple of seconds of a completely black screen when entered or left a dungeon. Plenty of games have long black screen loading sections these days, but we were horrified at the time and decided this two or three seconds of black screen was unacceptable. What could we do? We couldn't increase the speed of the transfer of data into RAM, neither could we decrease the amount of data transferred, without compromising the quality of the game. We had no spare RAM either, so we couldn't sneakily pre-load some of the data you might need in advance (which is one of the tricks modern games use to disguise loading times).
Our solution was to distract the player. I drew this big picture of the main character, almost the size of the screen, showing him jumping down the hole from the overworld into the dungeon. After clearing all the RAM we loaded this graphic into RAM first, and displayed it on the screen. Then, while this was visible (I think we may have had a little audio jingle as well), we loaded the rest of the data we needed into RAM.
By punctuating the loading sequence this way, it looked like something sensible was happening. Instead of a boring wait looking at a black screen, the player saw their character doing something apparently sensible. However, because we had to also load in the graphics for this image as well, the whole loading sequence now took slightly longer. The really weird thing was that once we put this screen in, even though the loading sequence was now a few milliseconds longer, it actually felt too short. You'd see the main character jumping down for only a second or two, then he'd disappear and you'd be in the dungeon. It felt a bit too quick, and slightly unsatisfying.
So what did we do? We added a delay of about another second, which made it feel right!
Unbelievable! We'd gone from fretting about an annoying two second delay, and to fix it we ended up adding at least another second of delay on top! But it worked. Nobody every complained about the loading time when switching between sections.