From 9148104122bdc8bf82c408a2a284fa4b46b8b82f Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Thu, 9 Oct 2025 23:47:40 +0200 Subject: [PATCH] fixed player ratling 3D models --- graph-monster.cpp | 16 +++++++++------- graph-player.cpp | 24 +++++++++++++----------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/graph-monster.cpp b/graph-monster.cpp index 408ab3c5..6f4f27e1 100644 --- a/graph-monster.cpp +++ b/graph-monster.cpp @@ -184,6 +184,7 @@ EX void ShadowV(const shiftmatrix& V, const hpcshape& bp, PPR prio IS(PPR::MONST #define VLEG at_smart_lof(V, cgi.LEG) #define VGROIN at_smart_lof(V, cgi.GROIN) #define VBODY at_smart_lof(V, cgi.BODY) +#define VRAT (GDIM == 2 ? VHEAD : V * lzpush(cgi.AHEAD - zc(0.4) - zc(0.98) + cgi.HEAD)) #define VBODY1 at_smart_lof(V, cgi.BODY1) #define VBODY2 at_smart_lof(V, cgi.BODY2) #define VBODY3 at_smart_lof(V, cgi.BODY3) @@ -500,7 +501,7 @@ EX bool drawMonsterType(eMonster m, cell *where, const shiftmatrix& V1, color_t if(m == moRoseLady) { // queuepoly(V, girl ? cgi.shGoatHead : cgi.shDemon, 0x800000FF); // make her hair a bit darker to stand out in 3D - queuepoly(VHEAD1, hair, evil ? 0x500050FF : GDIM == 3 ? 0x666A64FF : 0x332A22FF); + queuepoly(&hair == &cgi.shRatHead ? VRAT : VHEAD1, hair, evil ? 0x500050FF : GDIM == 3 ? 0x666A64FF : 0x332A22FF); } else if(m == moRoseBeauty) { if(girl) { @@ -514,19 +515,20 @@ EX bool drawMonsterType(eMonster m, cell *where, const shiftmatrix& V1, color_t } } else { - queuepoly(VHEAD1, hair, evil ? 0xC00000FF : 0x332A22FF); + queuepoly(&hair == &cgi.shRatHead ? VRAT : VHEAD1, hair, evil ? 0xC00000FF : 0x332A22FF); } if(&hair == &cgi.shRatHead) { - queuepoly(VHEAD, cgi.shWolf1, 0x008000FF); - queuepoly(VHEAD, cgi.shWolf2, 0x008000FF); - queuepoly(VHEAD, cgi.shWolf3, darkena(0x202020, 0, 0xFF)); + auto V1 = VRAT; + queuepoly(V1, cgi.shWolf1, 0x008000FF); + queuepoly(V1, cgi.shWolf2, 0x008000FF); + queuepoly(V1, cgi.shWolf3, darkena(0x202020, 0, 0xFF)); } else if(&hair == &cgi.shSkull) { queuepoly(VHEAD, cgi.shSkullEyes, darkena(0x202020, 0, 0xFF)); } else queuepoly(VHEAD, cgi.shPFace, facecolor); if(id == pshRatling) queuepoly(VLEG, cgi.shRatTail, darkena(col, 0, 0xFF)); - humanoid_eyes(V, evil ? 0x0000C0FF : 0x00C000FF, facecolor); + if(id != pshRatling) humanoid_eyes(V, evil ? 0x0000C0FF : 0x00C000FF, facecolor); return true; } @@ -1079,7 +1081,7 @@ EX bool drawMonsterType(eMonster m, cell *where, const shiftmatrix& V1, color_t } #if MAXMDIM >= 4 else { - shiftmatrix V1 = V * lzpush(cgi.AHEAD - zc(0.4) - zc(0.98) + cgi.HEAD); // * cpush(0, cgi.scalefactor * (-0.1)); + shiftmatrix V1 = VRAT; queuepoly(V1, cgi.shRatHead, darkena(col, 0, 0xFF)); /* diff --git a/graph-player.cpp b/graph-player.cpp index acd71f9c..af4be922 100644 --- a/graph-player.cpp +++ b/graph-player.cpp @@ -502,22 +502,23 @@ EX void drawPlayer_humanoid(eMonster m, cell *where, const shiftmatrix& V, color // queuepoly(V, shHood, darkena(0xFF00, 1, 0xFF)); } else if(id == pshRatling) { - queuepoly(VHEAD, cgi.shRatHead, fc(500, cs.haircolor, 1)); - queuepoly(VHEAD, cgi.shWolf1, cs.eyecolor); - queuepoly(VHEAD, cgi.shWolf2, cs.eyecolor); - queuepoly(VHEAD, cgi.shWolf3, darkena(0x202020, 0, 0xFF)); + shiftmatrix V1 = VRAT; // * cpush(0, cgi.scalefactor * (-0.1)); + queuepoly(V1, cgi.shRatHead, fc(500, cs.haircolor, 1)); + queuepoly(V1, cgi.shWolf1, cs.eyecolor); + queuepoly(V1, cgi.shWolf2, cs.eyecolor); + queuepoly(V1, cgi.shWolf3, darkena(0x202020, 0, 0xFF)); } else if(id == pshSkeleton) { if(GDIM == 2) queuepoly(VHEAD, cgi.shSkull, fc(500, cs.haircolor, 1)); if(GDIM == 2) queuepoly(VHEAD1, cgi.shSkullEyes, 0x000000FF); + humanoid_eyes(V, cs.eyecolor, cs.skincolor); } else { queuepoly(VHEAD, cgi.shPFace, fc(500, cs.skincolor, 1)); queuepoly(VHEAD1, (cs.charid&1) ? cgi.shFemaleHair : cgi.shPHead, fc(150, cs.haircolor, 2)); + humanoid_eyes(V, cs.eyecolor, cs.skincolor); } - humanoid_eyes(V, cs.eyecolor, cs.skincolor); - #if CAP_COMPLEX2 if(camelot::knighted) queuepoly(VBODY * VBS, id == pshRatling ? cgi.shRatCape1 : cgi.shKnightCloak, darkena(cloakcolor(camelot::knighted), 1, 0xFF)); @@ -676,10 +677,11 @@ EX void drawMimic(eMonster m, cell *where, const shiftmatrix& V, color_t col, do #endif if(&body == &cgi.shYeti) { - queuepoly(VHEAD1, cgi.shRatHead, darkena(col, 1, 0xC0)); - queuepoly(VHEAD, cgi.shWolf1, darkena(col, 2, 0xC0)); - queuepoly(VHEAD, cgi.shWolf2, darkena(col, 2, 0xC0)); - queuepoly(VHEAD, cgi.shWolf3, darkena(col, 2, 0xC0)); + shiftmatrix V1 = VRAT; + queuepoly(V1, cgi.shRatHead, darkena(col, 1, 0xC0)); + queuepoly(V1, cgi.shWolf1, darkena(col, 2, 0xC0)); + queuepoly(V1, cgi.shWolf2, darkena(col, 2, 0xC0)); + queuepoly(V1, cgi.shWolf3, darkena(col, 2, 0xC0)); } else if(&body == &cgi.shSkeletonBody) { queuepoly(VHEAD1, cgi.shSkull, darkena(col, 1, 0xC0)); @@ -697,7 +699,7 @@ EX void drawMimic(eMonster m, cell *where, const shiftmatrix& V, color_t col, do queuepoly(VBODY2 * VBS, cgi.shPrincessDress, darkena(col, 1, 0XC0)); if(id == pshRatling) queuepoly(VLEG, cgi.shRatTail, darkena(col, 1, 0xC0)); - humanoid_eyes(V, 0xFF, darkena(col, 0, 0x40)); + if(&body != &cgi.shYeti) humanoid_eyes(V, 0xFF, darkena(col, 0, 0x40)); } }