From 07c02f075b85d8414ba4adedda1fef84b59e7d8f Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Thu, 17 Oct 2019 18:22:06 +0100 Subject: [PATCH 1/2] Fix sprite-related console errors that occur in netgames whenever the game attempts to synch the player's state. Turns out the code was using P_SetMobjStateNF to "fix" the player's state ...which got things all wrong, lol. --- src/d_clisrv.c | 15 ++++++++++++++- src/d_clisrv.h | 4 ++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 3234bc756..e70bafbce 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -621,6 +621,10 @@ static inline void resynch_write_player(resynch_pak *rsp, const size_t i) rsp->friction = LONG(players[i].mo->friction); rsp->movefactor = LONG(players[i].mo->movefactor); + rsp->sprite = (spritenum_t)LONG(players[i].mo->sprite); + rsp->frame = LONG(players[i].mo->frame); + rsp->sprite2 = players[i].mo->sprite2; + rsp->anim_duration = SHORT(players[i].mo->anim_duration); rsp->tics = LONG(players[i].mo->tics); rsp->statenum = (statenum_t)LONG(players[i].mo->state-states); // :( rsp->eflags = (UINT16)SHORT(players[i].mo->eflags); @@ -767,8 +771,17 @@ static void resynch_read_player(resynch_pak *rsp) players[i].mo->momy = LONG(rsp->momy); players[i].mo->momz = LONG(rsp->momz); players[i].mo->movefactor = LONG(rsp->movefactor); + + // Don't use P_SetMobjStateNF to restore state, write/read all the values manually! + // This should stop those stupid console errors, hopefully. + // -- Monster Iestyn + players[i].mo->sprite = (spritenum_t)LONG(rsp->sprite); + players[i].mo->frame = LONG(rsp->frame); + players[i].mo->sprite2 = rsp->sprite2; + players[i].mo->anim_duration = SHORT(rsp->anim_duration); players[i].mo->tics = LONG(rsp->tics); - P_SetMobjStateNF(players[i].mo, LONG(rsp->statenum)); + players[i].mo->state = states[LONG(rsp->statenum)]; + players[i].mo->x = LONG(rsp->x); players[i].mo->y = LONG(rsp->y); players[i].mo->z = LONG(rsp->z); diff --git a/src/d_clisrv.h b/src/d_clisrv.h index d09d2aa48..52ca1701d 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -265,6 +265,10 @@ typedef struct fixed_t friction; fixed_t movefactor; + spritenum_t sprite; + UINT32 frame; + UINT8 sprite2; + UINT16 anim_duration; INT32 tics; statenum_t statenum; UINT32 flags; From 246a6489e9338684e099cd6cee7a27063c1cdc11 Mon Sep 17 00:00:00 2001 From: Monster Iestyn Date: Fri, 18 Oct 2019 13:37:42 +0100 Subject: [PATCH 2/2] Fix missing & which I totally forgot about in writing this fix (yes this is the "compile error" everyone was talking about) --- src/d_clisrv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index e70bafbce..a4416b1dc 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -780,7 +780,7 @@ static void resynch_read_player(resynch_pak *rsp) players[i].mo->sprite2 = rsp->sprite2; players[i].mo->anim_duration = SHORT(rsp->anim_duration); players[i].mo->tics = LONG(rsp->tics); - players[i].mo->state = states[LONG(rsp->statenum)]; + players[i].mo->state = &states[LONG(rsp->statenum)]; players[i].mo->x = LONG(rsp->x); players[i].mo->y = LONG(rsp->y);