|
|
|
|
@ -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); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|