mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 17:22:12 +00:00
Merge branch 'next' into public_next
This commit is contained in:
commit
c737cff758
12 changed files with 235 additions and 2849 deletions
|
@ -868,12 +868,13 @@ static inline void resynch_write_others(resynchend_pak *rst)
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
|
|
||||||
rst->ingame = rst->ctfteam = 0;
|
rst->ingame = 0;
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; ++i)
|
for (i = 0; i < MAXPLAYERS; ++i)
|
||||||
{
|
{
|
||||||
if (!playeringame[i])
|
if (!playeringame[i])
|
||||||
{
|
{
|
||||||
|
rst->ctfteam[i] = 0;
|
||||||
rst->score[i] = 0;
|
rst->score[i] = 0;
|
||||||
rst->numboxes[i] = 0;
|
rst->numboxes[i] = 0;
|
||||||
rst->totalring[i] = 0;
|
rst->totalring[i] = 0;
|
||||||
|
@ -883,11 +884,8 @@ static inline void resynch_write_others(resynchend_pak *rst)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!players[i].spectator)
|
if (!players[i].spectator)
|
||||||
{
|
|
||||||
rst->ingame |= (1<<i);
|
rst->ingame |= (1<<i);
|
||||||
if (players[i].ctfteam > 1)
|
rst->ctfteam[i] = (INT32)LONG(players[i].ctfteam);
|
||||||
rst->ctfteam |= (1<<i);
|
|
||||||
}
|
|
||||||
rst->score[i] = (UINT32)LONG(players[i].score);
|
rst->score[i] = (UINT32)LONG(players[i].score);
|
||||||
rst->numboxes[i] = SHORT(players[i].numboxes);
|
rst->numboxes[i] = SHORT(players[i].numboxes);
|
||||||
rst->totalring[i] = SHORT(players[i].totalring);
|
rst->totalring[i] = SHORT(players[i].totalring);
|
||||||
|
@ -897,28 +895,18 @@ static inline void resynch_write_others(resynchend_pak *rst)
|
||||||
|
|
||||||
// endian safeness
|
// endian safeness
|
||||||
rst->ingame = (UINT32)LONG(rst->ingame);
|
rst->ingame = (UINT32)LONG(rst->ingame);
|
||||||
rst->ctfteam = (UINT32)LONG(rst->ctfteam);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void resynch_read_others(resynchend_pak *p)
|
static inline void resynch_read_others(resynchend_pak *p)
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
UINT32 loc_ingame = (UINT32)LONG(p->ingame);
|
UINT32 loc_ingame = (UINT32)LONG(p->ingame);
|
||||||
UINT32 loc_ctfteam = (UINT32)LONG(p->ctfteam);
|
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; ++i)
|
for (i = 0; i < MAXPLAYERS; ++i)
|
||||||
{
|
{
|
||||||
// We don't care if they're in the game or not, just write all the data.
|
// We don't care if they're in the game or not, just write all the data.
|
||||||
if (loc_ingame & (1<<i))
|
players[i].spectator = !(loc_ingame & i<<i);
|
||||||
{
|
players[i].ctfteam = (INT32)LONG(p->ctfteam[i]); // no, 0 does not mean spectator, at least not in Match
|
||||||
players[i].spectator = false;
|
|
||||||
players[i].ctfteam = (loc_ctfteam & (1<<i)) ? 2 : 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
players[i].spectator = true;
|
|
||||||
players[i].ctfteam = 0;
|
|
||||||
}
|
|
||||||
players[i].score = (UINT32)LONG(p->score[i]);
|
players[i].score = (UINT32)LONG(p->score[i]);
|
||||||
players[i].numboxes = SHORT(p->numboxes[i]);
|
players[i].numboxes = SHORT(p->numboxes[i]);
|
||||||
players[i].totalring = SHORT(p->totalring[i]);
|
players[i].totalring = SHORT(p->totalring[i]);
|
||||||
|
|
|
@ -133,7 +133,7 @@ typedef struct
|
||||||
fixed_t flagz[2];
|
fixed_t flagz[2];
|
||||||
|
|
||||||
UINT32 ingame; // Spectator bit for each player
|
UINT32 ingame; // Spectator bit for each player
|
||||||
UINT32 ctfteam; // If not spectator, then which team?
|
INT32 ctfteam[MAXPLAYERS]; // Which team? (can't be 1 bit, since in regular Match there are no teams)
|
||||||
|
|
||||||
// Resynch game scores and the like all at once
|
// Resynch game scores and the like all at once
|
||||||
UINT32 score[MAXPLAYERS]; // Everyone's score
|
UINT32 score[MAXPLAYERS]; // Everyone's score
|
||||||
|
|
|
@ -4523,8 +4523,8 @@ static void HWR_SortVisSprites(void)
|
||||||
gr_vissprite_t *ds, *dsprev, *dsnext, *dsfirst;
|
gr_vissprite_t *ds, *dsprev, *dsnext, *dsfirst;
|
||||||
gr_vissprite_t *best = NULL;
|
gr_vissprite_t *best = NULL;
|
||||||
gr_vissprite_t unsorted;
|
gr_vissprite_t unsorted;
|
||||||
float bestdist;
|
float bestdist = 0.0f;
|
||||||
INT32 bestdispoffset;
|
INT32 bestdispoffset = 0;
|
||||||
|
|
||||||
if (!gr_visspritecount)
|
if (!gr_visspritecount)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -28,4 +28,4 @@ void M_AATreeSet(aatree_t *aatree, INT32 key, void* value);
|
||||||
void *M_AATreeGet(aatree_t *aatree, INT32 key);
|
void *M_AATreeGet(aatree_t *aatree, INT32 key);
|
||||||
void M_AATreeIterate(aatree_t *aatree, aatree_iter_t callback);
|
void M_AATreeIterate(aatree_t *aatree, aatree_iter_t callback);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -7644,7 +7644,7 @@ void A_SetObjectFlags(mobj_t *actor)
|
||||||
else if (locvar2 == 1)
|
else if (locvar2 == 1)
|
||||||
locvar1 = actor->flags & ~locvar1;
|
locvar1 = actor->flags & ~locvar1;
|
||||||
|
|
||||||
if ((locvar1 & (MF_NOBLOCKMAP|MF_NOSECTOR)) != (actor->flags & (MF_NOBLOCKMAP|MF_NOSECTOR))) // Blockmap/sector status has changed, so reset the links
|
if ((UINT32)(locvar1 & (MF_NOBLOCKMAP|MF_NOSECTOR)) != (actor->flags & (MF_NOBLOCKMAP|MF_NOSECTOR))) // Blockmap/sector status has changed, so reset the links
|
||||||
unlinkthings = true;
|
unlinkthings = true;
|
||||||
|
|
||||||
if (unlinkthings) {
|
if (unlinkthings) {
|
||||||
|
|
14
src/p_mobj.c
14
src/p_mobj.c
|
@ -4436,7 +4436,7 @@ static void P_Boss4MoveSpikeballs(mobj_t *mobj, angle_t angle, fixed_t fz)
|
||||||
{
|
{
|
||||||
INT32 s;
|
INT32 s;
|
||||||
mobj_t *base = mobj, *seg;
|
mobj_t *base = mobj, *seg;
|
||||||
fixed_t dist, bz = (mobj->spawnpoint->z+16)<<FRACBITS;
|
fixed_t dist, bz = mobj->watertop+(16<<FRACBITS);
|
||||||
while ((base = base->tracer))
|
while ((base = base->tracer))
|
||||||
{
|
{
|
||||||
for (seg = base, dist = 172*FRACUNIT, s = 9; seg; seg = seg->hnext, dist += 124*FRACUNIT, --s)
|
for (seg = base, dist = 172*FRACUNIT, s = 9; seg; seg = seg->hnext, dist += 124*FRACUNIT, --s)
|
||||||
|
@ -4450,7 +4450,7 @@ static void P_Boss4PinchSpikeballs(mobj_t *mobj, angle_t angle, fixed_t fz)
|
||||||
{
|
{
|
||||||
INT32 s;
|
INT32 s;
|
||||||
mobj_t *base = mobj, *seg;
|
mobj_t *base = mobj, *seg;
|
||||||
fixed_t dist, bz = (mobj->spawnpoint->z+16)<<FRACBITS;
|
fixed_t dist, bz = mobj->watertop+(16<<FRACBITS);
|
||||||
while ((base = base->tracer))
|
while ((base = base->tracer))
|
||||||
{
|
{
|
||||||
for (seg = base, dist = 112*FRACUNIT, s = 9; seg; seg = seg->hnext, dist += 132*FRACUNIT, --s)
|
for (seg = base, dist = 112*FRACUNIT, s = 9; seg; seg = seg->hnext, dist += 132*FRACUNIT, --s)
|
||||||
|
@ -4566,7 +4566,7 @@ static void P_Boss4Thinker(mobj_t *mobj)
|
||||||
INT32 i, arm;
|
INT32 i, arm;
|
||||||
mobj_t *seg, *base = mobj;
|
mobj_t *seg, *base = mobj;
|
||||||
// First frame init, spawn all the things.
|
// First frame init, spawn all the things.
|
||||||
mobj->spawnpoint->z = mobj->z>>FRACBITS;
|
mobj->watertop = mobj->z;
|
||||||
z = mobj->z + mobj->height/2 - mobjinfo[MT_EGGMOBILE4_MACE].height/2;
|
z = mobj->z + mobj->height/2 - mobjinfo[MT_EGGMOBILE4_MACE].height/2;
|
||||||
for (arm = 0; arm <3 ; arm++)
|
for (arm = 0; arm <3 ; arm++)
|
||||||
{
|
{
|
||||||
|
@ -4622,7 +4622,7 @@ static void P_Boss4Thinker(mobj_t *mobj)
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
fixed_t z;
|
fixed_t z;
|
||||||
if (mobj->z < (mobj->spawnpoint->z+512)<<FRACBITS)
|
if (mobj->z < mobj->watertop+(512<<FRACBITS))
|
||||||
mobj->momz = 8*FRACUNIT;
|
mobj->momz = 8*FRACUNIT;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -4631,7 +4631,7 @@ static void P_Boss4Thinker(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
mobj->movecount += 400<<(FRACBITS>>1);
|
mobj->movecount += 400<<(FRACBITS>>1);
|
||||||
mobj->movecount %= 360*FRACUNIT;
|
mobj->movecount %= 360*FRACUNIT;
|
||||||
z = mobj->z - (mobj->spawnpoint->z<<FRACBITS) - mobjinfo[MT_EGGMOBILE4_MACE].height - mobj->height/2;
|
z = mobj->z - mobj->watertop - mobjinfo[MT_EGGMOBILE4_MACE].height - mobj->height/2;
|
||||||
if (z < 0) // We haven't risen high enough to pull the spikeballs along yet
|
if (z < 0) // We haven't risen high enough to pull the spikeballs along yet
|
||||||
P_Boss4MoveSpikeballs(mobj, FixedAngle(mobj->movecount), 0); // So don't pull the spikeballs along yet.
|
P_Boss4MoveSpikeballs(mobj, FixedAngle(mobj->movecount), 0); // So don't pull the spikeballs along yet.
|
||||||
else
|
else
|
||||||
|
@ -4641,13 +4641,13 @@ static void P_Boss4Thinker(mobj_t *mobj)
|
||||||
// Pinch phase!
|
// Pinch phase!
|
||||||
case 4:
|
case 4:
|
||||||
{
|
{
|
||||||
if (mobj->z < (mobj->spawnpoint->z+512+128*(mobj->info->damage-mobj->health))<<FRACBITS)
|
if (mobj->z < (mobj->watertop + ((512+128*(mobj->info->damage-mobj->health))<<FRACBITS)))
|
||||||
mobj->momz = 8*FRACUNIT;
|
mobj->momz = 8*FRACUNIT;
|
||||||
else
|
else
|
||||||
mobj->momz = 0;
|
mobj->momz = 0;
|
||||||
mobj->movecount += (800+800*(mobj->info->damage-mobj->health))<<(FRACBITS>>1);
|
mobj->movecount += (800+800*(mobj->info->damage-mobj->health))<<(FRACBITS>>1);
|
||||||
mobj->movecount %= 360*FRACUNIT;
|
mobj->movecount %= 360*FRACUNIT;
|
||||||
P_Boss4PinchSpikeballs(mobj, FixedAngle(mobj->movecount), mobj->z - (mobj->spawnpoint->z<<FRACBITS) - mobjinfo[MT_EGGMOBILE4_MACE].height - mobj->height/2);
|
P_Boss4PinchSpikeballs(mobj, FixedAngle(mobj->movecount), mobj->z - mobj->watertop - mobjinfo[MT_EGGMOBILE4_MACE].height - mobj->height/2);
|
||||||
|
|
||||||
if (!mobj->target || !mobj->target->health)
|
if (!mobj->target || !mobj->target->health)
|
||||||
P_SupermanLook4Players(mobj);
|
P_SupermanLook4Players(mobj);
|
||||||
|
|
|
@ -460,6 +460,7 @@ static void P_NetUnArchivePlayers(void)
|
||||||
#define SD_TAG 0x10
|
#define SD_TAG 0x10
|
||||||
#define SD_FLOORANG 0x20
|
#define SD_FLOORANG 0x20
|
||||||
#define SD_CEILANG 0x40
|
#define SD_CEILANG 0x40
|
||||||
|
#define SD_TAGLIST 0x80
|
||||||
|
|
||||||
#define LD_FLAG 0x01
|
#define LD_FLAG 0x01
|
||||||
#define LD_SPECIAL 0x02
|
#define LD_SPECIAL 0x02
|
||||||
|
@ -534,6 +535,8 @@ static void P_NetArchiveWorld(void)
|
||||||
|
|
||||||
if (ss->tag != SHORT(ms->tag))
|
if (ss->tag != SHORT(ms->tag))
|
||||||
diff2 |= SD_TAG;
|
diff2 |= SD_TAG;
|
||||||
|
if (ss->nexttag != ss->spawn_nexttag || ss->firsttag != ss->spawn_firsttag)
|
||||||
|
diff2 |= SD_TAGLIST;
|
||||||
|
|
||||||
// Check if any of the sector's FOFs differ from how they spawned
|
// Check if any of the sector's FOFs differ from how they spawned
|
||||||
if (ss->ffloors)
|
if (ss->ffloors)
|
||||||
|
@ -581,16 +584,17 @@ static void P_NetArchiveWorld(void)
|
||||||
WRITEFIXED(put, ss->ceiling_xoffs);
|
WRITEFIXED(put, ss->ceiling_xoffs);
|
||||||
if (diff2 & SD_CYOFFS)
|
if (diff2 & SD_CYOFFS)
|
||||||
WRITEFIXED(put, ss->ceiling_yoffs);
|
WRITEFIXED(put, ss->ceiling_yoffs);
|
||||||
if (diff2 & SD_TAG)
|
if (diff2 & SD_TAG) // save only the tag
|
||||||
{
|
|
||||||
WRITEINT16(put, ss->tag);
|
WRITEINT16(put, ss->tag);
|
||||||
WRITEINT32(put, ss->firsttag);
|
|
||||||
WRITEINT32(put, ss->nexttag);
|
|
||||||
}
|
|
||||||
if (diff2 & SD_FLOORANG)
|
if (diff2 & SD_FLOORANG)
|
||||||
WRITEANGLE(put, ss->floorpic_angle);
|
WRITEANGLE(put, ss->floorpic_angle);
|
||||||
if (diff2 & SD_CEILANG)
|
if (diff2 & SD_CEILANG)
|
||||||
WRITEANGLE(put, ss->ceilingpic_angle);
|
WRITEANGLE(put, ss->ceilingpic_angle);
|
||||||
|
if (diff2 & SD_TAGLIST) // save both firsttag and nexttag
|
||||||
|
{ // either of these could be changed even if tag isn't
|
||||||
|
WRITEINT32(put, ss->firsttag);
|
||||||
|
WRITEINT32(put, ss->nexttag);
|
||||||
|
}
|
||||||
|
|
||||||
// Special case: save the stats of all modified ffloors along with their ffloor "number"s
|
// Special case: save the stats of all modified ffloors along with their ffloor "number"s
|
||||||
// we don't bother with ffloors that haven't changed, that would just add to savegame even more than is really needed
|
// we don't bother with ffloors that haven't changed, that would just add to savegame even more than is really needed
|
||||||
|
@ -773,12 +777,11 @@ static void P_NetUnArchiveWorld(void)
|
||||||
if (diff2 & SD_CYOFFS)
|
if (diff2 & SD_CYOFFS)
|
||||||
sectors[i].ceiling_yoffs = READFIXED(get);
|
sectors[i].ceiling_yoffs = READFIXED(get);
|
||||||
if (diff2 & SD_TAG)
|
if (diff2 & SD_TAG)
|
||||||
|
sectors[i].tag = READINT16(get); // DON'T use P_ChangeSectorTag
|
||||||
|
if (diff2 & SD_TAGLIST)
|
||||||
{
|
{
|
||||||
INT16 tag;
|
|
||||||
tag = READINT16(get);
|
|
||||||
sectors[i].firsttag = READINT32(get);
|
sectors[i].firsttag = READINT32(get);
|
||||||
sectors[i].nexttag = READINT32(get);
|
sectors[i].nexttag = READINT32(get);
|
||||||
P_ChangeSectorTag(i, tag);
|
|
||||||
}
|
}
|
||||||
if (diff2 & SD_FLOORANG)
|
if (diff2 & SD_FLOORANG)
|
||||||
sectors[i].floorpic_angle = READANGLE(get);
|
sectors[i].floorpic_angle = READANGLE(get);
|
||||||
|
@ -2606,6 +2609,7 @@ static void P_NetUnArchiveThinkers(void)
|
||||||
thinker_t *next;
|
thinker_t *next;
|
||||||
UINT8 tclass;
|
UINT8 tclass;
|
||||||
UINT8 restoreNum = false;
|
UINT8 restoreNum = false;
|
||||||
|
UINT32 i;
|
||||||
|
|
||||||
if (READUINT32(save_p) != ARCHIVEBLOCK_THINKERS)
|
if (READUINT32(save_p) != ARCHIVEBLOCK_THINKERS)
|
||||||
I_Error("Bad $$$.sav at archive block Thinkers");
|
I_Error("Bad $$$.sav at archive block Thinkers");
|
||||||
|
@ -2626,6 +2630,12 @@ static void P_NetUnArchiveThinkers(void)
|
||||||
iquetail = iquehead = 0;
|
iquetail = iquehead = 0;
|
||||||
P_InitThinkers();
|
P_InitThinkers();
|
||||||
|
|
||||||
|
// clear sector thinker pointers so they don't point to non-existant thinkers for all of eternity
|
||||||
|
for (i = 0; i < numsectors; i++)
|
||||||
|
{
|
||||||
|
sectors[i].floordata = sectors[i].ceilingdata = sectors[i].lightingdata = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// read in saved thinkers
|
// read in saved thinkers
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
|
|
@ -677,6 +677,7 @@ static void P_LoadSectors(lumpnum_t lumpnum)
|
||||||
ss->special = SHORT(ms->special);
|
ss->special = SHORT(ms->special);
|
||||||
ss->tag = SHORT(ms->tag);
|
ss->tag = SHORT(ms->tag);
|
||||||
ss->nexttag = ss->firsttag = -1;
|
ss->nexttag = ss->firsttag = -1;
|
||||||
|
ss->spawn_nexttag = ss->spawn_firsttag = -1;
|
||||||
|
|
||||||
memset(&ss->soundorg, 0, sizeof(ss->soundorg));
|
memset(&ss->soundorg, 0, sizeof(ss->soundorg));
|
||||||
ss->validcount = 0;
|
ss->validcount = 0;
|
||||||
|
|
|
@ -1519,6 +1519,8 @@ static inline void P_InitTagLists(void)
|
||||||
size_t j = (unsigned)sectors[i].tag % numsectors;
|
size_t j = (unsigned)sectors[i].tag % numsectors;
|
||||||
sectors[i].nexttag = sectors[j].firsttag;
|
sectors[i].nexttag = sectors[j].firsttag;
|
||||||
sectors[j].firsttag = (INT32)i;
|
sectors[j].firsttag = (INT32)i;
|
||||||
|
sectors[i].spawn_nexttag = sectors[i].nexttag;
|
||||||
|
sectors[j].spawn_firsttag = sectors[j].firsttag;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = numlines - 1; i != (size_t)-1; i--)
|
for (i = numlines - 1; i != (size_t)-1; i--)
|
||||||
|
@ -5342,6 +5344,10 @@ void T_LaserFlash(laserthink_t *flash)
|
||||||
&& thing->flags & MF_BOSS)
|
&& thing->flags & MF_BOSS)
|
||||||
continue; // Don't hurt bosses
|
continue; // Don't hurt bosses
|
||||||
|
|
||||||
|
// Don't endlessly kill egg guard shields (or anything else for that matter)
|
||||||
|
if (thing->health <= 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
top = P_GetSpecialTopZ(thing, sourcesec, sector);
|
top = P_GetSpecialTopZ(thing, sourcesec, sector);
|
||||||
bottom = P_GetSpecialBottomZ(thing, sourcesec, sector);
|
bottom = P_GetSpecialBottomZ(thing, sourcesec, sector);
|
||||||
|
|
||||||
|
|
|
@ -384,6 +384,7 @@ typedef struct sector_s
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// these are saved for netgames, so do not let Lua touch these!
|
// these are saved for netgames, so do not let Lua touch these!
|
||||||
|
INT32 spawn_nexttag, spawn_firsttag; // the actual nexttag/firsttag values may differ if the sector's tag was changed
|
||||||
|
|
||||||
// offsets sector spawned with (via linedef type 7)
|
// offsets sector spawned with (via linedef type 7)
|
||||||
fixed_t spawn_flr_xoffs, spawn_flr_yoffs;
|
fixed_t spawn_flr_xoffs, spawn_flr_yoffs;
|
||||||
|
|
|
@ -20,7 +20,9 @@
|
||||||
|
|
||||||
|
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
|
#ifndef HAVE_SDL
|
||||||
#include "win_main.h"
|
#include "win_main.h"
|
||||||
|
#endif
|
||||||
#include "../doomdef.h" //just for VERSION
|
#include "../doomdef.h" //just for VERSION
|
||||||
#include "win_dbg.h"
|
#include "win_dbg.h"
|
||||||
#include "../m_argv.h" //print the parameter in the log
|
#include "../m_argv.h" //print the parameter in the log
|
||||||
|
|
Loading…
Reference in a new issue