diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 6b7a5479f..805554be6 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1538,7 +1538,43 @@ void missiles_spec_arrow(int mi, int sx, int sy, int dx, int dy, int midir, char void missiles_warp(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) { + int tx, ty, fx, fy, i, dist; + TriggerStruct *trg; + dist = INT_MAX; + if (id >= 0) { + sx = plr[id].WorldX; + sy = plr[id].WorldY; + } + tx = sx; + ty = sy; + + for (i = 0; i < numtrigs && i < MAXTRIGGERS; i++) { + trg = &trigs[i]; + if (trg->_tmsg == 1032 || trg->_tmsg == 1027 || trg->_tmsg == 1026 || trg->_tmsg == 1028) { + if ((leveltype == 1 || leveltype == 2) && (trg->_tmsg == 1026 || trg->_tmsg == 1027 || trg->_tmsg == 1028)) { + fx = trg->_tx; + fy = trg->_ty + 1; + } else { + fx = trg->_tx + 1; + fy = trg->_ty; + } + int dify = (sy - fy); + int difx = (sx - fx); + int dif = dify * dify + difx * difx; + if (dif < dist) { + dist = dif; + tx = fx; + ty = fy; + } + } + } + missile[mi]._mirange = 2; + missile[mi]._miVar1 = 0; + missile[mi]._mix = tx; + missile[mi]._miy = ty; + if (!mienemy) + UseMana(id, SPL_WARP); } void missiles_light_wall(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) diff --git a/defs.h b/defs.h index df956c702..4a557589f 100644 --- a/defs.h +++ b/defs.h @@ -44,7 +44,7 @@ #define MAXTHEMES 50 #define MAXTILES 2048 #ifdef HELLFIRE -#define MAXTRIGGERS 6 +#define MAXTRIGGERS 7 #else #define MAXTRIGGERS 5 #endif