From c846365a1b68df5a3ff4df8fc908e29ffd235454 Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 22 Mar 2001 19:10:19 +0000 Subject: [PATCH] --- source/enemy/npc.cpp | 22 ++++++++++++++++++---- source/enemy/npc.h | 2 ++ source/thing/thing.h | 1 + 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/source/enemy/npc.cpp b/source/enemy/npc.cpp index db2e7ebb1..76feb6a34 100644 --- a/source/enemy/npc.cpp +++ b/source/enemy/npc.cpp @@ -79,6 +79,13 @@ void CNpcFriend::init() m_type = NPC_FRIEND_GARY; + DVECTOR ofs = getCollisionSize(); + + m_drawOffset.vx = 0; + m_drawOffset.vy = -( ofs.vy >> 1 ); + + setCollisionCentreOffset( 0, -( ofs.vy >> 1 ) ); + //m_spriteBank=new ("enemy sprites") SpriteBank(); //m_spriteBank->load(UI_UIGFX_SPR); } @@ -125,8 +132,8 @@ void CNpcFriend::render() DVECTOR renderPos; DVECTOR offset = CLevel::getCameraPos(); - renderPos.vx = ( Pos.vx - offset.vx - ( VidGetScrW() >> 1 ) ) * 20; - renderPos.vy = ( Pos.vy - offset.vy - ( VidGetScrH() >> 1 ) ) * 20; + renderPos.vx = ( Pos.vx + m_drawOffset.vx - offset.vx - ( VidGetScrW() >> 1 ) ) * 20; + renderPos.vy = ( Pos.vy + m_drawOffset.vy - offset.vy - ( VidGetScrH() >> 1 ) ) * 20; m_skel.setPos( renderPos ); m_skel.setFrame(m_frame); @@ -249,6 +256,13 @@ void CNpcEnemy::init() m_npcPath.initPath(); + DVECTOR ofs = getCollisionSize(); + + m_drawOffset.vx = 0; + m_drawOffset.vy = -( ofs.vy >> 1 ); + + setCollisionCentreOffset( 0, -( ofs.vy >> 1 ) ); + switch ( m_data[this->m_type].initFunc ) { case NPC_INIT_DEFAULT: @@ -1170,8 +1184,8 @@ void CNpcEnemy::render() DVECTOR renderPos; DVECTOR offset = CLevel::getCameraPos(); - renderPos.vx = ( Pos.vx - offset.vx - ( VidGetScrW() >> 1 ) ) * 20; - renderPos.vy = ( Pos.vy - offset.vy - ( VidGetScrH() >> 1 ) ) * 20; + renderPos.vx = ( Pos.vx + m_drawOffset.vx - offset.vx - ( VidGetScrW() >> 1 ) ) * 20; + renderPos.vy = ( Pos.vy + m_drawOffset.vy - offset.vy - ( VidGetScrH() >> 1 ) ) * 20; if ( m_reversed ) { diff --git a/source/enemy/npc.h b/source/enemy/npc.h index f607514ca..7f6e4b95a 100644 --- a/source/enemy/npc.h +++ b/source/enemy/npc.h @@ -103,6 +103,7 @@ protected: int m_animNo; CSkel m_skel; TPAGE_DESC m_actorTPage; + DVECTOR m_drawOffset; }; class CNpcEnemy : public CEnemyThing @@ -490,6 +491,7 @@ protected: int m_animNo; CSkel m_skel; TPAGE_DESC m_actorTPage; + DVECTOR m_drawOffset; virtual void collidedWith(CThing *_thisThing); }; diff --git a/source/thing/thing.h b/source/thing/thing.h index 093d5bb5f..a47aa489d 100644 --- a/source/thing/thing.h +++ b/source/thing/thing.h @@ -144,6 +144,7 @@ protected: void setCollisionAngle(int newAngle) {m_collisionAngle = newAngle;} int getCollisionRadius() {return m_collisionRadius;} CRECT getCollisionArea() {return m_collisionArea;} + DVECTOR getCollisionSize() {return m_collisionSize;} DVECTOR getCollisionCentre() {return m_collisionCentre;} s16 getCollisionAngle() {return m_collisionAngle;} bool getCentreCollision() {return m_centreCollision;}