mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-16 01:11:28 +00:00
more semi-tested multiplayer changes and sound callback fix
git-svn-id: https://svn.eduke32.com/eduke32@1582 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
f543a69ab8
commit
4917be2439
5 changed files with 473 additions and 465 deletions
|
@ -25,8 +25,8 @@
|
||||||
// 1.5.0 BETA 2
|
// 1.5.0 BETA 2
|
||||||
|
|
||||||
#ifndef QLZ_COMPRESSION_LEVEL
|
#ifndef QLZ_COMPRESSION_LEVEL
|
||||||
#define QLZ_COMPRESSION_LEVEL 1
|
//#define QLZ_COMPRESSION_LEVEL 1
|
||||||
//#define QLZ_COMPRESSION_LEVEL 2
|
#define QLZ_COMPRESSION_LEVEL 2
|
||||||
//#define QLZ_COMPRESSION_LEVEL 3
|
//#define QLZ_COMPRESSION_LEVEL 3
|
||||||
|
|
||||||
#define QLZ_STREAMING_BUFFER 0
|
#define QLZ_STREAMING_BUFFER 0
|
||||||
|
|
|
@ -280,12 +280,12 @@ typedef struct {
|
||||||
int16_t i;
|
int16_t i;
|
||||||
} SOUNDOWNER;
|
} SOUNDOWNER;
|
||||||
|
|
||||||
#define SOUNDMAX 8
|
#define MAXSOUNDINSTANCES 8
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int32_t length, num, soundsiz; // 12b
|
int32_t length, num, soundsiz; // 12b
|
||||||
char *filename, *ptr, *filename1; // 12b/24b
|
char *filename, *ptr, *filename1; // 12b/24b
|
||||||
SOUNDOWNER SoundOwner[SOUNDMAX]; // 32b
|
SOUNDOWNER SoundOwner[MAXSOUNDINSTANCES]; // 32b
|
||||||
int16_t ps,pe,vo; // 6b
|
int16_t ps,pe,vo; // 6b
|
||||||
char pr,m; // 2b
|
char pr,m; // 2b
|
||||||
} sound_t;
|
} sound_t;
|
||||||
|
@ -535,17 +535,6 @@ typedef struct {
|
||||||
int8_t velmult, filler; // 2b
|
int8_t velmult, filler; // 2b
|
||||||
} projectile_t;
|
} projectile_t;
|
||||||
|
|
||||||
// extern char gotz;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
/* int32_t x;
|
|
||||||
int32_t y;
|
|
||||||
int32_t z; */
|
|
||||||
int16_t ang, oldang, angdir, angdif;
|
|
||||||
} spriteinterpolate;
|
|
||||||
|
|
||||||
// spriteinterpolate sprpos[MAXSPRITES];
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
intptr_t temp_data[10]; // 40b/80b sometimes used to hold pointers to con code
|
intptr_t temp_data[10]; // 40b/80b sometimes used to hold pointers to con code
|
||||||
|
|
||||||
|
|
|
@ -968,8 +968,8 @@ void Net_ParseServerPacket(ENetEvent * event)
|
||||||
packbuf = Bcalloc(1, packbufleng+1);
|
packbuf = Bcalloc(1, packbufleng+1);
|
||||||
packbufleng = qlz_decompress((char *)&event->packet->data[1], (char *)(packbuf), state_decompress);
|
packbufleng = qlz_decompress((char *)&event->packet->data[1], (char *)(packbuf), state_decompress);
|
||||||
|
|
||||||
Bmemcpy(&ticrandomseed, &packbuf[j], sizeof(ticrandomseed));
|
ticrandomseed = *(int32_t *)&packbuf[j];
|
||||||
j += sizeof(ticrandomseed);
|
j += sizeof(int32_t);
|
||||||
ud.pause_on = packbuf[j++];
|
ud.pause_on = packbuf[j++];
|
||||||
|
|
||||||
TRAVERSE_CONNECT(i)
|
TRAVERSE_CONNECT(i)
|
||||||
|
@ -982,7 +982,7 @@ void Net_ParseServerPacket(ENetEvent * event)
|
||||||
if (i == myconnectindex && !g_player[i].ps->dead_flag)
|
if (i == myconnectindex && !g_player[i].ps->dead_flag)
|
||||||
{
|
{
|
||||||
j += (sizeof(input_t) - sizeof(loc.filler)) +
|
j += (sizeof(input_t) - sizeof(loc.filler)) +
|
||||||
(sizeof(vec3_t) * 2) + // position and velocity
|
(sizeof(vec3_t) * 3) + // position and velocity
|
||||||
(sizeof(int16_t) * 3); // ang and horiz
|
(sizeof(int16_t) * 3); // ang and horiz
|
||||||
goto process;
|
goto process;
|
||||||
}
|
}
|
||||||
|
@ -996,23 +996,22 @@ void Net_ParseServerPacket(ENetEvent * event)
|
||||||
if (TEST_SYNC_KEY(nsyn[i].bits,SK_GAMEQUIT)) g_player[i].playerquitflag = 0;
|
if (TEST_SYNC_KEY(nsyn[i].bits,SK_GAMEQUIT)) g_player[i].playerquitflag = 0;
|
||||||
g_player[i].movefifoend++;
|
g_player[i].movefifoend++;
|
||||||
|
|
||||||
Bmemcpy(&g_player[i].ps->oposx, &g_player[i].ps->posx, sizeof(vec3_t));
|
// Bmemcpy(&g_player[i].ps->oposx, &g_player[i].ps->posx, sizeof(vec3_t));
|
||||||
|
|
||||||
Bmemcpy(&g_player[i].ps->posx, &packbuf[j], sizeof(vec3_t));
|
Bmemcpy(&g_player[i].ps->posx, &packbuf[j], sizeof(vec3_t) * 2);
|
||||||
updatesectorz(g_player[i].ps->posx, g_player[i].ps->posy, g_player[i].ps->posz,
|
updatesectorz(g_player[i].ps->posx, g_player[i].ps->posy, g_player[i].ps->posz,
|
||||||
&g_player[i].ps->cursectnum);
|
&g_player[i].ps->cursectnum);
|
||||||
changespritesect(g_player[i].ps->i, g_player[i].ps->cursectnum);
|
changespritesect(g_player[i].ps->i, g_player[i].ps->cursectnum);
|
||||||
Bmemcpy(&sprite[g_player[i].ps->i], &packbuf[j], sizeof(vec3_t));
|
Bmemcpy(&sprite[g_player[i].ps->i], &packbuf[j], sizeof(vec3_t));
|
||||||
sprite[g_player[i].ps->i].z += PHEIGHT;
|
sprite[g_player[i].ps->i].z += PHEIGHT;
|
||||||
j += sizeof(vec3_t);
|
j += sizeof(vec3_t) * 2;
|
||||||
|
|
||||||
Bmemcpy(&g_player[i].ps->posxv, &packbuf[j], sizeof(vec3_t));
|
Bmemcpy(&g_player[i].ps->posxv, &packbuf[j], sizeof(vec3_t));
|
||||||
j += sizeof(vec3_t);
|
j += sizeof(vec3_t);
|
||||||
|
|
||||||
|
|
||||||
Bmemcpy(&g_player[i].ps->oang, &g_player[i].ps->ang, sizeof(int16_t));
|
g_player[i].ps->oang = g_player[i].ps->ang;
|
||||||
Bmemcpy(&g_player[i].ps->ang, &packbuf[j], sizeof(int16_t));
|
g_player[i].ps->ang = sprite[g_player[i].ps->i].ang = *(int16_t *)&packbuf[j];
|
||||||
sprite[g_player[i].ps->i].ang = *(int16_t *)&packbuf[j];
|
|
||||||
j += sizeof(int16_t);
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
Bmemcpy(&g_player[i].ps->ohoriz, &g_player[i].ps->horiz, sizeof(int16_t) * 2);
|
Bmemcpy(&g_player[i].ps->ohoriz, &g_player[i].ps->horiz, sizeof(int16_t) * 2);
|
||||||
|
@ -1505,14 +1504,14 @@ void Net_ParseClientPacket(ENetEvent * event)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Bmemcpy(&g_player[other].ps->oposx, &g_player[other].ps->posx, sizeof(vec3_t));
|
// Bmemcpy(&g_player[other].ps->oposx, &g_player[other].ps->posx, sizeof(vec3_t));
|
||||||
Bmemcpy(&g_player[other].ps->posx, &packbuf[j], sizeof(vec3_t));
|
Bmemcpy(&g_player[other].ps->posx, &packbuf[j], sizeof(vec3_t) * 2);
|
||||||
updatesectorz(g_player[other].ps->posx, g_player[other].ps->posy, g_player[other].ps->posz,
|
updatesectorz(g_player[other].ps->posx, g_player[other].ps->posy, g_player[other].ps->posz,
|
||||||
&g_player[other].ps->cursectnum);
|
&g_player[other].ps->cursectnum);
|
||||||
Bmemcpy(&sprite[g_player[other].ps->i], &packbuf[j], sizeof(vec3_t));
|
Bmemcpy(&sprite[g_player[other].ps->i], &packbuf[j], sizeof(vec3_t));
|
||||||
sprite[g_player[other].ps->i].z += PHEIGHT;
|
sprite[g_player[other].ps->i].z += PHEIGHT;
|
||||||
changespritesect(g_player[other].ps->i, g_player[other].ps->cursectnum);
|
changespritesect(g_player[other].ps->i, g_player[other].ps->cursectnum);
|
||||||
j += sizeof(vec3_t);
|
j += sizeof(vec3_t) * 2;
|
||||||
|
|
||||||
Bmemcpy(&g_player[other].ps->posxv, &packbuf[j], sizeof(vec3_t));
|
Bmemcpy(&g_player[other].ps->posxv, &packbuf[j], sizeof(vec3_t));
|
||||||
j += sizeof(vec3_t);
|
j += sizeof(vec3_t);
|
||||||
|
@ -1839,12 +1838,12 @@ void Net_GetPackets(void)
|
||||||
switch (event.type)
|
switch (event.type)
|
||||||
{
|
{
|
||||||
case ENET_EVENT_TYPE_RECEIVE:
|
case ENET_EVENT_TYPE_RECEIVE:
|
||||||
/*
|
|
||||||
initprintf ("A packet of length %u was received from player %d on channel %u.\n",
|
initprintf ("A packet of length %u was received from player %d on channel %u.\n",
|
||||||
event.packet -> dataLength,
|
event.packet -> dataLength,
|
||||||
event.peer -> data,
|
event.peer -> data,
|
||||||
event.channelID);
|
event.channelID);
|
||||||
*/
|
|
||||||
// channelID 1 is the map state transfer from the server
|
// channelID 1 is the map state transfer from the server
|
||||||
if (event.channelID == 1)
|
if (event.channelID == 1)
|
||||||
{
|
{
|
||||||
|
@ -1899,6 +1898,9 @@ void Net_GetPackets(void)
|
||||||
break;
|
break;
|
||||||
case ENET_EVENT_TYPE_DISCONNECT:
|
case ENET_EVENT_TYPE_DISCONNECT:
|
||||||
g_netDisconnect = 1;
|
g_netDisconnect = 1;
|
||||||
|
numplayers = playerswhenstarted = ud.multimode = 1;
|
||||||
|
myconnectindex = screenpeek = 0;
|
||||||
|
G_BackToMenu();
|
||||||
switch (event.data)
|
switch (event.data)
|
||||||
{
|
{
|
||||||
case DISC_BAD_PASSWORD:
|
case DISC_BAD_PASSWORD:
|
||||||
|
@ -1921,10 +1923,321 @@ void Net_GetPackets(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Net_UpdateClients(void)
|
||||||
|
{
|
||||||
|
input_t * osyn = (input_t *)&inputfifo[1][0];
|
||||||
|
input_t * nsyn = (input_t *)&inputfifo[0][0];
|
||||||
|
int16_t i, nexti, k = 0, l;
|
||||||
|
int32_t j;
|
||||||
|
|
||||||
|
if (!net_server || numplayers < 2)
|
||||||
|
{
|
||||||
|
if (net_server)
|
||||||
|
Bmemcpy(&osyn[0], &nsyn[0], sizeof(input_t));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
packbuf[0] = PACKET_MASTER_TO_SLAVE;
|
||||||
|
j = 1;
|
||||||
|
|
||||||
|
ticrandomseed = randomseed;
|
||||||
|
*(int32_t *)&packbuf[j] = ticrandomseed;
|
||||||
|
j += sizeof(int32_t);
|
||||||
|
packbuf[j++] = ud.pause_on;
|
||||||
|
|
||||||
|
TRAVERSE_CONNECT(i)
|
||||||
|
{
|
||||||
|
if (g_player[i].playerquitflag == 0) continue;
|
||||||
|
|
||||||
|
Bmemcpy(&osyn[i], &nsyn[i], sizeof(input_t));
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = g_player[i].ps->dead_flag;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &nsyn[i], sizeof(input_t)-sizeof(loc.filler));
|
||||||
|
j += sizeof(input_t)-sizeof(loc.filler);
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &g_player[i].ps->posx, sizeof(vec3_t) * 2);
|
||||||
|
j += sizeof(vec3_t) * 2;
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &g_player[i].ps->posxv, sizeof(vec3_t));
|
||||||
|
j += sizeof(vec3_t);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = g_player[i].ps->ang;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &g_player[i].ps->horiz, sizeof(int16_t) * 2);
|
||||||
|
j += sizeof(int16_t) * 2;
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &g_player[i].ps->gotweapon[0], sizeof(g_player[i].ps->gotweapon));
|
||||||
|
j += sizeof(g_player[i].ps->gotweapon);
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &g_player[i].ps->ammo_amount[0], sizeof(g_player[i].ps->ammo_amount));
|
||||||
|
j += sizeof(g_player[i].ps->ammo_amount);
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &g_player[i].ps->inv_amount[0], sizeof(g_player[i].ps->inv_amount));
|
||||||
|
j += sizeof(g_player[i].ps->inv_amount);
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], g_player[i].frags, sizeof(g_player[i].frags));
|
||||||
|
j += sizeof(g_player[i].frags);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = sprite[g_player[i].ps->i].extra;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = sprite[g_player[i].ps->i].cstat;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = g_player[i].ps->kickback_pic;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = ActorExtra[g_player[i].ps->i].owner;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = ActorExtra[g_player[i].ps->i].picnum;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
packbuf[j++] = (uint8_t) g_player[i].ps->curr_weapon;
|
||||||
|
packbuf[j++] = (uint8_t) g_player[i].ps->last_weapon;
|
||||||
|
packbuf[j++] = (uint8_t) g_player[i].ps->wantweaponfire;
|
||||||
|
packbuf[j++] = (uint8_t) g_player[i].ps->frag_ps;
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = g_player[i].ps->frag;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = g_player[i].ps->fraggedself;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = g_player[i].ps->last_extra;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = g_player[i].ping;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
packbuf[j++] = sprite[g_player[i].ps->i].pal;
|
||||||
|
|
||||||
|
l = i;
|
||||||
|
|
||||||
|
{
|
||||||
|
int32_t jj, oa;
|
||||||
|
|
||||||
|
i = g_player[l].ps->i;
|
||||||
|
|
||||||
|
packbuf[(jj = j++)] = 0;
|
||||||
|
|
||||||
|
if (T5 >= (intptr_t)&script[0] && T5 < (intptr_t)(&script[g_scriptSize]))
|
||||||
|
{
|
||||||
|
packbuf[jj] |= 2;
|
||||||
|
T5 -= (intptr_t)&script[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
oa = T5;
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &T5, sizeof(T5));
|
||||||
|
j += sizeof(T5);
|
||||||
|
|
||||||
|
if (oa != T5) T3 = T4 = 0;
|
||||||
|
|
||||||
|
if (packbuf[jj] & 2) T5 += (intptr_t)&script[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
i = l;
|
||||||
|
{
|
||||||
|
int16_t ii=g_gameVarCount-1, kk = 0;
|
||||||
|
|
||||||
|
for (; ii>=0; ii--)
|
||||||
|
{
|
||||||
|
if ((aGameVars[ii].dwFlags & (GAMEVAR_PERACTOR|GAMEVAR_NOMULTI)) == GAMEVAR_PERACTOR && aGameVars[ii].val.plValues)
|
||||||
|
{
|
||||||
|
if (peractorvals[ii][i] != aGameVars[ii].val.plValues[i])
|
||||||
|
{
|
||||||
|
peractorvals[ii][i] = aGameVars[ii].val.plValues[i];
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = ii;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
*(int32_t *)&packbuf[j] = aGameVars[ii].val.plValues[i];
|
||||||
|
j += sizeof(int32_t);
|
||||||
|
kk++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (kk > 64) break;
|
||||||
|
}
|
||||||
|
*(int16_t *)&packbuf[j] = MAXGAMEVARS;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
}
|
||||||
|
i = l;
|
||||||
|
|
||||||
|
{
|
||||||
|
int16_t ii=g_gameVarCount-1, kk = 0;
|
||||||
|
|
||||||
|
for (; ii>=0; ii--)
|
||||||
|
{
|
||||||
|
if ((aGameVars[ii].dwFlags & (GAMEVAR_PERPLAYER|GAMEVAR_NOMULTI)) == GAMEVAR_PERPLAYER && aGameVars[ii].val.plValues)
|
||||||
|
{
|
||||||
|
if (perplayervals[ii][i] != aGameVars[ii].val.plValues[i])
|
||||||
|
{
|
||||||
|
perplayervals[ii][i] = aGameVars[ii].val.plValues[i];
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = ii;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
*(int32_t *)&packbuf[j] = aGameVars[ii].val.plValues[i];
|
||||||
|
j += sizeof(int32_t);
|
||||||
|
kk++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (kk > 64) break;
|
||||||
|
}
|
||||||
|
*(int16_t *)&packbuf[j] = MAXGAMEVARS;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
k = 0;
|
||||||
|
|
||||||
|
{
|
||||||
|
int32_t zz, zj;
|
||||||
|
|
||||||
|
packbuf[(zj = j++)] = 0;
|
||||||
|
|
||||||
|
for (zz = 0; (unsigned)zz < (sizeof(net_lists)/sizeof(net_lists[0])); zz++)
|
||||||
|
TRAVERSE_SPRITE_STAT(headspritestat[net_lists[zz]], i, nexti)
|
||||||
|
{
|
||||||
|
if (totalclock > (lastupdate[i] + TICRATE))
|
||||||
|
{
|
||||||
|
l = crc32once((uint8_t *)&sprite[i], sizeof(spritetype));
|
||||||
|
|
||||||
|
if (!lastupdate[i] || spritecrc[i] != l)
|
||||||
|
{
|
||||||
|
int32_t jj = 0;
|
||||||
|
|
||||||
|
/*initprintf("updating sprite %d (%d)\n",i,sprite[i].picnum);*/
|
||||||
|
spritecrc[i] = l;
|
||||||
|
lastupdate[i] = totalclock;
|
||||||
|
*(int16_t *)&packbuf[j] = i;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
Bmemcpy(&packbuf[j], &sprite[i], sizeof(spritetype));
|
||||||
|
j += sizeof(spritetype);
|
||||||
|
|
||||||
|
packbuf[(jj = j++)] = 0;
|
||||||
|
|
||||||
|
if (T2 >= (intptr_t)&script[0] && T2 < (intptr_t)(&script[g_scriptSize]))
|
||||||
|
{
|
||||||
|
packbuf[jj] |= 1;
|
||||||
|
T2 -= (intptr_t)&script[0];
|
||||||
|
}
|
||||||
|
if (T5 >= (intptr_t)&script[0] && T5 < (intptr_t)(&script[g_scriptSize]))
|
||||||
|
{
|
||||||
|
packbuf[jj] |= 2;
|
||||||
|
T5 -= (intptr_t)&script[0];
|
||||||
|
}
|
||||||
|
if (T6 >= (intptr_t)&script[0] && T6 < (intptr_t)(&script[g_scriptSize]))
|
||||||
|
{
|
||||||
|
packbuf[jj] |= 4;
|
||||||
|
T6 -= (intptr_t)&script[0];
|
||||||
|
}
|
||||||
|
Bmemcpy(&packbuf[j], &ActorExtra[i], sizeof(NetActorData_t));
|
||||||
|
j += sizeof(NetActorData_t);
|
||||||
|
|
||||||
|
if (packbuf[jj] & 1) T2 += (intptr_t)&script[0];
|
||||||
|
if (packbuf[jj] & 2) T5 += (intptr_t)&script[0];
|
||||||
|
if (packbuf[jj] & 4) T6 += (intptr_t)&script[0];
|
||||||
|
|
||||||
|
{
|
||||||
|
int16_t ii=g_gameVarCount-1, kk = 0;
|
||||||
|
|
||||||
|
for (; ii>=0; ii--)
|
||||||
|
{
|
||||||
|
if ((aGameVars[ii].dwFlags & GAMEVAR_PERACTOR) && aGameVars[ii].val.plValues)
|
||||||
|
{
|
||||||
|
if (peractorvals[ii][i] != aGameVars[ii].val.plValues[i])
|
||||||
|
{
|
||||||
|
peractorvals[ii][i] = aGameVars[ii].val.plValues[i];
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = ii;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
*(int32_t *)&packbuf[j] = aGameVars[ii].val.plValues[i];
|
||||||
|
j += sizeof(int32_t);
|
||||||
|
kk++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (kk > 64) break;
|
||||||
|
}
|
||||||
|
*(int16_t *)&packbuf[j] = MAXGAMEVARS;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (k > 8) break;
|
||||||
|
}
|
||||||
|
packbuf[zj] = k;
|
||||||
|
k = 0;
|
||||||
|
|
||||||
|
packbuf[(zj = j++)] = 0;
|
||||||
|
for (i = numsectors-1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (totalclock > (lastsectupdate[i] + TICRATE))
|
||||||
|
{
|
||||||
|
l = crc32once((uint8_t *)§or[i], sizeof(sectortype));
|
||||||
|
|
||||||
|
if (sectcrc[i] != l)
|
||||||
|
{
|
||||||
|
sectcrc[i] = l;
|
||||||
|
lastsectupdate[i] = totalclock;
|
||||||
|
*(int16_t *)&packbuf[j] = i;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
Bmemcpy(&packbuf[j], §or[i], sizeof(sectortype));
|
||||||
|
j += sizeof(sectortype);
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (k > 6) break;
|
||||||
|
}
|
||||||
|
packbuf[zj] = k;
|
||||||
|
k = 0;
|
||||||
|
|
||||||
|
packbuf[(zj = j++)] = 0;
|
||||||
|
for (i = numwalls-1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (totalclock > (lastwallupdate[i] + TICRATE))
|
||||||
|
{
|
||||||
|
l = crc32once((uint8_t *)&wall[i], sizeof(walltype));
|
||||||
|
|
||||||
|
if (wallcrc[i] != l)
|
||||||
|
{
|
||||||
|
wallcrc[i] = l;
|
||||||
|
lastwallupdate[i] = totalclock;
|
||||||
|
*(int16_t *)&packbuf[j] = i;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
Bmemcpy(&packbuf[j], &wall[i], sizeof(walltype));
|
||||||
|
j += sizeof(walltype);
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (k > 6) break;
|
||||||
|
}
|
||||||
|
packbuf[zj] = k;
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
char buf[4096];
|
||||||
|
|
||||||
|
j = qlz_compress((char *)(packbuf)+1, (char *)buf, j, state_compress);
|
||||||
|
Bmemcpy((char *)(packbuf)+1, (char *)buf, j);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
packbuf[j++] = myconnectindex;
|
||||||
|
|
||||||
|
enet_host_broadcast(net_server, 0, enet_packet_create(packbuf, j, 0));
|
||||||
|
|
||||||
|
movefifosendplc++;
|
||||||
|
}
|
||||||
|
|
||||||
void faketimerhandler(void)
|
void faketimerhandler(void)
|
||||||
{
|
{
|
||||||
int32_t i, j;
|
int32_t i;
|
||||||
// short who;
|
|
||||||
input_t *nsyn;
|
input_t *nsyn;
|
||||||
|
|
||||||
if (qe == 0 && KB_KeyPressed(sc_LeftControl) && KB_KeyPressed(sc_LeftAlt) && KB_KeyPressed(sc_Delete))
|
if (qe == 0 && KB_KeyPressed(sc_LeftControl) && KB_KeyPressed(sc_LeftAlt) && KB_KeyPressed(sc_Delete))
|
||||||
|
@ -1970,369 +2283,6 @@ void faketimerhandler(void)
|
||||||
computergetinput(i,&inputfifo[0][i]);
|
computergetinput(i,&inputfifo[0][i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (net_client) //Slave
|
|
||||||
{
|
|
||||||
int32_t jj = 0;
|
|
||||||
|
|
||||||
packbuf[0] = PACKET_SLAVE_TO_MASTER;
|
|
||||||
j = 1;
|
|
||||||
|
|
||||||
nsyn = (input_t *)&inputfifo[0][myconnectindex];
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &nsyn[0], sizeof(input_t));
|
|
||||||
j += sizeof(input_t)-sizeof(loc.filler);
|
|
||||||
Bmemcpy(&packbuf[j], &g_player[myconnectindex].ps->posx, sizeof(vec3_t));
|
|
||||||
j += sizeof(vec3_t);
|
|
||||||
Bmemcpy(&packbuf[j], &g_player[myconnectindex].ps->posxv, sizeof(vec3_t));
|
|
||||||
j += sizeof(vec3_t);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = g_player[myconnectindex].ps->ang;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &g_player[myconnectindex].ps->horiz, sizeof(int16_t) * 2);
|
|
||||||
j += sizeof(int16_t) * 2;
|
|
||||||
|
|
||||||
i = g_player[myconnectindex].ps->i;
|
|
||||||
|
|
||||||
packbuf[(jj = j++)] = 0;
|
|
||||||
|
|
||||||
if (T5 >= (intptr_t)&script[0] && T5 < (intptr_t)(&script[g_scriptSize]))
|
|
||||||
{
|
|
||||||
packbuf[jj] |= 2;
|
|
||||||
T5 -= (intptr_t)&script[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &T5, sizeof(T5));
|
|
||||||
j += sizeof(T5);
|
|
||||||
|
|
||||||
if (packbuf[jj] & 2) T5 += (intptr_t)&script[0];
|
|
||||||
|
|
||||||
{
|
|
||||||
char buf[1024];
|
|
||||||
|
|
||||||
j = qlz_compress((char *)(packbuf)+1, (char *)buf, j, state_compress);
|
|
||||||
Bmemcpy((char *)(packbuf)+1, (char *)buf, j);
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
|
|
||||||
packbuf[j++] = myconnectindex;
|
|
||||||
|
|
||||||
enet_peer_send(net_peer, 1, enet_packet_create(packbuf, j, 0));
|
|
||||||
|
|
||||||
movefifosendplc++;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (net_server)
|
|
||||||
{
|
|
||||||
input_t * osyn = (input_t *)&inputfifo[1][0];
|
|
||||||
int16_t i, nexti, k = 0, l;
|
|
||||||
|
|
||||||
//MASTER -> SLAVE packet
|
|
||||||
packbuf[0] = PACKET_MASTER_TO_SLAVE;
|
|
||||||
j = 1;
|
|
||||||
|
|
||||||
ticrandomseed = randomseed;
|
|
||||||
Bmemcpy(&packbuf[j], &ticrandomseed, sizeof(ticrandomseed));
|
|
||||||
j += sizeof(ticrandomseed);
|
|
||||||
packbuf[j++] = ud.pause_on;
|
|
||||||
|
|
||||||
nsyn = (input_t *)&inputfifo[0][0];
|
|
||||||
|
|
||||||
TRAVERSE_CONNECT(i)
|
|
||||||
{
|
|
||||||
if (g_player[i].playerquitflag == 0) continue;
|
|
||||||
|
|
||||||
Bmemcpy(&osyn[i], &nsyn[i], sizeof(input_t));
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = g_player[i].ps->dead_flag;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &nsyn[i], sizeof(input_t)-sizeof(loc.filler));
|
|
||||||
j += sizeof(input_t)-sizeof(loc.filler);
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &g_player[i].ps->posx, sizeof(vec3_t));
|
|
||||||
j += sizeof(vec3_t);
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &g_player[i].ps->posxv, sizeof(vec3_t));
|
|
||||||
j += sizeof(vec3_t);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = g_player[i].ps->ang;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &g_player[i].ps->horiz, sizeof(int16_t) * 2);
|
|
||||||
j += sizeof(int16_t) * 2;
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &g_player[i].ps->gotweapon[0], sizeof(g_player[i].ps->gotweapon));
|
|
||||||
j += sizeof(g_player[i].ps->gotweapon);
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &g_player[i].ps->ammo_amount[0], sizeof(g_player[i].ps->ammo_amount));
|
|
||||||
j += sizeof(g_player[i].ps->ammo_amount);
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &g_player[i].ps->inv_amount[0], sizeof(g_player[i].ps->inv_amount));
|
|
||||||
j += sizeof(g_player[i].ps->inv_amount);
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], g_player[i].frags, sizeof(g_player[i].frags));
|
|
||||||
j += sizeof(g_player[i].frags);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = sprite[g_player[i].ps->i].extra;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = sprite[g_player[i].ps->i].cstat;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = g_player[i].ps->kickback_pic;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = ActorExtra[g_player[i].ps->i].owner;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = ActorExtra[g_player[i].ps->i].picnum;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
packbuf[j++] = (uint8_t) g_player[i].ps->curr_weapon;
|
|
||||||
packbuf[j++] = (uint8_t) g_player[i].ps->last_weapon;
|
|
||||||
packbuf[j++] = (uint8_t) g_player[i].ps->wantweaponfire;
|
|
||||||
packbuf[j++] = (uint8_t) g_player[i].ps->frag_ps;
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = g_player[i].ps->frag;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = g_player[i].ps->fraggedself;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = g_player[i].ps->last_extra;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
*(int16_t *)&packbuf[j] = g_player[i].ping;
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
|
|
||||||
packbuf[j++] = sprite[g_player[i].ps->i].pal;
|
|
||||||
|
|
||||||
l = i;
|
|
||||||
|
|
||||||
{
|
|
||||||
int32_t jj, oa;
|
|
||||||
|
|
||||||
i = g_player[l].ps->i;
|
|
||||||
|
|
||||||
packbuf[(jj = j++)] = 0;
|
|
||||||
|
|
||||||
if (T5 >= (intptr_t)&script[0] && T5 < (intptr_t)(&script[g_scriptSize]))
|
|
||||||
{
|
|
||||||
packbuf[jj] |= 2;
|
|
||||||
T5 -= (intptr_t)&script[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
oa = T5;
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &T5, sizeof(T5));
|
|
||||||
j += sizeof(T5);
|
|
||||||
|
|
||||||
if (oa != T5) T3 = T4 = 0;
|
|
||||||
|
|
||||||
if (packbuf[jj] & 2) T5 += (intptr_t)&script[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
i = l;
|
|
||||||
{
|
|
||||||
int16_t ii=g_gameVarCount-1, kk = 0;
|
|
||||||
|
|
||||||
for (; ii>=0; ii--)
|
|
||||||
{
|
|
||||||
if ((aGameVars[ii].dwFlags & (GAMEVAR_PERACTOR|GAMEVAR_NOMULTI)) == GAMEVAR_PERACTOR && aGameVars[ii].val.plValues)
|
|
||||||
{
|
|
||||||
if (peractorvals[ii][i] != aGameVars[ii].val.plValues[i])
|
|
||||||
{
|
|
||||||
peractorvals[ii][i] = aGameVars[ii].val.plValues[i];
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &ii, sizeof(int16_t));
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
Bmemcpy(&packbuf[j], &aGameVars[ii].val.plValues[i], sizeof(int32_t));
|
|
||||||
j += sizeof(int32_t);
|
|
||||||
kk++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (kk > 64) break;
|
|
||||||
}
|
|
||||||
ii = MAXGAMEVARS;
|
|
||||||
Bmemcpy(&packbuf[j], &ii, sizeof(int16_t));
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
}
|
|
||||||
i = l;
|
|
||||||
|
|
||||||
{
|
|
||||||
int16_t ii=g_gameVarCount-1, kk = 0;
|
|
||||||
|
|
||||||
for (; ii>=0; ii--)
|
|
||||||
{
|
|
||||||
if ((aGameVars[ii].dwFlags & (GAMEVAR_PERPLAYER|GAMEVAR_NOMULTI)) == GAMEVAR_PERPLAYER && aGameVars[ii].val.plValues)
|
|
||||||
{
|
|
||||||
if (perplayervals[ii][i] != aGameVars[ii].val.plValues[i])
|
|
||||||
{
|
|
||||||
perplayervals[ii][i] = aGameVars[ii].val.plValues[i];
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &ii, sizeof(int16_t));
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
Bmemcpy(&packbuf[j], &aGameVars[ii].val.plValues[i], sizeof(int32_t));
|
|
||||||
j += sizeof(int32_t);
|
|
||||||
kk++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (kk > 64) break;
|
|
||||||
}
|
|
||||||
ii = MAXGAMEVARS;
|
|
||||||
Bmemcpy(&packbuf[j], &ii, sizeof(int16_t));
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
k = 0;
|
|
||||||
|
|
||||||
{
|
|
||||||
int32_t zz, zj;
|
|
||||||
|
|
||||||
packbuf[(zj = j++)] = 0;
|
|
||||||
|
|
||||||
for (zz = 0; (unsigned)zz < (sizeof(net_lists)/sizeof(net_lists[0])); zz++)
|
|
||||||
TRAVERSE_SPRITE_STAT(headspritestat[net_lists[zz]], i, nexti)
|
|
||||||
{
|
|
||||||
if (totalclock > (lastupdate[i] + (TICSPERFRAME * 6)))
|
|
||||||
{
|
|
||||||
l = crc32once((uint8_t *)&sprite[i], sizeof(spritetype));
|
|
||||||
|
|
||||||
if (!lastupdate[i] || spritecrc[i] != l)
|
|
||||||
{
|
|
||||||
int32_t jj = 0;
|
|
||||||
|
|
||||||
/*initprintf("updating sprite %d (%d)\n",i,sprite[i].picnum);*/
|
|
||||||
spritecrc[i] = l;
|
|
||||||
lastupdate[i] = totalclock;
|
|
||||||
Bmemcpy(&packbuf[j], &i, sizeof(int16_t));
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
Bmemcpy(&packbuf[j], &sprite[i], sizeof(spritetype));
|
|
||||||
j += sizeof(spritetype);
|
|
||||||
|
|
||||||
packbuf[(jj = j++)] = 0;
|
|
||||||
|
|
||||||
if (T2 >= (intptr_t)&script[0] && T2 < (intptr_t)(&script[g_scriptSize]))
|
|
||||||
{
|
|
||||||
packbuf[jj] |= 1;
|
|
||||||
T2 -= (intptr_t)&script[0];
|
|
||||||
}
|
|
||||||
if (T5 >= (intptr_t)&script[0] && T5 < (intptr_t)(&script[g_scriptSize]))
|
|
||||||
{
|
|
||||||
packbuf[jj] |= 2;
|
|
||||||
T5 -= (intptr_t)&script[0];
|
|
||||||
}
|
|
||||||
if (T6 >= (intptr_t)&script[0] && T6 < (intptr_t)(&script[g_scriptSize]))
|
|
||||||
{
|
|
||||||
packbuf[jj] |= 4;
|
|
||||||
T6 -= (intptr_t)&script[0];
|
|
||||||
}
|
|
||||||
Bmemcpy(&packbuf[j], &ActorExtra[i], sizeof(NetActorData_t));
|
|
||||||
j += sizeof(NetActorData_t);
|
|
||||||
|
|
||||||
if (packbuf[jj] & 1) T2 += (intptr_t)&script[0];
|
|
||||||
if (packbuf[jj] & 2) T5 += (intptr_t)&script[0];
|
|
||||||
if (packbuf[jj] & 4) T6 += (intptr_t)&script[0];
|
|
||||||
|
|
||||||
{
|
|
||||||
int16_t ii=g_gameVarCount-1, kk = 0;
|
|
||||||
|
|
||||||
for (; ii>=0; ii--)
|
|
||||||
{
|
|
||||||
if ((aGameVars[ii].dwFlags & GAMEVAR_PERACTOR) && aGameVars[ii].val.plValues)
|
|
||||||
{
|
|
||||||
if (peractorvals[ii][i] != aGameVars[ii].val.plValues[i])
|
|
||||||
{
|
|
||||||
peractorvals[ii][i] = aGameVars[ii].val.plValues[i];
|
|
||||||
|
|
||||||
Bmemcpy(&packbuf[j], &ii, sizeof(int16_t));
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
Bmemcpy(&packbuf[j], &aGameVars[ii].val.plValues[i], sizeof(int32_t));
|
|
||||||
j += sizeof(int32_t);
|
|
||||||
kk++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (kk > 64) break;
|
|
||||||
}
|
|
||||||
ii = MAXGAMEVARS;
|
|
||||||
Bmemcpy(&packbuf[j], &ii, sizeof(int16_t));
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
}
|
|
||||||
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (k > 4) break;
|
|
||||||
}
|
|
||||||
packbuf[zj] = k;
|
|
||||||
k = 0;
|
|
||||||
|
|
||||||
packbuf[(zj = j++)] = 0;
|
|
||||||
for (i = numsectors-1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
if (totalclock > (lastsectupdate[i] + (TICSPERFRAME * 12)))
|
|
||||||
{
|
|
||||||
l = crc32once((uint8_t *)§or[i], sizeof(sectortype));
|
|
||||||
|
|
||||||
if (sectcrc[i] != l)
|
|
||||||
{
|
|
||||||
sectcrc[i] = l;
|
|
||||||
lastsectupdate[i] = totalclock;
|
|
||||||
Bmemcpy(&packbuf[j], &i, sizeof(int16_t));
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
Bmemcpy(&packbuf[j], §or[i], sizeof(sectortype));
|
|
||||||
j += sizeof(sectortype);
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (k > 6) break;
|
|
||||||
}
|
|
||||||
packbuf[zj] = k;
|
|
||||||
k = 0;
|
|
||||||
|
|
||||||
packbuf[(zj = j++)] = 0;
|
|
||||||
for (i = numwalls-1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
if (totalclock > (lastwallupdate[i] + (TICSPERFRAME * 12)))
|
|
||||||
{
|
|
||||||
l = crc32once((uint8_t *)&wall[i], sizeof(walltype));
|
|
||||||
|
|
||||||
if (wallcrc[i] != l)
|
|
||||||
{
|
|
||||||
wallcrc[i] = l;
|
|
||||||
lastwallupdate[i] = totalclock;
|
|
||||||
Bmemcpy(&packbuf[j], &i, sizeof(int16_t));
|
|
||||||
j += sizeof(int16_t);
|
|
||||||
Bmemcpy(&packbuf[j], &wall[i], sizeof(walltype));
|
|
||||||
j += sizeof(walltype);
|
|
||||||
k++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (k > 6) break;
|
|
||||||
}
|
|
||||||
packbuf[zj] = k;
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
char buf[4096];
|
|
||||||
|
|
||||||
j = qlz_compress((char *)(packbuf)+1, (char *)buf, j, state_compress);
|
|
||||||
Bmemcpy((char *)(packbuf)+1, (char *)buf, j);
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
|
|
||||||
packbuf[j++] = myconnectindex;
|
|
||||||
|
|
||||||
enet_host_broadcast(net_server, 0, enet_packet_create(packbuf, j, 0));
|
|
||||||
|
|
||||||
movefifosendplc++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int32_t cacnum;
|
extern int32_t cacnum;
|
||||||
|
@ -12656,6 +12606,60 @@ static int32_t G_DoMoveThings(void)
|
||||||
{
|
{
|
||||||
G_AnimateWalls();
|
G_AnimateWalls();
|
||||||
A_MoveCyclers();
|
A_MoveCyclers();
|
||||||
|
Net_UpdateClients();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (net_client) //Slave
|
||||||
|
{
|
||||||
|
int32_t jj = 0;
|
||||||
|
input_t *nsyn = (input_t *)&inputfifo[0][myconnectindex];
|
||||||
|
|
||||||
|
packbuf[0] = PACKET_SLAVE_TO_MASTER;
|
||||||
|
j = 1;
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &nsyn[0], sizeof(input_t) - sizeof(loc.filler));
|
||||||
|
j += sizeof(input_t) - sizeof(loc.filler);
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &g_player[myconnectindex].ps->posx, sizeof(vec3_t) * 2);
|
||||||
|
j += sizeof(vec3_t) * 2;
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &g_player[myconnectindex].ps->posxv, sizeof(vec3_t));
|
||||||
|
j += sizeof(vec3_t);
|
||||||
|
|
||||||
|
*(int16_t *)&packbuf[j] = g_player[myconnectindex].ps->ang;
|
||||||
|
j += sizeof(int16_t);
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &g_player[myconnectindex].ps->horiz, sizeof(int16_t) * 2);
|
||||||
|
j += sizeof(int16_t) * 2;
|
||||||
|
|
||||||
|
i = g_player[myconnectindex].ps->i;
|
||||||
|
|
||||||
|
packbuf[(jj = j++)] = 0;
|
||||||
|
|
||||||
|
if (T5 >= (intptr_t)&script[0] && T5 < (intptr_t)(&script[g_scriptSize]))
|
||||||
|
{
|
||||||
|
packbuf[jj] |= 2;
|
||||||
|
T5 -= (intptr_t)&script[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
Bmemcpy(&packbuf[j], &T5, sizeof(T5));
|
||||||
|
j += sizeof(T5);
|
||||||
|
|
||||||
|
if (packbuf[jj] & 2) T5 += (intptr_t)&script[0];
|
||||||
|
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
|
||||||
|
j = qlz_compress((char *)(packbuf)+1, (char *)buf, j, state_compress);
|
||||||
|
Bmemcpy((char *)(packbuf)+1, (char *)buf, j);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
|
||||||
|
packbuf[j++] = myconnectindex;
|
||||||
|
|
||||||
|
enet_peer_send(net_peer, 1, enet_packet_create(packbuf, j, 0));
|
||||||
|
|
||||||
|
movefifosendplc++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -794,6 +794,8 @@ void P_ResetStatus(int32_t snum)
|
||||||
|
|
||||||
p->movement_lock = 0;
|
p->movement_lock = 0;
|
||||||
|
|
||||||
|
p->frag_ps = snum;
|
||||||
|
|
||||||
P_UpdateScreenPal(p);
|
P_UpdateScreenPal(p);
|
||||||
X_OnEvent(EVENT_RESETPLAYER, p->i, snum, -1);
|
X_OnEvent(EVENT_RESETPLAYER, p->i, snum, -1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -416,6 +416,7 @@ int32_t S_LoadSound(uint32_t num)
|
||||||
allocache((intptr_t *)&g_sounds[num].ptr,l,(char *)&g_soundlocks[num]);
|
allocache((intptr_t *)&g_sounds[num].ptr,l,(char *)&g_soundlocks[num]);
|
||||||
kread(fp, g_sounds[num].ptr , l);
|
kread(fp, g_sounds[num].ptr , l);
|
||||||
kclose(fp);
|
kclose(fp);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -432,7 +433,7 @@ int32_t S_PlaySound3D(int32_t num, int32_t i, const vec3_t *pos)
|
||||||
ud.config.FXDevice < 0 ||
|
ud.config.FXDevice < 0 ||
|
||||||
((g_sounds[num].m&8) && ud.lockout) ||
|
((g_sounds[num].m&8) && ud.lockout) ||
|
||||||
ud.config.SoundToggle == 0 ||
|
ud.config.SoundToggle == 0 ||
|
||||||
g_sounds[num].num >= SOUNDMAX ||
|
g_sounds[num].num >= MAXSOUNDINSTANCES ||
|
||||||
FX_VoiceAvailable(g_sounds[num].pr) == 0 ||
|
FX_VoiceAvailable(g_sounds[num].pr) == 0 ||
|
||||||
(g_player[myconnectindex].ps->timebeforeexit > 0 && g_player[myconnectindex].ps->timebeforeexit <= GAMETICSPERSEC*3) ||
|
(g_player[myconnectindex].ps->timebeforeexit > 0 && g_player[myconnectindex].ps->timebeforeexit <= GAMETICSPERSEC*3) ||
|
||||||
g_player[myconnectindex].ps->gm&MODE_MENU) return -1;
|
g_player[myconnectindex].ps->gm&MODE_MENU) return -1;
|
||||||
|
@ -441,10 +442,15 @@ int32_t S_PlaySound3D(int32_t num, int32_t i, const vec3_t *pos)
|
||||||
{
|
{
|
||||||
voice = S_PlaySound(num);
|
voice = S_PlaySound(num);
|
||||||
|
|
||||||
if (voice >= FX_Ok && g_sounds[num].num < SOUNDMAX && i >= 0 && i < MAXSPRITES)
|
if (voice >= FX_Ok && g_sounds[num].num < MAXSOUNDINSTANCES && i >= 0 && i < MAXSPRITES)
|
||||||
{
|
{
|
||||||
g_sounds[num].SoundOwner[g_sounds[num].num].i = i;
|
int32_t l = 0;
|
||||||
g_sounds[num].SoundOwner[g_sounds[num].num].voice = voice;
|
|
||||||
|
while (l < MAXSOUNDINSTANCES && g_sounds[num].SoundOwner[l].voice > 0)
|
||||||
|
l++;
|
||||||
|
|
||||||
|
g_sounds[num].SoundOwner[l].i = i;
|
||||||
|
g_sounds[num].SoundOwner[l].voice = voice;
|
||||||
g_sounds[num].num++;
|
g_sounds[num].num++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -461,7 +467,7 @@ int32_t S_PlaySound3D(int32_t num, int32_t i, const vec3_t *pos)
|
||||||
else if (!(ud.config.VoiceToggle&1))
|
else if (!(ud.config.VoiceToggle&1))
|
||||||
return -1;
|
return -1;
|
||||||
for (j=g_maxSoundPos; j>=0; j--)
|
for (j=g_maxSoundPos; j>=0; j--)
|
||||||
for (k=0; k<g_sounds[j].num; k++)
|
for (k=0; k<MAXSOUNDINSTANCES; k++)
|
||||||
if ((g_sounds[j].num > 0) && (g_sounds[j].m&4))
|
if ((g_sounds[j].num > 0) && (g_sounds[j].m&4))
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -550,25 +556,33 @@ int32_t S_PlaySound3D(int32_t num, int32_t i, const vec3_t *pos)
|
||||||
if (sndist < ((255-LOUDESTVOLUME)<<6))
|
if (sndist < ((255-LOUDESTVOLUME)<<6))
|
||||||
sndist = ((255-LOUDESTVOLUME)<<6);
|
sndist = ((255-LOUDESTVOLUME)<<6);
|
||||||
|
|
||||||
if (g_sounds[num].m&1)
|
|
||||||
{
|
{
|
||||||
if (g_sounds[num].num > 0) return -1;
|
int32_t l = 0;
|
||||||
|
|
||||||
voice = FX_PlayLoopedAuto(g_sounds[num].ptr, g_sounds[num].soundsiz, 0, -1,
|
while (l < MAXSOUNDINSTANCES && g_sounds[num].SoundOwner[l].voice > 0)
|
||||||
pitch,sndist>>6,sndist>>6,0,g_sounds[num].pr,num);
|
l++;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
voice = FX_PlayAuto3D(g_sounds[ num ].ptr, g_sounds[num].soundsiz, pitch,sndang>>4,sndist>>6, g_sounds[num].pr, num);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (voice >= FX_Ok)
|
if (g_sounds[num].m&1)
|
||||||
{
|
{
|
||||||
g_sounds[num].SoundOwner[g_sounds[num].num].i = i;
|
if (g_sounds[num].num > 0) return -1;
|
||||||
g_sounds[num].SoundOwner[g_sounds[num].num].voice = voice;
|
|
||||||
g_sounds[num].num++;
|
voice = FX_PlayLoopedAuto(g_sounds[num].ptr, g_sounds[num].soundsiz, 0, -1,
|
||||||
|
pitch,sndist>>6,sndist>>6,0,g_sounds[num].pr,(num * MAXSOUNDINSTANCES) + l);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
voice = FX_PlayAuto3D(g_sounds[ num ].ptr, g_sounds[num].soundsiz, pitch,sndang>>4,sndist>>6, g_sounds[num].pr,
|
||||||
|
(num * MAXSOUNDINSTANCES) + l);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (voice >= FX_Ok)
|
||||||
|
{
|
||||||
|
g_sounds[num].SoundOwner[l].i = i;
|
||||||
|
g_sounds[num].SoundOwner[l].voice = voice;
|
||||||
|
g_sounds[num].num++;
|
||||||
|
}
|
||||||
|
else g_soundlocks[num]--;
|
||||||
}
|
}
|
||||||
else g_soundlocks[num]--;
|
|
||||||
return (voice);
|
return (voice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -614,11 +628,11 @@ int32_t S_PlaySound(int32_t num)
|
||||||
if (g_sounds[num].m&1)
|
if (g_sounds[num].m&1)
|
||||||
{
|
{
|
||||||
voice = FX_PlayLoopedAuto(g_sounds[num].ptr, g_sounds[num].soundsiz, 0, -1,
|
voice = FX_PlayLoopedAuto(g_sounds[num].ptr, g_sounds[num].soundsiz, 0, -1,
|
||||||
pitch,LOUDESTVOLUME,LOUDESTVOLUME,LOUDESTVOLUME,g_sounds[num].soundsiz,num);
|
pitch,LOUDESTVOLUME,LOUDESTVOLUME,LOUDESTVOLUME,g_sounds[num].soundsiz,num * MAXSOUNDINSTANCES);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
voice = FX_PlayAuto3D(g_sounds[ num ].ptr, g_sounds[num].soundsiz, pitch,0,255-LOUDESTVOLUME,g_sounds[num].pr, num);
|
voice = FX_PlayAuto3D(g_sounds[ num ].ptr, g_sounds[num].soundsiz, pitch,0,255-LOUDESTVOLUME,g_sounds[num].pr, num * MAXSOUNDINSTANCES);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (voice >= FX_Ok) return voice;
|
if (voice >= FX_Ok) return voice;
|
||||||
|
@ -645,11 +659,15 @@ void S_StopSound(int32_t num)
|
||||||
{
|
{
|
||||||
if (g_sounds[num].num > 0)
|
if (g_sounds[num].num > 0)
|
||||||
{
|
{
|
||||||
int32_t j=g_sounds[num].num-1;
|
int32_t j=MAXSOUNDINSTANCES-1;
|
||||||
|
|
||||||
for (; j>=0; j--)
|
for (; j>=0; j--)
|
||||||
{
|
{
|
||||||
FX_StopSound(g_sounds[num].SoundOwner[j].voice);
|
if (g_sounds[num].SoundOwner[j].voice)
|
||||||
|
{
|
||||||
|
FX_StopSound(g_sounds[num].SoundOwner[j].voice);
|
||||||
|
g_sounds[num].SoundOwner[j].voice = 0;
|
||||||
|
}
|
||||||
// S_TestSoundCallback(num);
|
// S_TestSoundCallback(num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -662,13 +680,17 @@ void S_StopEnvSound(int32_t num,int32_t i)
|
||||||
{
|
{
|
||||||
if (g_sounds[num].num > 0)
|
if (g_sounds[num].num > 0)
|
||||||
{
|
{
|
||||||
int32_t j=g_sounds[num].num-1;
|
int32_t j=MAXSOUNDINSTANCES-1;
|
||||||
|
|
||||||
for (; j>=0; j--)
|
for (; j>=0; j--)
|
||||||
{
|
{
|
||||||
if (g_sounds[num].SoundOwner[j].i == i)
|
if (g_sounds[num].SoundOwner[j].i == i)
|
||||||
{
|
{
|
||||||
FX_StopSound(g_sounds[num].SoundOwner[j].voice);
|
if (g_sounds[num].SoundOwner[j].voice)
|
||||||
|
{
|
||||||
|
FX_StopSound(g_sounds[num].SoundOwner[j].voice);
|
||||||
|
g_sounds[num].SoundOwner[j].voice = 0;
|
||||||
|
}
|
||||||
// S_TestSoundCallback(num);
|
// S_TestSoundCallback(num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -701,13 +723,13 @@ void S_Pan3D(void)
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
for (k=g_sounds[j].num-1; k>=0; k--)
|
for (k=MAXSOUNDINSTANCES-1; k>=0; k--)
|
||||||
{
|
{
|
||||||
i = g_sounds[j].SoundOwner[k].i;
|
i = g_sounds[j].SoundOwner[k].i;
|
||||||
|
|
||||||
if (i < 0 || i >= MAXSPRITES)
|
if (i < 0 || i >= MAXSPRITES || g_sounds[j].SoundOwner[k].voice < 1)
|
||||||
{
|
{
|
||||||
OSD_Printf(OSD_ERROR "S_Pan3D(): INTERNAL ERROR: invalid id %d!\n",i);
|
// OSD_Printf(OSD_ERROR "S_Pan3D(): INTERNAL ERROR: invalid id %d!\n",i);
|
||||||
k--;
|
k--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -768,44 +790,35 @@ void S_Pan3D(void)
|
||||||
|
|
||||||
void S_TestSoundCallback(uint32_t num)
|
void S_TestSoundCallback(uint32_t num)
|
||||||
{
|
{
|
||||||
int32_t tempi,tempj,tempk;
|
if ((int32_t)num == MUSIC_ID)
|
||||||
|
|
||||||
if ((int32_t) num == MUSIC_ID)
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if((int32_t)num < 0)
|
// negative index is RTS playback
|
||||||
|
if ((int32_t)num < 0)
|
||||||
{
|
{
|
||||||
if(lumplockbyte[-(int32_t)num] >= 200)
|
if (lumplockbyte[-(int32_t)num] >= 200)
|
||||||
lumplockbyte[-(int32_t)num]--;
|
lumplockbyte[-(int32_t)num]--;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tempk = g_sounds[num].num;
|
|
||||||
|
|
||||||
if (tempk > 0)
|
|
||||||
{
|
{
|
||||||
if ((g_sounds[num].m&16) == 0)
|
int32_t j = num & (MAXSOUNDINSTANCES-1);
|
||||||
for (tempj=0; tempj<tempk; tempj++)
|
num = (num - j) / MAXSOUNDINSTANCES;
|
||||||
{
|
|
||||||
tempi = g_sounds[num].SoundOwner[tempj].i;
|
|
||||||
if (sprite[tempi].picnum == MUSICANDSFX && sector[sprite[tempi].sectnum].lotag < 3 && sprite[tempi].lotag < 999)
|
|
||||||
{
|
|
||||||
ActorExtra[tempi].temp_data[0] = 0;
|
|
||||||
if ((tempj + 1) < tempk)
|
|
||||||
{
|
|
||||||
g_sounds[num].SoundOwner[tempj].voice = g_sounds[num].SoundOwner[tempk-1].voice;
|
|
||||||
g_sounds[num].SoundOwner[tempj].i = g_sounds[num].SoundOwner[tempk-1].i;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
g_sounds[num].num--;
|
if (g_sounds[num].num > 0)
|
||||||
g_sounds[num].SoundOwner[tempk-1].i = -1;
|
{
|
||||||
|
int32_t i = g_sounds[num].SoundOwner[j].i;
|
||||||
|
|
||||||
|
// OSD_Printf("removing sound %d index %d from spr %d\n",num,j,i);
|
||||||
|
if (sprite[i].picnum == MUSICANDSFX && sector[sprite[i].sectnum].lotag < 3 && sprite[i].lotag < 999)
|
||||||
|
ActorExtra[i].temp_data[0] = 0;
|
||||||
|
|
||||||
|
g_sounds[num].SoundOwner[j].i = -1;
|
||||||
|
g_sounds[num].SoundOwner[j].voice = 0;
|
||||||
|
|
||||||
|
g_sounds[num].num--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_soundlocks[num]--;
|
g_soundlocks[num]--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -831,7 +844,7 @@ int32_t A_CheckSoundPlaying(int32_t i, int32_t num)
|
||||||
|
|
||||||
if (g_sounds[num].num > 0)
|
if (g_sounds[num].num > 0)
|
||||||
{
|
{
|
||||||
for (j=g_sounds[num].num-1; j>=0; j--)
|
for (j=MAXSOUNDINSTANCES-1; j>=0; j--)
|
||||||
if (g_sounds[num].SoundOwner[j].i == i)
|
if (g_sounds[num].SoundOwner[j].i == i)
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in a new issue