diff --git a/content.cpp b/content.cpp index ed4bfe90..434ade6f 100644 --- a/content.cpp +++ b/content.cpp @@ -1682,6 +1682,10 @@ ITEM('>', 0xFF6060, "fatigue", itFatigue, IC_NAI, ZERO, RESERVED, osNone, "Press 't' or click the destination to activate." ) +MONSTER('H', 0x181818, "Hag", moHexer, CF_FACE_UP, RESERVED, moYeti, + "Hags can curse you from afar!") + + //shmupspecials MONSTER( '@', 0xC0C0C0, "Rogue", moPlayer, CF_FACE_UP | CF_PLAYER, RESERVED, moNone, "In the Shoot'em Up mode, you are armed with thrown Knives.") MONSTER( '*', 0xC0C0C0, "Knife", moBullet, ZERO | CF_BULLET, RESERVED, moNone, "A simple, but effective, missile, used by rogues.") diff --git a/graph.cpp b/graph.cpp index b6894ecb..715235fb 100644 --- a/graph.cpp +++ b/graph.cpp @@ -2286,6 +2286,15 @@ EX bool drawMonsterType(eMonster m, cell *where, const shiftmatrix& V1, color_t int acol = col; queuepoly(VAHEAD, cgi.shTrylobiteHead, darkena(acol, 0, 0xFF)); } + else if(m == moHexer) { + const shiftmatrix VBS = VBODY * otherbodyparts(V, darkena(col, 1, 0xFF), m, footphase); + ShadowV(V, cgi.shFemaleBody); + queuepoly(VBS, cgi.shFemaleBody, darkena(0x800080, 0, 0xFF)); + queuepoly(VHEAD1, cgi.shWitchHair, darkena(0xFF00FF, 1, 0xFF)); + queuepoly(VHEAD, cgi.shPFace, darkena(0xFFFFFF, 0, 0xFF)); + queuepoly(VBS, cgi.shWitchDress, darkena(col, 1, 0XC0)); + humanoid_eyes(V, 0xF000F0FF); + } else if(isWitch(m)) { const shiftmatrix VBS = VBODY * otherbodyparts(V, darkena(col, 1, 0xFF), m, footphase); int cc = 0xFF; diff --git a/monstermove.cpp b/monstermove.cpp index 50aa398f..0d395150 100644 --- a/monstermove.cpp +++ b/monstermove.cpp @@ -1874,6 +1874,28 @@ EX void specialMoves() { if(shot || dont_approach) c->stuntime = 1; } + else if(m == moHexer && c->item && (classflag(c->item) & IF_CURSE) && !peace::on) { + bool shot = false; + // bool dont_approach = false; + // smaller range on the sphere + int firerange = (sphere || getDistLimit() < 5) ? 2 : 4; + + bool dont_approach; + for(int i=0; iitem] += orbcharges(c->item); + c->item = itNone; + c->stuntime = 1; + } + if(celldistance(c,t) == firerange+1) dont_approach = true; + } + + if(dont_approach) c->stuntime = 1; + } + else if(m == moVampire) { for(int i=0; i