(back to project list)

Epoch Disassembly

Epoch is a first-person space shooter for the Apple II, written by Larry Miller. It uses a blocky graphics style that looks a little crude but can be rendered very quickly. The same style was used for Miller's next game, Hadron. There are some similarities in the following title, Minotaur, though that game had a much higher level of detail.

The game also featured relatively sophisticated music for an Apple II game, playing a portion of 2001's Also Sprach Zarathustra when you got a new high score.

Epoch is copyright 1981 Sirius Software, according to the packaging. An in-game notice declares that it's copyright 1981 Larry R. Miller.

title action

How to Play

The game is very simple: fly around and shoot the bad things, and fly through holes in good things to regain resources.

Direction is controlled with the joystick. The farther you move the joystick from center, the faster your ship will turn (it's not a simple 8-way D-pad style control). You can specify the responsiveness with the 1-5 keys, and flip axes with 'H' and 'V'.

Forward speed is controlled with the joystick buttons: button 0 slows down, and button 1 speeds up (this is the opposite of what the manual says). Pressing both buttons at the same time fires the cannon, as does pressing the space bar.

Fuel is consumed when you speed up, slow down, or steer at a rate faster than a drift. Running into an enemy ship, base, or projectile costs 300 fuel. Ammunition is reduced by one when you fire, and time counts down continuously when you're outside a time portal.

While inside a time portal, you regain time at a rate proportional to your speed. You will be kicked out of the portal when time reaches 9000 or after hitting the boundaries a certain number of times. You can also choose to exit early by holding both buttons down.

Sound can be toggled with 'S' or Ctrl+S, and the game will restart if you hit 'R' or Ctrl+R. Pause/resume the game by hitting the ESC key. You can interrupt long musical sequences by hitting a key.

Things you may encounter in space:

Img Points Notes
e30p 30 shoot top-left corner of blue rectangle
e40p 40 shoot top-left corner of purple rectangle
e60p 60 shoot top-left corner of blue rectangle
e100p 100 only "3D" shape; shoot blinking dot
e300p 300 shoot flashing square
e500p 500 shoot flashing square
portal - fly through middle to enter time portal
base - fly through hole to regain fuel/ammo

Incoming and outgoing projectiles, ship explosion rubble, time portal boundaries, and stars are also represented as objects.

There are 8 different regions of space. The region determines what types of objects (enemy ships, friendly bases, stars, etc) are created. The region changes after a certain amount of time has elapsed. It changes faster when the player's speed is at least 500, and even faster when the speed exceeds 1000. Regions are selected randomly. So if you're looking for a friendly base for refueling, you just have to keep flying until the random number generator works in your favor.

Anything that moves off-screen is destroyed and replaced with something new. There are no persistent objects.


Under the Hood

For details on the graphics engine, see this page.

Regions

As mentioned earlier, the set of objects that appear is determined by the region of space you're currently in. The regions are:

Num Contents
0 1 enemy base, 1 ship, 1 projectile, 12 stars
1 1 enemy base, 1 ship, 15 stars
2 2 ships, 2 projectiles, 11 stars
3 (traveling through time portal)
4 1 enemy base, 1 projectile, 1 friendly base, 12 stars
5 1 ship, 32 stars
6 (title sequence: 1 Epoch logo, 8 stars)
7 1 enemy base, 1 ship, 1 friendly base, 9 stars

If #3 or #6 is chosen by the random number generator, the region number is re-rolled. Time portals are in the same object class as enemy ships, so they may be found anywhere enemy ships are. (Sometimes they even shoot at you.)

The values above indicate limits, e.g. in region #0 you will find at most one enemy base and one enemy ship. When a new region is entered the existing objects are not discarded; they just expire naturally. So if you travel from region 2 to region 7, you can have 2 enemy ships, 1 enemy base, and 1 friendly base on screen all at once.

The projectile count places a limit on the number of enemy projectiles that may be in flight simultaneously. Curiously, the game doesn't actually decide to shoot at you; it creates objects at random. If it rolls a projectile, it rolls again to determine whether it's a ship-launched or base-launched projectile, and then searches for an enemy ship or base to use as the point of origin. If no appropriate enemy can be found, the projectile is just created in open space (think of it as a meteorite). Because time portals have the same ship class as enemy ships, they will sometimes shoot at you.

Stars are not background objects; you can fly past them. Most are defined as points, which don't change size with distance, but one variant is defined as an orange rectangle, which makes it hard to distinguish from a projectile.

Hitboxes

The hitbox determines where on an enemy ship you have to shoot to destroy it. In Epoch, the top-left corner of the first element in the shape definition determines the location. The size of the hitbox is determined exclusively by the player projectile shape definition, and thus is the same for all enemy ships and bases.

For most of the enemy ships, the first element defined is the rectangle that forms the main body, so you want to aim for the top left corner. For enemy bases and the 100-pt ship, there's a blinking rectangle or point that you have to target.

When considering a collision with the player's ship, the hitbox for the target shape is used. This tends to be generous for ships, so you can register a collision with a larger area than a player projectile would. For friendly bases, time portals, and time portal boundaries, the object's first element is a point in the center. "Colliding" with the center point triggers the fly-through behavior.

Hacks & Cheats

Some things to make experimenting with the game simpler. It's easiest to make the modifications in a debugger while the game is running in an emulator.

If you want to remove distractions, you can configure a region of space to have nothing but a single object, and make it the only region available. Start a new game after making these changes:

It's necessary to have at least one object or the game will think something broke and go into a soft-reset loop. The object spawning code only creates objects in the first 8 shape classes, so it will not spawn player projectiles or explosions.

If you want to try the various musical sequences, change the song that plays when starting a new game by setting $83c6 to a value from 0 to 6:

  1. game-over music (not high score)
  2. start game
  3. enter time portal
  4. (chirp) enemy base destroyed (either kind)
  5. fly through friendly base
  6. game-over music (high score)
  7. exit time portal (max time)

Restart the game with Ctrl+R and start a new one with space bar to hear the music.

Miscellaneous

Typing "NOTICE" will pop up a copyright notice and freeze the game.


Copyright 2020 by Andy McFadden