summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/bg_misc.c72
-rw-r--r--src/game/g_combat.c16
-rw-r--r--src/game/g_local.h2
-rw-r--r--src/game/g_main.c10
-rw-r--r--src/game/g_weapon.c2
-rw-r--r--src/game/tremulous.h20
6 files changed, 65 insertions, 57 deletions
diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c
index 53acd6e..9a8cef1 100644
--- a/src/game/bg_misc.c
+++ b/src/game/bg_misc.c
@@ -37,8 +37,8 @@ void trap_FS_FCloseFile( fileHandle_t f );
void trap_FS_Seek( fileHandle_t f, long offset, fsOrigin_t origin ); // fsOrigin_t
int trap_FS_GetFileList( const char *path, const char *extension, char *listbuf, int bufsize );
-#define STAGE_GE_5 ((1 << S5))
-#define STAGE_GE_4 ((1 << S4) | STAGE_GE_5)
+// #define STAGE_GE_5 ((1 << S5))
+#define STAGE_GE_4 (1 << S4)/* | STAGE_GE_5)*/
#define STAGE_GE_3 ((1 << S3) | STAGE_GE_4)
#define STAGE_GE_2 ((1 << S2) | STAGE_GE_3)
#define STAGE_GE_1 ((1 << S1) | STAGE_GE_2)
@@ -198,7 +198,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
BOOSTER_BP, //int buildPoints;
- STAGE_GE_3, //int stages
+ STAGE_GE_2, //int stages
BOOSTER_HEALTH, //int health;
BOOSTER_REGEN, //int regenRate;
BOOSTER_SPLASHDAMAGE, //int splashDamage;
@@ -232,7 +232,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
HIVE_BP, //int buildPoints;
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
HIVE_HEALTH, //int health;
HIVE_REGEN, //int regenRate;
HIVE_SPLASHDAMAGE, //int splashDamage;
@@ -300,7 +300,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0, //float bounce;
PANZER_MEDIUM_BP, //int buildPoints;
- STAGE_GE_3, //int stages
+ STAGE_GE_2, //int stages
PANZER_MEDIUM_HEALTH, //int health;
PANZER_MEDIUM_REGEN, //int regenRate;
PANZER_MEDIUM_SPLASHDAMAGE, //int splashDamage;
@@ -334,7 +334,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0, //float bounce;
PANZER_LARGE_BP, //int buildPoints;
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
PANZER_LARGE_HEALTH, //int health;
PANZER_LARGE_REGEN, //int regenRate;
PANZER_LARGE_SPLASHDAMAGE, //int splashDamage;
@@ -474,7 +474,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0, //float bounce;
NET_BP, //int buildPoints;
- STAGE_GE_3, //int stages
+ STAGE_GE_1, //int stages
NET_HEALTH, //int health;
NET_REGEN, //int regenRate;
NET_SPLASHDAMAGE, //int splashDamage;
@@ -547,7 +547,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0, //float bounce;
INFESTATION_SLIME_BP, //int buildPoints;
- STAGE_GE_5, //int stages
+ STAGE_GE_4, //int stages
INFESTATION_SLIME_HEALTH, //int health;
INFESTATION_SLIME_REGEN, //int regenRate;
INFESTATION_SLIME_SPLASHDAMAGE, //int splashDamage;
@@ -724,7 +724,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
SPITEFUL_ABCESS_BP, //int buildPoints;
- STAGE_GE_2, //int stages
+ STAGE_GE_1, //int stages
SPITEFUL_ABCESS_HEALTH, //int health;
SPITEFUL_ABCESS_REGEN, //int regenRate;
SPITEFUL_ABCESS_SPLASHDAMAGE, //int splashDamage;
@@ -760,7 +760,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0, //float bounce;
COCOON_BP, //int buildPoints;
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
COCOON_HEALTH, //int health;
COCOON_REGEN, //int regenRate;
COCOON_SPLASHDAMAGE, //int splashDamage;
@@ -794,7 +794,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
ORGANIC_BULB_BP, //int buildPoints;
- STAGE_GE_3, //int stages
+ STAGE_GE_1, //int stages
ORGANIC_BULB_HEALTH, //int health;
ORGANIC_BULB_REGEN, //int regenRate;
ORGANIC_BULB_SPLASHDAMAGE, //int splashDamage;
@@ -896,7 +896,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
CREEPCOLONY_BP, //int buildPoints;
- STAGE_GE_3, //int stages
+ STAGE_GE_2, //int stages
CREEPCOLONY_HEALTH, //int health;
CREEPCOLONY_REGEN, //int regenRate;
CREEPCOLONY_SPLASHDAMAGE, //int splashDamage;
@@ -1284,7 +1284,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
CONTAINER_MEDIUM_BP, //int buildPoints;
- STAGE_GE_3, //int stages
+ STAGE_GE_2, //int stages
CONTAINER_MEDIUM_HEALTH, //int health;
0, //int regenRate;
CONTAINER_MEDIUM_SPLASHDAMAGE, //int splashDamage;
@@ -1319,7 +1319,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
CONTAINER_LARGE_BP, //int buildPoints;
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
CONTAINER_LARGE_HEALTH, //int health;
0, //int regenRate;
CONTAINER_LARGE_SPLASHDAMAGE, //int splashDamage;
@@ -1599,7 +1599,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
SHIELD_BP, //int buildPoints;
- STAGE_GE_5, //int stages
+ STAGE_GE_4, //int stages
SHIELD_HEALTH, //int health;
0, //int regenRate;
SHIELD_SPLASHDAMAGE, //int splashDamage;
@@ -1634,7 +1634,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0, //float bounce;
LADDER_BP, //int buildPoints;
- STAGE_GE_3, //int stages
+ STAGE_GE_1, //int stages
LADDER_HEALTH, //int health;
0, //int regenRate;
LADDER_SPLASHDAMAGE, //int splashDamage;
@@ -1739,7 +1739,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
LIGHT_BP, //int buildPoints;
- STAGE_GE_5, //int stages
+ STAGE_GE_4, //int stages
LIGHT_HEALTH, //int health;
0, //int regenRate;
LIGHT_SPLASHDAMAGE, //int splashDamage;
@@ -1844,7 +1844,7 @@ static const buildableAttributes_t bg_buildableList[ ] =
TR_GRAVITY, //trType_t traj;
0.0, //float bounce;
REFINERY_BP, //int buildPoints;
- STAGE_GE_3, //int stages
+ STAGE_GE_2, //int stages
REFINERY_HEALTH, //int health;
0, //int regenRate;
REFINERY_SPLASHDAMAGE, //int splashDamage;
@@ -2320,7 +2320,7 @@ static const classAttributes_t bg_classList[ ] =
"The Advanced Marauder has all the abilities of the basic Marauder "
"with the addition of a zap attack that chains through other "
"adv. marauders and can explode mines.",
- STAGE_GE_3, //int stages
+ STAGE_GE_2, //int stages
LEVEL2_UPG_HEALTH, //int health;
0.0f, //float fallDamage;
LEVEL2_UPG_REGEN, //float regenRate;
@@ -2348,7 +2348,7 @@ static const classAttributes_t bg_classList[ ] =
"The Hummel is a flying alien with air pounce ability, "
"fast melee attacks and unlimited low damage shooting attack "
"that does not spread poison.",
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
LEVEL5_UPG_HEALTH, //int health;
0.0f, //float fallDamage;
LEVEL5_UPG_REGEN, //float regenRate;
@@ -2404,7 +2404,7 @@ static const classAttributes_t bg_classList[ ] =
"In addition to the basic Dragoon abilities, the Advanced "
"Dragoon has 3 barbs which may be used to attack humans "
"from a distance and it has a higher jump height.",
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
LEVEL3_UPG_HEALTH, //int health;
0.0f, //float fallDamage;
LEVEL3_UPG_REGEN, //float regenRate;
@@ -2433,7 +2433,7 @@ static const classAttributes_t bg_classList[ ] =
"This class can also charge at enemy players and structures, "
"inflicting great damage. Any humans caught under a falling "
"Tyrant will be crushed by its weight.",
- STAGE_GE_5, //int stages
+ STAGE_GE_4, //int stages
LEVEL4_HEALTH, //int health;
0.0f, //float fallDamage;
LEVEL4_REGEN, //float regenRate;
@@ -2485,7 +2485,7 @@ static const classAttributes_t bg_classList[ ] =
PCL_HUMAN_BSUIT, //int classnum;
"human_bsuit", //char *classname;
"",
- STAGE_GE_5, //int stages
+ STAGE_GE_4, //int stages
100, //int health;
1.0f, //float fallDamage;
0.0f, //float regenRate;
@@ -3068,7 +3068,7 @@ static const weaponAttributes_t bg_weapons[ ] =
{
WP_ALEVEL2_UPG, //int weaponNum;
0, //int price;
- STAGE_GE_3, //int stages
+ STAGE_GE_2, //int stages
SLOT_WEAPON, //int slots;
"level2upg", //char *weaponName;
"Zap", //char *humanName;
@@ -3093,7 +3093,7 @@ static const weaponAttributes_t bg_weapons[ ] =
{
WP_ALEVEL5, //int weaponNum;
0, //int price;
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
SLOT_WEAPON, //int slots;
"level5", //char *weaponName;
"prickles", //char *humanName;
@@ -3143,7 +3143,7 @@ static const weaponAttributes_t bg_weapons[ ] =
{
WP_ALEVEL3_UPG, //int weaponNum;
0, //int price;
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
SLOT_WEAPON, //int slots;
"level3upg", //char *weaponName;
"Pounce (upgrade)", //char *humanName;
@@ -3168,7 +3168,7 @@ static const weaponAttributes_t bg_weapons[ ] =
{
WP_ALEVEL4, //int weaponNum;
0, //int price;
- STAGE_GE_5, //int stages
+ STAGE_GE_4, //int stages
SLOT_WEAPON, //int slots;
"level4", //char *weaponName;
"Charge", //char *humanName;
@@ -3405,7 +3405,7 @@ static const weaponAttributes_t bg_weapons[ ] =
{
WP_PULSE_RIFLE, //int weaponNum;
PRIFLE_PRICE, //int price;
- STAGE_GE_4, //int stages
+ STAGE_GE_2, //int stages
SLOT_WEAPON, //int slots;
"prifle", //char *weaponName;
"[yefarms]Pulse Rifle", //char *humanName;
@@ -3430,7 +3430,7 @@ static const weaponAttributes_t bg_weapons[ ] =
{
WP_LIGHTNING_GUN, //int weaponNum;
LIGHTNING_PRICE, //int price;
- STAGE_GE_5, //int stages
+ STAGE_GE_3, //int stages
SLOT_WEAPON, //int slots;
"lightning", //char *weaponName;
"[yefarms]Lightning Gun", //char *humanName;
@@ -3455,7 +3455,7 @@ static const weaponAttributes_t bg_weapons[ ] =
{
WP_LUCIFER_CANNON, //int weaponNum;
LCANNON_PRICE, //int price;
- STAGE_GE_5, //int stages
+ STAGE_GE_4, //int stages
SLOT_WEAPON, //int slots;
"lcannon", //char *weaponName;
"[yefarms]Lucifer Cannon", //char *humanName;
@@ -3482,7 +3482,7 @@ static const weaponAttributes_t bg_weapons[ ] =
{
WP_ROCKET_LAUNCHER, //int weaponNum;
ROCKETL_PRICE, //int price;
- STAGE_GE_5, //int stages
+ STAGE_GE_4, //int stages
SLOT_WEAPON, //int slots;
"rocketl", //char *weaponName;
"[yefarms]Rocket Launcher", //char *humanName;
@@ -3507,7 +3507,7 @@ static const weaponAttributes_t bg_weapons[ ] =
{
WP_GRENADE, //int weaponNum;
0, //int price;
- STAGE_GE_1, //int stages
+ STAGE_GE_3, //int stages
0, //int slots;
"grenade", //char *weaponName;
"[yenade]Grenades", //char *humanName;
@@ -3747,7 +3747,7 @@ static const upgradeAttributes_t bg_upgrades[ ] =
{
UP_HELMET, //int upgradeNum;
HELMET_PRICE, //int price;
- STAGE_GE_3, //int stages
+ STAGE_GE_2, //int stages
SLOT_HEAD, //int slots;
"helmet", //char *upgradeName;
"[yeshield]Helmet", //char *humanName;
@@ -3804,7 +3804,7 @@ static const upgradeAttributes_t bg_upgrades[ ] =
{
UP_JETPACK, //int upgradeNum;
JETPACK_PRICE, //int price;
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
SLOT_BACKPACK, //int slots;
"jetpack", //char *upgradeName;
"[yejet]Jet Pack", //char *humanName;
@@ -3819,7 +3819,7 @@ static const upgradeAttributes_t bg_upgrades[ ] =
{
UP_BATTLESUIT, //int upgradeNum;
BSUIT_PRICE, //int price;
- STAGE_GE_5, //int stages
+ STAGE_GE_4, //int stages
SLOT_HEAD|SLOT_TORSO|SLOT_ARMS|SLOT_LEGS|SLOT_BACKPACK, //int slots;
"bsuit", //char *upgradeName;
"[yeshield]Battlesuit", //char *humanName;
@@ -3834,7 +3834,7 @@ static const upgradeAttributes_t bg_upgrades[ ] =
{
UP_GRENADE, //int upgradeNum;
GRENADE_PRICE, //int price;
- STAGE_GE_4, //int stages
+ STAGE_GE_3, //int stages
SLOT_NONE, //int slots;
"gren", //char *upgradeName;
"[yenade]Grenade", //char *humanName;
diff --git a/src/game/g_combat.c b/src/game/g_combat.c
index 397bde0..f703d83 100644
--- a/src/game/g_combat.c
+++ b/src/game/g_combat.c
@@ -191,30 +191,32 @@ float G_CamperRewardBonus( gentity_t *self )
return 1.0f;
}
+#define REWARDPOWER(x) pow((float)(x),g_RewardFactorPower.value)
+#define REWARDSCALE(a,b) (((a) > 0.0f && (b) > 0.0f) ? (a)/(b) : 1.0f)
+#define REWARDFACTOR(a,b) MIN(MAX(REWARDSCALE(REWARDPOWER(a),REWARDPOWER(b)),g_MinRewardFactor.value),g_MaxRewardFactor.value)
float G_RewardScaleFactor( gentity_t *self, gentity_t *target )
{
float targetScore;
if( level.humanRewardScore <= 0.0f || level.alienRewardScore <= 0.0f ) return 1.0f;
switch( self->client->ps.stats[ STAT_TEAM ] ) {
case TEAM_ALIENS:
- targetScore = level.humanRewardScore/level.alienRewardScore;
+ targetScore = g_TeamRewardFactor.value*REWARDFACTOR(level.humanRewardScore,level.alienRewardScore);
break;
case TEAM_HUMANS:
- targetScore = level.alienRewardScore/level.humanRewardScore;
+ targetScore = g_TeamRewardFactor.value*REWARDFACTOR(level.alienRewardScore,level.humanRewardScore);
break;
default:
return 0.0f;
}
if ( target->client != NULL ) {
- if( self->client->ps.persistant[ PERS_SCORE ] > 0 && target->client->ps.persistant[ PERS_SCORE ] > 0)
- targetScore *= pow(target->client->ps.persistant[ PERS_SCORE ],g_RewardFactorPower.value)/pow(self->client->ps.persistant[ PERS_SCORE ],g_RewardFactorPower.value);
+ targetScore += g_PlayerRewardFactor.value*REWARDFACTOR(target->client->ps.persistant[ PERS_SCORE ],self->client->ps.persistant[ PERS_SCORE ]);
}
- targetScore *= 1.0f-g_ConstantRewardFactor.value;
targetScore += g_ConstantRewardFactor.value;
- if (targetScore < g_MinRewardFactor.value) targetScore = g_MinRewardFactor.value;
- else if (targetScore > g_MaxRewardFactor.value) targetScore = g_MaxRewardFactor.value;
return targetScore;
}
+#undef REWARDFACTOR
+#undef REWARDSCALE
+#undef REWARDPOWER
/* Instantly reward the current attacker */
float G_InstantRewardAttacker( gentity_t *self, gentity_t *target, float damage )
diff --git a/src/game/g_local.h b/src/game/g_local.h
index c968642..961bb15 100644
--- a/src/game/g_local.h
+++ b/src/game/g_local.h
@@ -1350,6 +1350,8 @@ extern vmCvar_t g_InstantRewardMultiplierH;
extern vmCvar_t g_KillRewardMultiplierA;
extern vmCvar_t g_KillRewardMultiplierH;
extern vmCvar_t g_ConstantRewardFactor;
+extern vmCvar_t g_TeamRewardFactor;
+extern vmCvar_t g_PlayerRewardFactor;
extern vmCvar_t g_MinRewardFactor;
extern vmCvar_t g_MaxRewardFactor;
extern vmCvar_t g_RewardFactorPower;
diff --git a/src/game/g_main.c b/src/game/g_main.c
index 2923ff3..65cdf87 100644
--- a/src/game/g_main.c
+++ b/src/game/g_main.c
@@ -187,6 +187,8 @@ vmCvar_t g_InstantRewardMultiplierH;
vmCvar_t g_KillRewardMultiplierA;
vmCvar_t g_KillRewardMultiplierH;
vmCvar_t g_ConstantRewardFactor;
+vmCvar_t g_TeamRewardFactor;
+vmCvar_t g_PlayerRewardFactor;
vmCvar_t g_MinRewardFactor;
vmCvar_t g_MaxRewardFactor;
vmCvar_t g_RewardFactorPower;
@@ -362,9 +364,11 @@ static cvarTable_t gameCvarTable[ ] =
{ &g_InstantRewardMultiplierH, "g_InstantRewardMultiplierH", "1", CVAR_ARCHIVE, 0, qfalse },
{ &g_KillRewardMultiplierA, "g_KillRewardMultiplierA", "1", CVAR_ARCHIVE, 0, qfalse },
{ &g_KillRewardMultiplierH, "g_KillRewardMultiplierH", "1", CVAR_ARCHIVE, 0, qfalse },
- { &g_ConstantRewardFactor, "g_ConstantRewardFactor", "0", CVAR_ARCHIVE, 0, qfalse },
- { &g_MinRewardFactor, "g_MinRewardFactor", "0.2", CVAR_ARCHIVE, 0, qfalse },
- { &g_MaxRewardFactor, "g_MaxRewardFactor", "5.0", CVAR_ARCHIVE, 0, qfalse },
+ { &g_ConstantRewardFactor, "g_ConstantRewardFactor", "0.2", CVAR_ARCHIVE, 0, qfalse },
+ { &g_TeamRewardFactor, "g_TeamRewardFactor", "0.6", CVAR_ARCHIVE, 0, qfalse },
+ { &g_PlayerRewardFactor, "g_PlayerRewardFactor", "0.2", CVAR_ARCHIVE, 0, qfalse },
+ { &g_MinRewardFactor, "g_MinRewardFactor", "0.33", CVAR_ARCHIVE, 0, qfalse },
+ { &g_MaxRewardFactor, "g_MaxRewardFactor", "3.0", CVAR_ARCHIVE, 0, qfalse },
{ &g_RewardFactorPower, "g_RewardFactorPower", "0.3025", CVAR_ARCHIVE, 0, qfalse },
{ &g_TimerPeriod, "g_TimerPeriod", "0", CVAR_ARCHIVE, 0, qfalse },
{ &g_TimerCommand, "g_TimerCommand", "", CVAR_ARCHIVE, 0, qfalse },
diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c
index 265358a..3bf9f92 100644
--- a/src/game/g_weapon.c
+++ b/src/game/g_weapon.c
@@ -1658,7 +1658,7 @@ void FireWeapon3( gentity_t *ent )
break;
case WP_MASS_DRIVER:
- if(g_humanStage.integer == S5 && BG_InventoryContainsUpgrade( UP_BATTPACK, ent->client->ps.stats ))
+ if(g_humanStage.integer == S4 && BG_InventoryContainsUpgrade( UP_BATTPACK, ent->client->ps.stats ))
{
massDriverFire2( ent );
}
diff --git a/src/game/tremulous.h b/src/game/tremulous.h
index 9a7a8c8..b00f1cd 100644
--- a/src/game/tremulous.h
+++ b/src/game/tremulous.h
@@ -38,18 +38,18 @@ TREMULOUS EDGE MOD SRC FILE
#define FREEKILL_HUMAN LEVEL0_VALUE
#define DEFAULT_ALIEN_BUILDPOINTS "150"
#define DEFAULT_ALIEN_QUEUE_TIME "12000"
-#define DEFAULT_ALIEN_STAGE2_THRESH "6000"
-#define DEFAULT_ALIEN_STAGE3_THRESH "12000"
-#define DEFAULT_ALIEN_STAGE4_THRESH "18000"
-#define DEFAULT_ALIEN_STAGE5_THRESH "24000"
-#define DEFAULT_ALIEN_MAX_STAGE "4"
+#define DEFAULT_ALIEN_STAGE2_THRESH "10000"
+#define DEFAULT_ALIEN_STAGE3_THRESH "18000"
+#define DEFAULT_ALIEN_STAGE4_THRESH "32000"
+#define DEFAULT_ALIEN_STAGE5_THRESH "48000"
+#define DEFAULT_ALIEN_MAX_STAGE "3"
#define DEFAULT_HUMAN_BUILDPOINTS "150"
#define DEFAULT_HUMAN_QUEUE_TIME "8000"
-#define DEFAULT_HUMAN_STAGE2_THRESH "3000"
-#define DEFAULT_HUMAN_STAGE3_THRESH "6000"
-#define DEFAULT_HUMAN_STAGE4_THRESH "9000"
-#define DEFAULT_HUMAN_STAGE5_THRESH "12000"
-#define DEFAULT_HUMAN_MAX_STAGE "4"
+#define DEFAULT_HUMAN_STAGE2_THRESH "5000"
+#define DEFAULT_HUMAN_STAGE3_THRESH "9000"
+#define DEFAULT_HUMAN_STAGE4_THRESH "16000"
+#define DEFAULT_HUMAN_STAGE5_THRESH "24000"
+#define DEFAULT_HUMAN_MAX_STAGE "3"
#define DAMAGE_FRACTION_FOR_KILL 0.5f //how much damage players (versus structures) need to
#define MAXIMUM_BUILD_TIME 30000 // used for pie timer