Browse Source

Clean PM_DoGotHit & ArmorDur (#316)

* Clean PM_DoGotHit & ArmorDur

* Add DUR_INDESTRUCTIBLE define
pull/4/head
Anders Jenbo 8 years ago committed by Robin Eklind
parent
commit
3ebeb2366a
  1. 4
      Source/items.cpp
  2. 154
      Source/player.cpp
  3. 4
      defs.h

4
Source/items.cpp

@ -2379,7 +2379,7 @@ void __fastcall SaveItemPower(int i, int power, int param1, int param2, int minv
item[v36]._iDurability = item[v36]._iMaxDur;
break;
case IPL_INDESTRUCTIBLE:
v38 = 255;
v38 = DUR_INDESTRUCTIBLE;
goto LABEL_119;
case IPL_LIGHT:
v28 = param1;
@ -3011,7 +3011,7 @@ void __fastcall SpawnUnique(int uid, int x, int y)
void __fastcall ItemRndDur(int ii)
{
if ( item[ii]._iDurability && item[ii]._iDurability != 255 )
if ( item[ii]._iDurability && item[ii]._iDurability != DUR_INDESTRUCTIBLE )
item[ii]._iDurability = random(0, item[ii]._iMaxDur >> 1) + (item[ii]._iMaxDur >> 2) + 1;
}

154
Source/player.cpp

@ -2416,7 +2416,7 @@ BOOL __fastcall WeaponDur(int pnum, int durrnd)
}
if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype != ITYPE_NONE && plr[pnum].InvBody[INVLOC_HAND_LEFT]._iClass == ICLASS_WEAPON ) {
if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability == 255 ) {
if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability == DUR_INDESTRUCTIBLE ) {
return FALSE;
}
@ -2430,7 +2430,7 @@ BOOL __fastcall WeaponDur(int pnum, int durrnd)
}
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype != ITYPE_NONE && plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iClass == ICLASS_WEAPON ) {
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability == 255 ) {
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability == DUR_INDESTRUCTIBLE ) {
return FALSE;
}
@ -2444,7 +2444,7 @@ BOOL __fastcall WeaponDur(int pnum, int durrnd)
}
if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_NONE && plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD ) {
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability == 255 ) {
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability == DUR_INDESTRUCTIBLE ) {
return FALSE;
}
@ -2458,7 +2458,7 @@ BOOL __fastcall WeaponDur(int pnum, int durrnd)
}
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE && plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD ) {
if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability == 255 ) {
if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability == DUR_INDESTRUCTIBLE ) {
return FALSE;
}
@ -2965,7 +2965,7 @@ void __fastcall ShieldDur(int pnum)
}
if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD ) {
if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability == 255 ) {
if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability == DUR_INDESTRUCTIBLE ) {
return;
}
@ -2978,7 +2978,7 @@ void __fastcall ShieldDur(int pnum)
}
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_SHIELD ) {
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability != 255 ) {
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability != DUR_INDESTRUCTIBLE ) {
plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability--;
if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability == 0 ) {
NetSendCmdDelItem(TRUE, INVLOC_HAND_RIGHT);
@ -3075,89 +3075,79 @@ BOOL __fastcall PM_DoSpell(int pnum)
BOOL __fastcall PM_DoGotHit(int pnum)
{
int v1; // esi
int v2; // eax
int v3; // edx
int v4; // ecx
v1 = pnum;
if ( (unsigned int)pnum >= MAX_PLRS )
if ( (DWORD)pnum >= MAX_PLRS ) {
TermMsg("PM_DoGotHit: illegal player %d", pnum);
v2 = v1;
v3 = plr[v1]._pIFlags;
v4 = plr[v1]._pAnimFrame;
if ( v3 & 0x200000 && v4 == 3 )
plr[v2]._pAnimFrame = 4;
if ( v3 & 0x400000 && (v4 == 3 || v4 == 5) )
++plr[v2]._pAnimFrame;
if ( v3 & 0x800000 && (v4 == 1 || v4 == 3 || v4 == 5) )
++plr[v2]._pAnimFrame;
if ( plr[v2]._pAnimFrame < plr[v2]._pHFrames )
return 0;
StartStand(v1, plr[v2]._pdir);
ClearPlrPVars(v1);
if ( random(3, 4) )
ArmorDur(v1);
return 1;
}
int frame = plr[pnum]._pAnimFrame;
if ( plr[pnum]._pIFlags & ISPL_FASTRECOVER && frame == 3 ) {
plr[pnum]._pAnimFrame = 4;
}
if ( plr[pnum]._pIFlags & ISPL_FASTERRECOVER && (frame == 3 || frame == 5) ) {
plr[pnum]._pAnimFrame++;
}
if ( plr[pnum]._pIFlags & ISPL_FASTESTRECOVER && (frame == 1 || frame == 3 || frame == 5) ) {
plr[pnum]._pAnimFrame++;
}
if ( plr[pnum]._pAnimFrame < plr[pnum]._pHFrames ) {
return FALSE;
}
StartStand(pnum, plr[pnum]._pdir);
ClearPlrPVars(pnum);
if ( random(3, 4) ) {
ArmorDur(pnum);
}
return TRUE;
}
void __fastcall ArmorDur(int pnum)
{
int v1; // ebp
//int v2; // ST04_4
PlayerStruct *v3; // esi
int v4; // eax
int v5; // edi
int v6; // esi
int v7; // ecx
int v8; // ecx
unsigned char v9; // dl
if ( pnum != myplr ) {
return;
}
v1 = pnum;
if ( pnum == myplr )
{
if ( (unsigned int)pnum >= MAX_PLRS )
{
TermMsg("ArmorDur: illegal player %d", pnum);
//pnum = v2;
}
v3 = &plr[v1];
if ( v3->InvBody[6]._itype != -1 || v3->InvBody[0]._itype != -1 )
{
v4 = random(8, 3);
v5 = v3->InvBody[6]._itype;
if ( v5 == -1 )
goto LABEL_23;
if ( v3->InvBody[0]._itype == -1 )
v4 = 1;
if ( v5 == -1 )
{
LABEL_23:
if ( v3->InvBody[0]._itype != -1 )
v4 = 0;
}
if ( v4 )
v6 = (int)&v3->InvBody[6];
else
v6 = (int)v3->InvBody;
v7 = *(_DWORD *)(v6 + 236);
if ( v7 != 255 )
{
v8 = v7 - 1;
*(_DWORD *)(v6 + 236) = v8;
if ( !v8 )
{
if ( v4 )
v9 = 6;
else
v9 = 0;
NetSendCmdDelItem(1u, v9);
*(_DWORD *)(v6 + 8) = -1;
CalcPlrInv(v1, 1u);
}
}
}
if ( (DWORD)pnum >= MAX_PLRS ) {
TermMsg("ArmorDur: illegal player %d", pnum);
}
PlayerStruct *p = &plr[pnum];
if ( p->InvBody[INVLOC_CHEST]._itype == ITYPE_NONE && p->InvBody[INVLOC_HEAD]._itype == ITYPE_NONE ) {
return;
}
int a = random(8, 3);
if ( p->InvBody[INVLOC_CHEST]._itype != ITYPE_NONE && p->InvBody[INVLOC_HEAD]._itype == ITYPE_NONE ) {
a = 1;
}
if ( p->InvBody[INVLOC_CHEST]._itype == ITYPE_NONE && p->InvBody[INVLOC_HEAD]._itype != ITYPE_NONE ) {
a = 0;
}
ItemStruct *pi;
if ( a != 0 ) {
pi = &p->InvBody[INVLOC_CHEST];
} else {
pi = &p->InvBody[INVLOC_HEAD];
}
if ( pi->_iDurability == DUR_INDESTRUCTIBLE ) {
return;
}
pi->_iDurability--;
if ( pi->_iDurability != 0 ) {
return;
}
if ( a != 0 ) {
NetSendCmdDelItem(TRUE, INVLOC_CHEST);
} else {
NetSendCmdDelItem(TRUE, INVLOC_HEAD);
}
pi->_itype = ITYPE_NONE;
CalcPlrInv(pnum, TRUE);
}
BOOL __fastcall PM_DoDeath(int pnum)

4
defs.h

@ -30,11 +30,13 @@
#define MDMAXX 40
#define MDMAXY 40
// number of inventory grid cells
#define NUM_INV_GRID_ELEM 40
#define INV_SLOT_SIZE_PX 28
// Item indestructible durability
#define DUR_INDESTRUCTIBLE 255
// todo: enums
#define NUM_SFX 858
#define NUMLEVELS 17

Loading…
Cancel
Save