]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/effects.qh
Merge branches 'TimePath/weaponsys' and 'Mario/modpack'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / effects.qh
1 #ifndef P_EFFECTS_H
2 #define P_EFFECTS_H
3 // Global list of effects, networked to CSQC by ID to save bandwidth and to use client particle numbers (allows mismatching effectinfos to some degree)
4 // Not too concerned about the order of this list, just keep the weapon effects together!
5
6 //  EFFECT(istrail, EFFECT_NAME,                "effectinfo_string")
7 #define EFFECTS \
8     EFFECT(0, EFFECT_EXPLOSION_SMALL,           "explosion_small") \
9     EFFECT(0, EFFECT_EXPLOSION_MEDIUM,          "explosion_medium") \
10     EFFECT(0, EFFECT_EXPLOSION_BIG,             "explosion_big") \
11     EFFECT(1, EFFECT_VAPORIZER_RED,             "TE_TEI_G3RED") \
12     EFFECT(1, EFFECT_VAPORIZER_RED_HIT,         "TE_TEI_G3RED_HIT") \
13     EFFECT(1, EFFECT_VAPORIZER_BLUE,            "TE_TEI_G3BLUE") \
14     EFFECT(1, EFFECT_VAPORIZER_BLUE_HIT,        "TE_TEI_G3BLUE_HIT") \
15     EFFECT(1, EFFECT_VAPORIZER_YELLOW,          "TE_TEI_G3YELLOW") \
16     EFFECT(1, EFFECT_VAPORIZER_YELLOW_HIT,      "TE_TEI_G3YELLOW_HIT") \
17     EFFECT(1, EFFECT_VAPORIZER_PINK,            "TE_TEI_G3PINK") \
18     EFFECT(1, EFFECT_VAPORIZER_PINK_HIT,        "TE_TEI_G3PINK_HIT") \
19     EFFECT(1, EFFECT_VAPORIZER_NEUTRAL,         "TE_TEI_G3NEUTRAL") \
20     EFFECT(1, EFFECT_VAPORIZER_NEUTRAL_HIT,     "TE_TEI_G3NEUTRAL_HIT") \
21     EFFECT(0, EFFECT_ELECTRO_COMBO,             "electro_combo") \
22     EFFECT(0, EFFECT_ELECTRO_IMPACT,            "electro_impact") \
23     EFFECT(0, EFFECT_ELECTRO_MUZZLEFLASH,       "electro_muzzleflash") \
24     EFFECT(0, EFFECT_HAGAR_BOUNCE,              "hagar_bounce") \
25     EFFECT(0, EFFECT_HAGAR_MUZZLEFLASH,         "hagar_muzzleflash") \
26     EFFECT(0, EFFECT_LASER_MUZZLEFLASH,         "laser_muzzleflash") \
27     EFFECT(0, EFFECT_MACHINEGUN_MUZZLEFLASH,    "uzi_muzzleflash") \
28     EFFECT(0, EFFECT_RIFLE_MUZZLEFLASH,         "rifle_muzzleflash") \
29     EFFECT(0, EFFECT_RAPTOR_MUZZLEFLASH,        "raptor_cannon_muzzleflash") \
30     EFFECT(0, EFFECT_RACER_MUZZLEFLASH,         "wakizashi_gun_muzzleflash") \
31     EFFECT(0, EFFECT_RACER_ROCKETLAUNCH,        "wakizashi_rocket_launch") \
32     EFFECT(0, EFFECT_SPIDERBOT_ROCKETLAUNCH,    "spiderbot_rocket_launch") \
33     EFFECT(0, EFFECT_BIGPLASMA_MUZZLEFLASH,     "bigplasma_muzzleflash") \
34     EFFECT(1, EFFECT_RIFLE,                     "tr_rifle") \
35     EFFECT(1, EFFECT_RIFLE_WEAK,                "tr_rifle_weak") \
36     EFFECT(0, EFFECT_SEEKER_MUZZLEFLASH,        "seeker_muzzleflash") \
37     EFFECT(0, EFFECT_SHOTGUN_MUZZLEFLASH,       "shotgun_muzzleflash") \
38     EFFECT(0, EFFECT_GRENADE_MUZZLEFLASH,       "grenadelauncher_muzzleflash") \
39     EFFECT(0, EFFECT_GRENADE_EXPLODE,           "grenade_explode") \
40     EFFECT(0, EFFECT_FLAK_BOUNCE,               "flak_bounce") \
41     EFFECT(0, EFFECT_CRYLINK_JOINEXPLODE,       "crylink_joinexplode") \
42     EFFECT(0, EFFECT_CRYLINK_MUZZLEFLASH,       "crylink_muzzleflash") \
43     EFFECT(0, EFFECT_VORTEX_MUZZLEFLASH,        "nex_muzzleflash") \
44     EFFECT(0, EFFECT_HOOK_MUZZLEFLASH,          "grapple_muzzleflash") \
45     EFFECT(0, EFFECT_HOOK_IMPACT,               "grapple_impact") \
46     EFFECT(0, EFFECT_ROCKET_EXPLODE,            "rocket_explode") \
47     EFFECT(0, EFFECT_ROCKET_GUIDE,              "rocket_guide") \
48     EFFECT(0, EFFECT_ROCKET_MUZZLEFLASH,        "rocketlauncher_muzzleflash") \
49     EFFECT(0, EFFECT_FIREBALL_LASER,            "fireball_laser") \
50     EFFECT(0, EFFECT_FIREBALL_EXPLODE,          "fireball_explode") \
51     EFFECT(0, EFFECT_FIREBALL_BFGDAMAGE,        "fireball_bfgdamage") \
52     EFFECT(0, EFFECT_FIREBALL_MUZZLEFLASH,      "fireball_muzzleflash") \
53     EFFECT(0, EFFECT_FIREBALL_PRE_MUZZLEFLASH,  "fireball_preattack_muzzleflash") \
54     EFFECT(0, EFFECT_TELEPORT,                  "teleport") \
55     EFFECT(0, EFFECT_SPAWN_RED,                 "spawn_event_red") \
56     EFFECT(0, EFFECT_SPAWN_BLUE,                "spawn_event_blue") \
57     EFFECT(0, EFFECT_SPAWN_YELLOW,              "spawn_event_yellow") \
58     EFFECT(0, EFFECT_SPAWN_PINK,                "spawn_event_pink") \
59     EFFECT(0, EFFECT_SPAWN_NEUTRAL,             "spawn_event_neutral") \
60     EFFECT(0, EFFECT_NADE_RED_EXPLODE,          "nade_red_explode") \
61     EFFECT(0, EFFECT_NADE_BLUE_EXPLODE,         "nade_blue_explode") \
62     EFFECT(0, EFFECT_NADE_YELLOW_EXPLODE,       "nade_yellow_explode") \
63     EFFECT(0, EFFECT_NADE_PINK_EXPLODE,         "nade_pink_explode") \
64     EFFECT(0, EFFECT_NADE_NEUTRAL_EXPLODE,      "nade_neutral_explode") \
65     EFFECT(0, EFFECT_ICEORGLASS,                "iceorglass") \
66     EFFECT(0, EFFECT_ICEFIELD,                  "icefield") \
67     EFFECT(0, EFFECT_FIREFIELD,                 "firefield") \
68     EFFECT(0, EFFECT_HEALING,                   "healing_fx") \
69     EFFECT(1, EFFECT_LASER_BEAM_FAST,           "nex242_misc_laser_beam_fast") \
70     EFFECT(0, EFFECT_RESPAWN_GHOST,             "respawn_ghost") \
71     EFFECT(0, EFFECT_FLAG_RED_TOUCH,            "redflag_touch") \
72     EFFECT(0, EFFECT_FLAG_BLUE_TOUCH,           "blueflag_touch") \
73     EFFECT(0, EFFECT_FLAG_YELLOW_TOUCH,         "yellowflag_touch") \
74     EFFECT(0, EFFECT_FLAG_PINK_TOUCH,           "pinkflag_touch") \
75     EFFECT(0, EFFECT_FLAG_NEUTRAL_TOUCH,        "neutralflag_touch") \
76     EFFECT(1, EFFECT_RED_PASS,                  "red_pass") \
77     EFFECT(1, EFFECT_BLUE_PASS,                 "blue_pass") \
78     EFFECT(1, EFFECT_YELLOW_PASS,               "yellow_pass") \
79     EFFECT(1, EFFECT_PINK_PASS,                 "pink_pass") \
80     EFFECT(1, EFFECT_NEUTRAL_PASS,              "neutral_pass") \
81     EFFECT(0, EFFECT_RED_CAP,                   "red_cap") \
82     EFFECT(0, EFFECT_BLUE_CAP,                  "blue_cap") \
83     EFFECT(0, EFFECT_YELLOW_CAP,                "yellow_cap") \
84     EFFECT(0, EFFECT_PINK_CAP,                  "pink_cap") \
85     EFFECT(0, EFFECT_BALL_SPARKS,               "kaball_sparks") \
86     EFFECT(0, EFFECT_ELECTRIC_SPARKS,           "electricity_sparks") \
87     EFFECT(0, EFFECT_SPARKS,                    "sparks") \
88     EFFECT(0, EFFECT_RAGE,                      "rage") \
89     EFFECT(0, EFFECT_SMOKING,                   "smoking") \
90     EFFECT(0, EFFECT_SMOKE_RING,                "smoke_ring") \
91     EFFECT(0, EFFECT_ITEM_PICKUP,               "item_pickup") \
92     EFFECT(0, EFFECT_ITEM_RESPAWN,              "item_respawn") \
93     EFFECT(0, EFFECT_JUMPPAD,                   "jumppad_activate") \
94     EFFECT(1, EFFECT_BULLET,                    "tr_bullet") 
95
96
97
98
99 // --------------------
100 // --------------------------
101 // -----------------------------------
102 // ------------------------------------------|
103 // some stuff you don't need to care about...|
104 // ------------------------------------------|
105 // -----------------------------------
106 // --------------------------
107 // --------------------
108
109 .int eent_net_name; // id
110 .vector eent_net_location;
111 .vector eent_net_velocity;
112 .int eent_eff_trail;
113 .string eent_eff_name;
114 .int eent_net_count;
115
116 #ifdef CSQC
117 void Read_Effect(bool is_new);
118 #elif defined(SVQC)
119 void Send_Effect(string eff_name, vector eff_loc, vector eff_vel, int eff_cnt);
120 #endif
121
122 const int EFFECT_FIRST = 1;
123 int EFFECT_COUNT;
124
125 const int MAX_EFFECTS = 512;
126 entity effects_ent[MAX_EFFECTS];
127
128 void Create_Effect_Entity(int eff_name, string eff_string, int eff_trail);
129
130 #define EFFECT(istrail,name,realname) \
131     int name; \
132     void RegisterEffect_##name() \
133     { \
134         SET_FIELD_COUNT(name, EFFECT_FIRST, EFFECT_COUNT) \
135         CHECK_MAX_COUNT(name, MAX_EFFECTS, EFFECT_COUNT, "EFFECT") \
136         Create_Effect_Entity(name, realname, istrail); \
137     } \
138     ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffect_##name);
139
140 void RegisterEffects_First()
141 {
142     #ifdef SVQC
143     #define dedi (server_is_dedicated ? "a dedicated " : "")
144     #else
145     #define dedi ""
146     #endif
147
148     dprintf("Beginning effect initialization on %s%s program...\n", dedi, PROGNAME);
149     #undef dedi
150 }
151
152 void RegisterEffects_Done()
153 {
154     dprint("Effects initialization successful!\n");
155 }
156
157 // NOW we actually activate the declarations
158 ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffects_First);
159 EFFECTS
160 ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffects_Done);
161 #undef EFFECT
162
163 #endif