diff -aur ../warsow_instarocket/game/g_combat.c game/g_combat.c --- ../warsow_instarocket/game/g_combat.c 2007-07-01 22:40:28.000000000 +0200 +++ game/g_combat.c 2007-07-01 22:49:00.000000000 +0200 @@ -508,6 +508,11 @@ take = 0; } + // no selfdamage when in instarocket mode + if( g_instarocket->integer && attacker == targ ) { + take = save = 0; + } + // APPLY THE DAMAGES if( !take && !asave ) diff -aur ../warsow_instarocket/game/g_gameteams.c game/g_gameteams.c --- ../warsow_instarocket/game/g_gameteams.c 2007-07-01 22:40:28.000000000 +0200 +++ game/g_gameteams.c 2007-07-01 00:55:42.000000000 +0200 @@ -558,7 +558,7 @@ G_Teams_SetTeam( ent, team ); // force client to popup CA menu. - if( game.gametype == GAMETYPE_CA && g_ca_classmode->integer && !g_instagib->integer && team != TEAM_SPECTATOR ) + if( game.gametype == GAMETYPE_CA && g_ca_classmode->integer && !g_instagib->integer && !g_instarocket->integer && team != TEAM_SPECTATOR ) trap_GameCmd( ent, "mnca" ); return qtrue; diff -aur ../warsow_instarocket/game/g_gametype_ca.c game/g_gametype_ca.c --- ../warsow_instarocket/game/g_gametype_ca.c 2007-07-01 22:40:28.000000000 +0200 +++ game/g_gametype_ca.c 2007-07-01 00:55:42.000000000 +0200 @@ -89,7 +89,7 @@ G_Match_FreeBodyQueue(); match.pickableItemsMask = GS_Gametype_SpawnableItemMask( game.gametype )|GS_Gametype_DropableItemMask( game.gametype ); - if( g_instagib->integer ) { + if( g_instagib->integer || g_instarocket->integer ) { match.pickableItemsMask &= ~G_INSTAGIB_NEGATE_ITEMMASK; } @@ -110,7 +110,7 @@ return; if( !g_ca_classmode->integer ) return; - if( g_instagib->integer ) + if( g_instagib->integer || g_instarocket->integer ) return; if( ent->r.svflags & SVF_FAKECLIENT && ent->ai.type == AI_ISBOT ) { @@ -294,6 +294,12 @@ self->r.client->inventory[AMMO_BOLTS] = 1; self->r.client->inventory[AMMO_WEAK_BOLTS] = 1; } + else if( g_instarocket->integer ) + { + self->r.client->inventory[WEAP_ROCKETLAUNCHER] = 1; + self->r.client->inventory[AMMO_ROCKETS] = 1; + self->r.client->inventory[AMMO_WEAK_ROCKETS] = 1; + } else { ca_weaponflag_t weaponflag; @@ -481,7 +487,7 @@ PLAYERNUM(e), match.scores[PLAYERNUM(e)].score, (int)(e->r.client->resp.total_damage_given * damage_scale), - (g_ca_classmode->integer && !g_ca_competitionmode->integer && !g_instagib->integer) ? (cagame.playerclass[PLAYERNUM(e)] + 1) : 0, + (g_ca_classmode->integer && !g_ca_competitionmode->integer && !g_instagib->integer && !g_instarocket->integer) ? (cagame.playerclass[PLAYERNUM(e)] + 1) : 0, e->r.client->r.ping > 999 ? 999 : e->r.client->r.ping, G_IsDead(e), // wsw : imp : Added this to parse match.ready[PLAYERNUM(e)], @@ -847,8 +853,8 @@ return; } - if( g_instagib->integer ) { - G_PrintMsg( ent, "This feature is not available in instagib mode.\n" ); + if( g_instagib->integer || g_instarocket->integer ) { + G_PrintMsg( ent, "This feature is not available in instagib/instarocket mode.\n" ); return; } diff -aur ../warsow_instarocket/game/g_gametype_race.c game/g_gametype_race.c --- ../warsow_instarocket/game/g_gametype_race.c 2007-07-01 22:40:28.000000000 +0200 +++ game/g_gametype_race.c 2007-07-01 00:55:42.000000000 +0200 @@ -110,7 +110,7 @@ G_Match_RespawnAllClients(); G_Match_FreeBodyQueue(); match.pickableItemsMask = GS_Gametype_SpawnableItemMask( game.gametype )|GS_Gametype_DropableItemMask( game.gametype ); - if( g_instagib->integer ) { + if( g_instagib->integer || g_instarocket->integer ) { match.pickableItemsMask &= ~G_INSTAGIB_NEGATE_ITEMMASK; } match.endtime = 0; diff -aur ../warsow_instarocket/game/g_gametypes.c game/g_gametypes.c --- ../warsow_instarocket/game/g_gametypes.c 2007-07-01 22:40:28.000000000 +0200 +++ game/g_gametypes.c 2007-07-01 00:55:42.000000000 +0200 @@ -27,7 +27,7 @@ static void G_Gametype_GENERIC_SetUpWarmup( void ) { match.pickableItemsMask = GS_Gametype_SpawnableItemMask( game.gametype )|GS_Gametype_DropableItemMask( game.gametype ); - if( g_instagib->integer ) { + if( g_instagib->integer || g_instarocket->integer ) { match.pickableItemsMask &= ~G_INSTAGIB_NEGATE_ITEMMASK; } @@ -100,7 +100,7 @@ match.pickableItemsMask = GS_Gametype_SpawnableItemMask( game.gametype )|GS_Gametype_DropableItemMask( game.gametype ); - if( g_instagib->integer ) { + if( g_instagib->integer || g_instarocket->integer ) { match.pickableItemsMask &= ~G_INSTAGIB_NEGATE_ITEMMASK; } @@ -1942,7 +1942,7 @@ return qfalse; itemmask = GS_Gametype_SpawnableItemMask(game.gametype); - if( g_instagib->integer ) { + if( g_instagib->integer || g_instarocket->integer ) { itemmask &= ~G_INSTAGIB_NEGATE_ITEMMASK; } @@ -1959,7 +1959,7 @@ return qfalse; itemmask = GS_Gametype_RespawnableItemMask(game.gametype); - if( g_instagib->integer ) { + if( g_instagib->integer || g_instarocket->integer ) { itemmask &= ~G_INSTAGIB_NEGATE_ITEMMASK; } @@ -1982,7 +1982,7 @@ } itemmask = GS_Gametype_DropableItemMask(game.gametype); - if( g_instagib->integer ) { + if( g_instagib->integer || g_instarocket->integer ) { itemmask &= ~G_INSTAGIB_NEGATE_ITEMMASK; } diff -aur ../warsow_instarocket/game/g_local.h game/g_local.h --- ../warsow_instarocket/game/g_local.h 2007-07-01 22:40:28.000000000 +0200 +++ game/g_local.h 2007-07-01 00:55:42.000000000 +0200 @@ -324,6 +324,7 @@ //game switches extern cvar_t *g_tctf; extern cvar_t *g_instagib; +extern cvar_t *g_instarocket; extern cvar_t *g_ca_health; extern cvar_t *g_ca_armor; diff -aur ../warsow_instarocket/game/g_main.c game/g_main.c --- ../warsow_instarocket/game/g_main.c 2007-07-01 22:40:28.000000000 +0200 +++ game/g_main.c 2007-07-01 00:55:42.000000000 +0200 @@ -86,6 +86,7 @@ cvar_t *g_tctf; cvar_t *g_instagib; +cvar_t *g_instarocket; cvar_t *g_ca_health; cvar_t *g_ca_armor; @@ -308,6 +309,11 @@ //game switches g_tctf = trap_Cvar_Get( "g_tctf", "1", CVAR_SERVERINFO|CVAR_ARCHIVE ); g_instagib = trap_Cvar_Get( "g_instagib", "0", CVAR_SERVERINFO|CVAR_ARCHIVE|CVAR_LATCH ); + g_instarocket = trap_Cvar_Get( "g_instarocket", "0", CVAR_SERVERINFO|CVAR_ARCHIVE|CVAR_LATCH ); + + if(g_instagib->integer) { + trap_Cvar_Set( "g_instarocket", "0" ); + } // CA g_ca_health = trap_Cvar_Get( "g_ca_health", "100", CVAR_ARCHIVE ); diff -aur ../warsow_instarocket/game/g_spawn.c game/g_spawn.c --- ../warsow_instarocket/game/g_spawn.c 2007-07-01 22:40:28.000000000 +0200 +++ game/g_spawn.c 2007-07-01 00:55:42.000000000 +0200 @@ -716,6 +716,9 @@ if( g_instagib->integer ) { item = GS_FindItemByTag( WEAP_ELECTROBOLT ); PrecacheItem( item ); + } else if( g_instarocket->integer ) { + item = GS_FindItemByTag( WEAP_ROCKETLAUNCHER ); + PrecacheItem( item ); } else if( game.gametype == GAMETYPE_RACE ) { item = GS_FindItemByTag( WEAP_GUNBLADE ); PrecacheItem( item ); diff -aur ../warsow_instarocket/game/p_client.c game/p_client.c --- ../warsow_instarocket/game/p_client.c 2007-07-01 22:40:28.000000000 +0200 +++ game/p_client.c 2007-07-01 00:55:42.000000000 +0200 @@ -709,6 +709,12 @@ self->r.client->inventory[AMMO_BOLTS] = 1; self->r.client->inventory[AMMO_WEAK_BOLTS] = 1; } + else if ( g_instarocket->integer ) + { + self->r.client->inventory[WEAP_ROCKETLAUNCHER] = 1; + self->r.client->inventory[AMMO_ROCKETS] = 1; + self->r.client->inventory[AMMO_WEAK_ROCKETS] = 1; + } else { if( match.state == MATCH_STATE_WARMUP ) { diff -aur ../warsow_instarocket/game/p_weapon.c game/p_weapon.c --- ../warsow_instarocket/game/p_weapon.c 2007-07-01 22:40:28.000000000 +0200 +++ game/p_weapon.c 2007-07-01 22:53:03.000000000 +0200 @@ -745,11 +745,24 @@ int damage = firedef->damage; int speed = firedef->speed; int knockback = firedef->knockback; + int radius = firedef->splash_radius; #ifdef ROCKETS_PRESTEP edict_t *rocket; #endif - if( is_quad ) + if( g_instarocket->integer ) { + damage = 200; // orig = 95 + mindmg = 200; // orig = 10 + speed = 1100; // orig = 1100 + radius = 50; // orig = 120 + knockback = 180; // orig = 100 + + // higher rocket speed in ca + if( game.gametype == GAMETYPE_CA ) { + speed = 1200; + } + } + else if( is_quad ) { damage *= QUAD_DAMAGE_SCALE; knockback *= QUAD_KNOCKBACK_SCALE; @@ -771,20 +784,23 @@ G_ProjectSource( ent->s.origin, tv(0,0,ent->viewheight), forward, right, start ); #ifdef ROCKETS_PRESTEP - rocket = W_Fire_Rocket( ent, start, forward, speed, damage, knockback, mindmg, firedef->splash_radius, firedef->timeout, MOD_ROCKET_S, 0 ); + rocket = W_Fire_Rocket( ent, start, forward, speed, damage, knockback, mindmg, radius, firedef->timeout, MOD_ROCKET_S, 0 ); if( rocket ) { P_TimeDeltaPrestepProjectile( rocket, ent, timeDelta ); } #else - W_Fire_Rocket( ent, start, forward, speed, damage, knockback, mindmg, firedef->splash_radius, firedef->timeout, MOD_ROCKET_S, timeDelta ); + W_Fire_Rocket( ent, start, forward, speed, damage, knockback, mindmg, radius, firedef->timeout, MOD_ROCKET_S, timeDelta ); #endif #ifdef MIDAIR if( game.gametype == GAMETYPE_MIDAIR ) return; #endif - if( firedef->ammo_id && firedef->usage_count && !( dmflags->integer & DF_INFINITE_AMMO ) ) - ent->r.client->inventory[firedef->ammo_id] -= firedef->usage_count; + if( !g_instarocket->integer ) { + if( firedef->ammo_id && firedef->usage_count && !( dmflags->integer & DF_INFINITE_AMMO ) ) { + ent->r.client->inventory[firedef->ammo_id] -= firedef->usage_count; + } + } } //=================