X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fw_porto.qc;h=97b27d31c2a8bd8b74443e81e65f4ce351866f01;hb=5c2b8d6a63d1a274fa3e474c33582196d604a833;hp=ff26ff990636e70f8a891d03412d6f43120fe959;hpb=2319ba1ea3a3c808a2833d6fdc34492898fbc7ce;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/weapons/w_porto.qc b/qcsrc/common/weapons/w_porto.qc index ff26ff990..97b27d31c 100644 --- a/qcsrc/common/weapons/w_porto.qc +++ b/qcsrc/common/weapons/w_porto.qc @@ -1,21 +1,41 @@ #ifdef REGISTER_WEAPON REGISTER_WEAPON( -/* WEP_##id */ PORTO, -/* function */ w_porto, -/* ammotype */ 0, -/* impulse */ 0, -/* flags */ WEP_TYPE_OTHER | WEP_FLAG_SUPERWEAPON, -/* rating */ 0, -/* model */ "porto" , -/* shortname */ "porto", -/* fullname */ _("Port-O-Launch") +/* WEP_##id */ PORTO, +/* function */ W_Porto, +/* ammotype */ ammo_none, +/* impulse */ 0, +/* flags */ WEP_TYPE_OTHER | WEP_FLAG_SUPERWEAPON, +/* rating */ 0, +/* model */ "porto" , +/* netname */ "porto", +/* fullname */ _("Port-O-Launch") ); -#else + +#define PORTO_SETTINGS(w_cvar,w_prop) PORTO_SETTINGS_LIST(w_cvar, w_prop, PORTO, porto) +#define PORTO_SETTINGS_LIST(w_cvar,w_prop,id,sn) \ + w_cvar(id, sn, MO_BOTH, animtime) \ + w_cvar(id, sn, MO_BOTH, lifetime) \ + w_cvar(id, sn, MO_BOTH, refire) \ + w_cvar(id, sn, MO_BOTH, speed) \ + w_cvar(id, sn, MO_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 +PORTO_SETTINGS(WEP_ADD_CVAR, WEP_ADD_PROP) .entity porto_current; .vector porto_v_angle; // holds "held" view angles .float porto_v_angle_held; .vector right_vector; +#endif +#else +#ifdef SVQC +void spawnfunc_weapon_porto (void) { weapon_defaultspawnfunc(WEP_PORTO); } void W_Porto_Success (void) { @@ -46,7 +66,7 @@ void W_Porto_Fail (float failhard) self.realowner.porto_current = world; - if(self.cnt < 0 && !failhard && self.realowner.playerid == self.playerid && self.realowner.deadflag == DEAD_NO && !WEPSET_CONTAINS_EW(self.realowner, WEP_PORTO)) + if(self.cnt < 0 && !failhard && self.realowner.playerid == self.playerid && self.realowner.deadflag == DEAD_NO && !(self.realowner.weapons & WEPSET_PORTO)) { setsize (self, '-16 -16 0', '16 16 32'); setorigin(self, self.origin + trace_plane_normal); @@ -110,19 +130,19 @@ void W_Porto_Touch (void) if(self.realowner.playerid != self.playerid) { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); remove(self); } else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP) { - spamsound(self, CH_SHOTS, "porto/bounce.wav", VOL_BASE, ATTN_NORM); + spamsound(self, CH_SHOTS, "porto/bounce.wav", VOL_BASE, ATTEN_NORM); // just reflect self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal); self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal)); } else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); W_Porto_Fail(0); if(self.cnt < 0) Portal_ClearAll_PortalsOnly(self.realowner); @@ -132,14 +152,14 @@ void W_Porto_Touch (void) // in-portal only if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; centerprint(self.realowner, "^1In^7-portal created."); W_Porto_Success(); } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; W_Porto_Fail(0); } @@ -149,14 +169,14 @@ void W_Porto_Touch (void) // out-portal only if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; centerprint(self.realowner, "^4Out^7-portal created."); W_Porto_Success(); } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; W_Porto_Fail(0); } @@ -166,7 +186,7 @@ void W_Porto_Touch (void) self.effects += EF_BLUE - EF_RED; if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; centerprint(self.realowner, "^1In^7-portal created."); self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * norm); @@ -175,7 +195,7 @@ void W_Porto_Touch (void) } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; Portal_ClearAll_PortalsOnly(self.realowner); W_Porto_Fail(0); @@ -187,21 +207,21 @@ void W_Porto_Touch (void) { if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id)) { - sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM); trace_plane_normal = norm; centerprint(self.realowner, "^4Out^7-portal created."); W_Porto_Success(); } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); Portal_ClearAll_PortalsOnly(self.realowner); W_Porto_Fail(0); } } else { - sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM); Portal_ClearAll_PortalsOnly(self.realowner); W_Porto_Fail(0); } @@ -232,28 +252,15 @@ void W_Porto_Attack (float type) gren.scale = 4; setorigin(gren, w_shotorg); setsize(gren, '0 0 0', '0 0 0'); - - if(type > 0) - gren.nextthink = time + autocvar_g_balance_porto_secondary_lifetime; - else - gren.nextthink = time + autocvar_g_balance_porto_primary_lifetime; + + gren.nextthink = time + WEP_CVAR_BOTH(porto, (type <= 0), lifetime); gren.think = W_Porto_Think; gren.touch = W_Porto_Touch; - - if(type > 0) - { - if(self.items & IT_STRENGTH) - W_SetupProjectileVelocity(gren, autocvar_g_balance_porto_secondary_speed * autocvar_g_balance_powerup_strength_force, 0); - else - W_SetupProjectileVelocity(gren, autocvar_g_balance_porto_secondary_speed, 0); - } + + if(self.items & IT_STRENGTH) + W_SetupProjectileVelocity(gren, WEP_CVAR_BOTH(porto, (type <= 0), speed) * autocvar_g_balance_powerup_strength_force, 0); else - { - if(self.items & IT_STRENGTH) - W_SetupProjectileVelocity(gren, autocvar_g_balance_porto_primary_speed * autocvar_g_balance_powerup_strength_force, 0); - else - W_SetupProjectileVelocity(gren, autocvar_g_balance_porto_primary_speed, 0); - } + W_SetupProjectileVelocity(gren, WEP_CVAR_BOTH(porto, (type <= 0), speed), 0); gren.angles = vectoangles (gren.velocity); gren.flags = FL_PROJECTILE; @@ -274,13 +281,8 @@ void W_Porto_Attack (float type) other = gren; MUTATOR_CALLHOOK(EditProjectile); } -void spawnfunc_weapon_porto (void) -{ - weapon_defaultspawnfunc(WEP_PORTO); -} - -float w_nexball_weapon(float req); -float w_porto(float req) +float w_nexball_weapon(float req); // WEAPONTODO +float W_Porto(float req) { //vector v_angle_save; @@ -292,32 +294,37 @@ float w_porto(float req) { self.BUTTON_ATCK = FALSE; self.BUTTON_ATCK2 = FALSE; - if(!autocvar_g_balance_porto_secondary) - if(bot_aim(autocvar_g_balance_porto_primary_speed, 0, autocvar_g_balance_grenadelauncher_primary_lifetime, FALSE)) + if(!WEP_CVAR(porto, secondary)) + if(bot_aim(WEP_CVAR_PRI(porto, speed), 0, WEP_CVAR_PRI(porto, lifetime), FALSE)) self.BUTTON_ATCK = TRUE; return TRUE; } + case WR_CONFIG: + { + PORTO_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS) + return TRUE; + } case WR_THINK: { - if(autocvar_g_balance_porto_secondary) + if(WEP_CVAR(porto, secondary)) { if (self.BUTTON_ATCK) if (!self.porto_current) if (!self.porto_forbidden) - if (weapon_prepareattack(0, autocvar_g_balance_porto_primary_refire)) + if (weapon_prepareattack(0, WEP_CVAR_PRI(porto, refire))) { W_Porto_Attack(0); - weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_porto_primary_animtime, w_ready); + weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(porto, animtime), w_ready); } if (self.BUTTON_ATCK2) if (!self.porto_current) if (!self.porto_forbidden) - if (weapon_prepareattack(1, autocvar_g_balance_porto_secondary_refire)) + if (weapon_prepareattack(1, WEP_CVAR_SEC(porto, refire))) { W_Porto_Attack(1); - weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_porto_secondary_animtime, w_ready); + weapon_thinkf(WFRAME_FIRE2, WEP_CVAR_SEC(porto, animtime), w_ready); } } else @@ -347,16 +354,16 @@ float w_porto(float req) if (self.BUTTON_ATCK) if (!self.porto_current) if (!self.porto_forbidden) - if (weapon_prepareattack(0, autocvar_g_balance_porto_primary_refire)) + if (weapon_prepareattack(0, WEP_CVAR_PRI(porto, refire))) { W_Porto_Attack(-1); - weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_porto_primary_animtime, w_ready); + weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(porto, animtime), w_ready); } } return TRUE; } - case WR_PRECACHE: + case WR_INIT: { precache_model ("models/weapons/g_porto.md3"); precache_model ("models/weapons/v_porto.md3"); @@ -368,11 +375,11 @@ float w_porto(float req) precache_sound ("porto/explode.wav"); precache_sound ("porto/fire.wav"); precache_sound ("porto/unsupported.wav"); + PORTO_SETTINGS(WEP_SKIPCVAR, WEP_SET_PROP) return TRUE; } case WR_SETUP: { - weapon_setup(WEP_PORTO); self.current_ammo = ammo_none; return TRUE; } @@ -386,7 +393,7 @@ float w_porto(float req) } #endif #ifdef CSQC -float w_porto(float req) +float W_Porto(float req) { switch(req) { @@ -395,7 +402,7 @@ float w_porto(float req) print("Since when does Porto send DamageInfo?\n"); return TRUE; } - case WR_PRECACHE: + case WR_INIT: { // nothing to do return TRUE;