//******************************************************************************// Call of Duty 4 - eXtreme+ modification//******************************************************************************// author : eXtreme+ Support Crew// email : admin@mycallofduty.com// website : http://www.mycallofduty.com//// mod : X4 : eXtreme+ Warfare// version : 2.0// update : June 2008//******************************************************************************//******************************************************************************// X4 Ranks//******************************************************************************// Off = 0// On = 1 (default)set ex_ranks "1"// 0 = off// 1 = on (default)set ex_wmd_notify "1"// 0 = off (default)// 1 = onset ex_stock_notify "1"//******************************************************************************// Hardpoints//******************************************************************************set scr_hardpoint_allowuav "0"set scr_hardpoint_allowartillery "0"set scr_hardpoint_allowairstrike "1"set scr_hardpoint_allowhelicopter "1"set scr_hardpoint_allownapalm "0"set scr_hardpoint_allowac13025mm "1"set scr_hardpoint_allowac13040mm "1"set scr_hardpoint_allowac130105mm "1"set scr_hardpoint_allownnuke "1"// Air Raid Siren - Global Alert// 0 = Off (default)// 1 = Onset ex_airraid_siren_global "1"// WMD's on STREAKS / POINTS / KILLS// You must have one and only one of these set to 1// 0 = off// 1 = on (default set on Streaks)set ex_wmd_streaks "1"set ex_wmd_kills "0"set ex_wmd_points "0"//******************************************************************************// UAV -- Radar//******************************************************************************// UAV available at how many streaks/kills/points?// min = 1, max = 999, default = 3//set ex_wmd_uav "3" //Streaks//set ex_wmd_uav 4" //Kills//set ex_wmd_uav "30" //Points// UAV Time (in seconds) // Min = 5, max = 999 (default 30)set ex_wmd_uav_time "30"//******************************************************************************// Artillery -- NOT AVAILABLE YET!//******************************************************************************// Artillery available at how many streaks/kills/points?// min = 1, max = 999, default = 5//set ex_wmd_artillery "3" //Streaks//set ex_wmd_artillery "15" //Kills//set ex_wmd_artillery "50" //Points//******************************************************************************// Airstrike -- Clusterbomb//******************************************************************************// Airstrike available at how many streaks/kills/points?// min = 1, max = 999, default = 5set ex_wmd_airstrike "5" //Streaks//set ex_wmd_airstrike "6" //Kills//set ex_wmd_airstrike "60" //Points//******************************************************************************// Helicopter//******************************************************************************// Helicopter available at how many streaks/kills/points?// min = 1, max = 999, default = 7set ex_wmd_chopper "5" //Streaks//set ex_wmd_chopper "10" //Kills//set ex_wmd_chopper "90" //Points//******************************************************************************// Airstrike -- Napalm//******************************************************************************// Napalm available at how many streaks/kills/points?// min = 1, max = 999, default = 10//set ex_wmd_napalm "12" //Streaks//set ex_wmd_napalm "15" //Kills//set ex_wmd_napalm "120" //Points// Radius (default 3000) // Min = 0 // Max = 9999 set ex_wmd_napalmradius "3000" // Minimum Damage (default 30) // Min = 0 // Max = 9999 set ex_wmd_napalmmin "200" // Maximum Damage (default 200) // Min = 0 // Max = 9999 //set ex_wmd_napalmmax "500"//******************************************************************************// AC130 Static//******************************************************************************// This will give the AC130 a Static like view// Off = 0, On = 1, default = 0set ex_ac130_static "1"//******************************************************************************// ATTN: You might want to set the next WMD's at high levels to avoid the // players from getting the next WMD while in the AC130 gunship!!!!!!!!!!//******************************************************************************// AC130 Gunship -- 25mm Gun//******************************************************************************// AC130 available at how many streaks/kills/points? min = 1, max = 999, default = 10set ex_wmd_ac130_25mm "7" //Streaks//set ex_wmd_ac130_25mm "20" //Kills//set ex_wmd_ac130_25mm "150" //Points// Players Time (in seconds) in the AC130 with 25mm Gattling Gun// Min = 10, max = 999 (default 30)set ex_ac130_25mm_time "60"//******************************************************************************// AC130 Gunship -- 40mm Gun//******************************************************************************// AC130 available at how many streaks/kills/points?// min = 1, max = 999, default = 10set ex_wmd_ac130_40mm "9" //Streaks//set ex_wmd_ac130_40mm "25" //Kills//set ex_wmd_ac130_40mm "180" //Points// Players Time (in seconds) in the AC130 with 40mm Cannon// Min = 10, max = 999 (default 45)set ex_ac130_40mm_time "60"//******************************************************************************// AC130 Gunship -- 105mm Gun//******************************************************************************// AC130 available at how many streaks/kills/pointmin = 1, max = 999, default = 10set ex_wmd_ac130_105mm "12" //Streaks//set ex_wmd_ac130_105mm "30" //Kills//set ex_wmd_ac130_105mm "210" //Points// Players Time (in seconds) in the AC130 with 105mm Cannon// Min = 10, max = 999 (default 60)set ex_ac130_105mm_time "60"//******************************************************************************// Nuclear Drop//******************************************************************************// Nuke Drop available at how many streaks/kills/points?// min = 1, max = 999, default = 10set ex_wmd_nuke "15" //Streaks//set ex_wmd_nuke "35" //Kills//set ex_wmd_nuke "240" //Points// Radius (default 3000)// Min = 0// Max = 9999set ex_wmd_nukeradius "6000"// Minimum Damage (default 30)// Min = 0// Max = 9999set ex_wmd_nukemin "80"//set ex_wmd_nukemin "30"// Maximum Damage (default 200)// Min = 0// Max = 9999set ex_wmd_nukemax "1000"//set ex_wmd_nukemax "200"
#include maps\mp\_utility; init() { precacheModel("c130_zoomrig"); precacheModel("vehicle_ac130_low"); precacheShader("ac130_overlay_25mm"); precacheShader("ac130_overlay_40mm"); precacheShader("ac130_overlay_105mm"); precacheShader("ac130_overlay_grain"); precacheItem("ac130_25mm_mp"); precacheItem("ac130_40mm_mp"); precacheItem("ac130_105mm_mp"); level.physicsSphereRadius["ac130_25mm_mp"] = 200; level.physicsSphereRadius["ac130_40mm_mp"] = 600; level.physicsSphereRadius["ac130_105mm_mp"] = 1000; level.physicsSphereForce["ac130_25mm_mp"] = 0.5; level.physicsSphereForce["ac130_40mm_mp"] = 3.0; level.physicsSphereForce["ac130_105mm_mp"] = 6.0; level.ac130_rotationSpeed = 40; } main() { ac130Origin = level.ex_playArea_Centre; ac130Origin = getAboveBuildingsLocation(ac130Origin); level.ac130 = spawn("script_model", ac130Origin); level.ac130 setModel("c130_zoomrig"); level.ac130.angles = (0,75,0); level.ac130 hide(); level.ac130model = spawn("script_model", ac130Origin); level.ac130model setModel("vehicle_ac130_low"); level.ac130.angles = (0,75,0); level.ac130model linkTo(level.ac130, "tag_player", (000,0,0), (0,0,0)); level.ac130model hide(); thread rotatePlane(true); } getAboveBuildingsLocation(location) { trace = bullettrace(location + (0,0,10000), location, false, undefined); startorigin = trace["position"] + (0,0,-514); zpos = 0; maxxpos = 13; maxypos = 13; for (xpos = 0; xpos < maxxpos; xpos++) { for (ypos = 0; ypos < maxypos; ypos++) { thisstartorigin = startorigin + ((xpos/(maxxpos-1) - .5) * 1024, (ypos/(maxypos-1) - .5) * 1024, 0); thisorigin = bullettrace(thisstartorigin, thisstartorigin + (0,0,-10000), false, undefined); zpos += thisorigin["position"][2]; } } zpos = zpos / (maxxpos*maxypos); zpos = zpos + 1000; return (location[0], location[1], zpos); } rotatePlane(toggle) { level notify("stop_rotatePlane_thread"); level endon("stop_rotatePlane_thread"); if(toggle) { for(;;) { level.ac130 rotateyaw( 360, level.ac130_rotationSpeed ); wait level.ac130_rotationSpeed; } } else level.ac130 rotateyaw( level.ac130.angles[2], 0.05 ); } ac130_attachPlayer() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); if(level.inPrematchPeriod) return; if(isDefined(level.ac130Player)) return; self hide(); level.ac130model show(); level.ac130Player = self; level.ac130Player.ac130 = true; level.ac130Player hide(); if(isDefined(self.ex_healthbar)) self.ex_healthbar destroy(); if(isDefined(self.ex_healthback)) self.ex_healthback destroy(); if(isDefined(self.ex_healthcross)) self.ex_healthcross destroy(); level.ac130Player.health = 9000; self [[level.ex_clientcmd]]("gocrouch"); level.ac130Player linkTo(level.ac130, "tag_player", (4000,0,0), (0,0,0)); self playLoopSound( "ambient_ac130_int1_sur" ); thread changeWeapons(); thread shotFired(); } ac130_attachPlayer_25mm() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ex_dead"); self endon("joined_spectators"); if(level.inPrematchPeriod) return; if(isDefined(level.ac130Player)) return; //Record weapons and ammo before we take them away. ammoClipList = []; ammoStockList = []; weaponsList = self GetWeaponsList(); for (i = 0; i < weaponsList.size; i++) { ammoClipList[ammoClipList.size] = self GetWeaponAmmoClip( weaponsList[i] ); ammoStockList[ammoStockList.size] = self GetWeaponAmmoStock( weaponsList[i] ); } //Record health before we bump it skyhigh ;) originalHealth = self.health; //logprint("self.health = " + originalhealth); level.ac130model show(); level.ac130Player = self; level.ac130Player.ac130 = true; level.ac130Player hide(); if(isDefined(self.ex_healthbar)) self.ex_healthbar destroy(); if(isDefined(self.ex_healthback)) self.ex_healthback destroy(); if(isDefined(self.ex_healthcross)) self.ex_healthcross destroy(); level.ac130Player.health = 9000; self [[level.ex_clientcmd]]("gocrouch"); level.ac130Player linkTo(level.ac130, "tag_player", (4000,0,0), (0,0,0)); self hide(); thread changeWeapons_25mm(); thread shotFired(); if(level.ex_air_raid_global) thread extreme\_ex_utils::playSoundLoc("air_raid",(0,0,0)); if(level.ex_air_raid_team) thread extreme\_ex_utils::playSoundOnPlayers("air_raid"); //self iprintlnbold("You have " + level.ex_ac130_25mm_timer + " Seconds"); if (!isdefined(self.ac130timer)) { self.ac130timer = newClientHudElem(self); self.ac130timer.sort = -1; self.ac130timer.archived = false; self.ac130timer.alignX = "center"; self.ac130timer.alignY = "middle"; self.ac130timer.fontscale = 2.0; self.ac130timer.x = 320; self.ac130timer.y = 420; } self.ac130timer SetTimer( level.ex_ac130_25mm_timer ); iprintln("^3AC130 25MM GUNSHIP INBOUND ^1TAKE COVER!"); wait level.ex_ac130_25mm_timer; level.ac130Player unlink(); level.ac130model hide(); thread ac130_detachPlayer(); //Put weapons and health back self resetWeapons(weaponsList, ammoClipList, ammoStockList); self.health = originalHealth; //logprint("self.health = " + originalhealth); self show(); if(level.ex_healthbar) self thread extreme\_ex_healthbar::start(); } ac130_attachPlayer_40mm() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ex_dead"); self endon("joined_spectators"); if(level.inPrematchPeriod) return; if(isDefined(level.ac130Player)) return; //Record weapons and ammo before we take them away. ammoClipList = []; ammoStockList = []; weaponsList = self GetWeaponsList(); for (i = 0; i < weaponsList.size; i++) { ammoClipList[ammoClipList.size] = self GetWeaponAmmoClip( weaponsList[i] ); ammoStockList[ammoStockList.size] = self GetWeaponAmmoStock( weaponsList[i] ); } //Record health before we bump it skyhigh ;) originalHealth = self.health; level.ac130model show(); level.ac130Player = self; level.ac130Player.ac130 = true; level.ac130Player hide(); if(isDefined(self.ex_healthbar)) self.ex_healthbar destroy(); if(isDefined(self.ex_healthback)) self.ex_healthback destroy(); if(isDefined(self.ex_healthcross)) self.ex_healthcross destroy(); level.ac130Player.health = 9000; self [[level.ex_clientcmd]]("gocrouch"); level.ac130Player linkTo(level.ac130, "tag_player", (4000,0,0), (0,0,0)); self hide(); thread changeWeapons_40mm(); thread shotFired(); if(level.ex_air_raid_global) thread extreme\_ex_utils::playSoundLoc("air_raid",(0,0,0)); if(level.ex_air_raid_team) thread extreme\_ex_utils::playSoundOnPlayers("air_raid"); //self iprintlnbold("You have " + level.ex_ac130_40mm_timer + " Seconds"); if (!isdefined(self.ac130timer)) { self.ac130timer = newClientHudElem(self); self.ac130timer.sort = -1; self.ac130timer.archived = false; self.ac130timer.alignX = "center"; self.ac130timer.alignY = "middle"; self.ac130timer.fontscale = 2.0; self.ac130timer.x = 320; self.ac130timer.y = 420; } self.ac130timer SetTimer( level.ex_ac130_40mm_timer ); iprintln("^3AC130 40MM GUNSHIP INBOUND ^1TAKE COVER!"); wait level.ex_ac130_40mm_timer; self show(); level.ac130Player unlink(); level.ac130model hide(); thread ac130_detachPlayer(); //Put weapons and health back self resetWeapons(weaponsList, ammoClipList, ammoStockList); self.health = originalHealth; self show(); if(level.ex_healthbar) self thread extreme\_ex_healthbar::start(); } ac130_attachPlayer_105mm() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ex_dead"); self endon("joined_spectators"); if(level.inPrematchPeriod) return; if(isDefined(level.ac130Player)) return; //Record weapons and ammo before we take them away. ammoClipList = []; ammoStockList = []; weaponsList = self GetWeaponsList(); for (i = 0; i < weaponsList.size; i++) { ammoClipList[ammoClipList.size] = self GetWeaponAmmoClip( weaponsList[i] ); ammoStockList[ammoStockList.size] = self GetWeaponAmmoStock( weaponsList[i] ); } //Record health before we bump it skyhigh ;) originalHealth = self.health; level.ac130model show(); level.ac130Player = self; level.ac130Player.ac130 = true; level.ac130Player hide(); if(isDefined(self.ex_healthbar)) self.ex_healthbar destroy(); if(isDefined(self.ex_healthback)) self.ex_healthback destroy(); if(isDefined(self.ex_healthcross)) self.ex_healthcross destroy(); level.ac130Player.health = 9000; self [[level.ex_clientcmd]]("gocrouch"); level.ac130Player linkTo(level.ac130, "tag_player", (4000,0,0), (0,0,0)); self hide(); thread changeWeapons_105mm(); thread shotFired(); if(level.ex_air_raid_global) thread extreme\_ex_utils::playSoundLoc("air_raid",(0,0,0)); if(level.ex_air_raid_team) thread extreme\_ex_utils::playSoundOnPlayers("air_raid"); //self iprintlnbold("You have " + level.ex_ac130_105mm_timer + " Seconds"); if (!isdefined(self.ac130timer)) { self.ac130timer = newClientHudElem(self); self.ac130timer.sort = -1; self.ac130timer.archived = false; self.ac130timer.alignX = "center"; self.ac130timer.alignY = "middle"; self.ac130timer.fontscale = 2.0; self.ac130timer.x = 320; self.ac130timer.y = 420; } self.ac130timer SetTimer( level.ex_ac130_105mm_timer ); iprintln("^3AC130 105MM GUNSHIP INBOUND ^1TAKE COVER!"); wait level.ex_ac130_105mm_timer; level.ac130Player unlink(); level.ac130model hide(); thread ac130_detachPlayer(); //Put weapons and health back self resetWeapons(weaponsList, ammoClipList, ammoStockList); self.health = originalHealth; self show(); if(level.ex_healthbar) self thread extreme\_ex_healthbar::start(); } ac130_detachPlayer() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ex_dead"); self endon("joined_spectators"); if(!isDefined(level.ac130Player)) return; level.ac130Player notify("ac130_detached"); level.ac130Player stopLoopSound("ambient_ac130_x4"); if (isDefined(self.ac130timer)) self.ac130timer destroy(); self thread CleanupSpawned(); self show(); level.ac130Player unlink(); level.ac130model hide(); [[level.onSpawnPlayer]](); level.ac130Player.ac130 = undefined; level.ac130Player = undefined; } changeWeapons() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); weapon = []; weapon[0] = spawnstruct(); weapon[0].weapon = "ac130_40mm_mp"; weapon[0].overlay = "ac130_overlay_40mm"; weapon[1] = spawnstruct(); weapon[1].weapon = "ac130_25mm_mp"; weapon[1].overlay = "ac130_overlay_25mm"; weapon[2] = spawnstruct(); weapon[2].weapon = "ac130_105mm_mp"; weapon[2].overlay = "ac130_overlay_105mm"; currentWeapon = -1; for(;;) { if(currentWeapon != -1) while(!level.ac130Player useButtonPressed()) wait 0.05; currentWeapon++; if (currentWeapon >= weapon.size) currentWeapon = 0; level.ac130Player takeAllWeapons(); level.ac130Player giveWeapon( weapon[currentWeapon].weapon ); level.ac130Player switchToWeapon( weapon[currentWeapon].weapon ); level.ac130Player SetWeaponAmmoClip( weapon[currentWeapon].weapon, 999 ); thread setOverlay(weapon[currentWeapon].overlay); while(level.ac130Player useButtonPressed()) wait 0.05; } } changeWeapons_25mm() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); wait(0.2); level.ac130Player takeAllWeapons(); level.ac130Player giveWeapon( "ac130_25mm_mp" ); level.ac130Player switchToWeapon( "ac130_25mm_mp" ); level.ac130Player SetWeaponAmmoClip( "ac130_25mm_mp", 999 ); thread setOverlay( "ac130_overlay_25mm"); } changeWeapons_40mm() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); wait(0.2); level.ac130Player takeAllWeapons(); level.ac130Player giveWeapon( "ac130_40mm_mp" ); level.ac130Player switchToWeapon( "ac130_40mm_mp" ); level.ac130Player SetWeaponAmmoClip( "ac130_40mm_mp", 999 ); thread setOverlay( "ac130_overlay_40mm" ); } changeWeapons_105mm() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); wait(0.2); level.ac130Player takeAllWeapons(); level.ac130Player giveWeapon( "ac130_105mm_mp" ); level.ac130Player switchToWeapon( "ac130_105mm_mp" ); level.ac130Player SetWeaponAmmoClip( "ac130_105mm_mp", 999 ); thread setOverlay( "ac130_overlay_105mm" ); } setOverlay(overlay) { level endon("ex_gameover"); self endon("end_respawn"); self endon("spawn"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); if(!isDefined(self.ac130_overlay)) { self.ac130_overlay = newClientHudElem( self ); self.ac130_overlay.x = 0; self.ac130_overlay.y = 0; self.ac130_overlay.alignX = "center"; self.ac130_overlay.alignY = "middle"; self.ac130_overlay.horzAlign = "center"; self.ac130_overlay.vertAlign = "middle"; self.ac130_overlay.foreground = true; } self.ac130_overlay setshader(overlay, 640, 480); if(level.ex_ac130grain) { if(!isDefined(self.ac130_grain)) { self.ac130_grain = newClientHudElem( self ); self.ac130_grain.x = 0; self.ac130_grain.y = 0; self.ac130_grain.alignX = "left"; self.ac130_grain.alignY = "top"; self.ac130_grain.horzAlign = "fullscreen"; self.ac130_grain.vertAlign = "fullscreen"; self.ac130_grain.foreground = true; self.ac130_grain.alpha = 0.5; } self.ac130_grain setshader("ac130_overlay_grain", 640, 480); } self waittill("spawned_player"); self.ac130_overlay destroy(); self.ac130_grain destroy(); } shotFired() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); for(;;) { level.ac130Player waittill("projectile_impact", weapon, position, radius); thread shotFiredScreenShake( weapon ); thread shotFiredPhysicsSphere(position, weapon); wait 0.05; } } shotFiredScreenShake(weapon) { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); switch(weapon) { case "ac130_105mm_mp": duration = 1; break; case "ac130_40mm_mp": duration = 0.5; break; default: duration = 0; break; } if(duration) earthquake(duration, 1, level.ac130Player.origin, 1000); } shotFiredPhysicsSphere(center, weapon) { wait 0.1; physicsExplosionSphere(center, level.physicsSphereRadius[weapon], level.physicsSphereRadius[weapon] / 2, level.physicsSphereForce[weapon]); } CleanupSpawned() { if (isDefined(self.ac130_overlay)) self.ac130_overlay destroy(); if (isDefined(self.ac130_grain)) self.ac130_grain destroy(); if (isDefined(self.ac130timer)) self.ac130timer destroy(); } resetWeapons(weaponsList, ammoClipList, ammoStockList) // =[SUPER]=Gadjex { useAltMode = true; self takeAllWeapons(); class = self.class; self maps\mp\gametypes\_class::setClass( class ); // initialize specialty array self.specialty = []; self.specialty[0] = self.pers[class]["loadout_perk1"]; self.specialty[1] = self.pers[class]["loadout_perk2"]; self.specialty[2] = self.pers[class]["loadout_perk3"]; self maps\mp\gametypes\_class::register_perks(); if ( getDvarInt( "scr_enable_nightvision" ) ) self setActionSlot( 1, "nightvision" ); for( i = 0; i < weaponsList.size; i++ ) { if ( !AC130Weapons(weaponsList[i]) ) { //logprint("weaponGivenBack " + i + " = " + weaponsList[i] + " "); //logprint("Clip " + i + " = " + ammoClipList[i] + " "); //logprint("StockPile " + i + " = " + ammoStockList[i] + ""); self giveWeapon( weaponsList[i] ); } //Set primary weapon to spawn with. if ( isPrimaryWeapon (weaponsList[i]) && WeaponType( weaponsList[i] ) == "bullet" ) { self setSpawnWeapon( weaponsList[i] ); //logprint(weaponsList[i] + " " + WeaponType(weaponsList[i]) + ""); } switch ( weaponsList[i]) //Set offhand setttings { case "frag_grenade_mp": self switchToOffhand( "frag_grenade_mp" ); break; case "flash_grenade_mp": self setOffhandSecondaryClass("flash"); break; case "smoke_grenade_mp": case "concussion_grenade_mp": self setOffhandSecondaryClass("smoke"); break; } switch ( weaponsList[i] ) //Setup ammo sizes and action slots 3,4 { case "claymore_mp": case "rpg_mp": case "c4_mp": self maps\mp\gametypes\_class::setWeaponAmmoOverall( weaponsList[i], ammoClipList[i] ); self setActionSlot( 3, "weapon", weaponsList[i] ); self setActionSlot( 4, "" ); useAltMode = false; break; default: self setWeaponAmmoClip( weaponsList[i], ammoClipList[i] ); self setWeaponAmmoStock( weaponsList[i], ammoStockList[i] ); break; } } if ( useAltMode ) //Set to altmode if alt. weapon is not claymore, rpg, or c4 { self setActionSlot( 3, "altMode" ); self setActionSlot( 4, "" ); } // cac specialties that require loop threads self maps\mp\gametypes\_class::cac_selector(); } AC130Weapons(weapon) { switch(weapon) { case "ac130_25mm_mp": case "ac130_40mm_mp": case "ac130_105mm_mp": return true; default: return false; } } isPrimaryWeapon( weaponname ) { return isdefined( level.primary_weapon_array[weaponname] ); }