Browse Source

reflect without missile! (#2659)

pull/2667/head
qndel 5 years ago committed by GitHub
parent
commit
d76158ca03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      Source/misdat.cpp
  2. 42
      Source/missiles.cpp
  3. 1
      Source/missiles.h
  4. 23
      Source/msg.cpp
  5. 2
      Source/msg.h
  6. 8
      Source/player.cpp

2
Source/misdat.cpp

@ -94,7 +94,7 @@ MissileDataStruct MissileData[] = {
{ &AddCboltArrow, &MI_Cbolt, MIS_CBOLTARROW, true, 1, MISR_LIGHTNING, MFILE_MINILTNG, LS_CBOLT, SFX_NONE, MissileMovementDistrubution::Blockable },
{ &AddHbolt, &MI_Hbolt, MIS_HBOLTARROW, true, 1, MISR_NONE, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1, MissileMovementDistrubution::Blockable },
{ &AddWarp, &MI_Teleport, MIS_WARP, false, 1, MISR_NONE, MFILE_NONE, LS_ETHEREAL, SFX_NONE, MissileMovementDistrubution::Disabled },
{ &AddReflection, &MI_Reflect, MIS_REFLECT, false, 1, MISR_NONE, MFILE_REFLECT, LS_MSHIELD, SFX_NONE, MissileMovementDistrubution::Disabled },
{ &AddReflection, nullptr, MIS_REFLECT, false, 1, MISR_NONE, MFILE_REFLECT, LS_MSHIELD, SFX_NONE, MissileMovementDistrubution::Disabled },
{ &AddBerserk, nullptr, MIS_BERSERK, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistrubution::Disabled },
{ &AddRing, &MI_FireRing, MIS_FIRERING, false, 1, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE, MissileMovementDistrubution::Disabled },
{ &AddStealPotions, nullptr, MIS_STEALPOTS, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistrubution::Disabled },

42
Source/missiles.cpp

@ -950,11 +950,6 @@ void DeleteMissile(int mi, int i)
if (src == MyPlayerId)
NetSendCmd(true, CMD_REMSHIELD);
Players[src].pManaShield = false;
} else if (missile._mitype == MIS_REFLECT) {
int src = missile._misource;
if (src == MyPlayerId)
NetSendCmd(true, CMD_REMREFLECT);
Players[src].wReflections = 0;
}
AvailableMissiles[MAXMISSILES - ActiveMissileCount] = mi;
@ -1349,17 +1344,20 @@ void AddStoneRune(int mi, Point src, Point dst, int /*midir*/, int8_t /*mienemy*
void AddReflection(int mi, Point /*src*/, Point /*dst*/, int /*midir*/, int8_t /*mienemy*/, int id, int /*dam*/)
{
auto &missile = Missiles[mi];
if (id >= 0) {
auto &player = Players[id];
player.wReflections += (missile._mispllvl != 0 ? missile._mispllvl : 2) * player._pLevel;
if (id == MyPlayerId)
NetSendCmdParam1(true, CMD_SETREFLECT, player.wReflections);
missile._miDelFlag = true;
UseMana(id, SPL_REFLECT);
}
if (id < 0)
return;
missile._mirange = 0;
missile._miDelFlag = false;
auto &player = Players[id];
int add = (missile._mispllvl != 0 ? missile._mispllvl : 2) * player._pLevel;
if (player.wReflections + add >= std::numeric_limits<uint16_t>::max())
add = 0;
player.wReflections += add;
if (id == MyPlayerId)
NetSendCmdParam1(true, CMD_SETREFLECT, player.wReflections);
UseMana(id, SPL_REFLECT);
}
void AddBerserk(int mi, Point /*src*/, Point dst, int /*midir*/, int8_t /*mienemy*/, int id, int /*dam*/)
@ -3483,22 +3481,6 @@ void MI_LightningArrow(int i)
}
}
void MI_Reflect(int i)
{
auto &missile = Missiles[i];
int id = missile._misource;
if (id != MyPlayerId) {
if (currlevel != Players[id].plrlevel)
missile._miDelFlag = true;
} else {
if (Players[id].wReflections <= 0 || !Players[id].plractive) {
missile._miDelFlag = true;
NetSendCmd(true, CMD_ENDREFLECT);
}
}
PutMissile(i);
}
void MI_FireRing(int i)
{
auto &missile = Missiles[i];

1
Source/missiles.h

@ -232,7 +232,6 @@ void MI_Rune(int i);
void MI_LightningWall(int i);
void MI_HiveExplode(int i);
void MI_LightningArrow(int i);
void MI_Reflect(int i);
void MI_FireRing(int i);
void MI_Search(int i);
void MI_LightningWallC(int i);

23
Source/msg.cpp

@ -1777,25 +1777,14 @@ DWORD OnEndShield(TCmd *pCmd, int pnum)
DWORD OnSetReflect(TCmd *pCmd, PlayerStruct &player)
{
auto *p = (TCmdParam1 *)pCmd;
if (gbBufferMsgs != 1)
player.wReflections = p->wParam1;
if (gbBufferMsgs != 1) {
if (currlevel == player.plrlevel)
player.wReflections = p->wParam1;
}
return sizeof(*p);
}
DWORD OnRemoveReflect(TCmd *pCmd, PlayerStruct &player)
{
if (gbBufferMsgs != 1)
player.wReflections = 0;
return sizeof(*pCmd);
}
DWORD OnEndReflect(TCmd *pCmd, int pnum)
{
return EndEffect(pCmd, pnum, MIS_REFLECT);
}
DWORD OnNakrul(TCmd *pCmd)
{
if (gbBufferMsgs != 1) {
@ -2688,10 +2677,6 @@ DWORD ParseCmd(int pnum, TCmd *pCmd)
return OnEndShield(pCmd, pnum);
case CMD_SETREFLECT:
return OnSetReflect(pCmd, player);
case CMD_REMREFLECT:
return OnRemoveReflect(pCmd, player);
case CMD_ENDREFLECT:
return OnEndReflect(pCmd, pnum);
case CMD_NAKRUL:
return OnNakrul(pCmd);
case CMD_OPENHIVE:

2
Source/msg.h

@ -122,8 +122,6 @@ enum _cmd_id : uint8_t {
CMD_REMSHIELD,
CMD_ENDSHIELD,
CMD_SETREFLECT,
CMD_REMREFLECT,
CMD_ENDREFLECT,
CMD_NAKRUL,
CMD_OPENHIVE,
CMD_OPENCRYPT,

8
Source/player.cpp

@ -664,8 +664,13 @@ void DropHalfPlayersGold(int pnum)
void InitLevelChange(int pnum)
{
auto &player = Players[pnum];
auto &myPlayer = Players[MyPlayerId];
RemovePlrMissiles(pnum);
player.wReflections = 0;
// share info about your reflect charges when another player joins the level
if (pnum != MyPlayerId)
NetSendCmdParam1(true, CMD_SETREFLECT, myPlayer.wReflections);
if (pnum == MyPlayerId && qtextflag) {
qtextflag = false;
stream_stop();
@ -674,7 +679,6 @@ void InitLevelChange(int pnum)
RemovePlrFromMap(pnum);
SetPlayerOld(player);
if (pnum == MyPlayerId) {
auto &myPlayer = Players[MyPlayerId];
dPlayer[myPlayer.position.tile.x][myPlayer.position.tile.y] = MyPlayerId + 1;
} else {
player._pLvlVisited[player.plrlevel] = true;
@ -3221,7 +3225,7 @@ void RemovePlrMissiles(int pnum)
if (missile._mitype == MIS_STONE && missile._misource == pnum) {
Monsters[missile._miVar2]._mmode = (MON_MODE)missile._miVar1;
}
if (IsAnyOf(missile._mitype, MIS_MANASHIELD, MIS_REFLECT) && missile._misource == pnum) {
if (missile._mitype == MIS_MANASHIELD && missile._misource == pnum) {
ClearMissileSpot(missile);
DeleteMissile(am, i);
}

Loading…
Cancel
Save