54#include "../qcommon/qcommon.h"
56#define EMITTER_DEFAULT_LIFE 1000
57#define MAX_EMITTERS 32
60#define T_RANDSCALE (1 << 0)
61#define T_SCALEANIM (1 << 1)
62#define T_SPHERE (1 << 2)
63#define T_INWARDSPHERE (1 << 3)
64#define T_CIRCLE (1 << 4)
65#define T_FADE (1 << 5)
66#define T_DIETOUCH (1 << 6)
67#define T_ANGLES (1 << 7)
68#define T_WAVE (1 << 8)
69#define T_SWARM (1 << 9)
70#define T_ALIGN (1 << 10)
71#define T_COLLISION (1 << 11)
72#define T_FLICKERALPHA (1 << 12)
73#define T_DLIGHT (1 << 13)
74#define T_FADEIN (1 << 14)
75#define T_GLOBALFADEIN (1 << 15)
76#define T_GLOBALFADEOUT (1 << 16)
77#define T_PARENTLINK (1 << 17)
78#define T_RANDOMROLL (1 << 18)
79#define T_HARDLINK (1 << 19)
80#define T_ANIMATEONCE (1 << 20)
81#define T_BEAMTHING (1 << 21)
82#define T_RANDVELAXIS (1 << 22)
83#define T_BOUNCESOUND (1 << 23)
84#define T_BOUNCESOUNDONCE (1 << 24)
85#define T_TWINKLE (1 << 25)
86#define T_TWINKLE_OFF (1 << 26)
87#define T_ALIGNONCE (1 << 27)
88#define T_SCALEUPDOWN (1 << 28)
89#define T_AUTOCALCLIFE (1 << 29)
90#define T_ASSIGNED_NUMBER (1 << 30)
91#define T_DETAIL (1 << 31)
93#define T2_MOVE (1 << 0)
94#define T2_AMOVE (1 << 1)
95#define T2_ACCEL (1 << 2)
96#define T2_TRAIL (1 << 3)
97#define T2_PHYSICS_EVERYFRAME (1 << 4)
98#define T2_TEMPORARY_DECAL (1 << 5)
99#define T2_BOUNCE_DECAL (1 << 6)
100#define T2_PARALLEL (1 << 7)
101#define T2_VOLUMETRIC (1 << 8)
102#define T2_COLOR_AVEL (1 << 9)
103#define T2_WIND_AFFECT (1 << 10)
104#define T2_SPRITEGRIDLIGHTING (1 << 11)
105#define T2_WATERONLY (1 << 12)
106#define T2_ALIGNSTRETCH (1 << 13)
107#define T2_ALWAYSDRAW (1 << 14)
108#define T2_CLAMP_VEL (1 << 15)
109#define T2_CLAMP_VEL_AXIS (1 << 16)
110#define T2_CONE (1 << 17)
111#define T2_RADIALVELOCITY (1 << 18)
112#define T2_FRICTION (1 << 19)
113#define T2_VARYCOLOR (1 << 20)
114#define T2_SPIN (1 << 21)
115#define T2_RELATIVEANGLES (1 << 22)
116#define T2_NOTAGAXIS (1 << 23)
128class cg_common_data :
public Class
155 int bouncesound_delay;
162 float lightIntensity;
168 int min_twinkletimeoff;
169 int max_twinkletimeoff;
170 int min_twinkletimeon;
171 int max_twinkletimeon;
183 float decal_orientation;
191inline cg_common_data::cg_common_data()
195 bouncesound_delay = 0;
201 lightType = (dlighttype_t)0;
218 min_twinkletimeoff = 0;
219 max_twinkletimeoff = 0;
220 min_twinkletimeon = 0;
221 max_twinkletimeoff = 0;
225 for (i = 0; i < 4; i++) {
230class ctempmodel_t :
public Class
235 class ctempmodel_t *next;
236 class ctempmodel_t *prev;
248 int next_bouncesound_time;
253 qboolean lastEntValid;
256 void (*touchfcn)(ctempmodel_t *ct,
trace_t *trace);
262inline ctempmodel_t::ctempmodel_t()
268 next_bouncesound_time = 0;
273 lastEntValid = qfalse;
276enum class vsstypes_t :
unsigned char {
303 float lastLighting[3];
308 float newLighting[3];
324 int lastLightingTime;
334inline cvssource_t::cvssource_t()
360 , lastLightingTime(0)
374#define MAX_SWIPE_POINTS 64
399inline void swipething_t::Init()
408 for (i = 0; i < 4; i++) {
413 for (i = 0; i < MAX_SWIPE_POINTS; i++) {
414 VectorSet(swipepoints[i].points[0], 0.f, 0.f, 0.f);
415 VectorSet(swipepoints[i].points[1], 0.f, 0.f, 0.f);
416 swipepoints[i].time = 0.f;
425class enttracker_t :
public Class
429 int AssignNumber(
void);
432 qboolean usedNumbers[256];
433 virtual void RemoveEntity(
int entnum);
439inline enttracker_t::enttracker_t()
441 memset(usedNumbers, 0,
sizeof(usedNumbers));
444inline void enttracker_t::RemoveEntity(
int entnum)
449 if (entnum >= MAGIC_UNUSED_NUMBER) {
450 entnum -= MAGIC_UNUSED_NUMBER;
453 assert(entnum < 256);
455 usedNumbers[entnum] = qfalse;
459inline int enttracker_t::AssignNumber(
void)
469 for (i = 0; i < 256; i++) {
470 if (!usedNumbers[i]) {
471 usedNumbers[i] = qtrue;
472 return MAGIC_UNUSED_NUMBER + i;
486 qboolean lerp_emitter;
503 virtual void RemoveEntity(
int entnum);
510inline void emitterthing_t::RemoveEntity(
int entnum)
519 count = m_emittertimes.NumObjects();
521 for (num = count; num >= 1; num--) {
522 et = &m_emittertimes.ObjectAt(num);
523 if (et->entity_number == entnum) {
524 m_emittertimes.RemoveObjectAt(num);
528 enttracker_t::RemoveEntity(entnum);
536 count = m_emittertimes.NumObjects();
538 for (num = 1; num <= count; num++) {
539 et = &m_emittertimes.ObjectAt(num);
540 if (et->entity_number == entnum) {
546 et = &m_emittertimes.ObjectAt(m_emittertimes.AddObject({}));
547 et->entity_number = entnum;
548 et->last_emit_time = cg.time;
549 et->lerp_emitter = qfalse;
551 if (this->startoff) {
565 int last_command_time;
579 commandtime_t *GetLastCommandTime(
int entnum,
int commandnum);
580 virtual void RemoveEntity(
int entnum);
585inline void commandthing_t::RemoveEntity(
int entnum)
590 count = m_commandtimes.NumObjects();
592 for (num = count; num >= 1; num--) {
593 ct = &m_commandtimes.ObjectAt(num);
594 if (ct->entity_number == entnum) {
595 m_commandtimes.RemoveObjectAt(num);
599 enttracker_t::RemoveEntity(entnum);
602inline commandtime_t *commandthing_t::GetLastCommandTime(
int entnum,
int commandnum)
607 count = m_commandtimes.NumObjects();
609 for (num = 1; num <= count; num++) {
610 commandtime_t *ct = &m_commandtimes.ObjectAt(num);
611 if ((ct->entity_number == entnum) && (ct->command_number == commandnum)) {
618 ct.entity_number = entnum;
619 ct.command_number = commandnum;
620 ct.last_command_time = 0;
622 m_commandtimes.AddObject(ct);
624 return &m_commandtimes.ObjectAt(m_commandtimes.NumObjects());
636 Vector origin_offset_base;
637 Vector origin_offset_amplitude;
639 Vector axis_offset_amplitude;
643 Vector avelocity_amplitude;
648 float forwardVelocity;
660 float linked_origin[3];
661 float linked_axis[3][3];
662 float fMinRangeSquared;
663 float fMaxRangeSquared;
672 float numSubdivisions;
680 qboolean use_last_trace_end;
684 void SetModel(
str model);
690inline void spawnthing_t::SetModel(
str model)
692 m_modellist.ClearObjectList();
693 m_modellist.AddObject(model);
696inline str spawnthing_t::GetModel(
void)
700 num = m_modellist.NumObjects();
706 index = (num * random()) + 1;
712 return m_modellist.ObjectAt(index);
738#define MAX_TEMPMODELS 2048
739#define MAX_BEAMS 4096
741class ClientGameCommandManager :
public Listener
751 int m_iAllocatedvsssources;
758 int m_iLastVSSRepulsionTime;
761 void (ClientGameCommandManager::*endblockfcn)(void);
764 void SpawnVSSSource(
int count,
int timealive);
765 void EventViewKick(
Event *ev);
766 void Print(
Event *ev);
767 void PrintDeathMsg(
Event *ev);
768 void StartBlock(
Event *ev);
769 void EndBlock(
Event *ev);
771 void EmitterStartOff(
Event *ev);
772 void SetAlpha(
Event *ev);
773 void SetDieTouch(
Event *ev);
774 void SetBounceFactor(
Event *ev);
775 void SetBounceSound(
Event *ev);
776 void SetBounceSoundOnce(
Event *ev);
777 void SetModel(
Event *ev);
778 void SetLife(
Event *ev);
779 void SetColor(
Event *ev);
780 void SetColorRange(
Event *ev);
781 void SetLightstyle(
Event *ev);
782 void SetRadialVelocity(
Event *ev);
783 void SetVelocity(
Event *ev);
784 void SetAngularVelocity(
Event *ev);
785 void SetCount(
Event *ev);
786 void SetScale(
Event *ev);
787 void SetScaleUpDown(
Event *ev);
788 void SetScaleMin(
Event *ev);
789 void SetScaleMax(
Event *ev);
790 void SetScaleRate(
Event *ev);
791 void SetRandomVelocity(
Event *ev);
792 void SetRandomVelocityAlongAxis(
Event *ev);
793 void SetNoTagAxis(
Event *ev);
794 void SetAccel(
Event *ev);
795 void SetFriction(
Event *ev);
796 void SetSpin(
Event *ev);
797 void SetVaryColor(
Event *ev);
798 void SetFade(
Event *ev);
799 void SetFadeDelay(
Event *ev);
800 void SetSpawnRange(
Event *ev);
801 void SetSpawnRate(
Event *ev);
802 void SetOriginOffset(
Event *ev);
803 void SetOffsetAlongAxis(
Event *ev);
804 void SetCone(
Event *ev);
805 void SetCircle(
Event *ev);
806 void SetSphere(
Event *ev);
807 void SetInwardSphere(
Event *ev);
808 void SetRandomRoll(
Event *ev);
809 void SetVolumetric(
Event *ev);
810 void SetSwarm(
Event *ev);
811 void SetAlign(
Event *ev);
812 void SetAlignOnce(
Event *ev);
813 void SetCollision(
Event *ev);
814 void SetFlickerAlpha(
Event *ev);
815 void SetFadeIn(
Event *ev);
816 void SetEntityColor(
Event *ev);
817 void SetGlobalFade(
Event *ev);
818 void SetRadius(
Event *ev);
819 void SetParentLink(
Event *ev);
820 void SetHardLink(
Event *ev);
821 void SetAngles(
Event *ev);
822 void SetRelativeAngles(
Event *ev);
823 void ParentAngles(
Event *ev);
824 void EmitterAngles(
Event *ev);
825 void SetTwinkle(
Event *ev);
826 void SetTrail(
Event *ev);
827 void SetPhysicsRate(
Event *ev);
828 void SetBounceDecal(
Event *ev);
830 void BeginOriginSpawn(
Event *ev);
831 void EndOriginSpawn(
void);
832 void BeginOriginBeamSpawn(
Event *ev);
833 void EndOriginBeamSpawn(
void);
834 void BeginOriginBeamEmitter(
Event *ev);
835 void EndOriginBeamEmitter(
void);
836 void BeginTagSpawn(
Event *ev);
837 void BeginTagSpawnLinked(
Event *ev);
838 void EndTagSpawn(
void);
839 void BeginTagBeamSpawn(
Event *ev);
840 void EndTagBeamSpawn(
void);
841 void BeginTagEmitter(
Event *ev);
842 void EndTagEmitter(
void);
843 void BeginOriginEmitter(
Event *ev);
844 void EndOriginEmitter(
void);
845 void BeginTagBeamEmitter(
Event *ev);
846 void EndTagBeamEmitter(
void);
847 void EmitterOn(
Event *ev);
848 void EmitterOff(
Event *ev);
849 void RainTouch(
Event *ev);
850 void Sound(
Event *ev);
851 void SetCurrentTiki(
Event *ev);
852 void StopSound(
Event *ev);
853 void StopAliasChannel(
Event *ev);
854 void LoopSound(
Event *ev);
855 void StopLoopSound(
Event *ev);
856 void Cache(
Event *ev);
857 void CacheImage(
Event *ev);
858 void CacheFont(
Event *ev);
859 void AliasCache(
Event *ev);
860 void Alias(
Event *ev);
861 void CacheAlias(
Event *ev);
862 void Client(
Event *ev);
863 void TagDynamicLight(
Event *ev);
864 void OriginDynamicLight(
Event *ev);
865 void DynamicLight(
Event *ev);
866 void BlockDynamicLight(
Event *ev);
867 void EndBlockDynamicLight();
869 void Swipe(
Event *ev);
870 void SwipeOn(
Event *ev);
871 void SwipeOff(
Event *ev);
872 void AnimateOnce(
Event *ev);
873 void SetAnim(
Event *ev);
874 void SetDecalRadius(
Event *ev);
875 void SetDecalOrientation(
Event *ev);
876 void TagList(
Event *ev);
877 void SetParallel(
Event *ev);
878 void Footstep(
Event *ev);
879 void LandingSound(
Event *ev);
880 void BodyFallSound(
Event *ev);
881 void SetAlwaysDraw(
Event *ev);
882 void SetDetail(
Event *ev);
883 void SetWindAffect(
Event *ev);
884 void SpriteGridLighting(
Event *ev);
885 void SetWaterOnly(
Event *ev);
886 void SetAlignStretch(
Event *ev);
887 void SetClampVel(
Event *ev);
888 void SetClampVelAxis(
Event *ev);
890 qboolean TempModelPhysics(
ctempmodel_t *p,
float ftime,
float scale);
891 qboolean TempModelRealtimeEffects(
ctempmodel_t *p,
float ftime,
float scale);
893 void SpawnEffect(
int count,
int timealive);
894 void SpawnTempModel(
int count);
898 qboolean IsBlockCommand(
const str &name);
902 void SetSubdivisions(
Event *ev);
903 void SetMinOffset(
Event *ev);
904 void SetMaxOffset(
Event *ev);
905 void SetShader(
Event *ev);
906 void SetLength(
Event *ev);
907 void SetBeamDelay(
Event *ev);
908 void SetBeamToggleDelay(
Event *ev);
909 void SetBeamPersist(
Event *ev);
910 void SetBeamOffsetEndpoints(
Event *ev);
911 void SetBeamSphere(
Event *ev);
912 void SetSpread(
Event *ev);
913 void SetUseLastTraceEnd(
Event *ev);
914 void SetEndAlpha(
Event *ev);
915 void SetEyeLimits(
Event *ev);
916 void SetEyeMovement(
Event *ev);
917 void StartSFX(
Event *ev);
918 void StartSFXDelayed(
Event *ev);
919 void StartSFXCommand(
Event *ev, qboolean bDelayed);
920 void EndIgnoreSfxBlock();
921 void RandomChance(
Event *ev);
922 void DelayedRepeat(
Event *ev);
923 void CommandDelay(
Event *ev);
924 void SpawnTreads(
Event *ev);
925 void TreadsOff(
Event *ev);
926 bool GetTagPositionAndOrientation(
int tagnum,
orientation_t *new_or);
930 CLASS_PROTOTYPE(ClientGameCommandManager);
932 ClientGameCommandManager();
933 void AddTempModels(
void);
934 void UpdateEmitter(dtiki_t *tiki, vec3_t axis[3],
int entity_number,
int parent_number,
Vector entity_origin);
935 void UpdateBeam(dtiki_t *tiki,
int entity_number,
spawnthing_t *beamthing);
938 const vec3_t origin = NULL,
939 int channel = CHAN_AUTO,
941 float min_distance = -1,
948 void FreeAllTempModels(
void);
949 void FreeSomeTempModels(
void);
950 void RestartAllEmitters(
void);
952 void InitializeTempModels(
void);
953 void InitializeTempModelCvars(
void);
954 void InitializeEmitters(
void);
955 void RemoveClientEntity(
int number, dtiki_t *tiki, centity_t *cent,
ctempmodel_t *p = NULL);
956 void ClearSwipes(
void);
958 void ResetTempModels(
void);
961 inline void SetSpawnthing(
spawnthing_t *st) { m_spawnthing = st; };
966 void DeleteEmitters(dtiki_t *tiki);
967 void CGEvent(centity_t *cent);
969 void ProcessPendingEventsForEntity();
970 qboolean PostEventForEntity(
Event *ev,
float fWait);
971 qboolean SelectProcessEvent(
Event *ev);
973 void TestEffectEndFunc();
974 void AddVSSSources();
975 void InitializeVSSCvars();
976 void InitializeVSSSources();
977 void ResetVSSSources();
978 void ResetVSSSources(
Event *ev);
980 void ClearCurrentSFX();
981 void AddTreadMarkSources();
982 void InitializeTreadMarkCvars();
983 void InitializeTreadMarkSources();
984 void ResetTreadMarkSources();
985 void ResetTreadMarkSources(
Event *ev);
986 void InitializeRainCvars();
987 void InitializeBeams();
1005class EmitterLoader :
public Listener
1011 CLASS_PROTOTYPE(EmitterLoader);
1015 void ProcessEmitter(
Script&);
1016 void Emitter(
Event *ev);
1019class EffectsEventQueueNode
1027 EffectsEventQueueNode *prev;
1028 EffectsEventQueueNode *next;
1034 EffectsEventQueueNode()
1040 EffectsEventQueueNode(
Event *event,
int inttime,
int flags,
int entity_num)
1042 this->
event = event;
1043 this->inttime = inttime;
1044 this->flags = flags;
1045 this->entity_num = entity_num;
1048 int GetEntityNum() {
return entity_num; }
Definition cg_commands.h:742
Definition container.h:85
Definition listener.h:246
Definition memarchiver.h:36
Definition cg_commands.h:718
Definition cg_commands.h:129
Definition cg_commands.h:574
Definition cg_commands.h:561
Definition cg_commands.h:231
Definition cg_commands.h:293
Definition cg_commands.h:365
Definition cg_commands.h:496
Definition cg_commands.h:480
Definition cg_commands.h:628
Definition cg_specialfx.h:162
Definition cg_commands.h:382
Definition q_shared.h:1524
Definition cg_commands.h:376
Definition q_shared.h:1452