psxsdk

terra

Terra Incognita, a 3D action adventure on an island, reconstructed from its executable.

Controls

The directional buttons walk, relative to the camera; Cross jumps; Square swings the sword, lifts and throws what can be lifted, and reads the signs; Circle drinks a potion; L1 and R1 turn the camera and L2 and R2 bring it closer or farther. On the title, left and right choose Japanese or English and Cross or Start begins; Cross or Square takes a conversation on. Start and Select together quit the program, which the original, with nowhere to quit to, could not.

A port of Team Fatal's Net Yaroze game "Terra Incognita" (M. Kamiyama, S. Tajima, K. Tachi, 1996-97), the international version from Sony's Net Yaroze showcase: an action adventure in a small 3D world. Two treasure hunters sail to an island where, rumor has it, a golden pedestal lies in ancient ruins guarded by a monster. One of them is too scared to leave the ship, so the other sets off alone, with the day's light to find it in: through the island's areas, over its hills and water by crates, moving platforms and slime balls, past its pots, bombs, switches and locked doors, fighting its monsters with a sword and keeping hearts up with the potions chests hold, to the ruins, the guardian and the pedestal, and back to the port before sunset, where how the story ends depends on whether the pedestal came too, and on whether the day ran out. The program was reconstructed from the executable, as no source survives: the island, its creatures and its scenes are the data files the original shipped with, read off the disc and decoded here, and everything that moves them is Go.

Differences from the original:

  • The three archives and the sound files are read off the disc into the program's own memory and unpacked there, rather than loaded into fixed addresses over the serial cable by the Net Yaroze tools. The unpacking and the texture, model and animation decoding is this program's; the formats are the original's.
  • An ordering table depth past the end of the table is held to the last entry, where the original let it run on past the table.
  • An animation track is padded with one zero key, and a spline key past the end of a track reads as zero, where the original read whatever followed the track in memory.
  • An actor whose entity is freed is kept for the next of its model, since the program's allocator never gives memory back; the original freed and allocated them.
  • The GTE is driven through the yaroze package's inline functions rather than the SDK's macros, and the polygons are built the same way the original built them, into packets of its own.

The pictures match the original's frame for frame in the emulator up to a vertical blank, and the story's flags, the areas entered and the player's position came out the same through tens of thousands of frames of scripted play: the port and the quarrel, random walks and fights through the island's areas, the ruins, the pedestal's lifting, the guardian, the returns with and without the pedestal, the day running out, and the endings. The port runs at thirty frames a second as the original did, with the disc build optimizing for speed.

Source on GitHub