From d4fd168553d5ca8e31f5519442d11ce865ece22e Mon Sep 17 00:00:00 2001 From: skyjake Date: Tue, 19 Apr 2011 16:45:01 +0300 Subject: [PATCH] Fixed intermission in multiplayer Fire/Use-to-skip was not working. --- doomsday/plugins/common/src/d_netcl.c | 21 +++++++++++++++------ doomsday/plugins/common/src/d_netsv.c | 15 +++++++++++++++ doomsday/plugins/jdoom/include/wi_stuff.h | 5 +++++ doomsday/plugins/jdoom/src/wi_stuff.c | 19 +++++++++++++++++-- doomsday/plugins/jdoom64/include/wi_stuff.h | 5 +++++ doomsday/plugins/jdoom64/src/wi_stuff.c | 19 +++++++++++++++++-- doomsday/plugins/jheretic/include/in_lude.h | 2 +- doomsday/plugins/jheretic/src/in_lude.c | 19 +++++++++++++------ doomsday/plugins/jhexen/include/in_lude.h | 1 + doomsday/plugins/jhexen/src/in_lude.c | 15 +++++++++++++-- 10 files changed, 102 insertions(+), 19 deletions(-) diff --git a/doomsday/plugins/common/src/d_netcl.c b/doomsday/plugins/common/src/d_netcl.c index c1f123699c..33854ee3f9 100644 --- a/doomsday/plugins/common/src/d_netcl.c +++ b/doomsday/plugins/common/src/d_netcl.c @@ -968,13 +968,22 @@ void NetCl_PlayerActionRequest(player_t *player, int actionType, int actionParam *ptr++ = LONG(actionType); // Position of the action. - *ptr++ = LONG(FLT2FIX(player->plr->mo->pos[VX])); - *ptr++ = LONG(FLT2FIX(player->plr->mo->pos[VY])); - *ptr++ = LONG(FLT2FIX(player->plr->mo->pos[VZ])); + if(G_GetGameState() == GS_MAP) + { + *ptr++ = LONG(FLT2FIX(player->plr->mo->pos[VX])); + *ptr++ = LONG(FLT2FIX(player->plr->mo->pos[VY])); + *ptr++ = LONG(FLT2FIX(player->plr->mo->pos[VZ])); - // Which way is the player looking at? - *ptr++ = LONG(player->plr->mo->angle); - *ptr++ = LONG(FLT2FIX(player->plr->lookDir)); + // Which way is the player looking at? + *ptr++ = LONG(player->plr->mo->angle); + *ptr++ = LONG(FLT2FIX(player->plr->lookDir)); + } + else + { + // Not in a map, so can't provide position/direction. + int i; + for(i = 0; i < 5; ++i) *ptr++ = 0; + } // Currently active weapon. if(actionType == GPA_CHANGE_WEAPON) diff --git a/doomsday/plugins/common/src/d_netsv.c b/doomsday/plugins/common/src/d_netsv.c index f6b535c9e0..d46c3862f9 100644 --- a/doomsday/plugins/common/src/d_netsv.c +++ b/doomsday/plugins/common/src/d_netsv.c @@ -1410,6 +1410,21 @@ void NetSv_DoAction(int player, const char *data) angle, lookDir, readyWeapon); #endif + if(G_GetGameState() != GS_MAP) + { + if(G_GetGameState() == GS_INTERMISSION) + { + if(type == GPA_USE || type == GPA_FIRE) + { +#ifdef _DEBUG + Con_Message("NetSv_DoAction: Intermission accelerate.\n"); +#endif + IN_SkipToNext(); + } + } + return; + } + if(pl->playerState == PST_DEAD) { // This player is dead. Rise, my friend! diff --git a/doomsday/plugins/jdoom/include/wi_stuff.h b/doomsday/plugins/jdoom/include/wi_stuff.h index 64defd944e..84eb03371b 100644 --- a/doomsday/plugins/jdoom/include/wi_stuff.h +++ b/doomsday/plugins/jdoom/include/wi_stuff.h @@ -56,4 +56,9 @@ void WI_Ticker(void); // Draw the intermission screen. void WI_Drawer(void); +/** + * Skip to the next state in the intermission. + */ +void IN_SkipToNext(void); + #endif diff --git a/doomsday/plugins/jdoom/src/wi_stuff.c b/doomsday/plugins/jdoom/src/wi_stuff.c index 6ddd78d3aa..4826817327 100644 --- a/doomsday/plugins/jdoom/src/wi_stuff.c +++ b/doomsday/plugins/jdoom/src/wi_stuff.c @@ -304,6 +304,11 @@ static dpatch_t bp[MAXPLAYERS]; // "gray P[1..MAXPLAYERS]" // CODE -------------------------------------------------------------------- +void IN_SkipToNext(void) +{ + accelerateStage = 1; +} + void WI_slamBackground(void) { GL_DrawPatch(0, 0, bg.lump); @@ -1320,7 +1325,12 @@ void WI_checkForAccelerate(void) if(player->brain.attack) { if(!player->attackDown) - accelerateStage = 1; + { + if(IS_CLIENT) + NetCl_PlayerActionRequest(player, GPA_FIRE, 0); + else + IN_SkipToNext(); + } player->attackDown = true; } else @@ -1331,7 +1341,12 @@ void WI_checkForAccelerate(void) if(player->brain.use) { if(!player->useDown) - accelerateStage = 1; + { + if(IS_CLIENT) + NetCl_PlayerActionRequest(player, GPA_USE, 0); + else + IN_SkipToNext(); + } player->useDown = true; } else diff --git a/doomsday/plugins/jdoom64/include/wi_stuff.h b/doomsday/plugins/jdoom64/include/wi_stuff.h index 97bcd30599..7dc16b506f 100644 --- a/doomsday/plugins/jdoom64/include/wi_stuff.h +++ b/doomsday/plugins/jdoom64/include/wi_stuff.h @@ -81,4 +81,9 @@ void WI_Init(wbstartstruct_t *wbstartstruct); void WI_SetState(interludestate_t st); void WI_End(void); +/** + * Skip to the next state in the intermission. + */ +void IN_SkipToNext(void); + #endif diff --git a/doomsday/plugins/jdoom64/src/wi_stuff.c b/doomsday/plugins/jdoom64/src/wi_stuff.c index f8b7aecbc5..c1a930e702 100644 --- a/doomsday/plugins/jdoom64/src/wi_stuff.c +++ b/doomsday/plugins/jdoom64/src/wi_stuff.c @@ -973,7 +973,12 @@ void WI_checkForAccelerate(void) if(player->brain.attack) { if(!player->attackDown) - accelerateStage = 1; + { + if(IS_CLIENT) + NetCl_PlayerActionRequest(player, GPA_FIRE, 0); + else + IN_SkipToNext(); + } player->attackDown = true; } else @@ -982,7 +987,12 @@ void WI_checkForAccelerate(void) if(player->brain.use) { if(!player->useDown) - accelerateStage = 1; + { + if(IS_CLIENT) + NetCl_PlayerActionRequest(player, GPA_USE, 0); + else + IN_SkipToNext(); + } player->useDown = true; } else @@ -991,6 +1001,11 @@ void WI_checkForAccelerate(void) } } +void IN_SkipToNext(void) +{ + accelerateStage = 1; +} + /** * Updates stuff each tick. */ diff --git a/doomsday/plugins/jheretic/include/in_lude.h b/doomsday/plugins/jheretic/include/in_lude.h index 1bced40a80..3f7bf8f47f 100644 --- a/doomsday/plugins/jheretic/include/in_lude.h +++ b/doomsday/plugins/jheretic/include/in_lude.h @@ -39,7 +39,7 @@ extern int interState; extern int interTime; void IN_Init(wbstartstruct_t* wbstartstruct); - +void IN_SkipToNext(void); void IN_Stop(void); void IN_Ticker(void); diff --git a/doomsday/plugins/jheretic/src/in_lude.c b/doomsday/plugins/jheretic/src/in_lude.c index 7fdd681f43..7512136a90 100644 --- a/doomsday/plugins/jheretic/src/in_lude.c +++ b/doomsday/plugins/jheretic/src/in_lude.c @@ -474,6 +474,11 @@ void IN_Ticker(void) } } +void IN_SkipToNext(void) +{ + skipIntermission = 1; +} + /** * Check to see if any player hit a key. */ @@ -482,9 +487,6 @@ void IN_CheckForSkip(void) int i; player_t *player; - if(IS_CLIENT) - return; - for(i = 0, player = players; i < MAXPLAYERS; ++i, player++) { if(players->plr->inGame) @@ -493,9 +495,11 @@ void IN_CheckForSkip(void) { if(!player->attackDown) { - skipIntermission = 1; + if(IS_CLIENT) + NetCl_PlayerActionRequest(player, GPA_FIRE, 0); + else + IN_SkipToNext(); } - player->attackDown = true; } else @@ -507,7 +511,10 @@ void IN_CheckForSkip(void) { if(!player->useDown) { - skipIntermission = 1; + if(IS_CLIENT) + NetCl_PlayerActionRequest(player, GPA_USE, 0); + else + IN_SkipToNext(); } player->useDown = true; } diff --git a/doomsday/plugins/jhexen/include/in_lude.h b/doomsday/plugins/jhexen/include/in_lude.h index 19c5109c1f..e52c2d8b52 100644 --- a/doomsday/plugins/jhexen/include/in_lude.h +++ b/doomsday/plugins/jhexen/include/in_lude.h @@ -39,5 +39,6 @@ void IN_Init(void); void IN_Stop(void); void IN_Ticker(void); void IN_Drawer(void); +void IN_SkipToNext(void); #endif diff --git a/doomsday/plugins/jhexen/src/in_lude.c b/doomsday/plugins/jhexen/src/in_lude.c index f77b4f82f9..e5710b2fb4 100644 --- a/doomsday/plugins/jhexen/src/in_lude.c +++ b/doomsday/plugins/jhexen/src/in_lude.c @@ -290,6 +290,11 @@ void IN_Ticker(void) } } +void IN_SkipToNext(void) +{ + skipIntermission = 1; +} + /** * Check to see if any player hit a key. */ @@ -308,7 +313,10 @@ static void CheckForSkip(void) { if(!player->attackDown) { - skipIntermission = 1; + if(IS_CLIENT) + NetCl_PlayerActionRequest(player, GPA_FIRE, 0); + else + IN_SkipToNext(); } player->attackDown = true; } @@ -321,7 +329,10 @@ static void CheckForSkip(void) { if(!player->useDown) { - skipIntermission = 1; + if(IS_CLIENT) + NetCl_PlayerActionRequest(player, GPA_USE, 0); + else + IN_SkipToNext(); } player->useDown = true; }