Research Frames

From Thousand Parsec Wiki
Jump to: navigation, search

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).


Technology Description

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

Technology Id List

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)

Only technologies where the player has all the dependencies (and none of the conflicts) will appear in the researchableList. The player can only choose technology ids from the researchableList. Approximate turns remaining (before sending ResearchSet) can be found from remainingPoints / pointsAvailable (or assignedPoints).

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.

Game Examples


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

There would be a technology for each mark of these areas.

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 [1]), 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)

Open issues

How to find what tech the player has learnt

(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)
Personal tools