This page documents a proposal for Research frames for TP04.
Technologies that can be researched form an acyclic directed graph of dependencies. Technologies can have other technologies they conflict with so that they can not be chosen. The player is given a number of "points" and distributes them as the player sees fit.
This model should be able to support all methods used for research by controlling the dependence and points.
Per-player, technologies can be known or not know (IE, the player knows the technology exists), and can be learnt or not learnt (IE, the player has researched it, or was given it).
In a pure discrete tech tree where only one technology at a time can be researched (like Civilisation), there is only one point to distribute.
In a continuous-area percentage given research system 10 or 100 points can be given. Each area is a long string of dependent technologies, or just one technology using visibility to control what the player has.
Research as a resource rulesets can have a point for each research centre.
The ruleset can set however long it wants for a technology to be researched for. It does not directly depend on the points allocated (though the ruleset can use the points allocated to determine how long it should take).
All fields are read only.
- techId - uint32
- name - str
- description - str
- prerequisites - List uint32
- conflicts - List uint32
- provides - List GPR (General Purpose Reference)
- otherBenefits - str
- serial - uint64 serial number
A pair of getIdList and IdList frames will be used to get known technologies.
Research frames are a pair of Get and Set, both returning a Research frame. A ResearchSet frame has the same content as a Research frame.
- pointsAvailable - uint32 (RO)
- researchableList - List (RO)
- techId - uint32 (RO)
- totalPoints - uint32 (RO)
- remainingPoints - uint32 (RO)
- toResearchList - List
- techId - uint32
- assignedPoints - uint32
- turns - uint32 (RO)
remainingPoints could be -1 for unknown. In that case, totalPoints is the total points researched so far.
This is an example flow of frames to set the research.
Client Server GetTechnologyTypes -> <- TechnologyTypes GetTechnologyDesc -> <- Sequence <- TechnologyDesc <- TechnologyDesc... GetResearch -> <- Research (choose technology to research) SetResearch -> <- Research
Note, a client might do GetResearch first then do GetTechnologyDesc for the available techIds that could be researched.
4 Fields to research:
- Industry: Reaching certain levels gives bonus RP (production points)
- Navigation: Can travel further (So max range from 4,5,6 or 8 hexes).
- Ship: Can build higher mark ships
- Something else I can't Remember
Need a description of rfts research to comment further.
Technology controlled through 6 fields. Technologies are unlocked if you have appropriate race flags and the appropriate level in each field.
Each technology areas has 26 levels (see http://wiki.gible.net/index.php/Guts_of_research_costs), the cost would be there and the dependence between higher and lower levels (including across technology areas). Visibility control can be used to hide what new components, etc will be available to the player. Available points could be based on resources available, or fixed at 100 (as in percent)
(and also "How to find what tech other players have learnt")
Possible solutions:
- provide a similar getIdList/IdList pair for asking for a player's learnt tech
- how do yo get other players? Break getIdList/IdList?
- id list in Player Frame
- visibility control of Player (later separation of race/fraction/government/etc?)
- flag in technology frame for player's own
- no way to get other player's
- list of players the player knows have learnt this technology in the technology description
- Double depth visibility (see tech/see who has tech)