This commit is contained in:
Charles 2001-06-07 16:33:19 +00:00
parent 3a10910187
commit 07c358c793
11 changed files with 156 additions and 13 deletions

View File

@ -317,7 +317,11 @@ triggers_src := trigger \
thazwalk \
tsemit \
tsswitch \
tgbowl
tgbowl \
twdripemit \
tadripemit \
todripemit \
tldripemit
utils_src := utils \
sincos \

View File

@ -43,7 +43,7 @@ CFXBaseAnim::sFXAnim FXAcidSplashData=
ONE,
FRM__SPLASH001,FRM__SPLASH006,
1,
0,255,0,
127,255,127,
0,
{0,0},
0
@ -63,7 +63,7 @@ CFXBaseAnim::sFXAnim FXOilSplashData=
ONE,
FRM__SPLASH001,FRM__SPLASH006,
1,
0,0,0,
64,64,64,
0,
{0,0},
CFX::FX_TYPE_EXPLODE,
@ -107,30 +107,30 @@ CFXBaseAnim::sFXAnim FXAcidDripData=
ONE,
FRM__DRIP,FRM__DRIP,
1,
127,127,255,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL | CFXBaseAnim::FXANIM_FLAG_HAS_GRAVITY,
127,255,127,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL | CFXBaseAnim::FXANIM_FLAG_HAS_GRAVITY | CFXBaseAnim::FXANIM_FLAG_INJURE_PLAYER,
{0,1},
CFX::FX_TYPE_SPLASH_WATER
CFX::FX_TYPE_SPLASH_ACID
};
CFXBaseAnim::sFXAnim FXLavaDripData=
{
ONE,
FRM__DRIP,FRM__DRIP,
1,
127,127,255,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL | CFXBaseAnim::FXANIM_FLAG_HAS_GRAVITY,
255,127,127,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL | CFXBaseAnim::FXANIM_FLAG_HAS_GRAVITY | CFXBaseAnim::FXANIM_FLAG_INJURE_PLAYER,
{0,1},
CFX::FX_TYPE_SPLASH_WATER
CFX::FX_TYPE_SPLASH_LAVA
};
CFXBaseAnim::sFXAnim FXOilDripData=
{
ONE,
FRM__DRIP,FRM__DRIP,
1,
127,127,255,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL | CFXBaseAnim::FXANIM_FLAG_HAS_GRAVITY,
64,64,64,
CFXBaseAnim::FXANIM_FLAG_LOOP | CFXBaseAnim::FXANIM_FLAG_COLLIDE_KILL | CFXBaseAnim::FXANIM_FLAG_HAS_GRAVITY | CFXBaseAnim::FXANIM_FLAG_INJURE_PLAYER,
{0,1},
CFX::FX_TYPE_SPLASH_WATER
CFX::FX_TYPE_SPLASH_OIL
};
// Bubble
CFXBaseAnim::sFXAnim FXBubbleWaterData=
@ -407,3 +407,8 @@ void CFX::getFXRenderPos(DVECTOR &Pos)
Pos=getPos();
}
}
/*****************************************************************************/
void CFX::collidedWith(CThing *_thisThing)
{
}

View File

@ -81,6 +81,7 @@ virtual void killFX() {setToShutdown();}
virtual void toggleVisible() {IsVisible = !IsVisible;}
protected:
virtual void collidedWith(CThing *_thisThing);
s32 OtPos;
s16 Life;

View File

@ -13,6 +13,10 @@
#include "level\layercollision.h"
#include "FX\FXBaseAnim.h"
#ifndef __PLAYER_PLAYER_H__
#include "player\player.h"
#endif
/*****************************************************************************/
void CFXBaseAnim::init(DVECTOR const &_Pos)
@ -108,3 +112,32 @@ POLY_FT4 *Ft4=SprBank->printRotatedScaledSprite(renderFrame,RenderPos.vx,RenderP
setShadeTex(Ft4,0);
setRGB0(Ft4,DataPtr->R,DataPtr->G,DataPtr->B);
}
/*****************************************************************************/
void CFXBaseAnim::collidedWith(CThing *_thisThing)
{
switch(_thisThing->getThingType())
{
case TYPE_PLAYER:
{
CPlayer *player = (CPlayer *) _thisThing;
if ( !player->isRecoveringFromHit() )
{
if ( DataPtr->Flags & FXANIM_FLAG_KILL_PLAYER )
{
player->takeDamage( DAMAGE__KILL_OUTRIGHT );
}
else if ( DataPtr->Flags & FXANIM_FLAG_INJURE_PLAYER )
{
player->takeDamage( DAMAGE__HIT_ENEMY );
}
}
break;
}
default:
break;
}
}

View File

@ -26,6 +26,8 @@ public:
FXANIM_FLAG_LOOP =1<<0,
FXANIM_FLAG_COLLIDE_KILL =1<<1,
FXANIM_FLAG_HAS_GRAVITY =1<<2,
FXANIM_FLAG_INJURE_PLAYER =1<<3,
FXANIM_FLAG_KILL_PLAYER =1<<4,
};
virtual void init(DVECTOR const &Pos);
@ -33,6 +35,7 @@ virtual void shutdown();
virtual void think(int _frames);
virtual void render();
virtual void killFX();
virtual int canCollide() {return true;}
void setData(void *Data) {DataPtr=(sFXAnim*)Data;}
@ -42,6 +45,8 @@ virtual void SetScaleY(int S) {CurrentScaleY=S;}
virtual void SetHeading(int H) {CurrentHeading=H;}
protected:
virtual void collidedWith(CThing *_thisThing);
sFXAnim *DataPtr;
s16 VelY;
s16 MaxFrame;

View File

@ -515,6 +515,17 @@ DVECTOR const &CamPos=CLevel::getCameraPos();
thing1=thing1->m_nextCollisionThing;
}
// Player -> Effect collision
thing1=s_CollisionLists[CThing::TYPE_FX];
while(thing1)
{
if(thing1->checkCollisionAgainst(playerThing, _frames))
{
thing1->collidedWith(playerThing);
}
thing1=thing1->m_nextCollisionThing;
}
// Player -> Friend collision
thing1=s_CollisionLists[CThing::TYPE_NPC];
while(thing1)

View File

@ -91,6 +91,22 @@
#include "triggers\tgbowl.h"
#endif
#ifndef __TRIGGERS_TWDRIPEMIT_H__
#include "triggers\twdripemit.h"
#endif
#ifndef __TRIGGERS_TADRIPEMIT_H__
#include "triggers\tadripemit.h"
#endif
#ifndef __TRIGGERS_TODRIPEMIT_H__
#include "triggers\todripemit.h"
#endif
#ifndef __TRIGGERS_TLDRIPEMIT_H__
#include "triggers\tldripemit.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
@ -184,6 +200,26 @@ CTrigger *trigger;
trigger=(CSteamEmitterTrigger*)new("SteamEmitterTrigger") CSteamEmitterTrigger();
break;
// Water drip emitter
case TRIGGER_WATER_DRIP_EMITTER:
trigger=(CWaterDripEmitterTrigger*)new("WaterDripEmitterTrigger") CWaterDripEmitterTrigger();
break;
// Acid drip emitter
case TRIGGER_ACID_DRIP_EMITTER:
trigger=(CAcidDripEmitterTrigger*)new("AcidDripEmitterTrigger") CAcidDripEmitterTrigger();
break;
// Oil drip emitter
case TRIGGER_OIL_DRIP_EMITTER:
trigger=(COilDripEmitterTrigger*)new("OilDripEmitterTrigger") COilDripEmitterTrigger();
break;
// Lava drip emitter
case TRIGGER_LAVA_DRIP_EMITTER:
trigger=(CLavaDripEmitterTrigger*)new("LavaDripEmitterTrigger") CLavaDripEmitterTrigger();
break;
case TRIGGER_PLATFORM:
trigger = (CPlatformTrigger*)new ("PlatformTrigger") CPlatformTrigger();
break;

View File

@ -41,6 +41,10 @@ enum TRIGGER_TYPE
TRIGGER_BUBBLE_GEYSER_EMITTER,
TRIGGER_STEAM_EMITTER,
TRIGGER_GARY_BOWL,
TRIGGER_WATER_DRIP_EMITTER,
TRIGGER_ACID_DRIP_EMITTER,
TRIGGER_OIL_DRIP_EMITTER,
TRIGGER_LAVA_DRIP_EMITTER,
// Code based triggers
TRIGGER_PLATFORM,

View File

@ -146,6 +146,10 @@ IntermittentDownFlameEmitter=14
StreamGeyser=15
SteamEmitter=16
GaryBowl=17
WaterDripEmitter=18
AcidDripEmitter=19
OilDripEmitter=20
LavaDripEmitter=21
################################################
# FX

View File

@ -41,4 +41,12 @@ HasBox=1
[GaryGoRight]
[GaryBowl]
[GaryBowl]
[WaterDripEmitter]
[AcidDripEmitter]
[OilDripEmitter]
[LavaDripEmitter]

View File

@ -2069,6 +2069,14 @@ SOURCE=..\..\..\source\thing\thing.h
# PROP Default_Filter ""
# Begin Source File
SOURCE=..\..\..\source\triggers\tadripemit.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\tadripemit.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\tbemit.cpp
# End Source File
# Begin Source File
@ -2165,6 +2173,14 @@ SOURCE=..\..\..\source\triggers\tifemit.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\tldripemit.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\tldripemit.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\tlevexit.cpp
# End Source File
# Begin Source File
@ -2181,6 +2197,14 @@ SOURCE=..\..\..\source\triggers\tlook.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\todripemit.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\todripemit.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\tplatfrm.cpp
# End Source File
# Begin Source File
@ -2235,6 +2259,14 @@ SOURCE=..\..\..\source\triggers\twater.cpp
SOURCE=..\..\..\source\triggers\twater.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\twdripemit.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\triggers\twdripemit.h
# End Source File
# End Group
# Begin Group "utils"