PROJECT IDEAS This list is a collection of ideas about what to change in Xconq. In general, these are new features, rather than bug fixes. Everything is grouped into one of several categories, although the grouping is not precise, and to find out if some idea has been already thought of, you should search this using appropriate keywords. --Kernel K14. Add area illumination ability so that burning wrecks and such can illuminate immediate area at night. Do by adding bit vector for lighting or coverage-like array. Define property u_lighting_radius. Give units a night vision radius smaller than normal vision radius. To compute, scan normal vision radius, but skip over unlit cells and view illuminated cells. Add a uu_night_see_chance. Make AI aware of light/dark effects. To do flare illumination, create illumination at alt X, descending to alt Y, computing different illumination as flare descends. Use for night variant in panzer. K16. Define u_see_hp to be able to see hp of all units, including enemies. Default to false but enable in standard game. Only work for enemies under observation, need glimpse objects recording hp to make work for units not covered. Need ability to select enemy units, update curunit tests to handle properly. K32. Add a "facing" bitmask that indicates the directions that a unit is "facing", or can operate in, add effects of facing vs non-facing. Come up with a display for this. (Can use pairs of 1-dir units to make bridges.) Add commands to turn mobile units, draw arrows/heavy lines around unit icon to indicate facing. Facing affects visibility including hallucination, movement, combat, but not zoc? Define acp-to-turn, -1 for prohibited, 0 for zero cost. Use gettysburg, panzer. K37. To decide about control, see if any units cannot always be controlled directly, then for those compute the max radius that controlling units can be in. If > 1, should define a layer, otherwise check directly when need to know. Uncontrolled units may be viewed, but all commands are disabled (or: commands work, but only n% that they will be executed instead of something random). Use in ww2-bn, maybe voyages. K38. Add a commander property to units, control of units can recurse through commanders, so unit not under direct control can be under control if commander is in control range. Add doctrine to keep unit within x distance of commander. Use in ww2-bn. K39. Some unit types in some games should be unwilling to break a treaty. DoW is agreement by single player doing the declaration, terms are to treat side as enemy (doctrine), and to hit other side (how often?), could demand a surrender of some sort. DoW must be public. Up to other sides how to respond. Peace treaty includes terms to nullify DoW. DoW may not be possible or meaningful in some games... In general, terms should be able to include refs to other agreements. DoW can always be rescinded by player alone, make it have morale consequences? Use in all grand strategic games. K43. DEF_UPROP_I("storage", u_storage, "space for materials shared by all types", storage, 0, 0, 9999) DEF_UM_TABLE("material-size-in-unit", um_size, "how much space one unit of a material requires in a unit", umsize, constumsize, 0, 1, 9999) @deffn UnitTypeProperty @code{storage} n This property is a unit's generic space for materials of any type. Defaults to @code{0}. @end deffn @deffn Table @code{material-size-in-unit} u m -> n This table is the amount by which the given material counts against the unit's storage space. Defaults to @code{1}. @end deffn (Would use in logistics-heavy games for cargo units, no such games tho.) K47. Terrain types should have a precedence determining which conn/border types override each other's effects (right now any conn overrides any border). Should be a property of ttypes. Apply only to conns/bords, numerical values unimportant, allow anything > 0. Use for interdicted bridges - damage to road with precedence over river changes type to damaged road that has less precedence. Also use precedence for drawing order - iterate from least to greatest precedence, using precomputed array. Use in panzer, ww2-bn. K58. Be able to expand country borders by building or occupying outside original country. ut_add_people_chance n% ut_add_people_adj_chance n% Use in enhanced standard game. K63. Should use elevation diffs to decide about sloping terrain (a new subtype-x). Add to basic percentile algorithm. Use in panzer. K66. Define parms for variability of initial materials using variation on fractal percentile synth method. No game to use? K67. Add flooding rules for when terrain changed around a liquid type. Non-liquid border could be a dike. Panzer & other tactical games. K68. Add density of occupants of indep units already placed. Specify for both units that have to be occs and others that don't. K71. Add recorded events that get played when their scheduled time arrives, so that a city could revolt or disappear at a preset time. Playing scheduled events should happen after acp/mp calc, but before players actually get to move. K72. Add synth method for secret scorekeeper goals, use to build panzer scenarios. K73. Use password to match up players when restoring into a different set of displays. If no password, then will just accept a different assignment, perhaps warn for cmdline setup, flag in dialog boxes. K78. Fix up material transfer action so that transfer is free or cheap in most games, but can be made expensive. For logistics-heavy games, none such currently. K80. Define action "influence" that is like proposed "charm" but more general. K81. Allow the construction of bases even when it would be necessary to bring all units stacked in the cell inside the incomplete base, in order to make sufficient room. Entries should be automatic and free. Do by scanning all units stacked in cell, compute effect of each unit entering, stop when to-be-constructed unit would be full or when sufficient room in cell. Otherwise report "delay in starting construction". K88. Generalized notion of fire interdiction would be useful, could subsume effects of jammers and suchlike. K89. To do non-integral cell/turn speeds, available acp should translate to varying moves/turn. Improves movement of damaged units in all games. K90. Define material-theft-per-contact(u1, u2, r) -> n in combat, material-loss-per-hit(u1, u2, r) -> n which is material completely lost. Some could be "resorbed" by terrain? Use for population loss in cities being attacked, etc. K92. A mobile unit should be considered surrounded or cornered if adjacent cells are either impassable or occupied by unfriendlies. Also look for impassable borders and passable connections. Use in gettysburg. K93. Occupants of captured units might get to stay and not change side if friendliness-to-enter allows it (?). K94. Detonation's effects should depend on altitude of detonating unit - compute the "actual" 3d distance. Use for nuclear blasts in modern operational games (none yet defined). K95. Define effects of altitude differences on all unit interactions. LOS: (already works? but still need cloud effect also) combat: altitude-to-fight constrains alt diffs for combat - if user orders combat, and must go lower to fight, do automatically? Or alt diff affects likelihood of success. supply: alt-diff-to-transfer-material. construction: can floating city build ground units at any alt? Add to doctrine to specify preferred altitude range. Only add all this when have a game that needs it - modern tactical, for helicopters, modern strategic, for satellites and missiles. K96. Damage to multi-part units could be done by detaching wrecked-type instead of damaging all parts equally. Do only if wrecked-type has appropriate sizes. Only applies if wrecked-type has equal num parts to original type. K98. If a side wins a battle, then side's units involved should gain affinity for side, lose fear of other side. On losing side, units lose affinity for own side and increase fear of winning side. Nonparticipants also affected, but less so. Affinity increases by positive acts, fear increases by negative acts. Betrayals should be detectable, have large effect. Need some implicit agreements about defense of units on a side, that players should not violate. K100. Add a "coordination" action that adds other units to a unit's attack, with multiplied effect. Attack action has to look at each coordinating unit, add effect if able to do so, and take away acp for coordinating units also. K101. For variable-commitment combat, attacker effectively sets m% commitment for self, desires n% from defender. Defender then chooses between n1-n2% commitment, where limits set by unit types and m%. Possible reactions also limited by commitment - defender could disengage at <10% commitment, say, is otherwise stuck in the battle. Reactions are counterattack, surrender, withdraw, do nothing special, these are (mostly) indep of damage. Commitments default to zero. If can be nonzero, create battle objects. @deffn Table @code{attack-commit-min??} u1 u2 -> n% @end deffn @deffn Table @code{defend-commit-min??} u1 u2 -> n% These tables are the minimum limits on the initial commitment to a battle. Defaults to @code{0}. @end deffn @deffn Table @code{attack-commit-max??} u1 u2 -> n% @end deffn @deffn Table @code{defend-commit-max??} u1 u2 -> n% These tables are the maximum limits on the initial commitment to a battle. Defaults to @code{100}. @end deffn @deffn Table @code{attack-commit-up-max??} u1 u2 -> n% @end deffn @deffn Table @code{defend-commit-up-max??} u1 u2 -> n% @end deffn @deffn Table @code{attack-commit-down-max??} u1 u2 -> n% @end deffn @deffn Table @code{defend-commit-down-max??} u1 u2 -> n% These tables are the maximum limits on the change to commitment to a battle. Defaults to @code{100}. @end deffn Once battle object exists, units are committed to battle-fighting each turn, all acp gets used up. Space acp consumption over turn, allows multiple attempts to withdraw. But besieged town might still be able to use acp to build units... use commitment level to decide acp consumption. Player decision to adjust desired commitment level, unit attempts to adjust to match. If no player input, then doctrine decides. Add command to add a unit to existing battle. Allow units to engage in more than one battle at a time, preexisting commitment determines how many. DEF_KWD("battle", K_BATTLE) case K_BATTLE: read_warning("battle objects not yet supported"); break; @node Battle Forms, Types in General, History Forms, Reference Manual @section Battle Forms Battles always have exactly two ``sides'', referred to as the attacker-list or A-list and the defender-list or D-list, so as not to confuse them with sides in the game. @deffn Form @code{battle} a-list d-list@dots{} @end deffn Each list has the form @example (( ) ...) @end example (in Combat Actions) @c Combat may last longer than a single action; @c it is then called a @dfn{battle} and divided into @dfn{rounds}. @c The battle exists until one participant has a commitment of zero. @c Units in a battle need not attack, and no damage will occur if none do so, @c but they cannot move away until no longer committed. @node Multi-Round Battles, Capture, Unit Combat, Unit Combat @subsection Multi-Round Battles @c By default, combat actions are basically raids; @c one strike and it's all over. @c This of course is highly unrealistic, and leads players to @c engage in combat far more casually than is realistic. @c @c You make combat more involving by defining commitments to battles. @c Basically, units attack by raising their commitment from zero up to some @c values, and remain in combat until they die, are captured, or withdraw @c by reducing their commitment to zero again. At the start of each round, @c each unit that is participating has the choice of raising or lowering its @c commitment to the battle, within bounds that you define. @c @c Note that units in battle don't have to attack, but that they are @c prevented from doing other things. This can be useful not only @c for field battles, but sieges (cities have to deal with besiegers), @c and wrestling matches. Use in division-level games. K103. If defender counterattacks, then might exchange attacker/defender in battle, so now defender can decide commit/withdraw. K107. cxp affects both attack and defense abilities, should define uu_cxp_{attack,defend}_effect. K111. @deffn Table @code{cxp-hit-plus-max} u1 u2 -> n% This table is the maximum hit modifier for attacker unit. Defaults to @code{0}. @end deffn @deffn Table @code{cxp-hit-minus-max} u1 u2 -> n% This table is the maximum hit modifier for defender unit. Defaults to @code{0}. The actual hit probability equals the basic hit probability, plus @code{experience-hit-plus-max} times fractional experience (i.e. experience divided by maximum experience) of the attacking unit, minus @code{experience-hit-minus-max} times fractional experience of the defending unit. @end deffn Use in ww2 divisional games. K112. DEF_VAR_I("actions-are-buffered", g_actions_buffered, set_g_actions_buffered, "", gactionsbuffered, 0, 0, 1) @deffn GlobalVariable @code{actions-are-buffered} t/f This variable is @code{true} if all the units of the same priority must specify their actions first and then execute them all at once, rather than deciding and executing before the next unit gets to act. Defaults to @code{false}. @end deffn K115. DEF_UU_TABLE("attack-elevation-effect", uu_attack_elev_effect, "", uuattackeleveff, constuuattackeleveff, 0, 100, 9999) @deffn Table @code{attack-elevation-effect} n Defaults to @code{100}. @end deffn Use in gettysburg, panzer. K117. DEF_UU_TABLE("ambush-chance", uu_ambush, "chance that a unit will be able to attack by surprise", uuambush, constuuambush, 0, 0, 100) @deffn Table @code{ambush-chance} u1 u2 -> n% If @var{u1} attempts to move into a cell containing @var{u2}, then a) if can't co-occupy, this table is the chance that @var{u1} gets a chance to attack at improved odds(?), or if b) if can co-occupy, then @var{u1} will enter the cell, then be attacked as in a). The ambusher's plan can flag whether the unit will take ambush opportunities or not. @end deffn Use in panzer. K119. @deffn Table @code{ablation} u1 u2 -> n% This table is the amount of the hit that gets passed through to the transport's occupants. Defaults to @code{100}. @end deffn @deffn Table @code{stack-ablation} u1 u2 -> n% @end deffn K120. Add a way for elevation to screen out detonation effects. K124. Add a backdrop probability that a side or group of units can change to an active side all at once, reflects changing politics, requires maintenance of reserves, etc. Similar to revolt/surrender. K126. Add ut_people_supply that is amount of supply gotten by unit if people in cell are on the same side. Need supply models? K130. Siege surrender chance should be distinct from normal surrender chance. K131. Games should be able to define what size groups can be surrounded, by radius or number of units. Default to 1 cell areas. K132. [need to identify motives for material demand, if type not needed for actual survival - dyes needed for "art" for example - might vary between sides/unit types?] [would need to define generic elasticity of demands, also the profit-seekingness of a population (vs conservatism, etc)] [need some notion of credit too?] [units can effectively forage at some distance, distinguish foraging from actual production] [price should go up as material is transported further and further, and across varying difficulty of terrain...] [note that as sides, players can't force cell economy but can encourage it] [perhaps allow a side to fix a price artificially, let everything else readjust around it?] Sides can specify their trading relationship with other sides, by specifying the ratio of tariff to supply [etc]. [trade relationship is indep of general trust/friendliness] [some type of agreements might be intrinsically enforceable, such as exchanges between units that cannot attack or capture each other] [exchange of material needs to relax fullness rules or be done as a sort of prim, else might not be able to trade when full] K133. Do supply lines, display unit's supplier and maybe supply route. (finish Perttu code?) K136. Weather needs pressure, humidity, calculates new values of these and also has effects on visibility at multiple levels of atmosphere. Need to identify effect of each terrain type (and elevation) on each of these, also specify the rate at which changes occur. Effects on supply. Effect on vision, sensing in general. Each utype has preferred weather, gradual falloff in effectiveness. Add a generic "violence" value that summarizes wind/storm strength, relate to unit behavior. Impl via weather phenomena - overcast/clouds, rain/snow, storms/wind, temperature, humidity (compute value of phenomena, then compute phenomena's effect on units). Attrition increased by storms, also chance of accidents (for each accident type), changes to speed and acp. Could make some types of terrain temporarily impassable. Display should show fronts, major storms. K139. The primary effect of clouds is to make things harder to see, can affect both units on ground (such as for fog) and in the air. Use interpolation list to related density to amount of effect. @deffn UnitTypeProperty @code{vision-cloud-effect} xxx @end deffn Use in ww2-bn, panzer. K141. Be able to play back a recorded sequence of weather during a game. K144. Add a scorekeeper that looks at side view to decide whether player has discovered something that is to be searched for. Should be able to require finding a lost city, etc. Would use in voyages scenario. K145. Add option to scorekeeper to run on success/failure of an action matching given parameters, plus option to run on occurrence of a specified events, otherwise scorekeeper runs at either beginning or end of turn. Matching includes side and unit. K152. @deffn UnitTypeProperty @code{spot-movement} t/f If this property is @code{true}, then the unit's chance to be seen by other sides will be tested each time the unit moves. @code{spot-action} implies @code{spot-movement}. Defaults to @code{true}. @end deffn Would use for subs and other stealth units in modern games. K154. @deffn Table @code{see-combat-chance} u1 u2 -> n% This table is the basic chance to see a unit of type @var{u1} when in combat with a unit of type @var{u2}. The location of @var{u1} must be covered by some unit on the viewing side. This is evaluated for each combat action within a turn. Defaults to @code{100}. @end deffn Use when subs attack surface ships. K157. Add an ability to store and act on dated future plans and goals. Need to be able to evaluate preconditions for plan, so can do only if makes sense. Use to emulate TOAW, K159. Attack tasks should prefer to go after damageable units. K161. Defense plan should identify what is defended, and what are the threats. If no threats, unit just tries to stay healthy. Defender's search for threats should cover a radius computed from defender's and ward's positions, areas covered by view, speed of threats (need to see bombers *before* they reach cities, can attack and retire before anybody can react). Also define a perimeter to anticipate threat - if unit seen within perimeter, move between without trying to attack. Threats can be recognized directly, or gotten from AI's list of threats. A unit is a threat if 1) it can capture or damage the ward 2) it can cut the ward off from supply or other defenders 3) it can hurt the defender To respond to a chosen threat, can 1) attack the threat, 2) interpose, 3) move the ward, either on own or by carrying. K163. "Intercept/defensive" plan directs units to patrol in an area, attacks any enemy unit (doctrine defines "enemy") that is of a type that can be attacked/harassed/blocked (ignore types that we can't do anything about!) Only some kinds of defensive units are interceptors, others are blockers or kept in reserve. Blockers interpose rather than attack enemies, while reserves avoid contact until plan is changed. Defn of "reserve" partly depends on attacker, so fighters intercept bombers but ignore battleships. Do as explicit decision in general defense plan. K164. Re-evaluate return if transport moving away too fast. Calc distance, record as task parameter, check on next execution of task. Add AI hook to allow for making transport move slower or rendezvous with unit needing supplies. Could have a "home" unit that is preferred if in range, such as fighters assigned to carriers. Don't return to transports that don't have any fuel, unless there is no other choice; check on each task execution. Special-case grounding of aircraft if no supply in a base vs starvation of troops if no food in a base. K165. Exploration plan should set recon vs invasion type, use to decide about visibility while exploring. Recon should attempt to gather knowledge without being seen. K167. Define a plan type that tracks/shadows units while staying out of sight as much as possible. Would have to keep unit within view range but outside of its view range (and any other coverage, should write something to see whether a given cell might be visible to enemy), but may have to get closer to avoid losing trackee. If unit being tracked seems about to do some damage, engage instead of shadowing. May sometimes want to move to block or slow down trackee's escape. K171. What about a task to not just resupply but to prepare for a long trip? Stock enough to make a crossing, etc. Check when doing an approach task, may want to push a "fillup" task. K172. Add notion of "supporting" another unit to plan, then unit could wake up and get involved automatically if combat nearby. Should specify by type & distance, as well as particular unit. K173. Do general org chart mechanism, as combined plan/task/AI machinery (formal limits on action expressed as unit control properties/tables). Allow promoting any (or restricted type?) unit to be a commander, and assignment of units to commanders. Units can have orders to follow cmdr, cmdrs could have utype requisitions so production automatically goes to them. (Machine player could use this too.) Add a display to show how everything relates. Define a commander_decide_plan(cmdr, unit) or have cmdr make tasks directly? Each commander should have (or appoint) a deputy unit that will get its plan data if it dies. If deputy dies, should work down through orgchart to find anyone, only giving up if entire group is gone. "Commander" plan is mod of other plan types, cmdr bit is for coordination. Cmdr plan includes an "ideal" mix of types to command. AI uses to set production, human gets told of cmdr unit's needs somehow. K175. Should be able to set a "build rate" that is slower than "fast as possible", to avoid material depletion. (i.e. use doctrine to set default rate of build actions, set actual rate in build task?) Define as amt of time to wait before starting build of next type (if the same). K176. Define a "meet" task where transport and occ (or whatever pair or group) converge on a mutually acceptable place. Track progress, give up if not getting closer. K179. Add an "engineering" plan type, with subtypes "make-access" and "block-access". Engineering units build access routes by adding/removing/modifying terrain, or by building units that serve only as bridges. Should be able to build multi-cell/unit chains in difficult cases. Examples: could bridge one blocking cell by a) building a transport unit that ferries, or b) building two connections. Could bridge a single blocking border by building a connection or by removing border. Want to do this for any cell that is very expensive to cross. To implement, plan should look for cheapest route assuming that blockage has been negated, then build bridges for that route. Engineers should also know how to build roads, do that if road movement is much faster (such as doubled) than normal movement. K181. Fix AI so that it obeys real-time limits, and so that if acting as assistant, timeout isn't ended prematurely. K185. Need better weighting of hit prob vs death prob, also relate to goals, so unit with low hit prob will still attack another unit if it can win the game by doing so. (implies we need to evaluate importance of goals, nearness to achieving them) K187. Get goals from a hash table instead of creating anew each time. Parameters of goal will be read-only. get_goal(type, p1, ...) change_goal(goal, newtype, newp1, ...) Read/write goals as separate forms, make xrefs to them. K192. Implement Massimo's proposal for morale and feelings: @subsection Morale effects All the following modifier add to the given quantity; they are proportional to @code{morale} and are given at @code{morale-max} (i.e., they are multiplied by @code{morale}/@code{morale-max} first). They all default to @code{0}. @deffn Table @code{surrender-chance-morale-modifier} u1 u2 -> n% [use for sieges?] @end deffn @deffn UnitTypeProperty @code{disband-chance-modifier} n% @end deffn @code{disband-chance-modifier} requires of course the introduction of @deffn UnitTypeProperty @code{disband-chance} n% This is the chance for the unit to disband spontaneously. Defaults to @code{0}. @end deffn Example: setting @code{disband-chance} to @code{0} and @code{disband-chance-modifier} negative can model samurais: when morale becomes negative (their honor is spoiled), they have a chance of disbanding (with @code{disband-message} @code{"commits seppuku"}). @subsection Feelings effects All the following modifier add to the given quantity; they are proportional to @code{feelings} towards the ``other unit's side'' (which may often be the ``unit's own side'') and are given at @code{feeling-max}. They all default to @code{0}. @deffn Table @code{surrender-chance-feeling-modifier} u1 u2 -> n [use for sieges?] @end deffn @deffn Table @code{capture-chance-modifier} u1 u2 -> n @end deffn @deffn Table @code{withdraw-chance-modifier} u1 u2 -> n @end deffn @deffn Table @code{control-chance-modifier} u1 u2 -> n @end deffn @deffn UnitTypeProperty @code{revolt-chance-modifier} n% (proportional to @code{feelings} towards the ``unit's own side''). @end deffn @subsection Morale changes They all add to the unit's @code{morale}. They all default to @code{0}. @deffn UnitTypeProperty @code{acp-low-point} acp @end deffn @deffn UnitTypeProperty @code{acp-low-morale} fp @end deffn @deffn UnitTypeProperty @code{acp-high-point} acp @end deffn @deffn UnitTypeProperty @code{acp-high-morale} fp If u is left with less then @code{acp-low-point} acp at the end of a turn, @code{acp-low-morale} is added to its @code{morale}. If u is left with more then @code{acp-high-point} acp at the end of a turn, @code{acp-high-morale} is added to its @code{morale}. They model fatigue/rest effects. @end deffn @subsection Feelings changes They all add to the unit's @code{feelings} towards the ``other unit's side''. They all default to @code{0}. @deffn Table @code{transport-feelings} u1 u2 -> fp fp is added after each turn to the @code{feelings} of u1, enjoing the ride or the vacation in u2 (which can be a ``resort hotel''). @end deffn @deffn Table @code{material-transfer-feelings} u m -> fp fp is added (for each mp transferred) to the @code{feelings} towards the side transferring the material m to u. Models pay, bribes ... (m is often @code{"gold"}). @end deffn @subsection Morale and feelings changes They add to the unit's @code{morale}, to @code{feelings} towards the ``unit's own side'', or to @code{feelings} towards the ``other unit's side'', according to their keyword. They all default to @code{0}. @deffn Table @code{win-morale} u1 u2 -> fp @end deffn @deffn Table @code{win-own-feeling} u1 u2 -> fp @end deffn @deffn Table @code{win-other-feeling} u1 u2 -> fp They are applied when u1 destroys u2. @end deffn @deffn Table @code{hit-own-feeling} u1 u2 -> fp @end deffn @deffn Table @code{hit-other-feeling} u1 u2 -> fp They are applied when u1 hits u2. @end deffn @deffn Table @code{wound-own-feeling} u1 u2 -> fp @end deffn @deffn Table @code{wound-other-feeling} u1 u2 -> fp They are applied when u1 is hit by u2. @end deffn @deffn Table @code{capture-own-feeling} u1 u2 -> fp @end deffn @deffn Table @code{capture-other-feeling} u1 u2 -> fp They are applied when u1 is captured by u2. @end deffn @deffn UnitTypeProperty @code{change-side-own-feeling} fp @end deffn @deffn UnitTypeProperty @code{change-side-other-feeling} fp They are applied when u changes side (own is the ``old'' side, ``other'' the new side). @end deffn @deffn UnitTypeProperty @code{revolt-morale} fp @end deffn @deffn UnitTypeProperty @code{revolt-own-feeling} fp They are applied when u revolts. @end deffn @subsection Charm This action can model magic spells, terrorism, psychological weapons, propaganda, bribes, etc. @deffn ActionType @code{charm} unit This is the action that a unit performs to modify the @code{morale} and @code{feelings} of another unit. The unit must be visible and within @code{charm-range} to be charmed. @end deffn @deffn UnitTypeProperty @code{charm-range} dist Defaults to @code{1}. @end deffn @deffn Table @code{charm-friend-chance} u1 u2 -> n% The chance of charming a friendly unit. Defaults to @code{0}. @end deffn @deffn Table @code{charm-enemy-chance} u1 u2 -> n% The chance of charming a hostile unit. Defaults to @code{0}. @end deffn @deffn Table @code{acp-to-charm} u1 u2 -> acp This is the number of acp a unit uses to do one charm action. Defaults to @code{1}. @end deffn @deffn Table @code{charm-consumption} u1 m -> mp This is the amount of u1's supply used up in one charm action. m is usually something like @code{"mana"} or @code{"gold"}. Defaults to @code{0}. @end deffn @deffn Table @code{charm-morale} u1 u2 -> fp Added to u2's @code{morale} if charm is successful. Defaults to @code{0}. @end deffn @deffn Table @code{charm-own-feeling} u1 u2 -> fp Added to u2's @code{feelings} towards its side if charm is successful. Defaults to @code{0}. @end deffn @deffn Table @code{charm-other-feeling} u1 u2 -> fp Added to u2's @code{feelings} towards u1's side if charm is successful. Defaults to @code{0}. @end deffn @subsection Relaxation @deffn UnitTypeProperty @code{own-feelings-relaxation} n (for the unit's own side) @end deffn @deffn UnitTypeProperty @code{other-feelings-relaxation} n (for all the other sides) They default to @code{100}. @end deffn At the and of each turn, the old values of @code{feelings} are multiplied by (the appropriate) n/100; then all the previous modifiers are added; the result is rounded to an integer in the usual (stochastic) way to obtain the new @code{feelings}. @subsection Missing @code{revolt-chance} modifier for occupants (and nearby units). Then, using with @code{revolt-chance-modifier} and assuming that a newly-captured unit retains a ``bad'' feeling towards the old enemy, you will have to guard a newly-captured unit (with your ``secret police''?) until its feeling towards you improves. Effects of side behavior: d.o.w. or breaking a treatise should modify feelings of (certain) units. Effects of weather. (end of proposal) K194. Kernel should be able to do a system reset - all data structures and all allocation, so that a different game can be started up. K198. Only cache a limited number of help node texts, flush oldest when limit reached. K205. Add a way to make captured units disappear from game automatically, even if type of unit may exist on the capturing side. K211. Include values such as @code{enforced} and @code{publicity} for agreements? K212. Add symbols for agreement states. K214. self-required should also have a related side property? [rounding-down advantage should not eliminate one needed as self-unit?] K215. Allow a null unit to transfer-action to be act of discarding material? K221. For each scorekeeper, add an internal flag that saves applicability of scorekeeper, also calc for current turn - if changed, then AI analysis code should re-run. K223. Add option to rotate a map, at least by 60-deg increments. 60 left, 1st hextant formula is y' = x + y, x' = -y, etc. Also be able to scale map on the fly, not just as part of saving. K226. Implement unit layer for large worlds using some sort of tree search to find unit at x,y and not allocating unit layer at all. K231. Extend "bridge" table to distinguish from/to terrain, and to apply to assaults as well as captures. Come up with a new name for it. K236. Optimize mapping side and unit ids back to objects themselves. Use hash table for units (hash on low bits of id), direct table for sides. K243. Keep part of history log on disk rather than in memory if log gets large. K245. Implement side control; add controlled side's units to controller's move vector. K246. Add controls for random cloud variation. Use in ww2-bn, make cloud affect air value. K247. Add effect of temperature on cloud formation. K248. Provide a way for the gdl command to clear and recalculate all data cached as the result of game parameter analysis. K252. Add the ability to use the unit defaults to set default plan properties. K253. Change ammo usage specification to use two uu tables, one for material type that will be used as ammo, and one to specify amount (consumption-per-attack), eliminate hit-by table. K255. Add ability to make some types' initial numbers settable by advantage, have others unchanging. Use in standard game to adjust towns but leave city numbers fixed. K256. Add mechanism to define multiple types of accidents, each with own probability, notification, etc. Use basic table to trigger scan of possible accident types, weight each for likelihood. K257. Add a way to specify that a country should include specified numbers of preexisting units already on map. K259. Add machinery to control size and detail of log, translate old stuff or some event types into summaries rather than full records. K261. Add mechanism to record and replay a full transcript of all or part of a game. K263. Let transports on a trusted side do auto-resupply of occupants. K264. Add consumption of material as part of change-type action. K265. Add effect of being an occupant on weapon height. K266. If unit accelerated by occupant has not yet moved in a turn, then entry of accelerating occupant should increment acp to what it would have had if occupant had started inside unit. K269. Implement a convex region finder that works by picking random points as seeds and grows out from those. Sides have to be "locked" if entire side can't all grow - combo of locked and unlocked sides allows region to become parallelogram, triangle, etc. How should borders and connections affect generic region finding? Grow from random points until about 3/4 of cells in regions, then scan down to finish off. (Could leave single points as "their own regions", not alloc any region structs.) Use for complicated pathfinding. K270. General path objects consist of multiple segments, each with start/end point and a validity test (that can be done at any time). Also include a bit with segment saying "shortest" or just "nonincreasing distance". Should be possible for a path to say "impossible" for some segment?? (consider path that consists of land travel segments plus a sea hop that needs a ferry of some sort - path is still valid and useful.) K272. To do play-by-mail games, need to be able to save an optionally encrypted game and pass along to next player - player info includes some sort of bit indicating where to send to. (player-address slot) Encrypted game should retain game-module form as plaintext, include a "password" slot, then all numbers appearing at "top level" will be decrypted, random forms still read normally. Also must be able to store all notices so other players can see. K273. Add a zero-morale retreat chance that is < 100%. K274. Add a way to sell or trade tech levels and advances explicitly. K276. Allow connection terrain to be used as passageways in mazes. K277. When doing initial placement, test for presence of connection that allows unit, even if underlying terrain does not. K279. When doing games based on real world maps&cities, allow option to give all possible cities to a side, so that easy captures at beginning don't cause AIs on weak sides to give up immediately. Also add way for side selection to choose sides whose initial units will match the desired advantages as closely as possible. K282. Add incremental random unit generation, chance of appearing near existing units, don't generate any more than a certain density. Distinguish initial density that can depopulate, vs ongoing density? Hard to track, would need additional layer... unit-create-chance u t unit-create-density-max u t unit-create-radius u1 u2 Code tests for need to generate at each turn for each unit on a side. Use in Africa exploration. K283. Add way to do a "coordinated" attack that is different from a battle, involves multiple units with corresponding advantage. K284. Allow strings and lists in tables by using table as index to lookup table of the strings/lists. Keep a bit in basic table defn to distinguish; code will always have to call the lookup explicitly after getting the integer from uu_foo_bar. K285. Make move-range useful or eliminate. K286. Add a feature type (group [name] [size terrain-type]). K287. Improve kernel performance. Startup costs include lookup_string, keyword_code, set_utype_property, patch_linear_terrain. In cobra.g, 90% of car() calls come from interp_one_clause. After 60 turns of a standard game, search_around is 9% of time, draw_* is 20%, indep_captureable_here 3%, resupply_test 2%, t_subtype 2% (3% in gettysburg). During startup, strmgetc is 11%, xrandom 7%, point_in_dir 5%. K289. Offensive plan should attack, then retreat for repairs if damaged, otherwise attack again. (Does this already happen?) K290. Add a way to select a random subregion of a pre-existing map at startup; could choose a 60x30 piece of earth-50km instead of synthesizing, for instance. Analyze mix of terrain in piece and choose only if correct amounts. K291. Add a way to specify how far over a hill crest a unit can peer and see things without being seen. Related to eye-height, but is more like an "eye-lean-over-angle". Connected to cell slope/cliff model and unit placement within cell. K292. Decide relationship between plan type and goals. K293. Add task type "destroy" to continue combat until enemy or self is dead, add to doctrine to allow for breaking off and retreating at given hp level, if possibility of repair or recovery. Modification to hit-unit task? K295. Use change-type action in some game, or eliminate. K296. Add task type "build-road" and/or "clear path". K297. Add way to cluster independent units in groups - specify radius & number in cluster. Do as chance-adjacent property - chance to place close to last one placed? Hard to guarantee specific range of cluster sizes. K299. Add units that may cover multiple cells. Each cell's unit ptr points to same unit; if unit mobile, recalculation on moves more complicated. Decide how stacking works with each cell. K301. Add a doctrine option to let units be more aggressive when operating on a passive plan; if enemies show up within a certain radius, attack spontaneously. Different from offensive plan, which actively searches for things to attack. K302. Add an unload task (or command?) that puts all occupants out into surrounding terrain. K303. Add a "finish turn as soon as all units with order have moved" mode, plus a settable time delay to keep game from going too fast. Perhaps set short intervals between unit moves also, so movement spread smoothly throughout period of turn. K304. Change the stochastic and percentage values, plus the use of decimal points, so that 1.00 and 1 are not equivalent. K307. Add mounted/transport/fast mode for units, improves speed, reduces combat ability. Make it possible for unit to gain/lose ability, by acquisition/loss of a particular unit type. K308. Add defensive/entrenched mode, increases defensive ability, reduces other actions. Allow gradual addition of entrenchment, unit property that is 0 to n max. K309. Add inactive mode? Would consume less supply. K311. Make campaign games by linking a series or tree of game modules together, clearing part of state and retaining other parts. Specify by defining the next scenario if won the current one, or another if lost. Need a way to define carryover of units and such, perhaps with restored hp. K312. Provide a set of unit/utype properties that define combat without using tables, a la boardgames. Define attack/defense factors, distinguish air/naval/ground, armored/unarmored values. K313. Add way to attack/damage terrain, esp. connections that are bridges. Need new action, includes direction of conn or bord. K314. Add a way for players to buy units, either at outset, at specified times, or at any time. Use per-side material accum as money, have way to control list of what can be purchased at any time, disable choice of too-expensive types. For purchased units, add way to control location of appearance, allow requiring a delay between purchase and appearance. K315. Define suppression/disruption as temporary loss of hp, entirely restored at end of turn. (or let hp recovery do variable rate?). Suppression to 0 hp still causes destruction of unit, or perhaps requires it to withdraw to a safe area if possible. K316. Add a way for nearby units, such as artillery types, to improve defensive strength when attacked. K318. Add a favored-transport table to express which transports a randomly-generated occupant should go in, use in panzer & flattop. K319. For research of advances, allow different cases: per unit, explicit advance, backdrop per unit, explicit advance, action per unit, set weights, backdrop per unit, set weights, action per side, explicit advance (equiv to setting weights to zero for all but 1) per side, set weights Note that a flying city ought to be able to do both research and movement, how to do both with acp? Use doctrine to control emphasis on per-unit research, could organize by advance category so as to apply to future advances. Want material consumption for advance, plus time constraint - can happen no faster than x turns, or no sooner than turn n. Per-unit research should be limited by unit type, so labs can research scientific advances but not religious. For per-side research, define how many advances may be researched at once. Weights could apply to category, be impled as doctrine? Interface could display as draggable sliders. K320. Some advances should be able to be random, no player control on rate of progress (for instance social advances). Define as random-advance-chance property. K322. Add synth option to reduce elevation of stream valleys. Use in panzer. K323. Rename road-into-chance to road-into-pref or -weight or some such. K324. Ensure that initial view cells are all connected to each other. Do by computing centroid, then scan every cell and require that each cell different from centroid have an adjacent cell that is both seen and closer to the centroid than itself, making one of the closer cells seen if necessary to ensure. K325. Add the ability to adjust initial treasury according to advantage. K326. Make u_available work. At the beginning of each turn, compute new availability vector, make all now-unavailable units vanish. Define for_all_avail_unit_types(j, u), convert unit type iterations as necessary. K327. Make a true real-time mode that makes each turn of identical length. K328. Add a way to specify a buffer zone around units during placement; so cells adj to a type must include (or exclude) terrain of particular types. K329. When randomly placing indeps, avoid stacking in a single cell. K330. When a passable road ends in a mountain cell, disallow unit move past road end into a adjacent passable cell not connected to by the road. Similarly for combat. K331. Develop system for rating players; use advantage ratio to adjust score (win at 1:7 yields 128 points, at 7:1 yields 1/128 point for instance). K332. Add an "untried unit" mechanism where a unit's cxp or individual proficiency is randomly set after its first time in combat. K333. Add formation option to set position relative to lead unit's facing or movement direction. K334. Add a combat mode to unit plans - "at will" attack enemies nearby, "defense" defends if attacked, "no combat" avoids all combat. K335. Elevation at corner of cell is average of 3 cells, unless a liquid border (river) is present or one of cells is liquid, then use min of elevations. K336. Unit's build task should always include location to build new unit at. Check desired build location, fail task immediately if location not valid, then push move task to get within build range. K337. Units in formation should get to act each time the leader acts, if movement priority allows. Do by sorting followers right behind leader, look at action vector for followers after moving a unit. Change formation to be based on plan properties rather than a goal. K338. Handle firing over poles - if firing range reaches offmap and area is cylindrical, compute approximate offmap distance to reach plus area re-entry point, get total distance from offmap part plus the two onmap parts. K339. Change file/line report for read warnings to work for both lisp.c and read.c code, to be more accurate, and to report only the first line. K340. In networked games, if master wants to quit, need to choose new master, have it open a public socket, and wait for all remaining programs to connect to new master. Can any program become the master? If not, then must signal others. K341. Add doctrine to control whether units start game awake or asleep, start aircraft asleep in flattop etc. K342. Define a notion of aircraft raid that is different from firing, can be interdicted etc. Use in division-level games. Includes (effective) move to target, attack, return. Does not really move, but action will scan terrain under path from base to target, can spot, be intercepted, etc. (Interception is automatic by appropriate units under path.) Display all activity on screen - animate movement towards target, action by interceptors, hitting of target, return to base. Must be possible for radar-type units to detect raid enroute, so must compute (straight-line or roundabout?) sequence of cells passed over, compute visibility. K343. Consider removing create-units-from-specs. K344. Restructure base module/scenario relationship. Each base module is a separate set of rules (minimize rule sharing), and interfaces present a game as a combination of scenario + rule set. Random setups should be on same level as preset scenarios. K345. Allow features to be nested. No overlapping however, so mountain range can't be partially in Europe and partly in Asia. How to decide whether to display containing feature instead of contained feature?? Always display contained feature, but use containing feature to compute centroid only? K346. Add categories of features? Political/admin division layer separate from natural features. K347. Add ability for base module's variants to appear in scenarios' variant list? K348. Add a way to have structured numbers, corresponding to chain of command, display more or fewer nums depending on context. K349. Eliminate concept of damaged multi-part units - multi-part types always have 1 hp/part. K350. Add way to attach historical data to units, name of cmdr, date formed, etc. K351. To support online design, be able to add new types at any time, realloc internally as needed. K353. Make fractional material production deterministic by turn number rather than probabilistic. K354. Decide whether to keep unit->production cache or just to make the array a local var. Don't save/restore. K355. Decide how to handle scorefiles in a networked game. K356. To add a new player to networked game, would-be new player connects to public socket fd, get chat window, master broadcasts desire to join. Other players could (re)open chat windows, discuss. At start of next turn (or immed?), bring up player/side assignment, disable most buttons, add new side and player. All players have to OK, then new player is in. K357. When quitting from networked game, send quit msg broadcast to all, do side's fate as specified in msg (resign to side x, etc), call close_remote_connection with rid, mark fd as invalid and close. Could also turn side over to AI and disconnect - use separate msg 'd' to disconnect, 'c' to reconnect into old position. K358. Use mp-to-traverse to compute move cost for border slides. K359. Remove change-side action, convert to a manual change-side step run directly by sides, but record in the history. K360. Add view layers for people and control data. K361. Add a test that unit type names (and variables?) do not match any keyword. K362. Eliminate side_number(), use direct side->id refs everywhere instead. K363. Change river handling so that river conn does not exist in sea. Need to make asymmetric connections work. K364. Let units in reserve/sleep wake up before end of turn and do more actions - don't end turn unless all players have also normal movement (need a special state side->probablyfinished). K365. Reduce the effectiveness of blind fire-into actions, define as unit-unit blind fire hit chance (or default single parameter?). K366. If unit view object no longer corresponds with a real unit, clear the id and unit pointer fields. K367. Compact saved unit view by not saving views of own or see-always units, sharing x,y as in ((y1 (x1 v1 v2 v3) (x2 v4)) (y2 (x3 v5) ...)). K368. Elevation fixing should flatten out elevations of liquid terrain. K369. Add ability to define many sides in people layer (such as for base map of world), but collapse down if only a few sides in the game. K370. Allow many inactive or semi-active sides in a game that have less overhead than a fully-participating side. Move more interface bits to player objects? K371. Remove MAXUTYPES etc limits on numbers of types. K372. Implement unit courage effects. K373. Klast. --Mplayer AI M1. If game win is to own a particular type of unit, then set goal to own one. If can build, then start building and defend builder. If unit known to exist (how?), set goals to find and to capture. If unit is mobile, or if might be carried by mobile unit, set up a search pattern, and ? M3. To do patrolling/picketing, space units so that few or no holes in coverage. In theater being covered, check view dates and send units to update oldest information - should be closest unit or one assigned to cover. Could therefore have a patrolling unit that only moves very little since its view range covers nearly entire assigned area. Only do this if not see-all. M4. Derive acceptable risks from goals - unit that is crucial to game should not risk self, disposable types can be sacrificed. M5. Construction calculations should prefer multi-purpose units, but randomize if values close together. (Test by making game variants with ultra-powerful units, should see mplayer shift to building all the time.) Each goal should be characterized timewise, so mplayer can start builds and have units ready when goal becomes relevant. M6. For each type of goal in game, decide which units help accomplish and how well, which units support indirectly, etc. Also classify by short/long term value - short-term is 5-10 turns or 1/10 of game, long-term is length of game. M8. Prefer to hit or capture transports, especially if easier way to bag or destroy the occupants. Add estimation of units that might be hidden in transports. M9. Keep a persistent layer of "sightings" (or linked list if can be short), record into when nonempty cell in view array is about to be cleared during a turn (need hook from vision code). Date sightings, clear periodically. M11. Compute desired number of depot types by calculating the spacing between necessary to ensure that each can supply another. M12. If only one builder available, should "timeshare" it properly. Make strong preference to capture nearby units that can build. Plan should track what has been produced, reduce preferences as more and more of a type gets built. Test with old-empire. M13. Add heuristics to try to build bases at key or useful locations. Do if can create supply, can xfer from further than units can, can protect units in or near base. M14. If scorekeeper body says something about testing possession on a given turn, then make occupation a goal from the start. If occupation goal unsatisfied, assign units to occupy, give each the same goal, should also attempt to clear the area. If satisfied, assign unit to defend the area (need to write "how to defend" code?), possibly patrol around if everything not always visible. M16. If contacted more than one side, choose a side to concentrate on (closest most likely), act defensively against other sides (but still take opportunities). May need to change emphasis if another side turns out to be most threatening (tell this by tracking apparent success w.r.t. each side). M17. Shift from offensive to exploration if everybody disappears. Track max # of enemy ever seen and on which turn(s). Should be persistent in covering area near last spotting of units. M20. If moderate-to-high chance of capture by unit surround, put units in lines and other formations that can't be surrounded easily. M21. A side should act primarily defensively if it satisfies a goal, but the game is not over and another side could take away. M22. Guess at likely theater for contacts, carve out of existing theaters, reassign/replan *all* units. M23. Track contacts with other sides on a per-theater basis. M24. Mplayer should compute which types are mostly likely to be in play at present, and at future times. Can look at initial setup, construction times, etc, and ignore types that can't possibly appear. Routine could be chance_to_own_one_of_type(side, side2, u) that is the side's current estimate of the likelihood of the given side2 owning at least one unit of the given type. M25. Mplayer should attempt to compute numbers of units and material needed to achieve a goal, to some level of confidence, then set "buildup" plans - some units explore/patrol etc, then when buildup finished, should plan large-scale attack, from several directions if possible. Reserve units should hang around transports, but not sit on them unless transport protected. M28. Could do formations by reshaping theaters. Units mass on edge, don't go past until mplayer directs an offensive. If offensive successful, mplayer adds gains to theater. M29. If returning to a moving transport, and transport destination is further away, push a "wait" or "rendezvous" task onto transport's queue. Rendezvous task should estimate time of expected rendezvous, fail only if actual time is 1 1/2 longer than expected time. M33. Need special code to know how to defend bridgeheads, recent captures, etc. Reduce theater size or focus on immediate vicinity. Own units in "enemy" theater (define) should be defended against the most immediate threats. Look around for threats or potential threats. Assign best units to deal with threats. M34. Have machine player compute general dependency chains for its strategy. For instance, "need miners to produce uranium from mountains to build nukes to attack cities". Should be "lazily" computed, as needed to achieve basic goals. Strategy code works by calculating a plan that consists of steps to reach the goals. Plan is sufficiently detailed when side can tell each unit what to do, or doctrine has the same effect. Not always totally deterministic, how does this work? M35. Unit type analysis should be based on average outcome, plus worst/best-case outcomes if not maybe not expecting enough action to let things average out. M36. To estimate materials, scan world, for each unit image, add survival needs to min est, stockpile - avg operating costs to likely est, total storage capacity to max est. Can use actuals for own and allies. Similar for terrain and population. M37. Unit first spotting human enemy should disappear as quickly as possible, might escape before human notices. (exploratory plan only) Purely exploratory/recon units should generally avoid combat, try to escape and stay hidden if possible. M40. Do base construction as 1) moving to construction site, 2) building, and 3) carrying to final site. (Must verify that base or parts of base can be carried.) M42. When enemy unit spotted in a zone, decide if unit is part of larger group (like a country), what kinds of units might be present (similar, sessile, etc). If unit is isolated, decide if it is a threat in any way, if so, make a goal "enemy gone from x,y" and assign units to work on this goal, with types and numbers sufficient to the job. Can borrow from nearby theater if not too time-consuming. If group, decide importance (home country being most important), also assign # units, maybe make theater, track strengths, # units enroute, and # still needed. Distinguish units that are dangerous alone and ones that are carriers. An army that is 2 cells away from capturing a self-unit should have a maximal threat, since loss of game is certain if threat not counteracted. M43. Machine player should attempt to infer other sides' strategies. side->strategy->other_side_analysis[nsides] If no player on other side, record that other side will not do anything (and go after to build territory). If has a display, record as "more dangerous", use as a reason to ally with other AIs in game. Sides with displays should also be considered "more unpredictable". If AIs ally, should be temporary, since game won't end even if all are allied. M44. Define an "importance" of activities that gets divvied up among subcommanders, so overall plans can be set aside temporarily while individuals deal with immediate threats. M45. Mplayer code should look for "choke points" that are standard routes between important places and around obstacles. Calculate from world and utypes, share among all machines (don't use if haven't seen yet!). M46. Add code to negotiate for neutrality/ally status. M47. Mplayer should prefer goals with fewest dependencies (prereqs) and quickest time to completion. Prereqs mean conditions that must be true before main goal is worthwhile attempting, but are not formal requirements - goals are intrinsically self-contained. M48. Scorekeeper analysis: if keeping score make overall goal to win call make_subgoals else amuse self by being random if goal is to win for each scorekeeper if last-side-wins, ... (already done) else scan body looking for if's and do's (might be too complicated, should announce the fact as a warning "too complicated for me, don't know how to play" and drop back to simpler if mistaken goals) (or resign?) if body is "(if win/lose)" make the satisfaction of the test a goal if goal is to make a side lose if can be accomplished by eliminating a side's nonzero-value units, set goals to destroy/capture each type if not all visible, set goal to find units if type can move, goal is to keep info about world up-to-date; no random walking, always move to update oldest spots (but only in terrain where units could be) if type can't move, goal is to have examined all possible terrain. M50. Designer should be able to toggle flags for mplayer, force reevaluation etc. M52. If in a multiplayer game, one side is becoming much stronger, ally with other weaker sides. decide_to_ally - other side + allies > 2 * own allies, and > 2 alliance groups, pick strongest and propose alliance. M55. Don't attempt to return for repair unless there is a known place to get repaired at. If can recover, go into reserve for the turn or move to a safe place and then sit. M56. If multiple move failures (such as because of stacking limits), delay rather than cancel. Count such delays, allow up to 4 before cancelling. M57. Make AIs be willing to draw anytime during first turn, then go to normal behavior thereafter. M58. Add behavior appropriate for HQ units in ww2-bn - act as mobile support, staying close to front line but avoiding direct combat. M59. Profile AI in large games, fix performance problems. M60. AI should talk to player more; boast and taunt upon wins, insult upon losses. M61. AI should notice opportunities to upgrade units and take them. M62. Make AI recognize and move mobile sources of supply correctly. M63. Eliminate game classes from mplayer.c. M64. Mlast. --Interface I11. Add a way to get explanations of action and task failures, needed to explain non-functioning in game designs. Add command "explain-failures" to toggle descriptions. I15. Lists of units should also be able to display glimpses, just omit data that is not available (what about names? might be tough to save names with glimpses). Do when view objects implemented. I20. To indicate slope, draw center of cell with shape for next smaller mag, then sloping rects joining adjacent edges of cells, then triangles around each 3-way meet (for hexes anyway) to fill in holes. I21. Should not appear to be able to attack if attack not allowed (arty in ww2-bn for example). I24. Add a side->ready_to_start that each player must enable before actual game play starts. Initially false for all sides, mplayer sets when init done, interfaces enable at player's direction. Could be button or implicit when player tries to move. Note that if multiple humans, and one tries to move, move will not actually happen until everybody either tries to move or else clicks on the start button (should warn player attempting to move). Important for real-time games(?). I27. Direction cmds in dir of blocking terrain but adj to a slideable border should cause a border slide. (also for move tasks?) I33. When displaying perspective, show both top and bottom of "thick" terrain. I34. For textual commands, interpret , extend words, etc. I40. Add table info to help nodes displayed by both first and second indices (so for ut table, info is listed in a unit node and also in a terrain node), plus add an additional node for the table alone. Make node for each table, plus one node listing all defaulted tables. I41. Use long name command "alt " to set altitude explicitly. (Do when a game actually uses altitude.) I42. Allow definitions of images that constitute the border between two given ttypes, or t1/t2/border combos, etc. Store in global additional-images or special-terrain-images as list where each element is like ( ( ) ... "image-name") where first ttype is main cell type, succeeding indicate either linear in given directions, or adjacent cells of given types in given directions. image-name is the image or family name to use. Example? (beach (terrain (ne sea) (half (n sea) (s beach))) (border (w nw) river) "beach&sea&river-1") Alternatively, use a 6-bit encoding to say what an image contains; "beach-33" contains nw and ne borders. Define generic masks - bord.imf and conn.imf - that can be colored in by actual terrain. Function to get will be linear_image(imf, w, h, mask). I43. Add "overhead/isometric" and "facing" image properties that indicate approximate orientation and direction being viewed from (side, top, 30 degrees, etc). I50. At high mag powers (emblem width < 1/4 cell width), draw people emblems on each border of hex next to hex with different people. I53. Game should be able to spec relative or absolute widths of borders and connections (used when solid or a pattern). I55. Should be able to parse dates in commands, omit parts that are same as current value (such as year). Date string function should cache stuff, so not always allocing new strings. I57. Add a text parser etc for specifying units and types. parse_[urt]type, parse_unit should be able to recognize ambiguous matches, either return # results or report of multiple, be able to process each independently, put in dialog, etc. parse_feature to locate geo geatures by name. I58. Kernel should deliver basic formatting info in help text, let interface digest - need line breaks, text fill, tabs/tabstops, emphasis/bold (use ^B,^P,^I chars? or HTML). Perhaps some way to name a picture and let interface fill in actual picture. I60. If info is always accurate and up-to-date, calculate display directly from state. If might be unknown at first, but always accurately known once discovered, keep a bit/piece of info, display from state if bit is on, else show nothing. Similarly for info that might get out of date if observer not present? If info might be known/unknown and right or wrong, then must maintain full copy, though can forward to real state if internally known to be accurate. I63. Add designer tool to paint theaters for AIs. Should just be a hook to AI that is interpreted as AI prefers. AI should report range of integer values (with optional names) to paint. AI should detect preset theaters, use instead of calculating own. I64. In isometric view, displace units by both elevation of cell and their altitude above it, draw shadow on ground if airborne (compute from base image's mask). Center unit in cell better (?). Shade slopes in isometric view according to time of day. I65. To support multiple natural languages, associate one of several languages with each side, use to invoke nl-specific nlang.c/help.c routines. Also have separate command definitions (de-cmd.def, fr-cmd.def, etc) that interface should be able to use instead. Each interface, if configured for it, will have to set up all the command tables, so can be chosen by each side at game startup. Would need some sort of function vector setup so as to select the right set of routines dynamically. Language-specific C code should be optional enhancement, basic localization should work in any case. I66. Add interface-independent printable output of all help info. Add as "save topic", "save all" commands to help dialogs. I67. In printed map, make grid be gray, draw only around known-about terrain. Draw area edge in light gray if adj cells not known terrain. Use halftones or patterns instead of bitmaps possibly, add a color -> grayscal translation process. General cmd should be "print [window] [width]", where saying "window" limits to contents of a window (else whole area is printed), and width gives physical width of map, default is to fit on one page. Each page should include a legend showing terrain, units, sides, use up to four columns at bottom of page, run types together in columns to save space. (Ditto for text/ascii view.) I68. Common printing code handles layout setup, layout checking, and actual computation of printed view. Interface handles any print setup dialog, plus final disposal of printed view (to file, to print queue, etc). I69. All interfaces should have all printing methods available. (including skelconq) I73. Clarify rules of how immobile units get on transports. I74. When autoscrolling, interfaces should support a brief delay option so that players can see the outcome of a unit's last move for the turn. Can omit if next unit is close by and no scrolling was needed. I75. Add ability to supply phrases for table row display in help: "[can create] by default, [except for] base,town,city". These would be optional non-null args to table display routines. I82. To describe movement abilities, display both mp and "move range over a given terrain type", which may be much less. I84. Reduce amount of redrawing of unit due to display updates for state changes. Add bitmask encoding change in hp, type, acp, reserve status, etc. I88. Support distinct images for individual units, via an extras property. Maintain id->image table (hash table? do sizes as well). Implies need to create images and caches during game, not just at beginning. I91. Implement agreement-building interface: draft [] [] [] [<short-title], to create, gen id if not supplied. drafters [<id>] sides, to add sides to drafting committee, id is most recently worked-on agreement. proposers [<id>] sides, to add sides to list of proposers signers [<id>] sides, to add sides to list of signers known-to [<id>] sides, to add sides to list of who gets told about agreement terms [<id>] [=/-] terms, to add/remove terms to an agreement (only drafters may do) propose [<id>], to reveal proposed agreement sign <id>, to sign it show-agreement <title/id> to display a given agreement list-agreements to list all of them known to a side Add terms "alliance" that implements trust, "spheres" to divide world and warn of violations, "neutrality". Add a way to cancel agreements, perhaps by doing a new agreement? Allow any participant to reveal a secret agreement publicly. Or do commands ask <id> <side> <role> to request side's participation in particular role for agreement accept <id> <role> to agree to participate. withdraw <id> <role> to change mind. known-to is 1-way, but if withdrawn, won't get updates on details. I97. Add a search button/command to help. Search by either substring in topic or substring in contents (expensive!). I99. Add commands to set unit plan types and goals. Be able to do "defend" to defend current location, default radius (5?), "defend New York" with specific unit as goal, "defend +" to change plan type but not goal(?), "defend 39,10 r 4" to be very specific. I105. Add support for a graph window that displays up to 4-5 chosen statistics against time. Needs choice of what to display and a subset selector for each graph. Some stats will have records that have been kept, others will start only when graph is requested, but then keep accumulating even if no longer being displayed. I107. Add mechanism to specify images of incomplete and damaged units and use them to draw if available. I108. Add a flag that says whether to scroll over to units that have been spotted or are passing by. I110. Fix follow-action to work right in all interfaces, toggle with single-key command. Resolve issues of player control over scrolling vs game control while player is in move mode. I114. Let return command handle returning for repairs also. I115. Reduce dual attack/capture messages to single message, double message is confusing ("misses", then "captures", etc). I116. Notify player when unit cannot respond immediately to a task that has been given, then go into reserve. I117. Add additional feedback/hints about the current play mode. I118. Explain MP to enter/leave better in help info. I119. Distinguish better between single- and multiple-action move tasks; if in novice mode (add a preference), add notifications that a task has been set up, plus estimate of # turns before completion or some such. I120. Add more hints about turn change, possibly add a special notice when in novice mode. Highlight turn indicator when just changed, or until first move in turn by player. I121. Scroll to unit at each move within a turn, not just at the beginning of the unit's move. Must recognize when a unit is still the current unit, not scroll to just any active unit, might be moving under totally automated control. I122. Add option to scroll to each unit when it moves, not just when it is ready to be moved. I123. If tooling or tech insufficient to build a type, and no way to increase it, remove that type from all build prompts etc. (Should differentiate "never available" from "not yet available".) I124. Fix "throws back" messages (how?). I125. Add a "fill transport" command (was ^F in 5.x). Add a command to move to transport being filled (was E in 5.x). I126. Add a command to clear task agenda but have no other effect. I127. Add a patrol command (similar to standing order but more like task). I128. Add a way for a remote player (such as an AI) to shift to being local. I130. Suppress "insufficient mp" message if reason is supply exhaustion. I131. Add a map legend help screen driven by platform-specific drawing. I134. Use action-narratives in history displays. I135. Add startup option for the number of (real) seconds to wait before declaring the side to be finished with this turn. Default to 60 secs for humans in multiplayer games. If no player action, and all other players finished turn, do a finish_turn. I137. Add concept of message channels, allow both private and public "chat lines" to be created. Retain current message as email-like interface. Add option to create all-parties chat line when first remote has been connected. I138. Move Mac-specific aux (feat) color and preference code into ui.c. I140. For event list display, maintain buffer of n lines, each pointing to event being listed, recalc when window enlarged, etc. When list[i] selected, display event description plus ptrs to related events. Some "events" will be summaries (like total losses), be able to change amt of summarization. Observer mask is parenthetical remark. Include toggles to display events as they come in, and to scroll map to show where event is happening. I144. When unit to be delayed is only one still capable of acting, beep or otherwise indicate that this is the case. I145. Tableize construction dialog info, assume left and right panes. I146. Add a per-side play rate, use to govern how often AIs move when humans are moving. I147. Genericize by-name search function, define command, make case-sensitive and able to match on substrings. I149. Do a score calculation before first turn of game, so as to get better display? I150. Transport occupant display should include indication of percent full, both "capacity" and per-type if appropriate. I151. Add a way to describe the location of a unit in terrain or transport as "at" or "orbiting" etc instead of always "in". I153. Add ability to have a larger image (gif?) showing what unit would look like in real life, use in help info. Property would be help-image-name. I154. For each feature type, be able to specify how rendered (color, width, etc), in addition to any user configurability. Similarly for name of feature (italics/bold, font size). Do line breaks in long feature names, render with two lines? I155. Use common location_desc for both oneliner and unit info. I156. Draw names of large features at multiple times, spacing approximately at size of map (a la watermarks on stamps), so one copy of name visible at all times. Use for any feature any of whose dimensions are greater than size of the map. I157. When reporting scores, identify score of just-completed game differently (may not always show as most recent game in list). I158. When connecting to remote game, allow request for specific advantage. I160. Implement both randomly-chosen and cycling image sets for the map window. I161. Should be able to define special win/lose sounds (cheers and raspberries), attach to interface's handling of events from kernel. I163. Add long commands to supplement mouse-based design. layer <type> [<props>] @ x,y [to x,y] [r radius] [+-] <value> Use for large area fills and consistent mods(?) I165. Draw 4-5 densities of cloud - clear (0), scattered (>0 - 1/3), partly (1/3 + 1 - 2/3), overcast (2/3 + 1 - storm), storm (storm - max). Draw as either overhead (using only 50% mask at partly & up, so units not invisible), or side view in top part of cell, outside unit area. I171. Add a full command-line interface to all interfaces. Usual single-letter commands work as before, but need return to do; so "3w<cr>" and "osides <arg><cr>" work. Allow mode where single letter commands require prefix, while long-name commands do not. Add osurv and omove to set modes directly, while z still toggles. (used for testing?) I172. Revive bargraph option for unit info display, set according to player preference. I173. Rules for drawing people and control borders: If control different & defined, draw heavy (red?) line. Else if one cell unpopulated, draw heavy gray line. Else if control undefined and pop different, draw heavy line. Else if control same and pop different, draw thin line. Option to choose colors according to side? I174. Add way to draw units differently depending on task currently assigned; wood collection draws woodcutter, combat task shows drawn weapon, etc. I175. If cities can only build, go directly to query about what to build, allow idling as option in query. I176. Draw fire animation before the action, blast images after. Allow definition of per-type animation, so arrows drawn differently from catapult stones. Unit type property "animations"? I178. Make displays work correctly for mobile units with no vision ability. (draws empty box when selected currently). I179. Issue a "firing path blocked" message when that happens. I180. If a unit type can't do an action, error message should mention type in general, not specific unit. I181. When multiple images available, choose using a pseudo-random sequence based on a per-viewport seed, so same images chosen when scrolling, zooming, etc. I182. At 4x4, draw unit as 3x3 block in nw corner, color according to size (also try coloring only center pixel, leave others black). I183. Make system of preferences include: per-game-module-per-user prefs, per-game-module defaults, all-game-per-user prefs, and generic defaults. I185. In help info, report variants in the list of modules. I186. Add a way to pass a list of selected units to a command, use to move unit-manipulating commands from interface-specific code to kernel/cmd.c. Account for both "exactly one" models of tk/curses, and 0-all model of Mac interface. Will need more callbacks to interface-specific code? I188. Add a choice of bord/conn masks to color, indep of of color or pattern choice. "thin irregular", "thick straight", etc. I189. Make view painting a mode of painting of other layers, with values of "unknown" and "accurate" available in addition to usual layer values. I190. Only report name of feature when entire feature (and adjacent cells?) seen. I191. Change feature display options to have 1 of three choices: name only, name and "interesting" boundaries, name and all boundaries. I192. Use special types of images, such a triangle for peak, for designated types of features. Similarly for colors and font sizes. I193. Add negative display powers -1 -> 1/2, -2 -> 1/4, to shrink large maps for world displays, or alter meaning of existing mag numbers. I195. For civ emulation, subsume build dialog in city dialog? I197. Add more controls to set game ambience. Role of player is almost always as supreme commander, but details different for each game. Want to do things like "Joe, as General Lee" in score list. Add patterns to dialogs/buttons, color/fonts to text, choice of subwindows. Do for setup windows once game is chosen. Make some interface elements go away entirely if not appropriate? I198. Track player identity across multiple games. I201. Warn about masks that are not supersets of base image. I202. Eliminate masks that are identical to base image being offset in four directions, or just to base image. I203. Add option to draw masks to highlight b/w image, or not. I204. Provide a way to get advice on expected combat outcome when considering a particular attack. I205. Provide a way to compute and highlight all cells reachable in the current turn. I206. Add a template for a web page to set up multi-player games. I207. Colorize b/w images based on ratio of black & white - first color for most common of black or white, second color for less common. Third color only for "counter" shape underneath. I208. Decide how to handle color settings. Have GDL default, user pref in general, game design, user pref for game design, in that order. I209. Add a way to colorize gray-scale images. I211. For crowded cells/transports, consider displaying only images at 16x16 and providing "..." to indicate more units than visible. Could do at UL and BR to indicate relative position in larger array of units not shown. I212. Make "..." pattern a clickable way to circulate through units in stack. I213. When networking checksums start failing, only display first failure, add option to resync somehow. Try resyncing only units, then sides, then world, then game design. (But how to recalc cached info?) I214. For LOS games like panzer, add a way to determine if a given position is visible from another given position. I215. Add a two-argument predicate to table description routines in online help, apply to table entry to decide whether to add to histogram and final description string. Use to eliminate meaningless/misleading table entries. I217. Add ability to specify type of blast to go with detonation or combat. I218. Add display of firing unit's range. I219. If acp-to-attack of a firing unit is zero, advance_into_cell and overrun should happen by fire alone. But allow or disallow counterattack in that case? I220. Detect when remaining unit acp is too little to do any allowed action, automatically go to next unit if autoselecting. Implement by maintaining bitmap of actions still possible during turn? I221. Add an undelay command, or let delay command toggle. I222. In mouseover text, display occupants as "in <unit> in <terrain>". I223. Add way to define how to display occupants, don't always subdivide display area. For occs like city improvements, may only be displayed as city properties or similar. I224. Allow designer to choose which unit(s) to move first in a many-units scenario - a center-at side property? I225. When non-visible unit fires on a visible unit, don't report name and position of firing unit. Use "unknown unit", or "unit near x,y" with randomly-varying xy, or "unit in direction dir", or "unseen unit in direction dir". Report firing as well as hit/miss? Draw only part of firing line, just the part within a cell or two of the victim (or make length dependent on type of unit doing firing?). I226. In isometric view, use unit image bbox to position bottom of image consistently. I227. Add unit type property to define alternate image families selectable as preference. I229. Add option to draw double-sided people/control borders using side colors. I230. Use feature names when reporting destinations, similar syntax to mouseover display. I231. Add an option to use a 25% red overlay to indicate enemy ZOC, or else some sort of boundary to indicate enemy and own ZOC. I232. Send message to human player when supply low, suggesting preferred location for return. Control warning via doctrine flag. I234. Consider making city dialog an expanded unit closeup. I235. Add emblem-name property for individual units. Scan list of units during startup, load imfs for each found. Display additional emblems in side list, underneath main side emblem. I236. Define and display names for experience levels instead of numeric values. I237. Define a "half-connection" image type that has 6 subimages instead of 64. I238. "Give" command to transport should transfer supply to occupants. I240. When a unit misses during combat, say "A attacks D, no effect". I241. Redesign kernel->interface relationship so that all updates happen at once, after a single run_game. Do by making queue of update instructions, collapse updates that have no visible effect. I243. Add a way to suppress turn display and side progress for real-time games. I244. When setting up multi-player game, players should reach consensus before going to next screen. Each screen should show number OKing, use chat window player list to indicate which have OKed. I246. Don't draw enemy occupant blasts if not seeing occupants? I247. Draw occupant blasts at same time as main unit blasts, draw counterattack blasts slightly after but overlapping with attack blasts. I248. Define a generic command (';') to find the next awake mover, or modify delay command to have different effect in survey mode. I249. Add pbem. Do by recording player addresses (player setup option), requiring sequential play, checkpoint at start of each player's move, log all inputs. When restoring, restore player's move, then replay input effects, so effectively recomputing state at end of previous player's turn. I250. Add ability to switch sides attached to display - use for designing, solitaire play, game test, hotseat games. Move side->ui bits to global struct, leave minimal data attached to side. I251. Add control of unit number display separate from name. I252. Add a "tips" mechanism. I253. Add ability to use PNGs instead of gifs. I254. When creating a unit with a randomly-chosen name, automatically bring up dialog to rename. I255. Make all terrain imagery work at 88x96 magnification. I257. Construct special terrain imagery as base image plus highlight image (aux-image-name?). Draw over or under linears? I258. Add ability to sort and renumber geographical features. Sort should be able to put largest types of features (like continents and oceans) first in list of sorted features), but sort rest of features by typename, then name (or allow choice in interface?). I259. Change final statistics to display in a window. I260. Add a mechanism for interfaces to indicate network activity. I261. Give designer the option to set both unit side and origside. I262. Add a command to check unit-terrain compat while designing. I263. Fix where destination_desc says units appear at "self". I264. Don't report elevation of units on terrain type where elevation is fixed (such as sea). I265. Set up consistent cursors for different mouseovers - crosshairs for firing, swords for attack/overrun, arrow for movement. I266. Add way to record every player input to kernel, use in pbem and debugging. Do by grabbing net_* arguments and dumping out. I267. Set up unit view painting as a toggle added to terrain view painting, choose between "empty" and "accurate". Also add a "create view object" option to create views explicitly, similar to unit creation. I268. Implement feature-colors, use for text names at least. @deffn GlobalVariable @code{feature-colors} list This variable is a list of feature types and colors to use with them. (not implemented) @end deffn DEF_VAR_L("feature-colors", g_feature_colors, set_g_feature_colors, "definitions of colors of geographical features", gfeaturecolors, NULL) I269. Add the ability to describe actions in the history. DEF_VAR_L("action-narratives", g_action_narratives, set_g_action_narratives, "text to use in describing actions and their outcomes in the past", gactionnarratives, NULL) @deffn GlobalVariable @code{action-narratives} patterns This variable is similar, but its text is in the past tense. Defaults to @code{()}. @end deffn I270. Make the repair command set up a repair task, not just an action. I271. Simplify command-line parsing into a single call that builds all data structure before deciding what to do with it. I272. Ilast. --Documentation D12. Describe action-notices etc, move descriptions to better places in manual. D18. Compare contents of refman with designer's guide, add refs to all constructs in designer's guide. D20. In design.texi, mention parameters of unit movement, describe use of speed-damage-effect, speed-wind-effect. Use Normandy landing ship example to talk about ferrying. D22. Sort kwic index better when keywords tied. D23. Convert old diagrams of cell and map structure from picts to gifs, add to hacker's manual. Add additional pictures showing isometric layouts and so forth. D24. Describe encoding of wind and cloud layers in refman. D29. Dlast. --Testing T3. Add testing machinery for the graphical interfaces. Could have AIs play each other on multiple screens. T5. Instead of scanning lib dirs wholesale, make up a list of combinations of game and variant options to run (for longer tests only; check-lib should still scan entire dir). T6. test-lib should run all the useful -g options (use game.dir to collect). T10. Add complete set of test images to test.imf. T11. Add tests for end-of-game handling; win, loss, draw, etc. Set up some lib games with non- or feeble sides, so one side wins more quickly, plus heavily lopsided advantages. T12. To test save/restore, dump out help info separately, save game, restore, then compare with help info after restoration. T14. Run gdl/doc/all.g consistency tests as part of "make check-gdl". T15. Need special scenarios to be able to test all plan types accurately, should set up similar tests for all major parts of planning and AI code, each should ensure that all the code bits actually get executed. T17. Write a library module name analyzer/checker - similar to doschk. T19. Add tests involving two communicating skelconqs with preset port numbers, use to test networking behavior. Use a skelconq and Xconq on Macs to test PPC (or GUSI?) T21. Add test for side/unit priority machinery. T24. Build series of test cases that must pass for AI to be considered working. AI must win game against opponent handicapped in some way, so no ambiguity about meaning of result. Must win within given number of turns. Grep skelconq output to ascertain win and turn #. T25. Add tests for all warnings to warn.g. Add a comparison of warnings output and warnings possible in the code. T26. Tlast. --Library L4. WWII scenario should be able to have a "neutrals" side that resists involvement. Attempts to attack neutrals should have some consequences. Spain and Turkey should be neutral, but if attacked, will go over to other side. (This should be recorded in the scenario as a preset property of those AIs!) AIs on opposed sides should assess value of capturing side's units vs expense & risk of combat. L8. Make Gettysburg brigades vary in quality and hp. Use distinct images for federal and csa units. Consider adding units for generals (corps and army only). L19. For Normandy, set up staging areas for German reinforcements to arrive from. Set German AI to be primarily defensive. Add scripting for Allied landings, so player doesn't have to do manually? L24. Develop modern-day military games, both operational and strategic. L50. In "space", cruisers should be able to attack planets/planet occs, damage shipyards. All spacecraft should be able to "enter" gas giants for refueling. Earthlike planets should have more fuel. Add scoutship type, long range, low fuel consumption, and battleship or dreadnought, very durable and expensive, nova trigger, use to detonate stars (and black holes?). Have colony ships different from fast military transport, cheaper and slower. Colony ships can only "capture" uninhabited systems. Have armies protect planets (and stars?). Add population, use to decide desirability of systems. L62. Make fantasy game work usefully. Add mask to serf image, make better wizard imf, add better mask to city15, do color image for it. L64. Add color images for aircraft types in flattop. L66. In ancient: Skeleton should have no effect on stacking. Ideally, skeleton would be drawn *under* other unit(s) in cell. In ancient, consider adding steady food/gold consumption for units, reduce initial costs to compensate. L67. Add a new Godzilla game - include national guard (soldiers), army (tanks), subs that can fire torpedoes, helicopters that can fire, fighter jets. Create three sizes of building (short, medium, tall), use to affect visibility. L72. Add better leader and militia images to beirut. L73. Add embed-at and flagpoles to rest of standard images. Put standard images into a single gif. L74. In ww2-bn, add air units that are immobile but can attack anywhere on map, each should have alt so can be affected by weather. Disallow night attacks. Use different symbol(s) for AT artillery. Add non-hyphenated type names for display. Number more types of units. Use milsyms for flak, CD arty, fortifications. L75. Add 32x32 color images for all images actually used in a library game. L80. Add correct number of mobilized forces to ww2-39. L82. Fix where normandy.g is dark during 8am turn. Fix supply situation upon landing. L83. Make bare/grass distinction more interesting for insects - bare has faster movement, better visibility. L84. In monster, redo set of building images, possibly share with beirut. L87. In greek, add a type of place that is like a base (or rename fortifications, which appear unused), change 1/2 of places in pelops to be of this type. Most polises should have food, but no money. Consider adding a "citizens" material that regulates hoplite (and cavalry?) production. Put money (as talents) in treasury, have polises add to it. L88. Add more detailed instructions and help to all game.dir scenarios. L89. Add hills to standard terrain types. For standard game, effect of hills is to slow armor to 1 move/turn. Add hills to library maps. L91. In midway, preset formations based on flagships, prompt for flagship movement first. L92. In nw-europe, add British towns for V2s to hit also, affects Allied score if British towns damaged or destroyed. L93. New game, "Nine Nations". Set in 202x, postulate USA fragmented into the nine cultural regions, players attempt to reunite. Regions are Ecotopia in NW (capital SF), Zion in Utah area (capital SLC), Mexamerica in SW, Heartland in Midwest (capital Chicago), New Dixie in South (capital Atlanta), Alleghenia in Rust Belt (capital Pittsburgh), New England (capital Boston), "United States" in mid-Atlantic area (capital Wash DC). NYC could be neutral city perhaps. Each side would have special abilities - Ecotopia and New England have ballistic missile subs, etc. Units should be near-future, highly mobile, etc, similar to new standard game. Use 50km/cell scale. Use people and control layers to track progress. L95. In gazala, disallow attacks across escarpment. L96. Convert borders to image types; ww2-div-eur Rhine-river, ww2-div-pac reef. L98. Rewrite panzer to be more like WestFront/EastFront or Steel Panthers. L100. Make militia image similar to soldiers, but more irregular. L101. For fred, work up better images, lighten/desaturate countryside image, use mountain pass half-connection image for passes. Always show name and title of leader, add unique images when available. L104. Add roads to ww2s-* scenarios. L105. In eur-100km, add roads through Ardennes and Alps to allow armor access. L106. To set up ww2s-42, copy OB from ww2s-eur-42. Make Fusan a base? Add Japanese forces. Add Gibraltar, Helsinki (as indep). L108. In ww2-eur-42, add Nova Scotia/Labrador/Iceland bases so can provide asw coverage for convoys. Change balance of continental forces so SU can't always win alone. L109. New game, planetary campaigns. Factions start in near future on Mars, progress outward or inward as time passes. Advances include FTL travel, which increases scope to other star systems. Common tech for all planets, common terrain (hard), etc. Each planet is its own scenario, campaign links each to success/fail of previous round. (Concept similar to Total Annihilation, but less futuristic.) L110. Add clouds to ww2-bn games. L111. For civ2 emulation, add improvement effects: Decide how to make airports do airlifts. Bank multiplies taxes and luxuries by n%, then adds (define a unit-conversion-effect?) Barracks adds cxp without engaging in actual combat (unit-cxp-effect?) Capitalization is not really an improvement? Cathedral, Colosseum, and Temple add to happiness. Walls and Fortress add to stack/occ protection (in combat model 1). Courthouse reduces corruption. Factory set um-production-effect to 150%. Harbor adds to production of each ocean being worked (need to account for in display). Hydro plant has um-production-effect of 150, but only if factory present. Library, Research Lab, University similar to bank, each multiply science by 1.50 before adding to treasury. Manufacturing Plant multiplies shield production by 1.50. Marketplace multiplies tax and science by 1.50. Mass Transit reduces pollution somehow. Nuclear Plant is like Hydro Plant? Offshore Platform similar to Harbor, increases shield production. Palace reduces corruption. Police Station increases happiness. Recycling Center reduces pollution somehow. SAM Battery provides transport protection. SDI provides area protection against nuke missiles (add a radius parameter to stack or cellwide protection values). Spaceship components handle as unit construction for a large unit. Solar Plant multiplies factory output. Stock Market similar to Marketplace and Bank. Superhighway multiplies road/rail arrow prod by 1.50. Supermarket multiplies farmland output by 1.50. L112. Add names of mountain ranges, swamps, deserts, etc to big world maps. L113. Make ww2-div-eur disallow capture of towns directly from transports unless a beach is present. L114. In ww2-eur-42, make France an active side but with only one army or base or some such, or else make it controlled by Germanyk, allow Allied capture of Paris to end the control. L115. Llast. --X11 (tcl/tk) Interface X22. Typing text into ask_position switches to prompt, reads a textual spec of location. X39. Implement do_produce. (as generic cmd - start with Mac code) X58. Implement up/down commands. (as generic cmds) X65. Convert Mac picts for games into gifs, load into tk interface. X67. Display designer wind dir/force graphically. X69. Add design button to first startup dialog. X71. Add option to ximfapp to magnify individual images by magnifying all pixels. Implement as "-mag" option to imfsample. X73. If map win bg matches grid, draw bg color and area boundary line. X74. To sidelist, make entry smaller (no progress bar) if side inactive in game. Add twistout to show more detail, or bring up separate display. X76. Choose country border width independently of feature borders (make narrower). If wider than 1 pixel, use set of masks to lay down, but use straight lines not jagged. X79. Add area rescaling to designer save dialog. X83. For isometric display, add control for vertical exaggeration. X85. Draw world shape in world size dialog, use a sort of rounded rect plus inset a little at top and bottom to indicate two hemispheres. Draw as hexagon inside if no wrap, as rect if wrap. Limit y to 80 deg lat. De-magnify by 2 if circumf between 200 and 400, by 4 if greater. X86. Implement doctrine dialog. X87. Add part (or all?) of tech tree to research dialog. Distinguish future and past advances, show current activity, expenditure on research. X88. Add construction dialog a la Mac interface. X89. Add a unit list window, with options to display own units, all trusted-side units, accurate info/tracked units, unit images. X91. Add display of trust/alliances a la Mac interface. X94. Make detonation movie into real set of images instead of flash, suppress individual damage movies or show all at the same time. X98. Add preference dialog for colors; include imfsamples for all terrain types at once (both color and pattern), grid color, unseen color, shoreline color, unit/feature name fg/bg, frontline color, meridian color, contour color, feature boundary color. Create each as canvas elements in shapes similar to map usage, but large enough to click on. X99. Make set of masks to draw frontline and feature boundary lines instead of drawing fat lines. X100. Instead of using stipples, precompute darkened and lightened images, for all terrain types including conns and bords. Need 25% less for night, 50% less for uncovered. X105. Reduce number of cell updates when unit is updated, but appearance doesn't actually change. X106. Consider using fuzzout when drawing edges of vision coverage. Would have to AND fuzz with x% overlay mask, draw as "inverse" from uncovered cells, not covered cells. X108. Speed up the interface! Analyze using timeline dumps. X110. Add introductory notes and instructions as optional separate screen, just before variants screen. X111. Color backgrounds of panes more interestingly. X112. Give unit type list all the extra space on the right side, don't allow gaps between panes. -expand = true? X114. Set can_embark true if type can occupy some type of unit. Ideally only set true of current unit adjacent to a non-full transport; or make task to embark? X115. Only enable disembark if current unit is on a transport, and can get off it. X117. Use an alternate cursor in move mode if no unit selected. X118. Allow choice of drawing image at 8x8 or just emblem - if no image or an indep, draw a 6x6 box. X122. When designing, show size of feature in cells, when not designing, don't include 0-size features in lists. (Return size as third arg in feature info?) Recalc popup menu when switching in/out of feature design (also "goto" menu item, if ever implemented). X123. Extend mouseover to display construction info for unit types relative to current unit. X125. Precompute minimal transition pixmaps for each terrain type, use instead of clipped drawing. X126. Allow selection of enemy units (as preference?) draw outer line in red instead of white. X127. Allow designer to choose color/appearance of unit selection; inner frame, outer frame, colors for acp gone, asleep, etc. Also allow choice of highlight style - marquee, blink, blink unit, etc. X128. Add side colorization option for unit images. X130. In designer dialog, gray out side selection to exclude disallowed sides for the type. X131. Add a button (and control-click?) for firing. X132. Add an overlapped display option for unit stacks. X133. Use unit images to draw stack & occs in unit info pane. X134. Add toggle for auto-end-turn. X135. Don't allow linear types to be background when painting. X139. Add a sampling button for feature painting. X140. Fix the print command (result is too small). X141. Bring over spaced/large font feature name drawing from Xt interface. X143. Add a -i command option that controls indepside behavior. X144. Produce an immediate response - positive or negative - to every key or mouse input. X145. Xlast. --Macintosh Interface Mac11. Define and use an "erase-in-the-grid" procedure. Mac14. Ensure that "computer" and "face" icons updated when side info changes. Mac17. Change of map magnification should automatically set window to user state. (Is this possible? Finder changes window to user state when it gets too many icons to fit in rightsized zoomed window, but no mention of how to do this in IM.) Mac20. Save/restore window setup with Mac interface data, adjusting for possibility that game is restarting on a different size screen. Mac26. Check for events between every few rows of drawing, be able to abort or restart drawing if requested. Do by splitting offscreen calcs into small areas (rows ideally), checking events between each area. Mac28. Do mouse-based actions when mouse *released*. Mac31. Use drag of unit to indicate waypoints of a path, feedback with envelopes of route and only do waypoints when indicating points outside shortest route. Mac32. Be able to double-click in build dialog to set construction . Mac33. When laying out list window, precompute widths of columns using max/expected string widths for type names etc. Account for width of headers and desired spacing between columns. Mac35. Allow multiple units to be selected in list windows. Mac36. Express merge by dragging onto unit, express detach by supplying an amount in modal dialog (awkward, but rare?) Mac41. Add new construction-like dialog for material production. Mac42. Build routines to insert a string into a "field" of a list entry, instead of rebuilding entire entry. (generify list handling?) Mac44. Unhighlight forward/backward arrows when no units to look at. Consider eliminating altogether. Mac49. When listing units by location, add twist-down for occupants, group stack members with bar or some such. Mac50. Be able to draw more unit info on map window when at high mag powers. Do num parts/hp, mp/acp, in misc corners a la Empire Master. Mac54. To indicate available movement, change cursor to reflect accessibility and (ETA) or display in control panel or elsewhere on map. Mac55. Implement doctrine changes with dialogs examining doctrine objects. Mac58. Be able to hit key to bring up useful data while rubberbanding, or else have additional popup or use topline with this info. Useful data includes distance in cells, how much supply unit might need, etc. Mac73. Reduce amount of redrawing of unit list window. Mac88. Do variable-width formatting of lists in construction window, don't cut anything off short unless absolutely necessary. Mac93. Add TCP/IP as connection method for remote players. Mac96. If area has an image, display that instead of terrain/bords/conns. Mac99. Add display for standing orders. Mac103. For incomplete units, collect a mask and gray out only the masked area, or else when drawing incomplete, only draw 50% of its pixels. Mac104. Implement removal of players/sides at startup. Mac106. Draw a small unit icon in top unit info area. Mac107. Add a help button to construction dialog that connects to specific help screen. Mac108. Reorganize listing of info in construction dialog, use fixed-width columns set by maximum width. Mac110. Fix overrun menu item. Mac112. Implement up/down menu items. Mac116. Reduce multiple behavior flags to move/survey mode. Mac117. When saving on quit, bring up file selection dialog to specify save file name. Mac119. In construction dialog, only list types that the player's side can build. Mac120. In construction dialog, recalculate contents when constructing unit renamed. Mac121. In construction dialog, arrange top buttons as construct, run length, research, help. Mac122. Use same drawing algorithm for unit images in each kind of window. Mac123. Add a mode to IMFApp that displays each image separately. Mac125. Add a menu item for "Wake All". Mac126. Add unit type images to construction dialog. Mac127. Unify appearance/interaction with tcl/tk interface. Mac129. Implement side closeup, or remove menu option. Mac130. Remove separate Auto Jump Next option. Make Mac interface generally similar to tcl/tk interface. Mac131. Remove long-obsolete Think C support. Mac132. Maclast. --Windows Interface W5. Add program icon. W6. Implement terrain transition drawing. W7. Wlast. --Curses Interface C14. Allow putting up a legend to display chars (such as terrain type chars) in list area. Bring up via '/' or perhaps option to general help. C15. If can support, add getch() timeout so human can move immediately instead of waiting for mplayer to finish. Indicate that mplayer is "thinking" periodically, need kernel callback (?). C31. Implement up/down commands. (only do after command sets unified) C32. Fix unit list to update when units change. C33. Clast.