Also known as: Tails Adventure (US/EU box art), Tails' Adventure (Sonic Generations list of Sonic games)
This game has unused code.
One day Tails decided to go fight a bunch of ducks for some reason, resulting in Tails Adventures, his last solo game (obscure Japanese cell phone titles aside) and hands-down his best … though that's not much of a statement considering the competition. Fortunately it's a pretty nice game in its own right, blending exploration and inventory-based puzzles with somewhat more conventional Sonic elements.
- 1 Debug Features
- 2 Graphics
- 3 Lives System
- 4 Cannon Rotation
- 5 Sea Fox Water Currents
- 6 Inaccessible Polly Mt. 2 Warp
- 7 Instadeath Tiles
- 8 Effects 0x0D and 0x0E
- 9 Demo Playback
- 10 Music
- 11 Text
- 12 Miscellaneous
The game contains a fully functional level select, but no method of accessing it. Based on how other code works, it was probably meant to appear just after the title screen fades out. It works like a standard level select: choose a level with the directional pad and press Button 2 to start it. It's not terribly useful since Tails always starts with the default inventory and HP total, though.
|Download Tails Adventures level select patch
File: tailsadv_levelselect_patch.zip (info)
This patch restores the level select to more-or-less working order. To run it, simply choose "New Game" on the title screen. Note that this breaks some other functions like the Continue option, so don't try to do a full playthrough on it or something.
This text was part of a debug menu at some point, but all that's left is the tilemap. It might have been used to set the maximum flight time, or to view Tails' three flight animations.
The game contains a basic error handler routine, nearly identical to the ones in other Aspect Sonic games, at ROM 0x70. When run, it tries to print the text "ERROR" to the screen, waits for three seconds, then resets the game. It's not terribly useful since no code calls it in the final game, and the error message is only legible if an ASCII font already happens to be loaded to VRAM $2400.
|This little speck's graphics and sprite mappings appear between two frames of Tails' "playing in the dirt" idle animation, so it may have been meant to appear as part of it; the animation has Tails mime throwing something over his shoulder, and this might have been meant to be the thrown object.|
|The Sea Fox's turning animation has a second "drilling" frame that would make it consistent with the standard Sea Fox sprites, but it isn't used.|
|The Sea Fox tilting up and down at intermediate angles. These may or may not have been intended for the unused underwater currents.|
Due to an error in the graphics definitions, four of the tiles for the last frame of Tails' animation for throwing a bomb while jumping are not loaded, causing him to briefly sprout a third leg every time he does so. To fix this, change ROM 38DEF from 06 to 08.
|The Remote Robot blinking. Probably meant as an idling animation.|
|The Remote Robot's eyes glowing...for some reason. The animation here is somewhat conjectural, but the frames appear in this order in the game's data.|
|These arrows appear in the Polly Mountain graphics, but aren't assigned to any metatiles. They may have been used as a debugging aid during development to visually indicate the direction of the invisible air currents used throughout the level.|
|A similar set of arrows in the Lake Rocky graphics. Most likely used to mark the ultimately-unused underwater currents.|
Most tilesets define some metatiles that aren't used in any level. In some cases this is mundane (e.g. most levels have metatiles for spikes facing in all possible directions with two possible backgrounds, but only use a subset of them); others are a bit more interesting.
Note that for tilesets used in multiple levels with different palettes, only metatiles not used with any palette are listed.
The game originally used a lives system much like other Sonic titles. Most of the programming for it is still in the game, and in fact is still partially active! RAM $D2AF stores the number of lives the player has left. When Tails dies, that counter is decremented, and the Game Over screen triggers if it reaches zero. In the finished game, $D2AF is always set to 01, causing a Game Over no matter what.
Similarly, the Game Over screen was supposed to have "Continue" and "Quit" options. The orphaned code for choosing Continue remains at 0x108D; it resets the lives counter to 3 and reloads the last area with Tails' HP restored to whatever it was when he got there. Although the code for the menu itself seems to have been removed, the graphics and tilemaps for its components remain (but weren't translated):
|These arrows would presumably appear on either side of the selected option.|
It's also worth nothing that one of the game's music tracks, a short continue screen-like tune, can only be heard by using the Radio item's cut-down sound test. Considering all the other tracks that play on the Radio are used normally, it seems quite likely that that music was originally meant to be used on this screen.
In the final game, the Wrench item has only one use: switching the direction of the conveyor belts in Battle Fortress. It actually has one other function, though: If Tails uses it while standing on one of the cannons in Coco Island, the cannon will temporarily flip to face the other direction, complete with an otherwise-unused animation. It will turn back around after a few seconds, so it's not really clear how this was supposed to be useful.
This behavior is fully implemented and works just fine, and it can be seen if you re-enter Coco Island with the Wrench in your inventory (normally you're unable to select it on the map once you unlock Battle Fortress, but it can be reached if you take the same path through Lake Rocky again). The cannon graphics are also loaded into the VRAM on Battle Fortress, so some cannons were almost certainly supposed to appear there, but ultimately didn't.
Sea Fox Water Currents
Cavern Island contains a few water currents that push Tails around in various directions. These currents aren't programmed to affect the Sea Fox, but apparently someone neglected to tell the map designer this, as the metatiles that the "water current" behavior is assigned to also appear in several parts of Lake Rocky. Their placement reveals that the Sea Fox areas were meant to be a bit more challenging than they wound up being.
The mines in this part of map 2 would have been trickier to avoid with the currents interfering.
Using the Mine weapon to get through the barrier to the path to Coco Island was meant to be a lot more troublesome, likely requiring mutiple passes through the mine-filled circular current.
The Extra Armor-requiring trek to Coco Island has some currents to force Tails through the longer, more dangerous path in map 5.
The "trap" room has some currents to make escape more difficult. Not that it matters, since without invincibility Tails will probably be long dead by that point in the level. Note the quite badly misplaced cannon objects on the right.
The final run up to Coco Island in map 6 also has some currents to make it a one-way trip.
On the path toward Lake Crystal in map 8, these currents would have created a point of no return. They also explain the presence of the odd ring-filled room: it was meant to be a reward for pulling out of the current at the right moment.
In the lead-up to the Lake Crystal exit, this current would have automatically ejected Tails toward the surface, and also directly into some mines unless the player reacts in time.
Inaccessible Polly Mt. 2 Warp
In Polly Mt. 2, Tails can normally fall from the hole in the second map down to the first map, but can't go back up the hole due to a wind current. Despite this, a warp object leading to the second map exists, though it's unreachable.
The warp leads to this poorly-placed spawn point on the second map. Even if it wasn't embedded in the wall, using it would make Tails fall back into the first map immediately after spawning.
Metatile behavior 0x05 is an unused (not assigned to any metatile) "instant death" effect. When set on a metatile, touching it causes Tails to die immediately, no matter how much health he has left. Probably removed for being very cheap, perhaps in part because of the removal of the lives system.
Effects 0x0D and 0x0E
Levels in Tails Adventures can be assigned up to four "effects". Generally, an effect is something like a cycling palette or split-screen scrolling. Effects 0x0D and 0x0E are set on the first and second areas of Battle Fortress 1, respectively; however, they've been dummied out of the final game.
When a level starts with effect 0x0D on, the game calls the routine at 0x5522 with a parameter of 0x0080. That routine has been replaced with a ret in the final game, so nothing happens, and the effect then proceeds to turn itself off. Effect 0x0E is almost identical, except it instead calls 0x5523 (another dummied routine) with a parameter of 0xFF80.
Based on this information and the fact that these effects are assigned to Battle Fortress 1, it's plausible to speculate that these effects were originally commands to trigger autoscrolling—0x0D for horizontal, 0x0E for vertical. The layout of the Battle Fortress 1 maps is clearly conducive to such a setup, and it's pretty apparent that the first map in particular was designed with different mechanics in mind (it can be cleared in minimal time and without taking damage simply by not pressing any buttons). Assuming the effects were for autoscrolling, the parameter 0x0080 would then indicate a scrolling rate of 0x80 subpixels per frame to the right (i.e. a pixel every second frame), and 0xFF80 would indicate 0x80 subpixels per frame upward.
The game contains code for a basic "demo playback" mode in which the player's input will be replaced by a sequence of button presses, but this isn't actually used for anything.
Every frame, after getting the button press information for the current frame, the game checks if bit 3 of $D2A4 is set. If it is, then the game reads two bytes from the location whose ROM bank is given by $D2EE and whose CPU address is given by $D2EA-D2EB (with the address incremented by two after the read). The first byte read replaces the buttons currently pressed ($D13A), while the second replaces the buttons triggered this frame ($D14A).
This is most likely a generic engine leftover from other Aspect Sonic titles, most of which play demos at the title screen.
The ending music cuts out 12 seconds in, but the full track runs to over half a minute.
The game also contains three dummy tracks (IDs 0x91, 0x96, and 0x99), which consist of nothing but an "end of track" command for all four sound channels.
GG TAILS ADVENTURES < Ver1,02 > 1995/07/21 @SEGA/Aspect Co.,Ltd
As with all of Aspect's 8-bit Sonic (or Tails, as the case may be) games, this one has some semi-standard header text at 0xC0 that gives the name of the game, version, build date, and some basic copyright information.
- After the final boss is defeated, the game checks how much health Tails has (RAM $D526). If it's greater than 0xF8, the game won't trigger the ending sequence. This might be an anti-cheating measure - a lazy hacker might just set the HP variable to 0xFF instead of a legal value - but may also simply be a safeguard in case the final boss' "grab" attack (which deals damage differently from most other attacks) somehow underflows the ring counter. In any case, it's not a very well-implemented protection; a different bug (landing on the final boss after getting hit by an attack) can cause Tails to wind up with zero HP, which the game separately checks for, and forces the player to fall off the bottom of the level and go back to the world map.
- The game devotes a byte in RAM ($D034) to the number of slots in the inventory (minus one). It then uses this value to decide where to "wrap" the inventory when the player switches between items. However, the variable is set to 0x03 in the new game initialization code and is never touched afterwards. Most likely, the original idea was to use this to prevent empty slots from showing up in the inventory - that is, to start this at 0x00 and increment it when the player picks up items. This wouldn't play very nicely with the equipping system used in the final game, which is probably why it was scrapped.
- The game uses RAM $D2D5 to store the ID of the object to spawn in the "player" slot when a level starts. However, that location is initialized to 0x01, the ID of the Tails object, and never changed afterward. This might be a leftover from other Aspect Sonic titles, some of which have multiple player characters. It's also possible the Sea Fox was meant to be implemented as a separate object from Tails at one point (substates of the regular Tails object are used instead).
- During the second part of the intro, Tails is programmed to flip back and forth as though looking around after he wakes up. However, the scene normally changes before the looking-around animation can play. To see this, change ROM 0x29E1 to 0x04 to make the cutscene last longer. (This will also cause Tails to go back to sleep after looking around, but that's just a side effect of the game's scripting system - all the game's animations loop unless otherwise specified.)
- In general, every "warp" leading to another level or the world map has a corresponding "spawn point" assigned somewhere nearby, allowing Tails to start the level near that warp. However, some of these spawn points are totally inaccessible; e.g. there is a spawn point placed just after the Poloy Forest boss (corresponding to the warp back to the world map), but there is no way to start the level from there. This holds true for most levels with a one-way exit to the world map.
- The world map is assigned some uniquely defined "level" data that isn't used in gameplay, although it is loaded whenever the world map is. However, it's just a copy of the bottom part of Polly Mt. 1, map 2, followed by null metatiles.
- All maps of Polly Mt. 1 except the boss arena load the boulder graphics to VRAM, but none of them have a boulder object in them. Similarly, Lake Rocky loads a right-facing version of the "bird missile" graphics, but the "bird launcher" object always fires to the left.
Quite a few palettes seem to be unused, but I haven't checked thoroughly.