diff --git a/source/pickups/pballoon.cpp b/source/pickups/pballoon.cpp index 9fc12e8bc..80d104f18 100644 --- a/source/pickups/pballoon.cpp +++ b/source/pickups/pballoon.cpp @@ -86,6 +86,23 @@ void CBalloonPickup::init() setCollisionSize(fh->W,fh->H); } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CBalloonPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__BALLOON); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/pballoon.h b/source/pickups/pballoon.h index f3181502e..b291d2fcf 100644 --- a/source/pickups/pballoon.h +++ b/source/pickups/pballoon.h @@ -39,6 +39,7 @@ class CBalloonPickup : public CBaseRespawningPickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/pblower.cpp b/source/pickups/pblower.cpp index 4fb2c0650..a6e5bcb97 100644 --- a/source/pickups/pblower.cpp +++ b/source/pickups/pblower.cpp @@ -53,6 +53,23 @@ Vars ---- */ +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CCoralBlowerPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__BLOWER); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/pblower.h b/source/pickups/pblower.h index 4c040c316..498e72a0c 100644 --- a/source/pickups/pblower.h +++ b/source/pickups/pblower.h @@ -37,6 +37,7 @@ class CCoralBlowerPickup : public CBasePickup { public: + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/pbubmix.cpp b/source/pickups/pbubmix.cpp index 4007773aa..5613e36c0 100644 --- a/source/pickups/pbubmix.cpp +++ b/source/pickups/pbubmix.cpp @@ -69,6 +69,23 @@ void CBubbleMixturePickup::init() m_sin=0; } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CBubbleMixturePickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__BUBBLEMIXTURE); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: @@ -138,6 +155,23 @@ void CBubbleWandPickup::init() CBaseRespawningPickup::init(); } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CBubbleWandPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__BUBBLEWAND); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/pbubmix.h b/source/pickups/pbubmix.h index f54996fe2..b63733d18 100644 --- a/source/pickups/pbubmix.h +++ b/source/pickups/pbubmix.h @@ -39,6 +39,7 @@ class CBubbleMixturePickup : public CBaseRespawningPickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: @@ -58,6 +59,7 @@ class CBubbleWandPickup : public CBaseRespawningPickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/pglasses.cpp b/source/pickups/pglasses.cpp index 2a61ec370..c9db78e6e 100644 --- a/source/pickups/pglasses.cpp +++ b/source/pickups/pglasses.cpp @@ -67,6 +67,23 @@ void CGlassesPickup::init() m_glintRot=0; } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CGlassesPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__GLASSES); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/pglasses.h b/source/pickups/pglasses.h index 54aa384f7..059363de5 100644 --- a/source/pickups/pglasses.h +++ b/source/pickups/pglasses.h @@ -39,6 +39,7 @@ class CGlassesPickup : public CBasePickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/phealth.cpp b/source/pickups/phealth.cpp index 75bd85c8f..8b0fcdf75 100644 --- a/source/pickups/phealth.cpp +++ b/source/pickups/phealth.cpp @@ -69,6 +69,23 @@ void CBaseHealthPickup::init() m_sin=0; } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CBaseHealthPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(getFrameNumber()); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/phealth.h b/source/pickups/phealth.h index cd141f1b7..74c0bb1f0 100644 --- a/source/pickups/phealth.h +++ b/source/pickups/phealth.h @@ -39,6 +39,7 @@ class CBaseHealthPickup : public CBasePickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/phelmet.cpp b/source/pickups/phelmet.cpp index d1fb1b9ae..fa5b13358 100644 --- a/source/pickups/phelmet.cpp +++ b/source/pickups/phelmet.cpp @@ -53,6 +53,23 @@ Vars ---- */ +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CHelmetPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__HELMET); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/phelmet.h b/source/pickups/phelmet.h index 2317a527d..193e78711 100644 --- a/source/pickups/phelmet.h +++ b/source/pickups/phelmet.h @@ -37,6 +37,7 @@ class CHelmetPickup : public CBasePickup { public: + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/pickup.cpp b/source/pickups/pickup.cpp index d84ef6d44..92a76cac9 100644 --- a/source/pickups/pickup.cpp +++ b/source/pickups/pickup.cpp @@ -286,6 +286,7 @@ void CBaseRespawningPickup::collect(class CPlayer *_player) CBasePickup *createPickup(const PICKUP_TYPE _type,const DVECTOR *_pos) { CBasePickup *pickup; + DVECTOR pickupPos; switch(_type) { @@ -354,7 +355,10 @@ CBasePickup *createPickup(const PICKUP_TYPE _type,const DVECTOR *_pos) } pickup->init(); - pickup->setPos(_pos); + pickupPos=pickup->getSizeForPlacement(); + pickupPos.vx=_pos->vx+(pickupPos.vx/2); + pickupPos.vy=_pos->vy+(pickupPos.vy/2)-16; + pickup->setPos(&pickupPos); return pickup; } diff --git a/source/pickups/pickup.h b/source/pickups/pickup.h index c44ba2218..d8190321d 100644 --- a/source/pickups/pickup.h +++ b/source/pickups/pickup.h @@ -63,6 +63,7 @@ public: virtual void think(int _frames); virtual void render(); + virtual DVECTOR getSizeForPlacement()=0; void setPos(const struct DVECTOR *_pos); virtual void collect(class CPlayer *_player); diff --git a/source/pickups/pjlammo.cpp b/source/pickups/pjlammo.cpp index 72609f217..811964930 100644 --- a/source/pickups/pjlammo.cpp +++ b/source/pickups/pjlammo.cpp @@ -65,6 +65,23 @@ void CJellyLauncherAmmoPickup::init() m_rattle=0; } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CJellyLauncherAmmoPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__JELLYAMMO); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/pjlammo.h b/source/pickups/pjlammo.h index 5b58b2381..085d69448 100644 --- a/source/pickups/pjlammo.h +++ b/source/pickups/pjlammo.h @@ -39,6 +39,7 @@ class CJellyLauncherAmmoPickup : public CBasePickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/plife.cpp b/source/pickups/plife.cpp index 7f51cf97e..08b5d1707 100644 --- a/source/pickups/plife.cpp +++ b/source/pickups/plife.cpp @@ -69,6 +69,23 @@ void CLifePickup::init() m_sin=0; } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CLifePickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__PANTS); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/plife.h b/source/pickups/plife.h index 85a0fb8c8..577bb7cd6 100644 --- a/source/pickups/plife.h +++ b/source/pickups/plife.h @@ -39,6 +39,7 @@ class CLifePickup : public CBasePickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/pnet.cpp b/source/pickups/pnet.cpp index c2a841a24..ac3e5505c 100644 --- a/source/pickups/pnet.cpp +++ b/source/pickups/pnet.cpp @@ -53,6 +53,23 @@ Vars ---- */ +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CNetPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__NET); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/pnet.h b/source/pickups/pnet.h index 8ce797821..bd248678d 100644 --- a/source/pickups/pnet.h +++ b/source/pickups/pnet.h @@ -37,6 +37,7 @@ class CNetPickup : public CBasePickup { public: + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/pquest.cpp b/source/pickups/pquest.cpp index e481040cf..91af06983 100644 --- a/source/pickups/pquest.cpp +++ b/source/pickups/pquest.cpp @@ -69,6 +69,23 @@ void CBaseQuestItemPickup::init() m_pingFrame=0; } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CBaseQuestItemPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(getFrameNumber()); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/pquest.h b/source/pickups/pquest.h index 545206f36..05c516cae 100644 --- a/source/pickups/pquest.h +++ b/source/pickups/pquest.h @@ -39,6 +39,7 @@ class CBaseQuestItemPickup : public CBasePickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/pshoes.cpp b/source/pickups/pshoes.cpp index 06b1c4812..54cb8ff36 100644 --- a/source/pickups/pshoes.cpp +++ b/source/pickups/pshoes.cpp @@ -69,6 +69,23 @@ void CShoesPickup::init() m_sin=0; } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CShoesPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__SHOE); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/pshoes.h b/source/pickups/pshoes.h index cf388e5c8..fff4e15e3 100644 --- a/source/pickups/pshoes.h +++ b/source/pickups/pshoes.h @@ -39,6 +39,7 @@ class CShoesPickup : public CBaseRespawningPickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/pickups/pspatula.cpp b/source/pickups/pspatula.cpp index 02d9106c0..80c251f9e 100644 --- a/source/pickups/pspatula.cpp +++ b/source/pickups/pspatula.cpp @@ -62,6 +62,23 @@ void CSpatulaPickup::init() m_glintRot=0; } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +DVECTOR CSpatulaPickup::getSizeForPlacement() +{ + DVECTOR size; + sFrameHdr *fh; + + fh=getSpriteBank()->getFrameHeader(FRM__SPATULA); + size.vx=fh->W; + size.vy=fh->H; + return size; +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/pickups/pspatula.h b/source/pickups/pspatula.h index b1a777b13..5ac787e0b 100644 --- a/source/pickups/pspatula.h +++ b/source/pickups/pspatula.h @@ -39,6 +39,7 @@ class CSpatulaPickup : public CBasePickup public: virtual void init(); + virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); protected: diff --git a/source/player/player.cpp b/source/player/player.cpp index 84af043fa..833b95161 100644 --- a/source/player/player.cpp +++ b/source/player/player.cpp @@ -173,8 +173,8 @@ int s_health; int s_screenPos; DVECTOR m_cameraScrollPos={0,600}; -int SCREEN_GEOM_CENTRE_X=256; -int SCREEN_GEOM_CENTRE_Y=107; +int SCREEN_GEOM_CENTRE_X=38; +int SCREEN_GEOM_CENTRE_Y=248; int SCREEN_GEOM_PLAYER_OFS_X=9; int SCREEN_GEOM_PLAYER_OFS_Y=-26; @@ -450,24 +450,9 @@ m_fontBank->print(40,40,posBuf); // Render if(m_invincibleFrameCount==0||m_invincibleFrameCount&2) { - -//int xval=(255-(MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos.vx>>8))); -//DrawLine(xval-7,0,xval-7,255,0,128,255,0); -//DrawLine(xval+7,0,xval+7,255,0,128,255,0); - -//!! SetGeomOffset(SCREEN_GEOM_CENTRE_X+m_playerScreenGeomPos.vx,SCREEN_GEOM_CENTRE_Y+m_playerScreenGeomPos.vy); -// if(panim!=-1) -// m_actorGfx.setAnimNo(panim); -// else -// m_actorGfx.setAnimNo(m_animNo); -//!! m_actorGfx.setFrame(m_animFrame); -//!! m_actorGfx.Animate(this); -//!! m_actorGfx.Render(this); -//!! m_currentPlayerModeClass->render(); -//!! SetGeomOffset(SCREEN_GEOM_CENTRE_X,SCREEN_GEOM_CENTRE_Y); DVECTOR Pos= { - SCREEN_GEOM_CENTRE_X+m_playerScreenGeomPos.vx-m_actorGfx->getFrameWidth(m_animNo,m_animFrame/2), + SCREEN_GEOM_CENTRE_X+m_playerScreenGeomPos.vx, SCREEN_GEOM_CENTRE_Y+m_playerScreenGeomPos.vy }; m_actorGfx->Render(Pos,m_animNo,m_animFrame>>sbanimspeed,m_facing==FACING_RIGHT?0:1);