]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/effects.qh
Merge branch 'TimePath/lint' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / effects.qh
index 5262dee5437f03b556d1086ea1a5d481d8296109..a1102e96a26fb6cf92eee01d0a69e78f08ca8f8b 100644 (file)
 #ifndef P_EFFECTS_H
 #define P_EFFECTS_H
-// Global list of effects, networked to CSQC by ID to save bandwidth and to use client particle numbers (allows mismatching effectinfos to some degree)
-// Not too concerned about the order of this list, just keep the weapon effects together!
-
-//  EFFECT(istrail, EFFECT_NAME,                "effectinfo_string")
-#define EFFECTS \
-    EFFECT(0, EFFECT_EXPLOSION_SMALL,           "explosion_small") \
-    EFFECT(0, EFFECT_EXPLOSION_MEDIUM,          "explosion_medium") \
-    EFFECT(0, EFFECT_EXPLOSION_BIG,             "explosion_big") \
-    EFFECT(1, EFFECT_VAPORIZER_RED,             "TE_TEI_G3RED") \
-    EFFECT(1, EFFECT_VAPORIZER_RED_HIT,         "TE_TEI_G3RED_HIT") \
-    EFFECT(1, EFFECT_VAPORIZER_BLUE,            "TE_TEI_G3BLUE") \
-    EFFECT(1, EFFECT_VAPORIZER_BLUE_HIT,        "TE_TEI_G3BLUE_HIT") \
-    EFFECT(1, EFFECT_VAPORIZER_YELLOW,          "TE_TEI_G3YELLOW") \
-    EFFECT(1, EFFECT_VAPORIZER_YELLOW_HIT,      "TE_TEI_G3YELLOW_HIT") \
-    EFFECT(1, EFFECT_VAPORIZER_PINK,            "TE_TEI_G3PINK") \
-    EFFECT(1, EFFECT_VAPORIZER_PINK_HIT,        "TE_TEI_G3PINK_HIT") \
-    EFFECT(1, EFFECT_VAPORIZER_NEUTRAL,         "TE_TEI_G3NEUTRAL") \
-    EFFECT(1, EFFECT_VAPORIZER_NEUTRAL_HIT,     "TE_TEI_G3NEUTRAL_HIT") \
-    EFFECT(0, EFFECT_ELECTRO_COMBO,             "electro_combo") \
-    EFFECT(0, EFFECT_ELECTRO_IMPACT,            "electro_impact") \
-    EFFECT(0, EFFECT_ELECTRO_MUZZLEFLASH,       "electro_muzzleflash") \
-    EFFECT(0, EFFECT_HAGAR_BOUNCE,              "hagar_bounce") \
-    EFFECT(0, EFFECT_HAGAR_MUZZLEFLASH,         "hagar_muzzleflash") \
-    EFFECT(0, EFFECT_LASER_MUZZLEFLASH,         "laser_muzzleflash") \
-    EFFECT(0, EFFECT_MACHINEGUN_MUZZLEFLASH,    "uzi_muzzleflash") \
-    EFFECT(0, EFFECT_RIFLE_MUZZLEFLASH,         "rifle_muzzleflash") \
-    EFFECT(0, EFFECT_RAPTOR_MUZZLEFLASH,        "raptor_cannon_muzzleflash") \
-    EFFECT(0, EFFECT_RACER_MUZZLEFLASH,         "wakizashi_gun_muzzleflash") \
-    EFFECT(0, EFFECT_RACER_ROCKETLAUNCH,        "wakizashi_rocket_launch") \
-    EFFECT(0, EFFECT_SPIDERBOT_ROCKETLAUNCH,    "spiderbot_rocket_launch") \
-    EFFECT(0, EFFECT_BIGPLASMA_MUZZLEFLASH,     "bigplasma_muzzleflash") \
-    EFFECT(1, EFFECT_RIFLE,                     "tr_rifle") \
-    EFFECT(1, EFFECT_RIFLE_WEAK,                "tr_rifle_weak") \
-    EFFECT(0, EFFECT_SEEKER_MUZZLEFLASH,        "seeker_muzzleflash") \
-    EFFECT(0, EFFECT_SHOTGUN_MUZZLEFLASH,       "shotgun_muzzleflash") \
-    EFFECT(0, EFFECT_GRENADE_MUZZLEFLASH,       "grenadelauncher_muzzleflash") \
-    EFFECT(0, EFFECT_GRENADE_EXPLODE,           "grenade_explode") \
-    EFFECT(0, EFFECT_FLAK_BOUNCE,               "flak_bounce") \
-    EFFECT(0, EFFECT_CRYLINK_JOINEXPLODE,       "crylink_joinexplode") \
-    EFFECT(0, EFFECT_CRYLINK_MUZZLEFLASH,       "crylink_muzzleflash") \
-    EFFECT(0, EFFECT_VORTEX_MUZZLEFLASH,        "nex_muzzleflash") \
-    EFFECT(0, EFFECT_HOOK_MUZZLEFLASH,          "grapple_muzzleflash") \
-    EFFECT(0, EFFECT_HOOK_IMPACT,               "grapple_impact") \
-    EFFECT(0, EFFECT_ROCKET_EXPLODE,            "rocket_explode") \
-    EFFECT(0, EFFECT_ROCKET_GUIDE,              "rocket_guide") \
-    EFFECT(0, EFFECT_ROCKET_MUZZLEFLASH,        "rocketlauncher_muzzleflash") \
-    EFFECT(0, EFFECT_FIREBALL_LASER,            "fireball_laser") \
-    EFFECT(0, EFFECT_FIREBALL_EXPLODE,          "fireball_explode") \
-    EFFECT(0, EFFECT_FIREBALL_BFGDAMAGE,        "fireball_bfgdamage") \
-    EFFECT(0, EFFECT_FIREBALL_MUZZLEFLASH,      "fireball_muzzleflash") \
-    EFFECT(0, EFFECT_FIREBALL_PRE_MUZZLEFLASH,  "fireball_preattack_muzzleflash") \
-    EFFECT(0, EFFECT_TELEPORT,                  "teleport") \
-    EFFECT(0, EFFECT_SPAWN_RED,                 "spawn_event_red") \
-    EFFECT(0, EFFECT_SPAWN_BLUE,                "spawn_event_blue") \
-    EFFECT(0, EFFECT_SPAWN_YELLOW,              "spawn_event_yellow") \
-    EFFECT(0, EFFECT_SPAWN_PINK,                "spawn_event_pink") \
-    EFFECT(0, EFFECT_SPAWN_NEUTRAL,             "spawn_event_neutral") \
-    EFFECT(0, EFFECT_NADE_RED_EXPLODE,          "nade_red_explode") \
-    EFFECT(0, EFFECT_NADE_BLUE_EXPLODE,         "nade_blue_explode") \
-    EFFECT(0, EFFECT_NADE_YELLOW_EXPLODE,       "nade_yellow_explode") \
-    EFFECT(0, EFFECT_NADE_PINK_EXPLODE,         "nade_pink_explode") \
-    EFFECT(0, EFFECT_NADE_NEUTRAL_EXPLODE,      "nade_neutral_explode") \
-    EFFECT(0, EFFECT_ICEORGLASS,                "iceorglass") \
-    EFFECT(0, EFFECT_ICEFIELD,                  "icefield") \
-    EFFECT(0, EFFECT_FIREFIELD,                 "firefield") \
-    EFFECT(0, EFFECT_HEALING,                   "healing_fx") \
-    EFFECT(1, EFFECT_LASER_BEAM_FAST,           "nex242_misc_laser_beam_fast") \
-    EFFECT(0, EFFECT_RESPAWN_GHOST,             "respawn_ghost") \
-    EFFECT(0, EFFECT_FLAG_RED_TOUCH,            "redflag_touch") \
-    EFFECT(0, EFFECT_FLAG_BLUE_TOUCH,           "blueflag_touch") \
-    EFFECT(0, EFFECT_FLAG_YELLOW_TOUCH,         "yellowflag_touch") \
-    EFFECT(0, EFFECT_FLAG_PINK_TOUCH,           "pinkflag_touch") \
-    EFFECT(0, EFFECT_FLAG_NEUTRAL_TOUCH,        "neutralflag_touch") \
-    EFFECT(1, EFFECT_RED_PASS,                  "red_pass") \
-    EFFECT(1, EFFECT_BLUE_PASS,                 "blue_pass") \
-    EFFECT(1, EFFECT_YELLOW_PASS,               "yellow_pass") \
-    EFFECT(1, EFFECT_PINK_PASS,                 "pink_pass") \
-    EFFECT(1, EFFECT_NEUTRAL_PASS,              "neutral_pass") \
-    EFFECT(0, EFFECT_RED_CAP,                   "red_cap") \
-    EFFECT(0, EFFECT_BLUE_CAP,                  "blue_cap") \
-    EFFECT(0, EFFECT_YELLOW_CAP,                "yellow_cap") \
-    EFFECT(0, EFFECT_PINK_CAP,                  "pink_cap") \
-    EFFECT(0, EFFECT_BALL_SPARKS,               "kaball_sparks") \
-    EFFECT(0, EFFECT_ELECTRIC_SPARKS,           "electricity_sparks") \
-    EFFECT(0, EFFECT_SPARKS,                    "sparks") \
-    EFFECT(0, EFFECT_RAGE,                      "rage") \
-    EFFECT(0, EFFECT_SMOKING,                   "smoking") \
-    EFFECT(0, EFFECT_SMOKE_RING,                "smoke_ring") \
-    EFFECT(0, EFFECT_ITEM_PICKUP,               "item_pickup") \
-    EFFECT(0, EFFECT_ITEM_RESPAWN,              "item_respawn") \
-    EFFECT(0, EFFECT_JUMPPAD,                   "jumppad_activate") \
-    EFFECT(1, EFFECT_BULLET,                    "tr_bullet") 
-
-
-
-
-// --------------------
-// --------------------------
-// -----------------------------------
-// ------------------------------------------|
-// some stuff you don't need to care about...|
-// ------------------------------------------|
-// -----------------------------------
-// --------------------------
-// --------------------
-
-.int eent_net_name; // id
-.vector eent_net_location;
-.vector eent_net_velocity;
-.int eent_eff_trail;
-.string eent_eff_name;
-.int eent_net_count;
 
 #ifdef CSQC
 void Read_Effect(bool is_new);
 #elif defined(SVQC)
-void Send_Effect(string eff_name, vector eff_loc, vector eff_vel, int eff_cnt);
+void Send_Effect(entity eff, vector eff_loc, vector eff_vel, int eff_cnt);
+void Send_Effect_(string eff_name, vector eff_loc, vector eff_vel, int eff_cnt);
 #endif
 
-const int EFFECT_FIRST = 1;
-int EFFECT_COUNT;
+#define particleeffectnum(e) _particleeffectnum(e.eent_eff_name)
 
+void RegisterEffects();
 const int MAX_EFFECTS = 512;
-entity effects_ent[MAX_EFFECTS];
+entity effects_ent[MAX_EFFECTS], effects_ent_first, effects_ent_last;
+int EFFECT_COUNT;
+
+#define EFFECT(istrail, name, realname) \
+    REGISTER(RegisterEffects, EFFECT, effects_ent, EFFECT_COUNT, name, m_id, Create_Effect_Entity(realname, istrail));
+REGISTER_REGISTRY(RegisterEffects)
 
-void Create_Effect_Entity(int eff_name, string eff_string, int eff_trail);
+.int m_id;
+.string eent_eff_name;
+.int eent_eff_trail;
 
-#define EFFECT(istrail,name,realname) \
-    int name; \
-    void RegisterEffect_##name() \
-    { \
-        SET_FIELD_COUNT(name, EFFECT_FIRST, EFFECT_COUNT) \
-        CHECK_MAX_COUNT(name, MAX_EFFECTS, EFFECT_COUNT, "EFFECT") \
-        Create_Effect_Entity(name, realname, istrail); \
-    } \
-    ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffect_##name);
+.vector eent_net_location;
+.vector eent_net_velocity;
+.int eent_net_count;
+
+entity Create_Effect_Entity(string eff_name, bool eff_trail)
+{
+       entity this = new(effect_entity);
+       this.eent_eff_name = eff_name;
+       this.eent_eff_trail = eff_trail;
+       return this;
+}
 
 void RegisterEffects_First()
 {
@@ -145,19 +43,19 @@ void RegisterEffects_First()
     #define dedi ""
     #endif
 
-    dprintf("Beginning effect initialization on %s%s program...\n", dedi, PROGNAME);
+    LOG_TRACEF("Beginning effect initialization on %s%s program...\n", dedi, PROGNAME);
     #undef dedi
 }
 
 void RegisterEffects_Done()
 {
-    dprint("Effects initialization successful!\n");
+    LOG_TRACE("Effects initialization successful!\n");
 }
 
 // NOW we actually activate the declarations
-ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffects_First);
-EFFECTS
-ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffects_Done);
-#undef EFFECT
+ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffects_First)
+EFFECT(0, Null, string_null)
+#include "effects.inc"
+ACCUMULATE_FUNCTION(RegisterEffects, RegisterEffects_Done)
 
 #endif