From 3d16de2d5641ca153bd4dc736d406c1e094ff6e0 Mon Sep 17 00:00:00 2001 From: Plagman Date: Thu, 21 Dec 2006 15:18:50 +0000 Subject: [PATCH] MD2 rotation issues should be fixed now (untested). git-svn-id: https://svn.eduke32.com/eduke32@435 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/build/src/mdsprite.c | 24 ++++++++++++++---------- polymer/polymer/polymer.suo | Bin 98816 -> 91648 bytes 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/polymer/build/src/mdsprite.c b/polymer/build/src/mdsprite.c index 5fb692ed7..7105542b9 100644 --- a/polymer/build/src/mdsprite.c +++ b/polymer/build/src/mdsprite.c @@ -1291,12 +1291,16 @@ static int md3draw (md3model *m, spritetype *tspr) if (m->head.flags == 1337) { // md2 - m0.x = m->scale * g * m->muladdframes[m->cframe*2].x; m1.x = m->scale * f * m->muladdframes[m->nframe*2].x; + /*m0.x = m->scale * g * m->muladdframes[m->cframe*2].x; m1.x = m->scale * f * m->muladdframes[m->nframe*2].x; m0.y = m->scale * g * m->muladdframes[m->cframe*2].y; m1.y = m->scale * f * m->muladdframes[m->nframe*2].y; m0.z = m->scale * g * m->muladdframes[m->cframe*2].z; m1.z = m->scale * f * m->muladdframes[m->nframe*2].z; a0.x = m->muladdframes[m->cframe*2+1].x * m->scale; a0.x = (m->muladdframes[m->nframe*2+1].x * m->scale - a0.x)*f+a0.x; a0.y = m->muladdframes[m->cframe*2+1].y * m->scale; a0.y = (m->muladdframes[m->nframe*2+1].y * m->scale - a0.y)*f+a0.y; - a0.z = m->muladdframes[m->cframe*2+1].z * m->scale; a0.z = (m->muladdframes[m->nframe*2+1].z * m->scale - a0.z)*f+a0.z + m->zadd*m->scale; + a0.z = m->muladdframes[m->cframe*2+1].z * m->scale; a0.z = (m->muladdframes[m->nframe*2+1].z * m->scale - a0.z)*f+a0.z + m->zadd*m->scale;*/ + m0.x = m->scale * g; m1.x = m->scale *f; + m0.y = m->scale * g; m1.y = m->scale *f; + m0.z = m->scale * g; m1.z = m->scale *f; + a0.x = a0.y = 0; a0.z = m->zadd*m->scale; } else { @@ -1421,7 +1425,7 @@ if (tspr->cstat&2) { if (!(tspr->cstat&512)) pc[3] = 0.66; else pc[3] = 0.33; } //------------ // PLAG: Cleaner model rotation code - if (spriteext[tspr->owner].pitch || spriteext[tspr->owner].roll) + if (spriteext[tspr->owner].pitch || spriteext[tspr->owner].roll || m->head.flags == 1337) { if (spriteext[tspr->owner].xoff) a0.x = (int)(spriteext[tspr->owner].xoff / (2048 * (m0.x+m1.x))); @@ -1448,17 +1452,17 @@ if (tspr->cstat&2) { if (!(tspr->cstat&512)) pc[3] = 0.66; else pc[3] = 0.33; } for (i=s->numverts-1;i>=0;i--) { - if (spriteext[tspr->owner].pitch || spriteext[tspr->owner].roll) + if (spriteext[tspr->owner].pitch || spriteext[tspr->owner].roll || m->head.flags == 1337) { - fp.z = v0[i].x + a0.x; - fp.x = v0[i].y + a0.y; - fp.y = v0[i].z + a0.z; + fp.z = ((m->head.flags == 1337) ? (v0[i].x * m->muladdframes[m->cframe*2].x) + m->muladdframes[m->cframe*2+1].x : v0[i].x) + a0.x; + fp.x = ((m->head.flags == 1337) ? (v0[i].y * m->muladdframes[m->cframe*2].y) + m->muladdframes[m->cframe*2+1].y : v0[i].y) + a0.y; + fp.y = ((m->head.flags == 1337) ? (v0[i].z * m->muladdframes[m->cframe*2].z) + m->muladdframes[m->cframe*2+1].z : v0[i].z) + a0.z; fp1.x = fp.x*k2 + fp.y*k3; fp1.y = fp.x*k0*(-k3) + fp.y*k0*k2 + fp.z*(-k1); fp1.z = fp.x*k1*(-k3) + fp.y*k1*k2 + fp.z*k0; - fp.z = v1[i].x + a0.x; - fp.x = v1[i].y + a0.y; - fp.y = v1[i].z + a0.z; + fp.z = ((m->head.flags == 1337) ? (v1[i].x * m->muladdframes[m->nframe*2].x) + m->muladdframes[m->nframe*2+1].x : v1[i].x) + a0.x; + fp.x = ((m->head.flags == 1337) ? (v1[i].y * m->muladdframes[m->nframe*2].y) + m->muladdframes[m->nframe*2+1].y : v1[i].y) + a0.y; + fp.y = ((m->head.flags == 1337) ? (v1[i].z * m->muladdframes[m->nframe*2].z) + m->muladdframes[m->nframe*2+1].z : v1[i].z) + a0.z; fp2.x = fp.x*k2 + fp.y*k3; fp2.y = fp.x*k0*(-k3) + fp.y*k0*k2 + fp.z*(-k1); fp2.z = fp.x*k1*(-k3) + fp.y*k1*k2 + fp.z*k0; diff --git a/polymer/polymer/polymer.suo b/polymer/polymer/polymer.suo index 54817b81a7190bbb76a4dbddadba5c7e43b66f91..21556f6211b5791854bb1e7ff736144b332072e9 100644 GIT binary patch delta 20672 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