ref: 993520eecddbdddddb1a562646c755e1efd0fa29
parent: dea38802d1509f806fafb7d537a413dd520ffc9c
author: Samuel Villareal <svkaiser@gmail.com>
date: Fri Sep 10 23:16:03 EDT 2010
+ P_RemoveInventoryItem and P_DropInventoryItem implemented + Some inventory keys supported Subversion-branch: /branches/strife-branch Subversion-revision: 2060
--- a/src/strife/g_game.c
+++ b/src/strife/g_game.c
@@ -439,12 +439,38 @@
cmd->consistancy =
consistancy[consoleplayer][maketic%BACKUPTICS];
- // villsa [STRIFE]
+ // villsa [STRIFE] look up key
if(gamekeydown[key_lookup])
cmd->buttons2 |= BT2_LOOKUP;
- if (gamekeydown[key_lookdown])
+
+ // villsa [STRIFE] look down key
+ if(gamekeydown[key_lookdown])
cmd->buttons2 |= BT2_LOOKDOWN;
- if (gamekeydown[key_usehealth])
+
+ // villsa [STRIFE] inventory use key
+ if(gamekeydown[key_invuse])
+ {
+ player_t* player = &players[consoleplayer];
+ if(player->numinventory > 0)
+ {
+ cmd->buttons2 |= BT2_INVUSE;
+ cmd->inventory = player->inventory[player->inventorycursor].sprite;
+ }
+ }
+
+ // villsa [STRIFE] inventory drop key
+ if(gamekeydown[key_invdrop])
+ {
+ player_t* player = &players[consoleplayer];
+ if(player->numinventory > 0)
+ {
+ cmd->buttons2 |= BT2_INVDROP;
+ cmd->inventory = player->inventory[player->inventorycursor].sprite;
+ }
+ }
+
+ // villsa [STRIFE] use medkit
+ if(gamekeydown[key_usehealth])
cmd->buttons2 |= BT2_HEALTH;
@@ -1210,6 +1236,13 @@
for (i=0 ; i<NUMAMMO ; i++)
p->maxammo[i] = maxammo[i];
+
+ // villsa [STRIFE] TODO - verify
+ for(i = 0; i < 32; i++)
+ {
+ p->inventory[i].sprite = -1;
+ p->inventory[i].type = NUMMOBJTYPES;
+ }
}
--- a/src/strife/p_user.c
+++ b/src/strife/p_user.c
@@ -40,12 +40,14 @@
// Index of the special effects (INVUL inverse) map.
#define INVERSECOLORMAP 32
-#define LOOKPITCHAMOUNT 6 // villsa [STRIFE]
+#define LOOKPITCHAMOUNT 6 // villsa [STRIFE]
#define CENTERVIEWAMOUNT (LOOKPITCHAMOUNT + 2) // villsa [STRIFE]
-#define LOOKUPMAX 90 // villsa [STRIFE]
-#define LOOKDOWNMAX -110 // villsa [STRIFE]
+#define LOOKUPMAX 90 // villsa [STRIFE]
+#define LOOKDOWNMAX -110 // villsa [STRIFE]
+void P_DropInventoryItem(player_t* player, int sprite); // villsa [STRIFE]
+
//
// Movement.
//
@@ -309,6 +311,7 @@
weapontype_t newweapon;
// fixme: do this in the cheat code
+ // villsa [STRIFE] TODO - verify if unused
if (player->cheats & CF_NOCLIP)
player->mo->flags |= MF_NOCLIP;
else
@@ -343,6 +346,42 @@
if (player->mo->subsector->sector->special)
P_PlayerInSpecialSector (player);
+
+ // villsa [STRIFE] handle inventory input
+ if(!player->inventorydown)
+ {
+ if(cmd->buttons2 & BT2_HEALTH)
+ P_UseInventoryItem(player, SPR_FULL);
+ else if(cmd->buttons2 & BT2_INVUSE)
+ P_UseInventoryItem(player, cmd->inventory);
+ else if(cmd->buttons2 & BT2_INVDROP)
+ P_DropInventoryItem(player, cmd->inventory);
+ else
+ {
+ // villsa [STRIFE] TODO - add workparm variable
+ /*if(workparm)
+ {
+ int cheat = player->cheats ^ 1;
+ player->cheats ^= CF_NOCLIP;
+
+ if(cheat & CF_NOCLIP)
+ {
+ player->message = "No Clipping Mode ON";
+ player->mo->flags |= MF_NOCLIP;
+ }
+ else
+ {
+ player->mo->flags &= ~MF_NOCLIP;
+ player->message = "No Clipping Mode OFF";
+ }
+ }*/
+
+ }
+
+ player->inventorydown = true;
+ }
+ else
+ player->inventorydown = false;
// Check for weapon change.
@@ -487,3 +526,140 @@
}
+//
+// P_RemoveInventoryItem
+// villsa [STRIFE] new function
+//
+char* P_RemoveInventoryItem(player_t *player, int slot, int amount)
+{
+ player->inventory[slot].amount -= amount;
+ player->st_update = true;
+
+ if(!player->inventory[slot].amount)
+ {
+ // shift everything above it down
+ // see P_TakeDialogItem for notes on possible bugs
+ int j;
+
+ for(j = slot + 1; j <= player->numinventory; j++)
+ {
+ inventory_t *item1 = &(player->inventory[j - 1]);
+ inventory_t *item2 = &(player->inventory[j]);
+
+ *item1 = *item2;
+ }
+
+ player->inventory[player->numinventory].type = NUMMOBJTYPES;
+ player->inventory[player->numinventory].sprite = -1;
+ player->numinventory--;
+
+ // update cursor position
+ if(player->inventorycursor >= player->numinventory)
+ {
+ if(player->inventorycursor)
+ player->inventorycursor--;
+ }
+ }
+
+ return mobjinfo[player->inventory[slot].type].name;
+}
+
+//
+// P_DropInventoryItem
+// villsa [STRIFE] new function
+//
+void P_DropInventoryItem(player_t* player, int sprite)
+{
+ int invslot;
+ inventory_t *item;
+ mobjtype_t type;
+ int amount;
+
+ invslot = 0;
+ amount = 1;
+
+ while(invslot < player->numinventory && sprite != player->inventory[invslot].sprite)
+ invslot++;
+
+ item = &(player->inventory[invslot]);
+ type = item->type;
+
+ if(item->amount)
+ {
+ angle_t angle;
+ fixed_t dist;
+ mobj_t* mo;
+ mobj_t* mobjitem;
+ fixed_t x;
+ fixed_t y;
+ fixed_t z;
+ int r;
+
+ if(item->type == MT_MONY_1)
+ {
+ if(item->amount >= 50)
+ {
+ type = MT_MONY_50;
+ amount = 50;
+ }
+ else if(item->amount >= 25)
+ {
+ type = MT_MONY_25;
+ amount = 25;
+ }
+ else if(item->amount >= 10)
+ {
+ type = MT_MONY_10;
+ amount = 10;
+ }
+ }
+
+ if(type >= NUMMOBJTYPES)
+ return;
+
+ angle = player->mo->angle;
+ r = P_Random();
+ angle = (angle + ((r - P_Random()) << 18)) >> ANGLETOFINESHIFT;
+
+ if(angle < 7618 && angle >= 6718)
+ angle = 7618;
+
+ else if(angle < 5570 && angle >= 4670)
+ angle = 5570;
+
+ else if(angle < 3522 && angle >= 2622)
+ angle = 3522;
+
+ else if(angle < 1474 && angle >= 574)
+ angle = 1474;
+
+ mo = player->mo;
+ dist = mobjinfo[type].radius + mo->info->radius + (4*FRACUNIT);
+
+ x = mo->x + FixedMul(finecosine[angle], dist);
+ y = mo->y + FixedMul(finesine[angle], dist);
+ z = mo->z + (10*FRACUNIT);
+ mobjitem = P_SpawnMobj(x, y, z, type);
+ mobjitem->flags |= (MF_SPECIAL|MF_DROPPED);
+
+ if(P_CheckPosition(mobjitem, x, y))
+ {
+ mobjitem->angle = (angle << ANGLETOFINESHIFT);
+ mobjitem->momx = FixedMul(finecosine[angle], (5*FRACUNIT)) + mo->momx;
+ mobjitem->momy = FixedMul(finesine[angle], (5*FRACUNIT)) + mo->momy;
+ mobjitem->momz = FRACUNIT;
+
+ P_RemoveInventoryItem(player, invslot, amount);
+ }
+ else
+ P_RemoveMobj(mobjitem);
+ }
+}
+
+//
+// P_UseInventoryItem
+// villsa [STRIFE] new function
+//
+boolean P_UseInventoryItem(player_t* player, int item)
+{
+}
\ No newline at end of file