diff --git a/Graphics/sfx/+thwack.bmp b/Graphics/sfx/+thwack.bmp new file mode 100644 index 000000000..fad3788df Binary files /dev/null and b/Graphics/sfx/+thwack.bmp differ diff --git a/makefile.gaz b/makefile.gaz index 8512e1e63..b53d92c83 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -169,6 +169,7 @@ fx_src := fx \ fxbaseemitter \ fxattachanim \ fxbubble \ + fxthwack \ fxnrgbar \ fxjfish \ fxfallingtile \ diff --git a/makefile.gfx b/makefile.gfx index fa0567cbc..34e5ed551 100644 --- a/makefile.gfx +++ b/makefile.gfx @@ -160,12 +160,10 @@ SFX_GFX_DIR := $(GRAF_DIR)/sfx SFX_GFX := +smoke.bmp \ +explosion0001.bmp +explosion0002.bmp +explosion0003.bmp +explosion0004.bmp +explosion0005.bmp +explosion0006.bmp +explosion0007.bmp \ +splash001.bmp +splash002.bmp +splash003.bmp +splash004.bmp +splash005.bmp +splash006.bmp \ - +Star0001.bmp +Star0002.bmp +Star0003.bmp \ - +Star20001.bmp +Star20002.bmp +Star20003.bmp \ +fire01.bmp +fire02.bmp +fire03.bmp +fire04.bmp +fire05.bmp +fire06.bmp \ +drip.bmp +bubblepop.bmp \ +Gush000.bmp +Gush001.bmp +Gush002.bmp \ - +leg.bmp + +leg.bmp +thwack.bmp SFX_GFX_IN := $(foreach FILE,$(SFX_GFX),$(SFX_GFX_DIR)/$(FILE)) diff --git a/source/fx/fx.cpp b/source/fx/fx.cpp index 049b50c0c..6263a0fa1 100644 --- a/source/fx/fx.cpp +++ b/source/fx/fx.cpp @@ -19,6 +19,7 @@ #include "FX\FXAttachAnim.h" +#include "FX\FXThwack.h" #include "FX\FXBubble.h" #include "FX\FXfallingTile.h" #include "FX\FXSteam.h" @@ -241,11 +242,11 @@ void TestFX(DVECTOR Pos) } */ /*****************************************************************************/ -int FXType=(CFX::FX_TYPE)CFX::FX_TYPE_FOUNTAIN_WATER; +int FXType=(CFX::FX_TYPE)CFX::FX_TYPE_THWACK; void TestFX(DVECTOR Pos,CThing *Parent) { CFXAttachAnim *FX=(CFXAttachAnim*)CFX::Create((CFX::FX_TYPE)FXType,Pos); - Parent->addChild(FX); +// Parent->addChild(FX); // TestFXPtr->setLife(32); } @@ -340,6 +341,10 @@ CFX *NewFX; NewFX->setData(&FXOilFountainData); break; + case FX_TYPE_THWACK: + NewFX=new ("FXThwack") CFXThwack(); + break; + case FX_TYPE_NRG_BAR: NewFX=new ("NRG Bar") CFXNRGBar(); break; diff --git a/source/fx/fx.h b/source/fx/fx.h index adcfd3ccc..b5ddcda36 100644 --- a/source/fx/fx.h +++ b/source/fx/fx.h @@ -38,6 +38,8 @@ public: FX_TYPE_FOUNTAIN_LAVA, FX_TYPE_FOUNTAIN_OIL, + FX_TYPE_THWACK, + FX_TYPE_LIGHTNING_BOLT, FX_TYPE_LIGHTNING_SHEET, FX_TYPE_LIGHTNING_BLAST, diff --git a/source/fx/fxthwack.cpp b/source/fx/fxthwack.cpp index 86915ccbb..e3eaa3ff4 100644 --- a/source/fx/fxthwack.cpp +++ b/source/fx/fxthwack.cpp @@ -1,6 +1,6 @@ -/***********************/ -/*** Anim Base Class ***/ -/***********************/ +/*****************/ +/*** Thwack!!! ***/ +/*****************/ #include "system\global.h" #include @@ -10,40 +10,39 @@ #include #include "level\level.h" #include "game\game.h" +#include "gfx\otpos.h" -#include "FX\FXBaseAnim.h" -#include "FX\FXAttachAnim.h" +#include "FX\FXThwack.h" +const int ThwackLife=12; /*****************************************************************************/ -void CFXAttachAnim::init(DVECTOR const &_Pos) +void CFXThwack::init(DVECTOR const &_Pos) { - CFXBaseAnim::init(_Pos); + CFX::init(_Pos); + Life=ThwackLife; + OtPos=OTPOS__ACTOR_POS-1; + Angle=getRnd()&4095; + Scale=2048+1024+(getRnd()&2047); } /*****************************************************************************/ /*** Render ******************************************************************/ /*****************************************************************************/ -void CFXAttachAnim::render() + +void CFXThwack::render() { - CFXBaseAnim::render(); +DVECTOR RenderPos; + + getFXRenderPos(RenderPos); if (!canRender() || !IsVisible) return; -CThing *Parent=getParent(); - ASSERT(Parent); - -DVECTOR &ParentPos=Parent->getRenderPos(); -int FrameW=Frame->x1-Frame->x0; -int HalfW=FrameW>>1; - - Frame->x0=ParentPos.vx-HalfW; - Frame->y0=ParentPos.vy; - Frame->x1=ParentPos.vx+HalfW; - Frame->y1=ParentPos.vy; - - int BY=Frame->y2-Frame->y0; -// setCollisionCentreOffset(0,BY>>1); - setCollisionSize(FrameW,BY*2); +SpriteBank *SprBank=CGameScene::getSpriteBank(); +POLY_FT4 *Ft4=SprBank->printRotatedScaledSprite(FRM__THWACK,RenderPos.vx,RenderPos.vy,Scale,Scale,Angle,OtPos); + setSemiTrans(Ft4,1); + Ft4->tpage|=1<<5; +int Col=(256/ThwackLife)*Life; + setRGB0(Ft4,Col,Col,Col); } diff --git a/source/fx/fxthwack.h b/source/fx/fxthwack.h index 92080df13..ff3370545 100644 --- a/source/fx/fxthwack.h +++ b/source/fx/fxthwack.h @@ -1,22 +1,21 @@ -/***********************/ -/*** Anim Base Class ***/ -/***********************/ +/*****************/ +/*** Thwack!!! ***/ +/*****************/ -#ifndef __FX_FX_ATTACH_ANIM_HEADER__ -#define __FX_FX_ATTACH_ANIM_HEADER__ +#ifndef __FX_FX_THWACK_HEADER__ +#define __FX_FX_THWACK_HEADER__ #include "fx/fx.h" -#include "fx/fxbaseAnim.h" /*****************************************************************************/ -class CFXAttachAnim : public CFXBaseAnim +class CFXThwack : public CFX { public: virtual void init(DVECTOR const &Pos); virtual void render(); protected: - + u16 Angle,Scale; }; #endif