X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fmutator_overkill.qc;h=d2086215f931dc94143c9c1e71958e8932d14a0b;hb=e95082e3dbb7cb2b54189dc05fb923c768babad7;hp=1c8e5883fc6ffa1b36f3f6a86ce9ea16f41c72a7;hpb=046bea116835a7d137712f2f1d4e6fd62cce5769;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/mutator_overkill.qc b/qcsrc/server/mutators/mutator_overkill.qc index 1c8e5883f..d2086215f 100644 --- a/qcsrc/server/mutators/mutator_overkill.qc +++ b/qcsrc/server/mutators/mutator_overkill.qc @@ -3,9 +3,9 @@ #include "mutator.qh" -void W_Blaster_Attack(float, float, float, float, float, float, float, float, float, float); -void spawnfunc_weapon_hmg(); -void spawnfunc_weapon_rpc(); +void W_Blaster_Attack(entity, float, float, float, float, float, float, float, float, float, float); +spawnfunc(weapon_hmg); +spawnfunc(weapon_rpc); void ok_DecreaseCharge(entity ent, int wep) { @@ -64,28 +64,27 @@ MUTATOR_HOOKFUNCTION(ok_PlayerDamage_Calculate) } MUTATOR_HOOKFUNCTION(ok_PlayerDamage_SplitHealthArmor) -{ +{SELFPARAM(); if(damage_take) self.ok_pauseregen_finished = max(self.ok_pauseregen_finished, time + 2); return false; } MUTATOR_HOOKFUNCTION(ok_PlayerDies) -{ - entity oldself = self; +{SELFPARAM(); entity targ = ((frag_attacker) ? frag_attacker : frag_target); - if(self.flags & FL_MONSTER) + if(IS_MONSTER(self)) { remove(other); // remove default item other = world; } - self = spawn(); + setself(spawn()); self.ok_item = true; self.noalign = true; self.pickup_anyway = true; - spawnfunc_item_armor_small(); + spawnfunc_item_armor_small(this); self.movetype = MOVETYPE_TOSS; self.gravity = 1; self.reset = SUB_Remove; @@ -93,7 +92,7 @@ MUTATOR_HOOKFUNCTION(ok_PlayerDies) self.velocity = '0 0 200' + normalize(targ.origin - self.origin) * 500; self.classname = "droppedweapon"; // hax SUB_SetFade(self, time + 5, 1); - self = oldself; + setself(this); self.ok_lastwep = self.switchweapon; @@ -101,7 +100,7 @@ MUTATOR_HOOKFUNCTION(ok_PlayerDies) } MUTATOR_HOOKFUNCTION(ok_PlayerRegen) -{ +{SELFPARAM(); // overkill's values are different, so use custom regen if(!self.frozen) { @@ -114,7 +113,7 @@ MUTATOR_HOOKFUNCTION(ok_PlayerRegen) minf = autocvar_g_balance_fuel_regenstable; limitf = autocvar_g_balance_fuel_limit; - self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, frametime * (time > self.pauseregen_finished) * ((self.items & IT_FUEL_REGEN) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > self.pauserotfuel_finished), limitf); + self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, frametime * (time > self.pauseregen_finished) * ((self.items & ITEM_JetpackRegen.m_itemid) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, frametime * (time > self.pauserotfuel_finished), limitf); } return true; // return true anyway, as frozen uses no regen } @@ -125,7 +124,7 @@ MUTATOR_HOOKFUNCTION(ok_ForbidThrowCurrentWeapon) } MUTATOR_HOOKFUNCTION(ok_PlayerPreThink) -{ +{SELFPARAM(); if(intermission_running || gameover) return false; @@ -141,7 +140,7 @@ MUTATOR_HOOKFUNCTION(ok_PlayerPreThink) ok_IncreaseCharge(self, self.weapon); if(self.BUTTON_ATCK2) - if(!forbidWeaponUse() || self.weapon_blocked) // allow if weapon is blocked + if(!forbidWeaponUse(self) || self.weapon_blocked) // allow if weapon is blocked if(time >= self.jump_interval) { self.jump_interval = time + WEP_CVAR_PRI(blaster, refire) * W_WeaponRateFactor(); @@ -150,6 +149,7 @@ MUTATOR_HOOKFUNCTION(ok_PlayerPreThink) int oldwep = self.weapon; self.weapon = WEP_BLASTER.m_id; W_Blaster_Attack( + self, WEP_BLASTER.m_id | HITTYPE_SECONDARY, WEP_CVAR_SEC(vaporizer, shotangle), WEP_CVAR_SEC(vaporizer, damage), @@ -175,10 +175,11 @@ MUTATOR_HOOKFUNCTION(ok_PlayerPreThink) { //Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_OVERKILL_CHARGE); self.ok_notice_time = time + 2; - play2(self, "weapons/dryfire.wav"); + play2(self, SND(DRYFIRE)); } + Weapon wpn = get_weaponinfo(self.weapon); if(self.weaponentity.state != WS_CLEAR) - w_ready(); + w_ready(wpn, self, self.BUTTON_ATCK, self.BUTTON_ATCK2); self.weapon_blocked = true; } @@ -189,7 +190,7 @@ MUTATOR_HOOKFUNCTION(ok_PlayerPreThink) } MUTATOR_HOOKFUNCTION(ok_PlayerSpawn) -{ +{SELFPARAM(); if(autocvar_g_overkill_ammo_charge) { for(int i = WEP_FIRST; i <= WEP_LAST; ++i) @@ -206,8 +207,11 @@ MUTATOR_HOOKFUNCTION(ok_PlayerSpawn) return false; } +void _spawnfunc_weapon_hmg() { SELFPARAM(); spawnfunc_weapon_hmg(this); } +void _spawnfunc_weapon_rpc() { SELFPARAM(); spawnfunc_weapon_rpc(this); } + MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) -{ +{SELFPARAM(); if(autocvar_g_powerups) if(autocvar_g_overkill_powerups_replace) { @@ -215,7 +219,7 @@ MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) { entity wep = spawn(); setorigin(wep, self.origin); - setmodel(wep, "models/weapons/g_ok_hmg.md3"); + setmodel(wep, MDL_OK_HMG); wep.classname = "weapon_hmg"; wep.ok_item = true; wep.noalign = self.noalign; @@ -223,7 +227,7 @@ MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) wep.team = self.team; wep.respawntime = autocvar_g_overkill_superguns_respawn_time; wep.pickup_anyway = true; - wep.think = spawnfunc_weapon_hmg; + wep.think = _spawnfunc_weapon_hmg; wep.nextthink = time + 0.1; return true; } @@ -232,7 +236,7 @@ MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) { entity wep = spawn(); setorigin(wep, self.origin); - setmodel(wep, "models/weapons/g_ok_rl.md3"); + setmodel(wep, MDL_OK_RPC); wep.classname = "weapon_rpc"; wep.ok_item = true; wep.noalign = self.noalign; @@ -240,7 +244,7 @@ MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) wep.team = self.team; wep.respawntime = autocvar_g_overkill_superguns_respawn_time; wep.pickup_anyway = true; - wep.think = spawnfunc_weapon_rpc; + wep.think = _spawnfunc_weapon_rpc; wep.nextthink = time + 0.1; return true; } @@ -250,21 +254,21 @@ MUTATOR_HOOKFUNCTION(ok_OnEntityPreSpawn) } MUTATOR_HOOKFUNCTION(ok_ItemRemove) -{ +{SELFPARAM(); if(self.ok_item) return false; switch(self.items) { - case IT_HEALTH: return !(autocvar_g_overkill_100h_anyway); - case IT_ARMOR: return !(autocvar_g_overkill_100a_anyway); + case ITEM_HealthMega.m_itemid: return !(autocvar_g_overkill_100h_anyway); + case ITEM_ArmorMega.m_itemid: return !(autocvar_g_overkill_100a_anyway); } return true; } MUTATOR_HOOKFUNCTION(ok_SpectateCopy) -{ +{SELFPARAM(); self.ammo_charge[self.weapon] = other.ammo_charge[other.weapon]; self.ok_use_ammocharge = other.ok_use_ammocharge; @@ -273,10 +277,10 @@ MUTATOR_HOOKFUNCTION(ok_SpectateCopy) MUTATOR_HOOKFUNCTION(ok_StartItems) { - WepSet ok_start_items = (WEPSET_MACHINEGUN | WEPSET_VORTEX | WEPSET_SHOTGUN); + WepSet ok_start_items = (WEPSET(MACHINEGUN) | WEPSET(VORTEX) | WEPSET(SHOTGUN)); - if(WEP_RPC.weaponstart > 0) { ok_start_items |= WEPSET_RPC; } - if(WEP_HMG.weaponstart > 0) { ok_start_items |= WEPSET_HMG; } + if(WEP_RPC.weaponstart > 0) { ok_start_items |= WEPSET(RPC); } + if(WEP_HMG.weaponstart > 0) { ok_start_items |= WEPSET(HMG); } start_items |= IT_UNLIMITED_WEAPON_AMMO; start_weapons = warmup_start_weapons = ok_start_items; @@ -317,20 +321,6 @@ void ok_Initialize() precache_all_playermodels("models/ok_player/*.dpm"); - precache_model("models/weapons/h_ok_mg.iqm"); - precache_model("models/weapons/v_ok_mg.md3"); - precache_model("models/weapons/g_ok_mg.md3"); - - precache_model("models/weapons/h_ok_shotgun.iqm"); - precache_model("models/weapons/v_ok_shotgun.md3"); - precache_model("models/weapons/g_ok_shotgun.md3"); - - precache_model("models/weapons/h_ok_sniper.iqm"); - precache_model("models/weapons/v_ok_sniper.md3"); - precache_model("models/weapons/g_ok_sniper.md3"); - - precache_sound("weapons/dryfire.wav"); - addstat(STAT_OK_AMMO_CHARGE, AS_FLOAT, ok_use_ammocharge); addstat(STAT_OK_AMMO_CHARGEPOOL, AS_FLOAT, ok_ammo_charge);