From ab9a30039310bd8f282fd85625b2f77fcb8974b9 Mon Sep 17 00:00:00 2001 From: obligaron Date: Wed, 9 Jun 2021 00:18:14 +0200 Subject: [PATCH] Introduce InitMissileAnimationFromMonster --- Source/missiles.cpp | 66 +++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 38 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 7df67ed2c..278192fb5 100644 --- a/Source/missiles.cpp +++ b/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); }