Skip to content

Commit 332d5fe

Browse files
ernieRippeR37
authored andcommitted
Fix railgun / crosshair colors
Add a consistent color band to pakQ3VR, which supersedes both pak8a and pak3a, and keeps bands consistent across baseq3/missionpack without changes to either of the other pk3 files. Demo video: https://youtube.com/shorts/N9rZJ-VkIu8
1 parent 68101c0 commit 332d5fe

File tree

6 files changed

+58
-48
lines changed

6 files changed

+58
-48
lines changed
8.03 KB
Binary file not shown.

code/cgame/cg_draw.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2061,9 +2061,9 @@ static void CG_CrosshairColorFromInt( int val, byte *color ) {
20612061
color[1] = 255;
20622062
color[2] = 255;
20632063
} else {
2064-
color[0] = (val & 1) ? 255 : 0;
2064+
color[0] = (val & 4) ? 255 : 0;
20652065
color[1] = (val & 2) ? 255 : 0;
2066-
color[2] = (val & 4) ? 255 : 0;
2066+
color[2] = (val & 1) ? 255 : 0;
20672067
}
20682068
color[3] = 255;
20692069
}

code/cgame/cg_players.c

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -84,27 +84,34 @@ sfxHandle_t CG_CustomSound( int clientNum, const char *soundName ) {
8484

8585
/*
8686
====================
87-
CG_ColorFromChar
87+
CG_ColorFromString
8888
====================
8989
*/
90-
static void CG_ColorFromChar( char v, vec3_t color ) {
90+
static void CG_ColorFromString( const char *v, vec3_t color ) {
9191
int val;
9292

93-
val = v - '0';
93+
VectorClear( color );
94+
95+
if ( !v || !v[0] ) {
96+
VectorSet( color, 1, 1, 1 );
97+
return;
98+
}
99+
100+
val = v[0] - '0';
94101

95102
if ( val < 1 || val > 7 ) {
96-
VectorSet( color, 1.0f, 1.0f, 1.0f );
97-
} else {
98-
VectorClear( color );
99-
if ( val & 1 ) {
100-
color[0] = 1.0f;
101-
}
102-
if ( val & 2 ) {
103-
color[1] = 1.0f;
104-
}
105-
if ( val & 4 ) {
106-
color[2] = 1.0f;
107-
}
103+
VectorSet( color, 1, 1, 1 );
104+
return;
105+
}
106+
107+
if ( val & 1 ) {
108+
color[2] = 1.0f;
109+
}
110+
if ( val & 2 ) {
111+
color[1] = 1.0f;
112+
}
113+
if ( val & 4 ) {
114+
color[0] = 1.0f;
108115
}
109116
}
110117

@@ -122,24 +129,24 @@ static void CG_SetColorInfo( const char *color, clientInfo_t *info )
122129

123130
if ( !color[0] )
124131
return;
125-
CG_ColorFromChar( color[0], info->headColor );
132+
CG_ColorFromString( color, info->headColor );
126133

127134
if ( !color[1] )
128135
return;
129-
CG_ColorFromChar( color[1], info->bodyColor );
136+
CG_ColorFromString( &color[1], info->bodyColor );
130137

131138
if ( !color[2] )
132139
return;
133-
CG_ColorFromChar( color[2], info->legsColor );
140+
CG_ColorFromString( &color[2], info->legsColor );
134141

135142
// override color1/color2 if specified
136143
if ( !color[3] )
137144
return;
138-
CG_ColorFromChar( color[3], info->color1 );
145+
CG_ColorFromString( &color[3], info->color1 );
139146

140147
if ( !color[4] )
141148
return;
142-
CG_ColorFromChar( color[4], info->color2 );
149+
CG_ColorFromString( &color[4], info->color2 );
143150
}
144151

145152

@@ -1224,15 +1231,15 @@ void CG_NewClientInfo( int clientNum ) {
12241231

12251232
// colors
12261233
v = Info_ValueForKey( configstring, "c1" );
1227-
CG_ColorFromChar( v[0], newInfo.color1 );
1234+
CG_ColorFromString( v, newInfo.color1 );
12281235

12291236
newInfo.c1RGBA[0] = 255 * newInfo.color1[0];
12301237
newInfo.c1RGBA[1] = 255 * newInfo.color1[1];
12311238
newInfo.c1RGBA[2] = 255 * newInfo.color1[2];
12321239
newInfo.c1RGBA[3] = 255;
12331240

12341241
v = Info_ValueForKey( configstring, "c2" );
1235-
CG_ColorFromChar( v[0], newInfo.color2 );
1242+
CG_ColorFromString( v, newInfo.color2 );
12361243

12371244
newInfo.c2RGBA[0] = 255 * newInfo.color2[0];
12381245
newInfo.c2RGBA[1] = 255 * newInfo.color2[1];
@@ -1323,9 +1330,9 @@ void CG_NewClientInfo( int clientNum ) {
13231330
colors = CG_GetTeamColors( cg_teamColors.string, newInfo.team );
13241331
len = strlen( colors );
13251332
if ( len >= 4 )
1326-
CG_ColorFromChar( colors[3], newInfo.color1 );
1333+
CG_ColorFromString( &colors[3], newInfo.color1 );
13271334
if ( len >= 5 )
1328-
CG_ColorFromChar( colors[4], newInfo.color2 );
1335+
CG_ColorFromString( &colors[4], newInfo.color2 );
13291336
}
13301337
}
13311338
}

code/q3_ui/ui_playersettings.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,8 +236,10 @@ static void PlayerSettings_DrawEffects( void *self ) {
236236

237237
UI_DrawProportionalString( item->generic.x, item->generic.y, "Effects", style, color );
238238

239+
int markerX = item->generic.x + 64 + (item->curvalue * 112 / 6);
240+
239241
UI_DrawHandlePic( item->generic.x + 64, item->generic.y + PROP_HEIGHT + 8, 128, 8, s_playersettings.fxBasePic );
240-
UI_DrawHandlePic( item->generic.x + 64 + item->curvalue * 16 + 8, item->generic.y + PROP_HEIGHT + 6, 16, 12, s_playersettings.fxPic[item->curvalue] );
242+
UI_DrawHandlePic( markerX, item->generic.y + PROP_HEIGHT + 6, 16, 12, s_playersettings.fxPic[item->curvalue] );
241243
}
242244

243245

code/q3_ui/ui_preferences.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ static const char *s_damageeffect[] =
134134
NULL
135135
};
136136

137-
static int gamecodetoui[] = {0,2,1,4,5,3,6};
138-
static int uitogamecode[] = {1,3,2,6,4,5,7};
137+
static int gamecodetoui[] = {4,2,3,0,5,1,6};
138+
static int uitogamecode[] = {4,6,2,3,1,5,7};
139139

140140
static void Preferences_SetMenuItems( void ) {
141141
int c;
@@ -348,9 +348,9 @@ static void Crosshair_Draw( void *self ) {
348348
crosshairColor[1] = 1.0f;
349349
crosshairColor[2] = 1.0f;
350350
} else {
351-
crosshairColor[0] = (colorCode & 1) ? 1.0f : 0.0f;
351+
crosshairColor[0] = (colorCode & 4) ? 1.0f : 0.0f;
352352
crosshairColor[1] = (colorCode & 2) ? 1.0f : 0.0f;
353-
crosshairColor[2] = (colorCode & 4) ? 1.0f : 0.0f;
353+
crosshairColor[2] = (colorCode & 1) ? 1.0f : 0.0f;
354354
}
355355
crosshairColor[3] = 1.0f;
356356

@@ -406,8 +406,10 @@ static void CrosshairColor_Draw( void *self ) {
406406
UI_DrawString( x - SMALLCHAR_WIDTH, y, s->generic.name, style|UI_RIGHT, color );
407407

408408
// Draw color picker
409+
int markerX = x + SMALLCHAR_WIDTH + (s->curvalue * 112 / 6);
410+
409411
UI_DrawHandlePic( x + SMALLCHAR_WIDTH, y + 4, 128, 8, s_preferences.fxBasePic );
410-
UI_DrawHandlePic( x + SMALLCHAR_WIDTH + s->curvalue * 16 + 8, y + 2, 16, 12, s_preferences.fxPic[s->curvalue] );
412+
UI_DrawHandlePic( markerX, y + 2, 16, 12, s_preferences.fxPic[s->curvalue] );
411413
}
412414

413415

code/ui/ui_main.c

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ static char* netnames[] = {
115115
static char quake3worldMessage[] = "Visit www.quake3world.com - News, Community, Events, Files";
116116
#endif
117117

118-
static int gamecodetoui[] = {0,1,2,3,4,5,6};
119-
static int uitogamecode[] = {1,2,3,4,5,6,7};
118+
static int gamecodetoui[] = {4,2,3,0,5,1,6};
119+
static int uitogamecode[] = {4,6,2,3,1,5,7};
120120

121121

122122
static void UI_StartServerRefresh(qboolean full, qboolean force);
@@ -1293,12 +1293,10 @@ static void UI_DrawTeamMember(rectDef_t *rect, float scale, vec4_t color, qboole
12931293
}
12941294

12951295
static void UI_DrawEffects(rectDef_t *rect, float scale, vec4_t color) {
1296-
static int gamecodetofxpic[] = {0,2,1,4,5,3,6};
1297-
int gameColorCode = uitogamecode[uiInfo.effectsColor];
1298-
int fxPicIndex = gamecodetofxpic[gameColorCode - 1];
1296+
int markerX = rect->x + (uiInfo.effectsColor * 112 / 6);
12991297

13001298
UI_DrawHandlePic( rect->x, rect->y - 14, 128, 8, uiInfo.uiDC.Assets.fxBasePic );
1301-
UI_DrawHandlePic( rect->x + uiInfo.effectsColor * 16 + 8, rect->y - 16, 16, 12, uiInfo.uiDC.Assets.fxPic[fxPicIndex] );
1299+
UI_DrawHandlePic( markerX, rect->y - 16, 16, 12, uiInfo.uiDC.Assets.fxPic[uiInfo.effectsColor] );
13021300
}
13031301

13041302
static void UI_DrawMapPreview(rectDef_t *rect, float scale, vec4_t color, qboolean net) {
@@ -1892,9 +1890,9 @@ static void UI_DrawCrosshair(rectDef_t *rect, float scale, vec4_t color) {
18921890
crosshairColor[1] = 1.0f;
18931891
crosshairColor[2] = 1.0f;
18941892
} else {
1895-
crosshairColor[0] = (colorCode & 1) ? 1.0f : 0.0f;
1893+
crosshairColor[0] = (colorCode & 4) ? 1.0f : 0.0f;
18961894
crosshairColor[1] = (colorCode & 2) ? 1.0f : 0.0f;
1897-
crosshairColor[2] = (colorCode & 4) ? 1.0f : 0.0f;
1895+
crosshairColor[2] = (colorCode & 1) ? 1.0f : 0.0f;
18981896
}
18991897
crosshairColor[3] = 1.0f;
19001898

@@ -1904,16 +1902,15 @@ static void UI_DrawCrosshair(rectDef_t *rect, float scale, vec4_t color) {
19041902
}
19051903

19061904
static void UI_DrawCrosshairColor(rectDef_t *rect, float scale, vec4_t color) {
1907-
static int gamecodetofxpic[] = {0,2,1,4,5,3,6};
19081905
int gameColorCode = (int)trap_Cvar_VariableValue("cg_crosshairColor");
19091906
if (gameColorCode < 1 || gameColorCode > 7) {
19101907
gameColorCode = 7;
19111908
}
19121909
int uiColorIndex = gamecodetoui[gameColorCode - 1];
1913-
int fxPicIndex = gamecodetofxpic[gameColorCode - 1];
1910+
int markerX = rect->x + (uiColorIndex * 112 / 6);
19141911

19151912
UI_DrawHandlePic( rect->x, rect->y - 10, 128, 8, uiInfo.uiDC.Assets.fxBasePic );
1916-
UI_DrawHandlePic( rect->x + uiColorIndex * 16 + 8, rect->y - 12, 16, 12, uiInfo.uiDC.Assets.fxPic[fxPicIndex] );
1913+
UI_DrawHandlePic( markerX, rect->y - 12, 16, 12, uiInfo.uiDC.Assets.fxPic[uiColorIndex] );
19171914
}
19181915

19191916
/*
@@ -2744,13 +2741,15 @@ static qboolean UI_CrosshairColor_HandleKey(int flags, float *special, int key)
27442741
int select = UI_SelectForKey(key);
27452742
if (select != 0) {
27462743
int currentColor = (int)trap_Cvar_VariableValue("cg_crosshairColor");
2747-
currentColor += select;
2744+
int uiIndex = gamecodetoui[currentColor - 1];
2745+
uiIndex += select;
27482746

2749-
if (currentColor > 7) {
2750-
currentColor = 1;
2751-
} else if (currentColor < 1) {
2752-
currentColor = 7;
2747+
if (uiIndex > 6) {
2748+
uiIndex = 0;
2749+
} else if (uiIndex < 0) {
2750+
uiIndex = 6;
27532751
}
2752+
currentColor = uitogamecode[uiIndex];
27542753
trap_Cvar_SetValue("cg_crosshairColor", currentColor);
27552754
// Enable health-based coloring for white, disable for custom colors
27562755
if (currentColor == 7) {

0 commit comments

Comments
 (0)