*/
// console.c
-#include "quakedef.h"
-
#if !defined(WIN32) || defined(__MINGW32__)
# include <unistd.h>
#endif
#include <time.h>
+#include "quakedef.h"
+
// for u8_encodech
#include "ft2.h"
lhnetaddress_t *rcon_redirect_dest = NULL;
int rcon_redirect_bufferpos = 0;
char rcon_redirect_buffer[1400];
+qboolean rcon_redirect_proquakeprotocol = false;
// generic functions for console buffers
'x', 'y', 'z', '{', '|', '}', '~', '<'
};
-void Con_Rcon_Redirect_Init(lhnetsocket_t *sock, lhnetaddress_t *dest)
+void Con_Rcon_Redirect_Init(lhnetsocket_t *sock, lhnetaddress_t *dest, qboolean proquakeprotocol)
{
rcon_redirect_sock = sock;
rcon_redirect_dest = dest;
- memcpy(rcon_redirect_buffer, "\377\377\377\377n", 5); // QW rcon print
+ rcon_redirect_proquakeprotocol = proquakeprotocol;
+ if (rcon_redirect_proquakeprotocol)
+ {
+ // reserve space for the packet header
+ rcon_redirect_buffer[0] = 0;
+ rcon_redirect_buffer[1] = 0;
+ rcon_redirect_buffer[2] = 0;
+ rcon_redirect_buffer[3] = 0;
+ // this is a reply to a CCREQ_RCON
+ rcon_redirect_buffer[4] = CCREP_RCON;
+ }
+ else
+ memcpy(rcon_redirect_buffer, "\377\377\377\377n", 5); // QW rcon print
rcon_redirect_bufferpos = 5;
}
void Con_Rcon_Redirect_Flush(void)
{
rcon_redirect_buffer[rcon_redirect_bufferpos] = 0;
+ if (rcon_redirect_proquakeprotocol)
+ {
+ // update the length in the packet header
+ StoreBigLong((unsigned char *)rcon_redirect_buffer, NETFLAG_CTL | (rcon_redirect_bufferpos & NETFLAG_LENGTH_MASK));
+ }
NetConn_WriteString(rcon_redirect_sock, rcon_redirect_buffer, rcon_redirect_dest);
memcpy(rcon_redirect_buffer, "\377\377\377\377n", 5); // QW rcon print
rcon_redirect_bufferpos = 5;
+ rcon_redirect_proquakeprotocol = false;
}
void Con_Rcon_Redirect_End(void)
{
if (con_chatsound.value)
{
- if(gamemode == GAME_NEXUIZ)
+ if(gamemode == GAME_NEXUIZ || gamemode == GAME_XONOTIC)
{
if(msg[1] == '\r' && cl.foundtalk2wav)
S_LocalSound ("sound/misc/talk2.wav");
*/
void Con_DrawConsole (int lines)
{
- float alpha;
+ float alpha, alpha0;
double sx, sy;
int mask_must = 0;
int mask_mustnot = (developer.integer>0) ? 0 : CON_MASK_DEVELOPER;
r_draw2d_force = true;
// draw the background
- alpha = cls.signon == SIGNONS ? scr_conalpha.value : 1.0f; // always full alpha when not in game
- if(alpha > 0)
+ alpha0 = cls.signon == SIGNONS ? scr_conalpha.value : 1.0f; // always full alpha when not in game
+ if((alpha = alpha0 * scr_conalphafactor.value) > 0)
{
sx = scr_conscroll_x.value;
sy = scr_conscroll_y.value;
0);
else
DrawQ_Fill(0, lines - vid_conheight.integer, vid_conwidth.integer, vid_conheight.integer, 0.0f, 0.0f, 0.0f, alpha, 0);
- alpha *= scr_conalpha2factor.value;
}
- if(alpha > 0)
+ if((alpha = alpha0 * scr_conalpha2factor.value) > 0)
{
sx = scr_conscroll2_x.value;
sy = scr_conscroll2_y.value;
1 + sx, 1 + sy, scr_conbrightness.value, scr_conbrightness.value, scr_conbrightness.value, alpha,
0);
}
+ if((alpha = alpha0 * scr_conalpha3factor.value) > 0)
+ {
+ sx = scr_conscroll3_x.value;
+ sy = scr_conscroll3_y.value;
+ conbackpic = Draw_CachePic_Flags("gfx/conback3", (sx != 0 || sy != 0) ? CACHEPICFLAG_NOCLAMP : 0);
+ sx *= realtime; sy *= realtime;
+ sx -= floor(sx); sy -= floor(sy);
+ if(conbackpic && conbackpic->tex != r_texture_notexture)
+ DrawQ_SuperPic(0, lines - vid_conheight.integer, conbackpic, vid_conwidth.integer, vid_conheight.integer,
+ 0 + sx, 0 + sy, scr_conbrightness.value, scr_conbrightness.value, scr_conbrightness.value, alpha,
+ 1 + sx, 0 + sy, scr_conbrightness.value, scr_conbrightness.value, scr_conbrightness.value, alpha,
+ 0 + sx, 1 + sy, scr_conbrightness.value, scr_conbrightness.value, scr_conbrightness.value, alpha,
+ 1 + sx, 1 + sy, scr_conbrightness.value, scr_conbrightness.value, scr_conbrightness.value, alpha,
+ 0);
+ }
DrawQ_String(vid_conwidth.integer - DrawQ_TextWidth(engineversion, 0, con_textsize.value, con_textsize.value, false, FONT_CONSOLE), lines - con_textsize.value, engineversion, 0, con_textsize.value, con_textsize.value, 1, 0, 0, 1, 0, NULL, true, FONT_CONSOLE);
// draw the text