This commit is contained in:
Daveo 2001-06-18 16:31:24 +00:00
parent cbd3a6bf90
commit dc0966e06f
5 changed files with 126 additions and 80 deletions

View file

@ -19,6 +19,7 @@
#include "FX\FXAttachAnim.h" #include "FX\FXAttachAnim.h"
#include "FX\FXLaser.h"
#include "FX\FXThwack.h" #include "FX\FXThwack.h"
#include "FX\FXBubble.h" #include "FX\FXBubble.h"
#include "FX\FXfallingTile.h" #include "FX\FXfallingTile.h"
@ -39,7 +40,7 @@ CFXBaseAnim::sFXAnim FXWaterSplashData=
127,127,255, 127,127,255,
0, 0,
{0,0}, {0,0},
0, CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXAcidSplashData= CFXBaseAnim::sFXAnim FXAcidSplashData=
@ -50,7 +51,7 @@ CFXBaseAnim::sFXAnim FXAcidSplashData=
127,255,127, 127,255,127,
0, 0,
{0,0}, {0,0},
0 CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXLavaSplashData= CFXBaseAnim::sFXAnim FXLavaSplashData=
{ {
@ -60,7 +61,7 @@ CFXBaseAnim::sFXAnim FXLavaSplashData=
255,0,0, 255,0,0,
0, 0,
{0,0}, {0,0},
0 CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXOilSplashData= CFXBaseAnim::sFXAnim FXOilSplashData=
{ {
@ -81,7 +82,7 @@ CFXBaseAnim::sFXAnim FXExplodeData=
127,127,127, 127,127,127,
0, 0,
{0,0}, {0,0},
0 CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXFireData= CFXBaseAnim::sFXAnim FXFireData=
@ -92,7 +93,7 @@ CFXBaseAnim::sFXAnim FXFireData=
127,127,127, 127,127,127,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_TRANS, CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_TRANS,
{0,0}, {0,0},
0 CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXWaterDripData= CFXBaseAnim::sFXAnim FXWaterDripData=
@ -145,7 +146,7 @@ CFXBaseAnim::sFXAnim FXBubbleWaterData=
127,127,255, 127,127,255,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL, CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL,
{0,-1}, {0,-1},
CFX::FX_TYPE_SPLASH_WATER CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXBubbleAcidData= CFXBaseAnim::sFXAnim FXBubbleAcidData=
@ -156,7 +157,7 @@ CFXBaseAnim::sFXAnim FXBubbleAcidData=
0,255,0, 0,255,0,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL, CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL,
{0,-1}, {0,-1},
CFX::FX_TYPE_SPLASH_WATER CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXBubbleLavaData= CFXBaseAnim::sFXAnim FXBubbleLavaData=
{ {
@ -166,7 +167,7 @@ CFXBaseAnim::sFXAnim FXBubbleLavaData=
255,0,0, 255,0,0,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL, CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL,
{0,-1}, {0,-1},
CFX::FX_TYPE_SPLASH_WATER CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXBubbleOilData= CFXBaseAnim::sFXAnim FXBubbleOilData=
{ {
@ -176,7 +177,7 @@ CFXBaseAnim::sFXAnim FXBubbleOilData=
32,32,32, 32,32,32,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL, CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL,
{0,-1}, {0,-1},
CFX::FX_TYPE_SPLASH_WATER CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXWaterFountainData= CFXBaseAnim::sFXAnim FXWaterFountainData=
@ -187,7 +188,7 @@ CFXBaseAnim::sFXAnim FXWaterFountainData=
127,127,255, 127,127,255,
CFXBaseAnim::FXANIM_FLAG_LOOP, CFXBaseAnim::FXANIM_FLAG_LOOP,
{0,0}, {0,0},
0, CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXAcidFountainData= CFXBaseAnim::sFXAnim FXAcidFountainData=
{ {
@ -197,7 +198,7 @@ CFXBaseAnim::sFXAnim FXAcidFountainData=
0,255,0, 0,255,0,
CFXBaseAnim::FXANIM_FLAG_LOOP, CFXBaseAnim::FXANIM_FLAG_LOOP,
{0,0}, {0,0},
0, CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXLavaFountainData= CFXBaseAnim::sFXAnim FXLavaFountainData=
{ {
@ -207,7 +208,7 @@ CFXBaseAnim::sFXAnim FXLavaFountainData=
255,0,0, 255,0,0,
CFXBaseAnim::FXANIM_FLAG_LOOP, CFXBaseAnim::FXANIM_FLAG_LOOP,
{0,0}, {0,0},
0, CFX::FX_TYPE_NONE
}; };
CFXBaseAnim::sFXAnim FXOilFountainData= CFXBaseAnim::sFXAnim FXOilFountainData=
{ {
@ -217,22 +218,20 @@ CFXBaseAnim::sFXAnim FXOilFountainData=
32,32,32, 32,32,32,
CFXBaseAnim::FXANIM_FLAG_LOOP, CFXBaseAnim::FXANIM_FLAG_LOOP,
{0,0}, {0,0},
0, CFX::FX_TYPE_NONE
}; };
/*****************************************************************************/ /*****************************************************************************/
/*
CFXSteam *TestFXPtr=0; CFXLaser *TestFXPtr=0;
void TestFX(DVECTOR Pos) void TestFX(DVECTOR Pos,CThing *Parent)
{ {
if (!TestFXPtr) if (!TestFXPtr)
{ {
Pos.vx=256; TestFXPtr=(CFXLaser*)CFX::Create(CFX::FX_TYPE_LASER,Parent);
Pos.vy=128; // TestFXPtr->setLife(32);
TestFXPtr=(CFXSteam*)CFX::Create(CFX::FX_TYPE_STEAM,Pos); // TestFXPtr->setRelativeToMap(false);
TestFXPtr->setLife(32); // TestFXPtr=0;
TestFXPtr->setRelativeToMap(false);
TestFXPtr=0;
} }
else else
{ {
@ -240,18 +239,27 @@ void TestFX(DVECTOR Pos)
TestFXPtr=0; TestFXPtr=0;
} }
} }
*/
/*****************************************************************************/ /*****************************************************************************/
int FXType=(CFX::FX_TYPE)CFX::FX_TYPE_THWACK; /*
int FXType=(CFX::FX_TYPE)CFX::FX_TYPE_LASER;
#include "game\game.h" #include "game\game.h"
int OX=32;
int OY=32;
void TestFX(DVECTOR Pos,CThing *Parent) void TestFX(DVECTOR Pos,CThing *Parent)
{ {
//CFXAttachAnim *FX=(CFXAttachAnim*)CFX::Create((CFX::FX_TYPE)FXType,Pos); CFXLaser *FX=(CFXLaser*)CFX::Create((CFX::FX_TYPE)FXType,Pos);
// FX->setOrigin(Pos);
Pos.vx+=OX;
Pos.vy+=OY;
FX->setTarget(Pos);
// Parent->addChild(FX); // Parent->addChild(FX);
// TestFXPtr->setLife(32); // TestFXPtr->setLife(32);
CGameScene::dropHealth(Pos,0,0); // CGameScene::dropHealth(Pos,0,0);
} }
*/
/*****************************************************************************/ /*****************************************************************************/
CFX *CFX::Create(const FX_TYPE Type) CFX *CFX::Create(const FX_TYPE Type)
{ {
@ -261,6 +269,9 @@ CFX *NewFX;
if (!NewFX) if (!NewFX)
switch(Type) switch(Type)
{ {
case FX_TYPE_NONE:
ASSERT(!"FX NONE CANT BE CREATED!");
break;
case FX_TYPE_FALLINGTILE: case FX_TYPE_FALLINGTILE:
NewFX=new ("FXFalling Tile") CFXFallingTile(); NewFX=new ("FXFalling Tile") CFXFallingTile();
break; break;
@ -355,18 +366,12 @@ CFX *NewFX;
NewFX=new ("JellyFish Legs") CFXJellyFishLegs(); NewFX=new ("JellyFish Legs") CFXJellyFishLegs();
break; break;
case FX_TYPE_LASER:
NewFX=new ("FX Laser") CFXLaser();
break;
case FX_TYPE_LIGHTNING_BOLT: case FX_TYPE_LIGHTNING_BOLT:
case FX_TYPE_LIGHTNING_SHEET:
case FX_TYPE_LIGHTNING_BLAST:
case FX_TYPE_LIGHTNING_RADIAL:
case FX_TYPE_LIGHTNING_PROJECTILE:
case FX_TYPE_SHOCKWAVE:
case FX_TYPE_DAZE: case FX_TYPE_DAZE:
case FX_TYPE_CASCADE:
case FX_TYPE_CASCADE_SPLASH:
case FX_TYPE_FIREBALL:
case FX_TYPE_SMOKE: case FX_TYPE_SMOKE:
case FX_TYPE_GAS: case FX_TYPE_GAS:

View file

@ -13,10 +13,7 @@ class CFX : public CFXThing
public: public:
enum FX_TYPE enum FX_TYPE
{ {
FX_TYPE_JELLYFISH_LEGS, // zero also used to chain fx, so first must be unique type (I know what I mean) FX_TYPE_NONE=0,
FX_TYPE_FALLINGTILE,
FX_TYPE_EXPLODE,
FX_TYPE_SPLASH_WATER, FX_TYPE_SPLASH_WATER,
FX_TYPE_SPLASH_ACID, FX_TYPE_SPLASH_ACID,
@ -41,23 +38,19 @@ public:
FX_TYPE_THWACK, FX_TYPE_THWACK,
FX_TYPE_LIGHTNING_BOLT, FX_TYPE_LIGHTNING_BOLT,
FX_TYPE_LIGHTNING_SHEET,
FX_TYPE_LIGHTNING_BLAST,
FX_TYPE_LIGHTNING_RADIAL,
FX_TYPE_LIGHTNING_PROJECTILE,
FX_TYPE_SHOCKWAVE, FX_TYPE_SHOCKWAVE,
FX_TYPE_DAZE, FX_TYPE_DAZE,
FX_TYPE_CASCADE,
FX_TYPE_CASCADE_SPLASH,
FX_TYPE_FIREBALL,
FX_TYPE_STEAM, FX_TYPE_STEAM,
FX_TYPE_SMOKE, FX_TYPE_SMOKE,
FX_TYPE_GAS, FX_TYPE_GAS,
FX_TYPE_FLAMES, FX_TYPE_FLAMES,
FX_TYPE_JELLYFISH_LEGS,
FX_TYPE_FALLINGTILE,
FX_TYPE_EXPLODE,
FX_TYPE_NRG_BAR, FX_TYPE_NRG_BAR,
FX_TYPE_LASER,
FX_TYPE_MAX FX_TYPE_MAX
}; };
enum enum

View file

@ -80,7 +80,7 @@ void CFXBaseAnim::killFX()
{ {
setToShutdown(); setToShutdown();
// If has follow on effect, create it now // If has follow on effect, create it now
if (DataPtr->EndFX || canThink()) if (DataPtr->EndFX!=CFX::FX_TYPE_NONE && canThink())
{ {
CFX::Create((CFX::FX_TYPE)DataPtr->EndFX,getPos()); CFX::Create((CFX::FX_TYPE)DataPtr->EndFX,getPos());
} }

View file

@ -1,6 +1,6 @@
/*****************/ /*************/
/*** Thwack!!! ***/ /*** Laser ***/
/*****************/ /*************/
#include "system\global.h" #include "system\global.h"
#include <DStructs.h> #include <DStructs.h>
@ -12,37 +12,78 @@
#include "game\game.h" #include "game\game.h"
#include "gfx\otpos.h" #include "gfx\otpos.h"
#include "FX\FXThwack.h" #include "FX\FXLaser.h"
const int ThwackLife=12; int LaserWidth=1;
/*****************************************************************************/ /*****************************************************************************/
void CFXThwack::init(DVECTOR const &_Pos) void CFXLaser::init(DVECTOR const &_Pos)
{ {
CFX::init(_Pos); CFX::init(_Pos);
Life=ThwackLife; Life=-1;
OtPos=OTPOS__ACTOR_POS-1; R=G=B=255;
Angle=getRnd()&4095; Offset.vx=Offset.vy=0;
Scale=2048+1024+(getRnd()&2047); }
/*****************************************************************************/
void CFXLaser::setOffset(DVECTOR &Pos)
{
Offset=Pos;
}
/*****************************************************************************/
void CFXLaser::setTarget(DVECTOR &Pos)
{
Target=Pos;
}
/*****************************************************************************/
/*** Think *******************************************************************/
/*****************************************************************************/
void CFXLaser::think(int _frames)
{
CThing *Parent=getParent();
ASSERT(Parent);
Pos=Parent->getPos();
} }
/*****************************************************************************/ /*****************************************************************************/
/*** Render ******************************************************************/ /*** Render ******************************************************************/
/*****************************************************************************/ /*****************************************************************************/
void CFXLaser::render()
void CFXThwack::render()
{ {
DVECTOR RenderPos; DVECTOR renderPos0,renderPos1;
sOT *ThisOT=OtPtr+OtPos;
getFXRenderPos(RenderPos); getFXRenderPos(renderPos0);
if (!canRender() || !IsVisible) return; if (!canRender() || !IsVisible) return;
SpriteBank *SprBank=CGameScene::getSpriteBank(); calcRenderPos(Target,renderPos1);
POLY_FT4 *Ft4=SprBank->printRotatedScaledSprite(FRM__THWACK,RenderPos.vx,RenderPos.vy,Scale,Scale,Angle,OtPos); renderPos0.vx+=Offset.vx;
setSemiTrans(Ft4,1); renderPos0.vy+=Offset.vy;
Ft4->tpage|=1<<5; // Main Beam
int Col=(256/ThwackLife)*Life; LINE_F2 *L=GetPrimLF2();
setRGB0(Ft4,Col,Col,Col); L->x0=renderPos0.vx; L->y0=renderPos0.vy;
L->x1=renderPos1.vx; L->y1=renderPos1.vy;
setRGB0(L,R,G,B); addPrim(ThisOT,L);
// Surround
POLY_F4 *P=GetPrimF4();
P->x0=renderPos0.vx-LaserWidth; P->y0=renderPos0.vy-LaserWidth;
P->x1=renderPos0.vx+LaserWidth; P->y1=renderPos0.vy+LaserWidth;
P->x2=renderPos1.vx-LaserWidth; P->y2=renderPos1.vy-LaserWidth;
P->x3=renderPos1.vx+LaserWidth; P->y3=renderPos1.vy+LaserWidth;
setRGB0(P,R>>1,G>>1,B>>1); addPrim(ThisOT,P);
//
int W=renderPos1.vx-renderPos0.vx;
int H=renderPos1.vy-renderPos0.vy;
if (W<0) W=-W;
if (H<0) H=-H;
setCollisionCentreOffset(W>>1,H>>1);
setCollisionSize(W,H);
} }

View file

@ -1,21 +1,28 @@
/*****************/ /*************/
/*** Thwack!!! ***/ /*** Laser ***/
/*****************/ /*************/
#ifndef __FX_FX_THWACK_HEADER__ #ifndef __FX_FX_LASER_HEADER__
#define __FX_FX_THWACK_HEADER__ #define __FX_FX_LASER_HEADER__
#include "fx/fx.h" #include "fx/fx.h"
/*****************************************************************************/ /*****************************************************************************/
class CFXThwack : public CFX class CFXLaser : public CFX
{ {
public: public:
virtual void init(DVECTOR const &Pos); void init(DVECTOR const &Pos);
virtual void render(); void think(int _frames);
void render();
void setOffset(DVECTOR &Pos);
void setTarget(DVECTOR &Pos);
void setRGB(u8 r,u8 g,u8 b) {R=r; G=g; B=g;}
protected: protected:
u16 Angle,Scale; DVECTOR Offset,Target;
u8 R,G,B;
}; };
#endif #endif