mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-03-26 04:51:43 +00:00
Merge d_clisrv.c/h
This commit is contained in:
parent
56235e2e1c
commit
be85cc7b8a
2 changed files with 10 additions and 696 deletions
681
src/d_clisrv.c
681
src/d_clisrv.c
|
|
@ -46,17 +46,13 @@
|
|||
#include "lua_hook.h"
|
||||
#include "md5.h"
|
||||
|
||||
<<<<<<< HEAD
|
||||
// SRB2Kart
|
||||
#include "k_kart.h"
|
||||
#include "k_battle.h"
|
||||
#include "k_pwrlv.h"
|
||||
#include "k_bot.h"
|
||||
|
||||
#ifdef CLIENT_LOADINGSCREEN
|
||||
=======
|
||||
#ifndef NONET
|
||||
>>>>>>> srb2/next
|
||||
#if (defined(CLIENT_LOADINGSCREEN) && !defined(NONET))
|
||||
// cl loading screen
|
||||
#include "v_video.h"
|
||||
#include "f_finale.h"
|
||||
|
|
@ -1230,501 +1226,7 @@ static void CV_LoadPlayerNames(UINT8 **p)
|
|||
}
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
#ifdef CLIENT_LOADINGSCREEN
|
||||
=======
|
||||
#ifndef NONET
|
||||
#define SNAKE_SPEED 5
|
||||
|
||||
#define SNAKE_NUM_BLOCKS_X 20
|
||||
#define SNAKE_NUM_BLOCKS_Y 10
|
||||
#define SNAKE_BLOCK_SIZE 12
|
||||
#define SNAKE_BORDER_SIZE 12
|
||||
|
||||
#define SNAKE_MAP_WIDTH (SNAKE_NUM_BLOCKS_X * SNAKE_BLOCK_SIZE)
|
||||
#define SNAKE_MAP_HEIGHT (SNAKE_NUM_BLOCKS_Y * SNAKE_BLOCK_SIZE)
|
||||
|
||||
#define SNAKE_LEFT_X ((BASEVIDWIDTH - SNAKE_MAP_WIDTH) / 2 - SNAKE_BORDER_SIZE)
|
||||
#define SNAKE_RIGHT_X (SNAKE_LEFT_X + SNAKE_MAP_WIDTH + SNAKE_BORDER_SIZE * 2 - 1)
|
||||
#define SNAKE_BOTTOM_Y (BASEVIDHEIGHT - 48)
|
||||
#define SNAKE_TOP_Y (SNAKE_BOTTOM_Y - SNAKE_MAP_HEIGHT - SNAKE_BORDER_SIZE * 2 + 1)
|
||||
|
||||
enum snake_bonustype_s {
|
||||
SNAKE_BONUS_NONE = 0,
|
||||
SNAKE_BONUS_SLOW,
|
||||
SNAKE_BONUS_FAST,
|
||||
SNAKE_BONUS_GHOST,
|
||||
SNAKE_BONUS_NUKE,
|
||||
SNAKE_BONUS_SCISSORS,
|
||||
SNAKE_BONUS_REVERSE,
|
||||
SNAKE_BONUS_EGGMAN,
|
||||
SNAKE_NUM_BONUSES,
|
||||
};
|
||||
|
||||
static const char *snake_bonuspatches[] = {
|
||||
NULL,
|
||||
"DL_SLOW",
|
||||
"TVSSC0",
|
||||
"TVIVC0",
|
||||
"TVARC0",
|
||||
"DL_SCISSORS",
|
||||
"TVRCC0",
|
||||
"TVEGC0",
|
||||
};
|
||||
|
||||
static const char *snake_backgrounds[] = {
|
||||
"RVPUMICF",
|
||||
"FRSTRCKF",
|
||||
"TAR",
|
||||
"MMFLRB4",
|
||||
"RVDARKF1",
|
||||
"RVZWALF1",
|
||||
"RVZWALF4",
|
||||
"RVZWALF5",
|
||||
"RVZGRS02",
|
||||
"RVZGRS04",
|
||||
};
|
||||
|
||||
typedef struct snake_s
|
||||
{
|
||||
boolean paused;
|
||||
boolean pausepressed;
|
||||
tic_t time;
|
||||
tic_t nextupdate;
|
||||
boolean gameover;
|
||||
UINT8 background;
|
||||
|
||||
UINT16 snakelength;
|
||||
enum snake_bonustype_s snakebonus;
|
||||
tic_t snakebonustime;
|
||||
UINT8 snakex[SNAKE_NUM_BLOCKS_X * SNAKE_NUM_BLOCKS_Y];
|
||||
UINT8 snakey[SNAKE_NUM_BLOCKS_X * SNAKE_NUM_BLOCKS_Y];
|
||||
UINT8 snakedir[SNAKE_NUM_BLOCKS_X * SNAKE_NUM_BLOCKS_Y];
|
||||
|
||||
UINT8 applex;
|
||||
UINT8 appley;
|
||||
|
||||
enum snake_bonustype_s bonustype;
|
||||
UINT8 bonusx;
|
||||
UINT8 bonusy;
|
||||
} snake_t;
|
||||
|
||||
static snake_t *snake = NULL;
|
||||
|
||||
static void Snake_Initialise(void)
|
||||
{
|
||||
if (!snake)
|
||||
snake = malloc(sizeof(snake_t));
|
||||
|
||||
snake->paused = false;
|
||||
snake->pausepressed = false;
|
||||
snake->time = 0;
|
||||
snake->nextupdate = SNAKE_SPEED;
|
||||
snake->gameover = false;
|
||||
snake->background = M_RandomKey(sizeof(snake_backgrounds) / sizeof(*snake_backgrounds));
|
||||
|
||||
snake->snakelength = 1;
|
||||
snake->snakebonus = SNAKE_BONUS_NONE;
|
||||
snake->snakex[0] = M_RandomKey(SNAKE_NUM_BLOCKS_X);
|
||||
snake->snakey[0] = M_RandomKey(SNAKE_NUM_BLOCKS_Y);
|
||||
snake->snakedir[0] = 0;
|
||||
snake->snakedir[1] = 0;
|
||||
|
||||
snake->applex = M_RandomKey(SNAKE_NUM_BLOCKS_X);
|
||||
snake->appley = M_RandomKey(SNAKE_NUM_BLOCKS_Y);
|
||||
|
||||
snake->bonustype = SNAKE_BONUS_NONE;
|
||||
}
|
||||
|
||||
static UINT8 Snake_GetOppositeDir(UINT8 dir)
|
||||
{
|
||||
if (dir == 1 || dir == 3)
|
||||
return dir + 1;
|
||||
else if (dir == 2 || dir == 4)
|
||||
return dir - 1;
|
||||
else
|
||||
return 12 + 5 - dir;
|
||||
}
|
||||
|
||||
static void Snake_FindFreeSlot(UINT8 *x, UINT8 *y, UINT8 headx, UINT8 heady)
|
||||
{
|
||||
UINT16 i;
|
||||
|
||||
do
|
||||
{
|
||||
*x = M_RandomKey(SNAKE_NUM_BLOCKS_X);
|
||||
*y = M_RandomKey(SNAKE_NUM_BLOCKS_Y);
|
||||
|
||||
for (i = 0; i < snake->snakelength; i++)
|
||||
if (*x == snake->snakex[i] && *y == snake->snakey[i])
|
||||
break;
|
||||
} while (i < snake->snakelength || (*x == headx && *y == heady));
|
||||
}
|
||||
|
||||
static void Snake_Handle(void)
|
||||
{
|
||||
UINT8 x, y;
|
||||
UINT8 oldx, oldy;
|
||||
UINT16 i;
|
||||
|
||||
// Handle retry
|
||||
if (snake->gameover && (PLAYER1INPUTDOWN(gc_jump) || gamekeydown[KEY_ENTER]))
|
||||
{
|
||||
Snake_Initialise();
|
||||
snake->pausepressed = true; // Avoid accidental pause on respawn
|
||||
}
|
||||
|
||||
// Handle pause
|
||||
if (PLAYER1INPUTDOWN(gc_pause) || gamekeydown[KEY_ENTER])
|
||||
{
|
||||
if (!snake->pausepressed)
|
||||
snake->paused = !snake->paused;
|
||||
snake->pausepressed = true;
|
||||
}
|
||||
else
|
||||
snake->pausepressed = false;
|
||||
|
||||
if (snake->paused)
|
||||
return;
|
||||
|
||||
snake->time++;
|
||||
|
||||
x = snake->snakex[0];
|
||||
y = snake->snakey[0];
|
||||
oldx = snake->snakex[1];
|
||||
oldy = snake->snakey[1];
|
||||
|
||||
// Update direction
|
||||
if (gamekeydown[KEY_LEFTARROW])
|
||||
{
|
||||
if (snake->snakelength < 2 || x <= oldx)
|
||||
snake->snakedir[0] = 1;
|
||||
}
|
||||
else if (gamekeydown[KEY_RIGHTARROW])
|
||||
{
|
||||
if (snake->snakelength < 2 || x >= oldx)
|
||||
snake->snakedir[0] = 2;
|
||||
}
|
||||
else if (gamekeydown[KEY_UPARROW])
|
||||
{
|
||||
if (snake->snakelength < 2 || y <= oldy)
|
||||
snake->snakedir[0] = 3;
|
||||
}
|
||||
else if (gamekeydown[KEY_DOWNARROW])
|
||||
{
|
||||
if (snake->snakelength < 2 || y >= oldy)
|
||||
snake->snakedir[0] = 4;
|
||||
}
|
||||
|
||||
if (snake->snakebonustime)
|
||||
{
|
||||
snake->snakebonustime--;
|
||||
if (!snake->snakebonustime)
|
||||
snake->snakebonus = SNAKE_BONUS_NONE;
|
||||
}
|
||||
|
||||
snake->nextupdate--;
|
||||
if (snake->nextupdate)
|
||||
return;
|
||||
if (snake->snakebonus == SNAKE_BONUS_SLOW)
|
||||
snake->nextupdate = SNAKE_SPEED * 2;
|
||||
else if (snake->snakebonus == SNAKE_BONUS_FAST)
|
||||
snake->nextupdate = SNAKE_SPEED * 2 / 3;
|
||||
else
|
||||
snake->nextupdate = SNAKE_SPEED;
|
||||
|
||||
if (snake->gameover)
|
||||
return;
|
||||
|
||||
// Find new position
|
||||
switch (snake->snakedir[0])
|
||||
{
|
||||
case 1:
|
||||
if (x > 0)
|
||||
x--;
|
||||
else
|
||||
snake->gameover = true;
|
||||
break;
|
||||
case 2:
|
||||
if (x < SNAKE_NUM_BLOCKS_X - 1)
|
||||
x++;
|
||||
else
|
||||
snake->gameover = true;
|
||||
break;
|
||||
case 3:
|
||||
if (y > 0)
|
||||
y--;
|
||||
else
|
||||
snake->gameover = true;
|
||||
break;
|
||||
case 4:
|
||||
if (y < SNAKE_NUM_BLOCKS_Y - 1)
|
||||
y++;
|
||||
else
|
||||
snake->gameover = true;
|
||||
break;
|
||||
}
|
||||
|
||||
// Check collision with snake
|
||||
if (snake->snakebonus != SNAKE_BONUS_GHOST)
|
||||
for (i = 1; i < snake->snakelength - 1; i++)
|
||||
if (x == snake->snakex[i] && y == snake->snakey[i])
|
||||
{
|
||||
if (snake->snakebonus == SNAKE_BONUS_SCISSORS)
|
||||
{
|
||||
snake->snakebonus = SNAKE_BONUS_NONE;
|
||||
snake->snakelength = i;
|
||||
S_StartSound(NULL, sfx_adderr);
|
||||
}
|
||||
else
|
||||
snake->gameover = true;
|
||||
}
|
||||
|
||||
if (snake->gameover)
|
||||
{
|
||||
S_StartSound(NULL, sfx_lose);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check collision with apple
|
||||
if (x == snake->applex && y == snake->appley)
|
||||
{
|
||||
if (snake->snakelength + 1 < SNAKE_NUM_BLOCKS_X * SNAKE_NUM_BLOCKS_Y)
|
||||
{
|
||||
snake->snakelength++;
|
||||
snake->snakex [snake->snakelength - 1] = snake->snakex [snake->snakelength - 2];
|
||||
snake->snakey [snake->snakelength - 1] = snake->snakey [snake->snakelength - 2];
|
||||
snake->snakedir[snake->snakelength - 1] = snake->snakedir[snake->snakelength - 2];
|
||||
}
|
||||
|
||||
// Spawn new apple
|
||||
Snake_FindFreeSlot(&snake->applex, &snake->appley, x, y);
|
||||
|
||||
// Spawn new bonus
|
||||
if (!(snake->snakelength % 5))
|
||||
{
|
||||
do
|
||||
{
|
||||
snake->bonustype = M_RandomKey(SNAKE_NUM_BONUSES - 1) + 1;
|
||||
} while (snake->snakelength > SNAKE_NUM_BLOCKS_X * SNAKE_NUM_BLOCKS_Y * 3 / 4
|
||||
&& (snake->bonustype == SNAKE_BONUS_EGGMAN || snake->bonustype == SNAKE_BONUS_FAST || snake->bonustype == SNAKE_BONUS_REVERSE));
|
||||
|
||||
Snake_FindFreeSlot(&snake->bonusx, &snake->bonusy, x, y);
|
||||
}
|
||||
|
||||
S_StartSound(NULL, sfx_s3k6b);
|
||||
}
|
||||
|
||||
if (snake->snakelength > 1 && snake->snakedir[0])
|
||||
{
|
||||
UINT8 dir = snake->snakedir[0];
|
||||
|
||||
oldx = snake->snakex[1];
|
||||
oldy = snake->snakey[1];
|
||||
|
||||
// Move
|
||||
for (i = snake->snakelength - 1; i > 0; i--)
|
||||
{
|
||||
snake->snakex[i] = snake->snakex[i - 1];
|
||||
snake->snakey[i] = snake->snakey[i - 1];
|
||||
snake->snakedir[i] = snake->snakedir[i - 1];
|
||||
}
|
||||
|
||||
// Handle corners
|
||||
if (x < oldx && dir == 3)
|
||||
dir = 5;
|
||||
else if (x > oldx && dir == 3)
|
||||
dir = 6;
|
||||
else if (x < oldx && dir == 4)
|
||||
dir = 7;
|
||||
else if (x > oldx && dir == 4)
|
||||
dir = 8;
|
||||
else if (y < oldy && dir == 1)
|
||||
dir = 9;
|
||||
else if (y < oldy && dir == 2)
|
||||
dir = 10;
|
||||
else if (y > oldy && dir == 1)
|
||||
dir = 11;
|
||||
else if (y > oldy && dir == 2)
|
||||
dir = 12;
|
||||
snake->snakedir[1] = dir;
|
||||
}
|
||||
|
||||
snake->snakex[0] = x;
|
||||
snake->snakey[0] = y;
|
||||
|
||||
// Check collision with bonus
|
||||
if (snake->bonustype != SNAKE_BONUS_NONE && x == snake->bonusx && y == snake->bonusy)
|
||||
{
|
||||
S_StartSound(NULL, sfx_ncchip);
|
||||
|
||||
switch (snake->bonustype)
|
||||
{
|
||||
case SNAKE_BONUS_SLOW:
|
||||
snake->snakebonus = SNAKE_BONUS_SLOW;
|
||||
snake->snakebonustime = 20 * TICRATE;
|
||||
break;
|
||||
case SNAKE_BONUS_FAST:
|
||||
snake->snakebonus = SNAKE_BONUS_FAST;
|
||||
snake->snakebonustime = 20 * TICRATE;
|
||||
break;
|
||||
case SNAKE_BONUS_GHOST:
|
||||
snake->snakebonus = SNAKE_BONUS_GHOST;
|
||||
snake->snakebonustime = 10 * TICRATE;
|
||||
break;
|
||||
case SNAKE_BONUS_NUKE:
|
||||
for (i = 0; i < snake->snakelength; i++)
|
||||
{
|
||||
snake->snakex [i] = snake->snakex [0];
|
||||
snake->snakey [i] = snake->snakey [0];
|
||||
snake->snakedir[i] = snake->snakedir[0];
|
||||
}
|
||||
|
||||
S_StartSound(NULL, sfx_bkpoof);
|
||||
break;
|
||||
case SNAKE_BONUS_SCISSORS:
|
||||
snake->snakebonus = SNAKE_BONUS_SCISSORS;
|
||||
snake->snakebonustime = 60 * TICRATE;
|
||||
break;
|
||||
case SNAKE_BONUS_REVERSE:
|
||||
for (i = 0; i < (snake->snakelength + 1) / 2; i++)
|
||||
{
|
||||
UINT16 i2 = snake->snakelength - 1 - i;
|
||||
UINT8 tmpx = snake->snakex [i];
|
||||
UINT8 tmpy = snake->snakey [i];
|
||||
UINT8 tmpdir = snake->snakedir[i];
|
||||
|
||||
// Swap first segment with last segment
|
||||
snake->snakex [i] = snake->snakex [i2];
|
||||
snake->snakey [i] = snake->snakey [i2];
|
||||
snake->snakedir[i] = Snake_GetOppositeDir(snake->snakedir[i2]);
|
||||
snake->snakex [i2] = tmpx;
|
||||
snake->snakey [i2] = tmpy;
|
||||
snake->snakedir[i2] = Snake_GetOppositeDir(tmpdir);
|
||||
}
|
||||
|
||||
snake->snakedir[0] = 0;
|
||||
|
||||
S_StartSound(NULL, sfx_gravch);
|
||||
break;
|
||||
default:
|
||||
if (snake->snakebonus != SNAKE_BONUS_GHOST)
|
||||
{
|
||||
snake->gameover = true;
|
||||
S_StartSound(NULL, sfx_lose);
|
||||
}
|
||||
}
|
||||
|
||||
snake->bonustype = SNAKE_BONUS_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
static void Snake_Draw(void)
|
||||
{
|
||||
INT16 i;
|
||||
|
||||
// Background
|
||||
V_DrawFlatFill(
|
||||
SNAKE_LEFT_X + SNAKE_BORDER_SIZE,
|
||||
SNAKE_TOP_Y + SNAKE_BORDER_SIZE,
|
||||
SNAKE_MAP_WIDTH,
|
||||
SNAKE_MAP_HEIGHT,
|
||||
W_GetNumForName(snake_backgrounds[snake->background])
|
||||
);
|
||||
|
||||
// Borders
|
||||
V_DrawFill(SNAKE_LEFT_X, SNAKE_TOP_Y, SNAKE_BORDER_SIZE + SNAKE_MAP_WIDTH, SNAKE_BORDER_SIZE, 242); // Top
|
||||
V_DrawFill(SNAKE_LEFT_X + SNAKE_BORDER_SIZE + SNAKE_MAP_WIDTH, SNAKE_TOP_Y, SNAKE_BORDER_SIZE, SNAKE_BORDER_SIZE + SNAKE_MAP_HEIGHT, 242); // Right
|
||||
V_DrawFill(SNAKE_LEFT_X + SNAKE_BORDER_SIZE, SNAKE_TOP_Y + SNAKE_BORDER_SIZE + SNAKE_MAP_HEIGHT, SNAKE_BORDER_SIZE + SNAKE_MAP_WIDTH, SNAKE_BORDER_SIZE, 242); // Bottom
|
||||
V_DrawFill(SNAKE_LEFT_X, SNAKE_TOP_Y + SNAKE_BORDER_SIZE, SNAKE_BORDER_SIZE, SNAKE_BORDER_SIZE + SNAKE_MAP_HEIGHT, 242); // Left
|
||||
|
||||
// Apple
|
||||
V_DrawFixedPatch(
|
||||
(SNAKE_LEFT_X + SNAKE_BORDER_SIZE + snake->applex * SNAKE_BLOCK_SIZE + SNAKE_BLOCK_SIZE / 2) * FRACUNIT,
|
||||
(SNAKE_TOP_Y + SNAKE_BORDER_SIZE + snake->appley * SNAKE_BLOCK_SIZE + SNAKE_BLOCK_SIZE / 2) * FRACUNIT,
|
||||
FRACUNIT / 4,
|
||||
0,
|
||||
W_CachePatchLongName("DL_APPLE", PU_HUDGFX),
|
||||
NULL
|
||||
);
|
||||
|
||||
// Bonus
|
||||
if (snake->bonustype != SNAKE_BONUS_NONE)
|
||||
V_DrawFixedPatch(
|
||||
(SNAKE_LEFT_X + SNAKE_BORDER_SIZE + snake->bonusx * SNAKE_BLOCK_SIZE + SNAKE_BLOCK_SIZE / 2 ) * FRACUNIT,
|
||||
(SNAKE_TOP_Y + SNAKE_BORDER_SIZE + snake->bonusy * SNAKE_BLOCK_SIZE + SNAKE_BLOCK_SIZE / 2 + 4) * FRACUNIT,
|
||||
FRACUNIT / 2,
|
||||
0,
|
||||
W_CachePatchLongName(snake_bonuspatches[snake->bonustype], PU_HUDGFX),
|
||||
NULL
|
||||
);
|
||||
|
||||
// Snake
|
||||
if (!snake->gameover || snake->time % 8 < 8 / 2) // Blink if game over
|
||||
{
|
||||
for (i = snake->snakelength - 1; i >= 0; i--)
|
||||
{
|
||||
const char *patchname;
|
||||
UINT8 dir = snake->snakedir[i];
|
||||
|
||||
if (i == 0) // Head
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case 1: patchname = "DL_SNAKEHEAD_L"; break;
|
||||
case 2: patchname = "DL_SNAKEHEAD_R"; break;
|
||||
case 3: patchname = "DL_SNAKEHEAD_T"; break;
|
||||
case 4: patchname = "DL_SNAKEHEAD_B"; break;
|
||||
default: patchname = "DL_SNAKEHEAD_M";
|
||||
}
|
||||
}
|
||||
else // Body
|
||||
{
|
||||
switch (dir)
|
||||
{
|
||||
case 1: patchname = "DL_SNAKEBODY_L"; break;
|
||||
case 2: patchname = "DL_SNAKEBODY_R"; break;
|
||||
case 3: patchname = "DL_SNAKEBODY_T"; break;
|
||||
case 4: patchname = "DL_SNAKEBODY_B"; break;
|
||||
case 5: patchname = "DL_SNAKEBODY_LT"; break;
|
||||
case 6: patchname = "DL_SNAKEBODY_RT"; break;
|
||||
case 7: patchname = "DL_SNAKEBODY_LB"; break;
|
||||
case 8: patchname = "DL_SNAKEBODY_RB"; break;
|
||||
case 9: patchname = "DL_SNAKEBODY_TL"; break;
|
||||
case 10: patchname = "DL_SNAKEBODY_TR"; break;
|
||||
case 11: patchname = "DL_SNAKEBODY_BL"; break;
|
||||
case 12: patchname = "DL_SNAKEBODY_BR"; break;
|
||||
default: patchname = "DL_SNAKEBODY_B";
|
||||
}
|
||||
}
|
||||
|
||||
V_DrawFixedPatch(
|
||||
(SNAKE_LEFT_X + SNAKE_BORDER_SIZE + snake->snakex[i] * SNAKE_BLOCK_SIZE + SNAKE_BLOCK_SIZE / 2) * FRACUNIT,
|
||||
(SNAKE_TOP_Y + SNAKE_BORDER_SIZE + snake->snakey[i] * SNAKE_BLOCK_SIZE + SNAKE_BLOCK_SIZE / 2) * FRACUNIT,
|
||||
i == 0 && dir == 0 ? FRACUNIT / 5 : FRACUNIT / 2,
|
||||
snake->snakebonus == SNAKE_BONUS_GHOST ? V_TRANSLUCENT : 0,
|
||||
W_CachePatchLongName(patchname, PU_HUDGFX),
|
||||
NULL
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Length
|
||||
V_DrawString(SNAKE_RIGHT_X + 4, SNAKE_TOP_Y, V_MONOSPACE, va("%u", snake->snakelength));
|
||||
|
||||
// Bonus
|
||||
if (snake->snakebonus != SNAKE_BONUS_NONE
|
||||
&& (snake->snakebonustime >= 3 * TICRATE || snake->time % 4 < 4 / 2))
|
||||
V_DrawFixedPatch(
|
||||
(SNAKE_RIGHT_X + 10) * FRACUNIT,
|
||||
(SNAKE_TOP_Y + 24) * FRACUNIT,
|
||||
FRACUNIT / 2,
|
||||
0,
|
||||
W_CachePatchLongName(snake_bonuspatches[snake->snakebonus], PU_HUDGFX),
|
||||
NULL
|
||||
);
|
||||
}
|
||||
>>>>>>> srb2/next
|
||||
#if (defined(CLIENT_LOADINGSCREEN) && !defined(NONET))
|
||||
|
||||
//
|
||||
// CL_DrawConnectionStatus
|
||||
|
|
@ -1785,13 +1287,9 @@ static inline void CL_DrawConnectionStatus(void)
|
|||
else
|
||||
cltext = M_GetText("Waiting to download game state...");
|
||||
break;
|
||||
<<<<<<< HEAD
|
||||
#endif
|
||||
case CL_ASKFULLFILELIST:
|
||||
cltext = M_GetText("This server has a LOT of files!");
|
||||
break;
|
||||
=======
|
||||
>>>>>>> srb2/next
|
||||
case CL_ASKJOIN:
|
||||
case CL_WAITJOINRESPONSE:
|
||||
cltext = M_GetText("Requesting to join...");
|
||||
|
|
@ -1816,8 +1314,6 @@ static inline void CL_DrawConnectionStatus(void)
|
|||
fileneeded_t *file = &fileneeded[lastfilenum];
|
||||
char *filename = file->filename;
|
||||
|
||||
Snake_Draw();
|
||||
|
||||
Net_GetNetStat();
|
||||
dldlength = (INT32)((file->currentsize/(double)file->totalsize) * 256);
|
||||
if (dldlength > 256)
|
||||
|
|
@ -1853,6 +1349,7 @@ static inline void CL_DrawConnectionStatus(void)
|
|||
M_GetText("Waiting to download files..."));
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static boolean CL_AskFileList(INT32 firstfile)
|
||||
|
|
@ -2594,23 +2091,8 @@ void CL_UpdateServerList(boolean internetsearch, INT32 room)
|
|||
|
||||
if (internetsearch)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
const msg_server_t *server_list;
|
||||
INT32 i = -1;
|
||||
server_list = GetShortServersList(room);
|
||||
if (server_list)
|
||||
{
|
||||
char version[8] = "";
|
||||
#if VERSION > 0 || SUBVERSION > 0
|
||||
snprintf(version, sizeof (version), "%d.%d", VERSION, SUBVERSION);
|
||||
#else
|
||||
strcpy(version, GetRevisionString());
|
||||
#endif
|
||||
version[sizeof (version) - 1] = '\0';
|
||||
=======
|
||||
#ifdef HAVE_THREADS
|
||||
ctx = malloc(sizeof *ctx);
|
||||
>>>>>>> srb2/next
|
||||
|
||||
/* This called from M_Refresh so I don't use a mutex */
|
||||
m_waiting_mode = M_WAITING_SERVERS;
|
||||
|
|
@ -2714,10 +2196,6 @@ static boolean CL_FinishedFileList(void)
|
|||
|
||||
/** Called by CL_ServerConnectionTicker
|
||||
*
|
||||
<<<<<<< HEAD
|
||||
* \param viams ???
|
||||
=======
|
||||
>>>>>>> srb2/next
|
||||
* \param asksent The last time we asked the server to join. We re-ask every second in case our request got lost in transmit.
|
||||
* \return False if the connection was aborted
|
||||
* \sa CL_ServerConnectionTicker
|
||||
|
|
@ -2776,37 +2254,9 @@ static boolean CL_ServerConnectionSearchTicker(tic_t *asksent)
|
|||
D_ParseFileneeded(serverlist[i].info.fileneedednum, serverlist[i].info.fileneeded, 0);
|
||||
if (serverlist[i].info.kartvars & SV_LOTSOFADDONS)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
cl_mode = CL_ASKFULLFILELIST;
|
||||
cl_lastcheckedfilecount = 0;
|
||||
return true;
|
||||
=======
|
||||
// must download something
|
||||
// can we, though?
|
||||
if (!CL_CheckDownloadable()) // nope!
|
||||
{
|
||||
D_QuitNetGame();
|
||||
CL_Reset();
|
||||
D_StartTitle();
|
||||
M_StartMessage(M_GetText(
|
||||
"You cannot connect to this server\n"
|
||||
"because you cannot download the files\n"
|
||||
"that you are missing from the server.\n\n"
|
||||
"See the console or log file for\n"
|
||||
"more details.\n\n"
|
||||
"Press ESC\n"
|
||||
), NULL, MM_NOTHING);
|
||||
return false;
|
||||
}
|
||||
// no problem if can't send packet, we will retry later
|
||||
if (CL_SendFileRequest())
|
||||
{
|
||||
cl_mode = CL_DOWNLOADFILES;
|
||||
#ifndef NONET
|
||||
Snake_Initialise();
|
||||
#endif
|
||||
}
|
||||
>>>>>>> srb2/next
|
||||
}
|
||||
|
||||
if (!CL_FinishedFileList())
|
||||
|
|
@ -2935,14 +2385,6 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
|
|||
if (waitmore)
|
||||
break; // exit the case
|
||||
|
||||
#ifndef NONET
|
||||
if (snake)
|
||||
{
|
||||
free(snake);
|
||||
snake = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
cl_mode = CL_ASKJOIN; // don't break case continue to cljoin request now
|
||||
/* FALLTHRU */
|
||||
|
||||
|
|
@ -2989,23 +2431,6 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
|
|||
// Call it only once by tic
|
||||
if (*oldtic != I_GetTime())
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
|
||||
INT32 key;
|
||||
|
||||
I_OsPolling();
|
||||
key = I_GetKey();
|
||||
// Only ESC and non-keyboard keys abort connection
|
||||
if (key == KEY_ESCAPE || key >= KEY_MOUSE1)
|
||||
{
|
||||
CONS_Printf(M_GetText("Network game synchronization aborted.\n"));
|
||||
D_QuitNetGame();
|
||||
CL_Reset();
|
||||
D_StartTitle();
|
||||
|
||||
return false;
|
||||
}
|
||||
=======
|
||||
I_OsPolling();
|
||||
for (; eventtail != eventhead; eventtail = (eventtail+1) & (MAXEVENTS-1))
|
||||
G_MapEventsToControls(&events[eventtail]);
|
||||
|
|
@ -3015,24 +2440,12 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
|
|||
CONS_Printf(M_GetText("Network game synchronization aborted.\n"));
|
||||
// M_StartMessage(M_GetText("Network game synchronization aborted.\n\nPress ESC\n"), NULL, MM_NOTHING);
|
||||
|
||||
#ifndef NONET
|
||||
if (snake)
|
||||
{
|
||||
free(snake);
|
||||
snake = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
D_QuitNetGame();
|
||||
CL_Reset();
|
||||
D_StartTitle();
|
||||
memset(gamekeydown, 0, NUMKEYS);
|
||||
return false;
|
||||
}
|
||||
#ifndef NONET
|
||||
else if (cl_mode == CL_DOWNLOADFILES && snake)
|
||||
Snake_Handle();
|
||||
#endif
|
||||
|
||||
if (client && (cl_mode == CL_DOWNLOADFILES || cl_mode == CL_DOWNLOADSAVEGAME))
|
||||
FileReceiveTicker();
|
||||
|
|
@ -3041,7 +2454,6 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
|
|||
//if (key == 's' && server)
|
||||
// doomcom->numnodes = (INT16)pnumnodes;
|
||||
//FileSendTicker();
|
||||
>>>>>>> srb2/next
|
||||
*oldtic = I_GetTime();
|
||||
|
||||
#ifndef NONET
|
||||
|
|
@ -3389,21 +2801,13 @@ static void Command_connect(void)
|
|||
CONS_Alert(CONS_ERROR, M_GetText("There is no network driver\n"));
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
if (splitscreen != cv_splitplayers.value-1)
|
||||
{
|
||||
splitscreen = cv_splitplayers.value-1;
|
||||
SplitScreen_OnChange();
|
||||
}
|
||||
|
||||
CL_ConnectToServer(viams);
|
||||
=======
|
||||
splitscreen = false;
|
||||
SplitScreen_OnChange();
|
||||
botingame = false;
|
||||
botskin = 0;
|
||||
CL_ConnectToServer();
|
||||
>>>>>>> srb2/next
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -4049,17 +3453,11 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
|||
static CV_PossibleValue_t netticbuffer_cons_t[] = {{0, "MIN"}, {3, "MAX"}, {0, NULL}};
|
||||
consvar_t cv_netticbuffer = {"netticbuffer", "1", CV_SAVE, netticbuffer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
<<<<<<< HEAD
|
||||
consvar_t cv_allownewplayer = {"allowjoin", "On", CV_SAVE|CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL };
|
||||
consvar_t cv_allownewplayer = {"allowjoin", "On", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL };
|
||||
#ifdef VANILLAJOINNEXTROUND
|
||||
consvar_t cv_joinnextround = {"joinnextround", "Off", CV_SAVE|CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; /// \todo not done
|
||||
consvar_t cv_joinnextround = {"joinnextround", "Off", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; /// \todo not done
|
||||
#endif
|
||||
static CV_PossibleValue_t maxplayers_cons_t[] = {{2, "MIN"}, {MAXPLAYERS, "MAX"}, {0, NULL}};
|
||||
=======
|
||||
consvar_t cv_allownewplayer = {"allowjoin", "On", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL };
|
||||
consvar_t cv_joinnextround = {"joinnextround", "Off", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; /// \todo not done
|
||||
static CV_PossibleValue_t maxplayers_cons_t[] = {{2, "MIN"}, {32, "MAX"}, {0, NULL}};
|
||||
>>>>>>> srb2/next
|
||||
consvar_t cv_maxplayers = {"maxplayers", "8", CV_SAVE, maxplayers_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
static CV_PossibleValue_t joindelay_cons_t[] = {{1, "MIN"}, {3600, "MAX"}, {0, "Off"}, {0, NULL}};
|
||||
|
|
@ -4345,7 +3743,6 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
|
|||
|
||||
if (splitscreenplayer)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
displayplayers[splitscreenplayer] = newplayernum;
|
||||
g_localplayers[splitscreenplayer] = newplayernum;
|
||||
DEBFILE(va("spawning sister # %d\n", splitscreenplayer));
|
||||
|
|
@ -4362,23 +3759,9 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
|
|||
DEBFILE("spawning me\n");
|
||||
}
|
||||
|
||||
=======
|
||||
consoleplayer = newplayernum;
|
||||
displayplayer = newplayernum;
|
||||
secondarydisplayplayer = newplayernum;
|
||||
DEBFILE("spawning me\n");
|
||||
ticcmd_oldangleturn[0] = newplayer->oldrelangleturn;
|
||||
}
|
||||
else
|
||||
{
|
||||
secondarydisplayplayer = newplayernum;
|
||||
DEBFILE("spawning my brother\n");
|
||||
if (botingame)
|
||||
newplayer->bot = 1;
|
||||
ticcmd_oldangleturn[1] = newplayer->oldrelangleturn;
|
||||
}
|
||||
ticcmd_oldangleturn[splitscreenplayer] = newplayer->oldrelangleturn;
|
||||
P_ForceLocalAngle(newplayer, (angle_t)(newplayer->angleturn << 16));
|
||||
>>>>>>> srb2/next
|
||||
|
||||
D_SendPlayerConfig();
|
||||
addedtogame = true;
|
||||
|
||||
|
|
@ -4386,10 +3769,6 @@ static void Got_AddPlayer(UINT8 **p, INT32 playernum)
|
|||
{
|
||||
if (newplayer->mo)
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
localangle[splitscreenplayer] = newplayer->mo->angle;
|
||||
=======
|
||||
>>>>>>> srb2/next
|
||||
newplayer->viewheight = 41*newplayer->height/48;
|
||||
|
||||
if (newplayer->mo->eflags & MFE_VERTICALFLIP)
|
||||
|
|
@ -6038,14 +5417,10 @@ static void SV_SendTics(void)
|
|||
{
|
||||
// assert supposedtics[n]>=nettics[n]
|
||||
realfirsttic = supposedtics[n];
|
||||
<<<<<<< HEAD
|
||||
lasttictosend = maketic;
|
||||
|
||||
if (lasttictosend - nettics[n] >= BACKUPTICS)
|
||||
lasttictosend = nettics[n] + BACKUPTICS-1;
|
||||
=======
|
||||
lasttictosend = min(maketic, nettics[n] + CLIENTBACKUPTICS);
|
||||
>>>>>>> srb2/next
|
||||
|
||||
if (realfirsttic >= lasttictosend)
|
||||
{
|
||||
|
|
@ -6177,44 +5552,6 @@ static void Local_Maketic(INT32 realtics)
|
|||
}
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
// This function is utter bullshit and is responsible for
|
||||
// the random desynch that happens when a player spawns.
|
||||
// This is because ticcmds are resent to clients if a packet
|
||||
// was dropped, and thus modifying them can lead to several
|
||||
// clients having their ticcmds set to different values.
|
||||
void SV_SpawnPlayer(INT32 playernum, INT32 x, INT32 y, angle_t angle)
|
||||
{
|
||||
tic_t tic;
|
||||
UINT16 numadjust = 0;
|
||||
|
||||
(void)x;
|
||||
(void)y;
|
||||
|
||||
// Revisionist history: adjust the angles in the ticcmds received
|
||||
// for this player, because they actually preceded the player
|
||||
// spawning, but will be applied afterwards.
|
||||
|
||||
for (tic = server ? maketic : (neededtic - 1); tic >= gametic; tic--)
|
||||
{
|
||||
if (numadjust++ == TICQUEUE)
|
||||
{
|
||||
DEBFILE(va("SV_SpawnPlayer: All netcmds for player %d adjusted!\n", playernum));
|
||||
// We already adjusted them all, waste of time doing the same thing over and over
|
||||
// This shouldn't happen normally though, either gametic was 0 (which is handled now anyway)
|
||||
// or maketic >= gametic + TICQUEUE
|
||||
// -- Monster Iestyn 16/01/18
|
||||
break;
|
||||
}
|
||||
netcmds[tic%TICQUEUE][playernum].angleturn = (INT16)((angle>>16) | TICCMD_RECEIVED);
|
||||
|
||||
if (!tic) // failsafe for gametic == 0 -- Monster Iestyn 16/01/18
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
=======
|
||||
>>>>>>> srb2/next
|
||||
// create missed tic
|
||||
static void SV_Maketic(void)
|
||||
{
|
||||
|
|
@ -6327,11 +5664,7 @@ void TryRunTics(tic_t realtics)
|
|||
G_Ticker((gametic % NEWTICRATERATIO) == 0);
|
||||
ExtraDataTicker();
|
||||
gametic++;
|
||||
<<<<<<< HEAD
|
||||
consistancy[gametic%TICQUEUE] = Consistancy();
|
||||
=======
|
||||
consistancy[gametic%BACKUPTICS] = Consistancy();
|
||||
>>>>>>> srb2/next
|
||||
|
||||
// Leave a certain amount of tics present in the net buffer as long as we've ran at least one tic this frame.
|
||||
if (client && gamestate == GS_LEVEL && leveltime > 3 && neededtic <= gametic + cv_netticbuffer.value)
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@
|
|||
#include "d_net.h"
|
||||
#include "tables.h"
|
||||
#include "d_player.h"
|
||||
<<<<<<< HEAD
|
||||
#include "mserv.h"
|
||||
|
||||
#include "k_pwrlv.h" // PWRLV_NUMTYPES
|
||||
|
||||
/*
|
||||
|
|
@ -28,16 +29,6 @@ This version is independent of VERSION and SUBVERSION. Different
|
|||
applications may follow different packet versions.
|
||||
*/
|
||||
#define PACKETVERSION 0
|
||||
=======
|
||||
#include "mserv.h"
|
||||
>>>>>>> srb2/next
|
||||
|
||||
/*
|
||||
The 'packet version' is used to distinguish packet formats.
|
||||
This version is independent of VERSION and SUBVERSION. Different
|
||||
applications may follow different packet versions.
|
||||
*/
|
||||
#define PACKETVERSION 3
|
||||
|
||||
// Network play related stuff.
|
||||
// There is a data struct that stores network
|
||||
|
|
@ -46,13 +37,8 @@ applications may follow different packet versions.
|
|||
// be transmitted.
|
||||
|
||||
// Networking and tick handling related.
|
||||
<<<<<<< HEAD
|
||||
#define BACKUPTICS 32
|
||||
#define TICQUEUE 512 // more than enough for most timeouts....
|
||||
=======
|
||||
#define BACKUPTICS 1024
|
||||
#define CLIENTBACKUPTICS 32
|
||||
>>>>>>> srb2/next
|
||||
#define MAXTEXTCMD 256
|
||||
//
|
||||
// Packet structure
|
||||
|
|
@ -621,16 +607,11 @@ extern UINT32 realpingtable[MAXPLAYERS];
|
|||
extern UINT32 playerpingtable[MAXPLAYERS];
|
||||
extern tic_t servermaxping;
|
||||
|
||||
<<<<<<< HEAD
|
||||
extern boolean server_lagless;
|
||||
|
||||
extern consvar_t cv_allownewplayer, cv_maxplayers, cv_joindelay, cv_rejointimeout;
|
||||
=======
|
||||
extern consvar_t cv_netticbuffer, cv_allownewplayer, cv_joinnextround, cv_maxplayers, cv_joindelay, cv_rejointimeout;
|
||||
>>>>>>> srb2/next
|
||||
extern consvar_t cv_netticbuffer, cv_allownewplayer, cv_maxplayers, cv_joindelay, cv_rejointimeout;
|
||||
extern consvar_t cv_resynchattempts, cv_blamecfail;
|
||||
extern consvar_t cv_maxsend, cv_noticedownload, cv_downloadspeed;
|
||||
extern consvar_t cv_netticbuffer;
|
||||
|
||||
#ifdef VANILLAJOINNEXTROUND
|
||||
extern consvar_t cv_joinnextround;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue