(
http://superpie.org/patches/domination/ - patches for revision 2 and newer are in below post)
The primary aim of domination is to fix camping. It works by rewarding players who don't stay in their base when it isn't necessary and capture "domination points". The goal is to put campers at a disadvantage to those who are rewarded for capturing domination points, which can only be captured by leaving their base; and to "eliminate the 'Sudden Death' hack".
Domination points, also referred to as control points, are entities that can be built by a construction kit during devmap mode. When the layout is saved, the control points that were built are contained in the layout. When that layout is loaded with the level, the domination points are spawned in the same positions they were created. Whenever zero domination points exist, gameplay is unchanged.
(It should be noted that there is currently a quirk with point building: when you select a point ghost, all the buildables and points will appear to disappear, and will remain in that state until you cancel the blueprint ghost of (perhaps another) point.) In the future, mappers should be able place domination points directly in their map, as they can with any buildable (work has already been done to place location entities in older maps that originally did not have them).
Domination points can be captured by members of either team by running over them. In non-instant domination, domination points take time to recapture. Each player of a team has equal weight; multiple players will capture a point quicker. With the current settings, humans capture in non-instant domination slightly faster than aliens.
Control points can currently affect some things (gameplay is the same otherwise: a team wins by destroying the enemy team's spawns and players):
// better or worse by 50% * scale
#define DOMINATION_ALIEN_BP_SCALE 0.95f
#define DOMINATION_HUMAN_BP_SCALE 0.6f
#define DOMINATION_ALIEN_BPQUEUE_SCALE 1.0f
#define DOMINATION_HUMAN_BPQUEUE_SCALE 1.0f
#define DOMINATION_ALIEN_FREEFUNDS_SCALE 1.5f
#define DOMINATION_HUMAN_FREEFUNDS_SCALE 1.0f
#define DOMINATION_ALIEN_BUILDTIMER_SCALE 1.0f
#define DOMINATION_HUMAN_BUILDTIMER_SCALE 0.75f
#define DOMINATION_ALIEN_HEAL_SCALE 1.0f
#define DOMINATION_HUMAN_MEDI_HEAL_SCALE 2.0f
#define DOMINATION_HUMAN_MEDK_STARTUP_TIME_SCALE 2.0f
#define DOMINATION_POISON_DMG_SCALE 0.5f
#define DOMINATION_POISON_TIME_SCALE 1.0f
#define DOMINATION_BOOST_TIME_SCALE 1.0f
#define DOMINATION_POISON_CLOUD_TIME_SCALE 0.9f
#define INSTANT_DOMINATION_ALIEN_BP_SCALE 0.95f
#define INSTANT_DOMINATION_HUMAN_BP_SCALE 0.6f
#define INSTANT_DOMINATION_ALIEN_BPQUEUE_SCALE 1.0f
#define INSTANT_DOMINATION_HUMAN_BPQUEUE_SCALE 1.0f
#define INSTANT_DOMINATION_ALIEN_FREEFUNDS_SCALE 1.5f
#define INSTANT_DOMINATION_HUMAN_FREEFUNDS_SCALE 1.0f
#define INSTANT_DOMINATION_ALIEN_BUILDTIMER_SCALE 1.0f
#define INSTANT_DOMINATION_HUMAN_BUILDTIMER_SCALE 0.75f
#define INSTANT_DOMINATION_ALIEN_HEAL_SCALE 2.0f
#define INSTANT_DOMINATION_HUMAN_MEDI_HEAL_SCALE 2.0f
#define INSTANT_DOMINATION_HUMAN_MEDK_STARTUP_TIME_SCALE 2.0f
#define INSTANT_DOMINATION_POISON_DMG_SCALE 0.5f
#define INSTANT_DOMINATION_POISON_TIME_SCALE 1.0f
#define INSTANT_DOMINATION_BOOST_TIME_SCALE 1.0f
#define INSTANT_DOMINATION_POISON_CLOUD_TIME_SCALE 0.9f
They can be temporary disabled by setting the scale values to 0.
[Domination point D captured by aliens with a few tubes around it]I expect and hope that most of these will probably be disabled or removed, especially the more obscure ones; and that every setting will at least be changed. These values were chosen rather arbitrarily; I have not been able to test much because of lack of players. In hindsight, it changed more than it probably should have, and I don't remember why the human healing settings were set so high.
An idea that I've wanted to try is that queue time is to make the only setting affected by the number of control points captured the BP queue, where, perhaps, the BP return rate could be increased or decreased linearly completely by 100%; in other words, if the enemy has all the points captured, the camping team's queue would not return any points at all, and the team would be rewarded for going out of their base and capturing points even if they aren't building at the time since they'd get their points back; in addition to the small amount of funds awarded for capturing a point (even less in instant domination; this setting can be changed in the Domination section of tremulous.h); it is hoped that it is enough motivation to deter campers and punish them so that staying in their base and not capturing points will be to their disadvantage. A team whose players never leave their base even at the more inactive times will be more vulnerable to attack, assuming that the other team doesn't also camp in their base and instead captures the control points. But there is a problem: if the aliens lack resources; perhaps because either they've used them to attack the other team or the game has begun; they will be unable to fight against a camping human team, even though they can't get build points returned from destroyed buildables, because the aliens aren't able to destroy them without funds. A solution is to make control points affect funds: a static one-time reward for the individual player who captured the points, and a faster free fund rate for the more aggressive team. A balance is needed (which these current settings clearly lack; this will hopefully change): if the effects are too much, games will be too fragile end too quickly, as teams will be less able to defend their base when they really need to, which is when the enemy is attacking.
There are two settings of Domination (besides its being off completely when no domination points are spawned): instant domination and non-instant domination. Either setting may eventually be removed. Some servers might enable changing this setting on map-change by vote. Instant might be appropriate for smaller games, and non-instant otherwise; but I haven't played enough to be sure. A possible idea is to make capture time proportional to the size of each team (which might even make unequal team sizes fairer).
Layouts that contain domination points but are otherwise identical are traditionally named "dom", but the name of the layout is not important.
I've attached a patch that contains, in addition to the models, source, configs, etc., very untested "dom" layouts for the following maps:
1984b4 cruz-b2 niveus transit
ancient_remains_1-0 fap outpost_p4_beta4 tremor
arachnid2 gloom2beta2 procyon-r1 uncreation
atcs karith sectorb17 utcs
atcs3 metro-b1-2 sokolov-1.0 utcsb2
atcszalpha nano temple veddak-final
atcszalpha-b2 nexus6 thanatos_b3
Sudden death is disabled in domination!
A few other minor things to note: When a point is captured, it behaves as a free repeater with its own zone for the team who captured it (this behaviour can be changed in the future if there is ever a need). It is also forbidden to build a reactor or overmind too close to a domination point, because if a team's base is too close to a point, then they will be able to camp it with the aid of their base, defeating the purpose of domination for that control point. There might be a need for a more elaborate method to prevent building in areas too close to domination points (perhaps the reactor/om must be visible from the point). Of course, every map has areas that are more advantageous to build in than others, which the enemy team should make an effort to avoid; but it shouldn't be too easy for a team to build a too advantageous spot. In non-instant domination, buildables currently have a small weight, so repeaters or eggs can be built near a point (not directly in the center of it) or other buildables if there is outside power to help capture it, making building more fun. If buildables have been built near an already captured point, the point will recover faster when the enemy fails to clear it completely. In instant domination, buildables also have a small amount of weight, further adding to the benefits of building. But in instant domination, it's a little bit different: the buildables will need to be built somewhat close to the point (and, once again, not right in the center) to make an effect; if they are too far away, a player can walk over the point without having to destroy your buildable, and then it will be unpowered or blow up without alien creep. The distance for buildables can be changed for balance, and their weight can even be disabled completely. The current short distance keeps them from being too obtrusive or obnoxious.
In the future there might be "timer" functionality in which a timer starts from an arbitrary setting and something happens when it reaches 0, such as the reactor/om being destroyed, the team losing (not fun in my opinion), or something; the timer might or might not be reset. At the present, nothing extra special happens when your team has all the points captured besides the settings mentioned earlier (which should already have a big impact, for the better).
Repeaters were originally a special case for build point zones. Instead of also treating domination points specially, I've generalized the BP zone code. The new "zone" flag defined in the buildableAttributes structure is set to true for repeaters and domination points. The cvars "g_humanRepeaterBuildPoints", "g_humanRepeaterBuildQueueTime", and "g_humanRepeaterMaxZones" have thus been renamed to "g_zoneHumanBuildPoints", "g_zoneHumanBuildQueueTime", "g_zoneAlienBuildPoints", "g_zoneAlienBuildQueueTime" (all four of which were originally two settings not split by team), and "g_zoneMax".
These cvars and commands have also been added:
g_instantDomination: Instant domination setting. This can be set in "server.cfg" for an initial setting.
g_nextInstantDomination: "callvote instant_domination" sets this; its value is checked on map load, g_instantDomination is set to that value if it isn't empty, and g_nextInstantDomination is cleared
g_disableDomination: If this is set, domination points won't be spawned. Layouts that contain domination points can still be loaded, but the domination points won't be loaded, so gameplay will be unchanged by domination.
g_disableVoteInstantDomination: Enable or disable calling a vote to change instant domination setting on map-change.
g_zoneHumanBuildPoints: Number of build points that a human BP zone will provide to the human team (this value itself could be changed based on the number of points the team has captured, depending on the balance settings).
g_zoneHumanBuildQueueTime: In ms.
g_zoneAlienBuildPoints: Number of build points that an alien BP zone will provide to the alien team.
g_zoneAlienBuildQueueTime: In ms.
g_zoneMax: This setting primarily exists for memory management, and usually shouldn't be changed. It should be reasonable high; the default is 512. This doesn't prevent new buildables from being built; it caps the number of allocated zones.
callvote instant_domination 0: if g_disableVoteInstantDomination is not enabled, call a vote to turn instant domination off for the next game (still needs to be added to the UI)
callvote instant_domination 1: if g_disableVoteInstantDomination is not enabled, call a vote to turn instant domination on for the next game (still needs to be added to the UI)
Settings for "g_humanRepeaterBuildPoints", "g_humanRepeaterBuildQueueTime" and "g_humanRepeaterMaxZones" should be changed in server.cfg, since they've been renamed.
The effectiveness of the placement of the points in these layouts has not been able to be determine, and most of the newer ones have not been extensively (or much at all) tested, so suggestions and contributions are, of course, welcome.
Thanks Risujin, for the
original implementation and idea. I've since ported it to be compatible with the most recent code and rewrote and cleaned up a lot of it.
Update: Settings have been updated (most disabled):
// better or worse by 50% * scale
#define DOMINATION_ALIEN_BP_SCALE 0.4f
#define DOMINATION_HUMAN_BP_SCALE 0.25f
#define DOMINATION_ALIEN_INV_BPQUEUE_SCALE 2.0f
#define DOMINATION_HUMAN_INV_BPQUEUE_SCALE 2.0f
#define DOMINATION_ALIEN_FREEFUNDS_SCALE 2.5f
#define DOMINATION_HUMAN_FREEFUNDS_SCALE 1.5f
#define DOMINATION_ALIEN_BUILDTIMER_SCALE 0.0f
#define DOMINATION_HUMAN_BUILDTIMER_SCALE 0.0f
#define DOMINATION_ALIEN_HEAL_SCALE 1.0f
#define DOMINATION_HUMAN_MEDI_HEAL_SCALE 0.0f
#define DOMINATION_HUMAN_MEDK_STARTUP_TIME_SCALE 0.0f
#define DOMINATION_POISON_DMG_SCALE 0.0f
#define DOMINATION_POISON_TIME_SCALE 0.0f
#define DOMINATION_BOOST_TIME_SCALE 0.0f
#define DOMINATION_POISON_CLOUD_TIME_SCALE 0.0f
#define INSTANT_DOMINATION_ALIEN_BP_SCALE 0.4f
#define INSTANT_DOMINATION_HUMAN_BP_SCALE 0.25f
#define INSTANT_DOMINATION_ALIEN_INV_BPQUEUE_SCALE 2.0f
#define INSTANT_DOMINATION_HUMAN_INV_BPQUEUE_SCALE 2.0f
#define INSTANT_DOMINATION_ALIEN_FREEFUNDS_SCALE 2.5f
#define INSTANT_DOMINATION_HUMAN_FREEFUNDS_SCALE 1.5f
#define INSTANT_DOMINATION_ALIEN_BUILDTIMER_SCALE 0.0f
#define INSTANT_DOMINATION_HUMAN_BUILDTIMER_SCALE 0.0f
#define INSTANT_DOMINATION_ALIEN_HEAL_SCALE 1.0f
#define INSTANT_DOMINATION_HUMAN_MEDI_HEAL_SCALE 0.0f
#define INSTANT_DOMINATION_HUMAN_MEDK_STARTUP_TIME_SCALE 0.0f
#define INSTANT_DOMINATION_POISON_DMG_SCALE 0.0f
#define INSTANT_DOMINATION_POISON_TIME_SCALE 0.0f
#define INSTANT_DOMINATION_BOOST_TIME_SCALE 0.0f
#define INSTANT_DOMINATION_POISON_CLOUD_TIME_SCALE 0.0f