-
Notifications
You must be signed in to change notification settings - Fork 4
Helios Game Design Document
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%
- replace hard-coded arrays of terrain data with a terrain_type struct
- read terrain data from json configuration file
- backport this to Atlas
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.
- read the initial unit size and starting capital from the json configuration file.
- backport this change to Atlas.
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.
- 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.
Problem: Ships take a long time to build.
Solution: Reduce ship costs by 50%
- replace hard-coded arrays for ship data with a struct ship_type (see Eressea).
- configure ship types (name, capacity, and cost) in json.
Problem: Some factions started on small islands and had no contact with the rest of the world.
Solution: Everyone starts on the same continent.
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.
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.
- Make ALH compile
- Incorporate any changes that Atlas players have made.
- TBD.
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 :-(
- 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.
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.
- 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.
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).
- 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.