X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fw_crylink.qc;h=5d38038341877b9b4c9154e53caf5f3e80d90cf9;hb=b2f7f63a434235693c20b536852d40109a6fda92;hp=8c79e2091e531a392d29fbe529c3c927507920b7;hpb=3a3bb69229fa0088270449da8b585a10613a412e;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/w_crylink.qc b/qcsrc/common/weapons/w_crylink.qc index 8c79e2091..5d3803834 100644 --- a/qcsrc/common/weapons/w_crylink.qc +++ b/qcsrc/common/weapons/w_crylink.qc @@ -1,46 +1,52 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON( /* WEP_##id */ CRYLINK, -/* function */ w_crylink, -/* ammotype */ IT_CELLS, +/* function */ W_Crylink, +/* ammotype */ ammo_cells, /* impulse */ 6, /* flags */ WEP_FLAG_NORMAL | WEP_FLAG_RELOADABLE | WEP_TYPE_SPLASH, /* rating */ BOT_PICKUP_RATING_MID, +/* color */ '1 0.5 1', /* model */ "crylink", /* netname */ "crylink", /* fullname */ _("Crylink") ); -#define CRYLINK_SETTINGS(w_cvar,w_prop) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, ammo) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, animtime) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, damage) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, edgedamage) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, radius) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, force) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, spread) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, refire) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, speed) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, shots) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, bounces) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, bouncedamagefactor) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, middle_lifetime) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, middle_fadetime) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, other_lifetime) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, other_fadetime) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, linkexplode) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, joindelay) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, joinspread) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, joinexplode) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, joinexplode_damage) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, joinexplode_edgedamage) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, joinexplode_radius) \ - w_cvar(WEP_CRYLINK, crylink, MO_BOTH, joinexplode_force) \ - w_cvar(WEP_CRYLINK, crylink, MO_SEC, spreadtype) \ - w_prop(WEP_CRYLINK, crylink, float, reloading_ammo, reload_ammo) \ - w_prop(WEP_CRYLINK, crylink, float, reloading_time, reload_time) \ - w_prop(WEP_CRYLINK, crylink, float, switchdelay_raise, switchdelay_raise) \ - w_prop(WEP_CRYLINK, crylink, float, switchdelay_drop, switchdelay_drop) +#define CRYLINK_SETTINGS(w_cvar,w_prop) CRYLINK_SETTINGS_LIST(w_cvar, w_prop, CRYLINK, crylink) +#define CRYLINK_SETTINGS_LIST(w_cvar,w_prop,id,sn) \ + w_cvar(id, sn, BOTH, ammo) \ + w_cvar(id, sn, BOTH, animtime) \ + w_cvar(id, sn, BOTH, damage) \ + w_cvar(id, sn, BOTH, edgedamage) \ + w_cvar(id, sn, BOTH, radius) \ + w_cvar(id, sn, BOTH, force) \ + w_cvar(id, sn, BOTH, spread) \ + w_cvar(id, sn, BOTH, refire) \ + w_cvar(id, sn, BOTH, speed) \ + w_cvar(id, sn, BOTH, shots) \ + w_cvar(id, sn, BOTH, bounces) \ + w_cvar(id, sn, BOTH, bouncedamagefactor) \ + w_cvar(id, sn, BOTH, middle_lifetime) \ + w_cvar(id, sn, BOTH, middle_fadetime) \ + w_cvar(id, sn, BOTH, other_lifetime) \ + w_cvar(id, sn, BOTH, other_fadetime) \ + w_cvar(id, sn, BOTH, linkexplode) \ + w_cvar(id, sn, BOTH, joindelay) \ + w_cvar(id, sn, BOTH, joinspread) \ + w_cvar(id, sn, BOTH, joinexplode) \ + w_cvar(id, sn, BOTH, joinexplode_damage) \ + w_cvar(id, sn, BOTH, joinexplode_edgedamage) \ + w_cvar(id, sn, BOTH, joinexplode_radius) \ + w_cvar(id, sn, BOTH, joinexplode_force) \ + w_cvar(id, sn, SEC, spreadtype) \ + w_cvar(id, sn, NONE, secondary) \ + w_prop(id, sn, float, reloading_ammo, reload_ammo) \ + w_prop(id, sn, float, reloading_time, reload_time) \ + w_prop(id, sn, float, switchdelay_raise, switchdelay_raise) \ + w_prop(id, sn, float, switchdelay_drop, switchdelay_drop) \ + w_prop(id, sn, string, weaponreplace, weaponreplace) \ + w_prop(id, sn, float, weaponstart, weaponstart) \ + w_prop(id, sn, float, weaponstartoverride, weaponstartoverride) #ifdef SVQC CRYLINK_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) @@ -235,10 +241,18 @@ void W_Crylink_LinkJoinEffect_Think() if(WEP_CVAR_BOTH(crylink, isprimary, joinexplode)) { n /= WEP_CVAR_BOTH(crylink, isprimary, shots); - RadiusDamage(e, e.realowner, WEP_CVAR_BOTH(crylink, isprimary, joinexplode_damage) * n, - WEP_CVAR_BOTH(crylink, isprimary, joinexplode_edgedamage) * n, - WEP_CVAR_BOTH(crylink, isprimary, joinexplode_radius) * n, e.realowner, world, - WEP_CVAR_BOTH(crylink, isprimary, joinexplode_force) * n, e.projectiledeathtype, other); + RadiusDamage( + e, + e.realowner, + WEP_CVAR_BOTH(crylink, isprimary, joinexplode_damage) * n, + WEP_CVAR_BOTH(crylink, isprimary, joinexplode_edgedamage) * n, + WEP_CVAR_BOTH(crylink, isprimary, joinexplode_radius) * n, + e.realowner, + world, + WEP_CVAR_BOTH(crylink, isprimary, joinexplode_force) * n, + e.projectiledeathtype, + other + ); pointparticles(particleeffectnum("crylink_joinexplode"), self.origin, '0 0 0', n); } } @@ -328,7 +342,7 @@ void W_Crylink_Attack (void) vector forward, right, up; float maxdmg; - W_DecreaseAmmo(ammo_cells, autocvar_g_balance_crylink_primary_ammo, autocvar_g_balance_crylink_reload_ammo); + W_DecreaseAmmo(WEP_CVAR_PRI(crylink, ammo)); maxdmg = WEP_CVAR_PRI(crylink, damage) * WEP_CVAR_PRI(crylink, shots); maxdmg *= 1 + WEP_CVAR_PRI(crylink, bouncedamagefactor) * WEP_CVAR_PRI(crylink, bounces); @@ -390,7 +404,7 @@ void W_Crylink_Attack (void) s_z = v_forward_y; } s = s * WEP_CVAR_PRI(crylink, spread) * g_weaponspreadfactor; - W_SetupProjectileVelocityEx(proj, w_shotdir + right * s_y + up * s_z, v_up, WEP_CVAR_PRI(crylink, speed), 0, 0, 0, FALSE); + W_SetupProjVelocity_Explicit(proj, w_shotdir + right * s_y + up * s_z, v_up, WEP_CVAR_PRI(crylink, speed), 0, 0, 0, FALSE); proj.touch = W_Crylink_Touch; proj.think = W_Crylink_Fadethink; @@ -437,7 +451,7 @@ void W_Crylink_Attack2 (void) vector forward, right, up; float maxdmg; - W_DecreaseAmmo(ammo_cells, autocvar_g_balance_crylink_secondary_ammo, autocvar_g_balance_crylink_reload_ammo); + W_DecreaseAmmo(WEP_CVAR_SEC(crylink, ammo)); maxdmg = WEP_CVAR_SEC(crylink, damage) * WEP_CVAR_SEC(crylink, shots); maxdmg *= 1 + WEP_CVAR_SEC(crylink, bouncedamagefactor) * WEP_CVAR_SEC(crylink, bounces); @@ -507,7 +521,7 @@ void W_Crylink_Attack2 (void) s = (w_shotdir + (((counter + 0.5) / shots) * 2 - 1) * v_right * WEP_CVAR_SEC(crylink, spread) * g_weaponspreadfactor); } - W_SetupProjectileVelocityEx(proj, s, v_up, WEP_CVAR_SEC(crylink, speed), 0, 0, 0, FALSE); + W_SetupProjVelocity_Explicit(proj, s, v_up, WEP_CVAR_SEC(crylink, speed), 0, 0, 0, FALSE); proj.touch = W_Crylink_Touch; proj.think = W_Crylink_Fadethink; if(counter == (shots - 1) / 2) @@ -545,7 +559,7 @@ void W_Crylink_Attack2 (void) } } -float w_crylink(float req) +float W_Crylink(float req) { float ammo_amount; switch(req) @@ -561,7 +575,7 @@ float w_crylink(float req) } case WR_THINK: { - if(autocvar_g_balance_crylink_reload_ammo && self.clip_load < min(autocvar_g_balance_crylink_primary_ammo, autocvar_g_balance_crylink_secondary_ammo)) // forced reload + if(autocvar_g_balance_crylink_reload_ammo && self.clip_load < min(WEP_CVAR_PRI(crylink, ammo), WEP_CVAR_SEC(crylink, ammo))) // forced reload WEP_ACTION(self.weapon, WR_RELOAD); if (self.BUTTON_ATCK) @@ -605,7 +619,7 @@ float w_crylink(float req) setorigin(linkjoineffect, pos); } self.crylink_waitrelease = 0; - if(!w_crylink(WR_CHECKAMMO1) && !w_crylink(WR_CHECKAMMO2)) + if(!W_Crylink(WR_CHECKAMMO1) && !W_Crylink(WR_CHECKAMMO2)) if(!(self.items & IT_UNLIMITED_WEAPON_AMMO)) { // ran out of ammo! @@ -628,19 +642,14 @@ float w_crylink(float req) CRYLINK_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP) return TRUE; } - case WR_SETUP: - { - self.current_ammo = ammo_cells; - return TRUE; - } case WR_CHECKAMMO1: { // don't "run out of ammo" and switch weapons while waiting for release if(self.crylink_lastgroup && self.crylink_waitrelease) return TRUE; - ammo_amount = self.ammo_cells >= autocvar_g_balance_crylink_primary_ammo; - ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= autocvar_g_balance_crylink_primary_ammo; + ammo_amount = self.WEP_AMMO(WEP_CRYLINK) >= WEP_CVAR_PRI(crylink, ammo); + ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= WEP_CVAR_PRI(crylink, ammo); return ammo_amount; } case WR_CHECKAMMO2: @@ -649,8 +658,8 @@ float w_crylink(float req) if(self.crylink_lastgroup && self.crylink_waitrelease) return TRUE; - ammo_amount = self.ammo_cells >= autocvar_g_balance_crylink_secondary_ammo; - ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= autocvar_g_balance_crylink_secondary_ammo; + ammo_amount = self.WEP_AMMO(WEP_CRYLINK) >= WEP_CVAR_SEC(crylink, ammo); + ammo_amount += self.(weapon_load[WEP_CRYLINK]) >= WEP_CVAR_SEC(crylink, ammo); return ammo_amount; } case WR_CONFIG: @@ -660,7 +669,7 @@ float w_crylink(float req) } case WR_RELOAD: { - W_Reload(min(autocvar_g_balance_crylink_primary_ammo, autocvar_g_balance_crylink_secondary_ammo), "weapons/reload.wav"); + W_Reload(min(WEP_CVAR_PRI(crylink, ammo), WEP_CVAR_SEC(crylink, ammo)), "weapons/reload.wav"); return TRUE; } case WR_SUICIDEMESSAGE: @@ -676,7 +685,7 @@ float w_crylink(float req) } #endif #ifdef CSQC -float w_crylink(float req) +float W_Crylink(float req) { switch(req) { @@ -705,6 +714,11 @@ float w_crylink(float req) precache_sound("weapons/crylink_impact.wav"); return TRUE; } + case WR_ZOOMRETICLE: + { + // no weapon specific image for this weapon + return FALSE; + } } return TRUE; }