Note: LucasForums Archive Project
The content here was reconstructed by scraping the Wayback Machine in an effort to restore some of what was lost when LF went down. The LucasForums Archive Project claims no ownership over the content or assets that were archived on archive.org.

This project is meant for research purposes only.

Q3 Engine Game Bugs / JA bugs

Page: 1 of 5
 ensiform
11-13-2004, 12:53 PM
#1
1. (g_cmds.c) cmd_where_f should use
vtos( ent->r.currentOrigin ) in the print too show current location.
2. bot_minplayers removerandom bot bug where it kicks spectators watching them instead of the bot:

change the following in g_bot.c:

trap_SendConsoleCommand( EXEC_INSERT, va("kick \"%s\"\n", netname) );

to

trap_SendConsoleCommand( EXEC_INSERT, va("clientkick \"%d\"\n", cl->ps.clientNum));

3. Something i found in ET mod-source so credit them and me...

in g_client.c below the check for invaild pw put:

// Gordon: porting q3f flag bug fix
// If a player reconnects quickly after a disconnect, the client disconnect may never be called, thus flag can get lost in the ether
if( ent->inuse ) {
G_LogPrintf( "Forcing disconnect on active client: %i\n", ent-g_entities );
// so lets just fix up anything that should happen on a disconnect
ClientDisconnect( ent-g_entities );
}

4. bug in password checking if statement also in g_client.c:

SVF_BOT isnt set till below so change it to !isBot

5. remapShader in cg_servercmds.c is bugged, just comment out old and replace with the following if u plan on having a client also:

if ( Q_strncmp (cmd, "remapShader", 11) == 0 ) {
if (trap_Argc() == 4) {
char shader1[MAX_QPATH];
char shader2[MAX_QPATH];
Q_strncpyz(shader1, CG_Argv(1), sizeof(shader1));
Q_strncpyz(shader2, CG_Argv(2), sizeof(shader2));
trap_R_RemapShader(shader1, shader2, CG_Argv(3));
return;
}
}

6. for now from my other post Tinny showed me how too fix player sliding:
in bg_pmove.c u will find:

// If on a client then there is no friction
else if ( pm->ps->groundEntityNum < MAX_CLIENTS )
{
drop = 0;
}

comment that out and compile cgame and game i think for this too work.

Finally, if you would like me too share my /dropflag cmd drop me a pm. it should be pretty much exploit proof. i have trace in it so that if u toss it next to a wall it does not go out of level.

i also did fix the connection screen bug but i feel that i didnt need to show this now :)

also i may suggest disabling the debug cmds in g_cmds.c or u could fix em up and disable use of -1 for setsabermove :) and make a cvar too allow/disallow them.

(debugThrow, debugDropSaber, debugSetSaberMove, debugKnockMeDown, debugSetBodyAnim, debugDismemberment, and debugSaberSwitch)
 razorace
11-13-2004, 6:08 PM
#2
Just compiling your code with the "Final" Compile configuration removes the issue with the debug commands being availible to players.
 ensiform
11-13-2004, 6:32 PM
#3
exactly but my mod allows them with a cvar but some mods dont notice the ifndef final_build around them.
 Tinny
11-14-2004, 2:41 PM
#4
Thanks a lot for those Ensiform, btw what exactly is /dropflag?
 ensiform
11-15-2004, 4:09 AM
#5
heh its to toss the flag in ctf :)
 ensiform
11-15-2004, 12:31 PM
#6
Anybody know how to fix the warning that comes up from this line of code in cg_players.c:

const unsigned char savRGBA[3] = ;

The warning is: warning C4204: nonstandard extension used : non-constant aggregate initializer

um ppl feel free too post your bugfixes here :). can we get this to be an announcement or sticky ?
 razorace
11-15-2004, 9:12 PM
#7
The error is due to C not liking you initizing your vec3_ts and similar data thingys when you define them. Do the following to fix this:

cg_players.c, CG_Player()

const unsigned char savRGBA[3] = ;
=>
unsigned char savRGBA[3];
savRGBA[0] = legs.shaderRGBA[0];
savRGBA[1] = legs.shaderRGBA[1];
savRGBA[2] = legs.shaderRGBA[2];
 ensiform
11-16-2004, 2:55 PM
#8
that code gives this :(


warning C4132: 'savRGBA' : const object should be initialized
error C2166: l-value specifies const object
error C2166: l-value specifies const object
error C2166: l-value specifies const object
 razorace
11-16-2004, 3:29 PM
#9
My bad. Remove the "const" from the define.

EDIT: The code in the above post has been fixed to remove that problem.
 ensiform
11-17-2004, 11:01 AM
#10
ah, ty ;) trying to fix all the bugs and warnings to have a bug-free JA for RS :)
 ensiform
11-17-2004, 2:27 PM
#11
Here are some sound bugfixes:

when you use meditate/bow and saber is not out, usually with staff or dual sabers the saber off sound still plays fix:

meditate:

where it says

{//turn off second saber
just above the G_Sound add

if (ent->client->ps.weapon == WP_SABER)

same for {//turn off first
if (ent->client->ps.weapon == WP_SABER)

do the same with bow.

in g_cmds.c find the Cmd_SaberAttackCycle_f command

and look for the G_Sound 's in it and just add above them:
if (ent->client->ps.weapon == WP_SABER)

i suppose you could just have a return towards the top of the function like:

if (ent->client->ps.weapon == WP_SABER) {
return;
}

hope that helps :)
 ensiform
11-20-2004, 5:37 AM
#12
CopyToBodyQue has a bug where your custom rgb is used even when in team game. to fix:

body->s.customRGBA[0] = ent->client->ps.customRGBA[0];
body->s.customRGBA[1] = ent->client->ps.customRGBA[1];
body->s.customRGBA[2] = ent->client->ps.customRGBA[2];
body->s.customRGBA[3] = ent->client->ps.customRGBA[3];

should be:

if (g_gametype.integer >= GT_TEAM) {
switch(ent->client->sess.sessionTeam)
{
case TEAM_RED:
body->s.customRGBA[0] = 255;
body->s.customRGBA[1] = 50;
body->s.customRGBA[2] = 50;
break;
case TEAM_BLUE:
body->s.customRGBA[0] = 75;
body->s.customRGBA[1] = 75;
body->s.customRGBA[2] = 255;
break;
default:
body->s.customRGBA[0] = ent->client->ps.customRGBA[0];
body->s.customRGBA[1] = ent->client->ps.customRGBA[1];
body->s.customRGBA[2] = ent->client->ps.customRGBA[2];
body->s.customRGBA[3] = ent->client->ps.customRGBA[3];
break;
}
} else {
body->s.customRGBA[0] = ent->client->ps.customRGBA[0];
body->s.customRGBA[1] = ent->client->ps.customRGBA[1];
body->s.customRGBA[2] = ent->client->ps.customRGBA[2];
body->s.customRGBA[3] = ent->client->ps.customRGBA[3];
}
 razorace
11-20-2004, 7:33 AM
#13
Ahh, I've actually noticed that bug. Thanks for the fix!
 ensiform
11-20-2004, 8:38 AM
#14
hehe, i doubt im gonna get a reply from masterhex about the sound tracker thing though.
 razorace
11-20-2004, 5:50 PM
#15
Exactly what was the sound tracker problem again? I thought the solution was to use SoundOnEnt instead of G_Sound.
 ensiform
11-20-2004, 6:25 PM
#16
um according too hex's original post it's in CG_UpdateSoundTrackers which is in cg_view.c.
 razorace
11-20-2004, 7:08 PM
#17
What's the symptoms of the bug again?
 ensiform
11-21-2004, 12:20 PM
#18
um the sounds do not always play when flag taken/return/captures some other sounds too i believe. set your thread cutoff too show all and look back at hex's old thread.
 ensiform
11-23-2004, 7:19 PM
#19
has anyone fixed ICARUS with NPC's for MP like SP ? so that u can use scripts with npc's too be smart :) ?
 razorace
11-23-2004, 9:06 PM
#20
I have. I'm working on getting the SP maps to run as well as possible in MP. I've made great progress so far.
 ensiform
11-24-2004, 5:11 AM
#21
care too share this fixed code ? :D
 razorace
11-24-2004, 9:49 AM
#22
It's all availible on the OJP repository. The various fixes require a lot of code addtions/changes thruout the SDK so I can't just post the changes.
 ensiform
11-24-2004, 10:03 AM
#23
got a link to the ojp sdk ?
 Tinny
11-27-2004, 8:58 AM
#24
You have to use TortoiseCVS, check out How to access the OJP source in the OJP forum which is located in the Hosted forums.
 ensiform
11-27-2004, 7:16 PM
#25
did but it aint working right.
 razorace
11-27-2004, 9:51 PM
#26
Well, our repository server was down yesterday. I suggest you try again today.
 ensiform
12-05-2004, 11:57 AM
#27
dang thats too much work just too get the sdk for ojp :(
 razorace
12-05-2004, 12:07 PM
#28
You only have to do it once and after that updates are a two click process. OJP's SDK changes about daily.
 ASk
12-15-2004, 8:04 AM
#29
The warning is: warning C4204: nonstandard extension used : non-constant aggregate initializer


Just a little clarification - you may only initialize a const with a constant expression (i.e a number). The reason for this is simple - when the compiler compiles your code, the const variable is replaced by its value everywhere it appears. Initializing it with the value of another variable can't be resolved until run-time, therefore it's not an acceptable behavior.

Since the const variable must be resolved during compile time and not run-time, you get that error.
 ensiform
12-17-2004, 4:00 PM
#30
yes but that was a lucas/raven bug not one of mine :)
 GangsterAngel
12-19-2004, 1:15 PM
#31
not sure if this is a 'bug' ,
but vehicles do not open shields,

FIX:

void ShieldTouch(gentity_t *self, gentity_t *other, trace_t *trace)
{

gentity_t *owner;
owner=self->parent;

//Vehicle open shield's too! - GA
if(other->s.NPC_class == CLASS_VEHICLE) {
if(other->m_pVehicle->GA_LastRider==NULL)return;
else {
other = other->m_pVehicle->GA_LastRider;
if(!other->inuse || !other->client)return;
}
}

if (g_gametype.integer >= GT_TEAM)
{ // let teammates through
// compare the parent's team to the "other's" team
if (self->parent && ( self->parent->client) && (other->client))
{
if (OnSameTeam(self->parent, other))
{
ShieldGoNotSolid(self);
}
}
}
else
{//let the person who dropped the shield through
if (self->parent && self->parent->s.number == other->s.number)
{
ShieldGoNotSolid(self);
}
else if(InSameGang(owner,other)) ShieldGoNotSolid(self);
else if(self->genericValue13!=0 && self->genericValue13 <= other->client->pers.ShieldRank)ShieldGoNotSolid(self);//Rank based shiels
}
//NPC's who leader owns the shield

if (other && other->inuse && other->s.eType==ET_NPC){
//if(other->client->leader==owner)ShieldGoNotSolid(self);
///Not going to use the above way ,, just going to call ShieldTouch on the owner
ShieldTouch(self,other->client->leader,NULL);

}
}
 GangsterAngel
12-19-2004, 1:18 PM
#32
forgot to add. that function has GA_Lastrider in it ,
witch is a value set when someone gets on a vehicle.
so the vehicle remembers the last person on it,

also. it has my "Rank shields" in it , that have to be removed,

( Basicly u just need the top bit added too yours )
 razorace
12-19-2004, 4:45 PM
#33
By shields you mean the deployable shield item?
 GangsterAngel
12-19-2004, 4:48 PM
#34
yes i do.
 razorace
03-01-2005, 2:00 PM
#35
(Bump Question) Say, what does "remapShader" do anyway?
 Wudan
03-04-2005, 12:13 PM
#36
If I recall it tells the engine and replace all instances of shader 'a' with shader 'b', and gets cleared when a map is loaded.
 razorace
03-04-2005, 2:05 PM
#37
so, what uses it?
 ensiform
07-08-2005, 8:28 PM
#38
the actual fix for #4 of mine at the top should be:

if ( !isBot && g_needpass.integer && (strcmp(Info_ValueForKey ( userinfo, "ip" ), "localhost") != 0)) {
 ensiform
07-08-2005, 8:29 PM
#39
gloat really should only work when saber is out because it shows sparks even when weapon is not saber...

if ( ent->client->ps.weapon == WP_SABER )
{
if ( ent->client->saber[0].gloatAnim != -1 )
{
anim = ent->client->saber[0].gloatAnim;
}
else if ( ent->client->saber[1].model
&& ent->client->saber[1].model[0]
&& ent->client->saber[1].gloatAnim != -1 )
{
anim = ent->client->saber[1].gloatAnim;
}
else
{
switch ( ent->client->ps.fd.saberAnimLevel )
{
case SS_FAST:
case SS_TAVION:
anim = BOTH_VICTORY_FAST;
break;
case SS_MEDIUM:
anim = BOTH_VICTORY_MEDIUM;
break;
case SS_STRONG:
case SS_DESANN:
if ( ent->client->ps.saberHolstered )
{//turn on first
G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn );
}
ent->client->ps.saberHolstered = 0;
anim = BOTH_VICTORY_STRONG;
break;
case SS_DUAL:
if ( ent->client->ps.saberHolstered == 1
&& ent->client->saber[1].model
&& ent->client->saber[1].model[0] )
{//turn on second saber
G_Sound( ent, CHAN_WEAPON, ent->client->saber[1].soundOn );
}
else if ( ent->client->ps.saberHolstered == 2 )
{//turn on first
G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn );
}
ent->client->ps.saberHolstered = 0;
anim = BOTH_VICTORY_DUAL;
break;
case SS_STAFF:
if ( ent->client->ps.saberHolstered )
{//turn on first
G_Sound( ent, CHAN_WEAPON, ent->client->saber[0].soundOn );
}
ent->client->ps.saberHolstered = 0;
anim = BOTH_VICTORY_STAFF;
break;
}
}
break;
}
}
 razorace
07-09-2005, 1:48 AM
#40
While on the subject, has anyone else noticed bots wearing the wrong teams in team games?

Also, I have finally fixed the Hoth Bridge exploit if anyone is interested.
 ensiform
07-09-2005, 5:21 PM
#41
Originally posted by razorace
While on the subject, has anyone else noticed bots wearing the wrong teams in team games?

Also, I have finally fixed the Hoth Bridge exploit if anyone is interested.

never noticed wrong team colors...

i would like that but siege doesnt work for rs or my basejka :/
 razorace
07-09-2005, 7:43 PM
#42
It doesn't work at all?!
 ensiform
07-09-2005, 9:50 PM
#43
no, siege gives max cvars error...

actually base works for me now, for some reason all my rs cvars n **** were in base's config...

but i found a bug in cmd_kill_f with siege...


if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) {
return;
}
shouldnt it be this, i was playing around and when i was specing when i could move, and pressed kill and i actually died again...

if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR || ent->client->tempSpectate > level.time ) {
return;
}
 razorace
07-10-2005, 12:24 PM
#44
Well, it probably means that RS has simply added too much cvars to the game. I've heard once that it's possible to increase the limit but I've never confirmed that.
 ensiform
07-10-2005, 6:52 PM
#45
not without the engine :/ whats weird is even when i dont make any of them stored in the config either, usually that is what causes it. i suppose u could probably get away with creating another cvartable...
 ensiform
07-13-2005, 7:01 PM
#46
havent been able to fix this yet but:

bot_nochat doesnt really work. ima look into it but im not sure if it is even fixable in mod.

Edit: no i really dont think it is possible without making my own cvar.
 razorace
07-13-2005, 7:42 PM
#47
Couldn't you just alter the bot chat function so it just disables if the cvar is set.
 ensiform
07-13-2005, 8:06 PM
#48
maybe but the cvar doesnt exist in the game code. i got it working using bot_nochat2.

in ai_util.c find the function BotDoChat

just below the gentity_t *cobject; line add:

if (bot_nochat2.integer)
{
return 0;
}


you will of course need to make the cvar in g_local.h and g_main.c.
 razorace
07-13-2005, 10:11 PM
#49
Why not just use the original bot_nochat cvar?
 ensiform
07-14-2005, 12:45 PM
#50
cause it doesnt exist and it may do something else in the engine and i dont want to **** it up.
Page: 1 of 5