Great work. Thank you.
Currently, I'm writing PERL scripts to create the game file, but will try this. Drawing feathers on dinosaurs is exhausting.
I like the production swapping because evolution will be sequential. Do rule changes disturb order in the purchase menu? (ie. remove then add to end, which changes location.)
I was about to post a request for a hashavehadResource checker. Was reading some of your passed conversations. How did that resolve? Is there a method for checking the status of another player's Fuel (for example) and using that as a condition? If not ... I'll use units (isInfrastructure) placed into capitals to note the evolution, and keep adding with each round until the grant condition triggers. Can also place hidden units into impassible territories to record other items in conjunction with unitPresence.
This is my ugly hack for creating a TIMER (untested, just sketching), to be activated when a player buys an evolution like feathers, then nests, ... and so on. The TIMER is meant to give ALL players the evolution due to gene pool contamination. Thus, allowing all players to keep up. The buyer gets a 6 round head start (as sketched), but other players can also buy. So, first clock must turn off all other clocks and granting the evolution cannot de-evolve a player if they've already moved on to the next.
<attachment name="conditionAttachmentHettangianE1" attachTo="Hettangian" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player">
<option name="directPresenceTerritories" value="map" count="1"/>
<option name="unitPresence" value="feathers" count="1"/>
</attachment>
<attachment name="triggerAttachmentHettangianE1" attachTo="Hettangian" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player">
<option name="conditions" value="conditionAttachmentHettangianE1"/>
<option name="when" value="after:HettangianPlace"/>
<option name="frontier" value="productionHettangianE1"/>
<option name="removeUnits" value="all:feathers" count="1"/>
<option name="placement" value="HCapital:HEFeather" count="1"/>
<option name="uses" value="1"/>
</attachment>
<attachment name="conditionAttachmentHettangianE1timer" attachTo="Hettangian" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player">
<option name="directPresenceTerritories" value="HCapital" count="1"/>
<option name="unitPresence" value="HEfeather" count="1"/>
</attachment>
<attachment name="triggerAttachmentHettangianE1timer" attachTo="Hettangian" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player">
<option name="conditions" value="conditionAttachmentHettangianE1timer"/>
<option name="when" value="before:HettangianPlace"/>
<option name="placement" value="HCapital:HEFeather" count="1"/>
<option name="uses" value="5"/>
</attachment>
<attachment name="conditionAttachmentHettangianE1done" attachTo="Hettangian" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player">
<option name="directPresenceTerritories" value="HCapital" count="1"/>
<option name="unitPresence" value="HEfeather" count="6"/>
</attachment>
<attachment name="triggerAttachmentHettangianE1done" attachTo="Hettangian" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player">
<option name="conditions" value="conditionAttachmentHettangianE1done"/>
<option name="when" value="before:HettangianPlace"/>
<option name="activateTrigger" value="triggerAttachmentE1giveall:1:false:false:false:false"/>
<option name="uses" value="1"/>
</attachment>
<attachment name="triggerAttachmentE1giveall" attachTo="Hettangian:Sinemurian:Toarcian" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player">
<option name="activateTrigger" value="triggerAttachmentHettangianE1grant:1:false:false:false:false"/>
<option name="activateTrigger" value="triggerAttachmentSinemurianE1grant:1:false:false:false:false"/>
<option name="activateTrigger" value="triggerAttachmentToarcianE1grant:1:false:false:false:false"/>
<option name="uses" value="1"/>
</attachment>
<attachment name="conditionAttachmentHettangianE1grant" attachTo="Hettangian" javaClass="games.strategy.triplea.attachments.RulesAttachment" type="player">
<option name="directPresenceTerritories" value="HCapital" count="1"/>
<option name="unitPresence" value="HEnest" count="1"/>
</attachment>
<attachment name="triggerAttachmentHettangianE1grant" attachTo="Hettangian" javaClass="games.strategy.triplea.attachments.TriggerAttachment" type="player">
<option name="conditions" value="conditionAttachmentHettangianE1grant"/>
<option name="invert" value="true"/>
<option name="frontier" value="productionHettangianE1"/>
<option name="removeUnits" value="all:HEfeathers" count="9999"/>
<option name="placement" value="HCapital:HEFeather" count="1"/>
<option name="uses" value="1"/>
</attachment>
To turn off all player feather clocks, the grant trigger can via [placement] a different HEGFeather unit to display instead of HEFeather used by the conditions, for example. Also, use that unit's presence instead of the next evolution (ie nests) to prevent de-evolving the player. This would be replicated for each player and evolution. Since these clock units are auto-placed by the triggers into capitals, one unit type for all should work. Thus, NoFeather (hidden, transparent) --> feather --> clockFeather --> hashavehadFeather.
Current plan is ordered evolutionary path, but 'granters' can check all evolutions and set production frontiers (or build up piecemeal by rules) via other conditions/triggers. This way future alliances can buy different evolutions, with maybe added clock delays to promote alliance inheritance first.
Good, Bad, Ugly?