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? */