diff options
Diffstat (limited to 'src/game')
-rw-r--r-- | src/game/bg_misc.c | 297 | ||||
-rw-r--r-- | src/game/bg_pmove.c | 56 | ||||
-rw-r--r-- | src/game/bg_public.h | 4 | ||||
-rw-r--r-- | src/game/g_active.c | 17 | ||||
-rw-r--r-- | src/game/g_buildable.c | 113 | ||||
-rw-r--r-- | src/game/g_combat.c | 22 | ||||
-rw-r--r-- | src/game/g_local.h | 13 | ||||
-rw-r--r-- | src/game/g_main.c | 79 | ||||
-rw-r--r-- | src/game/g_missile.c | 154 | ||||
-rw-r--r-- | src/game/g_weapon.c | 23 | ||||
-rw-r--r-- | src/game/tremulous.h | 26 |
11 files changed, 559 insertions, 245 deletions
diff --git a/src/game/bg_misc.c b/src/game/bg_misc.c index e402982..71f5507 100644 --- a/src/game/bg_misc.c +++ b/src/game/bg_misc.c @@ -37,6 +37,12 @@ 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_3 ((1 << S3) | STAGE_GE_4) +#define STAGE_GE_2 ((1 << S2) | STAGE_GE_3) +#define STAGE_GE_1 ((1 << S1) | STAGE_GE_2) + static const buildableAttributes_t bg_buildableList[ ] = { //ALIEN BUILDINGS @@ -51,7 +57,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; ASPAWN_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages ASPAWN_HEALTH, //int health; ASPAWN_REGEN, //int regenRate; ASPAWN_SPLASHDAMAGE, //int splashDamage; @@ -86,7 +92,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; OVERMIND_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages OVERMIND_HEALTH, //int health; OVERMIND_REGEN, //int regenRate; OVERMIND_SPLASHDAMAGE, //int splashDamage; @@ -121,7 +127,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; BARRICADE_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages BARRICADE_HEALTH, //int health; BARRICADE_REGEN, //int regenRate; BARRICADE_SPLASHDAMAGE,//int splashDamage; @@ -156,7 +162,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; ACIDTUBE_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages ACIDTUBE_HEALTH, //int health; ACIDTUBE_REGEN, //int regenRate; ACIDTUBE_SPLASHDAMAGE, //int splashDamage; @@ -191,7 +197,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; TRAPPER_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages TRAPPER_HEALTH, //int health; TRAPPER_REGEN, //int regenRate; TRAPPER_SPLASHDAMAGE, //int splashDamage; @@ -227,7 +233,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; BOOSTER_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages BOOSTER_HEALTH, //int health; BOOSTER_REGEN, //int regenRate; BOOSTER_SPLASHDAMAGE, //int splashDamage; @@ -261,7 +267,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; HIVE_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_4, //int stages HIVE_HEALTH, //int health; HIVE_REGEN, //int regenRate; HIVE_SPLASHDAMAGE, //int splashDamage; @@ -295,7 +301,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; PANZER_SMALL_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages PANZER_SMALL_HEALTH, //int health; PANZER_SMALL_REGEN, //int regenRate; PANZER_SMALL_SPLASHDAMAGE, //int splashDamage; @@ -329,7 +335,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; PANZER_MEDIUM_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages PANZER_MEDIUM_HEALTH, //int health; PANZER_MEDIUM_REGEN, //int regenRate; PANZER_MEDIUM_SPLASHDAMAGE, //int splashDamage; @@ -363,7 +369,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; PANZER_LARGE_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_4, //int stages PANZER_LARGE_HEALTH, //int health; PANZER_LARGE_REGEN, //int regenRate; PANZER_LARGE_SPLASHDAMAGE, //int splashDamage; @@ -397,7 +403,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; TENDON_SMALL_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages TENDON_SMALL_HEALTH, //int health; TENDON_SMALL_REGEN, //int regenRate; TENDON_SMALL_SPLASHDAMAGE, //int splashDamage; @@ -432,7 +438,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; TENDON_MEDIUM_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages TENDON_MEDIUM_HEALTH, //int health; TENDON_MEDIUM_REGEN, //int regenRate; TENDON_MEDIUM_SPLASHDAMAGE, //int splashDamage; @@ -467,7 +473,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; TENDON_LARGE_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_3, //int stages TENDON_LARGE_HEALTH, //int health; TENDON_LARGE_REGEN, //int regenRate; TENDON_LARGE_SPLASHDAMAGE, //int splashDamage; @@ -503,7 +509,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; NET_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages NET_HEALTH, //int health; NET_REGEN, //int regenRate; NET_SPLASHDAMAGE, //int splashDamage; @@ -539,7 +545,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; NET_SPIKE_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages NET_SPIKE_HEALTH, //int health; NET_SPIKE_REGEN, //int regenRate; NET_SPIKE_SPLASHDAMAGE, //int splashDamage; @@ -576,7 +582,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; INFESTATION_SLIME_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_5, //int stages INFESTATION_SLIME_HEALTH, //int health; INFESTATION_SLIME_REGEN, //int regenRate; INFESTATION_SLIME_SPLASHDAMAGE, //int splashDamage; @@ -611,7 +617,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; INFESTATION_THICKET_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages INFESTATION_THICKET_HEALTH, //int health; INFESTATION_THICKET_REGEN, //int regenRate; INFESTATION_THICKET_SPLASHDAMAGE, //int splashDamage; @@ -647,7 +653,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; INFESTATION_BLISTER_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages INFESTATION_BLISTER_HEALTH, //int health; INFESTATION_BLISTER_REGEN, //int regenRate; INFESTATION_BLISTER_SPLASHDAMAGE, //int splashDamage; @@ -684,7 +690,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; REFLECTOR_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages REFLECTOR_HEALTH, //int health; REFLECTOR_REGEN, //int regenRate; REFLECTOR_SPLASHDAMAGE, //int splashDamage; @@ -717,8 +723,8 @@ static const buildableAttributes_t bg_buildableList[ ] = "team_alien_muscle", //char *entityName; TR_GRAVITY, //trType_t traj; 0, //float bounce; - MUSCLE_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + MUSCLE_BP, //int buildPoints; + STAGE_GE_2, //int stages MUSCLE_HEALTH, //int health; MUSCLE_REGEN, //int regenRate; MUSCLE_SPLASHDAMAGE, //int splashDamage; @@ -753,7 +759,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; SPITEFUL_ABCESS_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages SPITEFUL_ABCESS_HEALTH, //int health; SPITEFUL_ABCESS_REGEN, //int regenRate; SPITEFUL_ABCESS_SPLASHDAMAGE, //int splashDamage; @@ -789,7 +795,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; COCOON_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_4, //int stages COCOON_HEALTH, //int health; COCOON_REGEN, //int regenRate; COCOON_SPLASHDAMAGE, //int splashDamage; @@ -823,7 +829,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; ORGANIC_BULB_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_3, //int stages ORGANIC_BULB_HEALTH, //int health; ORGANIC_BULB_REGEN, //int regenRate; ORGANIC_BULB_SPLASHDAMAGE, //int splashDamage; @@ -858,7 +864,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; POD_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_4, //int stages POD_HEALTH, //int health; POD_REGEN, //int regenRate; POD_SPLASHDAMAGE, //int splashDamage; @@ -892,7 +898,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; POD_STUMP_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_4, //int stages POD_STUMP_HEALTH, //int health; POD_STUMP_REGEN, //int regenRate; POD_STUMP_SPLASHDAMAGE, //int splashDamage; @@ -925,7 +931,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; CREEPCOLONY_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages CREEPCOLONY_HEALTH, //int health; CREEPCOLONY_REGEN, //int regenRate; CREEPCOLONY_SPLASHDAMAGE, //int splashDamage; @@ -962,13 +968,13 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; HSPAWN_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages HSPAWN_HEALTH, //int health; 0, //int regenRate; HSPAWN_SPLASHDAMAGE, //int splashDamage; HSPAWN_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; - TEAM_HUMANS, //int team; + TEAM_HUMANS, //int team; ( 1 << WP_HBUILD ), //weapon_t buildWeapon; BANIM_IDLE1, //int idleAnim; 100, //int nextthink; @@ -997,7 +1003,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; MGTURRET_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages MGTURRET_HEALTH, //int health; 0, //int regenRate; MGTURRET_SPLASHDAMAGE, //int splashDamage; @@ -1032,7 +1038,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; MGTURRET2_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages MGTURRET2_HEALTH, //int health; 0, //int regenRate; MGTURRET2_SPLASHDAMAGE, //int splashDamage; @@ -1067,7 +1073,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; TESLAGEN_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_4, //int stages TESLAGEN_HEALTH, //int health; 0, //int regenRate; TESLAGEN_SPLASHDAMAGE, //int splashDamage; @@ -1102,7 +1108,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; ARMOURY_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages ARMOURY_HEALTH, //int health; 0, //int regenRate; ARMOURY_SPLASHDAMAGE, //int splashDamage; @@ -1137,7 +1143,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; DC_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages DC_HEALTH, //int health; 0, //int regenRate; DC_SPLASHDAMAGE, //int splashDamage; @@ -1173,13 +1179,13 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; MEDISTAT_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages MEDISTAT_HEALTH, //int health; 0, //int regenRate; MEDISTAT_SPLASHDAMAGE, //int splashDamage; MEDISTAT_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; - TEAM_HUMANS, //int team; + TEAM_HUMANS, //int team; ( 1 << WP_HBUILD ), //weapon_t buildWeapon; BANIM_IDLE1, //int idleAnim; 100, //int nextthink; @@ -1208,7 +1214,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; REACTOR_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages REACTOR_HEALTH, //int health; 0, //int regenRate; REACTOR_SPLASHDAMAGE, //int splashDamage; @@ -1243,13 +1249,13 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; REPEATER_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages REPEATER_HEALTH, //int health; 0, //int regenRate; REPEATER_SPLASHDAMAGE, //int splashDamage; REPEATER_SPLASHRADIUS, //int splashRadius; MOD_HSPAWN, //int meansOfDeath; - TEAM_HUMANS, //int team; + TEAM_HUMANS, //int team; ( 1 << WP_HBUILD ), //weapon_t buildWeapon; BANIM_IDLE1, //int idleAnim; 100, //int nextthink; @@ -1278,7 +1284,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; CONTAINER_SMALL_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages CONTAINER_SMALL_HEALTH, //int health; 0, //int regenRate; CONTAINER_SMALL_SPLASHDAMAGE, //int splashDamage; @@ -1313,7 +1319,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; CONTAINER_MEDIUM_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages CONTAINER_MEDIUM_HEALTH, //int health; 0, //int regenRate; CONTAINER_MEDIUM_SPLASHDAMAGE, //int splashDamage; @@ -1348,7 +1354,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; CONTAINER_LARGE_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_4, //int stages CONTAINER_LARGE_HEALTH, //int health; 0, //int regenRate; CONTAINER_LARGE_SPLASHDAMAGE, //int splashDamage; @@ -1383,7 +1389,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; PLATE_SMALL_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages PLATE_SMALL_HEALTH, //int health; 0, //int regenRate; PLATE_SMALL_SPLASHDAMAGE, //int splashDamage; @@ -1418,7 +1424,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; PLATE_LARGE_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_3, //int stages PLATE_LARGE_HEALTH, //int health; 0, //int regenRate; PLATE_LARGE_SPLASHDAMAGE, //int splashDamage; @@ -1453,7 +1459,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; FENCE_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages FENCE_HEALTH, //int health; 0, //int regenRate; FENCE_SPLASHDAMAGE, //int splashDamage; @@ -1488,7 +1494,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; FENCE_ROD_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages FENCE_HEALTH, //int health; 0, //int regenRate; FENCE_ROD_SPLASHDAMAGE, //int splashDamage; @@ -1523,7 +1529,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; BARRIER_LINE_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages BARRIER_LINE_HEALTH, //int health; 0, //int regenRate; BARRIER_LINE_SPLASHDAMAGE, //int splashDamage; @@ -1558,7 +1564,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; BARRIER_CORNER_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages BARRIER_CORNER_HEALTH, //int health; 0, //int regenRate; BARRIER_CORNER_SPLASHDAMAGE, //int splashDamage; @@ -1593,7 +1599,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; BARRIER_POINT_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages BARRIER_POINT_HEALTH, //int health; 0, //int regenRate; BARRIER_POINT_SPLASHDAMAGE, //int splashDamage; @@ -1628,7 +1634,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; SHIELD_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_5, //int stages SHIELD_HEALTH, //int health; 0, //int regenRate; SHIELD_SPLASHDAMAGE, //int splashDamage; @@ -1663,7 +1669,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0, //float bounce; LADDER_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages LADDER_HEALTH, //int health; 0, //int regenRate; LADDER_SPLASHDAMAGE, //int splashDamage; @@ -1698,7 +1704,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; TEFLON_FOIL_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages TEFLON_FOIL_HEALTH, //int health; 0, //int regenRate; TEFLON_FOIL_SPLASHDAMAGE, //int splashDamage; @@ -1733,7 +1739,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; BARREL_BP, //int buildPoints; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages BARREL_HEALTH, //int health; 0, //int regenRate; BARREL_SPLASHDAMAGE, //int splashDamage; @@ -1768,7 +1774,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; LIGHT_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_5, //int stages LIGHT_HEALTH, //int health; 0, //int regenRate; LIGHT_SPLASHDAMAGE, //int splashDamage; @@ -1804,7 +1810,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; COVER_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_4, //int stages COVER_HEALTH, //int health; 0, //int regenRate; COVER_SPLASHDAMAGE, //int splashDamage; @@ -1839,7 +1845,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; COVER_STUMP_BP, //int buildPoints; - ( 1 << S3 ), //int stages + STAGE_GE_4, //int stages COVER_STUMP_HEALTH, //int health; 0, //int regenRate; COVER_STUMP_SPLASHDAMAGE, //int splashDamage; @@ -1873,7 +1879,7 @@ static const buildableAttributes_t bg_buildableList[ ] = TR_GRAVITY, //trType_t traj; 0.0, //float bounce; REFINERY_BP, //int buildPoints; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages REFINERY_HEALTH, //int health; 0, //int regenRate; REFINERY_SPLASHDAMAGE, //int splashDamage; @@ -2182,7 +2188,7 @@ static const classAttributes_t bg_classList[ ] = PCL_NONE, //int classnum; "spectator", //char *className; "Observer mode", - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages 0, //int health; 0.0f, //float fallDamage; 0.0f, //float regenRate; @@ -2209,11 +2215,11 @@ static const classAttributes_t bg_classList[ ] = "builder", //char *className; "Responsible for building and maintaining all the alien structures. " "Has a weak melee slash attack.", - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages ABUILDER_HEALTH, //int health; 0.0f, //float fallDamage; ABUILDER_REGEN, //float regenRate; - SCA_TAKESFALLDAMAGE|SCA_FOVWARPS|SCA_ALIENSENSE,//int abilities; + SCA_FOVWARPS|SCA_ALIENSENSE, //int abilities; WP_ABUILD, //weapon_t startWeapon 95.0f, //float buildDist; 110, //int fov; @@ -2237,11 +2243,11 @@ static const classAttributes_t bg_classList[ ] = "Similar to the base Granger, except that in addition to " "being able to build structures it has a spit attack " "that slows victims and the ability to crawl on walls.", - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages ABUILDER_UPG_HEALTH, //int health; 0.0f, //float fallDamage; ABUILDER_UPG_REGEN, //float regenRate; - SCA_TAKESFALLDAMAGE|SCA_FOVWARPS|SCA_WALLCLIMBER|SCA_ALIENSENSE, //int abilities; + SCA_FOVWARPS|SCA_WALLCLIMBER|SCA_ALIENSENSE, //int abilities; WP_ABUILD2, //weapon_t startWeapon 105.0f, //float buildDist; 110, //int fov; @@ -2264,7 +2270,7 @@ static const classAttributes_t bg_classList[ ] = "level0", //char *classname; "Has a lethal reflexive bite and the ability to crawl on " "walls and ceilings.", - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages LEVEL0_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL0_REGEN, //float regenRate; @@ -2282,7 +2288,7 @@ static const classAttributes_t bg_classList[ ] = 400.0f, //float stopSpeed; 250.0f, //float jumpMagnitude; 2.0f, //float knockbackScale; - { PCL_ALIEN_LEVEL0_UPG, PCL_NONE, PCL_NONE }, //int children[ 3 ]; + { PCL_ALIEN_LEVEL1, PCL_ALIEN_LEVEL0_UPG, PCL_NONE }, //int children[ 3 ]; LEVEL0_COST, //int cost; LEVEL0_VALUE, //int value; }, @@ -2292,7 +2298,7 @@ static const classAttributes_t bg_classList[ ] = "In addition to the basic Dretch abilities, the Advanced " "Dretch has the ability to pounce and spread infections. " "Advanced Dretch can also damage defensive structures.", - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages LEVEL0_UPG_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL0_UPG_REGEN, //float regenRate; @@ -2320,9 +2326,10 @@ static const classAttributes_t bg_classList[ ] = "A support class able to crawl on walls and ceilings. Its melee " "attack is most effective when combined with the ability to grab " "and hold its victims in place. Provides a weak healing aura " - "that accelerates the healing rate of nearby aliens." - "It has an Acid Bomb in his Butt wich can be used as a grenade.", - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + "that accelerates the healing rate of nearby aliens. It also has " + "an acid bomb that can be used to deal moderate area damage. " + "The basilisk is also resistant to flamer.", + STAGE_GE_1, //int stages LEVEL1_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL1_REGEN, //float regenRate; @@ -2347,14 +2354,14 @@ static const classAttributes_t bg_classList[ ] = { PCL_ALIEN_LEVEL1_UPG, //int classnum; "level1upg", //char *classname; - "In addition to the basic Basilisk abilities, the Advanced" - "Basilisk sprays a poisonous gas which disorients any" - "nearby humans. Has a strong healing aura that" - "that accelerates the healing rate of nearby aliens." - "It becomes invisible if stays still and has full health." - "It will become visible once Overmind is dead or it has < full health." - "It has an (powerful) Acid Bomb in his Butt wich can be used as a grenade.", - ( 1 << S2 )|( 1 << S3 ), //int stages + "In addition to the basic Basilisk abilities, the Advanced " + "Basilisk sprays a poisonous gas which slows down and disorients " + "nearby humans. Has a strong healing aura that that accelerates " + "the healing rate of nearby aliens. It is invisible while staying " + "still and at full health as long as there is an overmind around. " + "It also has an acid bomb similar to basilisk's one but stronger." + "The adv. basilisk is also resistant to flamer.", + STAGE_GE_3, //int stages LEVEL1_UPG_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL1_UPG_REGEN, //float regenRate; @@ -2381,7 +2388,7 @@ static const classAttributes_t bg_classList[ ] = "level2", //char *classname; "Has a melee attack and the ability to jump off walls. This " "allows the Marauder to gather great speed in enclosed areas.", - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages LEVEL2_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL2_REGEN, //float regenRate; @@ -2409,7 +2416,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.", - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages LEVEL2_UPG_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL2_UPG_REGEN, //float regenRate; @@ -2437,7 +2444,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.", - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_4, //int stages LEVEL5_UPG_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL5_UPG_REGEN, //float regenRate; @@ -2465,7 +2472,7 @@ static const classAttributes_t bg_classList[ ] = "Possesses a melee attack and the pounce ability, which may " "be used as both an attack and a means to reach remote " "locations inaccessible from the ground.", - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages LEVEL3_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL3_REGEN, //float regenRate; @@ -2492,8 +2499,8 @@ static const classAttributes_t bg_classList[ ] = "level3upg", //char *classname; "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 high.", - ( 1 << S2 )|( 1 << S3 ), //int stages + "from a distance and it has a higher jump height.", + STAGE_GE_4, //int stages LEVEL3_UPG_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL3_UPG_REGEN, //float regenRate; @@ -2518,11 +2525,11 @@ static const classAttributes_t bg_classList[ ] = { PCL_ALIEN_LEVEL4, //int classnum; "level4", //char *classname; - "A large alien with a strong melee attack, this class can " - "also charge at enemy humans and structures, inflicting " - "great damage. Any humans or their structures caught under " - "a falling Tyrant will be crushed by its weight.", - ( 1 << S3 ), //int stages + "A large alien with a strong melee attack and a weak flame blast. " + "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 LEVEL4_HEALTH, //int health; 0.0f, //float fallDamage; LEVEL4_REGEN, //float regenRate; @@ -2548,7 +2555,7 @@ static const classAttributes_t bg_classList[ ] = PCL_HUMAN, //int classnum; "human_base", //char *classname; "", - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages 100, //int health; 1.0f, //float fallDamage; 0.0f, //float regenRate; @@ -2574,7 +2581,7 @@ static const classAttributes_t bg_classList[ ] = PCL_HUMAN_BSUIT, //int classnum; "human_bsuit", //char *classname; "", - ( 1 << S3 ), //int stages + STAGE_GE_5, //int stages 100, //int health; 1.0f, //float fallDamage; 0.0f, //float regenRate; @@ -3082,7 +3089,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL0, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "level0", //char *weaponName; "Bite", //char *humanName; @@ -3107,7 +3114,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL0_UPG, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages SLOT_WEAPON, //int slots; "level0upg", //char *weaponName; "Bite Upgrade", //char *humanName; @@ -3132,7 +3139,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL1, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "level1", //char *weaponName; "Claws", //char *humanName; @@ -3157,7 +3164,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL1_UPG, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages SLOT_WEAPON, //int slots; "level1upg", //char *weaponName; "Claws Upgrade", //char *humanName; @@ -3182,7 +3189,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL2, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages SLOT_WEAPON, //int slots; "level2", //char *weaponName; "Claws", //char *humanName; @@ -3207,7 +3214,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL2_UPG, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages SLOT_WEAPON, //int slots; "level2upg", //char *weaponName; "Zap", //char *humanName; @@ -3232,7 +3239,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL5, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_4, //int stages SLOT_WEAPON, //int slots; "level5", //char *weaponName; "prickles", //char *humanName; @@ -3257,7 +3264,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL3, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages SLOT_WEAPON, //int slots; "level3", //char *weaponName; "Pounce", //char *humanName; @@ -3282,7 +3289,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL3_UPG, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_4, //int stages SLOT_WEAPON, //int slots; "level3upg", //char *weaponName; "Pounce (upgrade)", //char *humanName; @@ -3307,7 +3314,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ALEVEL4, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_5, //int stages SLOT_WEAPON, //int slots; "level4", //char *weaponName; "Charge", //char *humanName; @@ -3333,10 +3340,10 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_BLASTER, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages 0, //int slots; "blaster", //char *weaponName; - "[yefarms]Blaster", //char *humanName; + "[yefarms]Blaster", //char *humanName; "", 0, //int maxAmmo; 0, //int maxClips; @@ -3358,7 +3365,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_MACHINEGUN, //int weaponNum; RIFLE_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "rifle", //char *weaponName; "[yefarms]Rifle", //char *humanName; @@ -3384,7 +3391,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_PAIN_SAW, //int weaponNum; PAINSAW_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "psaw", //char *weaponName; "[yefarms]Pain Saw", //char *humanName; @@ -3411,7 +3418,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_SHOTGUN, //int weaponNum; SHOTGUN_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages SLOT_WEAPON, //int slots; "shotgun", //char *weaponName; "[yefarms]Shotgun", //char *humanName; @@ -3438,7 +3445,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_LAS_GUN, //int weaponNum; LASGUN_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages SLOT_WEAPON, //int slots; "lgun", //char *weaponName; "[yefarms]Las Gun", //char *humanName; @@ -3449,11 +3456,11 @@ static const weaponAttributes_t bg_weapons[ ] = qfalse, //int infiniteAmmo; qtrue, //int usesEnergy; LASGUN_REPEAT, //int repeatRate1; - 0, //int repeatRate2; + LASGUN_REPEAT2, //int repeatRate2; 0, //int repeatRate3; LASGUN_RELOAD, //int reloadTime; LASGUN_K_SCALE, //float knockbackScale; - qfalse, //qboolean hasAltMode; + qtrue, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qfalse, //qboolean canZoom; 90.0f, //float zoomFov; @@ -3464,7 +3471,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_MASS_DRIVER, //int weaponNum; MDRIVER_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages SLOT_WEAPON, //int slots; "mdriver", //char *weaponName; "[yefarms]Mass Driver", //char *humanName; @@ -3477,7 +3484,7 @@ static const weaponAttributes_t bg_weapons[ ] = qtrue, //int usesEnergy; MDRIVER_REPEAT, //int repeatRate1; 0, //int repeatRate2; - MDRIVER_REPEAT2, //int repeatRate3; + MDRIVER_REPEAT2, //int repeatRate3; MDRIVER_RELOAD, //int reloadTime; MDRIVER_K_SCALE, //float knockbackScale; qfalse, //qboolean hasAltMode; @@ -3491,7 +3498,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_CHAINGUN, //int weaponNum; CHAINGUN_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages SLOT_WEAPON, //int slots; "chaingun", //char *weaponName; "[yefarms]Chaingun", //char *humanName; @@ -3518,7 +3525,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_FLAMER, //int weaponNum; FLAMER_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_4, //int stages SLOT_WEAPON, //int slots; "flamer", //char *weaponName; "[yefarms]Flame Thrower", //char *humanName; @@ -3545,7 +3552,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_PULSE_RIFLE, //int weaponNum; PRIFLE_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_4, //int stages SLOT_WEAPON, //int slots; "prifle", //char *weaponName; "[yefarms]Pulse Rifle", //char *humanName; @@ -3570,7 +3577,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_LUCIFER_CANNON, //int weaponNum; LCANNON_PRICE, //int price; - ( 1 << S3 ), //int stages + STAGE_GE_5, //int stages SLOT_WEAPON, //int slots; "lcannon", //char *weaponName; "[yefarms]Lucifer Cannon", //char *humanName; @@ -3597,7 +3604,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_GRENADE, //int weaponNum; GRENADE_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages SLOT_NONE, //int slots; "grenade", //char *weaponName; "Grenade", //char *humanName; @@ -3622,7 +3629,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_SMOKE, //int weaponNum; SMOKE_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_5, //int stages SLOT_NONE, //int slots; "smoke", //char *weaponName; "Smoke", //char *weaponHumanName; @@ -3647,7 +3654,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_MINE, //int weaponNum; MINE_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_5, //int stages SLOT_NONE, //int slots; "mine", //char *weaponName; "Mine", //char *weaponHumanName; @@ -3672,7 +3679,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_LOCKBLOB_LAUNCHER, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "lockblob", //char *weaponName; "Lock Blob", //char *humanName; @@ -3697,7 +3704,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_HIVE, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "hive", //char *weaponName; "Hive", //char *humanName; @@ -3722,7 +3729,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_TESLAGEN, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "teslagen", //char *weaponName; "Tesla Generator", //char *humanName; @@ -3747,7 +3754,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_MGTURRET, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "mgturret", //char *weaponName; "Machinegun Turret", //char *humanName; @@ -3770,12 +3777,12 @@ static const weaponAttributes_t bg_weapons[ ] = TEAM_HUMANS //team_t team; }, { - WP_MGTURRET2, //int weaponNum; + WP_MGTURRET2, //int weaponNum; 0, //int price; - ( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; - "mgturret2", //char *weaponName; - "Machinegun Turret2", //char *humanName; + "mgturret2", //char *weaponName; + "Machinegun Turret2", //char *humanName; "", 0, //int maxAmmo; 0, //int maxClips; @@ -3785,7 +3792,7 @@ static const weaponAttributes_t bg_weapons[ ] = 0, //int repeatRate2; 0, //int repeatRate3; 0, //int reloadTime; - MGTURRET2_K_SCALE, //float knockbackScale; + MGTURRET2_K_SCALE, //float knockbackScale; qfalse, //qboolean hasAltMode; qfalse, //qboolean hasThirdMode; qfalse, //qboolean canZoom; @@ -3797,7 +3804,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ABUILD, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "abuild", //char *weaponName; "Alien build weapon", //char *humanName; @@ -3822,7 +3829,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_ABUILD2, //int weaponNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "abuildupg", //char *weaponName; "Alien build weapon2",//char *humanName; @@ -3847,7 +3854,7 @@ static const weaponAttributes_t bg_weapons[ ] = { WP_HBUILD, //int weaponNum; HBUILD_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_WEAPON, //int slots; "ckit", //char *weaponName; "[yetool]Construction Kit", //char *humanName; @@ -3923,7 +3930,7 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_LIGHTARMOUR, //int upgradeNum; LIGHTARMOUR_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_TORSO|SLOT_ARMS|SLOT_LEGS, //int slots; "larmour", //char *upgradeName; "[yeshield]Light Armour", //char *humanName; @@ -3937,7 +3944,7 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_HELMET, //int upgradeNum; HELMET_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages SLOT_HEAD, //int slots; "helmet", //char *upgradeName; "[yeshield]Helmet", //char *humanName; @@ -3952,20 +3959,20 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_MEDKIT, //int upgradeNum; MEDKIT_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_NONE, //int slots; "medkit", //char *upgradeName; - "[yemed]Medkit", //char *humanName; + "[yemed]Medkit", //char *humanName; "Basic health kit. ", "icons/iconu_atoxin", (SPAWN_WITH_MEDKIT ? qfalse : qtrue), //qboolean purchasable - qtrue, //qboolean usable + qtrue, //qboolean usable TEAM_HUMANS //team_t team; }, { UP_BIOKIT, //int upgradeNum; BIOKIT_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_2, //int stages SLOT_NONE, //int slots; "biokit", //char *upgradeName; "[yebiok]Biokit", //char *humanName; @@ -3980,7 +3987,7 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_CLOAK, //int upgradeNum; CLOAK_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ),//int stages + STAGE_GE_4, //int stages SLOT_NONE, //int slots; "cloak", //char *upgradeName; "[yecloa]Cloak", //char *humanName; @@ -3996,7 +4003,7 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_BATTPACK, //int upgradeNum; BATTPACK_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_3, //int stages SLOT_BACKPACK, //int slots; "battpack", //char *upgradeName; "[yebat]Battery Pack", //char *humanName; @@ -4010,7 +4017,7 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_JETPACK, //int upgradeNum; JETPACK_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_4, //int stages SLOT_BACKPACK, //int slots; "jetpack", //char *upgradeName; "[yejet]Jet Pack", //char *humanName; @@ -4025,7 +4032,7 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_BATTLESUIT, //int upgradeNum; BSUIT_PRICE, //int price; - ( 1 << S3 ), //int stages + STAGE_GE_5, //int stages SLOT_HEAD|SLOT_TORSO|SLOT_ARMS|SLOT_LEGS|SLOT_BACKPACK, //int slots; "bsuit", //char *upgradeName; "[yeshield]Battlesuit", //char *humanName; @@ -4040,7 +4047,7 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_GRENADE, //int upgradeNum; GRENADE_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ),//int stages + STAGE_GE_4, //int stages SLOT_NONE, //int slots; "gren", //char *upgradeName; "[yenade]Explosive Grenade", //char *humanName; @@ -4054,7 +4061,7 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_MINE, //int upgradeNum; MINE_PRICE, //int price; - ( 1 << S2 )|( 1 << S3 ),//int stages + STAGE_GE_5, //int stages SLOT_NONE, //int slots; "min", //char *upgradeName; "[yenade]Mine", //char *upgradeHumanName; @@ -4065,11 +4072,11 @@ static const upgradeAttributes_t bg_upgrades[ ] = TEAM_HUMANS //WUTeam_t team; }, { - UP_SMOKE, //int upgradeNum; - SMOKE_PRICE, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ),//int stages + UP_SMOKE, //int upgradeNum; + SMOKE_PRICE, //int price; + STAGE_GE_5, //int stages SLOT_NONE, //int slots; - "smo", //char *upgradeName; + "smo", //char *upgradeName; "[yenade]Smoke Grenade", //char *upgradeHumanName; "", 0, @@ -4080,7 +4087,7 @@ static const upgradeAttributes_t bg_upgrades[ ] = { UP_AMMO, //int upgradeNum; 0, //int price; - ( 1 << S1 )|( 1 << S2 )|( 1 << S3 ), //int stages + STAGE_GE_1, //int stages SLOT_NONE, //int slots; "ammo", //char *upgradeName; "[yeammo]Ammunition", //char *humanName; diff --git a/src/game/bg_pmove.c b/src/game/bg_pmove.c index 9fad4f4..62151f4 100644 --- a/src/game/bg_pmove.c +++ b/src/game/bg_pmove.c @@ -507,9 +507,11 @@ static float PM_CmdScale( usercmd_t *cmd ) if( BG_Class( pm->ps->stats[ STAT_CLASS ] )->jumpMagnitude == 0.0f ) cmd->upmove = 0; + /* Commented out as the following seems to cause swimming up/down issues for aliens //prevent speed distortions for non ducking classes if( !( pm->ps->pm_flags & PMF_DUCKED ) && pm->ps->pm_type != PM_JETPACK && cmd->upmove < 0 ) cmd->upmove = 0; + */ } max = abs( cmd->forwardmove ); @@ -1204,7 +1206,6 @@ static void PM_WaterMove( void ) return; } -#if 0 // jump = head for surface if ( pm->cmd.upmove >= 10 ) { if (pm->ps->velocity[2] > -300) { @@ -1217,7 +1218,6 @@ static void PM_WaterMove( void ) } } } -#endif PM_Friction( ); @@ -3064,6 +3064,7 @@ static void PM_Weapon( void ) qboolean attack1 = pm->cmd.buttons & BUTTON_ATTACK; qboolean attack2 = pm->cmd.buttons & BUTTON_ATTACK2; qboolean attack3 = pm->cmd.buttons & BUTTON_USE_HOLDABLE; + int minAmmo; // Ignore weapons in some cases if( pm->ps->persistant[ PERS_SPECSTATE ] != SPECTATOR_NOT ) @@ -3323,8 +3324,12 @@ static void PM_Weapon( void ) return; } + if ( pm->ps->weapon == WP_LAS_GUN && attack2 ) + minAmmo = 20; + else minAmmo = 1; + // check for out of ammo - if( !pm->ps->ammo && !pm->ps->clips && !BG_Weapon( pm->ps->weapon )->infiniteAmmo ) + if( pm->ps->ammo < minAmmo && !pm->ps->clips && !BG_Weapon( pm->ps->weapon )->infiniteAmmo ) { if( attack1 || ( BG_Weapon( pm->ps->weapon )->hasAltMode && attack2 ) || ( BG_Weapon( pm->ps->weapon )->hasThirdMode && attack3 ) ) { @@ -3723,22 +3728,35 @@ static void PM_Weapon( void ) ( pm->ps->weapon == WP_ALEVEL4 && attack3 )|| ( pm->ps->weapon == WP_ALEVEL5 && attack3 )) { - // Special case for md third mode, need a bat for function (6+1) - if( (pm->ps->weapon == WP_MASS_DRIVER) && attack3 ) - pm->ps->ammo -= 7; - //prevent removing ammo from player if plasma isnt working yet but still eats all ammo if player has ammo >6 and no s3 - if( (pm->ps->weapon == WP_MASS_DRIVER) && attack3 && pm->ps->ammo < 7 ) - pm->ps->ammo += 1; - // Special case for lcannon - if( (pm->ps->weapon == WP_LUCIFER_CANNON) && attack1 && !attack2 ) - pm->ps->ammo -= ( pm->ps->stats[ STAT_MISC ] * LCANNON_CHARGE_AMMO + - LCANNON_CHARGE_TIME_MAX - 1 ) / LCANNON_CHARGE_TIME_MAX; - - if( (pm->ps->weapon == WP_FLAMER) && attack1 && !attack2 ) - pm->ps->ammo -= ( pm->ps->stats[ STAT_MISC ] * FLAMER_CHARGE_AMMO + - FLAMER_CHARGE_TIME_MAX - 1 ) / FLAMER_CHARGE_TIME_MAX; - else - pm->ps->ammo--; + switch( pm->ps->weapon ) { + case WP_MASS_DRIVER: + if( attack3 ) { + pm->ps->ammo -= 7; + if( pm->ps->ammo < 7 ) pm->ps->ammo += 1; + } else pm->ps->ammo--; + break; + case WP_LUCIFER_CANNON: + if( attack1 && !attack2 ) { + pm->ps->ammo -= ( pm->ps->stats[ STAT_MISC ] * LCANNON_CHARGE_AMMO + + LCANNON_CHARGE_TIME_MAX - 1 ) / LCANNON_CHARGE_TIME_MAX; + } else pm->ps->ammo--; + break; + case WP_FLAMER: + if( attack1 && !attack2 ) { + pm->ps->ammo -= ( pm->ps->stats[ STAT_MISC ] * FLAMER_CHARGE_AMMO + + FLAMER_CHARGE_TIME_MAX - 1 ) / FLAMER_CHARGE_TIME_MAX; + } else pm->ps->ammo--; + break; + case WP_LAS_GUN: + if( attack2 ) { + pm->ps->ammo -= 25; + } else pm->ps->ammo--; + break; + default: + pm->ps->ammo--; + break; + } + // Stay on the safe side if( pm->ps->ammo < 0 ) pm->ps->ammo = 0; diff --git a/src/game/bg_public.h b/src/game/bg_public.h index 7ce0d12..9109a35 100644 --- a/src/game/bg_public.h +++ b/src/game/bg_public.h @@ -961,7 +961,9 @@ typedef enum { S1, S2, - S3 + S3, + S4, + S5 } stage_t; #define MAX_BUILDABLE_MODELS 4 diff --git a/src/game/g_active.c b/src/game/g_active.c index 9a4eb00..fc32ed6 100644 --- a/src/game/g_active.c +++ b/src/game/g_active.c @@ -1100,16 +1100,15 @@ void G_ArmaFreeLove( gentity_t *ent ) for( i = 0; i < g_maxclients.integer; i++ ) { - cl = level.clients + i; + cl = level.clients + i; - if( cl->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) - G_AddCreditToClient( cl, 7200, qtrue ); - else if( cl->ps.stats[ STAT_TEAM ] == TEAM_HUMANS ) - G_AddCreditToClient( cl, 4000, qtrue ); - } - trap_SendServerCommand( -1, "print \"^5A flying hotdog does its weener magic and converts buildings into pure joy!\n\"" ); - G_Sound( ent, CHAN_VOICE, G_SoundIndex( "sound/edge/hdoglove.wav" ) ); - + if( cl->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) + G_AddCreditToClient( cl, g_armageddonCreditAmount.integer, qtrue ); + else if( cl->ps.stats[ STAT_TEAM ] == TEAM_HUMANS ) + G_AddCreditToClient( cl, g_armageddonCreditAmount.integer, qtrue ); + } + trap_SendServerCommand( -1, "print \"^5A flying hotdog does its weener magic and converts buildings into pure joy!\n\"" ); + G_Sound( ent, CHAN_VOICE, G_SoundIndex( "sound/edge/hdoglove.wav" ) ); } diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index 954a546..3783053 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -1646,92 +1646,115 @@ void G_Push( gentity_t *self ) vec3_t range = { PUSH_RANGE, PUSH_RANGE, PUSH_RANGE }; vec3_t mins, maxs; int i, num; -// int a; gentity_t *enemy; vec3_t start,dir,end; float force; - + qboolean active = qfalse; self->nextthink = level.time + PUSH_REPEAT; VectorAdd( self->s.origin, range, maxs ); VectorSubtract( self->s.origin, range, mins ); - - self->powered = G_FindPower( self, qfalse ); + self->powered = G_FindPower( self, qfalse ); if( !self->spawned ) { return; - } + } if( !self->powered ) { - G_SetIdleBuildableAnim( self, BANIM_CONSTRUCT1 ); + G_SetIdleBuildableAnim( self, BANIM_CONSTRUCT1 ); return; - } - - if( self->powered ) - { + } if( self->spawned && self->health > 0 && self->powered ) { num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); + for( i = 0; i < num; i++ ) { enemy = &g_entities[ entityList[ i ] ]; if( enemy->flags & FL_NOTARGET ) continue; - if( !G_Visible( self, enemy, CONTENTS_SOLID ) ) - continue; - + continue; if (enemy->client && enemy->client->notrackEndTime >= level.time) continue; + if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] != TEAM_HUMANS ) + { + if (enemy == self) + continue; - if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) - { - if (enemy == self) - continue; + if (!enemy->client) + continue; - if (!enemy->client) - continue; + if (enemy == self->parent) + continue; - if (enemy == self->parent) - continue; + if (!enemy->takedamage) + continue; - if (!enemy->takedamage) - continue; + active = qtrue; + break; + } + } + + if (active) + { + for( i = 0; i < num; i++ ) + { + enemy = &g_entities[ entityList[ i ] ]; - if ( enemy->client->ps.stats[ STAT_CLASS ] == PCL_ALIEN_LEVEL5 ) - force = PUSH_FORCE; - else - force = WEAK_PUSH_FORCE; + if( enemy->flags & FL_NOTARGET ) + continue; - VectorCopy(enemy->r.currentOrigin, start); - VectorCopy(self->r.currentOrigin, end); - VectorSubtract(end, start, dir); - VectorNormalize(dir); - VectorScale(dir, force, enemy->client->ps.velocity); - VectorCopy(dir, enemy->movedir); - } + if( !G_Visible( self, enemy, CONTENTS_SOLID ) ) + continue; - if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) - { - // start the attack animation - G_AddEvent( self, EV_FORCE_FIELD, DirToByte( self->s.origin2 ) ); + if (enemy->client && enemy->client->notrackEndTime >= level.time) + continue; + + if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] != TEAM_NONE ) + { + if (enemy == self) + continue; + + if (!enemy->client) + continue; + + if (enemy == self->parent) + continue; + + if (!enemy->takedamage) + continue; + + if ( enemy->client->ps.stats[ STAT_CLASS ] == PCL_ALIEN_LEVEL5 ) + force = PUSH_FORCE; + else + force = WEAK_PUSH_FORCE; + + VectorCopy(enemy->r.currentOrigin, start); + VectorCopy(self->r.currentOrigin, end); + VectorSubtract(end, start, dir); + VectorNormalize(dir); + VectorScale(dir, force, enemy->client->ps.velocity); + VectorCopy(dir, enemy->movedir); + } + } + + // start the attack animation + G_AddEvent( self, EV_FORCE_FIELD, DirToByte( self->s.origin2 ) ); - if( level.time >= self->timestamp + 500 ) - { - self->timestamp = level.time; - G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse ); - } - return; + if( level.time >= self->timestamp + 500 ) + { + self->timestamp = level.time; + G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse ); } } } } -} /* diff --git a/src/game/g_combat.c b/src/game/g_combat.c index 51b7005..c79594d 100644 --- a/src/game/g_combat.c +++ b/src/game/g_combat.c @@ -299,8 +299,18 @@ float G_InstantRewardAttacker( gentity_t *self, gentity_t *target, float damage value *= G_RewardScaleFactor( self, target, G_TeamRewardScaleFactor( target ) ); - if( value > 0 ) + if( value > 0 ) { G_AddCreditToClient( self->client, value, qtrue ); + if( self->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) { + trap_Cvar_Set( "g_alienCredits", + va( "%d", (int) (g_alienCredits.integer + value) ) ); + trap_Cvar_Update( &g_alienCredits ); + } else { + trap_Cvar_Set( "g_humanCredits", + va( "%d", (int) (g_humanCredits.integer + value) ) ); + trap_Cvar_Update( &g_humanCredits ); + } + } return value; } @@ -391,11 +401,11 @@ float G_RewardAttackers( gentity_t *self ) if( player->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) { level.alienRewardKills += killValue; G_AddCreditToClient( player->client, g_KillRewardMultiplierH.value*stageValue, qtrue ); - alienCredits += stageValue; + alienCredits += g_KillRewardMultiplierH.value*stageValue; } else if( player->client->ps.stats[ STAT_TEAM ] == TEAM_HUMANS ) { level.humanRewardKills += killValue; G_AddCreditToClient( player->client, g_KillRewardMultiplierA.value*stageValue, qtrue ); - humanCredits += stageValue; + humanCredits += g_KillRewardMultiplierA.value*stageValue; } } } @@ -515,6 +525,12 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int self->client->pers.netname, killerName ) ); goto finish_dying; } + + // Parent node on player used for tracking the shield projectile + if( self->parentNode ) + { + G_FreeEntity(self->parentNode); + } // broadcast the death event to everyone ent = G_TempEntity( self->r.currentOrigin, EV_OBITUARY ); diff --git a/src/game/g_local.h b/src/game/g_local.h index ab0809f..e437349 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -673,8 +673,12 @@ typedef struct int alienStage2Time; int alienStage3Time; + int alienStage4Time; + int alienStage5Time; int humanStage2Time; int humanStage3Time; + int humanStage4Time; + int humanStage5Time; int nextCommandTime; @@ -1147,6 +1151,11 @@ extern vmCvar_t g_minNameChangePeriod; extern vmCvar_t g_maxNameChanges; extern vmCvar_t g_timelimit; extern vmCvar_t g_suddenDeathTime; +extern vmCvar_t g_armageddonTimeStep; +extern vmCvar_t g_armageddonInitialTimeStep; +extern vmCvar_t g_armageddonDefensiveKillPercent; +extern vmCvar_t g_armageddonOtherKillPercent; +extern vmCvar_t g_armageddonCreditAmount; extern vmCvar_t g_friendlyFire; extern vmCvar_t g_friendlyBuildableFire; extern vmCvar_t g_dretchPunt; @@ -1193,11 +1202,15 @@ extern vmCvar_t g_humanCredits; extern vmCvar_t g_humanMaxStage; extern vmCvar_t g_humanStage2Threshold; extern vmCvar_t g_humanStage3Threshold; +extern vmCvar_t g_humanStage4Threshold; +extern vmCvar_t g_humanStage5Threshold; extern vmCvar_t g_alienStage; extern vmCvar_t g_alienCredits; extern vmCvar_t g_alienMaxStage; extern vmCvar_t g_alienStage2Threshold; extern vmCvar_t g_alienStage3Threshold; +extern vmCvar_t g_alienStage4Threshold; +extern vmCvar_t g_alienStage5Threshold; extern vmCvar_t g_alienBarbsRegen2x; extern vmCvar_t g_alienBarbsRegen3x; extern vmCvar_t g_alienGrangerDanceBonus; diff --git a/src/game/g_main.c b/src/game/g_main.c index 1a4857f..45f7b03 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -55,6 +55,7 @@ vmCvar_t g_armageddonTimeStep; vmCvar_t g_armageddonInitialTimeStep; vmCvar_t g_armageddonDefensiveKillPercent; vmCvar_t g_armageddonOtherKillPercent; +vmCvar_t g_armageddonCreditAmount; vmCvar_t g_friendlyFire; vmCvar_t g_friendlyBuildableFire; vmCvar_t g_dretchPunt; @@ -111,11 +112,15 @@ vmCvar_t g_humanCredits; vmCvar_t g_humanMaxStage; vmCvar_t g_humanStage2Threshold; vmCvar_t g_humanStage3Threshold; +vmCvar_t g_humanStage4Threshold; +vmCvar_t g_humanStage5Threshold; vmCvar_t g_alienStage; vmCvar_t g_alienCredits; vmCvar_t g_alienMaxStage; vmCvar_t g_alienStage2Threshold; vmCvar_t g_alienStage3Threshold; +vmCvar_t g_alienStage4Threshold; +vmCvar_t g_alienStage5Threshold; vmCvar_t g_alienBarbsRegen2x; vmCvar_t g_alienBarbsRegen3x; vmCvar_t g_alienGrangerDanceBonus; @@ -217,6 +222,7 @@ static cvarTable_t gameCvarTable[ ] = { &g_armageddonInitialTimeStep, "g_armageddonInitialTimeStep", "10", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, { &g_armageddonDefensiveKillPercent, "g_armageddonDefensiveKillPercent", "10", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, { &g_armageddonOtherKillPercent, "g_armageddonOtherKillPercent", "5", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, + { &g_armageddonCreditAmount, "g_armageddonCreditAmount", "500", CVAR_SERVERINFO | CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue }, { &g_synchronousClients, "g_synchronousClients", "0", CVAR_SYSTEMINFO, 0, qfalse }, { &g_friendlyFreeze, "g_friendlyFreeze", "0", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qfalse }, { &g_friendlyFire, "g_friendlyFire", "0", CVAR_SERVERINFO | CVAR_ARCHIVE, 0, qtrue }, @@ -268,11 +274,15 @@ static cvarTable_t gameCvarTable[ ] = { &g_humanMaxStage, "g_humanMaxStage", DEFAULT_HUMAN_MAX_STAGE, 0, 0, qfalse, cv_humanMaxStage }, { &g_humanStage2Threshold, "g_humanStage2Threshold", DEFAULT_HUMAN_STAGE2_THRESH, 0, 0, qfalse }, { &g_humanStage3Threshold, "g_humanStage3Threshold", DEFAULT_HUMAN_STAGE3_THRESH, 0, 0, qfalse }, + { &g_humanStage4Threshold, "g_humanStage4Threshold", DEFAULT_HUMAN_STAGE4_THRESH, 0, 0, qfalse }, + { &g_humanStage5Threshold, "g_humanStage5Threshold", DEFAULT_HUMAN_STAGE5_THRESH, 0, 0, qfalse }, { &g_alienStage, "g_alienStage", "0", 0, 0, qfalse }, { &g_alienCredits, "g_alienCredits", "0", 0, 0, qfalse }, { &g_alienMaxStage, "g_alienMaxStage", DEFAULT_ALIEN_MAX_STAGE, 0, 0, qfalse, cv_alienMaxStage }, { &g_alienStage2Threshold, "g_alienStage2Threshold", DEFAULT_ALIEN_STAGE2_THRESH, 0, 0, qfalse }, { &g_alienStage3Threshold, "g_alienStage3Threshold", DEFAULT_ALIEN_STAGE3_THRESH, 0, 0, qfalse }, + { &g_alienStage4Threshold, "g_alienStage4Threshold", DEFAULT_ALIEN_STAGE4_THRESH, 0, 0, qfalse }, + { &g_alienStage5Threshold, "g_alienStage5Threshold", DEFAULT_ALIEN_STAGE5_THRESH, 0, 0, qfalse }, { &g_alienGrangerDanceBonus, "g_alienGrangerDanceBonus", "5", 0, 0, qfalse }, { &g_alienBarbsRegen2x, "g_alienBarbsRegen2x", "1.4", CVAR_ARCHIVE, 0, qfalse }, { &g_alienBarbsRegen3x, "g_alienBarbsRegen3x", "1.6", CVAR_ARCHIVE, 0, qfalse }, @@ -615,8 +625,8 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) memset( &level, 0, sizeof( level ) ); level.time = levelTime; level.startTime = levelTime; - level.alienStage2Time = level.alienStage3Time = - level.humanStage2Time = level.humanStage3Time = level.startTime; + level.alienStage2Time = level.alienStage3Time = level.alienStage4Time = level.alienStage5Time = + level.humanStage2Time = level.humanStage3Time = level.humanStage4Time = level.humanStage5Time = level.startTime; level.snd_fry = G_SoundIndex( "sound/misc/fry.wav" ); // FIXME standing in lava / slime level.humanRewardKills = level.alienRewardKills = 0.0f; trap_Cvar_Set( "g_version", G_MOD_VERSION ); @@ -1392,9 +1402,7 @@ void G_CalculateStages( void ) level.alienStage2Time = level.time; lastAlienStageModCount = g_alienStage.modificationCount; G_LogPrintf("Stage: A 2: Aliens reached Stage 2\n"); - } - - if( g_alienCredits.integer >= + } else if( g_alienCredits.integer >= (int)( ceil( (float)g_alienStage3Threshold.integer * alienPlayerCountMod ) ) && g_alienStage.integer == S2 && g_alienMaxStage.integer > S2 ) { @@ -1402,6 +1410,22 @@ void G_CalculateStages( void ) level.alienStage3Time = level.time; lastAlienStageModCount = g_alienStage.modificationCount; G_LogPrintf("Stage: A 3: Aliens reached Stage 3\n"); + } else if( g_alienCredits.integer >= + (int)( ceil( (float)g_alienStage4Threshold.integer * alienPlayerCountMod ) ) && + g_alienStage.integer == S3 && g_alienMaxStage.integer > S3 ) + { + trap_Cvar_Set( "g_alienStage", va( "%d", S4 ) ); + level.alienStage4Time = level.time; + lastAlienStageModCount = g_alienStage.modificationCount; + G_LogPrintf("Stage: A 4: Aliens reached Stage 4\n"); + } else if( g_alienCredits.integer >= + (int)( ceil( (float)g_alienStage5Threshold.integer * alienPlayerCountMod ) ) && + g_alienStage.integer == S4 && g_alienMaxStage.integer > S4 ) + { + trap_Cvar_Set( "g_alienStage", va( "%d", S5 ) ); + level.alienStage5Time = level.time; + lastAlienStageModCount = g_alienStage.modificationCount; + G_LogPrintf("Stage: A 5: Aliens reached Stage 5\n"); } if( g_humanCredits.integer >= @@ -1412,9 +1436,7 @@ void G_CalculateStages( void ) level.humanStage2Time = level.time; lastHumanStageModCount = g_humanStage.modificationCount; G_LogPrintf("Stage: H 2: Humans reached Stage 2\n"); - } - - if( g_humanCredits.integer >= + } else if( g_humanCredits.integer >= (int)( ceil( (float)g_humanStage3Threshold.integer * humanPlayerCountMod ) ) && g_humanStage.integer == S2 && g_humanMaxStage.integer > S2 ) { @@ -1422,6 +1444,22 @@ void G_CalculateStages( void ) level.humanStage3Time = level.time; lastHumanStageModCount = g_humanStage.modificationCount; G_LogPrintf("Stage: H 3: Humans reached Stage 3\n"); + } else if( g_humanCredits.integer >= + (int)( ceil( (float)g_humanStage4Threshold.integer * humanPlayerCountMod ) ) && + g_humanStage.integer == S3 && g_humanMaxStage.integer > S3 ) + { + trap_Cvar_Set( "g_humanStage", va( "%d", S4 ) ); + level.humanStage4Time = level.time; + lastHumanStageModCount = g_humanStage.modificationCount; + G_LogPrintf("Stage: H 4: Humans reached Stage 4\n"); + } else if( g_humanCredits.integer >= + (int)( ceil( (float)g_humanStage5Threshold.integer * humanPlayerCountMod ) ) && + g_humanStage.integer == S4 && g_humanMaxStage.integer > S4 ) + { + trap_Cvar_Set( "g_humanStage", va( "%d", S5 ) ); + level.humanStage5Time = level.time; + lastHumanStageModCount = g_humanStage.modificationCount; + G_LogPrintf("Stage: H 5: Humans reached Stage 5\n"); } if( g_alienStage.modificationCount > lastAlienStageModCount ) @@ -1432,6 +1470,10 @@ void G_CalculateStages( void ) level.alienStage2Time = level.time; else if( g_alienStage.integer == S3 ) level.alienStage3Time = level.time; + else if( g_alienStage.integer == S4 ) + level.alienStage4Time = level.time; + else if( g_alienStage.integer == S5 ) + level.alienStage5Time = level.time; lastAlienStageModCount = g_alienStage.modificationCount; } @@ -1444,6 +1486,10 @@ void G_CalculateStages( void ) level.humanStage2Time = level.time; else if( g_humanStage.integer == S3 ) level.humanStage3Time = level.time; + else if( g_humanStage.integer == S4 ) + level.humanStage4Time = level.time; + else if( g_humanStage.integer == S5 ) + level.humanStage5Time = level.time; lastHumanStageModCount = g_humanStage.modificationCount; } @@ -1452,6 +1498,10 @@ void G_CalculateStages( void ) alienNextStageThreshold = (int)( ceil( (float)g_alienStage2Threshold.integer * alienPlayerCountMod ) ); else if( g_alienStage.integer == S2 && g_alienMaxStage.integer > S2 ) alienNextStageThreshold = (int)( ceil( (float)g_alienStage3Threshold.integer * alienPlayerCountMod ) ); + else if( g_alienStage.integer == S3 && g_alienMaxStage.integer > S3 ) + alienNextStageThreshold = (int)( ceil( (float)g_alienStage4Threshold.integer * alienPlayerCountMod ) ); + else if( g_alienStage.integer == S4 && g_alienMaxStage.integer > S4 ) + alienNextStageThreshold = (int)( ceil( (float)g_alienStage5Threshold.integer * alienPlayerCountMod ) ); else alienNextStageThreshold = -1; @@ -1459,6 +1509,10 @@ void G_CalculateStages( void ) humanNextStageThreshold = (int)( ceil( (float)g_humanStage2Threshold.integer * humanPlayerCountMod ) ); else if( g_humanStage.integer == S2 && g_humanMaxStage.integer > S2 ) humanNextStageThreshold = (int)( ceil( (float)g_humanStage3Threshold.integer * humanPlayerCountMod ) ); + else if( g_humanStage.integer == S3 && g_humanMaxStage.integer > S3 ) + humanNextStageThreshold = (int)( ceil( (float)g_humanStage4Threshold.integer * humanPlayerCountMod ) ); + else if( g_humanStage.integer == S4 && g_humanMaxStage.integer > S4 ) + humanNextStageThreshold = (int)( ceil( (float)g_humanStage5Threshold.integer * humanPlayerCountMod ) ); else humanNextStageThreshold = -1; @@ -1908,7 +1962,7 @@ void G_SendGameStat( team_t team ) } Com_sprintf( data, BIG_INFO_STRING, - "%s %s T:%c A:%f H:%f M:%s D:%d SD:%d AS:%d AS2T:%d AS3T:%d HS:%d HS2T:%d HS3T:%d CL:%d", + "%s %s T:%c A:%f H:%f M:%s D:%d SD:%d AS:%d AS2T:%d AS3T:%d AS4T:%d AS5T:%d HS:%d HS2T:%d HS3T:%d HS4T: %d HS5T: %d CL:%d", Q3_VERSION, g_tag.string, teamChar, @@ -1920,9 +1974,13 @@ void G_SendGameStat( team_t team ) g_alienStage.integer, level.alienStage2Time - level.startTime, level.alienStage3Time - level.startTime, + level.alienStage4Time - level.startTime, + level.alienStage5Time - level.startTime, g_humanStage.integer, level.humanStage2Time - level.startTime, level.humanStage3Time - level.startTime, + level.humanStage4Time - level.startTime, + level.humanStage5Time - level.startTime, level.numConnectedClients ); dataLength = strlen( data ); @@ -2227,7 +2285,8 @@ void CheckExitRules( void ) LogExit( "Aliens win." ); G_MapLog_Result( 'a' ); } - else if( level.time > level.suddenDeathBeginTime/2 && + else if( level.suddenDeathBeginTime != 0 && + level.time > level.suddenDeathBeginTime/2 && level.numAlienClients == 0 && level.numHumanClients == 0 ) { // Close to sudden death started but no clients connected diff --git a/src/game/g_missile.c b/src/game/g_missile.c index aaa1f2b..0cf7c5d 100644 --- a/src/game/g_missile.c +++ b/src/game/g_missile.c @@ -1007,6 +1007,160 @@ gentity_t *launch_grenade( gentity_t *self, vec3_t start, vec3_t dir ) } /* +============= +Lasgun shield +============= +*/ + +void G_LasgunPush( gentity_t *self ) +{ + int entityList[ MAX_GENTITIES ]; + vec3_t range = { LASGUN_PUSH_RANGE, LASGUN_PUSH_RANGE, LASGUN_PUSH_RANGE }; + vec3_t mins, maxs; + int i, num; + gentity_t *enemy; + vec3_t start,dir,end; + float force; + qboolean active = qfalse; + + self->nextthink = level.time + LASGUN_PUSH_REPEAT; + + VectorCopy( self->parent->s.origin, self->s.pos.trBase ); + AngleVectors( self->parent->s.angles, self->s.pos.trDelta, NULL, NULL ); + VectorCopy( self->parent->s.origin, self->r.currentOrigin ); + + VectorAdd( self->r.currentOrigin, range, maxs ); + VectorSubtract( self->r.currentOrigin, range, mins ); + + if (self->count++ > LASGUN_PUSH_COUNT) + { + num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); + + for( i = 0; i < num; i++ ) + { + enemy = &g_entities[ entityList[ i ] ]; + + if( enemy->flags & FL_NOTARGET ) + continue; + + if( !G_Visible( self, enemy, CONTENTS_SOLID ) ) + continue; + + if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] != TEAM_HUMANS ) + { + if (!enemy->client) + continue; + + if (enemy == self->parent) + continue; + + if (!enemy->takedamage) + continue; + + active = qtrue; + break; + } + } + + if (active) + { + for( i = 0; i < num; i++ ) + { + enemy = &g_entities[ entityList[ i ] ]; + + if( enemy->flags & FL_NOTARGET ) + continue; + + if( !G_Visible( self, enemy, CONTENTS_SOLID ) ) + continue; + + if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] != TEAM_NONE ) + { + if (!enemy->client) + continue; + + if (enemy == self->parent) + continue; + + if (!enemy->takedamage) + continue; + + if ( enemy->client->ps.stats[ STAT_CLASS ] == PCL_ALIEN_LEVEL5 ) + force = LASGUN_PUSH_FORCE; + else + force = LASGUN_WEAK_FORCE; + + VectorSubtract( enemy->r.currentOrigin, self->r.currentOrigin, dir); + VectorNormalize( dir ); + VectorScale( dir, force, enemy->client->ps.velocity ); + } + } + } + self->count = 0; + /* + if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) + { + // start the attack animation + G_AddEvent( self, EV_FORCE_FIELD, DirToByte( self->s.origin2 ) ); + + if( level.time >= self->timestamp + 500 ) + { + self->timestamp = level.time; + G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse ); + } + return; + } + } + */ + if( level.time >= self->timestamp ) { + self->freeAfterEvent = qtrue; + self->parent->parentNode = NULL; + } + } + trap_LinkEntity( self ); +} + +gentity_t *launch_shield( gentity_t *self, vec3_t start, vec3_t dir ) +{ + vec3_t range = { LASGUN_PUSH_RANGE, LASGUN_PUSH_RANGE, LASGUN_PUSH_RANGE }; + gentity_t *bolt; + VectorNormalize( dir ); + bolt = G_Spawn( ); + bolt->classname = "light"; + bolt->pointAgainstWorld = qfalse; + bolt->nextthink = level.time + LASGUN_PUSH_REPEAT; + bolt->timestamp = level.time + LASGUN_PUSH_DURATION; + bolt->think = G_LasgunPush; + bolt->s.eType = ET_MISSILE; + bolt->r.svFlags = SVF_USE_CURRENT_ORIGIN; + bolt->s.weapon = WP_LAS_GUN; + // bolt->s.eFlags |= EF_BOUNCE_HALF | EF_NO_BOUNCE_SOUND; + bolt->s.generic1 = WPM_SECONDARY; //weaponMode + bolt->r.ownerNum = self->s.number; + bolt->parent = self; + bolt->damage = bolt->splashDamage = 0; + bolt->splashRadius = 0; + bolt->methodOfDeath = MOD_UNKNOWN; + bolt->splashMethodOfDeath = MOD_UNKNOWN; + // bolt->clipmask = MASK_SHOT; + bolt->target_ent = NULL; + bolt->r.mins[ 0 ] = bolt->r.mins[ 1 ] = bolt->r.mins[ 2 ] = -4.0f; + bolt->r.maxs[ 0 ] = bolt->r.maxs[ 1 ] = bolt->r.maxs[ 2 ] = 4.0f; + bolt->r.ownerNum = self->s.number; // * + bolt->s.time = level.time; + bolt->s.pos.trType = TR_STATIONARY; + bolt->s.pos.trTime = level.time; + // bolt->s.pos.trType = TR_LINEAR; + // bolt->s.pos.trTime = level.time - MISSILE_PRESTEP_TIME; // move a bit on the very first frame + VectorCopy( start, bolt->s.pos.trBase ); + VectorScale( dir, 1, bolt->s.pos.trDelta ); + SnapVector( bolt->s.pos.trDelta ); // save net bandwidth + VectorCopy( start, bolt->r.currentOrigin ); + self->parentNode = bolt; + return bolt; +} + +/* ================= launch_saw ================= diff --git a/src/game/g_weapon.c b/src/game/g_weapon.c index aae97f9..a64f0f8 100644 --- a/src/game/g_weapon.c +++ b/src/game/g_weapon.c @@ -754,6 +754,13 @@ void lasGunFire( gentity_t *ent ) G_Damage( traceEnt, ent, ent, forward, tr.endpos, LASGUN_DAMAGE, 0, MOD_LASGUN ); } +// Lasgun 2ndary (shield) + +void lasGunFire2( gentity_t *ent ) +{ + launch_shield( ent, muzzle, forward ); +} + /* ====================================================================== PAIN SAW @@ -1755,11 +1762,11 @@ gclient_t *client; break; case WP_MASS_DRIVER: -if(g_humanStage.integer == S3 && BG_InventoryContainsUpgrade( UP_BATTPACK, ent->client->ps.stats )) -{ - massDriverFire2( ent ); -} - break; + if(g_humanStage.integer == S5 && BG_InventoryContainsUpgrade( UP_BATTPACK, ent->client->ps.stats )) + { + massDriverFire2( ent ); + } + break; case WP_ALEVEL1: case WP_ALEVEL1_UPG: @@ -1802,7 +1809,7 @@ void FireWeapon2( gentity_t *ent ) switch( ent->s.weapon ) { - case WP_MACHINEGUN: + case WP_MACHINEGUN: bulletFire( ent, RIFLE_SPREAD2, RIFLE_DMG2, MOD_MACHINEGUN ); break; @@ -1829,6 +1836,10 @@ void FireWeapon2( gentity_t *ent ) case WP_FLAMER: FlamerNormal( ent ); break; + + case WP_LAS_GUN: + lasGunFire2( ent ); + break; case WP_PULSE_RIFLE: prifleStasisFire( ent ); diff --git a/src/game/tremulous.h b/src/game/tremulous.h index 879b290..40c0823 100644 --- a/src/game/tremulous.h +++ b/src/game/tremulous.h @@ -38,14 +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 "12000" -#define DEFAULT_ALIEN_STAGE3_THRESH "24000" -#define DEFAULT_ALIEN_MAX_STAGE "2" +#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_HUMAN_BUILDPOINTS "150" #define DEFAULT_HUMAN_QUEUE_TIME "8000" -#define DEFAULT_HUMAN_STAGE2_THRESH "6000" -#define DEFAULT_HUMAN_STAGE3_THRESH "12000" -#define DEFAULT_HUMAN_MAX_STAGE "2" +#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 DAMAGE_FRACTION_FOR_KILL 0.5f //how much damage players (versus structures) need to #define MAXIMUM_BUILD_TIME 30000 // used for pie timer @@ -146,7 +150,7 @@ TREMULOUS EDGE MOD SRC FILE #define LEVEL1_VALUE AVM(270) #define LEVEL1_HEALTH AHM(60) #define LEVEL1_REGEN (0.03f * LEVEL1_HEALTH) -#define LEVEL1_COST 0 +#define LEVEL1_COST 1 #define LEVEL1_UPG_SPEED 1.25f #define LEVEL1_UPG_VALUE AVM(330) #define LEVEL1_UPG_HEALTH AHM(80) @@ -451,6 +455,14 @@ TREMULOUS EDGE MOD SRC FILE #define LASGUN_RELOAD 2000 #define LASGUN_DAMAGE HDM(9) +#define LASGUN_REPEAT2 5000 +#define LASGUN_PUSH_DURATION 4000 +#define LASGUN_PUSH_REPEAT 40 +#define LASGUN_PUSH_COUNT 10 +#define LASGUN_PUSH_RANGE 140 +#define LASGUN_PUSH_FORCE 900 +#define LASGUN_WEAK_FORCE 675 + #define MDRIVER_PRICE 350 #define MDRIVER_CLIPSIZE 5 #define MDRIVER_MAXCLIPS 3 |