Skip to content

Helios Game Design Document

Enno Rehling edited this page Feb 26, 2014 · 10 revisions

Milestone 2 (Helios) Design Document

Smaller regions with fewer peasants and resources.

Problem: In Atlas, players ended up having more money than they could spend, and recruiting as many peasants as possible from their territory. This is more efficient than taxation, and leads to even more money, and huge armies of mooks.

Solution: reduce the maximum number of peasants and commodity limits in all terrain types by 80%

Tech Design

  • replace hard-coded arrays of terrain data with a terrain_type struct
  • read terrain data from json configuration file
  • backport this to Atlas

Factions start with less money and more people.

Problem: In Atlas, the most powerful starting strategy was to find idle neighbors and rush them, because they had single units with lots of money. This creates random imbalance and benefits aggressive players with idle neighbors, not smart strategies.

Solution: Increase the initial unit size to 10 men, and give them only $2000 starting capital.

Tech Design

  • read the initial unit size and starting capital from the json configuration file.
  • backport this change to Atlas.

Factions start in a limited number of starting cities.

Problem: Players in Atlas had very little contact among themselves, and sometimes uneven starting conditions. Starting them all in the same place creates an initial land rush and early conflict.

Solution: World generation will place a building for every 4-5 players (configurable), where new players are seeded. Cities are owned by a guardian NPC faction that is allied to nobody, with armed guards that are strong enough to withstand an early rush.

Tech Design

  • configurable city size in json config.
  • create a faction for guardians.
  • create an NPC flag for factions that makes sure they are not killed for being idle.
  • one armed guard per player-controlled man in the city (from config).
  • guards are the first (owner) unit in the city.
  • each armed guard has 1 sword, 1 plate, and guards.
  • all guardians WORK and TAX for upkeep.

Different types of ships

Problem: Ships take a long time to build.

Solution: Reduce ship costs by 50%

Tech design

  • replace hard-coded arrays for ship data with a struct ship_type (see Eressea).
  • configure ship types (name, capacity, and cost) in json.

Improved map generator that makes all factions reachable from each other.

Problem: Some factions started on small islands and had no contact with the rest of the world.

Solution: Everyone starts on the same continent.

Tech Design

I don't have a concrete idea here, but I would like to just experiment with some map generation. The current code is almost good. Example idea: If we can place the cities on the map, add a fixed number of random terrain around each, and then use an A* pathfinder to find out if they can all reach each other, we can generate maps until we have a good one.

  • Implement A* pathfinding.

Basic support for ALH as a frontend.

Problem: There is no frontend for the game, not even for mapping.

Solution: ALH already exists, it just doesn't know about our game. We will try to make it read the report, display a map, region information and list of units.

Tech Design

  • Make ALH compile
  • Incorporate any changes that Atlas players have made.
  • TBD.

New direction names.

Problem: Players had trouble with the MIR/YDD directions, and it was unclear how the map should be oriented.

Solution: Renaming the directions to create either horizontal (W, NW, NE, E, SE, SW) or vertical (N, NE, SE, S, SW, W, NW) layout will make it more obvious where they are relative to each other, and which way is either up/down or left/right. It seems that the ALH map prefers a vertical layout, so let's go with that for now, even though it's the one that works poorly with ASCII maps :-(

Tech Design

  • rename existing directions W=>SW, E=>NE, M=>NW, Y=>SE.
  • The parser reads only the first character today. Make it understand NORTHEAST as well as NE, and other directions.

Modified coordinate system.

Problem: The coordinates seem to have confused players, especially that 17,17) bordered on (0,0), etc.

Solution: I don't like the ALH coordinates, but if those are universal for modern Atlantis games, I suppose they should be adopted. The code hardly uses the actual numerical value of the coordinates anyway. Instead of coordinates in the [0, width) interval, they should be in [-width/2, width/2], while preserving the local coordinate origin for each faction and the wrap-around nature of the world.

Tech Design

  • Give every region a unique ID. Emit the ID in the JSON report. Keep the coordinates.
  • In the data file, store the graph of neighbors, and use the neighbor graph, not the coordinates, to create the world from the file.
  • Create a function to convert from internal coordinates to ALH coordinates.
  • Update regionid so that ALH coordinates are used for both reports.

Ships can SAIL more than one hex.

Problem: Ships are pretty much worthless in Atlas. To wit, exploration on foot and by sea is incredibly slow.

Solution: Faster ships are solving both of these problems. Explorers will have to build ships to get around. To start off, ships have only two different speeds: longboat (2), clipper (3), caravel (2).

Tech Design

  • add ship speed to the JSON ship configuration (see above)
  • extract the sailing code into its own function.
  • Orders can we given as SAIL WEST WEST NORTH
  • loop the movement, parsing one direction token at a time.