From d27bae5fd0596a556bc81dd1ca5f78dba83d6a71 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 21 Feb 2001 22:33:17 +0000 Subject: [PATCH] --- makefile.gaz | 2 + makefile.gfx | 3 +- source/game/game.cpp | 2 + source/pickups/pballoon.cpp | 84 +++++++++++++++- source/pickups/pballoon.h | 11 ++- source/pickups/pbubmix.cpp | 35 +++---- source/pickups/pbubmix.h | 7 +- source/pickups/pglasses.cpp | 28 +++--- source/pickups/pglasses.h | 5 +- source/pickups/phealth.cpp | 36 +++---- source/pickups/phealth.h | 5 +- source/pickups/phelmet.cpp | 4 +- source/pickups/pickup.cpp | 95 ++++++++++++++++++- source/pickups/pickup.h | 25 ++++- source/pickups/pjlammo.cpp | 36 +++---- source/pickups/pjlammo.h | 6 +- source/pickups/plife.cpp | 35 +++---- source/pickups/plife.h | 6 +- source/pickups/pquest.cpp | 51 +++++----- source/pickups/pquest.h | 7 +- source/pickups/pshoes.cpp | 35 +++---- source/pickups/pshoes.h | 7 +- source/pickups/pspatula.cpp | 35 +++---- source/pickups/pspatula.h | 6 +- .../spongebob project/spongebob project.dsp | 16 ++++ 25 files changed, 392 insertions(+), 190 deletions(-) diff --git a/makefile.gaz b/makefile.gaz index 1d0b3e54c..82f821c3f 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -145,9 +145,11 @@ paul_src := paul \ scenesel pickups_src := pickup \ + pballoon \ pbubmix \ pglasses \ phealth \ + phelmet \ pjlammo \ plife \ pquest \ diff --git a/makefile.gfx b/makefile.gfx index 5101eeafc..e1b1e250f 100644 --- a/makefile.gfx +++ b/makefile.gfx @@ -313,7 +313,8 @@ INGAMEFX_GFX_NONTRANS_IN := $(foreach FILE,$(INGAMEFX_GFX_NONTRANS),$(INGAMEFX_N PICKUP_GFX_DIR := $(GRAF_DIR)/pickups PICKUP_GFX := +spatula +pants +health100 +health50 +health25 +glint1 +glint2 +glint3 +glint4 \ - +jellyammo +bubblemixture +glasses +shoe +teeth + +jellyammo +bubblemixture +glasses +shoe +balloon +helmet \ + +teeth PICKUP_GFX_IN := $(foreach FILE,$(PICKUP_GFX),$(PICKUP_GFX_DIR)/$(FILE).bmp) INGAMEFX_GFX_TRANS := +bubble_1 +bubble_2 +bubble_3 diff --git a/source/game/game.cpp b/source/game/game.cpp index 666a39e47..70668e740 100644 --- a/source/game/game.cpp +++ b/source/game/game.cpp @@ -115,6 +115,8 @@ void CGameScene::init() pos.vx+=32; createPickup(PICKUP__BUBBLE_MIXTURE,&pos); pos.vx+=32; createPickup(PICKUP__GLASSES,&pos); pos.vx+=32; createPickup(PICKUP__SQUEAKY_SHOES,&pos); + pos.vx+=32; createPickup(PICKUP__BALLOON,&pos); + pos.vx+=32; createPickup(PICKUP__HELMET,&pos); pos.vx+=32; createPickup(PICKUP__QUEST_ITEM__TEST,&pos); #endif diff --git a/source/pickups/pballoon.cpp b/source/pickups/pballoon.cpp index f9749cfe4..f0e39e29a 100644 --- a/source/pickups/pballoon.cpp +++ b/source/pickups/pballoon.cpp @@ -21,6 +21,22 @@ #include "pickups\pballoon.h" +#ifndef __LEVEL_LEVEL_H__ +#include "level\level.h" +#endif + +#ifndef __LAYER_COLLISION_H__ +#include "layer\collision.h" +#endif + +#ifndef __PRIM_HEADER__ +#include "gfx\prim.h" +#endif + +#ifndef __MATHTABLE_HEADER__ +#include "utils\mathtab.h" +#endif + /* Std Lib ------- */ @@ -49,6 +65,18 @@ Vars ---- */ +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CBalloonPickup::init() +{ + CBaseRespawningPickup::init(); + m_sin=0; +} + /*---------------------------------------------------------------------- Function: Purpose: @@ -57,7 +85,49 @@ ---------------------------------------------------------------------- */ void CBalloonPickup::collect(class CPlayer *_player) { - CBasePickup::collect(_player); + CBaseRespawningPickup::collect(_player); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int balloon_height=30; +int balloon_r=180; +int balloon_g=180; +int balloon_b=180; +int balloon_speed=25; +int balloon_scale1=5; +int balloon_scale2=2; +int balloon_phase=1024; +int balloon_vissize=40; +int CBalloonPickup::getVisibilityRadius() +{ + return balloon_vissize; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int CBalloonPickup::getRespawnTime() +{ + return 60*10; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CBalloonPickup::thinkPickup(int _frames) +{ + m_sin=(m_sin+(_frames*balloon_speed))&4095; } /*---------------------------------------------------------------------- @@ -70,13 +140,21 @@ void CBalloonPickup::renderPickup(DVECTOR *_pos) { SpriteBank *sprites; sFrameHdr *fh; + int xo1,xo2; int x,y; sprites=getSpriteBank(); - fh=sprites->getFrameHeader(FRM__GLASSES); + fh=sprites->getFrameHeader(FRM__BALLOON); + + xo1=((msin((m_sin+balloon_phase)&4095)*balloon_scale1)>>12); + xo2=((msin(m_sin)*balloon_scale2)>>12); x=_pos->vx-(fh->W/2); y=_pos->vy-(fh->H/2); - sprites->printFT4(fh,x,y,0,0,PICKUPS_OT_POS); + sprites->printFT4(fh,x+xo1,y,0,0,PICKUPS_OT_POS); + + x=_pos->vx; + y=_pos->vy+(fh->H/2); + DrawLine(x+xo1,y,x+xo2,y+balloon_height,balloon_r,balloon_g,balloon_b,PICKUPS_OT_POS); } /*=========================================================================== diff --git a/source/pickups/pballoon.h b/source/pickups/pballoon.h index 461d9e92e..f3181502e 100644 --- a/source/pickups/pballoon.h +++ b/source/pickups/pballoon.h @@ -34,14 +34,23 @@ Structure defintions -------------------- */ -class CBalloonPickup : public CBasePickup +class CBalloonPickup : public CBaseRespawningPickup { public: + virtual void init(); + virtual void collect(class CPlayer *_player); protected: + virtual int getVisibilityRadius(); + virtual int getRespawnTime(); + + virtual void thinkPickup(int _frames); virtual void renderPickup(DVECTOR *_pos); +private: + int m_sin; + }; diff --git a/source/pickups/pbubmix.cpp b/source/pickups/pbubmix.cpp index c3b16d052..9866a1c93 100644 --- a/source/pickups/pbubmix.cpp +++ b/source/pickups/pbubmix.cpp @@ -76,6 +76,17 @@ void CBubbleMixturePickup::shutdown() CBasePickup::shutdown(); } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CBubbleMixturePickup::collect(class CPlayer *_player) +{ + CBasePickup::collect(_player); +} + /*---------------------------------------------------------------------- Function: Purpose: @@ -84,9 +95,8 @@ void CBubbleMixturePickup::shutdown() ---------------------------------------------------------------------- */ int bubmix_bobspeed=10; int bubmix_bobscale=3; -void CBubbleMixturePickup::think(int _frames) +void CBubbleMixturePickup::thinkPickup(int _frames) { - CBasePickup::think(_frames); m_sin=(m_sin+(_frames*bubmix_bobspeed))&4095; } @@ -96,32 +106,17 @@ void CBubbleMixturePickup::think(int _frames) Params: Returns: ---------------------------------------------------------------------- */ -void CBubbleMixturePickup::render() +void CBubbleMixturePickup::renderPickup(DVECTOR *_pos) { - DVECTOR ofs; SpriteBank *sprites; sFrameHdr *fh; int x,y; - ofs=getRenderOffset(); sprites=getSpriteBank(); fh=sprites->getFrameHeader(FRM__BUBBLEMIXTURE); - x=Pos.vx-ofs.vx-(fh->W/2); - y=Pos.vy-ofs.vy-(fh->H/2)+((msin(m_sin)*bubmix_bobscale)>>12); + x=_pos->vx-(fh->W/2); + y=_pos->vy-(fh->H/2)+((msin(m_sin)*bubmix_bobscale)>>12); sprites->printFT4(fh,x,y,0,0,PICKUPS_OT_POS); - - CBasePickup::render(); -} - -/*---------------------------------------------------------------------- - Function: - Purpose: - Params: - Returns: - ---------------------------------------------------------------------- */ -void CBubbleMixturePickup::collect(class CPlayer *_player) -{ - CBasePickup::collect(_player); } /*=========================================================================== diff --git a/source/pickups/pbubmix.h b/source/pickups/pbubmix.h index 8abe6362c..d4a7a4445 100644 --- a/source/pickups/pbubmix.h +++ b/source/pickups/pbubmix.h @@ -39,13 +39,16 @@ class CBubbleMixturePickup : public CBasePickup public: virtual void init(); virtual void shutdown(); - virtual void think(int _frames); - virtual void render(); virtual void collect(class CPlayer *_player); +protected: + virtual void thinkPickup(int _frames); + virtual void renderPickup(DVECTOR *_pos); + private: int m_sin; + }; diff --git a/source/pickups/pglasses.cpp b/source/pickups/pglasses.cpp index 04423715b..383ee66ac 100644 --- a/source/pickups/pglasses.cpp +++ b/source/pickups/pglasses.cpp @@ -55,21 +55,9 @@ Params: Returns: ---------------------------------------------------------------------- */ -void CGlassesPickup::render() +void CGlassesPickup::collect(class CPlayer *_player) { - DVECTOR ofs; - SpriteBank *sprites; - sFrameHdr *fh; - int x,y; - - ofs=getRenderOffset(); - sprites=getSpriteBank(); - fh=sprites->getFrameHeader(FRM__GLASSES); - x=Pos.vx-ofs.vx-(fh->W/2); - y=Pos.vy-ofs.vy-(fh->H/2); - sprites->printFT4(fh,x,y,0,0,PICKUPS_OT_POS); - - CBasePickup::render(); + CBasePickup::collect(_player); } /*---------------------------------------------------------------------- @@ -78,9 +66,17 @@ void CGlassesPickup::render() Params: Returns: ---------------------------------------------------------------------- */ -void CGlassesPickup::collect(class CPlayer *_player) +void CGlassesPickup::renderPickup(DVECTOR *_pos) { - CBasePickup::collect(_player); + SpriteBank *sprites; + sFrameHdr *fh; + int x,y; + + sprites=getSpriteBank(); + fh=sprites->getFrameHeader(FRM__GLASSES); + x=_pos->vx-(fh->W/2); + y=_pos->vy-(fh->H/2); + sprites->printFT4(fh,x,y,0,0,PICKUPS_OT_POS); } /*=========================================================================== diff --git a/source/pickups/pglasses.h b/source/pickups/pglasses.h index 2fa946324..16fad7a9c 100644 --- a/source/pickups/pglasses.h +++ b/source/pickups/pglasses.h @@ -37,10 +37,11 @@ class CGlassesPickup : public CBasePickup { public: - virtual void render(); - virtual void collect(class CPlayer *_player); +protected: + virtual void renderPickup(DVECTOR *_pos); + }; diff --git a/source/pickups/phealth.cpp b/source/pickups/phealth.cpp index 11d31f426..bddcb9848 100644 --- a/source/pickups/phealth.cpp +++ b/source/pickups/phealth.cpp @@ -76,6 +76,17 @@ void CBaseHealthPickup::shutdown() CBasePickup::shutdown(); } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CBaseHealthPickup::collect(class CPlayer *_player) +{ + CBasePickup::collect(_player); +} + /*---------------------------------------------------------------------- Function: Purpose: @@ -84,9 +95,8 @@ void CBaseHealthPickup::shutdown() ---------------------------------------------------------------------- */ int health_rotatespeed=200; int health_rotatescale=200; -void CBaseHealthPickup::think(int _frames) +void CBaseHealthPickup::thinkPickup(int _frames) { - CBasePickup::think(_frames); m_sin=(m_sin+(_frames*health_rotatespeed))&4095; } @@ -96,34 +106,16 @@ void CBaseHealthPickup::think(int _frames) Params: Returns: ---------------------------------------------------------------------- */ -void CBaseHealthPickup::render() +void CBaseHealthPickup::renderPickup(DVECTOR *_pos) { - DVECTOR ofs; SpriteBank *sprites; sFrameHdr *fh; - int x,y; int angle; - ofs=getRenderOffset(); sprites=getSpriteBank(); fh=sprites->getFrameHeader(getFrameNumber()); - x=Pos.vx-ofs.vx; - y=Pos.vy-ofs.vy; angle=((msin(m_sin)*health_rotatescale)>>12)&4095; - sprites->printRotatedScaledSprite(fh,x,y,4096,4096,angle,PICKUPS_OT_POS); - - CBasePickup::render(); -} - -/*---------------------------------------------------------------------- - Function: - Purpose: - Params: - Returns: - ---------------------------------------------------------------------- */ -void CBaseHealthPickup::collect(class CPlayer *_player) -{ - CBasePickup::collect(_player); + sprites->printRotatedScaledSprite(fh,_pos->vx,_pos->vy,4096,4096,angle,PICKUPS_OT_POS); } diff --git a/source/pickups/phealth.h b/source/pickups/phealth.h index 21c2a38e7..83b89995b 100644 --- a/source/pickups/phealth.h +++ b/source/pickups/phealth.h @@ -39,12 +39,13 @@ class CBaseHealthPickup : public CBasePickup public: virtual void init(); virtual void shutdown(); - virtual void think(int _frames); - virtual void render(); virtual void collect(class CPlayer *_player); protected: + virtual void thinkPickup(int _frames); + virtual void renderPickup(DVECTOR *_pos); + virtual int getHealthPoints()=0; virtual int getFrameNumber()=0; diff --git a/source/pickups/phelmet.cpp b/source/pickups/phelmet.cpp index 27aad5645..8e4d2be6c 100644 --- a/source/pickups/phelmet.cpp +++ b/source/pickups/phelmet.cpp @@ -55,7 +55,7 @@ Params: Returns: ---------------------------------------------------------------------- */ -void CGlassesPickup::collect(class CPlayer *_player) +void CHelmetPickup::collect(class CPlayer *_player) { CBasePickup::collect(_player); } @@ -66,7 +66,7 @@ void CGlassesPickup::collect(class CPlayer *_player) Params: Returns: ---------------------------------------------------------------------- */ -void CGlassesPickup::renderPickup(DVECTOR *_pos) +void CHelmetPickup::renderPickup(DVECTOR *_pos) { SpriteBank *sprites; sFrameHdr *fh; diff --git a/source/pickups/pickup.cpp b/source/pickups/pickup.cpp index a0b5f64db..bcd0e5b6b 100644 --- a/source/pickups/pickup.cpp +++ b/source/pickups/pickup.cpp @@ -55,6 +55,14 @@ #include "pickups\pshoes.h" #endif +#ifndef __PICKUPS_PBALLOON_H__ +#include "pickups\pballoon.h" +#endif + +#ifndef __PICKUPS_PHELMET_H__ +#include "pickups\phelmet.h" +#endif + #ifndef __PICKUPS_PQUEST_H__ #include "pickups\pquest.h" #endif @@ -119,9 +127,16 @@ void CBasePickup::shutdown() Params: Returns: ---------------------------------------------------------------------- */ +#include "pad\pads.h" void CBasePickup::think(int _frames) { CThing::think(_frames); + thinkPickup(_frames); + +if(PadGetDown(0)&PAD_L2) +{ + collect(NULL); +} } /*---------------------------------------------------------------------- @@ -132,6 +147,20 @@ void CBasePickup::think(int _frames) ---------------------------------------------------------------------- */ void CBasePickup::render() { + DVECTOR ofs,pos; + int visibilityRadius; + + CThing::render(); + + ofs=CLevel::getCameraPos(); + pos.vx=Pos.vx-ofs.vx; + pos.vy=Pos.vy-ofs.vy; + visibilityRadius=getVisibilityRadius(); + if(pos.vx>0-visibilityRadius&&pos.vx<512+visibilityRadius&& + pos.vy>0-visibilityRadius&&pos.vy<256+visibilityRadius) + { + renderPickup(&pos); + } /* DVECTOR ofs; int x,y; @@ -167,15 +196,67 @@ void CBasePickup::collect(class CPlayer *_player) delete this; } + + + /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ -DVECTOR CBasePickup::getRenderOffset() +void CBaseRespawningPickup::init() { - return CLevel::getCameraPos(); + CBasePickup::init(); + m_respawnTime=0; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CBaseRespawningPickup::think(int _frames) +{ + if(m_respawnTime==0) + { + CBasePickup::think(_frames); + } + else + { + m_respawnTime-=_frames; + if(m_respawnTime<0) + { + m_respawnTime=0; + } + } +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CBaseRespawningPickup::render() +{ + if(m_respawnTime==0|| + m_respawnTime<50&&!(m_respawnTime&3)) + { + CBasePickup::render(); + } +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CBaseRespawningPickup::collect(class CPlayer *_player) +{ + m_respawnTime=getRespawnTime(); } @@ -227,13 +308,21 @@ CBasePickup *createPickup(const PICKUP_TYPE _type,const DVECTOR *_pos) pickup=new ("ShoesPickup") CShoesPickup(); break; + case PICKUP__BALLOON: + pickup=new ("BalloonPickup") CBalloonPickup(); + break; + + case PICKUP__HELMET: + pickup=new ("HelmetPickup") CHelmetPickup(); + break; + case PICKUP__QUEST_ITEM__TEST: pickup=new ("QuestItemPickup") CTestQuestItemPickup(); break; default: ASSERT(!"UNKNOWN PICKUP TYPE"); - pickup=new ("Pickup") CBasePickup(); + pickup=NULL; break; } diff --git a/source/pickups/pickup.h b/source/pickups/pickup.h index f82fb65ca..5172dbd80 100644 --- a/source/pickups/pickup.h +++ b/source/pickups/pickup.h @@ -41,6 +41,8 @@ typedef enum PICKUP__BUBBLE_MIXTURE, PICKUP__GLASSES, PICKUP__SQUEAKY_SHOES, + PICKUP__BALLOON, + PICKUP__HELMET, PICKUP__QUEST_ITEM__TEST, // Needs to be one of these for each quest item ( I think ) } PICKUP_TYPE; @@ -65,10 +67,14 @@ protected: enum { PICKUPS_OT_POS=15, + DEFAULT_VISIBILITY_RADIUS=32, }; class SpriteBank *getSpriteBank() {return m_spriteBank;} - DVECTOR getRenderOffset(); + virtual int getVisibilityRadius() {return DEFAULT_VISIBILITY_RADIUS;} + + virtual void thinkPickup(int _Frames) {;} + virtual void renderPickup(DVECTOR *_pos)=0; private: class SpriteBank *m_spriteBank; @@ -76,6 +82,23 @@ private: }; +class CBaseRespawningPickup : public CBasePickup +{ +public: + virtual void init(); + virtual void think(int _frames); + virtual void render(); + + virtual void collect(class CPlayer *_player); + +protected: + virtual int getRespawnTime()=0; + +private: + int m_respawnTime; + +}; + /*---------------------------------------------------------------------- Globals ------- */ diff --git a/source/pickups/pjlammo.cpp b/source/pickups/pjlammo.cpp index 3fe79a5f6..f7bf4d22d 100644 --- a/source/pickups/pjlammo.cpp +++ b/source/pickups/pjlammo.cpp @@ -76,6 +76,17 @@ void CJellyLauncherAmmoPickup::shutdown() CBasePickup::shutdown(); } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CJellyLauncherAmmoPickup::collect(class CPlayer *_player) +{ + CBasePickup::collect(_player); +} + /*---------------------------------------------------------------------- Function: Purpose: @@ -86,9 +97,8 @@ int jlammo_rattlespeed=500; int jlammo_rattlescale=90; int jlammo_rattlecount=5; int jlammo_waitcount=10; -void CJellyLauncherAmmoPickup::think(int _frames) +void CJellyLauncherAmmoPickup::thinkPickup(int _frames) { - CBasePickup::think(_frames); m_rattle+=jlammo_rattlespeed*_frames; if(m_rattle>(jlammo_rattlecount+jlammo_waitcount)*4095)m_rattle=0; } @@ -99,19 +109,14 @@ void CJellyLauncherAmmoPickup::think(int _frames) Params: Returns: ---------------------------------------------------------------------- */ -void CJellyLauncherAmmoPickup::render() +void CJellyLauncherAmmoPickup::renderPickup(DVECTOR *_pos) { - DVECTOR ofs; SpriteBank *sprites; sFrameHdr *fh; - int x,y; int angle; - ofs=getRenderOffset(); sprites=getSpriteBank(); fh=sprites->getFrameHeader(FRM__JELLYAMMO); - x=Pos.vx-ofs.vx; - y=Pos.vy-ofs.vy; if(m_rattle<=jlammo_rattlecount*4095) { angle=((msin(m_rattle&4095)*jlammo_rattlescale)>>12)&4095; @@ -120,20 +125,7 @@ void CJellyLauncherAmmoPickup::render() { angle=0; } - sprites->printRotatedScaledSprite(fh,x,y,4096,4096,angle,PICKUPS_OT_POS); - - CBasePickup::render(); -} - -/*---------------------------------------------------------------------- - Function: - Purpose: - Params: - Returns: - ---------------------------------------------------------------------- */ -void CJellyLauncherAmmoPickup::collect(class CPlayer *_player) -{ - CBasePickup::collect(_player); + sprites->printRotatedScaledSprite(fh,_pos->vx,_pos->vy,4096,4096,angle,PICKUPS_OT_POS); } /*=========================================================================== diff --git a/source/pickups/pjlammo.h b/source/pickups/pjlammo.h index 10a018a7b..8a29284ca 100644 --- a/source/pickups/pjlammo.h +++ b/source/pickups/pjlammo.h @@ -39,11 +39,13 @@ class CJellyLauncherAmmoPickup : public CBasePickup public: virtual void init(); virtual void shutdown(); - virtual void think(int _frames); - virtual void render(); virtual void collect(class CPlayer *_player); +protected: + virtual void thinkPickup(int _frames); + virtual void renderPickup(DVECTOR *_pos); + private: int m_rattle; }; diff --git a/source/pickups/plife.cpp b/source/pickups/plife.cpp index dd9c47f81..f453380ed 100644 --- a/source/pickups/plife.cpp +++ b/source/pickups/plife.cpp @@ -76,6 +76,17 @@ void CLifePickup::shutdown() CBasePickup::shutdown(); } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CLifePickup::collect(class CPlayer *_player) +{ + CBasePickup::collect(_player); +} + /*---------------------------------------------------------------------- Function: Purpose: @@ -84,9 +95,8 @@ void CLifePickup::shutdown() ---------------------------------------------------------------------- */ int life_pulsespeed=205; int life_pulsescale=75; -void CLifePickup::think(int _frames) +void CLifePickup::thinkPickup(int _frames) { - CBasePickup::think(_frames); m_sin=(m_sin+(_frames*life_pulsespeed))&4095; } @@ -96,34 +106,19 @@ void CLifePickup::think(int _frames) Params: Returns: ---------------------------------------------------------------------- */ -void CLifePickup::render() +void CLifePickup::renderPickup(DVECTOR *_pos) { - DVECTOR ofs; SpriteBank *sprites; sFrameHdr *fh; int x,y; int size; - ofs=getRenderOffset(); sprites=getSpriteBank(); fh=sprites->getFrameHeader(FRM__PANTS); - x=Pos.vx-ofs.vx-(fh->W/2); - y=Pos.vy-ofs.vy-(fh->H/2); + x=_pos->vx-(fh->W/2); + y=_pos->vy-(fh->H/2); size=256+((msin(m_sin)*life_pulsescale)>>12); sprites->printFT4Scaled(fh,x,y,0,0,PICKUPS_OT_POS,size); - - CBasePickup::render(); -} - -/*---------------------------------------------------------------------- - Function: - Purpose: - Params: - Returns: - ---------------------------------------------------------------------- */ -void CLifePickup::collect(class CPlayer *_player) -{ - CBasePickup::collect(_player); } /*=========================================================================== diff --git a/source/pickups/plife.h b/source/pickups/plife.h index 66660f04a..47e6120d0 100644 --- a/source/pickups/plife.h +++ b/source/pickups/plife.h @@ -39,11 +39,13 @@ class CLifePickup : public CBasePickup public: virtual void init(); virtual void shutdown(); - virtual void think(int _frames); - virtual void render(); virtual void collect(class CPlayer *_player); +protected: + virtual void thinkPickup(int _frames); + virtual void renderPickup(DVECTOR *_pos); + private: int m_sin; diff --git a/source/pickups/pquest.cpp b/source/pickups/pquest.cpp index cbd3ddef6..b2eced0c3 100644 --- a/source/pickups/pquest.cpp +++ b/source/pickups/pquest.cpp @@ -86,6 +86,11 @@ void CBaseQuestItemPickup::shutdown() Params: Returns: ---------------------------------------------------------------------- */ +void CBaseQuestItemPickup::collect(class CPlayer *_player) +{ + CBasePickup::collect(_player); +} + int quest_pingframes=50; int quest_pingwaitframes=100; int quest_pingsize=100; @@ -94,9 +99,25 @@ int quest_pingg=255; int quest_pingb=0; int quest_pingsegments=16; int quest_transmode=1; -void CBaseQuestItemPickup::think(int _frames) +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int CBaseQuestItemPickup::getVisibilityRadius() +{ + return quest_pingsize; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CBaseQuestItemPickup::thinkPickup(int _frames) { - CBasePickup::think(_frames); m_pingFrame+=_frames; if(m_pingFrame>(quest_pingframes+quest_pingwaitframes)) { @@ -111,18 +132,16 @@ void CBaseQuestItemPickup::think(int _frames) Params: Returns: ---------------------------------------------------------------------- */ -void CBaseQuestItemPickup::render() +void CBaseQuestItemPickup::renderPickup(DVECTOR *_pos) { - DVECTOR ofs; SpriteBank *sprites; sFrameHdr *fh; int x,y; - ofs=getRenderOffset(); sprites=getSpriteBank(); fh=sprites->getFrameHeader(getFrameNumber()); - x=Pos.vx-ofs.vx-(fh->W/2); - y=Pos.vy-ofs.vy-(fh->H/2); + x=_pos->vx-(fh->W/2); + y=_pos->vy-(fh->H/2); sprites->printFT4(fh,x,y,0,0,PICKUPS_OT_POS); if(m_pingFramevx; + y=_pos->vy; radius=(quest_pingsize*m_pingFrame)/quest_pingframes; endr=(quest_pingr*(quest_pingframes-m_pingFrame))/quest_pingframes; endg=(quest_pingg*(quest_pingframes-m_pingFrame))/quest_pingframes; @@ -167,21 +186,7 @@ void CBaseQuestItemPickup::render() ft3->tpage=(quest_transmode<<5); setXY3(ft3,512,512,512,512,512,512); AddPrimToList(ft3,PICKUPS_OT_POS+1); - } - - CBasePickup::render(); -} - -/*---------------------------------------------------------------------- - Function: - Purpose: - Params: - Returns: - ---------------------------------------------------------------------- */ -void CBaseQuestItemPickup::collect(class CPlayer *_player) -{ - CBasePickup::collect(_player); } diff --git a/source/pickups/pquest.h b/source/pickups/pquest.h index 9f4d3aad9..f0629c962 100644 --- a/source/pickups/pquest.h +++ b/source/pickups/pquest.h @@ -39,12 +39,15 @@ class CBaseQuestItemPickup : public CBasePickup public: virtual void init(); virtual void shutdown(); - virtual void think(int _frames); - virtual void render(); virtual void collect(class CPlayer *_player); protected: + virtual int getVisibilityRadius(); + + virtual void thinkPickup(int _frames); + virtual void renderPickup(DVECTOR *_pos); + virtual int getFrameNumber()=0; private: diff --git a/source/pickups/pshoes.cpp b/source/pickups/pshoes.cpp index f2739dba5..8c44d27db 100644 --- a/source/pickups/pshoes.cpp +++ b/source/pickups/pshoes.cpp @@ -76,6 +76,17 @@ void CShoesPickup::shutdown() CBasePickup::shutdown(); } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CShoesPickup::collect(class CPlayer *_player) +{ + CBasePickup::collect(_player); +} + /*---------------------------------------------------------------------- Function: Purpose: @@ -85,9 +96,8 @@ void CShoesPickup::shutdown() int shoes_bobspeed=100; int shoes_bobscale=2; int shoes_seperation=4; -void CShoesPickup::think(int _frames) +void CShoesPickup::thinkPickup(int _frames) { - CBasePickup::think(_frames); m_sin=(m_sin+(_frames*shoes_bobspeed))&4095; } @@ -97,34 +107,19 @@ void CShoesPickup::think(int _frames) Params: Returns: ---------------------------------------------------------------------- */ -void CShoesPickup::render() +void CShoesPickup::renderPickup(DVECTOR *_pos) { - DVECTOR ofs; SpriteBank *sprites; sFrameHdr *fh; int x,y,yoff; - ofs=getRenderOffset(); sprites=getSpriteBank(); fh=sprites->getFrameHeader(FRM__SHOE); - x=Pos.vx-ofs.vx-(fh->W/2); - y=Pos.vy-ofs.vy-(fh->H/2); + x=_pos->vx-(fh->W/2); + y=_pos->vy-(fh->H/2); yoff=((msin(m_sin)*shoes_bobscale)>>12); sprites->printFT4(fh,x+shoes_seperation,y+yoff,0,0,PICKUPS_OT_POS); sprites->printFT4(fh,x-shoes_seperation,y-yoff,0,0,PICKUPS_OT_POS); - - CBasePickup::render(); -} - -/*---------------------------------------------------------------------- - Function: - Purpose: - Params: - Returns: - ---------------------------------------------------------------------- */ -void CShoesPickup::collect(class CPlayer *_player) -{ - CBasePickup::collect(_player); } /*=========================================================================== diff --git a/source/pickups/pshoes.h b/source/pickups/pshoes.h index d75c5a8ba..199acd519 100644 --- a/source/pickups/pshoes.h +++ b/source/pickups/pshoes.h @@ -39,13 +39,16 @@ class CShoesPickup : public CBasePickup public: virtual void init(); virtual void shutdown(); - virtual void think(int _frames); - virtual void render(); virtual void collect(class CPlayer *_player); +protected: + virtual void thinkPickup(int _frames); + virtual void renderPickup(DVECTOR *_pos); + private: int m_sin; + }; diff --git a/source/pickups/pspatula.cpp b/source/pickups/pspatula.cpp index 2f8437db2..6b8e2d66e 100644 --- a/source/pickups/pspatula.cpp +++ b/source/pickups/pspatula.cpp @@ -72,6 +72,17 @@ void CSpatulaPickup::shutdown() CBasePickup::shutdown(); } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CSpatulaPickup::collect(class CPlayer *_player) +{ + CBasePickup::collect(_player); +} + /*---------------------------------------------------------------------- Function: Purpose: @@ -83,9 +94,8 @@ int spat_maxglint=600; DVECTOR spat_gxy1={-5,30}; DVECTOR spat_gxy2={10,-5}; int spat_glintFrames[]={FRM__GLINT1,FRM__GLINT2,FRM__GLINT3,FRM__GLINT4}; -void CSpatulaPickup::think(int _frames) +void CSpatulaPickup::thinkPickup(int _frames) { - CBasePickup::think(_frames); m_glint+=_frames*spat_glintspeed; if(m_glint>spat_maxglint)m_glint-=spat_maxglint; } @@ -96,18 +106,16 @@ void CSpatulaPickup::think(int _frames) Params: Returns: ---------------------------------------------------------------------- */ -void CSpatulaPickup::render() +void CSpatulaPickup::renderPickup(DVECTOR *_pos) { - DVECTOR ofs; SpriteBank *sprites; sFrameHdr *fh; int x,y; - ofs=getRenderOffset(); sprites=getSpriteBank(); fh=sprites->getFrameHeader(FRM__SPATULA); - x=Pos.vx-ofs.vx-(fh->W/2); - y=Pos.vy-ofs.vy-(fh->H/2); + x=_pos->vx-(fh->W/2); + y=_pos->vy-(fh->H/2); sprites->printFT4(fh,x,y,0,0,PICKUPS_OT_POS); if(m_glint<=255) @@ -117,19 +125,6 @@ void CSpatulaPickup::render() y=y+(((spat_gxy2.vy-spat_gxy1.vy)*m_glint)>>8)+spat_gxy1.vy; sprites->printFT4(fh,x,y,0,0,PICKUPS_OT_POS-1); } - - CBasePickup::render(); -} - -/*---------------------------------------------------------------------- - Function: - Purpose: - Params: - Returns: - ---------------------------------------------------------------------- */ -void CSpatulaPickup::collect(class CPlayer *_player) -{ - CBasePickup::collect(_player); } /*=========================================================================== diff --git a/source/pickups/pspatula.h b/source/pickups/pspatula.h index c3da93547..e79931e07 100644 --- a/source/pickups/pspatula.h +++ b/source/pickups/pspatula.h @@ -39,11 +39,13 @@ class CSpatulaPickup : public CBasePickup public: virtual void init(); virtual void shutdown(); - virtual void think(int _frames); - virtual void render(); virtual void collect(class CPlayer *_player); +protected: + virtual void thinkPickup(int _frames); + virtual void renderPickup(DVECTOR *_pos); + private: int m_glint; }; diff --git a/users/paul/spongebob project/spongebob project.dsp b/users/paul/spongebob project/spongebob project.dsp index 7a079c0e3..14e308d0f 100644 --- a/users/paul/spongebob project/spongebob project.dsp +++ b/users/paul/spongebob project/spongebob project.dsp @@ -685,6 +685,14 @@ SOURCE=..\..\..\source\paul\scenesel.h # PROP Default_Filter "" # Begin Source File +SOURCE=..\..\..\source\pickups\pballoon.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\source\pickups\pballoon.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\pickups\pbubmix.cpp # End Source File # Begin Source File @@ -709,6 +717,14 @@ SOURCE=..\..\..\source\pickups\phealth.h # End Source File # Begin Source File +SOURCE=..\..\..\source\pickups\phelmet.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\source\pickups\phelmet.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\pickups\pickup.cpp # End Source File # Begin Source File