Skip to content

Commit

Permalink
Updated jHeretic and jHexen to use per-player inventory cursor vars (…
Browse files Browse the repository at this point in the history
…added to player_t). Done in preparation for multiple local player support.
  • Loading branch information
danij committed Sep 30, 2006
1 parent 7b10e4e commit f794849
Show file tree
Hide file tree
Showing 13 changed files with 210 additions and 202 deletions.
3 changes: 2 additions & 1 deletion doomsday/plugins/common/include/p_inventory.h
Expand Up @@ -54,10 +54,11 @@

extern boolean artiskip;
extern boolean usearti;
extern int inv_ptr;

boolean P_GiveArtifact(player_t *player, artitype_e arti, mobj_t *mo);

void P_InventoryResetCursor(player_t *player);

void P_InventoryRemoveArtifact(player_t *player, int slot);
boolean P_InventoryUseArtifact(player_t *player, artitype_e arti);
void P_InventoryNextArtifact(player_t *player);
Expand Down
12 changes: 5 additions & 7 deletions doomsday/plugins/common/src/g_controls.c
Expand Up @@ -610,7 +610,7 @@ static void G_UpdateCmdControls(ticcmd_t *cmd, float elapsedTime)
{
if(actions[A_SPEED].on && artiskip)
{
if(players[consoleplayer].inventory[inv_ptr].type != arti_none)
if(cplr->inventory[cplr->inv_ptr].type != arti_none)
{
actions[A_USEARTIFACT].on = false;

Expand All @@ -621,22 +621,20 @@ static void G_UpdateCmdControls(ticcmd_t *cmd, float elapsedTime)
{
if(ST_IsInventoryVisible())
{
players[consoleplayer].readyArtifact =
players[consoleplayer].inventory[inv_ptr].type;
cplr->readyArtifact = cplr->inventory[cplr->inv_ptr].type;

ST_Inventory(false); // close the inventory

if(cfg.chooseAndUse)
cmd->arti =
players[consoleplayer].inventory[inv_ptr].type;
cmd->arti = cplr->inventory[cplr->inv_ptr].type;
else
cmd->arti = 0;

usearti = false;
}
else if(usearti)
{
cmd->arti = players[consoleplayer].inventory[inv_ptr].type;
cmd->arti = cplr->inventory[cplr->inv_ptr].type;
usearti = false;
}
}
Expand Down Expand Up @@ -870,7 +868,7 @@ static void G_UpdateCmdControls(ticcmd_t *cmd, float elapsedTime)
else if(mousex)
{
// Mouse angle changes are immediate.
if(!pausestate && players[consoleplayer].plr->mo &&
if(!pausestate && players[consoleplayer].plr->mo &&
players[consoleplayer].playerstate != PST_DEAD)
{
players[consoleplayer].plr->mo->angle += FLT2FIX(mousex * -8); //G_AdjustAngle(cplr, mousex * -8, 1);
Expand Down
5 changes: 2 additions & 3 deletions doomsday/plugins/common/src/g_game.c
Expand Up @@ -633,7 +633,7 @@ boolean G_Responder(event_t *ev)
{ // flag to denote that it's okay to use an artifact
if(!ST_IsInventoryVisible())
{
plr->readyArtifact = plr->inventory[inv_ptr].type;
plr->readyArtifact = plr->inventory[plr->inv_ptr].type;
}
usearti = true;
}
Expand Down Expand Up @@ -1157,13 +1157,12 @@ void G_PlayerReborn(int player)
#endif

#if !__JDOOM__
P_InventoryResetCursor(p);
if(p == &players[consoleplayer])
{
# if __JHEXEN__ || __JSTRIFE__
SB_state = -1; // refresh the status bar
# endif
inv_ptr = 0; // reset the inventory pointer
curpos = 0;
}
#endif

Expand Down
143 changes: 83 additions & 60 deletions doomsday/plugins/common/src/p_inventory.c
Expand Up @@ -76,7 +76,6 @@ boolean P_UsePuzzleItem(player_t *player, int itemType);

// PUBLIC DATA DEFINITIONS -------------------------------------------------

int inv_ptr;
boolean usearti = true;

// PRIVATE DATA DEFINITIONS ------------------------------------------------
Expand Down Expand Up @@ -150,13 +149,13 @@ boolean P_GiveArtifact(player_t *player, artitype_e arti, mobj_t *mo)
player->readyArtifact = arti;
}
#if __JHEXEN__
else if(player == &players[consoleplayer] && slidePointer && i <= inv_ptr)
else if(slidePointer && i <= player->inv_ptr)
{
inv_ptr++;
curpos++;
if(curpos > 6)
player->inv_ptr++;
player->curpos++;
if(player->curpos > 6)
{
curpos = 6;
player->curpos = 6;
}
}
#else
Expand All @@ -174,30 +173,30 @@ boolean P_GiveArtifact(player_t *player, artitype_e arti, mobj_t *mo)
# if __JHERETIC__
void P_InventoryCheckReadyArtifact(player_t *player)
{
if(!player || player != &players[consoleplayer])
if(!player)
return;

if(!player->inventory[inv_ptr].count)
if(!player->inventory[player->inv_ptr].count)
{
// Set position markers and get next readyArtifact
inv_ptr--;
if(inv_ptr < 6)
player->inv_ptr--;
if(player->inv_ptr < 6)
{
curpos--;
if(curpos < 0)
player->curpos--;
if(player->curpos < 0)
{
curpos = 0;
player->curpos = 0;
}
}
if(inv_ptr >= player->inventorySlotNum)
if(player->inv_ptr >= player->inventorySlotNum)
{
inv_ptr = player->inventorySlotNum - 1;
player->inv_ptr = player->inventorySlotNum - 1;
}
if(inv_ptr < 0)
if(player->inv_ptr < 0)
{
inv_ptr = 0;
player->inv_ptr = 0;
}
player->readyArtifact = player->inventory[inv_ptr].type;
player->readyArtifact = player->inventory[player->inv_ptr].type;

if(!player->inventorySlotNum)
player->readyArtifact = arti_none;
Expand All @@ -207,31 +206,31 @@ void P_InventoryCheckReadyArtifact(player_t *player)

void P_InventoryNextArtifact(player_t *player)
{
if(!player || player != &players[consoleplayer])
if(!player)
return;

inv_ptr--;
if(inv_ptr < 6)
player->inv_ptr--;
if(player->inv_ptr < 6)
{
curpos--;
if(curpos < 0)
player->curpos--;
if(player->curpos < 0)
{
curpos = 0;
player->curpos = 0;
}
}
if(inv_ptr < 0)
if(player->inv_ptr < 0)
{
inv_ptr = player->inventorySlotNum - 1;
if(inv_ptr < 6)
player->inv_ptr = player->inventorySlotNum - 1;
if(player->inv_ptr < 6)
{
curpos = inv_ptr;
player->curpos = player->inv_ptr;
}
else
{
curpos = 6;
player->curpos = 6;
}
}
player->readyArtifact = player->inventory[inv_ptr].type;
player->readyArtifact = player->inventory[player->inv_ptr].type;
}

void P_InventoryRemoveArtifact(player_t *player, int slot)
Expand All @@ -257,24 +256,22 @@ void P_InventoryRemoveArtifact(player_t *player, int slot)

player->inventorySlotNum--;

if(player == &players[consoleplayer])
{ // Set position markers and get next readyArtifact
inv_ptr--;
if(inv_ptr < 6)
{
curpos--;
if(curpos < 0)
curpos = 0;
}
// Set position markers and get next readyArtifact
player->inv_ptr--;
if(player->inv_ptr < 6)
{
player->curpos--;
if(player->curpos < 0)
player->curpos = 0;
}

if(inv_ptr >= player->inventorySlotNum)
inv_ptr = player->inventorySlotNum - 1;
if(player->inv_ptr >= player->inventorySlotNum)
player->inv_ptr = player->inventorySlotNum - 1;

if(inv_ptr < 0)
inv_ptr = 0;
if(player->inv_ptr < 0)
player->inv_ptr = 0;

player->readyArtifact = player->inventory[inv_ptr].type;
}
player->readyArtifact = player->inventory[player->inv_ptr].type;
}
}

Expand Down Expand Up @@ -332,6 +329,15 @@ boolean P_InventoryUseArtifact(player_t *player, artitype_e arti)
return success;
}

void P_InventoryResetCursor(player_t *player)
{
if(!player)
return;

player->inv_ptr = 0;
player->curpos = 0;
}

/*
* Returns true if the artifact was used.
*/
Expand Down Expand Up @@ -607,35 +613,35 @@ static boolean P_InventoryMove(player_t *plr, int dir)

if(dir == 0)
{
inv_ptr--;
if(inv_ptr < 0)
plr->inv_ptr--;
if(plr->inv_ptr < 0)
{
inv_ptr = 0;
plr->inv_ptr = 0;
}
else
{
curpos--;
if(curpos < 0)
plr->curpos--;
if(plr->curpos < 0)
{
curpos = 0;
plr->curpos = 0;
}
}
}
else
{
inv_ptr++;
if(inv_ptr >= plr->inventorySlotNum)
plr->inv_ptr++;
if(plr->inv_ptr >= plr->inventorySlotNum)
{
inv_ptr--;
if(inv_ptr < 0)
inv_ptr = 0;
plr->inv_ptr--;
if(plr->inv_ptr < 0)
plr->inv_ptr = 0;
}
else
{
curpos++;
if(curpos > 6)
plr->curpos++;
if(plr->curpos > 6)
{
curpos = 6;
plr->curpos = 6;
}
}
}
Expand All @@ -647,7 +653,24 @@ static boolean P_InventoryMove(player_t *plr, int dir)
*/
DEFCC(CCmdInventory)
{
P_InventoryMove(players + consoleplayer, !stricmp(argv[0], "invright"));
int player = consoleplayer;

if(argc > 2)
{
Con_Printf("Usage: %s (player)\n", argv[0]);
Con_Printf("If player is not specified, will default to consoleplayer.\n");
return true;
}

if(argc == 2)
player = strtol(argv[1], NULL, 0);

if(player < 0)
player = 0;
if(player > MAXPLAYERS -1)
player = MAXPLAYERS -1;

P_InventoryMove(&players[player], !stricmp(argv[0], "invright"));
return true;
}
#endif
4 changes: 2 additions & 2 deletions doomsday/plugins/common/src/p_user.c
Expand Up @@ -571,10 +571,10 @@ void P_RaiseDeadPlayer(player_t *player)
{
player->playerstate = PST_REBORN;
#if __JHERETIC__ || __JHEXEN__
P_InventoryResetCursor(player);

if(player == &players[consoleplayer])
{
inv_ptr = 0;
curpos = 0;
R_SetFilter(0);
}

Expand Down
4 changes: 3 additions & 1 deletion doomsday/plugins/jheretic/include/h_player.h
Expand Up @@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor,
* Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*
* In addition, as a special exception, we, the authors of deng
Expand Down Expand Up @@ -162,6 +162,8 @@ typedef struct player_s {
// DJS - Here follows Heretic specific player_t properties
//
inventory_t inventory[NUMINVENTORYSLOTS];
int inv_ptr;
int curpos;
artitype_e readyArtifact;
int artifactCount;
int inventorySlotNum;
Expand Down
2 changes: 0 additions & 2 deletions doomsday/plugins/jheretic/include/p_local.h
Expand Up @@ -288,8 +288,6 @@ void Draw_EndZoom(void);

// ***** ST_STUFF *****

extern int curpos;

void ST_Inventory(boolean show);
boolean ST_IsInventoryVisible(void);

Expand Down

0 comments on commit f794849

Please sign in to comment.