Quake 3 bugs
-
- Posts: 4022
- Joined: Sat Mar 12, 2005 6:24 pm
Quake 3 bugs
Please post here about buggy or strange behavior you've noticed in the VQ3 (no mods) 1.32 point-release. Including a demo, screenshot or condump would be very much appreciated. It'll give developers a lead as to what needs fixing in the source.
- CalculateRanks function in the server-side has a data overflow problem.
Fix: g_main.c ~ line 778
- G_RemoveRandomBot in g_bot.c has a tendency to kick spectators of bots instead of the bot upon changes in # of players when you have bot_minplayers set.
Fix: g_bot.c Function: G_RemoveRandomBot
(take out or comment the first two code blocks here:)
- Railgun impact mark uses color2 when it should be using color1.
Fix: cg_weapons.c ~ line 2006
- Quad DLight not team colored, and quad weapon only blue.
Fix:
Part 1: cg_players.c:
CG_PlayerPowerUps function:
just replace the quad section with this:
Part 2: cg_weapons.c
Function: CG_AddWeaponWithPowerups
add the int team declaration like this:
just replace the quad section with this:
scroll down to this line in CG_AddPlayerWeapon:
make it so that the team argument is there:
and the same with:
becomes:
Part 3:
cg_local.h ~ around the other pw shader declarations:
cg_main.c ~ around the other pw shader register parts
make sure you take the line out that looks like this:
make ur shaders and if u want the image i can post it.
- trap_SendServerCommand crashes all clients when exceeding 1024 in length. (im not sure if we are allowed to use this fix or not)
From ET 2.60 + Chrunker's Project BugFix #001:
- "/where" command doesnt display correct current origin
Fix:
g_cmds.c ~ line 1245
change the trap send server command to this:
- svf_bot is not set until below in ClientConnect.
Fix:
this should be:
thats about all i got for now.
Fix: g_main.c ~ line 778
Code: Select all
//fixed a data overflow problem here.
for ( i = 0; i < 2; i++ ) {
//for ( i = 0; i < TEAM_NUM_TEAMS; i++ ) {
Fix: g_bot.c Function: G_RemoveRandomBot
(take out or comment the first two code blocks here:)
Code: Select all
char netname[36];
Code: Select all
strcpy(netname, cl->pers.netname);
Q_CleanStr(netname);
trap_SendConsoleCommand( EXEC_INSERT, va("kick %s\n", netname) );
Code: Select all
trap_SendConsoleCommand( EXEC_INSERT, va("clientkick \"%d\"\n", cl->ps.clientNum));
Fix: cg_weapons.c ~ line 2006
Code: Select all
color = cgs.clientinfo[clientNum].color1; // was cgs.clientinfo[clientNum].color2
Fix:
Part 1: cg_players.c:
CG_PlayerPowerUps function:
just replace the quad section with this:
Code: Select all
// quad gives a dlight
if ( powerups & ( 1 << PW_QUAD ) ) {
if (cgs.gametype >= GT_TEAM) {
if ( cgs.clientinfo[ cent->currentState.clientNum ].team == TEAM_RED ) {
trap_R_AddLightToScene( cent->lerpOrigin, 200 + (rand()&31), 1.0, 0.2f, 0.2f ); // Red DLight
} else if ( cgs.clientinfo[ cent->currentState.clientNum ].team == TEAM_BLUE ) {
trap_R_AddLightToScene( cent->lerpOrigin, 200 + (rand()&31), 0.2f, 0.2f, 1 ); // Blue DLight
} else {
// uh free team is auto team in team games, and specs uhm no items for them...
}
} else {
if ( cgs.clientinfo[ cent->currentState.clientNum ].team == TEAM_FREE ) {
trap_R_AddLightToScene( cent->lerpOrigin, 200 + (rand()&31), 0.2f, 0.2f, 1 ); // Blue DLight
} else {
// uh no items for specs?
}
}
}
Function: CG_AddWeaponWithPowerups
add the int team declaration like this:
Code: Select all
static void CG_AddWeaponWithPowerups( refEntity_t *gun, int powerups, int team ) {
Code: Select all
if ( powerups & ( 1 << PW_QUAD ) ) {
if (cgs.gametype >= GT_TEAM) {
if (team == TEAM_RED) {
gun->customShader = cgs.media.redQuadWeaponShader;
trap_R_AddRefEntityToScene( gun );
} else if (team == TEAM_BLUE) {
gun->customShader = cgs.media.quadWeaponShader;
trap_R_AddRefEntityToScene( gun );
} else {
// dont do for other teams cause they not really team here
}
} else {
if (team == TEAM_FREE) {
gun->customShader = cgs.media.quadWeaponShader;
trap_R_AddRefEntityToScene( gun );
} else {
// dont do for specs
}
}
//trap_R_AddRefEntityToScene( gun );
}
Code: Select all
CG_AddWeaponWithPowerups( &gun, cent->currentState.powerups );
Code: Select all
CG_AddWeaponWithPowerups( &gun, cent->currentState.powerups, team );
Code: Select all
CG_AddWeaponWithPowerups( &barrel, cent->currentState.powerups );
Code: Select all
CG_AddWeaponWithPowerups( &barrel, cent->currentState.powerups, team );
cg_local.h ~ around the other pw shader declarations:
Code: Select all
qhandle_t redQuadShader; // might already be there
qhandle_t redQuadWeaponShader;
Code: Select all
cgs.media.redQuadShader = trap_R_RegisterShader("powerups/redquad" );
cgs.media.redQuadWeaponShader = trap_R_RegisterShader("powerups/redquadWeapon" );
Code: Select all
cgs.media.redQuadShader = trap_R_RegisterShader("powerups/blueflag" );
- trap_SendServerCommand crashes all clients when exceeding 1024 in length. (im not sure if we are allowed to use this fix or not)
From ET 2.60 + Chrunker's Project BugFix #001:
Code: Select all
void trap_SendServerCommand( int clientNum, const char *text ) {
// rain - #433 - commands over 1022 chars will crash the
// client engine upon receipt, so ignore them
// CHRUKER: b001 - Truncating the oversize server command before writing it to the log
if( strlen( text ) > 1022 ) {
G_LogPrintf( "%s: trap_SendServerCommand( %d, ... ) length exceeds 1022.\n", GAMEVERSION, clientNum );
G_LogPrintf( "%s: text [%.950s]... truncated\n", GAMEVERSION, text ); return;
}
syscall( G_SEND_SERVER_COMMAND, clientNum, text );
}
Fix:
g_cmds.c ~ line 1245
change the trap send server command to this:
Code: Select all
trap_SendServerCommand( ent-g_entities, va("print \"%s\n\"", vtos( ent->r.currentOrigin ) ) );
Fix:
Code: Select all
if ( !( ent->r.svFlags & SVF_BOT ) && (strcmp(value, "localhost") != 0)) {
Code: Select all
if ( !isBot && g_needpass.integer && (strcmp(Info_ValueForKey ( userinfo, "ip" ), "localhost") != 0)) {
Last edited by ensiform on Sat Aug 27, 2005 3:02 am, edited 2 times in total.
this can be fixed by putting a cap on com_maxfps ( ive seen 1 mod other than me do this which is ETF ).dzjepp wrote:333+ frames per second gives 'unnatural appearing' (that would otherwise not be there) physics exploits and such. This one might be hard to actually judge as to how it should be categorized though. Personally, I would prefer ALL fps settings above 125 should perform the same.
they set a limit to 30-130.
-
- Posts: 9
- Joined: Fri Jan 25, 2002 8:00 am
Yeah but VQ3 does not cap it.ensiform wrote:this can be fixed by putting a cap on com_maxfps ( ive seen 1 mod other than me do this which is ETF ).dzjepp wrote:333+ frames per second gives 'unnatural appearing' (that would otherwise not be there) physics exploits and such. This one might be hard to actually judge as to how it should be categorized though. Personally, I would prefer ALL fps settings above 125 should perform the same.
they set a limit to 30-130.
beam / continuously firing / weapons with barrels spin when in noclip and the lightning beam draws while in noclip.
Fix: bg_pmove.c ~ line 1902
and since most of u use the normal gauntlet code, you should make CheckGauntletAttack also check if ur in noclip:
Fix: g_weapon.c Function CheckGauntletAttack
below the following:
add this:
if u wanna do a check for the target being noclip also just add this below where traceEnt is set:
Fix: bg_pmove.c ~ line 1902
Code: Select all
&& ( pm->cmd.buttons & BUTTON_ATTACK ) && ( pm->ps->ammo[ pm->ps->weapon ] ) && (!pm->ps->pm_type == PM_NOCLIP) ) {
Fix: g_weapon.c Function CheckGauntletAttack
below the following:
Code: Select all
if ( tr.surfaceFlags & SURF_NOIMPACT ) {
return qfalse;
}
Code: Select all
if ( ent->client->noclip ) {
return qfalse;
}
Code: Select all
if ( traceEnt->client->noclip ) {
return qfalse;
}
not really a bug that i know of but compiling gives me this:
which would be this:
Code: Select all
g:\q3ev\quake3-1.32b\code\win32\win_net.c(491): warning C4133: 'function' : incompatible types - from 'qboolean *' to 'u_long *'
Code: Select all
// make it non-blocking
if( ioctlsocket( newsocket, FIONBIO, &_true ) == SOCKET_ERROR ) {
Com_Printf( "WARNING: UDP_OpenSocket: ioctl FIONBIO: %s\n", NET_ErrorString() );
return 0;
}
woot i finally found this.
teh bugs / undocumented features archive:
http://web.archive.org/web/200406170123 ... 06208.html
Q3 Documentation Project:
http://web.archive.org/web/200403250856 ... 05563.html
Usefull Links List:
http://web.archive.org/web/200406170123 ... 06066.html
:icon25:
teh bugs / undocumented features archive:
http://web.archive.org/web/200406170123 ... 06208.html
Q3 Documentation Project:
http://web.archive.org/web/200403250856 ... 05563.html
Usefull Links List:
http://web.archive.org/web/200406170123 ... 06066.html
:icon25:
-
- Posts: 190
- Joined: Sat Sep 07, 2002 7:00 am
and if you remove the webarchive url at the beginning, you will get the original addresses:
http://www.quake3world.com/ubb/Forum4/HTML/006208.html
http://www.quake3world.com/ubb/Forum4/HTML/005563.html
http://www.quake3world.com/ubb/Forum4/HTML/006066.html
http://www.quake3world.com/ubb/Forum4/HTML/006208.html
http://www.quake3world.com/ubb/Forum4/HTML/005563.html
http://www.quake3world.com/ubb/Forum4/HTML/006066.html
-
- Posts: 8
- Joined: Mon May 30, 2005 3:05 pm
There is nothing stopping you simply wrapping trap_SendServerCommand and replacing every call to it though.ShrapnelCity wrote:sadly, it doesn't work, because g_syscalls.c isn't used in a QVM build.ensiform wrote:trap_SendServerCommand crashes all clients when exceeding 1024 in length. (im not sure if we are allowed to use this fix or not)
couldnt this section:
cg_weapons.c in CG_LightningBolt
be:
because ps.viewheight is set in pmove i think depending on normal/crouch/dead viewheight and thus supporting crouch.
cg_weapons.c in CG_LightningBolt
Code: Select all
// FIXME: crouch
muzzlePoint[2] += DEFAULT_VIEWHEIGHT;
Code: Select all
// FIXME: crouch
muzzlePoint[2] += cg.predictedPlayerState.viewheight;