This commit is contained in:
Paul 2001-02-21 22:33:17 +00:00
parent d9de1e680f
commit d27bae5fd0
25 changed files with 392 additions and 190 deletions

View File

@ -145,9 +145,11 @@ paul_src := paul \
scenesel
pickups_src := pickup \
pballoon \
pbubmix \
pglasses \
phealth \
phelmet \
pjlammo \
plife \
pquest \

View File

@ -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

View File

@ -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

View File

@ -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);
}
/*===========================================================================

View File

@ -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;
};

View File

@ -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);
}
/*===========================================================================

View File

@ -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;
};

View File

@ -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);
}
/*===========================================================================

View File

@ -37,10 +37,11 @@
class CGlassesPickup : public CBasePickup
{
public:
virtual void render();
virtual void collect(class CPlayer *_player);
protected:
virtual void renderPickup(DVECTOR *_pos);
};

View File

@ -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);
}

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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
------- */

View File

@ -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);
}
/*===========================================================================

View File

@ -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;
};

View File

@ -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);
}
/*===========================================================================

View File

@ -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;

View File

@ -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_pingFrame<quest_pingframes)
@ -135,8 +154,8 @@ void CBaseQuestItemPickup::render()
POLY_G3 *g3;
POLY_FT3 *ft3;
x=Pos.vx-ofs.vx;
y=Pos.vy-ofs.vy;
x=_pos->vx;
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);
}

View File

@ -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:

View File

@ -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);
}
/*===========================================================================

View File

@ -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;
};

View File

@ -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);
}
/*===========================================================================

View File

@ -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;
};

View File

@ -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