Browse Source

Introduce InitMissileAnimationFromMonster

pull/2189/head
obligaron 5 years ago committed by Anders Jenbo
parent
commit
ab9a300393
  1. 66
      Source/missiles.cpp

66
Source/missiles.cpp

@ -2491,64 +2491,54 @@ void AddMetlHit(int mi, int sx, int sy, int dx, int dy, int midir, int8_t mienem
missile[mi]._mirange = missile[mi]._miAnimLen;
}
void AddRhino(int mi, int sx, int sy, int dx, int dy, int midir, int8_t mienemy, int id, int dam)
namespace {
void InitMissileAnimationFromMonster(MissileStruct &mis, int midir, const MonsterStruct &mon, int graphic)
{
AnimStruct *anim;
const AnimStruct &anim = mon.MType->Anims[graphic];
mis._mimfnum = midir;
mis._miAnimFlags = 0;
mis._miAnimData = anim.Data[midir];
mis._miAnimDelay = anim.Rate;
mis._miAnimLen = anim.Frames;
mis._miAnimWidth = mon.MType->width;
mis._miAnimWidth2 = CalculateWidth2(mon.MType->width);
mis._miAnimAdd = 1;
mis._miVar1 = 0;
mis._miVar2 = 0;
mis._miLightFlag = true;
mis._mirange = 256;
}
}
void AddRhino(int mi, int sx, int sy, int dx, int dy, int midir, int8_t mienemy, int id, int dam)
{
int graphic = MA_SPECIAL;
if (monster[id].MType->mtype < MT_HORNED || monster[id].MType->mtype > MT_OBLORD) {
if (monster[id].MType->mtype < MT_NSNAKE || monster[id].MType->mtype > MT_GSNAKE) {
anim = &monster[id].MType->Anims[MA_WALK];
graphic = MA_WALK;
} else {
anim = &monster[id].MType->Anims[MA_ATTACK];
graphic = MA_ATTACK;
}
} else {
anim = &monster[id].MType->Anims[MA_SPECIAL];
}
GetMissileVel(mi, sx, sy, dx, dy, 18);
missile[mi]._mimfnum = midir;
missile[mi]._miAnimFlags = 0;
missile[mi]._miAnimData = anim->Data[midir];
missile[mi]._miAnimDelay = anim->Rate;
missile[mi]._miAnimLen = anim->Frames;
missile[mi]._miAnimWidth = monster[id].MType->width;
missile[mi]._miAnimWidth2 = CalculateWidth2(monster[id].MType->width);
missile[mi]._miAnimAdd = 1;
InitMissileAnimationFromMonster(missile[mi], midir, monster[id], graphic);
if (monster[id].MType->mtype >= MT_NSNAKE && monster[id].MType->mtype <= MT_GSNAKE)
missile[mi]._miAnimFrame = 7;
missile[mi]._miVar1 = 0;
missile[mi]._miVar2 = 0;
missile[mi]._miLightFlag = true;
if (monster[id]._uniqtype != 0) {
missile[mi]._miUniqTrans = monster[id]._uniqtrans + 1;
missile[mi]._mlid = monster[id].mlid;
}
missile[mi]._mirange = 256;
PutMissile(mi);
}
void AddFireman(int mi, int sx, int sy, int dx, int dy, int midir, int8_t mienemy, int id, int dam)
{
AnimStruct *anim;
MonsterStruct *mon;
anim = &monster[id].MType->Anims[MA_WALK];
GetMissileVel(mi, sx, sy, dx, dy, 16);
missile[mi]._mimfnum = midir;
missile[mi]._miAnimFlags = 0;
missile[mi]._miAnimData = anim->Data[midir];
missile[mi]._miAnimDelay = anim->Rate;
missile[mi]._miAnimLen = anim->Frames;
missile[mi]._miAnimWidth = monster[id].MType->width;
missile[mi]._miAnimWidth2 = CalculateWidth2(monster[id].MType->width);
missile[mi]._miAnimAdd = 1;
missile[mi]._miVar1 = 0;
missile[mi]._miVar2 = 0;
missile[mi]._miLightFlag = true;
if (monster[id]._uniqtype != 0)
missile[mi]._miUniqTrans = monster[id]._uniqtrans + 1;
mon = &monster[id];
dMonster[mon->position.tile.x][mon->position.tile.y] = 0;
missile[mi]._mirange = 256;
auto &mon = monster[id];
InitMissileAnimationFromMonster(missile[mi], midir, mon, MA_WALK);
if (mon._uniqtype != 0)
missile[mi]._miUniqTrans = mon._uniqtrans + 1;
dMonster[mon.position.tile.x][mon.position.tile.y] = 0;
PutMissile(mi);
}

Loading…
Cancel
Save