- Remove electron requirement.
- Add ESlint
- Separate renderer logic from data and models.
- Switch plugins to being ES modules.
- Re-do plugin system to remove 'priority' and rely on dependencies directly.
- Get AI players to move units.
- Convert all raw data files to JS classes.
- Re-do world generation.
- Remove reliance on augmenting Engine directly.
- Work on city build list.
- Combat.
- When building World, ensure there are enough starting squares.
- Add user-definable rulesets.
- Non-human players.
- Write tests.
- Fix map tiling.
- City Improvements/Wonders.
- Control city improvement costs via
Rule
s. - Control unit base stats via
Rule
s. - Fix AI bug with NavalTransports.
- More civilizations.
- Reorganise all existing plugins to extract self-contained entities (perhaps so they they are testable?)
- Fix AI bug where they always trend north-east. Maybe this is just masked - but seems less problematic.
- Add science.
- Add 'trade' tile yield.
- Break all plugins into
core
(parent classes/interfaces/rules) andbase
(implementations). - Change terrain specials to be augments instead of specific terrain types - this would allow rivers as they are in Civ 2+
- Governments.
- Replace all unit stats (and maybe costs etc) with
Yield
s - Add trade rates to control how much of a city's yield is tax/science/etc
- Convert science to trade rate
- Add tax trade rate
- Look at the benefit of creating a single entity registry with helper methods like
.is(...)
. -const [entity] = Registry.getBy(...)
is sufficient for this. - Obseletion mechanism (primarily units, but potentially anything...) - Covered by research with an extra criteria check.
- Add
Modifier
s toYield
s with either a priority field, or aQueue
of some sort. - Add Science and Gold multipliers (Library, Marketplace, etc)
- Add maintenance costs
- Re-do tile yields to calculate
Gold
/Science
immediately, rather than via events. - Add luxuries trade rate
- City Happiness.
- Convert terrain improvements
availableOn
intoRule
s. - Write more tests.
- Replace
Tile#improvements
withRegistry
. - Move
buildProgress
and the entirebuild
mechanism into a value object instead of a property. - Replace the rest of the
.improvements
withRegistry
pattern - Add ability to spend gold on city build items.
- Move
foodStorage
into a value object instead of a property. - Add pathing mechanisms (A*?)
- Add version checking to plugin system. - negated when moving to using npm modules.
- Fix bug where AI wasn't attacking other units
- Change the way events and rules are triggered to make testing feasible. This could be main script in package.json.
- Fix bug when AI is using
NavalTransport
- unit testing the AI might be a good way to do this... (Game hangs) - Set pathing data for target in SimpleAIPlayer.
- Convert
DelayedAction
to useRule
s. - Fix bug where units will continually fire
NoOrders
when on the coast - this seems to be resolved as part of the fixes applied to SimpleAIPlayer during testing/pathing addition. - Handle
Unit#transport
somehow. Perhaps this needs to be aRegistry
to avoid adding it toUnit
? - Implement
Priority
forRule
s to aid processingTrade
. - Add wonders.
- Add wealth. - not civ 1 - delay
- Add build-queue. - not civ 1 - delay
- Break
base-civilizations
into individual plugins. - Break
base-unit
into individual plugins. - Break
base-city-improvements
into individual plugins. - Fix bug where
SimpleAIPlayer
can't perform an action for a unit. - Convert
Notificaiton#when
to useRule
s. - Add
Zulu
,Egyptian
,Chinese
,Mongol
civilizations for Civ1 compatibility. - Break
base-wonder
into individual plugins. - Add
Sleep
action definitionRule
s. - Add
Pillage
unit action. - Add goody huts
- Ensure Engine is passed to plugins in read-only mode, but expose events system.
- Convert to TypeScript? - There's no run-time system to handle this at the moment, look into again later... Alongside the "compiler"
- Add
PlayerMap
classes that only see what the Player has discovered and track the state (improvements, cities, etc) - perhaps this is a concern of aClient
? - Consider
PlayerActionRegistry
returning aPlayerAction
entity that can be processed or dismissed. Sub-class withMandatory
... andOptional
...PlayerAction
s which can be optionally skipped in thePlayer#takeTurn
loop. - UsedRule
s but, implemented. - Abstract World class to allow implementation of hexes rather than squares and other world generators.
- Renderer interface - I imagine this to be a separate application that has this repo as a dependency. - Look at NodeGUI - need a canvas or something similar to be implemented. Or wait for Electron to adopt Node 14...
- Break the engine into it's own
core-engine
repo. - Input management (keyboard/mouse) - tied to renderer?
- i18n/l10n.
- Remote network players.
- Even more civilizations.
- Difficulties.
- Add optional dependencies to plugins.
- Human players - this is likely dependent on a renderer, although perhaps make it playable within a TTY?
- Write more tests.
- Feature parity with Civilization.
- Add more units.
- Add more city improvements.
- Add Barbarians.
- Look at modular AI info for plugin Unit providing data/weightings on what to do with the unit?
- Add starter technologies - need to read why Civ allocates these and set up
Rules
withinbase-science
. - Consider building a 'compiler' that can build a static version of the game including all rules that would run better and consider the current state as 'dev' mode.
- Add diplomacy
- Add leader traits
- Modify AI to adjust trade rates
- Add
load
andsave
methods toWorld
- need to consider the available plugins when saving/loading - mandating the exact plugins seems too much, but need to consider this before working on this functionality. - Replace
Tile#features
withRegistry
pattern - not sure on how useful this is, since it'll necessitate a refactor inWorld#build
/Generator
. - Add ability to sell
CityImprovement
s. - Add
Caravan
andDiplomat
and correctly exclude these fromcity:cost
s. (Diplomatic
type ofUnit
?) - (Eventually) Convert all plugins to individual packages on npm so that plugin packs can be provided that combine a bunch of plugins to match the functionality of a desired Civ game.
- Add AI routine to avoid civil disorder.
- Add benefits to 'we love the leader' day.
- Break
SimpleAIPlayer
down into smaller routines. - Investigate why units STILL trend north-east.
- Make
Player#civilization
use methods instead of bare properties. - Make
Civilization
and leader choice a bit better - addLeader
class and usePlayer#setCivilization
or something. - Add rules to wake enemy units that are
Sleep
ing when moving within their visible range. - Add effects for
GreatWall
. - Add revolution delay in changing governments.
- Add effects for
Pyramids
. - Add more variance in the worlds that are generated again - no islands appear to be generated no matter the settings used.
- Fix any tests that rely on global instances.
- Break
base-terrain
into individualbase-terrain-x
plugins and incorporatemovementCost
s. - Add
Negotiation
tocore-diplomacy
. - Add more
Interaction
s and use this data to inform AI decisions on trusting another player. - Convert
activate
,disband
, etc from methods toAction
s forUnit
s. - Add
Corruption
yield. - Fix units having
Fortified
applied loads of times. - Add
GoTo
action forUnit
s. - Add
provider
toYield
s.
This repository has been archived by the owner on Apr 13, 2022. It is now read-only.