RELEASE #.#.# [(SIGNIFICANCE)]

ACCOMPLISHMENT1
[... ACCOMPLISHMENTS]

Release 0.0.3 (pre-alpha)

*implement damage
*implement "fly to point/unit"
*clean up order DTD and take correct action when order received
*local announcement

Release 0.0.4 (pre-alpha)

*validate orders using order DTD
*implement production queues
*Rewrite the bits in hyades-engine that consume the universe definition so adding new features is easier

Release 0.1.0 (alpha)

*Playable game, with battles, colonization, building, mining
*dev announcement

Release 0.2.0 (beta)

*Playable game, battles, research, intelligence, colonization, building, mining
*Celestia fork that generates order files

Release 0.2.5 (beta)

*Engine options, building options, technology options

Release 0.3.0 (net)

*Playable game, socket code to communicate command files over the net
*Implemented AI-type functions for scalability, meaningful battles
*server-side ETA for action completion

Release 1.0.0 (gold)

*Fun playable game, feature-complete
*Usable 3d interface
*client-side ETA for action completion
*user announcement

Future Releases:
Add client-side predictions for action outcomes
Game Balance issues
Add new technology, unit attributes
Address limitations in the game engine


ELEMENTS OF THE GAME

Engine Features:

realistic physics
gravity
no ftl travel
relativistic calculation required
acceleration
uses reals for everything--tech, pop, scanning, weps
not event-driven. real physics simulation
no races
server side checking of everything-untrusted clients, trusted host
Random events--novas, planetside disasters, old civilizations, random advancement in tech
DON"T KNOWrelativistic acceleration is the first time derivative of gamma times the velocity

read in constants and parameters from a file
script that creates the file
server program that takes config file as arg, runs continuously
guess there needs to be some kind of 


tech:

global_tech
each tech has a function--two parts: fixed cost and marginal cost (some fixed costs are zero, like efficiency-man-year)
research can change the function of a unit_tech
Ex: efficiency-man-year - how much it costs to increase the efficiency the pop on any unit
Ex: how much it costs to add each possible attr to a unit and how much it costs to increase it

unit_tech
each tech has a function
function inputs a value, outputs a cost in elements and man-years
Ex: unit_efficiency-man-year - how efficient the pop on the unit are at working


Node:
fundamental object
every object is a node: unit, planet, star
node is a kira concept
attach some goo to it

dyn
every object is a dyn

star
stars are stars -- can be gutted completely /* comment out the definitions */
may eventually add a little bit about magnitude to relate strictly to radiated energy, maybe something about going gas giant/nova
poss. also radius for something about inflicted damage to units

unit
planets are units
units are units
must have concept of unowned unit
each unit has each unit_tech set to a particular value

Unit Variables
real cargo_max // units of mass [0]
unit_list cargo_curr // list of units in cargo; includes reaction mass, fuel, free elements, ammo
real pop_max // number of people possible to fit
pop_list pop_curr
real thrust // thrust, units of force [0]
engine_list engines // list of all engines
real powerplant // units of power [0]
bool orbital // in orbit? [0]
real mining // units of mass/ time [0]
real gain // decibels, scanning [0]
real dampening // decibels, cloaking [0]
weapon_list weapons // list of equipped weapons
periodic_table raw_elements // list of all trapped elements
periodic_table worked_elements // list of all elements processed and used in manufacture
real armor // energy that can be absorbed before failure
group_list groups // list of groups that the unit belongs to

weapon
real damage(real distance) // energy that it inflicts on a hit as a function of distance from thingy
weapon_type name // kind of weapon
bool explosive // if it explodes, the mass scatters and is useless and non-recoverable

element
real amu // mass per unit element
group_list groups // list of all groups the element belong to
// poss. gibbs free energy or some other measure of difficulty of extraction

event
scheduled in time
each global timestep, main loop goes through event_list and processes any events it sees in there
all commands go in the event list
all events stay in the list until all their criteria are met

Something for leaked information propagation

Are some elements more difficult to get than others?
Well, what are the requirements?
Man-years, Mining rate, concentration, total supply

Concentration is simply element.mass/raw_elements.mass*100%
Be kind of annoying to decide on mining rate values for every damn element
might as well make mining rate per element, and just hard code it to a constant
best to make it just calculated per planet

How about growth?

okay, start with 1 billion people
what prevents a world from becoming absurdly large?
it must consume lots of resources to keep the population up
say, percentage upkeep that is total function of population (not man-years! efficiency helps)
starts high, reaches a low somewhere, goes up again
upkeep is in terms of man-years, elements
prevents little one man colonies--it's simply too difficult for one man to stay alive by himself
some elements are consumed by people. call them organics.
if upkeep is not paid, negative impact on growth rate
what else?
mass... too big, it's crushing to live there
too small, there's not enough room--goes to zero, let's say, not negative
so goodness as a function of mass goes both ways, has a positive and a negative contribution
what else?
proximity to sun
too close bad, too far bad
goodness as proximity to sun goes both ways, too
it's not really proximity, but radiation
could even say presence of radioactive elements is bad, but what the fuck
don't bother with birth v. death. just abstract away into positive or negative growth
use exponential eq. for continuous compounding for growth
planet growth value is the compound rate at that instant
will change with respect to time

total planet goodness
function of population, growth value, available elements, elements in cargo, 

Tech improvements
starting value
ending value
first derivative
second derivative

no binding diplomacy
public/private treaties--means treaty outcome can be broadcast automatically, including what was promised
each part of a treaty can have a separate deadline
things can that be promised
	unit_group will not die/will not be damaged beyond X%
	unit_group will not attack unit_group
	poss. unit_group will not enter space... how many points define a space, and what about overspecified spaces?
	element_group will be transferred
	unit_group will be transferred
	tech transfer of some kind
	pop transfer will occur
each treaty causes an action to be scheduled in the do-er's event list and a check to be scheduled in both event lists
should be able to support >3 players per treaty

all soft caps, no hard caps
explosives-chemical, nuclear, lasing, rock (big and small), powered or unpowered
three dimensions
clustering
no limit on buildable things, just require resources
scales exponentially --soft cap
mass on everything

Year 10000 GE
every unit has an associated wave front no...
star magnitude directly affects the available solar energy...


Economy:
periodic table of elements are resources--abstracted into things like organics, exotic, semiconductor, structural, explosive, magnetic, radioactive?, whatever
other basic resource unit is man-years. non-negotiable, non-transferable
one man provides a fraction of a man year initially
each planet can put resources into efficiency, to increase the number of man-years each man provides
pop is transferable--can be gifted, conquered, exchanged
combat occurs at rate equal to that of efficiency
surrender % is set at unit level
pop has birth rate... something about small things does not cause death
birth rate is related to mass.. presumably larger mass objects are bigger, provide more room
population consumes resources (yearly elements, plus fraction of man-years available)

Mines:
Torpedoes that just sit

combat:
damage requires resources to fix
every shot is just an unmanned unit--rock has mass, no thrust; laser has no mass, no thrust; torp has mass, thrust, explosive; fighter is a ship within a ship;
poss. requires knowledge of KE or something?
requires collision detection--does kira provide?
definitely energy
translate momentum to KE
translate light to KE
explosives have some KE equiv
everything in terms of KE
preemptive dodging is required, since you can't know when they fired until you get hit
fusion explosives require a starter
fission requires a starter
chemical explosives and antimatter explosives do not
If pop from two different civilizations touch, they fight according to their friendliness and efficiency-man-year

Events and Reactions:
complex scripting/macroing behavior initiated on in-game events
user-defined events
notes-spatial or temporal or event-driven
user-defined territories
events based on specific unit, territory, player, 
normal in-game notification exactly the same as this--simply default set of events plus reactions

Scanning:
limited to light speed!--MAYBE, if can schedule events--not physically accurate, possibly do-able anyway
all things emit signal
signal strength falls as square of distance
gravity signal, em signal
can increase amount of signal shielding on anything--never get 100% asymptotic
automatically records max + most recent viewed value for every possible attribute--acceleration, mass, pop, weapons
can increase amount of signal detection on em, not gravity
em plus gravity
gain and dampening
can't hide mass

Units:
all built units are equal, first class primitives
unit
orbiting unit
accelerating unit
unit with weapons
unit can mine
unit can store cargo--elements, units (including weapons)
unit can store pop
unit can have a power plant-- pop, sensors, some weapons, some engines, mining, fixing requires power plant
unit can have an engine    -- some engines require power plants to work
shielding consists of point lasers, decoy thingys, anti-missle thingys, fighters
default plans for all player-owned primitives
any unit can be converted into any other, subject to fixed costs for adding removing primitive abilities
several different kinds of engines: hydrogen for fusion (could use ramscoop), convert matter to energy directly, fission, solar, laser thingy, ion engine, 

Powerplant choices:
antimatter
fusion
solar 

Engine choices:



laser damage is decreasing as square of distance... increasing laser technology leads to smaller lasers with higher energy
poss. crew--yields fixing rate, basically. maybe just combine with pop storage. unmanned craft can fit no pop. good.
traveling distance means consumption of resources--damage, in other words.
attacks also yield damage
going really close to suns should yield some damage
have some sort of 
any unit with pop can build anything, given access to enough resources
fixing things is just building them back up again
units can explode--different types of detonation?

Tech:
tech tree--should there be a tree for research
new technology write-able on fly?--maybe just easily-drop in-able.
Each primitive tech has a starting value--investment yields incremental improvement--soft cap, exponentially rising costs
multi-tasking. have 100% of man-years available. can devote any amount to research. of amount devoted to research, can devote any amount to any research goal. amount devoted to research is per unit_group basis

laser cost
laser efficiency - energy out/ energy in
laser mass/energy
explosive cost - fission
explosive efficiency - fission
explosive cost - fusion
explosive efficiency - fusion



Battle:
each plan has a number of objectives
Live
Kill
Defend allies
stuff
and you pick the order so that if you say live above everything else, the computer will do its utmost to live, whether that means engaging or fleeing


Questions:
how am i gonna do scanning?
some options:
ignore speed of light-ish
schedule events
send photons to every bloody unit in the game
have some sort of analytical equation to calculate

how am I gonna handle special relativity?
just apply the damn equation.
keep track of the newtonian velocity, but use the inertial velocity to determine position

/* 
FIXME
shhh. this is not physically accurate. in particular, the time scale ain't right and I don't think this relation holds
into three dimensions or with variable acceleration. if you won't tell, i won't. 

even better, if you want to make these calculations truly relativistic, be my guest.
keep in mind, the acceleration due to engine thrust is in the traveler's frame, the acceleration due to gravitation is
variable, not constant, and the time step of integration is in the inertial frame. good luck. 
if you want to make these calculations a *better* approximation of relativity, that would be good, too.

as this implementation stands, non-relativistic speeds are unaffected by this approximation, c is the speed limit, and it gets asymptotically more difficult to get closer and closer to the speed of light. so maybe
your position won't be completely right when you're moving .5c. who's checking? 
*/