diff --git a/makefile.gaz b/makefile.gaz index 43f77f387..85b0a1b40 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -152,7 +152,8 @@ hazard_src := hazard \ hrwheel \ hpswitch \ hrckshrd \ - hinert + hinert \ + hcswitch fx_src := fx \ fxbaseanim \ @@ -303,7 +304,8 @@ triggers_src := trigger \ tifemit \ tggleft \ tggright \ - tgstop + tgstop \ + thazard utils_src := utils \ sincos \ diff --git a/source/fx/fx.cpp b/source/fx/fx.cpp index fc5151f1b..f132c19b6 100644 --- a/source/fx/fx.cpp +++ b/source/fx/fx.cpp @@ -82,7 +82,7 @@ CFXBaseAnim::sFXAnim FXExplodeData= CFXBaseAnim::sFXAnim FXFireData= { - ONE << 1, + ONE, FRM__FIRE01,FRM__FIRE06, 1, 127,127,127, diff --git a/source/fx/fxbaseanim.cpp b/source/fx/fxbaseanim.cpp index 63a1613ee..c35e44447 100644 --- a/source/fx/fxbaseanim.cpp +++ b/source/fx/fxbaseanim.cpp @@ -19,7 +19,8 @@ void CFXBaseAnim::init(DVECTOR const &_Pos) { CFX::init(_Pos); CurrentFrame=0; - CurrentScale=DataPtr->Scale; + CurrentScaleX=CurrentScaleY=DataPtr->Scale; + CurrentHeading = 0; MaxFrame=((DataPtr->EndFrame-DataPtr->StartFrame)<FrameShift)-1; if (DataPtr->Flags & FXANIM_FLAG_LOOP) { // Looping Anim, so let it live forever! @@ -100,7 +101,8 @@ DVECTOR RenderPos; SpriteBank *SprBank=CGameScene::getSpriteBank(); -POLY_FT4 *Ft4=SprBank->printFT4Scaled(renderFrame,RenderPos.vx,RenderPos.vy,0,0,OtPos*0,CurrentScale>>4); +//POLY_FT4 *Ft4=SprBank->printFT4Scaled(renderFrame,RenderPos.vx,RenderPos.vy,0,0,OtPos*0,CurrentScale>>4); +POLY_FT4 *Ft4=SprBank->printRotatedScaledSprite(renderFrame,RenderPos.vx,RenderPos.vy,CurrentScaleX,CurrentScaleY,CurrentHeading,OtPos*0); Ft4->u1--; Ft4->u3--; Ft4->v2--; Ft4->v3--; setShadeTex(Ft4,0); diff --git a/source/fx/fxbaseanim.h b/source/fx/fxbaseanim.h index a15e94d15..f052ab600 100644 --- a/source/fx/fxbaseanim.h +++ b/source/fx/fxbaseanim.h @@ -36,7 +36,10 @@ virtual void killFX(); void setData(void *Data) {DataPtr=(sFXAnim*)Data;} -virtual void SetScale(int S) {CurrentScale=S;} +virtual void SetScale(int S) {CurrentScaleX=CurrentScaleY=S;} +virtual void SetScaleX(int S) {CurrentScaleX=S;} +virtual void SetScaleY(int S) {CurrentScaleY=S;} +virtual void SetHeading(int H) {CurrentHeading=H;} protected: sFXAnim *DataPtr; @@ -44,7 +47,9 @@ protected: s16 MaxFrame; s16 CurrentFrame; u16 renderFrame; - s16 CurrentScale; + s32 CurrentScaleX; + s32 CurrentScaleY; + s16 CurrentHeading; }; #endif diff --git a/source/fx/fxbubble.cpp b/source/fx/fxbubble.cpp index 5249dc9e6..f3d621c58 100644 --- a/source/fx/fxbubble.cpp +++ b/source/fx/fxbubble.cpp @@ -21,7 +21,7 @@ void CFXBubble::init(DVECTOR const &_Pos) CFXBaseAnim::init(_Pos); Life=32+getRndRange(63); VelY=-getRndRange(4)-1; - CurrentScale=getRndRange(DataPtr->Scale/2)+(DataPtr->Scale/2); + CurrentScaleX=CurrentScaleY=getRndRange(DataPtr->Scale/2)+(DataPtr->Scale/2); Die=0; XIdx=getRnd()&15; diff --git a/source/hazard/hazard.cpp b/source/hazard/hazard.cpp index 5ba327e1c..c7d08c8fd 100644 --- a/source/hazard/hazard.cpp +++ b/source/hazard/hazard.cpp @@ -115,6 +115,10 @@ #include "hazard\hinert.h" #endif +#ifndef __HAZARD_HCSWITCH_H__ +#include "hazard\hcswitch.h" +#endif + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -141,6 +145,7 @@ CNpcHazard::NPC_HAZARD_UNIT_TYPE CNpcHazard::mapEditConvertTable[NPC_HAZARD_TYPE NPC_PRESSURE_SWITCH_HAZARD, NPC_ROCKSHARD_HAZARD, NPC_INERT_HAZARD, + NPC_CONVEYOR_SWITCH_HAZARD, }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -279,6 +284,12 @@ CNpcHazard *hazard; break; } + case NPC_CONVEYOR_SWITCH_HAZARD: + { + hazard = new ("conveyor switch hazard") CNpcConveyorSwitchHazard; + break; + } + default: { hazard = NULL; diff --git a/source/hazard/hazard.h b/source/hazard/hazard.h index 313ebe6cb..fb3a41e80 100644 --- a/source/hazard/hazard.h +++ b/source/hazard/hazard.h @@ -60,6 +60,7 @@ public: NPC_PRESSURE_SWITCH_HAZARD, NPC_ROCKSHARD_HAZARD, NPC_INERT_HAZARD, + NPC_CONVEYOR_SWITCH_HAZARD, NPC_HAZARD_TYPE_MAX, }; @@ -77,6 +78,7 @@ public: void setWaypointPtr( u16 *newPtr ) {m_npcPath.setWaypointPtr( newPtr );} void setWaypointCount( u8 newCount ) {m_npcPath.setWaypointCount( newCount );} virtual void setRespawnRate( s16 newRespawnRate ) {m_respawnRate=newRespawnRate;} + virtual void trigger() {} static NPC_HAZARD_UNIT_TYPE getTypeFromMapEdit( u16 newType ); static CNpcHazard *Create(int Type); diff --git a/source/triggers/tfemit.cpp b/source/triggers/tfemit.cpp index 67879c138..af1266da7 100644 --- a/source/triggers/tfemit.cpp +++ b/source/triggers/tfemit.cpp @@ -26,7 +26,27 @@ void CFlameEmitterTrigger::setPositionAndSize(int _x,int _y,int _w,int _h) { CTrigger::setPositionAndSize( _x, _y, _w, _h ); - m_effect = CFX::Create( CFX::FX_TYPE_FLAMES, Pos ); + m_effect = CFX::Create( CFX::FX_TYPE_FLAMES, Pos ); + CFXBaseAnim *m_animEffect = (CFXBaseAnim *) m_effect; + m_animEffect->SetScaleX( ( _w * ONE ) >> 5 ); + m_animEffect->SetScaleY( ( _h * ONE ) >> 5 ); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CFlameEmitterTrigger::setHeading(int newHeading) +{ + CFXBaseAnim *m_animEffect = (CFXBaseAnim *) m_effect; + m_animEffect->SetHeading( newHeading ); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void CFlameEmitterTrigger::setSize( int _w, int _h ) +{ + CFXBaseAnim *m_animEffect = (CFXBaseAnim *) m_effect; + m_animEffect->SetScaleX( ( _w * ONE ) >> 5 ); + m_animEffect->SetScaleY( ( _h * ONE ) >> 5 ); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/source/triggers/tfemit.h b/source/triggers/tfemit.h index 4751c985c..4ded8679b 100644 --- a/source/triggers/tfemit.h +++ b/source/triggers/tfemit.h @@ -27,6 +27,7 @@ #endif #include "fx\fx.h" +#include "fx\fxbaseanim.h" /* Std Lib ------- */ @@ -43,6 +44,8 @@ class CFlameEmitterTrigger : public CTrigger { public: virtual void setPositionAndSize(int _x,int _y,int _w,int _h); + void setHeading(int newHeading); + void setSize( int _w, int _h ); protected: virtual void collidedWith(CThing *_thisThing); CFX *m_effect; diff --git a/source/triggers/tplatfrm.cpp b/source/triggers/tplatfrm.cpp index 046dd8596..a01bf6a68 100644 --- a/source/triggers/tplatfrm.cpp +++ b/source/triggers/tplatfrm.cpp @@ -2,7 +2,7 @@ tplatfrm.cpp - Author: PKG + Author: CRB Created: Project: Spongebob Purpose: diff --git a/source/triggers/trigger.cpp b/source/triggers/trigger.cpp index 6adf52e5a..59c98b134 100644 --- a/source/triggers/trigger.cpp +++ b/source/triggers/trigger.cpp @@ -67,6 +67,10 @@ #include "triggers\tgstop.h" #endif +#ifndef __TRIGGERS_THAZARD_H__ +#include "triggers\thazard.h" +#endif + #ifndef __GAME_GAME_H__ #include "game\game.h" #endif @@ -135,6 +139,8 @@ CTrigger *trigger; break; case TRIGGER_INTERMITTENTFLAMEEMITTER: + case TRIGGER_INTERMITTENTLEFTFLAMEEMITTER: + case TRIGGER_INTERMITTENTDOWNFLAMEEMITTER: trigger=(CIntermittentFlameEmitterTrigger*)new( "IntermittentFlameEmitterTrigger") CIntermittentFlameEmitterTrigger(); break; @@ -146,6 +152,11 @@ CTrigger *trigger; case TRIGGER_PLATFORM: trigger = (CPlatformTrigger*)new ("PlatformTrigger") CPlatformTrigger(); break; + + case TRIGGER_HAZARD: + trigger = (CHazardTrigger*)new("HazardTrigger") CHazardTrigger(); + break; + default: trigger=NULL; } @@ -161,9 +172,35 @@ CTrigger *trigger; CTrigger *CTrigger::Create(sThingTrigger *ThisTrigger) { CTrigger *trigger=Create(ThisTrigger->Type); + trigger->setPositionAndSize(ThisTrigger->Pos.X<<4,ThisTrigger->Pos.Y<<4,ThisTrigger->Width<<4,ThisTrigger->Height<<4); trigger->setTargetBox(ThisTrigger->TargetPos.X<<4,ThisTrigger->TargetPos.Y<<4,ThisTrigger->TargetSize.X<<4,ThisTrigger->TargetSize.Y<<4); + switch( ThisTrigger->Type ) + { + case TRIGGER_INTERMITTENTLEFTFLAMEEMITTER: + { + CIntermittentFlameEmitterTrigger *m_flameEmitter = (CIntermittentFlameEmitterTrigger *) trigger; + + m_flameEmitter->setHeading( 3072 ); + m_flameEmitter->setSize( ThisTrigger->Height<<4, ThisTrigger->Width<<4 ); + + break; + } + + case TRIGGER_INTERMITTENTDOWNFLAMEEMITTER: + { + CIntermittentFlameEmitterTrigger *m_flameEmitter = (CIntermittentFlameEmitterTrigger *) trigger; + + m_flameEmitter->setHeading( 2048 ); + + break; + } + + default: + break; + } + return( trigger); } diff --git a/source/triggers/trigger.h b/source/triggers/trigger.h index b0b5dbf61..8f0007e09 100644 --- a/source/triggers/trigger.h +++ b/source/triggers/trigger.h @@ -36,9 +36,12 @@ enum TRIGGER_TYPE TRIGGER_GARYGOLEFT, TRIGGER_GARYGORIGHT, TRIGGER_BUBBLEEMITTER, + TRIGGER_INTERMITTENTLEFTFLAMEEMITTER, + TRIGGER_INTERMITTENTDOWNFLAMEEMITTER, // Code based triggers TRIGGER_PLATFORM, + TRIGGER_HAZARD, TRIGGER_MAX, }; diff --git a/tools/Data/bin/MkLevel.ini b/tools/Data/bin/MkLevel.ini index a78726d70..48fd04906 100644 --- a/tools/Data/bin/MkLevel.ini +++ b/tools/Data/bin/MkLevel.ini @@ -138,6 +138,8 @@ GaryStop=9 GaryGoLeft=10 GaryGoRight=11 BubbleEmitter=12 +IntermittentLeftFlameEmitter=13 +IntermittentDownFlameEmitter=14 ################################################ # FX @@ -172,4 +174,5 @@ RisingWeightWheel=17 PressureSwitch=18 SingleSpike=19 CheckPoint=20 -WaterBucket=20 \ No newline at end of file +WaterBucket=20 +ConveyorSwitch=21 \ No newline at end of file diff --git a/tools/MapEdit/Hazard.ini b/tools/MapEdit/Hazard.ini index 0a8cece81..78302f37b 100644 --- a/tools/MapEdit/Hazard.ini +++ b/tools/MapEdit/Hazard.ini @@ -259,3 +259,13 @@ Collision=0 Health=0 AttackStrength=0 Respawn=1 + +[ConveyorSwitch] +Gfx=..\..\graphics\hazards\water_bucket\water_bucket.gin +WayPoints=0 +Speed=0 +TurnRate=0 +Collision=0 +Health=0 +AttackStrength=0 +Respawn=1 diff --git a/tools/MapEdit/trigger.ini b/tools/MapEdit/trigger.ini index 9561e6452..641686e1a 100644 --- a/tools/MapEdit/trigger.ini +++ b/tools/MapEdit/trigger.ini @@ -25,6 +25,10 @@ HasBox=1 [IntermittentFlameEmitter] +[IntermittentLeftFlameEmitter] + +[IntermittentDownFlameEmitter] + [BubbleEmitter] [GaryStop] diff --git a/users/paul/spongebob project/spongebob project.dsp b/users/paul/spongebob project/spongebob project.dsp index 4d33ddfce..6bd90e4d9 100644 --- a/users/paul/spongebob project/spongebob project.dsp +++ b/users/paul/spongebob project/spongebob project.dsp @@ -857,6 +857,14 @@ SOURCE=..\..\..\source\hazard\hcsaw.h # End Source File # Begin Source File +SOURCE=..\..\..\source\hazard\hcswitch.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\source\hazard\hcswitch.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\hazard\hdbarrel.cpp # End Source File # Begin Source File @@ -1965,6 +1973,14 @@ SOURCE=..\..\..\source\triggers\tgstop.h # End Source File # Begin Source File +SOURCE=..\..\..\source\triggers\thazard.cpp +# End Source File +# Begin Source File + +SOURCE=..\..\..\source\triggers\thazard.h +# End Source File +# Begin Source File + SOURCE=..\..\..\source\triggers\tifemit.cpp # End Source File # Begin Source File