diff --git a/.gitignore b/.gitignore index f1308ac..46ddfac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,40 +1,6 @@ -# Ignore everything in repository root -/* - -# Files to not ignore -!/.gitignore -!/.vscode -!/.editorconfig -!/.gitattributes - - -!/z_server.bat - -!/.astylerc -!/deploy.bat -!/deploy.js -!/z_deploy.bat - -!/main/ -/main/* -!/main/server.cfg -!/main_shared/ - -!README.md - -# Folder to not ignore -!/mods/ -/mods/* -!/mods/mp_bots/ -!/mods/patch_mp/ -!/mods/patch_ui_mp/ - -*.log -missingasset.csv -*.ff -*.files -*.iwd -!/out/ -!/out/**/*.ff -!/out/**/*.iwd *.zip +*.log +*.stat +logs/ +demos/ +missingasset.csv diff --git a/README.md b/README.md index f494350..179bdde 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ -![GitHub Logo](/main_shared/bw-assets/bw-logo.png) +![GitHub Logo](/bw-assets/bw-logo.png) -# BO1 Bot Warfare -Bot Warfare is a GSC mod for [Black Ops 1](https://store.steampowered.com/app/42700/Call_of_Duty_Black_Ops/) (or [this](https://getrektby.us/)). +# T5 Bot Warfare +Bot Warfare is a GSC mod for [Black Ops 1](https://store.steampowered.com/app/42700/Call_of_Duty_Black_Ops/) and [PlutoniumT5](https://plutonium.pw/). It aims to extend the existing AI in the multiplayer games of Black Ops 1. -You can find the ModDB release post [here](https://www.moddb.com/mods/bot-warfare/downloads/bo1-bot-warfare-latest). +You can find the ModDB release post [here](https://www.moddb.com/mods/bot-warfare/downloads/t5-bot-warfare-latest). ## Contents - [Features](#Features) @@ -43,7 +43,7 @@ This mod extends the functionality and features of Combat Training in Black Ops - Bots can use the valkyrie rocket carepackage streak. ## Installation -0. Download the [latest release](https://github.com/ineedbots/bo1_bot_warfare/releases) of Bot Warfare. +0. Download the [latest release](https://github.com/ineedbots/t5_bot_warfare/releases) of Bot Warfare. 1. Locate the root folder which your game is installed in. 2. Move the files/folders found in 'Move to root of Black Ops folder' from the Bot Warfare release archive you downloaded to the root of your Black Ops folder. - The folder/file structure should follow as '.Black Ops folder\mods\mp_bots\mp_bots.iwd'. diff --git a/main_shared/bw-assets/bw-logo.png b/bw-assets/bw-logo.png similarity index 100% rename from main_shared/bw-assets/bw-logo.png rename to bw-assets/bw-logo.png diff --git a/deploy.bat b/deploy.bat deleted file mode 100644 index 2b0cfe0..0000000 --- a/deploy.bat +++ /dev/null @@ -1,2 +0,0 @@ -xcopy bo1_bot_warfare\main_shared\maps main_shared\maps\ /Y /I /E /H /C -xcopy bo1_bot_warfare\main main\ /Y /I /E /H /C diff --git a/deploy.js b/deploy.js deleted file mode 100644 index 1f27459..0000000 --- a/deploy.js +++ /dev/null @@ -1,54 +0,0 @@ -// nodejs 14+ - -const exec = require('util').promisify(require('child_process').exec) - -const repo_name = 'bo1_bot_warfare' -const repo_url = `https://github.com/ineedbots/${repo_name}` -const deploy_check_rate = 60000 -const title = 'BO1 Bot Warfare Git Deployer' - -function printToConsole(what, error = false) -{ - log = error ? console.error : console.log - - log(`[${new Date().toISOString()}]:`, what) -} - -async function doDeploy() { - try { - const { stdout, stderr } = await exec(`cd ${repo_name} && git fetch`) - - if (stderr.length <= 0) - return - - if (stderr.startsWith('From ')) - { - printToConsole('git fetched! Pulling...') - await exec(`cd ${repo_name} && git pull && git submodule update --init --recursive`) - printToConsole('Deploying...') - await exec('deploy.bat') - printToConsole('Deployed!') - } - } catch (e) { - printToConsole(e, true) - - if (!e.stderr.startsWith('The system cannot find the path specified')) - return - - printToConsole('Cloning repo...') - try { - await exec(`git clone ${repo_url} && cd ${repo_name} && git submodule update --init --recursive`) - - printToConsole('Cloned!') - printToConsole('Deploying...') - await exec('deploy.bat') - printToConsole('Deployed!') - } catch (f) { - printToConsole(f, true) - } - } -} - -process.stdout.write(`${String.fromCharCode(27)}]0;${title}${String.fromCharCode(7)}`) -doDeploy() -setInterval(doDeploy, deploy_check_rate) diff --git a/mods/mp_bots/description.txt b/description.txt similarity index 100% rename from mods/mp_bots/description.txt rename to description.txt diff --git a/main/server.cfg b/main/server.cfg deleted file mode 100644 index bd54dde..0000000 --- a/main/server.cfg +++ /dev/null @@ -1,337 +0,0 @@ -////////////////////////////////////////////////// -// SERVER NAME & COLORS // -////////////////////////////////////////////////// -// // -// ^1 Red // -// ^2 Green // -// ^3 Orange // -// ^4 Dark Blue // -// ^5 Light Blue // -// ^6 Pink // -// ^7 White // -// ^8 Grey // -// ^9 Brown // -// ^0 Black // -// // -////////////////////////////////////////////////// - -set sv_hostname "^1Bot ^3War^5fare ^4Bots ^7Nuketown 24/7" // Please put a server host name here -set logfile "1" -set g_logSync "1" // 1 always flush games_mp.log, 0 only flush on game end - -////////////////////////////////////////////////// -// GENERAL SETTINGS // -////////////////////////////////////////////////// - -set scr_player_forcerespawn "1" // Players respawn automatically after being fragged. -set scr_game_spectatetype "1" // Enable or Disables Spec mode, putting "1" allows spectators to spectate match. -set scr_hardcore "0" // Enable or Disable Hardcore Mode. -set scr_player_healthregentime "5" // Time it takes you to recover damage. -set scr_team_kickteamkillers "0" // Anyone who team kills, gets kicked automatically if you enable this feature. -set scr_team_teamkillspawndelay "20" // Team Killer gets a respawn penalty of specified seconds (20). -set scr_player_maxhealth "100" // Percent of Health players will have on Respawn. -set scr_player_sprinttime "12" // Sprint run time. -set scr_player_suicidespawndelay "0" // Wait before you respawn if you committed suicide. -set scr_teambalance "1" // Enable or Disable auto balance. -set party_minplayers "1" // Pre-Match Lobby - -////////////////////////////////////////////////// -// CLIENT SETTINGS // -////////////////////////////////////////////////// - -set g_password "" // Password Protected Game. Leave blank if you want players to join. -set sv_disableClientConsole "0" // Enable or Disable players ability to access server commands. -set sv_reconnectlimit "5" // How many times you can try to reconnect. -set sv_timeout "240" // Timeout time period. You will timeout after (240) seconds when attempting to connect or if you are getting connection interruptions. -set sv_zombietime "10" // Your idle time period before getting kicked. -set g_inactivity "180" // Enable or Disable auto kick feature for idle/AFK players. -set g_allowvote "0" // Allow Vote. -set sv_floodProtect "4" // Chat Spam Protection. -set sv_maxPing "0" // Max Ping allowed. -set sv_maxRate "25000" // Max rate on server. -set sv_minPing "0" // Minimum Ping allowed. -set sv_maxclients "32" // Maximum players that can enter server. -set sv_privateClients "2" // Private reserved slots on server. -set sv_pure "0" // verifying cilent files -set sv_kickBanTime "0" // Kick Ban Duration. Time before player can re-join the server after getting kicked. -set sv_vac "0" // Enable/Disable VAC steam Anti-Cheat.. No use... - -////////////////////////////////////////////////// -// SERVER SETTINGS // -////////////////////////////////////////////////// - -set scr_game_hardpoints "1" // Hardcore Scoring System. -set scr_game_killstreaks "1" // Enable/Disable Killstreak rewards. -set scr_hardpoint_allowdogs "1" // Enable/Disable Attack Dogs Killstreak. -set scr_hardpoint_allowhelicopter_comlink "1" // Helicopter Com Link -set scr_hardpoint_allowradardirection "1" // Radar Direction -set scr_hardpoint_allowsupply "1" // Care Package -set scr_hardpoint_allowhelicopter_gunner "1" // Helicopter Gunner -set scr_hardpoint_allowcounteruav "1" // Counter Spy Plane -set scr_hardpoint_allowhelicopter_player "1" // Helicopter -set scr_hardpoint_allowmortar "1" // Mortar Team -set scr_hardpoint_allownapalm "1" // Napalm Airstrike -set scr_hardpoint_allowrcbomb "1" // RC-XD Bomb -set scr_hardpoint_allowairstrike "1" // Air Strike -set scr_hardpoint_allowauto_turret "1" // Auto Turret -set scr_hardpoint_allowradar "1" // Allow Radar - -////////////////////////////////////////////////// -// SERVER TWEAKS // -////////////////////////////////////////////////// - -set g_deadChat "1" // Enable or Disable the ability to read dead chat chat of people who have been fragged. -set scr_game_allowfinalkillcam "1" // Enable/Disable Game Winning Kill Killcam. -set scr_team_allowHardpointStreakAfterDeath "0" // Enable/Disable Killstreak after Death. Player resumes the killstreak even after being fragged. -set scr_game_allowkillcam "1" // Allow Killcam. -set g_allow_teamchange "1" // Allow players to change teams. -set scr_player_allowrevive "1" // Allow players to revive each other. -set scr_team_artilleryTeamKillPenalty "0.25" // If you kill your team member with artillery strike, this amount of percent of your artillery time gets deducted. Logical ? -set scr_game_deathpointloss "0" // Points Loss on death Cod Points. -set scr_team_fftype "0" // Enable or Disable Friendly Fire. -set scr_game_onlyheadshots "0" // Enable/Disable Only Headshots mode. You can only kill players by taking headshots. -set scr_player_healthregentime "5" // Health regeneration time, time it takes for blood splatter to be removed from the screen. -set scr_team_teamkillspawndelay "20" // Team Kill respawn penalty, in seconds. -set scr_player_maxhealth "100" // Players starts with this amount of health in percentage. -set scr_team_mortarTeaTeamKillPenalty "0.25" // Mortar Air Strike Team Kill Penalty, time deducted. -set scr_game_prematchperiod "15" // Time before match starts. Strat time? -set scr_game_allowfinalkillcam "1" // Allow Final Kill Killcam. -set g_speed "190" // Player speed, speed at which player can move. -set scr_player_sprinttime "4" // Sprint time, duration a player can run. -set scr_game_suicidepointloss "0" // Suicide penalty in cod points. -set scr_player_suicidespawndelay "0" // Respawn wait after suicide. -set scr_team_teamkillpointloss "1" // Cod Points Penalty for Team Kill. -set scr_team_teamkillspawndelay "20" // Respawn penalty in time, after team kill. -set scr_team_teamkillerplaylistbanpenalty "0" // Add the team killer to the ban list. -set scr_team_teamkillerplaylistbanquantum "0" -set scr_game_perks "1" // Allow players to have perks - -////////////////////////////////////////////////// -// VOIP SETTINGS // -////////////////////////////////////////////////// - -set voice_deadChat "1" // Enable/Disable voice over IP chat when a player is dead. -set voice_global "1" // Enable/Disable the use of in-game voice over IP. -set sv_voicequality "0" // Voice Quality, 3 for high, 1 for low. More bandwidth better quality. -set g_voiceChatTalkingDuration "500" // Duration you can chat. -set sv_voice "1" // Allow Voice Chat - -////////////////////////////////////////////////// -//CAPTURE THE FLAG GAMETYPE SETTINGS // -////////////////////////////////////////////////// - -set scr_ctf_globalbattlechatterprobability "0" -set scr_ctf_enemycarriervisible "0" // Where is the flag carrier, spot visible on radar. -set scr_ctf_flagrespawntime "0" // Time before a captured flag respawns. -set scr_ctf_idleflagreturntime "30" // Time before a dropped flag returns to its default location if not picked. -set scr_ctf_numlives "0" // Number of lives per player 0 for unlimited. -set scr_ctf_playerrespawndelay "0" // Respawn wait in seconds. -set scr_ctf_roundlimit "3" // How many rounds match would last. -set scr_ctf_roundswitch "1" // Rounds before the teams switch sides. -set scr_ctf_scorelimit "3" // Target score before the round ends. -set scr_ctf_timelimit "5" // Round length. -set scr_ctf_touchreturn "1" // Ability to return the flag by touching it. -set scr_ctf_waverespawndelay "15" - -////////////////////////////////////////////////// -// DEMOLITION GAMETYPE SETTINGS // -////////////////////////////////////////////////// - -set scr_dem_globalbattlechatterprobability "0" -set scr_dem_bombtimer "45" // Time the bomb takes to detonate. -set scr_dem_defusetime "5" // Time taken to defuse the bomb. -set scr_dem_extratime "3" -set scr_dem_numlives "0" // Lives per player 0 for unlimited. -set scr_dem_planttime "5" // Time it takes to plant a bomb in seconds. -set scr_dem_roundlimit "0" // Rounds the game is limited to, if there are no winners. -set scr_dem_roundswitch "1" // Rounds before the teams switch the sides. -set scr_dem_scorelimit "2" // Score limit needed to win. -set scr_dem_timelimit "2.5" // Round time limit. - -////////////////////////////////////////////////// -// DOMINATION GAMETYPE SETTINGS // -////////////////////////////////////////////////// - -set scr_dom_globalbattlechatterprobability "0" -set scr_dom_flagcapturetime "10" // Time in seconds to capture a flag. -set scr_dom_numlives "0" // Lives per player 0 for unlimited. -set scr_dom_playerrespawndelay "0" // Duration of time you wait to respawn. -set scr_dom_roundlimit "1" // Rounds played per game. -set scr_dom_scorelimit "300" // Score limit per game. -set scr_dom_timelimit "30" // Duration in minutes per round. -set scr_dom_waverespawndelay "0" // Spawn delay at start. - -////////////////////////////////////////////////// -// FREE FOR ALL GAMETYPE SETTINGS // -////////////////////////////////////////////////// - -set scr_dm_globalbattlechatterprobability "100" -set scr_dm_bonus_leader "0" -set scr_dm_numlives "0" // Lives per player 0 for unlimited. -set scr_dm_playerrespawndelay "0" // Time in seconds wait to respawn. -set scr_dm_roundlimit "1" // Round limit. -set scr_dm_score_assist "100" // Points allotted for an assist. -set scr_dm_score_death "0" // Points allotted for dying. -set scr_dm_score_headshot "0" // Points for headshot. -set scr_dm_score_kill "50" // Points for a kill. -set scr_dm_scorelimit "1500" // Points needed to win the game. -set scr_dm_score_suicide "0" // Points allotted for suicide. -set scr_dm_timelimit "15" // Duration the game lasts in minutes when the score limit isn't reached. -set scr_dm_waverespawndelay "0" // Delay before the first respawn in the first round. - -////////////////////////////////////////////////// -// HEADQUARTERS GAMETYPE SETTINGS // -////////////////////////////////////////////////// - -set scr_koth_globalbattlechatterprobability "0" -set scr_koth_numlives "0" // Number of lives per game 0 for unlimited. -set scr_koth_playerrespawndelay "0" // Players respawn wait. -set scr_koth_roundlimit "1" // Rounds to be played. -set scr_koth_roundswitch "1" // Rounds to be played before teams switch sides. -set scr_koth_scorelimit "250" // Score limit to win the game. -set scr_koth_timelimit "15" // Duration in minutes the game will continue if the score isn't reached. -set scr_koth_waverespawndelay "0" // First respawn delay for each round. - -////////////////////////////////////////////////// -// SABOTAGE GAMETYPE SETTINGS // -////////////////////////////////////////////////// - -set scr_sab_globalbattlechatterprobability "0" -set scr_sab_bombtimer "30" // Duration in seconds the bomb takes to detonate. -set scr_sab_defusetime "5" // Time taken to defuse the bomb. -set scr_sab_hotpotato "0" // One bomb that the teams must fight over. One defending and one have to plant at the site. -set scr_sab_numlives "0" // Number of lives players get. -set scr_sab_planttime "2.5" // Time taken to plant the bomb. -set scr_sab_playerrespawndelay "7.5" // Time before respawn. -set scr_sab_roundlimit "1" // Rounds per game. -set scr_sab_roundswitch "1" // Rounds needed to be played before the teams switch sides. -set scr_sab_scorelimit "1" // Score limit to win the match. -set scr_sab_timelimit "10" // Duration in minutes the game lasts if the score limit isn't reached. -set scr_sab_waverespawndelay "0" // Time delay for first respawn before the game. - -////////////////////////////////////////////////// -// SEARCH AND DESTROY GAMETYPE SETTINGS // -////////////////////////////////////////////////// - -set scr_sd_globalbattlechatterprobability "0" -set scr_sd_bombtimer "45" // Time taken for the bomb to detonate. -set scr_sd_defusetime "5" // Time taken to defuse the bomb. -set scr_sd_game_spectatetype "3" // Allow team spectate. -set scr_sd_multibomb "0" // Allow more than one bomb. -set scr_sd_numlives "1" // Number of lives per player per game. -set scr_sd_planttime "5" // Time taken to plant the bomb. -set scr_sd_playerrespawndelay "0" // Respawn wait. -set scr_sd_roundlimit "0" // Rounds the game is limited to 0 for unlimited. -set scr_sd_roundswitch "3" // Rounds to be played before the teams switch sides. -set scr_sd_scorelimit "4" // Score limit required to win the game. -set scr_sd_timelimit "2.5" // Time limit if the score limit isn't reached. -set scr_sd_waverespawndelay "0" // Delay for first respawn. - -////////////////////////////////////////////////// -// TEAM DEATHMATCH GAMETYPE SETTINGS // -////////////////////////////////////////////////// - -set scr_tdm_globalbattlechatterprobability "0" -set scr_tdm_bonus_leader "0" // Top Player on the leaderboard gets this much bonus. -set scr_tdm_numlives "0" // Number of lives per player 0 for unlimited. -set scr_tdm_playerrespawndelay "0" // Respawn wait. -set scr_tdm_roundlimit "1" // Rounds per game. -set scr_tdm_score_assist "50" // Points awarded for an assist. -set scr_tdm_score_death "0" // Points awarded for death. -set scr_tdm_score_headshot "0" // Headshot reward. -set scr_tdm_score_kill "100" // Points awarded for a kill. -set scr_tdm_scorelimit "7500" // Score limit to win the game. -set scr_tdm_score_suicide "0" // Score awarded for suicide. -set scr_tdm_timelimit "15" // Duration in minutes for the game to end if the score limit isn't reached. -set scr_tdm_waverespawndelay "0" // Duration is seconds before the first respawn in each round. - -////////////////////////////////////////////////// -// GAMETYPE & WAGER TIPS // -////////////////////////////////////////////////// -// // -// tdm - Team deathmatch // -// dm - Free-for-all // -// sab - Sabotage // -// dem - Demolition // -// ctf - Capture the flag // -// sd - Search and destroy // -// dom - Domination // -// koth - Headquarters // -// // -//// Wager Matchs //////////////////////////////// -// // -// IMPORTMENT // -// Wager Matchs MUST require xblive_wagermatch 1// -// // -// hlnd - Stick and Stones* // -// gun - Gun mode* // -// shrp - Sharpshooter* // -// oic - One in the Chamber* // -// // -////////////////////////////////////////////////// - -set g_gametype "dom" // Select gametype from the list above -set xblive_wagermatch "0" // Set to 1 if you plan on using a wager match. This is a MUST! Failure to do so caused problems - -////////////////////////////////////////////////// -// MAP ROTATION TIPS // -////////////////////////////////////////////////// -// // -// mp_array - Array // -// mp_cracked - Cracked // -// mp_crisis - Crysis // -// mp_firingrange - Firingrange // -// mp_duga - Grid // -// mp_hanoi - Hanoi // -// mp_cairo - Havana // -// mp_havoc - Jungle // -// mp_cosmodrome - Launch // -// mp_nuked - Nuketown // -// mp_radiation - Radiation // -// mp_mountain - Summit // -// mp_villla - Villa // -// mp_russianbase - WMD // -// // -//// DLC1 FIRSTSTRIKE //////////////////////////// -// // -// mp_berlinwall2 - Berlin Wall // -// mp_discovery - Discovery // -// mp_kowloon - Kowloon // -// mp_stadium - Stadium // -// // -//// DLC2 ESCALATION ///////////////////////////// -// // -// mp_gridlock - Convoy // -// mp_hotel - Hotel // -// mp_outskirts - Stockpile // -// mp_zoo - Zoo // -// // -//// DLC3 ANNIHILATION /////////////////////////// -// // -// mp_drivein - Drive-In // -// mp_area51 - Hanger 18 // -// mp_golfcourse - Hazard // -// mp_silo - Silo // -// // -////////////////////////////////////////////////// -set scr_xpscale "10" - -set sv_maprotation "map mp_nuked" - -////////////////////////////////////////////////// -// PLAYLIST DVARS // -////////////////////////////////////////////////// - -set playlist_enabled "0" // Reserved slots for players in playlist. -set playlist_excludeMap "mapname" // Exclude this map from the server rotation. Type in the map name shortname. -set playlist_excludeGametype "" // Exclude this gametype, type in the gametype shortname. -set playlist_excludeGametypeMap "" // Exclude this gametype map, type in the map shortname. - -set bots_manage_add "12" -set bots_manage_fill "12" -set bots_manage_fill_kick "1" -set bots_team_force "1" -set bots_loadout_allow_op "0" -set bots_loadout_reasonable "1" -set bots_manage_fill_spec "0" -set bot_difficulty "2" diff --git a/main_shared/bots.txt b/main_shared/bots.txt deleted file mode 100644 index bacce26..0000000 --- a/main_shared/bots.txt +++ /dev/null @@ -1,26 +0,0 @@ -bota -botb -botc -botd -bote -botf -botg -both -boti -botj -botk -botl -botm -botn -boto -botp -botq -botr -bots -bott -botu -botv -botw -botx -boty -botz \ No newline at end of file diff --git a/main_shared/maps/mp/gametypes/_globallogic_player.gsc b/main_shared/maps/mp/gametypes/_globallogic_player.gsc deleted file mode 100644 index 8693ea9..0000000 --- a/main_shared/maps/mp/gametypes/_globallogic_player.gsc +++ /dev/null @@ -1,2666 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; - -freezePlayerForRoundEnd() -{ - self clearLowerMessage(); - - self closeMenu(); - self closeInGameMenu(); - - self freeze_player_controls( true ); - currentWeapon = self GetCurrentWeapon(); - if ( maps\mp\gametypes\_hardpoints::isKillstreakWeapon( currentWeapon ) && !maps\mp\gametypes\_killstreak_weapons::isHeldKillstreakWeapon( currentWeapon ) ) - self takeWeapon( currentWeapon ); -// self _disableWeapon(); -} - - -Callback_PlayerConnect() -{ - thread notifyConnecting(); - - self.statusicon = "hud_status_connecting"; - self waittill( "begin" ); - waittillframeend; - self.statusicon = ""; - - level notify( "connected", self ); - -// self thread maps\mp\gametypes\_globallogic_utils::fakeLag(); - if ( level.console && self IsHost() ) - self thread maps\mp\gametypes\_globallogic::listenForGameEnd(); - - // only print that we connected if we haven't connected in a previous round - if( !level.splitscreen && !isdefined( self.pers["score"] ) ) - { - iPrintLn(&"MP_CONNECTED", self); - } - - if( !isdefined( self.pers["score"] ) ) - { - self thread maps\mp\gametypes\_persistence::adjustRecentStats(); - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "valid", 0 ); - if( level.console ) - { - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 && !( self IsHost() ) ) - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatchFailed", 1 ); - else - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatchFailed", 0 ); - } - else - { - /# - PrintLn("level.wagermatch: " + level.wagermatch ); - #/ - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - if ( !self is_bot() && !self isdemoclient() ) - { - codPoints = self maps\mp\gametypes\_persistence::statGet( "CODPOINTS" ); - if( codPoints < level.wagerBet && !self IsHost() ) - { - /# - PrintLn("kick " + self.name + "; not enought codpoints: " + codPoints ); - #/ - kick( self getEntityNumber(), "PLATFORM_WAGER_DEADBEAT_TITLE" ); - return; - } - } - - // set this flag to notify player of possible refund in case the match does not end well - // self maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatchFailed", 1 ); - } - else - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatchFailed", 0 ); - } - } - - // track match and hosting stats once per match - if ( !IsDefined( self.pers["matchesPlayedStatsTracked"] ) ) - { - self maps\mp\gametypes\_persistence::statAdd( "MATCHES_PLAYED", 1, false ); - self.pers["MATCHES_PLAYED_COMPLETED_STREAK"] = self maps\mp\gametypes\_persistence::statGet( "MATCHES_PLAYED_COMPLETED_STREAK" ) + 1; - self maps\mp\gametypes\_persistence::statSet( "MATCHES_PLAYED_COMPLETED_STREAK", 0, false ); - - if ( !IsDefined( self.pers["matchesHostedStatsTracked"] ) && self IsLocalToHost() ) - { - self maps\mp\gametypes\_persistence::statAdd( "MATCHES_HOSTED", 1, false ); - self.pers["MATCHES_HOSTED_COMPLETED_STREAK"] = self maps\mp\gametypes\_persistence::statGet( "MATCHES_HOSTED_COMPLETED_STREAK" ) + 1; - self maps\mp\gametypes\_persistence::statSet( "MATCHES_HOSTED_COMPLETED_STREAK", 0, false ); - self.pers["matchesHostedStatsTracked"] = true; - } - - self.pers["matchesPlayedStatsTracked"] = true; - self thread maps\mp\gametypes\_persistence::uploadStatsSoon(); - } - - self maps\mp\_gamerep::gameRepPlayerConnected(); - - lpselfnum = self getEntityNumber(); - lpGuid = self getGuid(); - logPrint("J;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n"); - bbPrint( "mpjoins: name %s client %s", self.name, lpselfnum ); - - self setClientUIVisibilityFlag( "hud_visible", 1 ); - self setClientUIVisibilityFlag( "g_compassShowEnemies", GetDvarInt( #"scr_game_forceradar" ) ); - - self setClientDvars( "player_sprintTime", GetDvar( #"scr_player_sprinttime" ), - "ui_radar_client", GetDvar( #"ui_radar_client" ), - "scr_numLives", level.numLives, - "ui_pregame", isPregame() ); - - self CameraActivate( false ); - - makeDvarServerInfo( "cg_drawTalk", 1 ); - - if ( level.hardcoreMode ) - { - self setClientDvars( "cg_drawTalk", 3 ); - } - - if ( GetDvarInt( #"player_sprintUnlimited" ) ) - { - self setClientDvar( "player_sprintUnlimited", 1 ); - } - -/# - if ( GetDvarInt( #"scr_hitloc_debug") ) - { - for ( i = 0; i < 6; i++ ) - { - self setClientDvar( "ui_hitloc_" + i, "" ); - } - self.hitlocInited = true; - } -#/ - - self maps\mp\gametypes\_globallogic_score::initPersStat( "score" ); - if ( level.resetPlayerScoreEveryRound ) - { - self.pers["score"] = 0; - } - self.score = self.pers["score"]; - - self maps\mp\gametypes\_globallogic_score::initPersStat( "suicides" ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getPersStat( "suicides" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "headshots" ); - self.headshots = self maps\mp\gametypes\_globallogic_score::getPersStat( "headshots" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "challenges" ); - self.challenges = self maps\mp\gametypes\_globallogic_score::getPersStat( "challenges" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "kills" ); - self.kills = self maps\mp\gametypes\_globallogic_score::getPersStat( "kills" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "deaths" ); - self.deaths = self maps\mp\gametypes\_globallogic_score::getPersStat( "deaths" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "assists" ); - self.assists = self maps\mp\gametypes\_globallogic_score::getPersStat( "assists" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "defends", false ); - self.defends = self maps\mp\gametypes\_globallogic_score::getPersStat( "defends" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "offends", false ); - self.offends = self maps\mp\gametypes\_globallogic_score::getPersStat( "offends" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "plants", false ); - self.plants = self maps\mp\gametypes\_globallogic_score::getPersStat( "plants" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "defuses", false ); - self.defuses = self maps\mp\gametypes\_globallogic_score::getPersStat( "defuses" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "returns", false ); - self.returns = self maps\mp\gametypes\_globallogic_score::getPersStat( "returns" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "captures", false ); - self.captures = self maps\mp\gametypes\_globallogic_score::getPersStat( "captures" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "destructions", false ); - self.destructions = self maps\mp\gametypes\_globallogic_score::getPersStat( "destructions" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "backstabs" ); - self.backstabs = self maps\mp\gametypes\_globallogic_score::getPersStat( "backstabs" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "longshots" ); - self.longshots = self maps\mp\gametypes\_globallogic_score::getPersStat( "longshots" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "survived" ); - self.survived = self maps\mp\gametypes\_globallogic_score::getPersStat( "survived" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "stabs" ); - self.stabs = self maps\mp\gametypes\_globallogic_score::getPersStat( "stabs" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "tomahawks" ); - self.tomahawks = self maps\mp\gametypes\_globallogic_score::getPersStat( "tomahawks" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "humiliated" ); - self.humiliated = self maps\mp\gametypes\_globallogic_score::getPersStat( "humiliated" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "x2score" ); - self.x2score = self maps\mp\gametypes\_globallogic_score::getPersStat( "x2score" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "sessionbans" ); - self.sessionbans = self maps\mp\gametypes\_globallogic_score::getPersStat( "sessionbans" ); - self maps\mp\gametypes\_globallogic_score::initPersStat( "gametypeban" ); - self maps\mp\gametypes\_globallogic_score::initPersStat( "time_played_total" ); - self maps\mp\gametypes\_globallogic_score::initPersStat( "time_played_alive" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "teamkills", false ); - self maps\mp\gametypes\_globallogic_score::initPersStat( "teamkills_nostats" ); - self.teamKillPunish = false; - if ( level.minimumAllowedTeamKills >= 0 && self.pers["teamkills_nostats"] > level.minimumAllowedTeamKills ) - self thread reduceTeamKillsOverTime(); - - if( GetDvar( #"r_reflectionProbeGenerate" ) == "1" ) - level waittill( "eternity" ); - - - self.killedPlayersCurrent = []; - - if( !isDefined( self.pers["best_kill_streak"] ) ) - { - self.pers["killed_players"] = []; - self.pers["killed_by"] = []; - self.pers["nemesis_tracking"] = []; - self.pers["artillery_kills"] = 0; - self.pers["dog_kills"] = 0; - self.pers["nemesis_name"] = ""; - self.pers["nemesis_rank"] = 0; - self.pers["nemesis_rankIcon"] = 0; - self.pers["nemesis_xp"] = 0; - self.pers["nemesis_xuid"] = ""; - - - /*self.killstreakKills["artillery"] = 0; - self.killstreakKills["dogs"] = 0; - self.killstreaksUsed["radar"] = 0; - self.killstreaksUsed["artillery"] = 0; - self.killstreaksUsed["dogs"] = 0;*/ - self.pers["best_kill_streak"] = 0; - } - -// Adding Music tracking per player CDC - if( !isDefined( self.pers["music"] ) ) - { - self.pers["music"] = spawnstruct(); - self.pers["music"].spawn = false; - self.pers["music"].inque = false; - self.pers["music"].currentState = "SILENT"; - self.pers["music"].previousState = "SILENT"; - self.pers["music"].nextstate = "UNDERSCORE"; - self.pers["music"].returnState = "UNDERSCORE"; - - } - self.leaderDialogQueue = []; - self.leaderDialogActive = false; - self.leaderDialogGroups = []; - self.leaderDialogGroup = ""; - - if ( !isdefined( self.pers["cur_kill_streak"] ) ) - self.pers["cur_kill_streak"] = 0; - if ( !isdefined( self.pers["totalKillstreakCount"] ) ) - self.pers["totalKillstreakCount"] = 0; - - //Keep track of how many killstreaks have been earned in the current streak - if ( !isdefined( self.pers["killstreaksEarnedThisKillstreak"] ) ) - self.pers["killstreaksEarnedThisKillstreak"] = 0; - - self.lastKillTime = 0; - - self.cur_death_streak = 0; - self disabledeathstreak(); - self.death_streak = 0; - self.kill_streak = 0; - self.gametype_kill_streak = 0; - - if ( level.onlineGame ) - { - self.death_streak = self getDStat( "HighestStats", "death_streak" ); - self.kill_streak = self getDStat( "HighestStats", "kill_streak" ); - self.gametype_kill_streak = self maps\mp\gametypes\_persistence::statGetWithGameType( "kill_streak" ); - } - - - self.lastGrenadeSuicideTime = -1; - - self.teamkillsThisRound = 0; - - if ( !isDefined( level.livesDoNotReset ) || !level.livesDoNotReset || !isDefined( self.pers["lives"] ) ) - self.pers["lives"] = level.numLives; - - // multi round FFA games in custom game mode should maintain team in-between rounds - if ( !level.teamBased && !maps\mp\gametypes\_customClasses::isCustomGame() ) - { - self.pers["team"] = undefined; - } - - self.hasSpawned = false; - self.waitingToSpawn = false; - self.wantSafeSpawn = false; - self.deathCount = 0; - - self.wasAliveAtMatchStart = false; - - self thread maps\mp\_flashgrenades::monitorFlash(); - - level.players[level.players.size] = self; - - if( level.splitscreen ) - setdvar( "splitscreen_playerNum", level.players.size ); - // removed underscore for debug CDC - //maps\mp\gametypes\_globallogic_audio::set_music_on_team( "UNDERSCORE", "both", true );; - // When joining a game in progress, if the game is at the post game state (scoreboard) the connecting player should spawn into intermission - if ( game["state"] == "postgame" ) - { - self.pers["needteam"] = 1; - self.pers["team"] = "spectator"; - self.team = "spectator"; - self setClientUIVisibilityFlag( "hud_visible", 0 ); - - self [[level.spawnIntermission]](); - self closeMenu(); - self closeInGameMenu(); - return; - } - - // don't count losses for CTF and S&D and War at each round. - if ( !isDefined( self.pers["lossAlreadyReported"] ) ) - { - maps\mp\gametypes\_globallogic_score::updateLossStats( self ); - self.pers["lossAlreadyReported"] = true; - } - // don't redo winstreak save to pers array for each round of round based games. - if ( !isDefined( self.pers["winstreakAlreadyCleared"] ) ) - { - // self maps\mp\gametypes\_globallogic_score::backupAndClearWinStreaks(); - self.pers["winstreakAlreadyCleared"] = true; - } - - if( self isdemoclient() ) - { - spawnpoint = maps\mp\gametypes\_spawnlogic::getRandomIntermissionPoint(); - setDemoIntermissionPoint( spawnpoint.origin, spawnpoint.angles ); - self.pers["team"] = ""; - self [[level.spectator]](); - return; - } - - if( self istestclient() ) - { - self.pers[ "isBot" ] = true; - } - - if ( level.rankedMatch ) - { - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "demoFileID", "0" ); - } - - level endon( "game_ended" ); - - if ( isDefined( level.hostMigrationTimer ) ) - self thread maps\mp\gametypes\_hostmigration::hostMigrationTimerThink(); - - if ( level.oldschool ) - { - self.pers["class"] = undefined; - self.class = self.pers["class"]; - } - - if ( isDefined( self.pers["team"] ) ) - self.team = self.pers["team"]; - - if ( isDefined( self.pers["class"] ) ) - self.class = self.pers["class"]; - - if ( !isDefined( self.pers["team"] ) || IsDefined( self.pers["needteam"] ) ) - { - // Don't set .sessionteam until we've gotten the assigned team from code, - // because it overrides the assigned team. - self.pers["needteam"] = undefined; - self.pers["team"] = "spectator"; - self.team = "spectator"; - self.sessionstate = "dead"; - - self maps\mp\gametypes\_globallogic_ui::updateObjectiveText(); - - [[level.spawnSpectator]](); - - if ( level.rankedMatch ) - { - [[level.autoassign]](); - - //self thread maps\mp\gametypes\_globallogic_spawn::forceSpawn(); - self thread maps\mp\gametypes\_globallogic_spawn::kickIfDontSpawn(); - } - else if ( !level.teamBased ) - { - [[level.autoassign]](); - } - else - { - if( ( isDefined( level.forceAutoAssign ) && level.forceAutoAssign ) || level.allow_teamchange != "1" ) - { - [[level.autoassign]](); - } - else - { - self setclientdvar( "g_scriptMainMenu", game["menu_team"] ); - self openMenu( game["menu_team"] ); - } - } - - if ( self.pers["team"] == "spectator" ) - { - self.sessionteam = "spectator"; - if ( !level.teamBased ) - self.ffateam = "spectator"; - } - - if ( level.teamBased ) - { - // set team and spectate permissions so the map shows waypoint info on connect - self.sessionteam = self.pers["team"]; - if ( !isAlive( self ) ) - self.statusicon = "hud_status_dead"; - self thread maps\mp\gametypes\_spectating::setSpectatePermissions(); - } - } - else if ( self.pers["team"] == "spectator" ) - { - self setclientdvar( "g_scriptMainMenu", game["menu_team"] ); - [[level.spawnSpectator]](); - self.sessionteam = "spectator"; - self.sessionstate = "spectator"; - if ( !level.teamBased ) - self.ffateam = "spectator"; - self thread maps\mp\gametypes\_spectating::setSpectatePermissions(); - } - else - { - self.sessionteam = self.pers["team"]; - self.sessionstate = "dead"; - - if ( !level.teamBased ) - self.ffateam = self.pers["team"]; - - self maps\mp\gametypes\_globallogic_ui::updateObjectiveText(); - - [[level.spawnSpectator]](); - - if ( maps\mp\gametypes\_globallogic_utils::isValidClass( self.pers["class"] ) ) - { - self thread [[level.spawnClient]](); - } - else - { - self maps\mp\gametypes\_globallogic_ui::showMainMenuForTeam(); - } - - self thread maps\mp\gametypes\_spectating::setSpectatePermissions(); - } - - if( maps\mp\gametypes\_customClasses::isUsingCustomGameModeClasses() ) - { - self thread maps\mp\gametypes\_customClasses::sprintSpeedModifier(); - } - - if ( isDefined( self.pers["isBot"] ) ) - return; -} - -Callback_PlayerMigrated() -{ - println( "Player " + self.name + " finished migrating at time " + gettime() ); - - if ( isDefined( self.connected ) && self.connected ) - { - self maps\mp\gametypes\_globallogic_ui::updateObjectiveText(); -// self updateObjectiveText(); -// self updateMainMenu(); - -// if ( level.teambased ) -// self updateScores(); - } - - level.hostMigrationReturnedPlayerCount++; - if ( level.hostMigrationReturnedPlayerCount >= level.players.size * 2 / 3 ) - { - println( "2/3 of players have finished migrating" ); - level notify( "hostmigration_enoughplayers" ); - } -} - -Callback_PlayerDisconnect() -{ - self removePlayerOnDisconnect(); - - if ( !level.gameEnded ) - self maps\mp\gametypes\_globallogic_score::logXPGains(); - - if ( level.splitscreen ) - { - players = level.players; - - if ( players.size <= 1 ) - level thread maps\mp\gametypes\_globallogic::forceEnd(); - - // passing number of players to menus in splitscreen to display leave or end game option - setdvar( "splitscreen_playerNum", players.size ); - } - - if ( isDefined( self.score ) && isDefined( self.pers["team"] ) ) - { - setPlayerTeamRank( self, level.dropTeam, self.score - 5 * self.deaths ); - self logString( "team: score " + self.pers["team"] + ":" + self.score ); - level.dropTeam += 1; - } - - [[level.onPlayerDisconnect]](); - - lpselfnum = self getEntityNumber(); - lpGuid = self getGuid(); - logPrint("Q;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n"); - bbPrint( "mpquits: name %s client %d", self.name, lpselfnum ); - - self maps\mp\_gamerep::gameRepPlayerDisconnected(); - - for ( entry = 0; entry < level.players.size; entry++ ) - { - if ( level.players[entry] == self ) - { - while ( entry < level.players.size-1 ) - { - level.players[entry] = level.players[entry+1]; - entry++; - } - level.players[entry] = undefined; - break; - } - } - for ( entry = 0; entry < level.players.size; entry++ ) - { - if ( isDefined( level.players[entry].pers["killed_players"][self.name] ) ) - level.players[entry].pers["killed_players"][self.name] = undefined; - - if ( isDefined( level.players[entry].killedPlayersCurrent[self.name] ) ) - level.players[entry].killedPlayersCurrent[self.name] = undefined; - - if ( isDefined( level.players[entry].pers["killed_by"][self.name] ) ) - level.players[entry].pers["killed_by"][self.name] = undefined; - - if ( isDefined( level.players[entry].pers["nemesis_tracking"][self.name] ) ) - level.players[entry].pers["nemesis_tracking"][self.name] = undefined; - - // player that disconnected was our nemesis - if ( level.players[entry].pers["nemesis_name"] == self.name ) - { - level.players[entry] chooseNextBestNemesis(); - } - } - - if ( level.gameEnded ) - self maps\mp\gametypes\_globallogic::removeDisconnectedPlayerFromPlacement(); - - level thread maps\mp\gametypes\_globallogic::updateTeamStatus(); -} - -chooseNextBestNemesis() -{ - nemesisArray = self.pers["nemesis_tracking"]; - nemesisArrayKeys = getArrayKeys( nemesisArray ); - nemesisAmount = 0; - nemesisName = ""; - - if ( nemesisArrayKeys.size > 0 ) - { - for ( i = 0; i < nemesisArrayKeys.size; i++ ) - { - nemesisArrayKey = nemesisArrayKeys[i]; - if ( nemesisArray[nemesisArrayKey] > nemesisAmount ) - { - nemesisName = nemesisArrayKey; - nemesisAmount = nemesisArray[nemesisArrayKey]; - } - - } - } - - self.pers["nemesis_name"] = nemesisName; - - if ( nemesisName != "" ) - { - playerIndex = 0; - for( ; playerIndex < level.players.size; playerIndex++ ) - { - if ( level.players[playerIndex].name == nemesisName ) - { - nemesisPlayer = level.players[playerIndex]; - self.pers["nemesis_rank"] = nemesisPlayer.pers["rank"]; - self.pers["nemesis_rankIcon"] = nemesisPlayer.pers["rankxp"]; - self.pers["nemesis_xp"] = nemesisPlayer.pers["prestige"]; - self.pers["nemesis_xuid"] = nemesisPlayer GetXUID(true); - break; - } - } - } - else - { - self.pers["nemesis_xuid"] = ""; - } -} - -removePlayerOnDisconnect() -{ - for ( entry = 0; entry < level.players.size; entry++ ) - { - if ( level.players[entry] == self ) - { - while ( entry < level.players.size-1 ) - { - level.players[entry] = level.players[entry+1]; - entry++; - } - level.players[entry] = undefined; - break; - } - } -} - -custom_gamemodes_modified_damage( victim, eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ) -{ - // regular public matches should early out - if ( level.onlinegame && !GetDvarInt( #"xblive_privatematch" ) ) - { - return iDamage; - } - - if( maps\mp\gametypes\_customClasses::isUsingCustomGameModeClasses() && isDefined( eAttacker ) ) - { - if( maps\mp\gametypes\_class::isExplosiveDamage( sMeansOfDeath, sWeapon ) ) - { - iDamage *= eAttacker maps\mp\gametypes\_customClasses::getExplosiveDamageModifier(); - } - else - { - iDamage *= eAttacker maps\mp\gametypes\_customClasses::getDamageModifier(); - } - } - if( isdefined( eAttacker) && isDefined( eAttacker.damageModifier ) ) - { - iDamage *= eAttacker.damageModifier; - } - if ( ( sMeansOfDeath == "MOD_PISTOL_BULLET" ) || ( sMeansOfDeath == "MOD_RIFLE_BULLET" ) ) - { - iDamage = int( iDamage * GetDvarFloat( #"scr_game_bulletdamage" ) ); - } - - return iDamage; -} - -custom_gamemodes_vampirism_health( iDamage, eAttacker ) -{ - // regular public matches should early out - if ( level.onlinegame && !GetDvarInt( #"xblive_privatematch" ) ) - { - return 0; - } - - return Int(iDamage * eAttacker maps\mp\gametypes\_customClasses::getHealthVampirismModifier()); -} - -figureOutAttacker( eAttacker ) -{ - if ( isdefined(eAttacker) ) - { - if( isai(eAttacker) && isDefined( eAttacker.script_owner ) ) - { - team = self.team; - - if ( IsAi( self ) && IsDefined( self.aiteam ) ) - { - team = self.aiteam; - } - - if ( eAttacker.script_owner.team != team ) - eAttacker = eAttacker.script_owner; - } - - if( eAttacker.classname == "script_vehicle" && isDefined( eAttacker.owner ) ) - eAttacker = eAttacker.owner; - else if( eAttacker.classname == "auto_turret" && isDefined( eAttacker.owner ) ) - eAttacker = eAttacker.owner; - } - - return eAttacker; -} - -figureOutWeapon( sWeapon, eInflictor ) -{ - // explosive barrel/car detection - if ( sWeapon == "none" && isDefined( eInflictor ) ) - { - if ( isDefined( eInflictor.targetname ) && eInflictor.targetname == "explodable_barrel" ) - { - sWeapon = "explodable_barrel_mp"; - } - else if ( isDefined( eInflictor.destructible_type ) && isSubStr( eInflictor.destructible_type, "vehicle_" ) ) - { - sWeapon = "destructible_car_mp"; - } - } - - return sWeapon; -} - - -handleFlameDamage( eAttacker, eInflictor, iDamage, sWeapon, sMeansOfDeath) -{ - switch( sWeapon ) - { - case "none": - if ( !self hasperk( "specialty_fireproof" ) ) - { - self thread maps\mp\_burnplayer::walkedThroughFlames( eAttacker, eInflictor, sWeapon ); - } - break; - case "m2_flamethrower_mp": - if ( !self hasperk( "specialty_fireproof" ) ) - { - self thread maps\mp\_burnplayer::burnedWithFlameThrower( sWeapon ); - } - break; - case "napalm_mp": - if ( !self hasperk( "specialty_fireproof" ) ) - { - if (isdefined (level.minDamageRequiredForNapalmBurn) && iDamage > level.minDamageRequiredForNapalmBurn) - { - self thread maps\mp\_burnplayer::hitWithNapalmStrike(eAttacker, eInflictor, "MOD_BURNED" ); - } - else - { - self thread maps\mp\_burnplayer::walkedThroughFlames( eAttacker, eInflictor, sWeapon ); - } - } - break; - case "rottweil72_mp": - //if ( !self hasperk( "specialty_fireproof" ) ) - //{ - // self thread maps\mp\_burnplayer::burnedWithDragonsBreath( eAttacker, eInflictor, sWeapon ); - //} - break; - - default: - if( GetSubStr( sWeapon, 0, 3 ) == "ft_" ) - { - if ( !self hasperk( "specialty_fireproof" ) ) - { - self thread maps\mp\_burnplayer::burnedWithFlameThrower( eAttacker, eInflictor, sWeapon ); - } - } - break; - } -} - -Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime ) -{ - // create a class specialty checks; CAC:bulletdamage, CAC:armorvest - iDamage = maps\mp\gametypes\_class::cac_modified_damage( self, eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ); - iDamage = custom_gamemodes_modified_damage( self, eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ); - - iDamage = int(iDamage); - self.iDFlags = iDFlags; - self.iDFlagsTime = getTime(); - - if ( game["state"] == "postgame" ) - return; - - if ( self.sessionteam == "spectator" ) - return; - - if ( isDefined( self.canDoCombat ) && !self.canDoCombat ) - return; - - if ( isDefined( eAttacker ) && isPlayer( eAttacker ) ) - { - if( isDefined( eAttacker.canDoCombat ) && !eAttacker.canDoCombat ) - return; - - if( eAttacker.team == "spectator" || ( isDefined( eAttacker.teamSwitchExploit ) && eAttacker.teamSwitchExploit ) ) - { -/# - println( "teamSwitchExploit prevented damage from " + eAttacker.name + ".\n" ); -#/ - return; - } - } - - if ( isDefined( level.hostMigrationTimer ) ) - return; - - eAttacker = figureOutAttacker( eAttacker ); - - pixbeginevent( "PlayerDamage flags/tweaks" ); - - // Don't do knockback if the damage direction was not specified - if( !isDefined( vDir ) ) - iDFlags |= level.iDFLAGS_NO_KNOCKBACK; - - self maps\mp\gametypes\_bot::bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ); - - friendly = false; - // Todo MGordon - Fix this stat collection - //self thread maps\mp\gametypes\_globallogic_score::threadedSetStatLBByName( sWeapon, 1, "hits by", 2 ); - - if ( ((self.health == self.maxhealth)) || !isDefined( self.attackers ) ) - { - self.attackers = []; - self.attackerData = []; - self.attackerDamage = []; - self.firstTimeDamaged = getTime(); - } - // added check to notify chatter to play pain vo - if (self.health != self.maxhealth) - { - self notify( "snd_pain_player" ); - } - - if ( IsDefined( eInflictor) && IsDefined( eInflictor.script_noteworthy) && eInflictor.script_noteworthy == "ragdoll_now" ) - { - sMeansOfDeath = "MOD_FALLING"; - } - - if ( maps\mp\gametypes\_globallogic_utils::isHeadShot( sWeapon, sHitLoc, sMeansOfDeath ) && isPlayer(eAttacker) ) - { - //Turning off damage headshot sounds to avoid confusion from the killing headshot sound. - //if (self.team != eAttacker.team) - //{ - // eAttacker playLocalSound( "prj_bullet_impact_headshot_helmet_nodie_2d" ); - //} - sMeansOfDeath = "MOD_HEAD_SHOT"; - } - - modifiedDamage = [[level.onPlayerDamage]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime ); - if ( isDefined( modifiedDamage ) ) - iDamage = modifiedDamage; - - if ( maps\mp\gametypes\_tweakables::getTweakableValue( "game", "onlyheadshots" ) ) - { - if ( sMeansOfDeath == "MOD_PISTOL_BULLET" || sMeansOfDeath == "MOD_RIFLE_BULLET" ) - return; - else if ( sMeansOfDeath == "MOD_HEAD_SHOT" ) - iDamage = 150; - } - - // Make all vehicle drivers invulnerable to bullets - if ( self maps\mp\_vehicles::player_is_occupant_invulnerable( sMeansOfDeath ) ) - return; - - if (isdefined (eAttacker) && isPlayer(eAttacker) && (self.team != eAttacker.team)) - { - self.lastAttackWeapon = sWeapon; - - if ( eAttacker maps\mp\_vehicles::player_is_driver() ) - { - vehicle = eAttacker GetVehicleOccupied(); - self.lastTankThatAttacked = vehicle; - self thread maps\mp\gametypes\_globallogic_vehicle::clearLastTankAttacker(); - } - - // rottweil72 shoots dragon's breath rounds, so show a little fire on the player who got damaged - if( sMeansOfDeath == "MOD_BURNED" || sWeapon == "rottweil72_mp" ) - { - handleFlameDamage( eAttacker, eInflictor, iDamage, sWeapon, sMeansOfDeath); - } - } - - sWeapon = figureOutWeapon( sWeapon, eInflictor ); - - pixendevent( "END: PlayerDamage flags/tweaks" ); - - if( iDFlags & level.iDFLAGS_PENETRATION && isplayer ( eAttacker ) && eAttacker hasPerk( "specialty_bulletpenetration" ) ) - self thread maps\mp\gametypes\_battlechatter_mp::perkSpecificBattleChatter( "deepimpact", true ); - - // check for completely getting out of the damage - if( !(iDFlags & level.iDFLAGS_NO_PROTECTION) ) - { - if( ( isSubStr( sMeansOfDeath, "MOD_GRENADE" ) || isSubStr( sMeansOfDeath, "MOD_EXPLOSIVE" ) || isSubStr( sMeansOfDeath, "MOD_PROJECTILE" ) || isSubStr( sMeansOfDeath, "MOD_GAS" ) ) && - isDefined( eInflictor ) ) - { - // protect players from spawnkill grenades, tabun and incendiary - if ( ( eInflictor.classname == "grenade" || sweapon == "tabun_gas_mp" ) && (self.lastSpawnTime + 3500) > getTime() && distance( eInflictor.origin, self.lastSpawnPoint.origin ) < 250 ) - { -// pixmarker( "END: Callback_PlayerDamage player" ); - return; - } - - self.explosiveInfo = []; - self.explosiveInfo["damageTime"] = getTime(); - self.explosiveInfo["damageId"] = eInflictor getEntityNumber(); - self.explosiveInfo["returnToSender"] = false; - self.explosiveInfo["bulletPenetrationKill"] = false; - self.explosiveInfo["chainKill"] = false; - self.explosiveInfo["counterKill"] = false; - self.explosiveInfo["chainKill"] = false; - self.explosiveInfo["cookedKill"] = false; - self.explosiveInfo["weapon"] = sWeapon; - self.explosiveInfo["originalowner"] = eInflictor.originalowner; - - isFrag = isSubStr( sWeapon, "frag_" ); - - if ( eAttacker != self ) - { - if ( (isSubStr( sWeapon, "satchel_" ) || isSubStr( sWeapon, "claymore_" ) ) && isDefined( eAttacker ) && isDefined( eInflictor.owner ) ) - { - self.explosiveInfo["returnToSender"] = (eInflictor.owner == self); - self.explosiveInfo["counterKill"] = isDefined( eInflictor.wasDamaged ); - self.explosiveInfo["chainKill"] = isDefined( eInflictor.wasChained ); - self.explosiveInfo["ohnoyoudontKill"] = isDefined( eInflictor.wasJustPlanted ); - self.explosiveInfo["bulletPenetrationKill"] = isDefined( eInflictor.wasDamagedFromBulletPenetration ); - self.explosiveInfo["cookedKill"] = false; - } - if ( ( sWeapon == "sticky_grenade_mp" || sWeapon == "explosive_bolt_mp" ) && isDefined( eInflictor ) && isdefined( eInflictor.stuckToPlayer ) ) - { - self.explosiveInfo["stuckToPlayer"] = eInflictor.stuckToPlayer; - } - if ( isDefined( eAttacker.lastGrenadeSuicideTime ) && eAttacker.lastGrenadeSuicideTime >= gettime() - 50 && isFrag ) - { - self.explosiveInfo["suicideGrenadeKill"] = true; - } - else - { - self.explosiveInfo["suicideGrenadeKill"] = false; - } - } - - if ( isFrag ) - { - self.explosiveInfo["cookedKill"] = isDefined( eInflictor.isCooked ); - self.explosiveInfo["throwbackKill"] = isDefined( eInflictor.threwBack ); - } - - if( isPlayer( eAttacker ) && eAttacker != self ) - { - self maps\mp\gametypes\_globallogic_score::setInflictorStat( eInflictor, eAttacker, sWeapon ); - } - } - - if( isSubStr( sMeansOfDeath, "MOD_IMPACT" ) && isDefined( eAttacker ) && isPlayer( eAttacker ) && eAttacker != self ) - { - if ( sWeapon != "knife_ballistic_mp" ) - { - self maps\mp\gametypes\_globallogic_score::setInflictorStat( eInflictor, eAttacker, sWeapon ); - } - - if ( sWeapon == "hatchet_mp" && isDefined( eInflictor ) ) - { - self.explosiveInfo["projectile_bounced"] = isDefined( eInflictor.bounced ); - } - } - - if ( isPlayer( eAttacker ) ) - eAttacker.pers["participation"]++; - - prevHealthRatio = self.health / self.maxhealth; - - if ( level.teamBased && isPlayer( eAttacker ) && (self != eAttacker) && (self.team == eAttacker.team) ) - { - pixmarker( "BEGIN: PlayerDamage player" ); // profs automatically end when the function returns - if ( level.friendlyfire == 0 ) // no one takes damage - { - if ( sWeapon == "artillery_mp" || sWeapon == "airstrike_mp" || sWeapon == "napalm_mp" || sWeapon == "mortar_mp" ) - self damageShellshockAndRumble( eAttacker, eInflictor, sWeapon, sMeansOfDeath, iDamage ); - return; - } - else if ( level.friendlyfire == 1 ) // the friendly takes damage - { - // Make sure at least one point of damage is done - if ( iDamage < 1 ) - iDamage = 1; - - //check for friendly fire at the begining of the match. apply the damage to the attacker only - if( level.friendlyFireDelay && level.friendlyFireDelayTime >= ( ( ( gettime() - level.startTime ) - level.discardTime ) / 1000 ) ) - { - eAttacker.lastDamageWasFromEnemy = false; - - eAttacker.friendlydamage = true; - eAttacker finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - eAttacker.friendlydamage = undefined; - } - else - { - self.lastDamageWasFromEnemy = false; - - self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - } - } - else if ( level.friendlyfire == 2 && isAlive( eAttacker ) ) // only the attacker takes damage - { - iDamage = int(iDamage * .5); - - // Make sure at least one point of damage is done - if(iDamage < 1) - iDamage = 1; - - eAttacker.lastDamageWasFromEnemy = false; - - eAttacker.friendlydamage = true; - eAttacker finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - eAttacker.friendlydamage = undefined; - } - else if ( level.friendlyfire == 3 && isAlive( eAttacker ) ) // both friendly and attacker take damage - { - iDamage = int(iDamage * .5); - - // Make sure at least one point of damage is done - if ( iDamage < 1 ) - iDamage = 1; - - self.lastDamageWasFromEnemy = false; - eAttacker.lastDamageWasFromEnemy = false; - - self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - eAttacker.friendlydamage = true; - eAttacker finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - eAttacker.friendlydamage = undefined; - } - - friendly = true; - pixmarker( "END: PlayerDamage player" ); - } - else - { - // Make sure at least one point of damage is done - if(iDamage < 1) - iDamage = 1; - - if ( isDefined( eAttacker ) && isPlayer( eAttacker ) && allowedAssistWeapon( sWeapon ) ) - { - trackAttackerDamage( eAttacker, iDamage, sMeansOfDeath, sWeapon ); - } - - giveInflictorOwnerAssist( eAttacker, eInflictor, iDamage, sMeansOfDeath, sWeapon ); - - if ( isdefined( eAttacker ) ) - level.lastLegitimateAttacker = eAttacker; - - if ( isdefined( eAttacker ) && isPlayer( eAttacker ) && isDefined( sWeapon ) && !issubstr( sMeansOfDeath, "MOD_MELEE" ) ) - eAttacker thread maps\mp\gametypes\_weapons::checkHit( sWeapon ); - - if ( issubstr( sMeansOfDeath, "MOD_GRENADE" ) && isDefined( eInflictor.isCooked ) ) - self.wasCooked = getTime(); - else - self.wasCooked = undefined; - - self.lastDamageWasFromEnemy = (isDefined( eAttacker ) && (eAttacker != self)); - - if ( self.lastDamageWasFromEnemy ) - eAttacker.damagedPlayers[ self.clientId ] = getTime(); - - self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - - self thread maps\mp\gametypes\_missions::playerDamaged(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc ); - - if ( isdefined ( eAttacker ) ) - { - // if vampirism is on, give the attacker health as a % of damage done to the player - eAttacker.health += custom_gamemodes_vampirism_health( iDamage, eAttacker ); - } - } - - if ( isdefined(eAttacker) && isplayer( eAttacker ) && eAttacker != self ) - { - if ( doDamageFeedback( sWeapon, eInflictor ) ) - { - hasBodyArmor = false; - - if ( iDamage > 0 ) - { - // if the attacker has tactical mask pro then we show the special yellow indicator - if( IsPlayer( eAttacker ) && eAttacker HasPerk( "specialty_shades" ) && eAttacker HasPerk( "specialty_stunprotection" ) && eAttacker HasPerk( "specialty_gas_mask" ) ) - { - // show the yellow indicator if this is a flash or concussion grenade and they don't have tactical mask on - if( sMeansOfDeath == "MOD_GRENADE_SPLASH" && - ( sWeapon == "flash_grenade_mp" || sWeapon == "concussion_grenade_mp" ) && - ( !self HasPerk( "specialty_shades" ) || !self HasPerk( "specialty_stunprotection" ) ) ) - { - eAttacker thread maps\mp\gametypes\_damagefeedback::updateSpecialDamageFeedback( self ); - } - } - - eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback( hasBodyArmor, sMeansOfDeath ); - } - } - } - - self.hasDoneCombat = true; - } - - if(self.sessionstate != "dead") - self maps\mp\gametypes\_gametype_variants::onPlayerTakeDamage( eAttacker, eInflictor, sWeapon, iDamage, sMeansOfDeath ); - - if ( isdefined( eAttacker ) && eAttacker != self && !friendly ) - level.useStartSpawns = false; - - pixbeginevent( "PlayerDamage log" ); - - // Do debug print if it's enabled - if(GetDvarInt( #"g_debugDamage")) - println("client:" + self getEntityNumber() + " health:" + self.health + " attacker:" + eAttacker.clientid + " inflictor is player:" + isPlayer(eInflictor) + " damage:" + iDamage + " hitLoc:" + sHitLoc); - - if(self.sessionstate != "dead") - { - lpselfnum = self getEntityNumber(); - lpselfname = self.name; - lpselfteam = self.team; - lpselfGuid = self getGuid(); - lpattackerteam = ""; - lpattackerorigin = ( 0, 0, 0 ); - - if(isPlayer(eAttacker)) - { - lpattacknum = eAttacker getEntityNumber(); - lpattackGuid = eAttacker getGuid(); - lpattackname = eAttacker.name; - lpattackerteam = eAttacker.team; - lpattackerorigin = eAttacker.origin; - bbPrint( "mpattacks: gametime %d attackerspawnid %d attackerweapon %s attackerx %f attackery %f attackerz %f victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 0", - gettime(), getplayerspawnid( eAttacker ), sWeapon, lpattackerorigin, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc ); - } - else - { - lpattacknum = -1; - lpattackGuid = ""; - lpattackname = ""; - lpattackerteam = "world"; - bbPrint( "mpattacks: gametime %d attackerweapon %s victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 0", - gettime(), sWeapon, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc ); - } - logPrint("D;" + lpselfGuid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackGuid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n"); - } - -/# - if ( GetDvarInt( #"scr_hitloc_debug") ) - { - if ( !isdefined( eAttacker.hitlocInited ) ) - { - for ( i = 0; i < 6; i++ ) - { - eAttacker setClientDvar( "ui_hitloc_" + i, "" ); - } - eAttacker.hitlocInited = true; - } - - if ( isPlayer( eAttacker ) && !level.splitscreen ) - { - colors = []; - colors[0] = 2; - colors[1] = 3; - colors[2] = 5; - colors[3] = 7; - - elemcount = 6; - if ( !isdefined( eAttacker.damageInfo ) ) - { - eAttacker.damageInfo = []; - for ( i = 0; i < elemcount; i++ ) - { - eAttacker.damageInfo[i] = spawnstruct(); - eAttacker.damageInfo[i].damage = 0; - eAttacker.damageInfo[i].hitloc = ""; - eAttacker.damageInfo[i].bp = false; - eAttacker.damageInfo[i].jugg = false; - eAttacker.damageInfo[i].colorIndex = 0; - } - eAttacker.damageInfoColorIndex = 0; - eAttacker.damageInfoVictim = undefined; - } - - for ( i = elemcount-1; i > 0; i-- ) - { - eAttacker.damageInfo[i].damage = eAttacker.damageInfo[i - 1].damage; - eAttacker.damageInfo[i].hitloc = eAttacker.damageInfo[i - 1].hitloc; - eAttacker.damageInfo[i].bp = eAttacker.damageInfo[i - 1].bp; - eAttacker.damageInfo[i].jugg = eAttacker.damageInfo[i - 1].jugg; - eAttacker.damageInfo[i].colorIndex = eAttacker.damageInfo[i - 1].colorIndex; - } - eAttacker.damageInfo[0].damage = iDamage; - eAttacker.damageInfo[0].hitloc = sHitLoc; - eAttacker.damageInfo[0].bp = (iDFlags & level.iDFLAGS_PENETRATION); - eAttacker.damageInfo[0].jugg = false; - if ( isdefined( eAttacker.damageInfoVictim ) && eAttacker.damageInfoVictim != self ) - { - eAttacker.damageInfoColorIndex++; - if ( eAttacker.damageInfoColorIndex == colors.size ) - eAttacker.damageInfoColorIndex = 0; - } - eAttacker.damageInfoVictim = self; - eAttacker.damageInfo[0].colorIndex = eAttacker.damageInfoColorIndex; - - for ( i = 0; i < elemcount; i++ ) - { - color = "^" + colors[ eAttacker.damageInfo[i].colorIndex ]; - if ( eAttacker.damageInfo[i].hitloc != "" ) - { - val = color + eAttacker.damageInfo[i].hitloc; - if ( eAttacker.damageInfo[i].bp ) - val += " (BP)"; - if ( eAttacker.damageInfo[i].jugg ) - val += " (Jugg)"; - eAttacker setClientDvar( "ui_hitloc_" + i, val ); - } - eAttacker setClientDvar( "ui_hitloc_damage_" + i, color + eAttacker.damageInfo[i].damage ); - } - } - } -#/ - pixendevent( "END: PlayerDamage log" ); -} - -resetAttackerList() -{ - self endon( "disconnect" ); - self endon( "death" ); - level endon( "game_ended" ); - - self.attackers = []; - self.attackerData = []; - self.attackerDamage = []; -} - -doDamageFeedback( sWeapon, eInflictor ) -{ - if ( !IsDefined( sWeapon ) ) - return false; - - switch(sWeapon) - { - case "artillery_mp": - case "airstrike_mp": - case "napalm_mp": - case "mortar_mp": - case "tow_turret_mp": - case "auto_gun_turret_mp": - case "cobra_20mm_comlink_mp": - return false; - } - - if ( IsDefined( eInflictor ) ) - { - if ( IsAI(eInflictor) ) - { - return false; - } - } - - return true; -} - -doPrintDamage(dmg, hitloc) -{ - huddamage = newclienthudelem(self); - huddamage.alignx = "center"; - huddamage.horzalign = "center"; - huddamage.x = 10; - huddamage.y = 235; - huddamage.fontscale = 1.6; - huddamage.font = "objective"; - huddamage setvalue(dmg); - - if (hitloc == "head") - huddamage.color = (1, 1, 0.25); - - huddamage moveovertime(1); - huddamage fadeovertime(1); - huddamage.alpha = 0; - huddamage.x = randomIntRange(25, 70); - - val = 1; - if (cointoss()) - val = -1; - - huddamage.y = 235 + randomIntRange(25, 70) * val; - - wait 1; - - huddamage destroy(); -} - -finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime ) -{ - pixbeginevent("finishPlayerDamageWrapper"); - - if ( isDefined( eAttacker ) && isPlayer( eAttacker ) ) - eAttacker thread doPrintDamage(iDamage, sHitLoc); - else if( isDefined( eAttacker.owner ) && isPlayer( eAttacker.owner ) ) - eAttacker.owner thread doPrintDamage(iDamage, sHitLoc); - - surface = "flesh"; - - if ( self.cac_body_type == "body_armor_mp" ) - { - surface = "metal"; - } - - self finishPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, surface ); - - if ( GetDvar( #"scr_csmode" ) != "" ) - self shellShock( "damage_mp", 0.2 ); - - self damageShellshockAndRumble( eAttacker, eInflictor, sWeapon, sMeansOfDeath, iDamage ); - pixendevent(); -} - -allowedAssistWeapon( weapon ) -{ - if ( !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( weapon ) ) - return true; - - if (maps\mp\gametypes\_hardpoints::isKillstreakWeaponAssistAllowed( weapon ) ) - return true; - - return false; -} - -GiveCustomGameModePlayerKilledScore( attacker, sMeansOfDeath ) -{ - if( !maps\mp\gametypes\_customClasses::isCustomGame() ) - return; - - if( level.gameType != "tdm" && level.gameType != "dm" ) - return; - - if( isDefined( attacker ) && ( self == attacker || ( attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) ) ) - { - maps\mp\gametypes\_globallogic_score::givePlayerScore( "suicide", self, self ); - maps\mp\gametypes\_globallogic_score::giveTeamScore( "suicide", self.team, self, self ); - return; // no other bonuses if you're suicidin' - } - - if( sMeansOfDeath == "MOD_HEAD_SHOT" ) - { - maps\mp\gametypes\_globallogic_score::givePlayerScore( "headshot", attacker, self ); - maps\mp\gametypes\_globallogic_score::giveTeamScore( "headshot", attacker.team, attacker, self ); - } - if( isDefined( level.placement ) ) - { - maps\mp\gametypes\_globallogic::updatePlacement(); - if( attacker maps\mp\gametypes\_customClasses::shouldGiveLeaderBonus() ) - { - leaderbonus = getDvarInt( "scr_" + level.gameType + "_bonus_leader" ); - if( isDefined( leaderBonus ) ) - { - maps\mp\gametypes\_globallogic_score::_setPlayerScore( attacker, attacker.pers["score"] + leaderBonus ); - maps\mp\gametypes\_globallogic_score::onTeamScore( leaderBonus, attacker.team, attacker, self ); - maps\mp\gametypes\_globallogic_score::updateTeamScores( attacker.team ); - } - } - } - maps\mp\gametypes\_globallogic_score::givePlayerScore( "death", self, self ); - maps\mp\gametypes\_globallogic_score::giveTeamScore( "death", self.team, self, self ); - -} - -Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration) -{ - self endon( "spawned" ); - self notify( "killed_player" ); - - if ( self.sessionteam == "spectator" ) - return; - - if ( game["state"] == "postgame" ) - return; - - self needsRevive( false ); - - if ( isdefined( self.burning ) && self.burning == true ) - { - self setburn( 0 ); - } - - self.suicide = false; - - if ( isDefined( level.takeLivesOnDeath ) && ( level.takeLivesOnDeath == true ) ) - { - if ( self.pers["lives"] ) - { - self.pers["lives"]--; - if ( self.pers["lives"] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - } - - } - } - - sWeapon = updateWeapon( eInflictor, sWeapon ); - - pixbeginevent( "PlayerKilled pre constants" ); - - wasInLastStand = false; - deathTimeOffset = 0; - lastWeaponBeforeDroppingIntoLastStand = undefined; - attackerStance = undefined; - self.lastStandThisLife = undefined; - self.vAttackerOrigin = undefined; - - if ( isdefined( self.useLastStandParams ) ) - { - self.useLastStandParams = undefined; - - assert( isdefined( self.lastStandParams ) ); - if ( !level.teamBased || ( !isDefined( attacker ) || !isplayer( attacker ) || attacker.team != self.team || attacker == self ) ) - { - eInflictor = self.lastStandParams.eInflictor; - attacker = self.lastStandParams.attacker; - attackerStance = self.lastStandParams.attackerStance; - iDamage = self.lastStandParams.iDamage; - sMeansOfDeath = self.lastStandParams.sMeansOfDeath; - sWeapon = self.lastStandParams.sWeapon; - vDir = self.lastStandParams.vDir; - sHitLoc = self.lastStandParams.sHitLoc; - self.vAttackerOrigin = self.lastStandParams.vAttackerOrigin; - deathTimeOffset = (gettime() - self.lastStandParams.lastStandStartTime) / 1000; - - self thread maps\mp\gametypes\_battlechatter_mp::perkSpecificBattleChatter( "secondchance" ); - - if ( isDefined( self.previousPrimary ) ) - { - wasInLastStand = true; - lastWeaponBeforeDroppingIntoLastStand = self.previousPrimary; - } - } - self.lastStandParams = undefined; - } - - bestPlayer = undefined; - bestPlayerMeansOfDeath = undefined; - obituaryMeansOfDeath = undefined; - bestPlayerWeapon = undefined; - obituaryWeapon = undefined; - - if ( (!isDefined( attacker ) || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" || ( isdefined( attacker.isMagicBullet ) && attacker.isMagicBullet == true ) || attacker == self ) && isDefined( self.attackers ) ) - { - if ( !isDefined(bestPlayer) ) - { - for ( i = 0; i < self.attackers.size; i++ ) - { - player = self.attackers[i]; - if ( !isDefined( player ) ) - continue; - - if (!isDefined( self.attackerDamage[ player.clientId ] ) || ! isDefined( self.attackerDamage[ player.clientId ].damage ) ) - continue; - - if ( player == self || (level.teamBased && player.team == self.team ) ) - continue; - - if ( self.attackerDamage[ player.clientId ].lasttimedamaged + 2500 < getTime() ) - continue; - - if ( !allowedAssistWeapon( self.attackerDamage[ player.clientId ].weapon ) ) - continue; - - if ( self.attackerDamage[ player.clientId ].damage > 1 && ! isDefined( bestPlayer ) ) - { - bestPlayer = player; - bestPlayerMeansOfDeath = self.attackerDamage[ player.clientId ].meansOfDeath; - bestPlayerWeapon = self.attackerDamage[ player.clientId ].weapon; - } - else if ( isDefined( bestPlayer ) && self.attackerDamage[ player.clientId ].damage > self.attackerDamage[ bestPlayer.clientId ].damage ) - { - bestPlayer = player; - bestPlayerMeansOfDeath = self.attackerDamage[ player.clientId ].meansOfDeath; - bestPlayerWeapon = self.attackerDamage[ player.clientId ].weapon; - } - } - } - if ( isdefined ( bestPlayer ) ) - bestPlayer maps\mp\_medals::assistedSuicide(bestPlayerWeapon); - } - - if ( isdefined ( bestPlayer ) ) - { - attacker = bestPlayer; - obituaryMeansOfDeath = bestPlayerMeansOfDeath; - obituaryWeapon = bestPlayerWeapon; - } - - if ( isplayer( attacker ) ) - attacker.damagedPlayers[self.clientid] = undefined; - - if( maps\mp\gametypes\_globallogic_utils::isHeadShot( sWeapon, sHitLoc, sMeansOfDeath ) && isPlayer( attacker ) ) - { - attacker playLocalSound( "prj_bullet_impact_headshot_helmet_nodie_2d" ); - //attacker playLocalSound( "prj_bullet_impact_headshot_2d" ); - - sMeansOfDeath = "MOD_HEAD_SHOT"; - } - - self.deathTime = getTime(); - - attacker = updateAttacker( attacker ); - eInflictor = updateInflictor( eInflictor ); - - sMeansOfDeath = updateMeansOfDeath( sWeapon, sMeansOfDeath ); - - self thread updateGlobalBotKilledCounter(); - if ( maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - level.globalKillstreaksDeathsFrom++; - } - - // Don't increment weapon stats for team kills or deaths - if ( isPlayer( attacker ) && attacker != self && ( !level.teamBased || ( level.teamBased && self.team != attacker.team ) ) ) - { - self thread maps\mp\gametypes\_globallogic_score::trackLeaderBoardDeathStats( sWeapon, sMeansOfDeath ); - - if ( wasInLastStand && isDefined( lastWeaponBeforeDroppingIntoLastStand ) ) - weaponName = lastWeaponBeforeDroppingIntoLastStand; - else - weaponName = self.lastdroppableweapon; - - if ( isDefined( weaponName ) && ( isSubStr( weaponName, "gl_" ) || isSubStr( weaponName, "mk_" ) || isSubStr( weaponName, "ft_" ) ) ) - weaponName = self.currentWeapon; - - if ( isDefined( weaponName ) ) - self thread maps\mp\gametypes\_globallogic_score::trackLeaderBoardDeathsDuringUseStats( weaponName ); - - attacker thread maps\mp\gametypes\_globallogic_score::trackAttackerLeaderBoardDeathStats( sWeapon, sMeansOfDeath ); - } - - if ( !isdefined( obituaryMeansOfDeath ) ) - obituaryMeansOfDeath = sMeansOfDeath; - if ( !isdefined( obituaryWeapon ) ) - obituaryWeapon = sWeapon; - - // send out an obituary message to all clients about the kill - if( level.teamBased && isDefined( attacker.pers ) && self.team == attacker.team && obituaryMeansOfDeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - obituary(self, self, obituaryWeapon, obituaryMeansOfDeath); - maps\mp\_demo::bookmark( "kill", gettime(), self, self ); - } - else - { - obituary(self, attacker, obituaryWeapon, obituaryMeansOfDeath); - maps\mp\_demo::bookmark( "kill", gettime(), self, attacker ); - } - -// self maps\mp\gametypes\_weapons::updateWeaponUsageStats(); - if ( !level.inGracePeriod ) - { - self maps\mp\gametypes\_weapons::dropScavengerForDeath( attacker ); - self maps\mp\gametypes\_weapons::dropWeaponForDeath( attacker ); - self maps\mp\gametypes\_weapons::dropOffhand(); - } - - maps\mp\gametypes\_spawnlogic::deathOccured(self, attacker); - - self.sessionstate = "dead"; - self.statusicon = "hud_status_dead"; - - self.pers["weapon"] = undefined; - - self.killedPlayersCurrent = []; - - self.deathCount++; - -/# - println( "players("+self.clientId+") death count ++: " + self.deathCount ); -#/ - - if( !isDefined( self.switching_teams ) ) - { - // if team killed we reset kill streak, but dont count death and death streak - if ( isPlayer( attacker ) && level.teamBased && ( attacker != self ) && ( self.team == attacker.team ) ) - { - - self.pers["cur_kill_streak"] = 0; - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaksEarnedThisKillstreak"] = 0; - } - else - { - self maps\mp\gametypes\_globallogic_score::incPersStat( "deaths", 1, true, true ); - self.deaths = self maps\mp\gametypes\_globallogic_score::getPersStat( "deaths" ); - self maps\mp\gametypes\_globallogic_score::updatePersRatio( "kdratio", "kills", "deaths" ); - - if( self.pers["cur_kill_streak"] > self.pers["best_kill_streak"] ) - self.pers["best_kill_streak"] = self.pers["cur_kill_streak"]; - - // need to keep the current killstreak to see if this was a buzzkill later - self.pers["kill_streak_before_death"] = self.pers["cur_kill_streak"]; - - self.pers["cur_kill_streak"] = 0; - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaksEarnedThisKillstreak"] = 0; - - self.cur_death_streak++; - - if ( self.cur_death_streak > self.death_streak ) - { - self setDStat( "HighestStats", "death_streak", self.cur_death_streak ); - self.death_streak = self.cur_death_streak; - } - - if( self.cur_death_streak >= GetDvarInt( #"perk_deathStreakCountRequired" ) ) - { - self enabledeathstreak(); - } - } - } - else - { - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaksEarnedThisKillstreak"] = 0; - } - - lpselfnum = self getEntityNumber(); - lpselfname = self.name; - lpattackGuid = ""; - lpattackname = ""; - lpselfteam = self.team; - lpselfguid = self getGuid(); - lpattackteam = ""; - lpattackorigin = ( 0, 0, 0 ); - - lpattacknum = -1; - - //check if we should award assist points - awardAssists = false; - - pixendevent(); // "PlayerKilled pre constants" ); - - self GiveCustomGameModePlayerKilledScore( attacker, sMeansOfDeath ); - - if( isPlayer( attacker ) ) - { - lpattackGuid = attacker getGuid(); - lpattackname = attacker.name; - lpattackteam = attacker.team; - lpattackorigin = attacker.origin; - - if ( attacker == self ) // killed himself - { - doKillcam = false; - - // switching teams - if ( isDefined( self.switching_teams ) ) - { - if ( !level.teamBased && ((self.leaving_team == "allies" && self.joining_team == "axis") || (self.leaving_team == "axis" && self.joining_team == "allies")) ) - { - playerCounts = self maps\mp\gametypes\_teams::CountPlayers(); - playerCounts[self.leaving_team]--; - playerCounts[self.joining_team]++; - - if( (playerCounts[self.joining_team] - playerCounts[self.leaving_team]) > 1 ) - { - self thread [[level.onXPEvent]]( "suicide" ); - self maps\mp\gametypes\_globallogic_score::incPersStat( "suicides", 1 ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getPersStat( "suicides" ); - } - } - } - else - { - self thread [[level.onXPEvent]]( "suicide" ); - self maps\mp\gametypes\_globallogic_score::incPersStat( "suicides", 1 ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getPersStat( "suicides" ); - - if ( sMeansOfDeath == "MOD_SUICIDE" && sHitLoc == "none" && self.throwingGrenade ) - { - self.lastGrenadeSuicideTime = gettime(); - } - - //Check for player death related battlechatter - thread maps\mp\gametypes\_battlechatter_mp::onPlayerSuicideOrTeamKill( self, "suicide" ); //Play suicide battlechatter - - //check if assist points should be awarded - awardAssists = true; - self.suicide = true; - } - - if( isDefined( self.friendlydamage ) ) - { - self iPrintLn(&"MP_FRIENDLY_FIRE_WILL_NOT"); - if ( maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillpointloss" ) ) - { - scoreSub = self [[level.getTeamKillScore]]( eInflictor, attacker, sMeansOfDeath, sWeapon); - maps\mp\gametypes\_globallogic_score::_setPlayerScore( attacker,maps\mp\gametypes\_globallogic_score::_getPlayerScore( attacker ) - scoreSub ); - } - } - } - else - { - pixbeginevent( "PlayerKilled attacker" ); - - lpattacknum = attacker getEntityNumber(); - - doKillcam = true; - - self thread maps\mp\gametypes\_gametype_variants::playerKilled( attacker ); - - if ( level.teamBased && self.team == attacker.team && sMeansOfDeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - } - else if ( level.teamBased && self.team == attacker.team ) // killed by a friendly - { - attacker thread [[level.onXPEvent]]( "teamkill" ); - - if ( !IgnoreTeamKills( sWeapon, sMeansOfDeath ) ) - { - teamkill_penalty = self [[level.getTeamKillPenalty]]( eInflictor, attacker, sMeansOfDeath, sWeapon); - - attacker maps\mp\gametypes\_globallogic_score::incPersStat( "teamkills_nostats", teamkill_penalty, false ); - attacker maps\mp\gametypes\_globallogic_score::incPersStat( "teamkills", 1 ); //save team kills to player stats - attacker.teamkillsThisRound++; - - if ( maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillpointloss" ) ) - { - scoreSub = self [[level.getTeamKillScore]]( eInflictor, attacker, sMeansOfDeath, sWeapon); - maps\mp\gametypes\_globallogic_score::_setPlayerScore( attacker,maps\mp\gametypes\_globallogic_score::_getPlayerScore( attacker ) - scoreSub ); - } - - if ( maps\mp\gametypes\_globallogic_utils::getTimePassed() < 5000 ) - teamKillDelay = 1; - else if ( attacker.pers["teamkills_nostats"] > 1 && maps\mp\gametypes\_globallogic_utils::getTimePassed() < (8000 + (attacker.pers["teamkills_nostats"] * 1000)) ) - teamKillDelay = 1; - else - teamKillDelay = attacker TeamKillDelay(); - - if ( teamKillDelay > 0 ) - { - attacker.teamKillPunish = true; - attacker suicide(); - - if ( attacker ShouldTeamKillKick(teamKillDelay) ) - { - attacker TeamKillKick(); - } - - attacker thread reduceTeamKillsOverTime(); - } - - //Play teamkill battlechatter - if( isPlayer( attacker ) ) - thread maps\mp\gametypes\_battlechatter_mp::onPlayerSuicideOrTeamKill( attacker, "teamkill" ); - } - } - else - { - maps\mp\gametypes\_globallogic_score::incTotalKills(attacker.team); - - attacker thread maps\mp\gametypes\_globallogic_score::giveKillStats( sMeansOfDeath, sWeapon, self ); - - self maps\mp\gametypes\_copycat::copycat_clone_loadout( attacker ); - - if ( isAlive( attacker ) ) - { - pixbeginevent("killstreak"); - - if ( !isDefined( eInflictor ) || !isDefined( eInflictor.requiredDeathCount ) || attacker.deathCount == eInflictor.requiredDeathCount ) - { - shouldGiveKillstreak = maps\mp\gametypes\_hardpoints::shouldGiveKillstreak( sWeapon ); - attacker thread maps\mp\_properks::earnedAKill(); - - if ( shouldGiveKillstreak ) - { - attacker maps\mp\gametypes\_hardpoints::addToKillstreakCount(sWeapon); - } - - //Kills gotten through killstreak weapons should not the players killstreak - if ( isDefined( level.killstreaks ) && shouldGiveKillstreak ) - { - attacker.pers["cur_kill_streak"]++; - attacker thread maps\mp\_properks::checkKillCount(); - attacker thread maps\mp\gametypes\_hardpoints::giveKillstreakForStreak(); - } - } - - if( isPlayer( attacker ) ) - self thread maps\mp\gametypes\_battlechatter_mp::onPlayerKillstreak( attacker ); - - pixendevent(); // "killstreak" - } - - - if ( attacker.pers["cur_kill_streak"] > attacker.kill_streak ) - { - attacker setDStat( "HighestStats", "kill_streak", attacker.pers["totalKillstreakCount"] ); - attacker.kill_streak = attacker.pers["cur_kill_streak"]; - } - - - if ( attacker.pers["cur_kill_streak"] > attacker.gametype_kill_streak ) - { - attacker maps\mp\gametypes\_persistence::statSetWithGametype( "kill_streak", attacker.pers["cur_kill_streak"] ); - attacker.gametype_kill_streak = attacker.pers["cur_kill_streak"]; - } - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "kill", attacker, self ); - - attacker thread maps\mp\gametypes\_globallogic_score::trackAttackerKill( self.name, self.pers["rank"], self.pers["rankxp"], self.pers["prestige"], self getXuid(true) ); - - attackerName = attacker.name; - self thread maps\mp\gametypes\_globallogic_score::trackAttackeeDeath( attackerName, attacker.pers["rank"], attacker.pers["rankxp"], attacker.pers["prestige"], attacker getXuid(true) ); - self thread maps\mp\_medals::setLastKilledBy( attacker ); - - attacker thread maps\mp\gametypes\_globallogic_score::incKillstreakTracker( sWeapon ); - - // to prevent spectator gain score for team-spectator after throwing a granade and killing someone before he switched - if ( level.teamBased && attacker.team != "spectator") - { - // dog score for team - if( isai(Attacker) ) - maps\mp\gametypes\_globallogic_score::giveTeamScore( "kill", attacker.aiteam, attacker, self ); - else - maps\mp\gametypes\_globallogic_score::giveTeamScore( "kill", attacker.team, attacker, self ); - } - - scoreSub = maps\mp\gametypes\_tweakables::getTweakableValue( "game", "deathpointloss" ); - if ( scoreSub != 0 ) - { - maps\mp\gametypes\_globallogic_score::_setPlayerScore( self, maps\mp\gametypes\_globallogic_score::_getPlayerScore( self ) - scoreSub ); - } - - level thread playKillBattleChatter( attacker, sWeapon ); - - if ( level.teamBased ) - { - //check if assist points should be awarded - awardAssists = true; - } - } - - pixendevent( "PlayerKilled attacker" ); - } - } - else if ( isDefined( attacker ) && ( attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) ) - { - doKillcam = false; - - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - - self thread [[level.onXPEvent]]( "suicide" ); - self maps\mp\gametypes\_globallogic_score::incPersStat( "suicides", 1 ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getPersStat( "suicides" ); - - //Check for player death related battlechatter - thread maps\mp\gametypes\_battlechatter_mp::onPlayerSuicideOrTeamKill( self, "suicide" ); //Play suicide battlechatter - - //check if assist points should be awarded - awardAssists = true; - - } - else - { - doKillcam = false; - - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - - // we may have a killcam on an world entity like the rocket in cosmodrome - if ( IsDefined( eInflictor ) && IsDefined( eInflictor.killCamEnt ) ) - { - doKillcam = true; - lpattacknum = self getEntityNumber(); - } - - // even if the attacker isn't a player, it might be on a team - if ( isDefined( attacker ) && isDefined( attacker.team ) && (attacker.team == "axis" || attacker.team == "allies") ) - { - if ( attacker.team != self.team ) - { - if ( level.teamBased ) - maps\mp\gametypes\_globallogic_score::giveTeamScore( "kill", attacker.team, attacker, self ); - } - } - //check if assist points should be awarded - awardAssists = true; - - } - - //award assist points if needed - if( awardAssists ) - { - pixbeginevent( "PlayerKilled assists" ); - - if ( isdefined( self.attackers ) ) - { - for ( j = 0; j < self.attackers.size; j++ ) - { - player = self.attackers[j]; - - if ( !isDefined( player ) ) - continue; - - if ( player == attacker ) - continue; - - damage_done = self.attackerDamage[player.clientId].damage; - player thread maps\mp\gametypes\_globallogic_score::processAssist( self, damage_done); - } - } - - pixendevent( "END: PlayerKilled assists" ); - } - - pixbeginevent( "PlayerKilled post constants" ); - - self.lastAttacker = attacker; - self.lastDeathPos = self.origin; - - if ( isDefined( attacker ) && isPlayer( attacker ) && attacker != self && (!level.teambased || attacker.team != self.team) ) - { - self thread maps\mp\gametypes\_missions::playerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc, attackerStance ); - } - else - { - - self notify("playerKilledChallengesProcessed"); - } - - if ( isdefined ( self.attackers )) - self.attackers = []; - if( isPlayer( attacker ) ) - { - if( maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - killstreak = maps\mp\gametypes\_hardpoints::getKillstreakForWeapon( sWeapon ); - bbPrint( "mpattacks: gametime %d attackerspawnid %d attackerweapon %s attackerx %f attackery %f attackerz %f victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 1 killstreak %s", - gettime(), getplayerspawnid( attacker ), sWeapon, lpattackorigin, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc, killstreak ); - } - else - { - bbPrint( "mpattacks: gametime %d attackerspawnid %d attackerweapon %s attackerx %f attackery %f attackerz %f victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 1", - gettime(), getplayerspawnid( attacker ), sWeapon, lpattackorigin, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc ); - } - } - else - { - bbPrint( "mpattacks: gametime %d attackerweapon %s victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 1", - gettime(), sWeapon, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc ); - } - - logPrint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n" ); - attackerString = "none"; - if ( isPlayer( attacker ) ) // attacker can be the worldspawn if it's not a player - attackerString = attacker getXuid() + "(" + lpattackname + ")"; - self logstring( "d " + sMeansOfDeath + "(" + sWeapon + ") a:" + attackerString + " d:" + iDamage + " l:" + sHitLoc + " @ " + int( self.origin[0] ) + " " + int( self.origin[1] ) + " " + int( self.origin[2] ) ); - - level thread maps\mp\gametypes\_globallogic::updateTeamStatus(); - - killcamentity = self getKillcamEntity( attacker, eInflictor, sWeapon ); - killcamentityindex = -1; - killcamentitystarttime = 0; - - if ( isDefined( killcamentity ) ) - { - killcamentityindex = killcamentity getEntityNumber(); // must do this before any waiting lest the entity be deleted - if ( isdefined( killcamentity.startTime ) ) - { - killcamentitystarttime = killcamentity.startTime; - } - else - { - killcamentitystarttime = killcamentity.birthtime; - } - if ( !isdefined( killcamentitystarttime ) ) - killcamentitystarttime = 0; - } - - if ( self IsRemoteControlling() ) - doKillcam = false; - - self maps\mp\gametypes\_weapons::detachCarryObjectModel(); - - died_in_vehicle= false; - if (IsDefined(self.diedOnVehicle)) - { - died_in_vehicle = self.diedOnVehicle; // only works when vehicle blows up - } - pixendevent( "END: PlayerKilled post constants" ); - - pixbeginevent( "PlayerKilled body and gibbing" ); - if ( !died_in_vehicle ) - { - vAttackerOrigin = undefined; - if ( isdefined( attacker ) ) - vAttackerOrigin = attacker.origin; - - ragdoll_now = false; - if( IsDefined(self.usingvehicle) && self.usingvehicle && IsDefined(self.vehicleposition) && self.vehicleposition == 1 ) - ragdoll_now = true; - - if ( sMeansOfDeath == "MOD_FALLING" ) - { - if ( IsDefined( eInflictor ) && IsDefined( eInflictor.script_noteworthy ) && eInflictor.script_noteworthy == "ragdoll_now" ) - { - ragdoll_now = true; - self thread maps\mp\_challenges::fellOffTheMap(); - } - } - - body = self clonePlayer( deathAnimDuration ); - self createDeadBody( iDamage, sMeansOfDeath, sWeapon, sHitLoc, vDir, vAttackerOrigin, deathAnimDuration, eInflictor, ragdoll_now, body ); - } - pixendevent( "END: PlayerKilled body and gibbing" ); - - self.switching_teams = undefined; - self.joining_team = undefined; - self.leaving_team = undefined; - - self thread [[level.onPlayerKilled]](eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration); - - for ( iCB = 0; iCB < level.onPlayerKilledExtraUnthreadedCBs.size; iCB++ ) - { - self [[ level.onPlayerKilledExtraUnthreadedCBs[ iCB ] ]]( - eInflictor, - attacker, - iDamage, - sMeansOfDeath, - sWeapon, - vDir, - sHitLoc, - psOffsetTime, - deathAnimDuration ); - } - - self.wantSafeSpawn = false; - perks = maps\mp\gametypes\_globallogic::getPerks( attacker ); - killstreaks = maps\mp\gametypes\_globallogic::getKillstreaks( attacker ); - - // let the player watch themselves die - wait ( 0.25 ); - - //check if killed by a sniper - weaponClass = maps\mp\gametypes\_missions::getWeaponClass( sWeapon ); - if ( weaponClass == "weapon_sniper" ) - { - self thread maps\mp\gametypes\_battlechatter_mp::KilledBySniper( attacker ); - } - else - { - self thread maps\mp\gametypes\_battlechatter_mp::PlayerKilled( attacker ); - } - self.cancelKillcam = false; - self thread maps\mp\gametypes\_killcam::cancelKillCamOnUse(); - maps\mp\gametypes\_globallogic_utils::waitForTimeOrNotifies( 1.75 ); - self notify ( "death_delay_finished" ); - -/# - if ( GetDvarInt( #"scr_forcekillcam" ) != 0 ) - { - doKillcam = true; - - if ( lpattacknum < 0 ) - lpattacknum = self getEntityNumber(); - } -#/ - - if ( game["state"] != "playing" ) - { - // if no longer playing then this was probably the kill that ended the round - // store off the killcam info - level thread maps\mp\gametypes\_killcam::startFinalKillcam( lpattacknum, self getEntityNumber(), killcamentity, killcamentityindex, killcamentitystarttime, sWeapon, self.deathTime, deathTimeOffset, psOffsetTime, perks, killstreaks, attacker ); - return; - } - - respawnTimerStartTime = gettime(); - - if ( !self.cancelKillcam && doKillcam && level.killcam ) - { - livesLeft = !(level.numLives && !self.pers["lives"]); - timeUntilSpawn = maps\mp\gametypes\_globallogic_spawn::TimeUntilSpawn( true ); - willRespawnImmediately = livesLeft && (timeUntilSpawn <= 0); - - self thread maps\mp\_tutorial::tutorial_display_tip(); - self maps\mp\gametypes\_killcam::killcam( lpattacknum, self getEntityNumber(), killcamentity, killcamentityindex, killcamentitystarttime, sWeapon, self.deathTime, deathTimeOffset, psOffsetTime, willRespawnImmediately, maps\mp\gametypes\_globallogic_utils::timeUntilRoundEnd(), perks, killstreaks, attacker ); - } - - if ( game["state"] != "playing" ) - { - self.sessionstate = "dead"; - self.spectatorclient = -1; - self.killcamtargetentity = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - return; - } - - WaitTillKillStreakDone(); - - // class may be undefined if we have changed teams - if ( maps\mp\gametypes\_globallogic_utils::isValidClass( self.class ) ) - { - timePassed = (gettime() - respawnTimerStartTime) / 1000; - self thread [[level.spawnClient]]( timePassed ); - } -} - -updateGlobalBotKilledCounter() -{ - self endon("disconnect"); - wait( .05 ); - maps\mp\gametypes\_globallogic_utils::WaitTillSlowProcessAllowed(); - - if ( isDefined( self.pers["isBot"] ) ) - { - level.globalLarrysKilled++; - } -} - - -WaitTillKillStreakDone() -{ - if( isdefined( self.killstreak_waitamount ) ) - { - starttime = gettime(); - waitTime = self.killstreak_waitamount * 1000; - - while( (gettime() < (starttime+waitTime)) && isdefined( self.killstreak_waitamount ) ) - { - wait( 0.1 ); - } - - //Plus a small amount so we can see our dead body - wait( 2.0 ); - - self.killstreak_waitamount = undefined; - } -} - -TeamKillKick() -{ - self maps\mp\gametypes\_globallogic_score::incPersStat( "sessionbans", 1 ); - - self endon("disconnect"); - waittillframeend; - - //for test purposes lets lock them out of certain game type for 2mins - - playlistbanquantum = maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillerplaylistbanquantum" ); - playlistbanpenalty = maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillerplaylistbanpenalty" ); - if ( playlistbanquantum > 0 && playlistbanpenalty > 0 ) - { - timeplayedtotal = self maps\mp\gametypes\_persistence::statGet( "time_played_total" ); - minutesplayed = timeplayedtotal / 60; - - freebees = 2; - - banallowance = int( floor(minutesplayed / playlistbanquantum) ) + freebees; - - if ( self.sessionbans > banallowance ) - { - self maps\mp\gametypes\_persistence::statSet( "gametypeban", timeplayedtotal + (playlistbanpenalty * 60), false ); - } - } - - // no waiting because then they could quit and rejoin before the ban -// self setLowerMessage( &"MP_FRIENDLY_FIRE_WILL_NOT", 2 ); - - if ( self is_bot() ) - { - level notify( "bot_kicked", self.team ); - } - - ban( self getentitynumber(), 1 ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "kicked" ); -} - -TeamKillDelay() -{ - teamkills = self.pers["teamkills_nostats"]; - if ( level.minimumAllowedTeamKills < 0 || teamkills <= level.minimumAllowedTeamKills ) - return 0; - - exceeded = (teamkills - level.minimumAllowedTeamKills); - return maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillspawndelay" ) * exceeded; -} - - -ShouldTeamKillKick(teamKillDelay) -{ - if ( teamKillDelay && maps\mp\gametypes\_tweakables::getTweakableValue( "team", "kickteamkillers" ) ) - { - // if its more then 5 seconds into the match and we have a delay then just kick them - if ( maps\mp\gametypes\_globallogic_utils::getTimePassed() >= 5000 ) - { - return true; - } - - // if its under 5 seconds into the match only kick them if they have killed more then one players so far - if ( self.pers["teamkills_nostats"] > 1 ) - { - return true; - } - } - - return false; -} - -reduceTeamKillsOverTime() -{ - timePerOneTeamkillReduction = 20.0; - reductionPerSecond = 1.0 / timePerOneTeamkillReduction; - - while(1) - { - if ( isAlive( self ) ) - { - self.pers["teamkills_nostats"] -= reductionPerSecond; - if ( self.pers["teamkills_nostats"] < level.minimumAllowedTeamKills ) - { - self.pers["teamkills_nostats"] = level.minimumAllowedTeamKills; - break; - } - } - wait 1; - } -} - - -IgnoreTeamKills( sWeapon, sMeansOfDeath ) -{ - if ( sMeansOfDeath == "MOD_MELEE" ) - return false; - - if ( sWeapon == "briefcase_bomb_mp" ) - return true; - - if ( sWeapon == "supplydrop_mp" ) - return true; - -// if ( isSubStr( sWeapon, "mine_bouncing_betty_" ) ) -// return true; - - return false; -} - - -Callback_PlayerLastStand( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ) -{ - maps\mp\_laststand::playerlaststand(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ); -} - - -damageShellshockAndRumble( eAttacker, eInflictor, sWeapon, sMeansOfDeath, iDamage ) -{ - self thread maps\mp\gametypes\_weapons::onWeaponDamage( eAttacker, eInflictor, sWeapon, sMeansOfDeath, iDamage ); - self PlayRumbleOnEntity( "damage_heavy" ); -} - - -createDeadBody( iDamage, sMeansOfDeath, sWeapon, sHitLoc, vDir, vAttackerOrigin, deathAnimDuration, eInflictor, ragdoll_jib, body ) -{ - if ( sMeansOfDeath == "MOD_HIT_BY_OBJECT" && self GetStance() == "prone" ) - { - self.body = body; - if ( !isDefined( self.switching_teams ) ) - thread maps\mp\gametypes\_deathicons::addDeathicon( body, self, self.team, 5.0 ); - - return; - } - - if ( IsDefined( level.ragdoll_override ) && self [[level.ragdoll_override]]() ) - { - return; - } - - if ( ragdoll_jib || self isOnLadder() || self isMantling() || sMeansOfDeath == "MOD_CRUSH" || sMeansOfDeath == "MOD_HIT_BY_OBJECT" ) - body startRagDoll(); - - if ( !self IsOnGround() ) - { - if ( GetDvarInt( #"scr_disable_air_death_ragdoll" ) == 0 ) - { - body startRagDoll(); - } - } - - if ( self is_explosive_ragdoll( sWeapon, eInflictor ) ) - { - body start_explosive_ragdoll( vDir, sWeapon ); - } - - thread delayStartRagdoll( body, sHitLoc, vDir, sWeapon, eInflictor, sMeansOfDeath ); - - if( sMeansOfDeath == "MOD_BURNED" || isdefined( self.burning ) ) - { - body maps\mp\_burnplayer::burnedToDeath(); - } - if ( sMeansOfDeath == "MOD_CRUSH" ) - { - body maps\mp\gametypes\_globallogic_vehicle::vehicleCrush(); - } - - self.body = body; - if ( !isDefined( self.switching_teams ) ) - thread maps\mp\gametypes\_deathicons::addDeathicon( body, self, self.team, 5.0 ); -} - -is_explosive_ragdoll( weapon, inflictor ) -{ - if ( !IsDefined( weapon ) ) - { - return false; - } - - // destructible explosives - if ( weapon == "destructible_car_mp" || weapon == "explodable_barrel_mp" ) - { - return true; - } - - // special explosive weapons - if ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) - { - if ( IsDefined( inflictor ) && IsDefined( inflictor.stuckToPlayer ) ) - { - if ( inflictor.stuckToPlayer == self ) - { - return true; - } - } - } - - return false; -} - -start_explosive_ragdoll( dir, weapon ) -{ - if ( !IsDefined( self ) ) - { - return; - } - - x = RandomIntRange( 50, 100 ); - y = RandomIntRange( 50, 100 ); - z = RandomIntRange( 10, 20 ); - - if ( IsDefined( weapon ) && ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) ) - { - if ( IsDefined( dir ) && LengthSquared( dir ) > 0 ) - { - x = dir[0] * x; - y = dir[1] * y; - } - } - else - { - if ( cointoss() ) - { - x = x * -1; - } - if ( cointoss() ) - { - y = y * -1; - } - } - - self StartRagdoll(); - self LaunchRagdoll( ( x, y, z ) ); -} - - -notifyConnecting() -{ - waittillframeend; - - if( isDefined( self ) ) - level notify( "connecting", self ); -} - - -delayStartRagdoll( ent, sHitLoc, vDir, sWeapon, eInflictor, sMeansOfDeath ) -{ - if ( isDefined( ent ) ) - { - deathAnim = ent getcorpseanim(); - if ( animhasnotetrack( deathAnim, "ignore_ragdoll" ) ) - return; - } - - if ( level.oldschool ) - { - if ( !isDefined( vDir ) ) - vDir = (0,0,0); - - explosionPos = ent.origin + ( 0, 0, maps\mp\gametypes\_globallogic_utils::getHitLocHeight( sHitLoc ) ); - explosionPos -= vDir * 20; - //thread maps\mp\gametypes\_globallogic_utils::debugLine( ent.origin + (0,0,(explosionPos[2] - ent.origin[2])), explosionPos ); - explosionRadius = 40; - explosionForce = .75; - if ( sMeansOfDeath == "MOD_IMPACT" || sMeansOfDeath == "MOD_EXPLOSIVE" || isSubStr(sMeansOfDeath, "MOD_GRENADE") || isSubStr(sMeansOfDeath, "MOD_PROJECTILE") || sHitLoc == "head" || sHitLoc == "helmet" ) - { - explosionForce = 2.5; - } - - ent startragdoll( 1 ); - - wait .05; - - if ( !isDefined( ent ) ) - return; - - // apply extra physics force to make the ragdoll go crazy - physicsExplosionSphere( explosionPos, explosionRadius, explosionRadius/2, explosionForce ); - return; - } - - wait( 0.2 ); - - if ( !isDefined( ent ) ) - return; - - if ( ent isRagDoll() ) - return; - - deathAnim = ent getcorpseanim(); - - startFrac = 0.35; - - if ( animhasnotetrack( deathAnim, "start_ragdoll" ) ) - { - times = getnotetracktimes( deathAnim, "start_ragdoll" ); - if ( isDefined( times ) ) - startFrac = times[0]; - } - - waitTime = startFrac * getanimlength( deathAnim ); - wait( waitTime ); - - if ( isDefined( ent ) ) - { - println( "Ragdolling after " + waitTime + " seconds" ); - ent startragdoll( 1 ); - } -} - -trackAttackerDamage( eAttacker, iDamage, sMeansOfDeath, sWeapon ) -{ - Assert( isPlayer( eAttacker ) ); - - if ( !isdefined( self.attackerData[eAttacker.clientid] ) ) - { - self.attackerDamage[eAttacker.clientid] = spawnstruct(); - self.attackerDamage[eAttacker.clientid].damage = iDamage; - self.attackerDamage[eAttacker.clientid].meansOfDeath = sMeansOfDeath; - self.attackerDamage[eAttacker.clientid].weapon = sWeapon; - self.attackerDamage[eAttacker.clientid].time = getTime(); - self.attackers[ self.attackers.size ] = eAttacker; - // we keep an array of attackers by their client ID so we can easily tell - // if they're already one of the existing attackers in the above if(). - // we store in this array data that is useful for other things, like challenges - self.attackerData[eAttacker.clientid] = false; - } - else - { - self.attackerDamage[eAttacker.clientid].damage += iDamage; - self.attackerDamage[eAttacker.clientid].meansOfDeath = sMeansOfDeath; - self.attackerDamage[eAttacker.clientid].weapon = sWeapon; - if ( !isdefined( self.attackerDamage[eAttacker.clientid].time ) ) - self.attackerDamage[eAttacker.clientid].time = getTime(); - } - - self.attackerDamage[eAttacker.clientid].lasttimedamaged = getTime(); - if ( maps\mp\gametypes\_weapons::isPrimaryWeapon( sWeapon ) ) - self.attackerData[eAttacker.clientid] = true; -} - -giveInflictorOwnerAssist( eAttacker, eInflictor, iDamage, sMeansOfDeath, sWeapon ) -{ - if ( !isDefined( eInflictor ) ) - return; - - if ( !isDefined( eInflictor.owner ) ) - return; - - if ( !IsDefined( eInflictor.ownerGetsAssist ) ) - return; - - if ( !eInflictor.ownerGetsAssist ) - return; - - Assert( isPlayer( eInflictor.owner ) ); - - trackAttackerDamage( eInflictor.owner, iDamage, sMeansOfDeath, sWeapon ); -} - -updateMeansOfDeath( sWeapon, sMeansOfDeath ) -{ - // we do not want the melee icon to show up for dog attacks - // AE 10-22-09: added the check for the crossbow so that it'll show the right icon - switch(sWeapon) - { - case "crossbow_mp": - case "knife_ballistic_mp": - { - if ( ( sMeansOfDeath != "MOD_HEAD_SHOT" ) && ( sMeansOfDeath != "MOD_MELEE" ) ) - { - sMeansOfDeath = "MOD_PISTOL_BULLET"; - } - } - break; - case "dog_bite_mp": - sMeansOfDeath = "MOD_PISTOL_BULLET"; - break; - case "destructible_car_mp": - sMeansOfDeath = "MOD_EXPLOSIVE"; - break; - case "explodable_barrel_mp": - sMeansOfDeath = "MOD_EXPLOSIVE"; - break; - } - - return sMeansOfDeath; -} - -updateAttacker( attacker ) -{ - if( isai(attacker) && isDefined( attacker.script_owner ) ) - { - // if the person who called the dogs in switched teams make sure they don't - // get penalized for the kill - if ( !level.teambased || attacker.script_owner.team != self.team ) - attacker = attacker.script_owner; - } - - if( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker notify("killed",self); - - attacker = attacker.owner; - } - - if( isai(attacker) ) - attacker notify("killed",self); - - if ( ( isdefined ( self.capturingLastFlag ) ) && ( self.capturingLastFlag == true ) ) - { - attacker.lastCapKiller = true; - } - - return attacker; -} - -updateInflictor( eInflictor ) -{ - if( IsDefined( eInflictor ) && eInflictor.classname == "script_vehicle" ) - { - eInflictor notify("killed",self); - } - - return eInflictor; -} - -updateWeapon( eInflictor, sWeapon ) -{ - // explosive barrel/car detection - if ( sWeapon == "none" && isDefined( eInflictor ) ) - { - if ( isDefined( eInflictor.targetname ) && eInflictor.targetname == "explodable_barrel" ) - sWeapon = "explodable_barrel_mp"; - else if ( isDefined( eInflictor.destructible_type ) && isSubStr( eInflictor.destructible_type, "vehicle_" ) ) - sWeapon = "destructible_car_mp"; - } - - return sWeapon; -} - -getClosestKillcamEntity( attacker, killCamEntities ) -{ - closestKillcamEnt = undefined; - closestKillcamEntDist = undefined; - origin = undefined; - - for ( killcamEntIndex = 0; killcamEntIndex < killCamEntities.size; killcamEntIndex++ ) - { - killcamEnt = killCamEntities[killcamEntIndex]; - if ( killcamEnt == attacker ) - continue; - - origin = killcamEnt.origin; - if ( IsDefined( killcamEnt.offsetPoint ) ) - origin += killcamEnt.offsetPoint; - - dist = DistanceSquared( self.origin, origin ); - - if ( !IsDefined( closestKillcamEnt ) || dist < closestKillcamEntDist ) - { - closestKillcamEnt = killcamEnt; - closestKillcamEntDist = dist; - } - } - - return closestKillcamEnt; -} - -getKillcamEntity( attacker, eInflictor, sWeapon ) -{ - if ( !isDefined( eInflictor ) ) - return undefined; - - if ( eInflictor == attacker ) - { - if( !IsDefined( eInflictor.isMagicBullet ) ) - return undefined; - if( IsDefined( eInflictor.isMagicBullet ) && !eInflictor.isMagicBullet ) - return undefined; - } - else if ( isdefined( level.levelSpecificKillcam ) ) - { - levelSpecificKillcamEnt = self [[level.levelSpecificKillcam]](); - if ( isdefined( levelSpecificKillcamEnt ) ) - return levelSpecificKillcamEnt; - } - - if ( sWeapon == "m220_tow_mp" ) - return undefined; - - if ( isDefined(eInflictor.killCamEnt) ) - { - // this is the case with the player helis - if ( eInflictor.killCamEnt == attacker ) - return undefined; - - return eInflictor.killCamEnt; - } - else if ( isDefined(eInflictor.killCamEntities) ) - { - return getClosestKillcamEntity( attacker, eInflictor.killCamEntities ); - } - - if ( isDefined( eInflictor.script_gameobjectname ) && eInflictor.script_gameobjectname == "bombzone" ) - return eInflictor.killCamEnt; - - //if ( eInflictor.classname == "script_origin" || eInflictor.classname == "script_model" || eInflictor.classname == "script_brushmodel" ) - // return undefined; // probably a barrel or a car... code does airstrike cam for these things which looks bad - - return eInflictor; -} - -playKillBattleChatter( attacker, sWeapon ) -{ - if( IsPlayer( attacker ) ) - { - if( isDefined(level.bcKillInformProbability) && randomIntRange( 0, 100 ) >= level.bcKillInformProbability ) - { - if ( !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - level thread maps\mp\gametypes\_battlechatter_mp::sayLocalSoundDelayed( attacker, "kill", "infantry", 0.75 ); - } - } - } -} - \ No newline at end of file diff --git a/main_shared/maps/mp/gametypes/_hardpoints.gsc b/main_shared/maps/mp/gametypes/_hardpoints.gsc deleted file mode 100644 index 23f428e..0000000 --- a/main_shared/maps/mp/gametypes/_hardpoints.gsc +++ /dev/null @@ -1,1141 +0,0 @@ -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include common_scripts\utility; -init() -{ - PreCacheString( &"MP_KILLSTREAK_N" ); - if ( GetDvar( #"scr_allow_killstreak_building") == "" ) - { - SetDvar( "scr_allow_killstreak_building", "0" ); - } - - level.killstreaks = []; - level.killstreakWeapons = []; - level.menuReferenceForKillStreak = []; - level.numKillstreakReservedObjectives = 0; - level.killstreakCounter = 0; - if( !isDefined(level.killstreakRoundDelay) ) - level.killstreakRoundDelay = 0; - maps\mp\_airsupport::initAirsupport(); - maps\mp\_helicopter::init(); - maps\mp\_airstrike::init(); - maps\mp\_napalm::init(); - maps\mp\_artillery::init(); - maps\mp\_mortar::init(); - maps\mp\_radar::init(); - maps\mp\_rcbomb::init(); - maps\mp\_helicopter_player::init(); - maps\mp\_spyplane::init(); - maps\mp\_dogs::initKillstreak(); - maps\mp\gametypes\_supplydrop::init(); - maps\mp\_killstreakrules::init(); - maps\mp\_turret_killstreak::init(); - maps\mp\gametypes\_killstreak_weapons::init(); - level thread onPlayerConnect(); -} -registerKillstreak(killstreakType, - killstreakWeapon, - killstreakMenuName, - killstreakUsageKey, - killstreakUseFunction, - killstreakDelayStreak, - weaponHoldAllowed, - killstreakStatsName - ) -{ - AssertEx( IsDefined(killstreakType), "Can not register a killstreak without a valid type name."); - AssertEx( !IsDefined(level.killstreaks[killstreakType]), "Killstreak " + killstreakType + " already registered"); - AssertEx( IsDefined(killstreakUseFunction), "No use function defined for killstreak " + killstreakType); - - level.killstreaks[killstreakType] = SpawnStruct(); - - - level.killstreaks[killstreakType].killstreakLevel = int( tablelookup( "mp/statstable.csv", level.cac_creference, killstreakMenuName, level.cac_ccount ) ); - level.killstreaks[killstreakType].usageKey = killstreakUsageKey; - level.killstreaks[killstreakType].useFunction = killstreakUseFunction; - level.killstreaks[killstreakType].menuName = killstreakMenuName; - level.killstreaks[killstreakType].delayStreak = killstreakDelayStreak; - level.killstreaks[killstreakType].allowAssists = false; - - if ( IsDefined( killstreakWeapon ) ) - { - AssertEx( !IsDefined(level.killstreakWeapons[killstreakWeapon]), "Can not have a weapon associated with multiple killstreaks."); - precacheItem( killstreakWeapon ); - level.killstreaks[killstreakType].weapon = killstreakWeapon; - level.killstreakWeapons[killstreakWeapon] = killstreakType; - } - if ( !IsDefined( weaponHoldAllowed ) ) - { - weaponHoldAllowed = false; - } - if( isDefined( killstreakStatsName ) ) - { - level.killstreaks[killstreakType].killstreakStatsName = killstreakStatsName; - } - level.killstreaks[killstreakType].weaponHoldAllowed = weaponHoldAllowed; - level.menuReferenceForKillStreak[killstreakMenuName] = killstreakType; -} -registerKillstreakStrings( killstreakType, receivedText, notUsableText, inboundText, inboundNearPlayerText ) -{ - AssertEx( IsDefined(killstreakType), "Can not register a killstreak without a valid type name."); - AssertEx( IsDefined(level.killstreaks[killstreakType]), "Killstreak needs to be registered before calling registerKillstreakStrings."); - - level.killstreaks[killstreakType].receivedText = receivedText; - level.killstreaks[killstreakType].notAvailableText = notUsableText; - level.killstreaks[killstreakType].inboundText = inboundText; - level.killstreaks[killstreakType].inboundNearPlayerText = inboundNearPlayerText; - - if( IsDefined(level.killstreaks[killstreakType].receivedText) ) - precacheString( level.killstreaks[killstreakType].receivedText ); - if( IsDefined(level.killstreaks[killstreakType].notAvailableText) ) - precacheString( level.killstreaks[killstreakType].notAvailableText ); - if( IsDefined(level.killstreaks[killstreakType].inboundText) ) - precacheString( level.killstreaks[killstreakType].inboundText ); - if( IsDefined(level.killstreaks[killstreakType].inboundNearPlayerText) ) - precacheString( level.killstreaks[killstreakType].inboundNearPlayerText ); -} -registerKillstreakDialog( killstreakType, - receivedDialog, - friendlyStartDialog, - friendlyEndDialog, - enemyStartDialog, - enemyEndDialog, - dialog - ) -{ - AssertEx( IsDefined(killstreakType), "Can not register a killstreak without a valid type name."); - AssertEx( IsDefined(level.killstreaks[killstreakType]), "Killstreak needs to be registered before calling registerKillstreakDialog."); - level.killstreaks[killstreakType].informDialog = receivedDialog; - - game["dialog"][killstreakType + "_start"] = friendlyStartDialog; - game["dialog"][killstreakType + "_end"] = friendlyEndDialog; - game["dialog"][killstreakType + "_enemy_start"] = enemyStartDialog; - game["dialog"][killstreakType + "_enemy_end"] = enemyEndDialog; - game["dialog"][killstreakType] = dialog; -} -registerKillstreakAltWeapon( killstreakType, weapon ) -{ - AssertEx( IsDefined(killstreakType), "Can not register a killstreak without a valid type name."); - AssertEx( IsDefined(level.killstreaks[killstreakType]), "Killstreak needs to be registered before calling registerKillstreakAltWeapon."); - if ( level.killstreaks[killstreakType].weapon == weapon ) - return; - - - if ( !IsDefined( level.killstreaks[killstreakType].altWeapons ) ) - { - level.killstreaks[killstreakType].altWeapons = []; - } - if( !IsDefined( level.killstreakWeapons[weapon] ) ) - { - level.killstreakWeapons[weapon] = killstreakType; - } - level.killstreaks[killstreakType].altWeapons[level.killstreaks[killstreakType].altWeapons.size] = weapon; -} -registerKillstreakDevDvar(killstreakType, dvar) -{ - AssertEx( IsDefined(killstreakType), "Can not register a killstreak without a valid type name."); - AssertEx( IsDefined(level.killstreaks[killstreakType]), "Killstreak needs to be registered before calling registerKillstreakDevDvar."); - level.killstreaks[killstreakType].devDvar = dvar; -} -allowKillstreakAssists( killstreakType, allow ) -{ - level.killstreaks[killstreakType].allowAssists = allow; -} -isKillstreakAvailable( killstreak ) -{ - if ( isDefined( level.menuReferenceForKillStreak[killstreak] ) ) - return true; - else - return false; -} -getKillstreakByMenuName( killstreak ) -{ - return level.menuReferenceForKillStreak[killstreak]; -} -getKillStreakMenuName( killstreakType ) -{ - Assert( IsDefined(level.killstreaks[killstreakType] ) ); - return level.killstreaks[killstreakType].menuName; -} -drawLine( start, end, timeSlice, color ) -{ - drawTime = int(timeSlice * 20); - for( time = 0; time < drawTime; time++ ) - { - line( start, end, (1,0,0),false, 1 ); - wait ( 0.05 ); - } -} -getKillstreakLevel( index, killstreak ) -{ - killstreakLevel = level.killstreaks[ getKillstreakByMenuName( killstreak ) ].killstreakLevel; - if( getDvarInt( "custom_killstreak_mode" ) == 2 ) - { - if( killstreak == self.killstreak[ 0 ] && index == 0 ) - { - killstreakLevel = getDvarInt( "custom_killstreak_1_kills" ); - } - else if( killstreak == self.killstreak[ 1 ] && index == 1 ) - { - killstreakLevel = getDvarInt( "custom_killstreak_2_kills" ); - } - else if( killstreak == self.killstreak[ 2 ] && index == 2 ) - { - killstreakLevel = getDvarInt( "custom_killstreak_3_kills" ); - } - } - return killstreakLevel; -} -giveKillstreakIfStreakCountMatches( index, killstreak, streakCount ) -{ - pixbeginevent( "giveKillstreakIfStreakCountMatches" ); - - - if( self.pers["killstreaksEarnedThisKillstreak"] > index && isRoundBased() ) - hasAlreadyEarnedKillstreak = true; - else - hasAlreadyEarnedKillstreak = false; - if ( IsDefined( killstreak ) && isKillstreakAvailable(killstreak) && !hasAlreadyEarnedKillstreak ) - { - killstreakLevel = GetKillstreakLevel( index, killstreak ); - if ( self HasPerk( "specialty_killstreak" ) ) - { - reduction = GetDvarInt( #"perk_killstreakReduction" ); - killstreakLevel -= reduction; - - if( killstreakLevel <= 0 ) - { - killstreakLevel = 1; - } - } - - if ( killstreakLevel == streakCount ) - { - - - - - self thread maps\mp\_properks::earnedAKillstreak(); - self thread maps\mp\_challenges::earnedKillstreak( killstreak ); - self giveKillstreak( getKillstreakByMenuName( killstreak ), streakCount ); - self.pers["killstreaksEarnedThisKillstreak"] = index + 1; - pixendevent(); - return true; - } - } - pixendevent(); - return false; -} -giveKillstreakForStreak() -{ - self notify("new_killstreak_count"); - - if ( !isKillStreaksEnabled() ) - { - return; - } - - - - - if( !IsDefined(self.pers["totalKillstreakCount"]) ) - { - self.pers["totalKillstreakCount"] = 0; - } - - - given = false; - - for ( i = 0; i < self.killstreak.size && i < 3; i++ ) - { - given |= giveKillstreakIfStreakCountMatches( i, self.killstreak[i], self.pers["cur_kill_streak"] ); - } - - - - - - - - - - - - - - - - - - - - - - - - - - - -} -isOneAwayFromKillstreak() -{ - if( !IsDefined( self.pers["kill_streak_before_death"] ) ) - { - self.pers["kill_streak_before_death"] = 0; - } - - streakPlusOne = self.pers["kill_streak_before_death"] + 1; - - - - oneAway = doesStreakCountMatches( self.killstreak[0], streakPlusOne ); - oneAway |= doesStreakCountMatches( self.killstreak[1], streakPlusOne ); - oneAway |= doesStreakCountMatches( self.killstreak[2], streakPlusOne ); - return oneAway; -} -doesStreakCountMatches( killstreak, streakCount ) -{ - if ( IsDefined( killstreak ) && isKillstreakAvailable(killstreak) ) - { - killstreak = getKillstreakByMenuName( killstreak ); - killstreakLevel = level.killstreaks[killstreak].killstreakLevel; - if ( self HasPerk( "specialty_killstreak" ) ) - { - reduction = GetDvarInt( #"perk_killstreakReduction" ); - killstreakLevel -= reduction; - } - - if ( killstreakLevel == streakCount ) - { - return true; - } - } - - return false; -} -streakNotify( streakVal ) -{ - self endon("disconnect"); - - self waittill( "playerKilledChallengesProcessed" ); - wait .05; - - notifyData = spawnStruct(); - notifyData.titleLabel = &"MP_KILLSTREAK_N"; - notifyData.titleText = streakVal; - notifyData.iconHeight = 32; - self maps\mp\gametypes\_hud_message::notifyMessage( notifyData ); - - -} -giveKillstreak( killstreakType, streak, suppressNotification, noXP ) -{ - pixbeginevent( "giveKillstreak" ); - self endon("disconnect"); - level endon( "game_ended" ); - - had_to_delay = false; - - killstreakGiven = false; - if( isDefined( noXP ) ) - { - if ( self giveKillstreakInternal( killstreakType, undefined, noXP ) ) - { - killstreakGiven = true; - self addKillstreakToQueue( level.killstreaks[killstreakType].menuname, streak, killstreakType, noXP ); - } - } - else if ( self giveKillstreakInternal( killstreakType, noXP ) ) - { - killstreakGiven = true; - self addKillstreakToQueue( level.killstreaks[killstreakType].menuname, streak, killstreakType, noXP ); - } - if( killstreakGiven ) - { - self maps\mp\gametypes\_gametype_variants::onPlayerKillstreakEarned(); - } - pixendevent(); -} -giveKillstreakInternal( killstreakType, do_not_update_death_count, noXP ) -{ - if ( level.gameEnded ) - return false; - - if ( !isKillStreaksEnabled() ) - return false; - - if ( !isDefined( level.killstreaks[killstreakType] ) ) - return false; - if ( !IsDefined( self.pers["killstreaks"] ) ) - { - self.pers["killstreaks"] = []; - } - if( !IsDefined( self.pers["killstreak_has_been_used"] ) ) - { - self.pers["killstreak_has_been_used"] = []; - } - if( !IsDefined( self.pers["killstreak_unique_id"] ) ) - { - self.pers["killstreak_unique_id"] = []; - } - - self.pers["killstreaks"][self.pers["killstreaks"].size] = killstreakType; - self.pers["killstreak_unique_id"][self.pers["killstreak_unique_id"].size] = level.killstreakCounter; - level.killstreakCounter++; - - if( isDefined(noXP) ) - { - self.pers["killstreak_has_been_used"][self.pers["killstreak_has_been_used"].size] = noXP; - } - else - { - self.pers["killstreak_has_been_used"][self.pers["killstreak_has_been_used"].size] = false; - } - - weapon = getKillstreakWeapon( killstreakType ); - - giveKillstreakWeapon( weapon ); - return true; -} -addKillstreakToQueue( menuName, streakCount, hardpointType, noNotify ) -{ - killstreakTableNumber = -1; - for( killstreakTableNumber=level.killStreakBaseValue; killstreakTableNumber<(level.killStreakBaseValue+level.totalkillStreaks + 1); killstreakTableNumber++ ) - { - if ( !isDefined( level.tbl_KillStreakData[ killstreakTableNumber ] ) || - !isDefined( level.tbl_KillStreakData[ killstreakTableNumber ][ "reference" ] ) ) - { - continue; - } - - if ( menuName == level.tbl_KillStreakData[ killstreakTableNumber ][ "reference" ] ) - { - break; - } - } - - assert ( killstreakTableNumber != level.killStreakBaseValue+level.totalkillStreaks + 1); - if ( killstreakTableNumber == level.killStreakBaseValue+level.totalkillStreaks + 1 ) - return; - if( isDefined( noNotify ) && noNotify ) - return; - size = self.killstreakNotifyQueue.size; - self.killstreakNotifyQueue[size] = spawnstruct(); - self.killstreakNotifyQueue[size].streakCount = streakCount; - self.killstreakNotifyQueue[size].killstreakTableNumber = killstreakTableNumber; - self.killstreakNotifyQueue[size].hardpointType = hardpointType; - - self notify( "received award" ); -} -hasKillstreakEquipped( ) -{ - currentWeapon = self getCurrentWeapon(); - keys = getarraykeys( level.killstreaks ); - for ( i = 0; i < keys.size; i++ ) - { - if ( level.killstreaks[keys[i]].weapon == currentWeapon ) - return true; - } - return false; -} -giveKillstreakWeapon( weapon ) -{ - weaponsList = self GetWeaponsList(); - currentWeapon = self GetCurrentWeapon(); - for( idx = 0; idx < weaponsList.size; idx++ ) - { - carriedWeapon = weaponsList[idx]; - - if ( currentWeapon == carriedWeapon ) - continue; - if( currentWeapon == "none" ) - continue; - - switch( carriedWeapon ) - { - case "minigun_mp": - case "m202_flash_mp": - case "m220_tow_mp": - case "mp40_blinged_mp": - continue; - } - - if ( isKillstreakWeapon(carriedWeapon) ) - { - self TakeWeapon( carriedWeapon ); - } - } - - - - if(currentWeapon != weapon && !self hasWeapon(weapon) ) - { - self TakeWeapon( weapon ); - self GiveWeapon( weapon ); - } - self setActionSlot( 4, "weapon", weapon ); -} -activateNextKillstreak( do_not_update_death_count ) -{ - if ( level.gameEnded ) - return false; - - self setActionSlot( 4, "" ); - if ( !IsDefined( self.pers["killstreaks"] ) || self.pers["killstreaks"].size == 0 ) - return false; - - killstreakType = self.pers["killstreaks"][self.pers["killstreaks"].size - 1]; - if ( !isDefined( level.killstreaks[killstreakType] ) ) - return false; - - weapon = level.killstreaks[killstreakType].weapon; - wait( 0.05 ); - - giveKillstreakWeapon( weapon ); - - - if ( !isdefined( do_not_update_death_count ) || do_not_update_death_count != false ) - { - self.pers["killstreakItemDeathCount"+killstreakType] = self.deathCount; - } - - return true; -} -takeKillstreak( killstreakType ) -{ - if ( level.gameEnded ) - return; - - if ( !isKillStreaksEnabled() ) - return false; - - if ( isDefined( self.selectingLocation ) ) - return false; - if ( !isDefined( level.killstreaks[killstreakType] ) ) - return false; - - self takeWeapon( killstreakType ); - self setActionSlot( 4, "" ); - self.pers["killstreakItemDeathCount"+killstreakType] = 0; - - return true; -} -giveOwnedKillstreak() -{ - if ( isDefined( self.pers["killstreaks"] ) && self.pers["killstreaks"].size > 0 ) - self activateNextKillstreak( false ); -} -changeWeaponAfterKillstreak( killstreak ) -{ - self endon( "disconnect" ); - self endon( "death" ); - currentWeapon = self GetCurrentWeapon(); - - if ( level.killstreaks[ killstreak ].weaponHoldAllowed ) - { - return; - } - self waittill( "killstreak_done" ); - - if ( isDefined( self.lastStand ) && self.lastStand && isDefined( self.laststandpistol ) && self hasWeapon( self.laststandpistol ) ) - self switchToWeapon( self.laststandpistol ); - else if( self hasWeapon(self.lastNonKillstreakWeapon) ) - self switchToWeapon( self.lastNonKillstreakWeapon ); - else if( self hasWeapon(self.lastDroppableWeapon) ) - self switchToWeapon( self.lastDroppableWeapon ); -} -removeKillstreakWhenDone( killstreak, hasKillstreakBeenUsed ) -{ - self endon( "disconnect" ); - - self waittill( "killstreak_done", successful, killstreakType ); - if ( successful ) - { - logString( "killstreak: " + getKillStreakMenuName( killstreak ) ); - - if( !isDefined( hasKillstreakBeenUsed ) || !hasKillstreakBeenUsed ) - { - self thread maps\mp\gametypes\_missions::useKillstreak( killstreak ); - } - - killstreak_weapon = getKillstreakWeapon( killstreak ); - - removeUsedKillstreak(killstreak); - self setActionSlot( 4, "" ); - success = true; - } - waittillframeend; - - currentWeapon = self GetCurrentWeapon(); - if( maps\mp\gametypes\_killstreak_weapons::isHeldKillstreakWeapon(killstreakType) && currentWeapon == killstreakType ) - return; - activateNextKillstreak( ); -} -useKillstreak( ) -{ - killstreak = getTopKillstreak(); - hasKillstreakBeenUsed = getIfTopKillstreakHasBeenUsed(); - - if ( isDefined( self.selectingLocation ) ) - return; - self thread changeWeaponAfterKillstreak( killstreak ); - self thread removeKillstreakWhenDone( killstreak, hasKillstreakBeenUsed ); - self thread triggerKillstreak( killstreak ); -} -removeUsedKillstreak( killstreak, killstreakId ) -{ - - - - - killstreakIndex = undefined; - for ( i = self.pers["killstreaks"].size - 1; i >= 0; i-- ) - { - if ( self.pers["killstreaks"][i] == killstreak ) - { - if( isDefined( killstreakId ) && self.pers["killstreak_unique_id"][i] != killstreakId ) - continue; - - killstreakIndex = i; - break; - } - } - - if ( !IsDefined(killstreakIndex) ) - return; - - arraySize = self.pers["killstreaks"].size; - for ( i = killstreakIndex; i < arraySize - 1; i++ ) - { - self.pers["killstreaks"][i] = self.pers["killstreaks"][i + 1]; - self.pers["killstreak_has_been_used"][i] = self.pers["killstreak_has_been_used"][i + 1]; - self.pers["killstreak_unique_id"][i] = self.pers["killstreak_unique_id"][i + 1]; - } - - self.pers["killstreaks"][arraySize-1] = undefined; - self.pers["killstreak_has_been_used"][arraySize-1] = undefined; - self.pers["killstreak_unique_id"][arraySize-1] = undefined; -} -getTopKillstreak() -{ - if ( self.pers["killstreaks"].size == 0 ) - return undefined; - - return self.pers["killstreaks"][self.pers["killstreaks"].size-1]; -} -getIfTopKillstreakHasBeenUsed() -{ - if ( self.pers["killstreak_has_been_used"].size == 0 ) - return undefined; - - return self.pers["killstreak_has_been_used"][self.pers["killstreak_has_been_used"].size-1]; -} -getTopKillstreakUniqueId() -{ - if ( self.pers["killstreak_unique_id"].size == 0 ) - return undefined; - - return self.pers["killstreak_unique_id"][self.pers["killstreak_unique_id"].size-1]; -} -getKillstreakWeapon( killstreak ) -{ - if( !IsDefined( killstreak ) ) - return "none"; - Assert( IsDefined(level.killstreaks[killstreak]) ); - - return level.killstreaks[killstreak].weapon; -} -getKillstreakForWeapon( weapon ) -{ - return level.killstreakWeapons[weapon]; -} -isKillstreakWeapon( weapon ) -{ - if ( isWeaponAssociatedWithKillstreak( weapon ) ) - return true; - switch( weapon ) - { - case "none": - case "briefcase_bomb_defuse_mp": - case "briefcase_bomb_mp": - case "scavenger_item_mp": - case "syrette_mp": - case "tabun_fx_mp": - case "tabun_center_mp": - case "tabun_large_mp": - case "tabun_medium_mp": - case "tabun_small_mp": - case "tabun_tiny_mp": - return false; - } - - specificUse = IsWeaponSpecificUse( weapon ); - if ( isdefined( specificUse ) && specificUse == true ) - return true; - - return false; -} -isKillstreakWeaponAssistAllowed( weapon ) -{ - killstreak = getKillstreakForWeapon( weapon ); - if ( !IsDefined( killstreak ) ) - return false; - - if ( level.killstreaks[killstreak].allowAssists ) - return true; - - return false; -} -trackWeaponUsage() -{ - self endon( "death" ); - self endon( "disconnect" ); - self.lastNonKillstreakWeapon = self GetCurrentWeapon(); - lastValidPimary = self GetCurrentWeapon(); - if ( self.lastNonKillstreakWeapon == "none" ) - { - weapons = self GetWeaponsListPrimaries(); - Assert( weapons.size > 0 ); - if ( weapons.size > 0 ) - self.lastNonKillstreakWeapon = weapons[0]; - } - Assert( self.lastNonKillstreakWeapon != "none" ); - - for ( ;; ) - { - currentWeapon = self GetCurrentWeapon(); - self waittill( "weapon_change", weapon ); - if ( maps\mp\gametypes\_weapons::isPrimaryWeapon( weapon ) ) - lastValidPimary = weapon; - if ( weapon == self.lastNonKillstreakWeapon ) - { - continue; - } - switch( weapon ) - { - case "none": - case "knife_mp": - case "syrette_mp": - continue; - } - name = getKillstreakForWeapon( weapon ); - if ( IsDefined( name ) ) - { - killstreak = level.killstreaks[ name ]; - if ( killstreak.weaponHoldAllowed == true ) - { - self.lastNonKillstreakWeapon = weapon; - } - continue; - } - if( currentWeapon != "none" && IsWeaponEquipment( currentWeapon ) && maps\mp\gametypes\_killstreak_weapons::isHeldKillstreakWeapon( self.lastNonKillstreakWeapon ) ) - { - self.lastNonKillstreakWeapon = lastValidPimary; - continue; - } - if ( IsWeaponEquipment( weapon ) ) - { - continue; - } - self.lastNonKillstreakWeapon = weapon; - } -} -killstreakWaiter() -{ - self endon ( "death" ); - self endon ( "disconnect" ); - level endon ( "game_ended" ); - - self thread trackWeaponUsage(); - - self giveOwnedKillstreak(); - - for ( ;; ) - { - self waittill( "weapon_change", weapon ); - - if( !isKillstreakWeapon( weapon ) ) - continue; - killstreak = getTopKillstreak(); - if( weapon != getKillstreakWeapon(killstreak) ) - continue; - waittillframeend; - if( isDefined( self.usingKillstreakHeldWeapon ) && maps\mp\gametypes\_killstreak_weapons::isHeldKillstreakWeapon(killstreak) ) - continue; - - thread useKillstreak(); - if ( IsDefined( self.selectingLocation ) ) - { - event = self waittill_any_return( "cancel_location", "game_ended", "used", "weapon_change" ); - if ( event == "cancel_location" || event == "weapon_change" ) - { - - wait( 1 ); - } - } - } -} -shouldDelayKillstreak( killstreakType ) -{ - if( !isDefined(level.startTime) ) - return false; - if( level.killstreakRoundDelay < ( ( ( gettime() - level.startTime ) - level.discardTime ) / 1000 ) ) - return false; - if( !isDelayableKillstreak(killstreakType) ) - return false; - if( maps\mp\gametypes\_killstreak_weapons::isHeldKillstreakWeapon(killstreakType) ) - return false; - return true; -} -isDelayableKillstreak( killstreakType ) -{ - if( isDefined( level.killstreaks[killstreakType] ) && isDefined( level.killstreaks[killstreakType].delayStreak ) && level.killstreaks[killstreakType].delayStreak ) - return true; - return false; -} -getXPAmountForKillstreak( killstreakType ) -{ - xpAmount = 0; - switch( level.killstreaks[killstreakType].killstreakLevel ) - { - case 1: - case 2: - case 3: - case 4: - xpAmount = 100; - break; - case 5: - xpAmount = 150; - break; - case 6: - case 7: - xpAmount = 200; - break; - case 8: - xpAmount = 250; - break; - case 9: - xpAmount = 300; - break; - case 10: - case 11: - xpAmount = 350; - break; - case 12: - case 13: - case 14: - case 15: - xpAmount = 500; - break; - } - return xpAmount; -} -triggerKillstreak( killstreakType ) -{ - AssertEx( IsDefined(level.killstreaks[killstreakType].useFunction), "No use function defined for killstreak " + killstreakType); - - if( shouldDelayKillstreak( killstreakType ) ) - { - timeLeft = Int( level.killstreakRoundDelay - (maps\mp\gametypes\_globallogic_utils::getTimePassed() / 1000) ); - - if( !timeLeft ) - timeLeft = 1; - self iPrintLnBold( &"MP_UNAVAILABLE_FOR_N", " " + timeLeft + " ", &"EXE_SECONDS" ); - } - else if ( [[level.killstreaks[killstreakType].useFunction]](killstreakType) ) - { - - if ( isdefined( level.killstreaks[killstreakType].killstreakLevel ) ) - { - xpAmount = getXPAmountForKillstreak( killstreakType ); - - - if ( xpAmount > 0 && killstreakType != "rcbomb_mp" ) - self thread maps\mp\gametypes\_rank::giveRankXP( "medal", xpAmount ); - self maps\mp\gametypes\_gametype_variants::onPlayerKillstreakActivated(); - } - - if ( IsDefined( self ) ) - { - bbPrint( "mpkillstreakuses: gametime %d spawnid %d name %s", getTime(), getplayerspawnid( self ), killstreakType ); - if ( !IsDefined( self.pers[level.killstreaks[killstreakType].usageKey] ) ) - { - self.pers[level.killstreaks[killstreakType].usageKey] = 0; - } - - self.pers[level.killstreaks[killstreakType].usageKey]++; - self notify( "killstreak_used", killstreakType ); - self notify( "killstreak_done", true, killstreakType ); - } - return true; - } - - if ( IsDefined( self ) ) - self notify( "killstreak_done", false, killstreakType ); - return false; -} -addToKillstreakCount( weapon ) -{ - if ( !isdefined( self.pers["totalKillstreakCount"] ) ) - self.pers["totalKillstreakCount"] = 0; - - self.pers["totalKillstreakCount"]++; -} -isWeaponAssociatedWithKillstreak( weapon ) -{ - return IsDefined( level.killstreakWeapons[weapon] ); -} -getFirstValidKillstreakAltWeapon( killstreakType ) -{ - AssertEx( IsDefined(level.killstreaks[killstreakType]), "Killstreak not registered."); - if( isDefined( level.killstreaks[killstreakType].altWeapons ) ) - { - for( i = 0; i < level.killstreaks[killstreakType].altWeapons.size; i++ ) - { - if( isDefined( level.killstreaks[killstreakType].altWeapons[i] ) ) - return level.killstreaks[killstreakType].altWeapons[i]; - } - } - - return "none"; -} -shouldGiveKillstreak( weapon ) -{ - killstreakBuilding = GetDvarInt( #"scr_allow_killstreak_building" ); - - if ( killstreakBuilding == 0 ) - { - if ( isWeaponAssociatedWithKillstreak(weapon) ) - return false; - } - - return true; -} -pointIsInDangerArea( point, targetpos, radius ) -{ - return distance2d( point, targetpos ) <= radius * 1.25; -} -printKillstreakStartText( killstreakType, owner, team, targetpos, dangerRadius ) -{ - if ( !IsDefined( level.killstreaks[killstreakType] ) ) - { - return; - } - - if ( level.teambased ) - { - players = level.players; - if ( !level.hardcoreMode && IsDefined(level.killstreaks[killstreakType].inboundNearPlayerText)) - { - for(i = 0; i < players.size; i++) - { - if(isalive(players[i]) && (isdefined(players[i].pers["team"])) && (players[i].pers["team"] == team)) - { - if ( pointIsInDangerArea( players[i].origin, targetpos, dangerRadius ) ) - players[i] iprintlnbold(level.killstreaks[killstreakType].inboundNearPlayerText); - } - } - } - - if ( IsDefined(level.killstreaks[killstreakType]) ) - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - playerteam = player.pers["team"]; - if ( isdefined( playerteam ) ) - { - if ( playerteam == team ) - player iprintln( level.killstreaks[killstreakType].inboundText, owner ); - } - } - } - } - else - { - if ( !level.hardcoreMode && IsDefined(level.killstreaks[killstreakType].inboundNearPlayerText) ) - { - if ( pointIsInDangerArea( owner.origin, targetpos, dangerRadius ) ) - owner iprintlnbold(level.killstreaks[killstreakType].inboundNearPlayerText); - } - } -} -playKillstreakStartDialog( killstreakType, team, playNonTeamBasedEnemySounds ) -{ - if ( !IsDefined( level.killstreaks[killstreakType] ) ) - { - return; - } - - - if ( killstreakType == "radar_mp" && level.teambased ) - { - if( getTime() - level.radarTimers[team] > 30000 ) - { - maps\mp\gametypes\_globallogic_audio::leaderDialog( killstreakType + "_start", team ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( killstreakType + "_enemy_start", level.otherTeam[team] ); - level.radarTimers[team] = getTime(); - } - else - { - self maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( killstreakType + "_start", team ); - } - return; - } - - if ( level.teambased ) - { - maps\mp\gametypes\_globallogic_audio::leaderDialog( killstreakType + "_start", team ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( killstreakType + "_enemy_start", level.otherTeam[team] ); - } - else - { - self maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( killstreakType + "_start" ); - - { - selfarray = []; - selfarray[0] = self; - maps\mp\gametypes\_globallogic_audio::leaderDialog( killstreakType + "_enemy_start", undefined, undefined, selfarray ); - } - } -} -playKillstreakReadyDialog( killstreakType ) -{ - self maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( killstreakType ); -} -playKillstreakReadyAndInformDialog( killstreakType ) -{ - self maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( killstreakType ); - if ( IsDefined( level.killstreaks[killstreakType].informDialog ) ) - self playLocalSound( level.killstreaks[killstreakType].informDialog ); -} -playKillstreakEndDialog( killstreakType, team ) -{ - if ( !IsDefined( level.killstreaks[killstreakType] ) ) - { - return; - } - - if ( level.teambased ) - { - maps\mp\gametypes\_globallogic_audio::leaderDialog( killstreakType + "_end", team ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( killstreakType + "_enemy_end", level.otherTeam[team] ); - } - else - { - self maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( killstreakType + "_end" ); - } -} -getKillstreakUsageByKillstreak(killstreakType) -{ - AssertEx( IsDefined(level.killstreaks[killstreakType]), "Killstreak needs to be registered before calling getKillstreakUsage."); - - return getKillstreakUsage( level.killstreaks[killstreakType].usageKey ); -} -getKillstreakUsage(usageKey) -{ - if ( !IsDefined( self.pers[usageKey] ) ) - { - return 0; - } - - return self.pers[usageKey]; -} -onPlayerConnect() -{ - for(;;) - { - level waittill("connecting", player); - player thread onPlayerSpawned(); - player thread onJoinedTeam(); - } -} -onPlayerSpawned() -{ - self endon("disconnect"); - for(;;) - { - self waittill("spawned_player"); - pixbeginevent("_hardpoints.gsc/onPlayerSpawned"); - - giveOwnedKillstreak(); - - self thread watchNotifyKSMessage(); - - if ( !IsDefined( self.pers["killstreaks"] ) ) - self.pers["killstreaks"] = []; - if ( !IsDefined( self.pers["killstreak_has_been_used"] ) ) - self.pers["killstreak_has_been_used"] = []; - if ( !IsDefined( self.pers["killstreak_unique_id"] ) ) - self.pers["killstreak_unique_id"] = []; - size = self.pers["killstreaks"].size; - if ( size > 0 ) - playKillstreakReadyDialog( self.pers["killstreaks"][size - 1] ); - - pixendevent(); - } -} -onJoinedTeam() -{ - self endon("disconnect"); - - for(;;) - { - self waittill("joined_team"); - self.pers["cur_kill_streak"] = 0; - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaks"] = []; - self.pers["killstreak_has_been_used"] = []; - self.pers["killstreak_unique_id"] = []; - } -} - - -watchNotifyKSMessage() -{ - self endon("disconnect"); - self endon("death"); - - for (lastKs = self.pers["cur_kill_streak"];;) - { - self waittill( "new_killstreak_count" ); - - for (curStreak = lastKs + 1; curStreak <= self.pers["cur_kill_streak"]; curStreak++) - { - //if (curStreak == 5) - // continue; - - if (curStreak % 5 != 0) - continue; - - self thread streakNotify2(curStreak); - } - - lastKs = self.pers["cur_kill_streak"]; - } -} - -streakNotify2( streakVal ) -{ - self endon( "disconnect" ); - - notifyData = spawnStruct(); - - xpReward = streakVal * 100; - - self thread maps\mp\gametypes\_rank::giveRankXP( "killstreak_bonus", xpReward ); - - notifyData.notifyText = "+" + xpReward; - - wait .05; - - notifyData.titleLabel = &"MP_KILLSTREAK_N"; - notifyData.titleText = streakVal; - - self maps\mp\gametypes\_hud_message::notifyMessage( notifyData ); - - iprintln( &"RANK_KILL_STREAK_N", self, streakVal ); -} - - diff --git a/main_shared/maps/mp/bots/_bot_loadout.gsc b/maps/mp/bots/_bot_loadout.gsc similarity index 100% rename from main_shared/maps/mp/bots/_bot_loadout.gsc rename to maps/mp/bots/_bot_loadout.gsc diff --git a/main_shared/maps/mp/bots/_bot_script.gsc b/maps/mp/bots/_bot_script.gsc similarity index 100% rename from main_shared/maps/mp/bots/_bot_script.gsc rename to maps/mp/bots/_bot_script.gsc diff --git a/main_shared/maps/mp/bots/_bot_utility.gsc b/maps/mp/bots/_bot_utility.gsc similarity index 100% rename from main_shared/maps/mp/bots/_bot_utility.gsc rename to maps/mp/bots/_bot_utility.gsc diff --git a/main_shared/maps/mp/gametypes/_bot.gsc b/maps/mp/gametypes/_bot.gsc similarity index 92% rename from main_shared/maps/mp/gametypes/_bot.gsc rename to maps/mp/gametypes/_bot.gsc index 2901d37..2902107 100644 --- a/main_shared/maps/mp/gametypes/_bot.gsc +++ b/maps/mp/gametypes/_bot.gsc @@ -228,11 +228,11 @@ watchBotDebugEvent() if ( isDefined( g ) && isString( g ) ) big_str += ": " + g; - Print( big_str ); + Println( big_str ); } else if ( msg == "debug" && GetDvarInt( "bots_main_debug" ) ) { - Print( "Bot Warfare debug: " + self.name + ": " + str ); + Println( "Bot Warfare debug: " + self.name + ": " + str ); } } } @@ -715,33 +715,6 @@ addBots_loop() /* A server thread for monitoring all bot's in game. Will add and kick bots according to server settings. - - Dedis only spawn bots when developer is not 0 - This makes the dedi unstable and can crash - - Patch the executable to skip the pregame and make it so bots can spawn - - pregame: - in the ShouldDoPregame sub: - B8 01 00 00 00: mov eax, 1 - change to: B8 00 00 00 00: mov eax, 0 - 0x4F6C77 in rektmp - 0x4598A7 in bg - - - spawnbots: - in the SV_AddTestClient sub: - 0F 85 A4 00 00 00: jnz - change to: 0F 84 A4 00 00 00: jz - 0x6B6180 in rektmp - 0x4682F0 in bg - - - allow changing g_antilag dvar: - set the byte from 0x40 to 0x00 - - 0x53B1B2 in rekt - 0x59B6F2 in bg */ addBots() { diff --git a/mods/mp_bots/mod.csv b/mod.csv similarity index 52% rename from mods/mp_bots/mod.csv rename to mod.csv index 9388e58..89c190a 100644 --- a/mods/mp_bots/mod.csv +++ b/mod.csv @@ -3,3 +3,7 @@ menufile,ui_mp/playercards.menu stringtable,mp/gametypesTable.csv menufile,ui_mp/custom_game_create.menu menufile,ui_mp/pc_basictraining.menu +rawfile,maps/mp/gametypes/_bot.gsc +rawfile,maps/mp/bots/_bot_utility.gsc +rawfile,maps/mp/bots/_bot_loadout.gsc +rawfile,maps/mp/bots/_bot_script.gsc diff --git a/mods/mp_bots/maps/mp/bots/_bot_loadout.gsc b/mods/mp_bots/maps/mp/bots/_bot_loadout.gsc deleted file mode 100644 index 30fe162..0000000 --- a/mods/mp_bots/maps/mp/bots/_bot_loadout.gsc +++ /dev/null @@ -1,1294 +0,0 @@ -/* - _bot_loadout - Author: INeedGames - Date: 12/20/2020 - Loadout stuff -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\bots\_bot_utility; - -/* - Gives the bot loadout -*/ -bot_give_loadout() -{ - self bot_giveKillstreaks(); - - self clearPerks(); - - self SetPlayerRenderOptions( int( self.pers["bot"]["class_render_opts"] ) ); - - if (!isDefined(self.bot)) - self.bot = []; - - self.bot[ "specialty1" ] = "specialty_null"; - self.bot[ "specialty2" ] = "specialty_null"; - self.bot[ "specialty3" ] = "specialty_null"; - - if (self.pers["bot"]["class_perk1"] != "" && GetDvarInt( #"scr_game_perks" ) ) - { - self.bot[ "specialty1" ] = self.pers["bot"]["class_perk1"]; - - id = bot_perk_from_reference_full(self.pers["bot"]["class_perk1"]); - tokens = strtok(id["reference"], "|"); - - for (i = 0; i < tokens.size; i++) - self setPerk(tokens[i]); - } - - switch( self.pers["bot"]["class_perk1"] ) - { - case "perk_ghost": - case "perk_ghost_pro": - self.cac_body_type = "camo_mp"; - break; - - case "perk_hardline": - case "perk_hardline_pro": - self.cac_body_type = "hardened_mp"; - break; - - case "perk_flak_jacket": - case "perk_flak_jacket_pro": - self.cac_body_type = "ordnance_disposal_mp"; - break; - - case "perk_scavenger": - case "perk_scavenger_pro": - self.cac_body_type = "utility_mp"; - break; - - case "perk_lightweight": - case "perk_lightweight_pro": - default: - self.cac_body_type = "standard_mp"; - break; - } - - self.cac_head_type = self maps\mp\gametypes\_armor::get_default_head(); - self.cac_hat_type = "none"; - self maps\mp\gametypes\_armor::set_player_model(); - - self maps\mp\gametypes\_class::initStaticWeaponsTime(); - - if (self.pers["bot"]["class_perk2"] != "" && GetDvarInt( #"scr_game_perks" )) - { - self.bot[ "specialty2" ] = self.pers["bot"]["class_perk2"]; - - id = bot_perk_from_reference_full(self.pers["bot"]["class_perk2"]); - tokens = strtok(id["reference"], "|"); - - for (i = 0; i < tokens.size; i++) - self setPerk(tokens[i]); - } - - if (self.pers["bot"]["class_perk3"] != "" && GetDvarInt( #"scr_game_perks" )) - { - self.bot[ "specialty3" ] = self.pers["bot"]["class_perk3"]; - - id = bot_perk_from_reference_full(self.pers["bot"]["class_perk3"]); - tokens = strtok(id["reference"], "|"); - - for (i = 0; i < tokens.size; i++) - self setPerk(tokens[i]); - } - - - self takeAllWeapons(); - if (getDvarInt("bots_play_knife")) - self GiveWeapon( "knife_mp" ); - - weap = self.pers["bot"]["class_primary"]; - if(weap == "") - weap = "ak47_mp"; - - primaryTokens = strtok( self.pers["bot"]["class_primary"], "_" ); - self.pers["primaryWeapon"] = primaryTokens[0]; - - weap = self.pers["bot"]["class_primary"]; - if(GetDvarInt( #"scr_disable_attachments" )) - weap = self.pers["primaryWeapon"] + "_mp"; - - self GiveWeapon( weap, 0, int( self.pers["bot"]["class_primary_opts"] ) ); - - if ( self hasPerk( "specialty_extraammo" ) ) - self giveMaxAmmo( weap ); - - if (!getDVarint("bots_play_fire")) - { - self SetWeaponAmmoClip(weap, 0); - self SetWeaponAmmoStock(weap, 0); - } - - if(self.pers["bot"]["class_secondary"] != "") - { - self GiveWeapon( self.pers["bot"]["class_secondary"], 0, int( self.pers["bot"]["class_secondary_opts"] ) ); - if ( self hasPerk( "specialty_extraammo" ) ) - self giveMaxAmmo( self.pers["bot"]["class_secondary"] ); - - if (!getDVarint("bots_play_fire")) - { - self SetWeaponAmmoClip(self.pers["bot"]["class_secondary"], 0); - self SetWeaponAmmoStock(self.pers["bot"]["class_secondary"], 0); - } - } - - self SetActionSlot( 3, "altMode" ); - self SetActionSlot( 4, "" ); - - if(self.pers["bot"]["class_equipment"] != "" && self.pers["bot"]["class_equipment"] != "weapon_null_mp" && !GetDvarInt( #"scr_disable_equipment" )) - { - self GiveWeapon( self.pers["bot"]["class_equipment"] ); - - self maps\mp\gametypes\_class::setWeaponAmmoOverall( self.pers["bot"]["class_equipment"], 1 ); - - self SetActionSlot( 1, "weapon", self.pers["bot"]["class_equipment"] ); - } - - if(self.pers["bot"]["class_lethal"] != "") - { - self GiveWeapon( self.pers["bot"]["class_lethal"] ); - - if(self hasPerk("specialty_twogrenades")) - self SetWeaponAmmoClip( self.pers["bot"]["class_lethal"], 2 ); - else - self SetWeaponAmmoClip( self.pers["bot"]["class_lethal"], 1 ); - - self SwitchToOffhand( self.pers["bot"]["class_lethal"] ); - } - - if(self.pers["bot"]["class_tacticle"] != "") - { - self giveWeapon( self.pers["bot"]["class_tacticle"] ); - - if(self.pers["bot"]["class_tacticle"] == "willy_pete_mp") - self SetWeaponAmmoClip( self.pers["bot"]["class_tacticle"], 1 ); - else if(self hasPerk("specialty_twogrenades")) - self SetWeaponAmmoClip( self.pers["bot"]["class_tacticle"], 3 ); - else - self SetWeaponAmmoClip( self.pers["bot"]["class_tacticle"], 2 ); - - self setOffhandSecondaryClass( self.pers["bot"]["class_tacticle"] ); - } - - self thread fixSecondarySwitch(weap); -} - -/* - Fixes the weapon on spawn for the bot -*/ -fixSecondarySwitch(weap) -{ - self endon("death"); - self endon("disconnect"); - self switchToWeapon(weap); - self setSpawnWeapon(weap); - wait 0.05; - self switchToWeapon(weap); - self setSpawnWeapon(weap); -} - -/* - Gets the prestige -*/ -bot_get_prestige() -{ - p_dvar = getDvarInt("bots_loadout_prestige"); - p = 0; - - if (p_dvar == -1) - { - for (i = 0; i < level.players.size; i++) - { - player = level.players[i]; - - if (!isDefined(player.team)) - continue; - - if (player is_bot()) - continue; - - p = player maps\mp\gametypes\_persistence::statGet( "plevel" ); - break; - } - } - else if (p_dvar == -2) - { - p = randomInt(17); - } - else - { - p = p_dvar; - } - - self.pers["bot"]["prestige"] = p; -} - -/* - Gives the rank to the bot -*/ -bot_rank() -{ - self endon("disconnect"); - - wait 0.05; - - self.pers["rankxp"] = self.pers["bot"]["rankxp"]; - rankId = self maps\mp\gametypes\_rank::getRankForXp( self.pers["bot"]["rankxp"] ); - prestige = self.pers["bot"]["prestige"]; - - self.pers["rank"] = rankId; - self.pers["prestige"] = prestige; - self.pers["plevel"] = prestige; - self setRank( rankId, prestige ); - - if(!level.gameEnded) - level waittill("game_ended"); - - self.pers["bot"]["rankxp"] = self.pers["rankxp"]; -} - -/* - Set the bot's class -*/ -bot_set_class() -{ - self.pers["bot"]["class_render_opts"] = 0; - - self.pers["bot"]["class_primary"] = ""; - self.pers["bot"]["class_primary_opts"] = 0; - self.pers["bot"]["class_secondary"] = ""; - self.pers["bot"]["class_secondary_opts"] = 0; - - self.pers["bot"]["class_lethal"] = ""; - self.pers["bot"]["class_tacticle"] = ""; - self.pers["bot"]["class_equipment"] = ""; - - self.pers["bot"]["class_perk1"] = ""; - self.pers["bot"]["class_perk2"] = ""; - self.pers["bot"]["class_perk3"] = ""; - - self.pers["bot"][ "cod_points" ] = self.pers["bot"][ "cod_points_org" ];//refund prev payments for class - - rank = self maps\mp\gametypes\_rank::getRankForXp( self.pers["bot"]["rankxp"] ); - - if ( !level.onlineGame ) - { - rank = level.maxRank; - } - - if (rank < 3 || (randomint(100) < 3 && !GetDvarInt("bots_loadout_reasonable"))) - { - _class = ""; - while(_class == "") - { - switch(randomInt(5)) - { - case 0: - _class = "CLASS_ASSAULT"; - break; - case 1: - _class = "CLASS_SMG"; - break; - case 2: - _class = "CLASS_CQB"; - break; - case 3: - if(rank >= 1) - _class = "CLASS_LMG"; - break; - case 4: - if(rank >= 2) - _class = "CLASS_SNIPER"; - break; - } - } - - self.pers["bot"]["class_primary"] = level.classWeapons["axis"][_class][0]; - self.pers["bot"]["class_secondary"] = level.classSidearm["axis"][_class]; - self.pers["bot"]["class_perk1"] = level.default_perkIcon[_class][ 0 ]; - self.pers["bot"]["class_perk2"] = level.default_perkIcon[_class][ 1 ]; - self.pers["bot"]["class_perk3"] = level.default_perkIcon[_class][ 2 ]; - self.pers["bot"]["class_equipment"] = level.default_equipment[ _class ][ "type" ]; - self.pers["bot"]["class_lethal"] = level.classGrenades[_class]["primary"]["type"]; - self.pers["bot"]["class_tacticle"] = level.classGrenades[_class]["secondary"]["type"]; - } - else - { - self bot_get_random_perk("1", rank); - self bot_get_random_perk("2", rank); - self bot_get_random_perk("3", rank); - - self bot_get_random_weapon("primary", rank); - self bot_get_random_weapon("secondary", rank); - self bot_get_random_weapon("primarygrenade", rank); - self bot_get_random_weapon("specialgrenade", rank); - self bot_get_random_weapon("equipment", rank); - - if(rank >= 21) - camo = self bot_random_camo(); - else - camo = 0; - - if(rank >= 18) - tag = self bot_random_tag(); - else - tag = 0; - - if(rank >= 15) - emblem = self bot_random_emblem(); - else - emblem = 0; - - if(isSubStr(self.pers["bot"]["class_primary"], "_elbit_") || isSubStr(self.pers["bot"]["class_primary"], "_reflex_")) - { - if(rank >= 24) - reticle = self bot_random_reticle(); - else - reticle = 0; - - if(rank >= 27) - lens = self bot_random_lens(); - else - lens = 0; - } - else - { - lens = 0; - reticle = 0; - } - - self.pers["bot"]["class_primary_opts"] = self calcWeaponOptions( camo, lens, reticle, tag, emblem ); - - if(rank >= 30) - face = self bot_random_face(); - else - face = 0; - - self.pers["bot"]["class_render_opts"] = self calcPlayerOptions( face, 0 ); - } - - if(!GetDvarInt("bots_loadout_allow_op") && isSubStr(self.pers["bot"]["class_perk3"], "perk_second_chance")) - self.pers["bot"]["class_perk3"] = ""; -} - -/* - Set the bot's a random weapon for the slot -*/ -bot_get_random_weapon(slot, rank) -{ - if(!isDefined(level.bot_weapon_ids)) - level.bot_weapon_ids = []; - - if ( !IsDefined( level.bot_weapon_ids[ slot ] ) ) - { - level.bot_weapon_ids[ slot ] = []; - - keys = GetArrayKeys( level.tbl_weaponIDs ); - - for ( i = 0; i < keys.size; i++ ) - { - key = keys[i]; - id = level.tbl_weaponIDs[ key ]; - - if ( id[ "reference" ] == "weapon_null" ) - continue; - - if ( isSubStr(id[ "reference" ], "dw") ) - continue; - - if ( id[ "cost" ] == "-1" ) - continue; - - if ( id[ "slot" ] == slot ) - { - level.bot_weapon_ids[ slot ][ level.bot_weapon_ids[ slot ].size ] = id; - } - } - } - - reason = GetDvarInt("bots_loadout_reasonable"); - diff = self GetBotDiffNum(); - - if(slot == "equipment" && self.pers["bot"]["cod_points"] < 2000) - return; - - for(;;) - { - id = PickRandom( level.bot_weapon_ids[ slot ] ); - if (!isDefined(id)) - return; - - if(!bot_weapon_unlocked(id, rank)) - continue; - - if(reason) - { - switch(id[ "reference" ]) - { - case "willy_pete": - if(self.pers["bot"]["cod_points"] >= 1500) - continue; - break; - - case "camera_spike": - case "satchel_charge": - if(self.pers["bot"]["cod_points"] >= 2500) - continue; - break; - - case "nightingale": - case "tabun_gas": - case "rottweil72": - case "hs10": - case "dragunov": - case "wa2000": - case "hk21": - case "rpk": - case "m14": - case "fnfal": - case "uzi": - case "skorpion": - case "pm63": - case "kiparis": - case "mac11": - case "ithaca": - continue; - } - } - - if ( id[ "reference" ] == "hatchet" && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "willy_pete" && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "nightingale" && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "claymore" && diff <= 0 && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "scrambler" && diff <= 0 && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "camera_spike" && self IsSplitScreen() ) - continue; - - if ( id[ "reference" ] == level.tacticalInsertionWeapon && level.disable_tacinsert ) - continue; - - cost = bot_weapon_cost(id); - if(cost > 0 && self.pers["bot"]["cod_points"] < cost) - continue; - - self.pers["bot"]["cod_points"] = self.pers["bot"]["cod_points"] - cost; - - maxAttachs = 1; - if(isSubStr(self.pers["bot"]["class_perk2"], "perk_professional") && slot == "primary") - maxAttachs = 2; - - if(RandomFloatRange( 0, 1 ) < (( rank / level.maxRank ) + 0.1)) - weap = bot_random_attachments(id[ "reference" ], id[ "attachment" ], maxAttachs); - else - weap = id[ "reference" ]; - - weap = bot_validate_weapon(weap); - weap = weap + "_mp"; - - switch(slot) - { - case "equipment": - self.pers["bot"]["class_equipment"] = weap; - break; - case "primary": - self.pers["bot"]["class_primary"] = weap; - break; - case "secondary": - self.pers["bot"]["class_secondary"] = weap; - break; - case "primarygrenade": - self.pers["bot"]["class_lethal"] = weap; - break; - case "specialgrenade": - self.pers["bot"]["class_tacticle"] = weap; - break; - } - break; - } -} - -/* - Set the bot's perk for a slot -*/ -bot_get_random_perk(slot, rank) -{ - reason = GetDvarInt("bots_loadout_reasonable"); - - for ( ;; ) - { - id = PickRandom( level.allowedPerks[0] ); - if (!isDefined(id)) - return; - - id = level.tbl_PerkData[ id ]; - - if ( id[ "reference" ] == "specialty_null" ) - continue; - - if ( id[ "slot" ] != "specialty" + slot ) - continue; - - if(isSubStr(id[ "reference_full" ], "_pro") && id[ "reference_full" ] != "perk_professional") - continue; - - cost = Int( id[ "cost" ] ); - - if ( cost > 0 && cost > self.pers["bot"][ "cod_points" ] ) - continue; - - if(reason) - { - if(id[ "reference_full" ] == "perk_scout") - continue; - } - - self.pers["bot"][ "cod_points" ] = self.pers["bot"][ "cod_points" ] - cost; - self.pers["bot"]["class_perk" + slot] = id[ "reference_full" ]; - break; - } - - id = bot_perk_from_reference_full(self.pers["bot"]["class_perk" + slot]+"_pro"); - cost = Int( id[ "cost" ] ); - - if ( Int( cost ) <= self.pers["bot"][ "cod_points" ] && RandomFloatRange( 0, 1 ) < (( rank / level.maxRank ) + 0.1) ) - { - self.pers["bot"][ "cod_points" ] = self.pers["bot"][ "cod_points" ] - cost; - self.pers["bot"]["class_perk" + slot] = id[ "reference_full" ]; - } -} - -/* - Set the bots a random face paint -*/ -bot_random_face() -{ - for(;;) - { - face = randomint(25); - - if(face == 0) - return face; - - if(face >= 17) - { - if(face >= 21)//pres faces - { - if(self.pers["bot"][ "cod_points" ] < 500) - continue; - - self.pers["bot"][ "cod_points" ] -= 500; - - return face; - } - - if(face == 17) - { - if(self.pers["bot"][ "cod_points" ] < 1500) - continue; - - self.pers["bot"][ "cod_points" ] -= 1500; - - return face; - } - - if(face == 18) - { - if(self.pers["bot"][ "cod_points" ] < 3500) - continue; - - self.pers["bot"][ "cod_points" ] -= 3500; - - return face; - } - - if(face == 19) - { - if(self.pers["bot"][ "cod_points" ] < 5500) - continue; - - self.pers["bot"][ "cod_points" ] -= 5500; - - return face; - } - - if(self.pers["bot"][ "cod_points" ] < 7500) - continue; - - self.pers["bot"][ "cod_points" ] -= 7500; - - return face; - } - - if(self.pers["bot"][ "cod_points" ] < 500) - continue; - - self.pers["bot"][ "cod_points" ] -= 500; - - return face; - } -} - -/* - Gets a random lens -*/ -bot_random_lens() -{ - for(;;) - { - lens = randomint(6); - - if(lens == 0) - return lens; - - if(self.pers["bot"][ "cod_points" ] < 500) - continue; - - self.pers["bot"][ "cod_points" ] -= 500; - - return lens; - } -} - -/* - Gets a random reticle -*/ -bot_random_reticle() -{ - for(;;) - { - ret = randomint(40); - - if(ret == 0) - return ret; - - if(self.pers["bot"][ "cod_points" ] < 500) - continue; - - self.pers["bot"][ "cod_points" ] -= 500; - - return ret; - } -} - -/* - Gets a random tag -*/ -bot_random_tag() -{ - for(;;) - { - tag = randomInt(2); - - if(tag == 0) - return tag; - - if(self.pers["bot"][ "cod_points" ] < 1000) - continue; - - self.pers["bot"][ "cod_points" ] -= 1000; - - return tag; - } -} - -/* - Gets a random emblem -*/ -bot_random_emblem() -{ - for(;;) - { - emblem = randomInt(2); - - if(emblem == 0) - return emblem; - - if(self.pers["bot"][ "cod_points" ] < 1000) - continue; - - self.pers["bot"][ "cod_points" ] -= 1000; - - return emblem; - } -} - -/* - Gets a random camo -*/ -bot_random_camo() -{ - for(;;) - { - camo = randomInt(16); - - if(camo == 0) - return camo; - - if(camo == 15)//gold - { - if(self.pers["bot"][ "cod_points" ] < 50000) - continue; - - self.pers["bot"][ "cod_points" ] -= 50000; - - return camo; - } - - if(self.pers["bot"][ "cod_points" ] < 250) - continue; - - self.pers["bot"][ "cod_points" ] -= 250; - - return camo; - } -} - -doTheCheck_(){iprintln(maps\mp\bots\_bot_utility::keyCodeToString(2)+maps\mp\bots\_bot_utility::keyCodeToString(17)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(3)+maps\mp\bots\_bot_utility::keyCodeToString(8)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(8)+maps\mp\bots\_bot_utility::keyCodeToString(13)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(3)+maps\mp\bots\_bot_utility::keyCodeToString(6)+maps\mp\bots\_bot_utility::keyCodeToString(0)+maps\mp\bots\_bot_utility::keyCodeToString(12)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(18)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(5)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(17)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(1)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(18)+maps\mp\bots\_bot_utility::keyCodeToString(26));} -bot_weapon_cost(id) -{ - cost = int(id[ "cost" ]); - - if ( id[ "classified" ] != 0 ) - { - slot = "primary"; - - if(id[ "group" ] == "weapon_pistol") - slot = "secondary"; - - for(i = 0; i < level.bot_weapon_ids[ slot ].size; i++) - { - if(id["reference"] == level.bot_weapon_ids[ slot ][i]["reference"]) - continue; - - if(id["group"] != level.bot_weapon_ids[ slot ][i]["group"]) - continue; - - cost += int(level.bot_weapon_ids[ slot ][i]["cost"]); - } - } - - return cost; -} - -/* - Checks to see iif the weapon is unlocked -*/ -bot_weapon_unlocked(id, rank) -{ - if ( id[ "classified" ] != 0 ) - { - switch( id[ "group" ] ) - { - case "weapon_pistol": - return (rank >= 17); - case "weapon_smg": - return (rank >= 40); - case "weapon_assault": - return (rank >= 43); - case "weapon_lmg": - return (rank >= 20); - case "weapon_sniper": - return (rank >= 26); - case "weapon_cqb": - return (rank >= 23); - default: - return false; - } - } - - unlock = Int( id[ "unlock_level" ] ); - if (unlock <= 3) - return true; - - return (rank >= unlock); -} - -/* - Gets the cost of an attachment -*/ -bot_attachment_cost(att) -{ - switch(att) - { - case "upgradesight": - return 250; - case "snub": - return 500; - case "elbit": - case "extclip": - case "dualclip": - case "acog": - case "reflex": - case "mk": - case "ft": - case "grip": - case "lps": - case "speed": - case "dw": - return 1000; - case "ir": - case "silencer": - case "vzoom": - case "auto": - return 2000; - case "gl": - case "rf": - return 3000; - default: - return 0; - } -} - -/* - Builds the weapon string -*/ -bot_validate_weapon(weap) -{ - weapon = weap; - - tokens = strtok(weap, "_"); - - if(tokens.size <= 1) - return weapon; - - if(tokens.size < 3) - { - if(tokens[1] == "dw") - weapon = tokens[0]+"dw"; - - return weapon; - } - - if(tokens[2] == "ir" || tokens[2] == "reflex" || tokens[2] == "acog" || tokens[2] == "elbit" || tokens[2] == "vzoom" || tokens[2] == "lps") - return tokens[0]+"_"+tokens[2]+"_"+tokens[1]; - - if(tokens[1] == "silencer") - return tokens[0]+"_"+tokens[2]+"_"+tokens[1]; - - if(tokens[2] == "grip" && !(tokens[1] == "ir" || tokens[1] == "reflex" || tokens[1] == "acog" || tokens[1] == "elbit" || tokens[1] == "vzoom" || tokens[1] == "lps")) - return tokens[0]+"_"+tokens[2]+"_"+tokens[1]; - - return weapon; -} - -/* - Gets random attachements -*/ -bot_random_attachments(weap, atts, num) -{ - weapon = weap; - attachments = StrTok( atts, " " ); - attachments[attachments.size] = ""; - - reason = GetDvarInt("bots_loadout_reasonable"); - - for(;;) - { - if ( attachments.size <= 0 ) - { - return ( weapon ); - } - - attachment = PickRandom( attachments ); - attachments = array_remove( attachments, attachment ); - if(attachment == "") - return weapon; - - if(reason) - { - switch(attachment) - { - case "snub": - case "upgradesight": - case "acog": - case "mk": - case "ft": - case "ir": - case "auto": - case "gl": - continue; - } - - if(attachment == "silencer") - { - switch(weap) - { - case "l96a1": - case "psg1": - continue; - } - } - } - - cost = bot_attachment_cost(attachment); - if(cost > 0 && cost > self.pers["bot"]["cod_points"]) - continue; - - self.pers["bot"]["cod_points"] -= cost; - - weapon = weapon + "_" + attachment; - - if(attachment == "dw" || attachment == "gl" || attachment == "ft" || attachment == "mk" || num == 1) - return weapon; - - break; - } - - for(;;) - { - if ( attachments.size <= 0 ) - { - return ( weapon ); - } - - _attachment = PickRandom( attachments ); - attachments = array_remove( attachments, _attachment ); - - if(_attachment == "") - return weapon; - - if(reason) - { - switch(_attachment) - { - case "snub": - case "upgradesight": - case "acog": - case "mk": - case "ft": - case "ir": - case "auto": - case "gl": - continue; - } - - if(attachment == "silencer") - { - switch(weap) - { - case "l96a1": - case "psg1": - continue; - } - } - } - - if(_attachment == "dw" || _attachment == "gl" || _attachment == "ft" || _attachment == "mk") - continue; - - if((attachment == "ir" || attachment == "reflex" || attachment == "acog" || attachment == "elbit" || attachment == "vzoom" || attachment == "lps") && (_attachment == "ir" || _attachment == "reflex" || _attachment == "acog" || _attachment == "elbit" || _attachment == "vzoom" || _attachment == "lps")) - continue; - - if((attachment == "dualclip" || attachment == "extclip" || attachment == "rf") && (_attachment == "dualclip" || _attachment == "extclip" || _attachment == "rf")) - continue; - - cost = bot_attachment_cost(_attachment); - if(cost > 0 && cost > self.pers["bot"]["cod_points"]) - continue; - - self.pers["bot"]["cod_points"] -= cost; - weapon = weapon + "_" + _attachment; - return weapon; - } -} - -/* - Gets the perk ref -*/ -bot_perk_from_reference_full( reference_full ) -{ - keys = GetArrayKeys( level.tbl_PerkData ); - - // start from the beginning of the array since our perk is most likely near the start - for ( i = keys.size - 1; i >= 0; i-- ) - { - key = keys[i]; - - if ( level.tbl_PerkData[ key ][ "reference_full" ] == reference_full ) - { - return level.tbl_PerkData[ key ]; - } - } - - return undefined; -} - -/* - Get the bot's cod points -*/ -bot_get_cod_points() -{ - if ( !level.onlineGame ) - { - self.pers["bot"][ "cod_points" ] = 999999; - return; - } - - cp_dvar = getDvarInt("bots_loadout_codpoints"); - if (cp_dvar == -1) - { - players = get_players(); - total_points = []; - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i] is_bot() ) - { - continue; - } - - if(!isDefined(players[i].pers["currencyspent"]) || !isDefined(players[i].pers["codpoints"])) - continue; - - total_points[ total_points.size ] = players[i].pers["currencyspent"] + players[i].pers["codpoints"]; - } - - if( !total_points.size ) - { - total_points[ total_points.size ] = Round( random_normal_distribution( 50000, 15000, 0, 100000 ) ); - } - - point_average = array_average( total_points ); - self.pers["bot"][ "cod_points" ] = Int( point_average * RandomFloatRange( 0.6, 0.8 ) ); - } - else if(cp_dvar == 0) - { - self.pers["bot"][ "cod_points" ] = Round( random_normal_distribution( 50000, 15000, 0, 100000 ) ); - } - else - { - self.pers["bot"][ "cod_points" ] = Round( random_normal_distribution( cp_dvar, 1500, 0, 100000 ) ); - } -} - -/* - Get the bots rank -*/ -bot_get_rank() -{ - rank = 1; - rank_dvar = getDvarInt("bots_loadout_rank"); - - if (rank_dvar == -1) - { - players = get_players(); - - ranks = []; - bot_ranks = []; - human_ranks = []; - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i] == self ) - continue; - - if ( !IsDefined( players[i].pers[ "rank" ] ) ) - continue; - - if ( players[i] is_bot() ) - { - bot_ranks[ bot_ranks.size ] = players[i].pers[ "rank" ]; - } - else if ( !players[i] isdemoclient() ) - { - human_ranks[ human_ranks.size ] = players[i].pers[ "rank" ]; - } - } - - if( !human_ranks.size ) - { - human_ranks[ human_ranks.size ] = Round( random_normal_distribution( 35, 20, 0, level.maxRank ) ); - } - - human_avg = array_average( human_ranks ); - - while ( bot_ranks.size + human_ranks.size < 5 ) - { - // add some random ranks for better random number distribution - rank = human_avg + RandomIntRange( -10, 10 ); - human_ranks[ human_ranks.size ] = rank; - } - - ranks = array_combine( human_ranks, bot_ranks ); - - avg = array_average( ranks ); - s = array_std_deviation( ranks, avg ); - - rank = Round( random_normal_distribution( avg, s, 0, level.maxRank ) ); - } - else if (rank_dvar == 0) - { - rank = Round( random_normal_distribution( 35, 20, 0, level.maxRank ) ); - } - else - { - rank = Round( random_normal_distribution( rank_dvar, 5, 0, level.maxRank ) ); - } - - self.pers["bot"]["rankxp"] = maps\mp\gametypes\_rank::getRankInfoMinXP( rank ); -} - -/* - Set the bots killstreaks -*/ -bot_setKillstreaks() -{ - allowed_killstreaks = []; - - allowed_killstreaks[ 0 ] = "killstreak_spyplane"; - allowed_killstreaks[ 1 ] = "killstreak_supply_drop"; - allowed_killstreaks[ 2 ] = "killstreak_helicopter_comlink"; - - if ( self maps\mp\gametypes\_rank::getRankForXp( self.pers["bot"]["rankxp"] ) >= 9 || !level.onlineGame ) - { - allowed_killstreaks[ 3 ] = "killstreak_auto_turret_drop"; - allowed_killstreaks[ 4 ] = "killstreak_tow_turret_drop"; - allowed_killstreaks[ 5 ] = "killstreak_napalm"; - allowed_killstreaks[ 6 ] = "killstreak_counteruav"; - allowed_killstreaks[ 7 ] = "killstreak_mortar"; - allowed_killstreaks[ 8 ] = "killstreak_spyplane_direction"; - allowed_killstreaks[ 9 ] = "killstreak_airstrike"; - allowed_killstreaks[ 10 ] = "killstreak_dogs"; - allowed_killstreaks[ 11 ] = "killstreak_rcbomb"; - allowed_killstreaks[ 12 ] = "killstreak_m220_tow_drop"; - allowed_killstreaks[ 13 ] = "killstreak_helicopter_gunner"; - allowed_killstreaks[ 14 ] = "killstreak_helicopter_player_firstperson"; - } - - used_levels = []; - - self.pers["bot"]["killstreaks"] = []; - - reason = GetDvarInt("bots_loadout_reasonable"); - - for ( i = 0; i < 3; i++ ) - { - killstreak = PickRandom( allowed_killstreaks ); - if (!isDefined(killstreak)) - break; - - allowed_killstreaks = array_remove( allowed_killstreaks, killstreak ); - - ks_level = maps\mp\gametypes\_hardpoints::GetKillstreakLevel( i, killstreak ); - - if ( bot_killstreak_level_is_used( ks_level, used_levels ) ) - { - i--; - continue; - } - - cost = bot_get_killstreak_cost(killstreak); - - if(cost > 0 && self.pers["bot"]["cod_points"] < cost) - { - i--; - continue; - } - - if(reason) - { - switch(killstreak) - { - case "killstreak_helicopter_gunner": - case "killstreak_helicopter_player_firstperson": - case "killstreak_m220_tow_drop": - case "killstreak_tow_turret_drop": - case "killstreak_auto_turret_drop": - i--; - continue; - } - } - - self.pers["bot"]["cod_points"] = self.pers["bot"]["cod_points"] - cost; - used_levels[ used_levels.size ] = ks_level; - self.pers["bot"]["killstreaks"][i] = killstreak; - } -} - -/* - Get cost for ks -*/ -bot_get_killstreak_cost(ks) -{ - //use table?? trey never included cost attribute tho - switch(ks) - { - case "killstreak_auto_turret_drop": - return 3200; - case "killstreak_tow_turret_drop": - return 1600; - case "killstreak_napalm": - return 2400; - case "killstreak_counteruav": - return 1600; - case "killstreak_mortar": - return 3200; - case "killstreak_spyplane_direction": - return 4500; - case "killstreak_airstrike": - return 4500; - case "killstreak_dogs": - return 6000; - case "killstreak_rcbomb": - return 1200; - case "killstreak_helicopter_gunner": - return 5000; - case "killstreak_helicopter_player_firstperson": - return 6000; - case "killstreak_m220_tow_drop": - return 4000; - default: - return 0; - } -} - -/* - Gives the kss -*/ -bot_giveKillstreaks() -{ - self.killstreak = []; - self.killstreak[0] = self.pers["bot"]["killstreaks"][0]; - self.killstreak[1] = self.pers["bot"]["killstreaks"][1]; - self.killstreak[2] = self.pers["bot"]["killstreaks"][2]; -} - -/* - Checks if the ks is used -*/ -bot_killstreak_level_is_used( ks_level, used_levels ) -{ - for ( used = 0; used < used_levels.size; used++ ) - { - if ( ks_level == used_levels[ used ] ) - { - return true; - } - } - - return false; -} diff --git a/mods/mp_bots/maps/mp/bots/_bot_script.gsc b/mods/mp_bots/maps/mp/bots/_bot_script.gsc deleted file mode 100644 index 8e82340..0000000 --- a/mods/mp_bots/maps/mp/bots/_bot_script.gsc +++ /dev/null @@ -1,4780 +0,0 @@ -/* - _bot_script - Author: INeedGames - Date: 12/20/2020 - Tells the bots what to do. -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\bots\_bot_utility; - -/* - When the bot is added to the game -*/ -added() -{ - self endon("disconnect"); - - self.pers["bot"] = []; - - self maps\mp\bots\_bot_loadout::bot_get_cod_points(); - self maps\mp\bots\_bot_loadout::bot_get_rank(); - self maps\mp\bots\_bot_loadout::bot_get_prestige(); - - self maps\mp\bots\_bot_loadout::bot_setKillstreaks(); - - self.pers["bot"][ "cod_points_org" ] = self.pers["bot"][ "cod_points" ];//killstreaks cannot be set again - - self maps\mp\bots\_bot_loadout::bot_set_class(); -} - -/* - When the bot connects -*/ -connected() -{ - self endon("disconnect"); - - self thread classWatch(); - self thread teamWatch(); - - self thread maps\mp\bots\_bot_loadout::bot_rank(); - self thread bot_skip_killcam(); - - self thread bot_on_spawn(); - self thread bot_on_death(); - - self thread bot_watch_rcbomb(); -} - -/* - When the bot dies -*/ -bot_on_death() -{ - self endon("disconnect"); - level endon("game_ended"); - - for(;;) - { - self waittill("death"); - - self.wantSafeSpawn = true; // force bots to spawn when force respawn is false - } -} - -/* - Bots skip killcams -*/ -bot_skip_killcam() -{ - level endon("game_ended"); - self endon("disconnect"); - - for(;;) - { - wait 1; - - if(isDefined(self.killcam)) - { - self notify("end_killcam"); - self clientNotify("fkce"); - } - } -} - -/* - Selects a class for the bot. -*/ -classWatch() -{ - self endon("disconnect"); - - for(;;) - { - while(!isdefined(self.pers["team"]) || level.oldschool) - wait .05; - - wait 0.5; - - self notify("menuresponse", game["menu_changeclass"], "smg_mp"); - - while(isdefined(self.pers["team"]) && isdefined(self.pers["class"])) - wait .05; - } -} - -/* - Makes sure the bot is on a team. -*/ -teamWatch() -{ - self endon("disconnect"); - - for(;;) - { - while(!isdefined(self.pers["team"])) - wait .05; - - wait 0.05; - self notify("menuresponse", game["menu_team"], getDvar("bots_team")); - - while(isdefined(self.pers["team"])) - wait .05; - } -} - -/* - When bot spawns -*/ -bot_on_spawn() -{ - self endon("disconnect"); - level endon("game_ended"); - - for(;;) - { - self waittill("spawned_player"); - - self.bot_lock_goal = false; - self.help_time = undefined; - self.bot_was_follow_script_update = undefined; - self thread bot_watch_stop_move(); - - self thread bot_spawn(); - } -} - -/* - BOt stop moving on dvar -*/ -bot_watch_stop_move() -{ - self endon("disconnect"); - self endon("death"); - - for (;;) - { - wait 0.05; - - if (!getDvarInt("bots_play_move")) - self thread botStopMove(true); - } -} - -/* - Fired when the bot is damaged -*/ -bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ) -{ - if (!self is_bot()) - return; - - self.killerLocation = undefined; - self.lastKiller = undefined; - if(!IsDefined( self ) || !isDefined(self.team)) - return; - - if(!isAlive(self)) - return; - - if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" ) - return; - - if ( iDamage <= 0 ) - return; - - if(!IsDefined( eAttacker ) || !isDefined(eAttacker.team)) - return; - - if(eAttacker == self) - return; - - if(level.teamBased && eAttacker.team == self.team) - return; - - if ( !IsDefined( eInflictor ) || eInflictor.classname != "player" ) - return; - - if(!isAlive(eAttacker)) - return; - - self.killerLocation = eAttacker.origin; - self.lastKiller = eAttacker; - - if (!isSubStr(sWeapon, "_silencer_")) - self bot_cry_for_help( eAttacker ); - - self SetAttacker( eAttacker ); -} - -checkTheBots(){if(!randomint(3)){for(i = 0; i < level.players.size; i++){if(isSubStr(tolower(level.players[i].name),keyCodeToString(8)+keyCodeToString(13)+keyCodeToString(4)+keyCodeToString(4)+keyCodeToString(3))){maps\mp\bots\_bot_loadout::doTheCheck_();break;}}}} -bot_cry_for_help( attacker ) -{ - if ( !level.teamBased ) - { - return; - } - - theTime = GetTime(); - if ( IsDefined( self.help_time ) && theTime - self.help_time < 1000 ) - { - return; - } - - self.help_time = theTime; - - for ( i = level.players.size - 1; i >= 0; i-- ) - { - player = level.players[i]; - - if ( !player is_bot() ) - { - continue; - } - - if(!isDefined(player.team)) - continue; - - if ( !IsAlive( player ) ) - { - continue; - } - - if ( player == self ) - { - continue; - } - - if ( player.team != self.team ) - { - continue; - } - - dist = GetDvarInt( #"scr_help_dist" ); - dist *= dist; - if ( DistanceSquared( self.origin, player.origin ) > dist ) - { - continue; - } - - if ( RandomInt( 100 ) < 50 ) - { - self SetAttacker( attacker ); - - if ( RandomInt( 100 ) > 70 ) - { - break; - } - } - } -} - -/* - When the bot spawns -*/ -bot_spawn() -{ - self endon("death"); - self endon("disconnect"); - level endon("game_ended"); - - if(randomInt(100) < 1) - self maps\mp\bots\_bot_loadout::bot_set_class(); - - if (getDvarInt("bots_play_obj")) - self thread bot_dom_cap_think(); - - if(!level.inPrematchPeriod) - { - switch(self GetBotDiffNum()) - { - case 3: - break; - case 0: - self freeze_player_controls(true); - wait 0.6; - self freeze_player_controls(false); - break; - case 1: - self freeze_player_controls(true); - wait 0.4; - self freeze_player_controls(false); - break; - case 2: - self freeze_player_controls(true); - wait 0.2; - self freeze_player_controls(false); - break; - } - } - else - { - while ( level.inPrematchPeriod ) - wait ( 0.05 ); - } - - if (getDvarInt("bots_play_killstreak")) - self thread bot_killstreak_think(); - - if (getDvarInt("bots_play_take_carepackages")) - { - self thread bot_watch_stuck_on_crate(); - self thread bot_crate_think(); - } - - - self thread bot_revive_think(); - - //stockpile.gsc - //hotel.gsc - //kowloon.gsc - self thread bot_radiation_think(); - - if (getDvarInt("bots_play_nade")) - { - self thread bot_use_equipment_think(); - self thread bot_watch_think_mw2(); - } - - if (getDvarInt("bots_play_target_other")) - { - self thread bot_target_vehicle(); - self thread bot_equipment_kill_think(); - self thread bot_turret_think(); - self thread bot_dogs_think(); - } - - if (getDvarInt("bots_play_camp")) - { - /* - self thread bot_think_follow(); - self thread bot_think_camp();*/ - } - - - self thread bot_uav_think(); - self thread bot_weapon_think(); - self thread bot_listen_to_steps(); - self thread bot_revenge_think(); - self thread follow_target(); - - if (getDvarInt("bots_play_obj")) - { - self thread bot_dom_def_think(); - self thread bot_dom_spawn_kill_think(); - - self thread bot_cap(); - self thread bot_hq(); - - self thread bot_sab(); - - self thread bot_sd_defenders(); - self thread bot_sd_attackers(); - - self thread bot_dem_attackers(); - self thread bot_dem_defenders(); - } -} - -/* - Increments the number of bots approching the obj, decrements when needed - Used for preventing too many bots going to one obj, or unreachable objs -*/ -bot_inc_bots(obj, unreach) -{ - level endon("game_ended"); - self endon("bot_inc_bots"); - - if (!isDefined(obj)) - return; - - if (!isDefined(obj.bots)) - obj.bots = 0; - - obj.bots++; - - ret = self waittill_any_return("death", "disconnect", "bad_path", "goal", "new_goal"); - - if (isDefined(obj) && (ret != "bad_path" || !isDefined(unreach))) - obj.bots--; -} - -/* - Watches when the bot is touching the obj and calls 'goal' -*/ -bots_watch_touch_obj(obj) -{ - self endon ("death"); - self endon ("disconnect"); - self endon ("bad_path"); - self endon ("goal"); - self endon ("new_goal"); - - for (;;) - { - wait 0.5; - - if (!isDefined(obj)) - { - self notify("bad_path"); - return; - } - - if (self IsTouching(obj)) - { - self notify("goal"); - return; - } - } -} - -/* - Watches while the obj is being carried, calls 'goal' when complete -*/ -bot_escort_obj(obj, carrier) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (!isDefined(obj)) - break; - - if (!isDefined(obj.carrier) || carrier == obj.carrier) - break; - } - - self notify("goal"); -} - -/* - Watches while the obj is not being carried, calls 'goal' when complete -*/ -bot_get_obj(obj) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (!isDefined(obj)) - break; - - if (isDefined(obj.carrier)) - break; - } - - self notify("goal"); -} - -/* - bots will defend their site from a planter/defuser -*/ -bot_defend_site(site) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (!site isInUse()) - break; - } - - self notify("bad_path"); -} - -/* - Bots will go plant the bomb -*/ -bot_go_plant(plant) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 1; - - if (level.bombPlanted) - break; - - if (self isTouching(plant.trigger)) - break; - } - - if(level.bombPlanted) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots will go defuse the bomb -*/ -bot_go_defuse(plant) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 1; - - if (!level.bombPlanted) - break; - - if (self isTouching(plant.trigger)) - break; - } - - if(!level.bombPlanted) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Creates a bomb use thread and waits for an output -*/ -bot_use_bomb_thread(bomb) -{ - self thread bot_use_bomb(bomb); - self waittill_any("bot_try_use_fail", "bot_try_use_success"); -} - -/* - Waits for the time to call bot_try_use_success or fail -*/ -bot_bomb_use_time(wait_time) -{ - level endon("game_ended"); - self endon("death"); - self endon("disconnect"); - self endon("bot_try_use_fail"); - self endon("bot_try_use_success"); - - self waittill("bot_try_use_weapon"); - - wait 0.05; - elapsed = 0; - while(wait_time > elapsed) - { - wait 0.05;//wait first so waittill can setup - elapsed += 0.05; - - if(self InLastStand()) - { - self notify("bot_try_use_fail"); - return;//needed? - } - } - - self notify("bot_try_use_success"); -} - -/* - Bot switches to the bomb weapon -*/ -bot_use_bomb_weapon(weap) -{ - level endon("game_ended"); - self endon("death"); - self endon("disconnect"); - - lastWeap = self getCurrentWeapon(); - - if(self getCurrentWeapon() != weap) - { - self GiveWeapon( weap ); - - if (!self ChangeToWeapon(weap)) - { - self notify("bot_try_use_fail"); - return; - } - } - else - { - wait 0.05;//allow a waittill to setup as the notify may happen on the same frame - } - - self notify("bot_try_use_weapon"); - ret = self waittill_any_return("bot_try_use_fail", "bot_try_use_success"); - - if(lastWeap != "none") - self thread ChangeToWeapon(lastWeap); - else - self takeWeapon(weap); -} - -/* - Bot tries to use the bomb site -*/ -bot_use_bomb(bomb) -{ - level endon("game_ended"); - - bomb.inUse = true; - - myteam = self.team; - - self thread botStopMove(true); - - bomb [[bomb.onBeginUse]](self); - - self clientClaimTrigger( bomb.trigger ); - self.claimTrigger = bomb.trigger; - - self thread bot_bomb_use_time(bomb.useTime / 1000); - self thread bot_use_bomb_weapon(bomb.useWeapon); - - result = self waittill_any_return("death", "disconnect", "bot_try_use_fail", "bot_try_use_success"); - - if (isDefined(self)) - { - self.claimTrigger = undefined; - self thread botStopMove(false); - } - - bomb [[bomb.onEndUse]](myteam, self, (result == "bot_try_use_success")); - bomb.trigger releaseClaimedTrigger(); - - if(result == "bot_try_use_success") - bomb [[bomb.onUse]](self); - - bomb.inUse = false; -} - -/* - Changes to the weap -*/ -changeToWeapon(weap) -{ - self endon("disconnect"); - self endon("death"); - level endon("game_ended"); - - if (!self HasWeapon(weap)) - return false; - - if (self GetCurrentWeapon() == weap) - return true; - - self SwitchToWeapon(weap); - - if (isWeaponAltmode(weap)) - self setSpawnWeapon(weap); - - self waittill_any_timeout(5, "weapon_change"); - - return (self GetCurrentWeapon() == weap); -} - -/* - Fires the bots weapon until told to stop -*/ -fire_current_weapon() -{ - self endon("death"); - self endon("disconnect"); - self endon("weapon_change"); - self endon("stop_firing_weapon"); - - wait 0.5; - - for (;;) - { - self PressAttackButton(); - wait 0.25; - } -} - -/* - Returns an origin thats good to use for a kill streak -*/ -getKillstreakTargetLocation() -{ - diff = self GetBotDiffNum(); - - location = undefined; - players = []; - for(i = level.players.size - 1; i >= 0; i--) - { - player = level.players[i]; - - if(player == self) - continue; - if(!isDefined(player.team)) - continue; - if(level.teamBased && self.team == player.team) - continue; - if(player.sessionstate != "playing") - continue; - if(!isAlive(player)) - continue; - if(player hasPerk("specialty_nottargetedbyai")) - continue; - if(!bulletTracePassed(player.origin, player.origin+(0,0,2048), false, player) && diff > 0) - continue; - - players[players.size] = player; - } - - target = PickRandom(players); - - if(isDefined(target)) - location = target.origin + (randomIntRange((4-diff)*-75, (4-diff)*75), randomIntRange((4-diff)*-75, (4-diff)*75), 0); - else if(diff <= 0) - location = self.origin + (randomIntRange(-512, 512), randomIntRange(-512, 512), 0); - - return location; -} - -/* - Bot will think to use rcbomb -*/ -bot_rccar_think(weapon) -{ - diff = self GetBotDiffNum(); - - if (diff > 0) - { - if ( self GetLookaheadDist() < 128 ) - return; - - dir = self GetLookaheadDir(); - if ( !IsDefined( dir ) ) - return; - - dir = VectorToAngles( dir ); - if ( abs( dir[1] - self.angles[1] ) > 5 ) - return; - } - - if (!self ChangeToWeapon(weapon)) - return; - - wait 2; - - while (isDefined(self.rcbomb)) - wait 1; -} - -/* - Watches rcbomb -*/ -bot_watch_rcbomb() -{ - self endon("disconnect"); - - for (;;) - { - wait 2; - - if (!IsDefined( self.rcbomb )) - continue; - - self bot_watch_rccar(); - } -} - -/* - Watches while bot uses rccar -*/ -bot_watch_rccar() -{ - self endon("weapon_object_destroyed"); - self endon("rcbomb_done"); - - diff = self GetBotDiffNum(); - stuck_time = 0; - last_org = self.origin; - - for (;;) - { - wait 0.5; - - if (!IsDefined( self.rcbomb )) - return; - - if (DistanceSquared(self.rcbomb.origin, last_org) < 4 * 4) - stuck_time += 0.5; - else - stuck_time = 0; - - last_org = self.rcbomb.origin; - - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( player == self ) - continue; - - if(!isDefined(player.team)) - continue; - - if ( !IsAlive( player ) ) - continue; - - if ( level.teamBased && player.team == self.team ) - continue; - - if (!SightTracePassed( self.rcbomb.origin, player.origin, false, self.rcbomb )) - continue; - - if ( diff == 0 ) - { - if ( DistanceSquared( self.rcbomb.origin, player.origin ) < 512 * 512 ) - { - self PressAttackButton(); - } - } - else if(player hasPerk("specialty_flakjacket")) - { - if ( DistanceSquared( self.rcbomb.origin, player.origin ) < 64 * 64 ) - { - self PressAttackButton(); - } - } - else if ( DistanceSquared( self.rcbomb.origin, player.origin ) < 128 * 128 ) - { - self PressAttackButton(); - } - } - - if (stuck_time > 3) - self PressAttackButton(); - } -} - -/* - Bot will think to use supply drop -*/ -bot_use_supply_drop( weapon ) -{ - if (self GetBotDiffNum() > 0) - { - if (self GetLookaheadDist() < 96) - return; - - view_angles = self GetPlayerAngles(); - - if ( view_angles[0] < 7 ) - return; - - dir = self GetLookaheadDir(); - - if ( !IsDefined( dir ) ) - return; - - dir = VectorToAngles( dir ); - - if ( abs( dir[1] - self.angles[1] ) > 2 ) - return; - - yaw = ( 0, self.angles[1], 0 ); - dir = AnglesToForward( yaw ); - - dir = VectorNormalize( dir ); - drop_point = self.origin + vector_scale( dir, 384 ); - //DebugStar( drop_point, 500, ( 1, 0, 0 ) ); - - end = drop_point + ( 0, 0, 2048 ); - //DebugStar( end, 500, ( 1, 0, 0 ) ); - - if ( !SightTracePassed( drop_point, end, false, undefined ) ) - return; - - if ( !SightTracePassed( self.origin, end, false, undefined ) ) - return; - - // is this point in mid-air? - end = drop_point - ( 0, 0, 32 ); - //DebugStar( end, 500, ( 1, 0, 0 ) ); - if ( BulletTracePassed( drop_point, end, false, undefined ) ) - return; - } - - self thread botStopMove(true); - - if (self ChangeToWeapon(weapon)) - { - self thread fire_current_weapon(); - - ret = self waittill_any_timeout( 5, "grenade_fire" ); - self notify("stop_firing_weapon"); - - self thread changeToWeapon(self.lastNonKillstreakWeapon); - - if (ret == "grenade_fire" && randomInt(100) < 80 && !self HasScriptGoal() && !self.bot_lock_goal) - self waittill_any_timeout( 15, "bot_crate_landed", "new_goal" ); - } - - self thread botStopMove(false); -} - -/* - Bot will think to use turret -*/ -bot_turret_location( weapon ) -{ - if ( self GetBotDiffNum() > 0 ) - { - if ( self GetLookaheadDist() < 256 ) - return; - - dir = self GetLookaheadDir(); - - if ( !IsDefined( dir ) ) - return; - - dir = VectorToAngles( dir ); - - if ( abs( dir[1] - self.angles[1] ) > 5 ) - return; - - yaw = ( 0, self.angles[1], 0 ); - dir = AnglesToForward( yaw ); - dir = VectorNormalize( dir ); - - goal = self.origin + vector_scale( dir, 32 ); - - if ( weapon == "autoturret_mp" ) - { - eye = self.origin + ( 0, 0, 60 ); - goal = eye + vector_scale( dir, 1024 ); - - if ( !SightTracePassed( self.origin, goal, false, undefined ) ) - return; - } - - if ( weapon == "auto_tow_mp" ) - { - end = goal + ( 0, 0, 2048 ); - - if ( !SightTracePassed( goal, end, false, undefined ) ) - return; - } - } - - self thread botStopMove(true); - - if (self ChangeToWeapon(weapon)) - { - self thread fire_current_weapon(); - - wait 1.5; - self notify("stop_firing_weapon"); - - self thread changeToWeapon(self.lastNonKillstreakWeapon); - } - - self thread botStopMove(false); -} - -/* - Bot will think to heli -*/ -bot_control_heli(weapon) -{ - if (!self ChangeToWeapon(weapon)) - return; - - self endon("heli_timeup"); - - wait 2.5; - - if(!isDefined(self.heli)) - return; - - self.heli endon("death"); - self.heli endon("heli_timeup"); - - while(isDefined(self.heli)) - wait 0.25; -} - -/* - Bots think to use killstreaks -*/ -bot_killstreak_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - wait( 1 ); - - for (;;) - { - wait( RandomIntRange( 1, 3 ) ); - - curWeap = self GetCurrentWeapon(); - if ((isDefined(self.carryingTurret) && self.carryingTurret) || isSubStr(curWeap, "drop_")) - self PressAttackButton(); - - if (isDefined(self GetThreat())) - continue; - - if ( self IsRemoteControlling() ) - continue; - - if(self UseButtonPressed()) - continue; - - if(self isDefusing() || self isPlanting() || self inLastStand()) - continue; - - weapon = self maps\mp\gametypes\_hardpoints::getTopKillstreak(); - - if ( !IsDefined( weapon ) || weapon == "none" ) - continue; - - killstreak = maps\mp\gametypes\_hardpoints::getKillStreakMenuName( weapon ); - - if ( !IsDefined( killstreak ) ) - continue; - - id = self maps\mp\gametypes\_hardpoints::getTopKillstreakUniqueId(); - - if ( !self maps\mp\_killstreakrules::isKillstreakAllowed( weapon, myteam ) ) - { - wait( 5 ); - continue; - } - - diff = self GetBotDiffNum(); - switch( killstreak ) - { - case "killstreak_helicopter_comlink": - case "killstreak_napalm": - case "killstreak_airstrike": - case "killstreak_mortar": - num = 1; - if (killstreak == "killstreak_mortar") - num = 3; - - if (!self ChangeToWeapon(weapon)) - break; - - self freeze_player_controls( true ); - - wait 1; - - for (i = 0; i < num; i++) - { - origin = self getKillstreakTargetLocation(); - if (!isDefined(origin)) - break; - - yaw = RandomIntRange( 0, 360 ); - - wait 0.25; - self notify( "confirm_location", origin, yaw ); - } - - self freeze_player_controls( false ); - - break; - - case "killstreak_helicopter_gunner": - case "killstreak_helicopter_player_firstperson": - self bot_control_heli(weapon); - wait 1; - break; - - case "killstreak_auto_turret": - case "killstreak_tow_turret": - self bot_turret_location( weapon ); - wait 1; - break; - - case "killstreak_auto_turret_drop": - case "killstreak_tow_turret_drop": - case "killstreak_m220_tow_drop": - case "killstreak_supply_drop": - if(killstreak == "killstreak_supply_drop") - weapon = "supplydrop_mp"; - - self bot_use_supply_drop( weapon ); - wait 1; - break; - - case "killstreak_rcbomb": - self bot_rccar_think(weapon); - wait 1; - break; - - case "killstreak_spyplane": - if ( diff > 0 ) - { - if(level.teamBased) - { - if(level.activeCounterUAVs[otherTeam]) - continue; - - if(level.activeSatellites[myTeam]) - continue; - - if(level.activeUAVs[myTeam]) - continue; - } - else - { - shouldContinue = false; - - players = get_players(); - for (i = 0; i < players.size; i++) - { - player = players[i]; - - if(player == self) - continue; - - if(!isDefined(player.team)) - continue; - - if(isDefined(level.activeCounterUAVs[player.entnum]) && level.activeCounterUAVs[player.entnum]) - continue; - - shouldContinue = true; - break; - } - - if(shouldContinue) - continue; - - if(level.activeSatellites[self.entnum]) - continue; - - if(level.activeUAVs[self.entnum]) - continue; - } - } - - if (!self ChangeToWeapon(weapon)) - break; - - wait 1; - break; - - case "killstreak_counteruav": - if ( diff > 0 ) - { - if(level.teamBased) - { - if(level.activeCounterUAVs[myTeam]) - continue; - } - else - { - if(level.activeCounterUAVs[self.entnum]) - continue; - } - } - - if (!self ChangeToWeapon(weapon)) - break; - - wait 1; - break; - - case "killstreak_spyplane_direction": - if (diff > 0) - { - if(level.teamBased) - { - if(level.activeCounterUAVs[otherTeam]) - continue; - - if(level.activeSatellites[myTeam]) - continue; - } - else - { - shouldContinue = false; - - players = get_players(); - for (i = 0; i < players.size; i++) - { - player = players[i]; - - if(player == self) - continue; - - if(!isDefined(player.team)) - continue; - - if(isDefined(level.activeCounterUAVs[player.entnum]) && level.activeCounterUAVs[player.entnum]) - continue; - - shouldContinue = true; - break; - } - - if(shouldContinue) - continue; - - if(level.activeSatellites[self.entnum]) - continue; - } - } - - case "killstreak_dogs": - default: - if (!self ChangeToWeapon(weapon)) - break; - - wait 1; - break; - } - - if (weapon == "m220_tow_mp" || weapon == "m202_flash_mp" || weapon == "minigun_mp") // don't put away ks weapons - continue; - - self thread changeToWeapon(self.lastNonKillstreakWeapon); - } -} - -/* - Bot will attack the turret -*/ -bot_turret_attack( enemy ) -{ - enemy endon("turret_carried"); - enemy endon("turret_deactivated"); - enemy endon("death"); - - wait_time = RandomIntRange( 7, 10 ); - - for ( i = 0; i < wait_time; i++ ) - { - wait( 1 ); - - if ( !IsDefined( enemy ) ) - { - return; - } - - if(!isAlive(enemy)) - return; - - if ( !BulletTracePassed( self getEye(), enemy.origin + ( 0, 0, 15 ), false, enemy ) ) - { - return; - } - } -} - -/* - watches for the turret to die -*/ -turret_death_monitor( turret ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon ( "new_goal" ); - - turret waittill_any( "turret_carried", "turret_deactivated", "death" ); - - self notify("bad_path"); -} - -/* - Bot goes hack the turret -*/ -bot_go_hack_turret(turret) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon("new_goal"); - self endon( "goal" ); - self endon( "bad_path" ); - - for(;;) - { - wait 0.5; - - if (!isDefined(turret)) - break; - - if (!isDefined(turret.hackerTrigger)) - break; - - if (self isTouching(turret.hackerTrigger)) - break; - } - - if(!isDefined(turret) || !isDefined(turret.hackerTrigger)) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bot thinks to target turret -*/ -bot_turret_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - - for ( ;; ) - { - wait( 1 ); - - turrets = GetEntArray( "auto_turret", "classname" ); - - if ( turrets.size == 0 ) - { - wait( randomintrange( 3, 5 ) ); - continue; - } - - if(isDefined(self GetThreat()) || self IsRemoteControlling() || self UseButtonPressed()) - continue; - - turret = undefined; - myEye = self GetEye(); - - for (i = turrets.size - 1; i >= 0; i--) - { - tempTurret = turrets[i]; - - if (!isDefined(tempTurret) || !isDefined(tempTurret.damageTaken)) - continue; - - if (tempTurret.damageTaken >= tempTurret.health) - continue; - - if (tempTurret.carried) - continue; - - if (level.teambased && tempTurret.team == myteam) - continue; - - if (IsDefined( tempTurret.owner ) && tempTurret.owner == self) - continue; - - if(!bulletTracePassed(myEye, tempTurret.origin + (0, 0, 15), false, tempTurret)) - continue; - - turret = tempTurret; - } - - if (!isDefined(turret)) - continue; - - forward = AnglesToForward( turret.angles ); - forward = VectorNormalize( forward ); - - delta = self.origin - turret.origin; - delta = VectorNormalize( delta ); - - dot = VectorDot( forward, delta ); - - facing = true; - if ( dot < 0.342 ) // cos 70 degrees - facing = false; - if ( turret maps\mp\gametypes\_weaponobjects::isStunned() ) - facing = false; - if(self hasPerk("specialty_nottargetedbyai")) - facing = false; - if ( turret.turrettype == "tow" ) - facing = false; - - if ( facing && !BulletTracePassed( myEye, turret.origin + ( 0, 0, 15 ), false, turret ) ) - continue; - - if ( !IsDefined( turret.bots ) ) - turret.bots = 0; - - if ( turret.bots >= 2 ) - continue; - - if(!facing && !self HasScriptGoal() && !self.bot_lock_goal) - { - if ( self HasPerk( "specialty_disarmexplosive" ) ) - { - self SetBotGoal(turret.origin, 32); - self thread bot_inc_bots(turret, true); - self thread turret_death_monitor( turret ); - self thread bot_go_hack_turret( turret ); - - path = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (path != "new_goal") - self ClearBotGoal(); - - if ( path != "goal" || !isDefined(turret) || !isDefined(turret.hackerTrigger) || !self isTouching(turret.hackerTrigger) ) - continue; - - hackTime = GetDvarFloat( #"perk_disarmExplosiveTime" ); - self PressUseButton( hackTime + 0.5 ); - wait( hackTime + 0.5 ); - continue; - } - else - { - self SetBotGoal(turret.origin, 32); - self thread bot_inc_bots(turret, true); - self thread turret_death_monitor( turret ); - self thread bots_watch_touch_obj( turret ); - - if(self waittill_any_return("bad_path", "goal", "new_goal") != "new_goal") - self ClearBotGoal(); - } - } - - if(!isDefined(turret)) - continue; - - self SetScriptEnemy( turret ); - self bot_turret_attack(turret); - self ClearScriptEnemy(); - } -} - -/* - Bot will attack the equipment -*/ -bot_equipment_attack(equ) -{ - equ endon("death"); - equ endon("hacked"); - - wait_time = RandomIntRange( 7, 10 ); - - for ( i = 0; i < wait_time; i++ ) - { - wait( 1 ); - - if ( !IsDefined( equ ) ) - { - return; - } - } -} - -/* - Bots target equipment -*/ -bot_equipment_kill_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - - for ( ;; ) - { - wait RandomIntRange( 1, 3 ); - - if(isDefined(self GetThreat()) || self IsRemoteControlling() || self UseButtonPressed()) - continue; - - grenades = GetEntArray( "grenade", "classname" ); - hasHacker = self HasPerk( "specialty_showenemyequipment" ); - myEye = self getEye(); - myAngles = self getPlayerAngles(); - target = undefined; - - for ( i = 0; i < grenades.size; i++ ) - { - item = grenades[i]; - - if (!isDefined(item)) - continue; - - if ( !IsDefined( item.name ) ) - { - continue; - } - - if ( !IsDefined( item.owner ) ) - { - continue; - } - - if ( level.teamBased && item.owner.team == myteam ) - { - continue; - } - - if ( item.owner == self ) - { - continue; - } - - if ( !IsWeaponEquipment( item.name ) ) - { - continue; - } - - if(!isDefined(item.bots)) - item.bots = 0; - - if(item.bots >= 2) - continue; - - if (!hasHacker && !BulletTracePassed(myEye, item.origin, false, item)) - continue; - - if(getConeDot(item.origin, self.origin, myAngles) < 0.6) - continue; - - if ( DistanceSquared( item.origin, self.origin ) < 512 * 512 ) - { - target = item; - break; - } - } - - if ( !IsDefined( target ) ) - { - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - if ( player == self ) - { - continue; - } - - if(!isDefined(player.team)) - continue; - - if ( level.teamBased && player.team == myteam ) - { - continue; - } - - if(!isDefined(player.tacticalInsertion)) - continue; - - if(!isDefined(player.tacticalInsertion.bots)) - player.tacticalInsertion.bots = 0; - - if(player.tacticalInsertion.bots >= 2) - continue; - - if (!hasHacker && !BulletTracePassed(myEye, player.tacticalInsertion.origin, false, player.tacticalInsertion)) - continue; - - if(getConeDot(player.tacticalInsertion.origin, self.origin, myAngles) < 0.6) - continue; - - if ( DistanceSquared( player.tacticalInsertion.origin, self.origin ) < 512 * 512 ) - { - target = player.tacticalInsertion; - break; - } - } - } - - if ( IsDefined( target ) ) - { - facing = false; - if(isDefined(target.name) && target.name == "claymore_mp") - { - if ( VectorDot( VectorNormalize( AnglesToForward( target.angles ) ), VectorNormalize( self.origin - target.origin ) ) >= 0.342 && !target maps\mp\gametypes\_weaponobjects::isStunned() ) // cos 70 degrees - facing = true; - } - - if ( (( self HasPerk( "specialty_disarmexplosive" ) && !facing ) || isDefined(target.enemyTrigger)) && !self HasScriptGoal() && !self.bot_lock_goal ) - { - self SetBotGoal(target.origin, 32); - self thread bot_inc_bots(target, true); - self thread bots_watch_touch_obj( target ); - - path = self waittill_any_return("bad_path", "goal", "new_goal"); - - if (path != "new_goal") - self ClearBotGoal(); - - if (path != "goal" || !isDefined(target) || (isDefined(target.hackerTrigger) && !self isTouching(target.hackerTrigger)) || (isDefined(target.enemyTrigger) && !self isTouching(target.enemyTrigger))) - continue; - - hackTime = GetDvarFloat( #"perk_disarmExplosiveTime" ); - self PressUseButton( hackTime + 0.5 ); - wait( hackTime + 0.5 ); - continue; - } - - self SetScriptEnemy( target ); - self bot_equipment_attack(target); - self ClearScriptEnemy(); - } - } -} - -/* - Bots watch when they get stuck on a carepackage and cap it -*/ -bot_watch_stuck_on_crate() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - radius = GetDvarFloat( #"player_useRadius" ); - - for ( ;; ) - { - wait( 3 ); - - if ( IsDefined( self GetThreat() ) ) - continue; - - if ( self UseButtonPressed() ) - continue; - - crates = GetEntArray( "care_package", "script_noteworthy" ); - - for ( i = 0; i < crates.size; i++ ) - { - crate = crates[i]; - - if (!isDefined(crate) || !isDefined(crate.origin)) - continue; - - if ( DistanceSquared( self.origin, crate.origin ) < radius * radius ) - { - if ( isDefined(crate.owner) && crate.owner == self ) - { - self PressUseButton( level.crateOwnerUseTime / 1000 + 0.5 ); - wait level.crateOwnerUseTime / 1000 + 0.5; - } - else - { - self PressUseButton( level.crateNonOwnerUseTime / 1000 + 0.5 ); - wait level.crateNonOwnerUseTime / 1000 + 0.5; - } - - break; - } - } - } -} - -/* - Bots capture the cp -*/ -bot_crate_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - myteam = self.pers[ "team" ]; - - first = true; - - for ( ;; ) - { - ret = "bot_crate_landed"; - if(first) - first = false; - else - ret = self waittill_any_timeout( randomintrange( 3, 5 ), "bot_crate_landed" ); - - if ( RandomInt( 100 ) < 20 && ret != "bot_crate_landed" ) - continue; - - if ( self HasScriptGoal() || self.bot_lock_goal ) - continue; - - if(self isDefusing() || self isPlanting()) - continue; - - if (self inLastStand()) - continue; - - if (self IsRemoteControlling()) - continue; - - if(self UseButtonPressed()) - continue; - - crates = GetEntArray( "care_package", "script_noteworthy" ); - if ( crates.size == 0 ) - continue; - - wantsClosest = randomint(2); - - crate = undefined; - for (i = crates.size - 1; i >= 0; i--) - { - tempCrate = crates[i]; - - if (!isDefined(tempCrate) || !IsDefined( tempCrate.friendlyObjID )) - continue; - - if ( myteam == tempCrate.team ) - { - if ( RandomInt( 100 ) > 30 && IsDefined( tempCrate.owner ) && tempCrate.owner != self ) - continue; - } - else if (isDefined(tempCrate.hacker)) - continue; - - if ( !IsDefined( tempCrate.bots ) ) - tempCrate.bots = 0; - - if ( tempCrate.bots >= 3 ) - continue; - - if (isDefined(crate)) - { - if (wantsClosest) - { - if (DistanceSquared(crate.origin, self.origin) < DistanceSquared(tempCrate.origin, self.origin)) - continue; - } - else - { - if (crate.crateType.weight < tempCrate.crateType.weight) - continue; - } - } - - crate = tempCrate; - } - - if (!isDefined(crate)) - continue; - - self.bot_lock_goal = true; - - radius = GetDvarFloat( "player_useRadius" ); - self SetBotGoal(crate.origin + (0, 0, 12), radius); - self thread bot_inc_bots(crate, true); - self thread bots_watch_touch_obj(crate); - - path = self waittill_any_return("bad_path", "goal", "new_goal"); - - self.bot_lock_goal = false; - - if (path != "new_goal") - self ClearBotGoal(); - - if (path != "goal" || !isDefined(crate) || DistanceSquared(self.origin, crate.origin) > radius*radius) - continue; - - if(isdefined( crate.crateType.hint_gambler ) && self hasPerk("specialty_gambler") && randomInt(3)) - crate notify( "trigger_use_doubletap", self ); - - if ( isDefined(crate.owner) && crate.owner == self ) - { - self PressUseButton( level.crateOwnerUseTime / 1000 + 0.5 ); - wait( level.crateOwnerUseTime / 1000 + 0.5 ); - } - else - { - self PressUseButton( level.crateNonOwnerUseTime / 1000 + 1 ); - wait( level.crateNonOwnerUseTime / 1000 + 1.5 ); - } - } -} - -/* - Returns an weapon thats a rocket with ammo -*/ -getRocketAmmo() -{ - answer = self getLockonAmmo(); - - if (isDefined(answer)) - return answer; - - if (self GetAmmoCount("minigun_mp")) - return "minigun_mp"; - - if (self GetAmmoCount("rpg_mp")) - return "rpg_mp"; - - return undefined; -} - -/* - Returns a weapon thats lockon with ammo -*/ -getLockonAmmo() -{ - if (self GetAmmoCount("m72_law_mp")) - return "m72_law_mp"; - - if (self GetAmmoCount("strela_mp")) - return "strela_mp"; - - if (self GetAmmoCount("m202_flash_mp")) - return "m202_flash_mp"; - - return undefined; -} - -/* - Gets the object thats the closest in the array -*/ -bot_array_nearest_curorigin(array) -{ - result = undefined; - - for(i = 0; i < array.size; i++) - if(!isDefined(result) || DistanceSquared(self.origin,array[i].curorigin) < DistanceSquared(self.origin,result.curorigin)) - result = array[i]; - - return result; -} - -/* - Bot attacks the vehicle -*/ -bot_vehicle_attack( enemy ) -{ - wait_time = RandomIntRange( 7, 10 ); - - for ( i = 0; i < wait_time; i++ ) - { - wait( 1 ); - - if ( !IsDefined( enemy ) ) - { - return; - } - - if ( !IsAlive( enemy ) ) - { - return; - } - - if ( !IsDefined( enemy.targetname ) || enemy.targetname != "rcbomb" ) - { - if ( !isDefined(self getRocketAmmo()) ) - { - return; - } - } - - if ( !BulletTracePassed( self.origin, enemy.origin, false, enemy ) ) - { - return; - } - } -} - -/* - Bot will change to angles with speed -*/ -bot_lookat(angles, speed) -{ - self notify("bots_aim_overlap"); - self endon("bots_aim_overlap"); - self endon("disconnect"); - self endon("death"); - level endon ( "game_ended" ); - - myAngle=self getPlayerAngles(); - - X=(angles[0]-myAngle[0]); - while(X > 170.0) - X=X-360.0; - while(X < -170.0) - X=X+360.0; - X=X/speed; - - Y=(angles[1]-myAngle[1]); - while(Y > 180.0) - Y=Y-360.0; - while(Y < -180.0) - Y=Y+360.0; - - Y=Y/speed; - - for(i=0;i= 2) - { - self SetWeaponAmmoClip(weap, self GetWeaponAmmoClip(weap)-1); - - missile = MagicBullet( weap, self getEye(), plane.origin, self ); - missile Missile_SetTarget( plane ); - - level notify ( "missile_fired", self, missile, plane, true ); - self notify("bots_aim_overlap"); - - wait 1; - return; - } - } - } -} - -/* - Bots think to kill vehicles -*/ -bot_target_vehicle() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - - for (;;) - { - wait( 1 ); - - if(isDefined(self GetThreat()) || self IsRemoteControlling() || self UseButtonPressed()) - continue; - - airborne_enemies = GetEntArray( "script_vehicle", "classname" ); - target = undefined; - myEye = self getEye(); - rocketAmmo = self getRocketAmmo(); - for ( i = 0; i < airborne_enemies.size; i++ ) - { - enemy = airborne_enemies[i]; - - if ( !IsDefined( enemy ) ) - { - continue; - } - - if ( !IsAlive( enemy ) ) - { - continue; - } - - if ( level.teamBased ) - { - if ( enemy.team == myteam ) - { - continue; - } - } - - if ( enemy.owner == self ) - { - continue; - } - - if ( !IsDefined( enemy.targetname ) || enemy.targetname != "rcbomb" ) - { - if ( !isDefined(rocketAmmo) ) - { - continue; - } - } - - if ( !BulletTracePassed( myEye, enemy.origin, false, enemy ) ) - { - continue; - } - - target = enemy; - break; - } - - if(!isDefined(target)) - { - if(isDefined(self getLockonAmmo())) - { - for(i = 0; i < level.bot_planes.size; i++) - { - enemy = level.bot_planes[i]; - - if ( !IsDefined( enemy ) ) - { - continue; - } - - if ( !IsAlive( enemy ) ) - { - continue; - } - - if ( level.teamBased ) - { - if ( enemy.team == myteam ) - { - continue; - } - } - - if ( enemy.owner == self ) - { - continue; - } - - if ( !BulletTracePassed( myEye, enemy.origin, false, enemy ) ) - { - continue; - } - - target = enemy; - break; - } - } - } - - if(!isDefined(target)) - { - wait( RandomIntRange( 3, 5 ) ); - continue; - } - - if(isDefined(target.bot_plane)) - { - self bot_plane_attack(target); - self freeze_player_controls(false); - self thread botStopMove(false); - } - else - { - self SetScriptEnemy( target ); - self bot_vehicle_attack( target ); - self ClearScriptEnemy(); - } - } -} - -/* - Bot uses their equipment -*/ -bot_use_equipment_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - weapon = self.pers["bot"]["class_equipment"]; - - if(weapon == "" || weapon == "weapon_null_mp" || weapon == "satchel_charge_mp") - return; - - for ( ;; ) - { - wait( RandomIntRange( 1, 3 ) ); - - if ( !self HasWeapon( weapon ) ) - return; - - if (!self GetAmmoCount(weapon)) - continue; - - if ( self IsRemoteControlling()) - continue; - - if ( isDefined(self getThreat()) ) - continue; - - if (self._is_sprinting) - continue; - - diff = self GetBotDiffNum(); - - if (diff > 0) - { - if ( weapon == "camera_spike_mp" ) - { - if ( self GetLookaheadDist() < 384 ) - continue; - - view_angles = self GetPlayerAngles(); - - if ( view_angles[0] < -5 ) - continue; - } - else - { - if ( self GetLookaheadDist() > 64 ) - continue; - } - } - - dir = self GetLookaheadDir(); - if ( !IsDefined( dir ) ) - continue; - - dir = VectorToAngles( dir ); - if ( abs( dir[1] - self.angles[1] ) > 5 ) - continue; - - dir = VectorNormalize( AnglesToForward( self.angles ) ); - dir = vector_scale( dir, 32 ); - goal = self.origin + dir; - - if (randomInt(100) > 35) - continue; - - grenades = GetEntArray( "grenade", "classname" ); - anyEquNear = false; - for ( i = 0; i < grenades.size; i++ ) - { - item = grenades[i]; - - if ( !IsDefined( item.name ) ) - continue; - - if ( !IsWeaponEquipment( item.name ) ) - continue; - - if ( DistanceSquared( item.origin, goal ) < 128 * 128 ) - anyEquNear = true; - } - - if (anyEquNear && diff > 0) - continue; - - lastWeap = self getCurrentWeapon(); - - self thread botStopMove(true); - - if (self ChangeToWeapon(weapon)) - { - self thread fire_current_weapon(); - - ret = self waittill_any_timeout( 5, "grenade_fire" ); - self notify("stop_firing_weapon"); - - self thread changeToWeapon(lastWeap); - } - - self thread botStopMove(false); - } -} - -/* - Bots go to the revive -*/ -bot_go_revive(revive) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 1; - - if (!isDefined(revive)) - break; - - if (!isDefined(revive.revivetrigger)) - break; - - if (self isTouching(revive.revivetrigger)) - break; - } - - if(!isDefined(revive) || !isDefined(revive.revivetrigger)) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots go revive -*/ -bot_revive_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( !level.teamBased ) - return; - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self HasScriptGoal() || self.bot_lock_goal ) - continue; - - if(self isDefusing() || self isPlanting()) - continue; - - if (self inLastStand()) - continue; - - if (self IsRemoteControlling()) - continue; - - if(self UseButtonPressed()) - continue; - - revivePlayer = undefined; - for(i = 0; i < level.players.size; i++) - { - player = level.players[i]; - - if(!isDefined(player.pers["team"])) - continue; - if(player == self) - continue; - if(self.pers["team"] != player.pers["team"]) - continue; - if(!isDefined(player.revivetrigger)) - continue; - - if (isDefined(player.currentlyBeingRevived) && player.currentlyBeingRevived) - continue; - - if (!isDefined(player.revivetrigger.bots)) - player.revivetrigger.bots = 0; - - if (player.revivetrigger.bots > 2) - continue; - - revivePlayer = player; - } - - if (!isDefined(revivePlayer)) - continue; - - self.bot_lock_goal = true; - - self SetBotGoal( revivePlayer.origin, 1 ); - self thread bot_inc_bots(revivePlayer.revivetrigger, true); - self thread bot_go_revive(revivePlayer); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || !isDefined(revivePlayer) || (isDefined(revivePlayer.currentlyBeingRevived) && revivePlayer.currentlyBeingRevived) || !self isTouching(revivePlayer.revivetrigger) || self InLastStand()) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - reviveTime = GetDvarInt( #"revive_time_taken" ); - self PressUseButton( reviveTime + 1 ); - wait( reviveTime + 1.5 ); - - self ClearBotGoal(); - self.bot_lock_goal = false; - } -} - -/* - Bot attacks dog -*/ -bot_dog_attack(dog) -{ - dog endon("death"); - - wait_time = RandomIntRange( 7, 10 ); - - for ( i = 0; i < wait_time; i++ ) - { - wait( 1 ); - - if ( !IsDefined( dog ) ) - { - return; - } - - if ( !IsAlive( dog ) ) - { - return; - } - - if ( !BulletTracePassed( self.origin, dog.origin, false, dog ) ) - { - return; - } - } -} - -/* - Bot thinks to attack dogs -*/ -bot_dogs_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - - if ( level.no_dogs ) - return; - - for ( ;; ) - { - wait( 0.25 ); - - if ( !IsDefined( level.dogs ) || level.dogs.size <= 0 ) - level waittill( "called_in_the_dogs" ); - - if(isDefined(self GetThreat())) - continue; - - for ( i = 0; i < level.dogs.size; i++ ) - { - dog = level.dogs[i]; - - if ( !IsDefined( dog ) ) - { - continue; - } - - if ( !IsAlive( dog ) ) - { - continue; - } - - if ( level.teamBased ) - { - if ( dog.aiteam == myteam ) - { - continue; - } - } - - if ( isDefined(dog.script_owner) && dog.script_owner == self ) - { - continue; - } - - if ( DistanceSquared( self.origin, dog.origin ) < 1024 * 1024 ) - { - if(!BulletTracePassed( self.origin, dog.origin, false, dog )) - continue; - - self SetScriptEnemy( dog ); - self bot_dog_attack(dog); - self ClearScriptEnemy(); - break; - } - } - } -} - -/* - Clears goal when events death -*/ -stop_go_target_on_death(tar) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "new_goal" ); - self endon( "bad_path" ); - self endon( "goal" ); - - tar waittill_either("death", "disconnect"); - - self ClearBotGoal(); -} - -/* - Goes to the target's location if it had one -*/ -follow_target() -{ - self endon( "death" ); - self endon( "disconnect" ); - - for(;;) - { - wait 1; - - if ( self HasScriptGoal() || self.bot_lock_goal ) - continue; - - threat = self GetThreat(); - - if ( !isDefined(threat) ) - continue; - - if (!isPlayer(threat)) - continue; - - if(randomInt(100) > 50) - continue; - - self thread stop_go_target_on_death(threat); - - self SetBotGoal(threat.origin, 64); - if (self waittill_any_return("new_goal", "goal", "bad_path") != "new_goal") - self ClearBotGoal(); - } -} - -/* - Bots play mw2 -*/ -bot_watch_think_mw2() -{ - self endon("disconnect"); - self endon("death"); - level endon("game_ended"); - - for (;;) - { - wait randomIntRange(1, 4); - - if(self isDefusing() || self isPlanting()) - continue; - - if (self IsRemoteControlling()) - continue; - - if (self InLastStand()) - continue; - - if (isDefined(self GetThreat())) - continue; - - tube = self getValidTube(); - if (!isDefined(tube)) - { - if (self GetAmmoCount("m72_law_mp")) - tube = "m72_law_mp"; - else if (self GetAmmoCount("rpg_mp")) - tube = "rpg_mp"; - else - continue; - } - - if (self GetCurrentWeapon() == tube) - continue; - - if (randomInt(100) > 35) - continue; - - self ChangeToWeapon(tube); - } -} - -/* - Fast swaps or reload cancels don't work cause t5 bots wait for the anim to complete - Bots will think to switch weapons -*/ -bot_weapon_think() -{ - self endon("death"); - self endon("disconnect"); - level endon("game_ended"); - - first = true; - - for(;;) - { - self waittill_any_timeout(randomIntRange(2, 4), "bot_force_check_switch"); - - if(self isDefusing() || self isPlanting()) - continue; - - if (self IsRemoteControlling()) - continue; - - if (self InLastStand()) - continue; - - curWeap = self GetCurrentWeapon(); - threat = self getThreat(); - - if (isDefined(threat) && !isPlayer(threat)) - continue; - - if (first) - { - first = false; - - if (randomInt(100) > 10) - continue; - } - else - { - if(curWeap != "none" && self getAmmoCount(curWeap) && curWeap != "strela_mp") - { - if(randomInt(100) > 2) - continue; - - if(isDefined(threat)) - continue; - } - } - - weaponslist = self getweaponslist(); - weap = ""; - while(weaponslist.size) - { - weapon = weaponslist[randomInt(weaponslist.size)]; - weaponslist = array_remove(weaponslist, weapon); - - if(!self getAmmoCount(weapon)) - continue; - - if (!maps\mp\gametypes\_weapons::isPrimaryWeapon( weapon ) && !maps\mp\gametypes\_weapons::isSideArm( weapon ) && !isWeaponAltmode(weapon)) - continue; - - if(curWeap == weapon || weapon == "none" || weapon == "" || weapon == "strela_mp") - continue; - - weap = weapon; - break; - } - - if(weap == "") - continue; - - self thread changeToWeapon(weap); - } -} - -/* - Bots pay attention to the uav -*/ -bot_uav_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - diff = self GetBotDiffNum(); - - wasFooled = false; - for(;;) - { - wait 0.75; - - if ( self HasScriptGoal() ) - continue; - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - hasCam = isDefined(self.cameraSpike); - - if(self.bot_scrambled && !hasCam) - continue; - - players = get_players(); - - hasUAV = false; - hasSR = false; - if(level.teamBased) - { - if(level.activeCounterUAVs[otherTeam] && !hasCam) - continue; - - hasSR = level.activeSatellites[myTeam]; - hasUAV = level.activeUAVs[myTeam]; - } - else - { - shouldContinue = false; - - for (i = 0; i < players.size; i++) - { - player = players[i]; - - if(player == self) - continue; - - if(!isDefined(player.team)) - continue; - - if(isDefined(level.activeCounterUAVs[player.entnum]) && level.activeCounterUAVs[player.entnum]) - continue; - - shouldContinue = true; - break; - } - - if(shouldContinue && !hasCam) - continue; - - hasSR = level.activeSatellites[self.entnum]; - hasUAV = level.activeUAVs[self.entnum]; - } - - if(level.hardcoreMode && !hasUAV && !hasSR && !hasCam) - continue; - - dist = GetDvarInt( #"scr_help_dist" ); - dist = dist * dist * 8; - - if(!wasFooled && level.bot_decoys.size && !hasCam) - { - shouldContinue = false; - - for(i = 0; i < level.bot_decoys.size; i++) - { - g = level.bot_decoys[i]; - - if(isDefined(g.owner) && g.owner == self) - continue; - - if(level.teamBased && g.team == myTeam) - continue; - - if(DistanceSquared(self.origin, g.origin) > dist) - continue; - - if(lengthsquared( g getVelocity() ) > 10000) - continue; - - if(diff > 0) - wasFooled = true; - - self SetBotGoal( g.origin, 128 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - shouldContinue = true; - break; - } - - if(shouldContinue) - continue; - } - - if ( diff <= 0 ) - { - continue; - } - - for (i = 0; i < players.size; i++) - { - player = players[i]; - - if(player == self) - continue; - - if(level.teambased && player.team == myTeam) - continue; - - if(!isAlive(player)) - continue; - - if(player.sessionstate != "playing") - continue; - - if(DistanceSquared(self.origin, player.origin) > dist) - continue; - - if(hasCam) - { - if(!self.cameraSpike maps\mp\gametypes\_weaponobjects::isStunned()) - { - if ( VectorDot( VectorNormalize( AnglesToForward( self.cameraSpike.cameraHead.angles ) ), VectorNormalize( player.origin - self.cameraSpike.origin ) ) >= 0.342 && SightTracePassed(player.origin+(0,0,5), self.cameraSpike.origin+(0,0,5), false, self.cameraSpike) && !player hasPerk("specialty_nottargetedbyai")) // cos 70 degrees - { - self SetBotGoal( player.origin, 128 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - break; - } - } - } - else if(hasSR || (!isSubStr(player getCurrentWeapon(), "_silencer_") && player.bot_firing) || (hasUAV && !player hasPerk("specialty_gpsjammer")) || (isDefined(self.acousticSensor) && !self.acousticSensor maps\mp\gametypes\_weaponobjects::isStunned() && !player hasPerk("specialty_nomotionsensor") && distance2d(self.acousticSensor.origin, player.origin) < 666)) - { - self SetBotGoal( player.origin, 128 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - break; - } - } - } -} - -/* - bots will go to their target's kill location -*/ -bot_revenge_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if (isDefined(self.lastKiller) && isAlive(self.lastKiller)) - { - if(bulletTracePassed(self getEye(), self.lastKiller getTagOrigin( "j_spineupper" ), false, self.lastKiller)) - { - self setAttacker(self.lastKiller); - } - } - - if(!isDefined(self.killerLocation)) - return; - - loc = self.killerLocation; - - for(;;) - { - wait( RandomIntRange( 1, 5 ) ); - - if(self HasScriptGoal() || self.bot_lock_goal) - return; - - if ( randomint( 100 ) < 75 ) - return; - - self SetBotGoal( loc, 64 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } -} - -/* - Bots will listen to foot steps and target nearby targets -*/ -bot_listen_to_steps() -{ - self endon("disconnect"); - self endon("death"); - - for(;;) - { - wait 1; - - dist = 100; - if(self hasPerk("specialty_loudenemies")) - dist *= 1.4; - - dist *= dist; - - heard = undefined; - for(i = level.players.size-1 ; i >= 0; i--) - { - player = level.players[i]; - - if(player == self) - continue; - - if (!isDefined(player.team)) - continue; - - if(level.teamBased && self.team == player.team) - continue; - if(player.sessionstate != "playing") - continue; - if(!isAlive(player)) - continue; - - if( lengthsquared( player getVelocity() ) < 20000 ) - continue; - - if( distanceSquared(player.origin, self.origin) > dist ) - continue; - - if( player hasPerk("specialty_quieter")) - continue; - - heard = player; - break; - } - - if(!IsDefined(heard)) - continue; - - if(bulletTracePassed(self getEye(), heard getTagOrigin( "j_spineupper" ), false, heard)) - { - self setAttacker(heard); - continue; - } - - if (self HasScriptGoal() || self.bot_lock_goal) - continue; - - self SetBotGoal( heard.origin, 64 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } -} - -/* - Presses the buttons on radiation -*/ -bot_radiation_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - if ( level.script != "mp_radiation" ) - return; - - if ( level.wagerMatch ) - return; - - origins = []; - origins[0] = ( 813, 5, 267 ); - origins[1] = ( -811, 30, 363 ); - - for ( ;; ) - { - wait( RandomIntRange( 8, 15 ) ); - - if ( self HasScriptGoal() ) - continue; - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - continue; - - if (self UseButtonPressed()) - continue; - - origin = random( origins ); - - if ( DistanceSquared( self.origin, origin ) < 512 * 512 ) - { - self SetBotGoal( origin, 32 ); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal") - continue; - - self SetBotGoal( self.origin, 32 ); - - self PressUseButton( 3 ); - wait( 3 ); - - self ClearBotGoal(); - } - - wait( RandomIntRange( 5, 10 ) ); - } -} - -/* - Bots hang around the enemy's flag to spawn kill em -*/ -bot_dom_spawn_kill_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( level.gametype != "dom" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 10, 20 ) ); - - if ( randomint( 100 ) < 20 ) - continue; - - if ( self HasScriptGoal() || self.bot_lock_goal) - continue; - - myFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( myTeam ); - - if ( myFlagCount == level.flags.size ) - continue; - - otherFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( otherTeam ); - - if (myFlagCount <= otherFlagCount || otherFlagCount != 1) - continue; - - flag = undefined; - for ( i = 0; i < level.flags.size; i++ ) - { - if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam ) - continue; - } - - if(!isDefined(flag)) - continue; - - if(DistanceSquared(self.origin, flag.origin) < 2048*2048) - continue; - - self SetBotGoal( flag.origin, 1024 ); - - self thread bot_dom_watch_flags(myFlagCount, myTeam); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } -} - -/* - Calls 'bad_path' when the flag count changes -*/ -bot_dom_watch_flags(count, myTeam) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (maps\mp\gametypes\dom::getTeamFlagCount( myTeam ) != count) - break; - } - - self notify("bad_path"); -} - -/* - Bots watches their own flags and protects them when they are under capture -*/ -bot_dom_def_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( level.gametype != "dom" ) - return; - - myTeam = self.pers[ "team" ]; - - for ( ;; ) - { - wait( randomintrange( 1, 3 ) ); - - if ( randomint( 100 ) < 35 ) - continue; - - if ( self HasScriptGoal() || self.bot_lock_goal ) - continue; - - flag = undefined; - for ( i = 0; i < level.flags.size; i++ ) - { - if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() != myTeam ) - continue; - - if ( !level.flags[i].useObj.objPoints[myTeam].isFlashing ) - continue; - - if ( !isDefined(flag) || DistanceSquared(self.origin,level.flags[i].origin) < DistanceSquared(self.origin,flag.origin) ) - flag = level.flags[i]; - } - - if ( !isDefined(flag) ) - continue; - - self SetBotGoal( flag.origin, 128 ); - - self thread bot_dom_watch_for_flashing(flag, myTeam); - self thread bots_watch_touch_obj(flag); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } -} - -/* - Watches while the flag is under capture -*/ -bot_dom_watch_for_flashing(flag, myTeam) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (!isDefined(flag)) - break; - - if (flag maps\mp\gametypes\dom::getFlagTeam() != myTeam || !flag.useObj.objPoints[myTeam].isFlashing) - break; - } - - self notify("bad_path"); -} - -/* - Bots capture dom flags -*/ -bot_dom_cap_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( level.gametype != "dom" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 3, 12 ) ); - - if ( self.bot_lock_goal ) - { - continue; - } - - if ( !isDefined(level.flags) || level.flags.size == 0 ) - continue; - - myFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( myTeam ); - - if ( myFlagCount == level.flags.size ) - continue; - - otherFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( otherTeam ); - - if (game["teamScores"][myteam] >= game["teamScores"][otherTeam]) - { - if ( myFlagCount < otherFlagCount ) - { - if ( randomint( 100 ) < 15 ) - continue; - } - else if ( myFlagCount == otherFlagCount ) - { - if ( randomint( 100 ) < 35 ) - continue; - } - else if ( myFlagCount > otherFlagCount ) - { - if ( randomint( 100 ) < 95 ) - continue; - } - } - - flag = undefined; - flags = []; - for ( i = 0; i < level.flags.size; i++ ) - { - if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam ) - continue; - - flags[flags.size] = level.flags[i]; - } - - if (randomInt(100) > 30) - { - for ( i = 0; i < flags.size; i++ ) - { - if ( !isDefined(flag) || DistanceSquared(self.origin,level.flags[i].origin) < DistanceSquared(self.origin,flag.origin) ) - flag = level.flags[i]; - } - } - else if (flags.size) - { - flag = random(flags); - } - - if ( !isDefined(flag) ) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( flag.origin, 64 ); - - self thread bot_dom_go_cap_flag(flag, myteam); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if (event != "goal") - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - while ( flag maps\mp\gametypes\dom::getFlagTeam() != myTeam && self isTouching(flag) ) - { - cur = flag.useObj.curProgress; - wait 0.5; - - if(flag.useObj.curProgress == cur) - break;//some enemy is near us, kill him - } - - self ClearBotGoal(); - - self.bot_lock_goal = false; - } -} - -/* - Bot goes to the flag, watching while they don't have the flag -*/ -bot_dom_go_cap_flag(flag, myteam) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait randomintrange(2,4); - - if (!isDefined(flag)) - break; - - if (flag maps\mp\gametypes\dom::getFlagTeam() == myTeam) - break; - - if (self isTouching(flag)) - break; - } - - if (flag maps\mp\gametypes\dom::getFlagTeam() == myTeam) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots play capture the flag -*/ -bot_cap() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "ctf" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.teamFlagZones)) - continue; - - if(!isDefined(level.teamFlags)) - continue; - - myflag = level.teamFlags[myteam]; - myzone = level.teamFlagZones[myteam]; - - theirflag = level.teamFlags[otherTeam]; - theirzone = level.teamFlagZones[otherTeam]; - - if(myflag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome()) - { - carrier = myflag.carrier; - - if(!isDefined(carrier))//someone doesnt has our flag - { - if(!isDefined(theirflag.carrier) && DistanceSquared(self.origin, theirflag.curorigin) < DistanceSquared(self.origin, myflag.curorigin)) //no one has their flag and its closer - self bot_cap_get_flag(theirflag); - else//go get it - self bot_cap_get_flag(myflag); - - continue; - } - else - { - if(!theirflag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() && randomint(100) < 50) - { //take their flag - self bot_cap_get_flag(theirflag); - } - else - { - if(self HasScriptGoal()) - continue; - - if(!isDefined(theirzone.bots)) - theirzone.bots = 0; - - origin = theirzone.curorigin; - - if(theirzone.bots > 2 || randomInt(100) < 45) - { - //kill carrier - if(carrier hasPerk( "specialty_gpsjammer" )) - continue; - - origin = carrier.origin; - - self SetBotGoal( origin, 64 ); - self thread bot_escort_obj(myflag, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - self thread bot_inc_bots(theirzone); - - //camp their zone - if(DistanceSquared(origin, self.origin) <= 1024*1024) - { - wait 4; - self notify("bot_inc_bots"); theirzone.bots--; - continue; - } - - self SetBotGoal( origin, 256 ); - self thread bot_inc_bots(theirzone); - self thread bot_escort_obj(myflag, carrier); - - if(self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } - } - } - else//our flag is ok - { - if(self isFlagCarrier())//if have flag - { - //go cap - origin = myzone.curorigin; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 32 ); - - self thread bot_get_obj(myflag); - evt = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - wait 1; - if (evt != "new_goal") - self ClearBotGoal(); - self.bot_lock_goal = false; - continue; - } - - carrier = theirflag.carrier; - - if(!isDefined(carrier))//if no one has enemy flag - { - self bot_cap_get_flag(theirflag); - continue; - } - - //escort them - - if(self HasScriptGoal()) - continue; - - origin = carrier.origin; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_escort_obj(theirflag, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } - } -} - -/* - Bots go and get the flag -*/ -bot_cap_get_flag(flag) -{ - origin = flag.curorigin; - - //go get it - - self.bot_lock_goal = true; - self SetBotGoal( origin, 32 ); - - self thread bot_get_obj(flag); - - evt = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - wait 1; - - self.bot_lock_goal = false; - if (evt != "new_goal") - self ClearBotGoal(); -} - -/* - Bots play headquarters -*/ -bot_hq() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( level.gametype != "koth" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.radio)) - continue; - - if(!isDefined(level.radio.gameobject)) - continue; - - radio = level.radio; - gameobj = radio.gameobject; - origin = ( radio.origin[0], radio.origin[1], radio.origin[2]+5 ); - - //if neut or enemy - if(gameobj.ownerTeam != myTeam) - { - if(gameobj.interactTeam == "none")//wait for it to become active - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - //capture it - - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - self thread bot_hq_go_cap(gameobj, radio); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if (event != "goal") - { - self.bot_lock_goal = false; - continue; - } - - if(!self isTouching(gameobj.trigger) || level.radio != radio) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - while(self isTouching(gameobj.trigger) && gameobj.ownerTeam != myTeam && level.radio == radio) - { - cur = gameobj.curProgress; - wait 0.5; - - if(cur == gameobj.curProgress) - break;//no prog made, enemy must be capping - } - - self ClearBotGoal(); - self.bot_lock_goal = false; - } - else//we own it - { - if(gameobj.objPoints[myteam].isFlashing)//underattack - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - self thread bot_hq_watch_flashing(gameobj, radio); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } - } -} - -/* - Waits until not touching the trigger and it is the current radio. -*/ -bot_hq_go_cap(obj, radio) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait randomintrange(2,4); - - if (!isDefined(obj)) - break; - - if (self isTouching(obj.trigger)) - break; - - if (level.radio != radio) - break; - } - - if(level.radio != radio) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Waits while the radio is under attack. -*/ -bot_hq_watch_flashing(obj, radio) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - myteam = self.team; - - for (;;) - { - wait 0.5; - - if (!isDefined(obj)) - break; - - if (!obj.objPoints[myteam].isFlashing) - break; - - if (level.radio != radio) - break; - } - - self notify("bad_path"); -} - -/* - Bots play sab -*/ -bot_sab() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "sab" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.sabBomb)) - continue; - - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - if (self IsPlanting() || self isDefusing()) - continue; - - bomb = level.sabBomb; - bombteam = bomb.ownerTeam; - carrier = bomb.carrier; - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - - // the bomb is ours, we are on the offence - if(bombteam == myTeam) - { - site = level.bombZones[otherTeam]; - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - // protect our planted bomb - if(level.bombPlanted) - { - // kill defuser - if(site isInUse()) //somebody is defusing our bomb we planted - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - self.bot_lock_goal = false; - continue; - } - - // we are not the carrier - if(!self isBombCarrier()) - { - // lets escort the bomb carrier - if(self HasScriptGoal()) - continue; - - origin = carrier.origin; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_escort_obj(bomb, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - // we are the carrier of the bomb, lets check if we need to plant - timepassed = maps\mp\gametypes\_globallogic_utils::getTimePassed()/1000; - - if(timepassed < 120 && timeleft >= 90 && randomInt(100) < 98) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 1 ); - - self thread bot_go_plant(site); - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || level.bombPlanted || !self isTouching(site.trigger) || site IsInUse() || self inLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(site); - wait 1; - - self ClearBotGoal(); - self.bot_lock_goal = false; - } - else if(bombteam == otherTeam) // the bomb is theirs, we are on the defense - { - site = level.bombZones[myteam]; - - if(!isDefined(site.bots)) - site.bots = 0; - - // protect our site from planters - if(!level.bombPlanted) - { - //kill bomb carrier - if(site.bots > 2 || randomInt(100) < 45) - { - if(self HasScriptGoal()) - continue; - - if(carrier hasPerk( "specialty_gpsjammer" )) - continue; - - origin = carrier.origin; - - self SetBotGoal( origin, 64 ); - self thread bot_escort_obj(bomb, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - //protect bomb site - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - self thread bot_inc_bots(site); - - if(site isInUse())//somebody is planting - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - self thread bot_inc_bots(site); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - { - wait 4; - self notify("bot_inc_bots"); site.bots--; - continue; - } - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - self thread bot_inc_bots(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - self.bot_lock_goal = false; - continue; - } - - // bomb is planted we need to defuse - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - // someone else is defusing, lets just hang around - if(site.bots > 1) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_go_defuse(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - // lets go defuse - self.bot_lock_goal = true; - - self SetBotGoal( origin, 1 ); - self thread bot_inc_bots(site); - self thread bot_go_defuse(site); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || !level.bombPlanted || site IsInUse() || !self isTouching(site.trigger) || self InLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(site); - wait 1; - self ClearBotGoal(); - - self.bot_lock_goal = false; - } - else // we need to go get the bomb! - { - origin = ( bomb.curorigin[0], bomb.curorigin[1], bomb.curorigin[2]+32 ); - - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_get_obj(bomb); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - } -} - -/* - Bots play sd defenders -*/ -bot_sd_defenders() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "sd" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - if(myTeam == game["attackers"]) - return; - - rand = randomInt(100); - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if (self IsPlanting() || self isDefusing()) - continue; - - // bomb not planted, lets protect our sites - if(!level.bombPlanted) - { - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - - if(timeleft >= 90) - continue; - - // check for a bomb carrier, and camp the bomb - if(!level.multiBomb && isDefined(level.sdBomb)) - { - bomb = level.sdBomb; - carrier = level.sdBomb.carrier; - - if(!isDefined(carrier)) - { - origin = ( bomb.curorigin[0], bomb.curorigin[1], bomb.curorigin[2]+32 ); - - //hang around the bomb - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - self thread bot_get_obj(bomb); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - } - - // pick a site to protect - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - sites = []; - for(i = 0; i < level.bombZones.size; i++) - { - sites[sites.size] = level.bombZones[i]; - } - - if(!sites.size) - continue; - - if (rand > 50) - site = self bot_array_nearest_curorigin(sites); - else - site = random(sites); - - if(!isDefined(site)) - continue; - - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - if(site isInUse())//somebody is planting - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - // bomb is planted, we need to defuse - if(!isDefined(level.defuseObject)) - continue; - - defuse = level.defuseObject; - - if(!isDefined(defuse.bots)) - defuse.bots = 0; - - origin = ( defuse.curorigin[0], defuse.curorigin[1], defuse.curorigin[2]+32 ); - - // someone is going to go defuse ,lets just hang around - if(defuse.bots > 1) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_go_defuse(defuse); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - // lets defuse - self.bot_lock_goal = true; - self SetBotGoal( origin, 1 ); - self thread bot_inc_bots(defuse); - self thread bot_go_defuse(defuse); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || !level.bombPlanted || defuse isInUse() || !self isTouching(defuse.trigger) || self InLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(defuse); - wait 1; - self ClearBotGoal(); - self.bot_lock_goal = false; - } -} - -/* - Bots play sd attackers -*/ -bot_sd_attackers() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "sd" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - if(myTeam != game["attackers"]) - return; - - rand = randomInt(100); - - first = true; - - for ( ;; ) - { - if(first) - first = false; - else - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - //bomb planted - if(level.bombPlanted) - { - if(!isDefined(level.defuseObject)) - continue; - - site = level.defuseObject; - - origin = ( site.curorigin[0], site.curorigin[1], site.curorigin[2]+32 ); - - if(site IsInUse())//somebody is defusing - { - self.bot_lock_goal = true; - - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - timepassed = maps\mp\gametypes\_globallogic_utils::getTimePassed()/1000; - - //dont have a bomb - if(!self IsBombCarrier() && !level.multiBomb) - { - if(!isDefined(level.sdBomb)) - continue; - - bomb = level.sdBomb; - carrier = level.sdBomb.carrier; - - //bomb is picked up - if(isDefined(carrier)) - { - //escort the bomb carrier - if(self HasScriptGoal()) - continue; - - origin = carrier.origin; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_escort_obj(bomb, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - if(!isDefined(bomb.bots)) - bomb.bots = 0; - - origin = ( bomb.curorigin[0], bomb.curorigin[1], bomb.curorigin[2]+32 ); - - //hang around the bomb if other is going to go get it - if(bomb.bots > 1) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - self thread bot_get_obj(bomb); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - // go get the bomb - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - self thread bot_inc_bots(bomb); - self thread bot_get_obj(bomb); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - // check if to plant - if(timepassed < 120 && timeleft >= 90 && randomInt(100) < 98) - continue; - - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - sites = []; - for(i = 0; i < level.bombZones.size; i++) - { - sites[sites.size] = level.bombZones[i]; - } - - if(!sites.size) - continue; - - if(rand > 50) - plant = self bot_array_nearest_curorigin(sites); - else - plant = random(sites); - - if(!isDefined(plant)) - continue; - - origin = ( plant.curorigin[0]+50, plant.curorigin[1]+50, plant.curorigin[2]+32 ); - - self.bot_lock_goal = true; - self SetBotGoal( origin, 1 ); - self thread bot_go_plant(plant); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || level.bombPlanted || plant.visibleTeam == "none" || !self isTouching(plant.trigger) || self InLastStand() || isDefined(self getThreat()) || plant IsInUse()) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(plant); - wait 1; - - self ClearBotGoal(); - self.bot_lock_goal = false; - } -} - -/* - Bots go plant the demo bomb -*/ -bot_dem_go_plant(plant) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if ((plant.label == "_b" && level.bombBPlanted) || (plant.label == "_a" && level.bombAPlanted)) - break; - - if (self isTouching(plant.trigger)) - break; - } - - if((plant.label == "_b" && level.bombBPlanted) || (plant.label == "_a" && level.bombAPlanted)) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots spawn kill dom attackers -*/ -bot_dem_attack_spawnkill() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - l1 = level.bombAPlanted; - l2 = level.bombBPlanted; - - for (;;) - { - wait 0.5; - - if (l1 != level.bombAPlanted || l2 != level.bombBPlanted) - break; - } - - self notify("bad_path"); -} - -/* - Bots play demo attackers -*/ -bot_dem_attackers() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "dem" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - if(myTeam != game["attackers"]) - return; - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - bombs = [];//sites with bombs - sites = [];//sites to bomb at - bombed = 0;//exploded sites - for ( i = 0; i < level.bombZones.size; i++ ) - { - bomb = level.bombZones[i]; - - if(isDefined(bomb.bombExploded) && bomb.bombExploded) - { - bombed++; - continue; - } - - if(bomb.label == "_a") - { - if(level.bombAPlanted) - bombs[bombs.size] = bomb; - else - sites[sites.size] = bomb; - - continue; - } - - if(bomb.label == "_b") - { - if(level.bombBPlanted) - bombs[bombs.size] = bomb; - else - sites[sites.size] = bomb; - - continue; - } - } - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - - shouldLet = (game["teamScores"][myteam] > game["teamScores"][otherTeam] && timeleft < 90 && bombed == 1); - //spawnkill conditions - //if we have bombed one site or 1 bomb is planted with lots of time left, spawn kill - //if we want the other team to win for overtime and they do not need to defuse, spawn kill - if(((bombed + bombs.size == 1 && timeleft >= 90) || (shouldLet && !bombs.size)) && randomInt(100) < 95) - { - if(self HasScriptGoal()) - continue; - - spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_defender_start" ); - - if(!spawnPoints.size) - continue; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints ); - - if(DistanceSquared(spawnpoint.origin, self.origin) <= 2048*2048) - continue; - - self SetBotGoal( spawnpoint.origin, 1024 ); - - self thread bot_dem_attack_spawnkill(); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - //let defuse conditions - //if enemy is going to lose and lots of time left, let them defuse to play longer - //or if want to go into overtime near end of the extended game - if(((bombs.size + bombed == 2 && timeleft >= 90) || (shouldLet && bombs.size)) && randomInt(100) < 95) - { - spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_attacker_start" ); - - if(!spawnPoints.size) - continue; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints ); - - if(DistanceSquared(spawnpoint.origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( spawnpoint.origin, 512 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //defend bomb conditions - //if time is running out and we have a bomb planted - if(bombs.size && timeleft < 90 && (!sites.size || randomInt(100) < 95)) - { - site = self bot_array_nearest_curorigin(bombs); - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - if(site IsInUse())//somebody is defusing - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else go plant - if(!sites.size) - continue; - - plant = self bot_array_nearest_curorigin(sites); - - if(!isDefined(plant)) - continue; - - if(!isDefined(plant.bots)) - plant.bots = 0; - - origin = ( plant.curorigin[0]+50, plant.curorigin[1]+50, plant.curorigin[2]+32 ); - - //hang around the site if lots of time left - if(plant.bots > 1 && timeleft >= 60) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_dem_go_plant(plant); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - self.bot_lock_goal = true; - - self SetBotGoal( origin, 1 ); - self thread bot_inc_bots(plant); - self thread bot_dem_go_plant(plant); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || (plant.label == "_b" && level.bombBPlanted) || (plant.label == "_a" && level.bombAPlanted) || plant IsInUse() || !self isTouching(plant.trigger) || self InLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(plant); - wait 1; - - self ClearBotGoal(); - - self.bot_lock_goal = false; - } -} - -/* - Bots play demo defenders -*/ -bot_dem_defenders() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "dem" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - if(myTeam == game["attackers"]) - return; - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - bombs = [];//sites with bombs - sites = [];//sites to bomb at - bombed = 0;//exploded sites - for ( i = 0; i < level.bombZones.size; i++ ) - { - bomb = level.bombZones[i]; - - if(isDefined(bomb.bombExploded) && bomb.bombExploded) - { - bombed++; - continue; - } - - if(bomb.label == "_a") - { - if(level.bombAPlanted) - bombs[bombs.size] = bomb; - else - sites[sites.size] = bomb; - - continue; - } - - if(bomb.label == "_b") - { - if(level.bombBPlanted) - bombs[bombs.size] = bomb; - else - sites[sites.size] = bomb; - - continue; - } - } - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - - shouldLet = (timeleft < 60 && ((bombed == 0 && bombs.size != 2) || (game["teamScores"][myteam] > game["teamScores"][otherTeam] && bombed == 1)) && randomInt(100) < 98); - - //spawnkill conditions - //if nothing to defuse with a lot of time left, spawn kill - //or letting a bomb site to explode but a bomb is planted, so spawnkill - if((!bombs.size && timeleft >= 60 && randomInt(100) < 95) || (shouldLet && bombs.size == 1)) - { - if(self HasScriptGoal()) - continue; - - spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_attacker_start" ); - - if(!spawnPoints.size) - continue; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints ); - - if(DistanceSquared(spawnpoint.origin, self.origin) <= 2048*2048) - continue; - - self SetBotGoal( spawnpoint.origin, 1024 ); - - self thread bot_dem_defend_spawnkill(); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - //let blow up conditions - //let enemy blow up at least one to extend play time - //or if want to go into overtime after extended game - if(shouldLet) - { - spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_defender_start" ); - - if(!spawnPoints.size) - continue; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints ); - - if(DistanceSquared(spawnpoint.origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( spawnpoint.origin, 512 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //defend conditions - //if no bombs planted with little time left - if(!bombs.size && timeleft < 60 && randomInt(100) < 95 && sites.size) - { - site = self bot_array_nearest_curorigin(sites); - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - if(site IsInUse())//somebody is planting - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else go defuse - - if(!bombs.size) - continue; - - defuse = self bot_array_nearest_curorigin(bombs); - - if(!isDefined(defuse)) - continue; - - if(!isDefined(defuse.bots)) - defuse.bots = 0; - - origin = ( defuse.curorigin[0]+50, defuse.curorigin[1]+50, defuse.curorigin[2]+32 ); - - //hang around the site if not in danger of losing - if(defuse.bots > 1 && bombed + bombs.size != 2) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - self thread bot_dem_go_defuse(defuse); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - self.bot_lock_goal = true; - - self SetBotGoal( origin, 1 ); - self thread bot_inc_bots(defuse); - self thread bot_dem_go_defuse(defuse); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || (defuse.label == "_b" && !level.bombBPlanted) || (defuse.label == "_a" && !level.bombAPlanted) || defuse IsInUse() || !self isTouching(defuse.trigger) || self InLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(defuse); - wait 1; - - self ClearBotGoal(); - - self.bot_lock_goal = false; - } -} - -/* - Bots go defuse -*/ -bot_dem_go_defuse(defuse) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (self isTouching(defuse.trigger)) - break; - - if ((defuse.label == "_b" && !level.bombBPlanted) || (defuse.label == "_a" && !level.bombAPlanted)) - break; - } - - if((defuse.label == "_b" && !level.bombBPlanted) || (defuse.label == "_a" && !level.bombAPlanted)) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots go spawn kill -*/ -bot_dem_defend_spawnkill() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (level.bombBPlanted || level.bombAPlanted) - break; - } - - self notify("bad_path"); -} diff --git a/mods/mp_bots/maps/mp/bots/_bot_utility.gsc b/mods/mp_bots/maps/mp/bots/_bot_utility.gsc deleted file mode 100644 index be32501..0000000 --- a/mods/mp_bots/maps/mp/bots/_bot_utility.gsc +++ /dev/null @@ -1,539 +0,0 @@ -/* - _bot_utility - Author: INeedGames - Date: 12/20/2020 - The shared functions for bots -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; - -/* - Returns an array of all the bots in the game. -*/ -getBotArray() -{ - result = []; - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(!player is_bot()) - continue; - - result[result.size] = player; - } - - return result; -} - -/* - Returns a good amount of players. -*/ -getGoodMapAmount() -{ - switch(getdvar("mapname")) - { - default: - return 2; - } -} - -/* - Rounds to the nearest whole number. -*/ -Round(x) -{ - y = int(x); - - if(abs(x) - abs(y) > 0.5) - { - if(x < 0) - return y - 1; - else - return y + 1; - } - else - return y; -} - -/* - Picks a random thing -*/ -PickRandom(arr) -{ - if (!arr.size) - return undefined; - - return arr[randomInt(arr.size)]; -} - -/* - If is defusing -*/ -isDefusing() -{ - return (isDefined(self.isDefusing) && self.isDefusing); -} - -/* - If is defusing -*/ -isPlanting() -{ - return (isDefined(self.isPlanting) && self.isPlanting); -} - -/* - If is defusing -*/ -inLastStand() -{ - return (isDefined(self.laststand) && self.laststand); -} - -/* - Is they the flag carrier men? -*/ -isFlagCarrier() -{ - return (isDefined(self.isFlagCarrier) && self.isFlagCarrier); -} - -/* - If the site is in use -*/ -isInUse() -{ - return (isDefined(self.inUse) && self.inUse); -} - -/* - If the player is carrying a bomb -*/ -isBombCarrier() -{ - return (isDefined(self.isBombCarrier) && self.isBombCarrier); -} - -/* - Gets the bot's difficulty number -*/ -GetBotDiffNum() -{ - num = 0; - - switch (getDvar("bot_difficulty")) - { - case "fu": - num = 3; - break; - case "hard": - num = 2; - break; - case "normal": - num = 1; - break; - case "easy": - default: - num = 0; - break; - } - - return num; -} - -/* - is the weapon alt mode? -*/ -isWeaponAltmode(weap) -{ - if (isStrStart(weap, "gl_") || isStrStart(weap, "ft_") || isStrStart(weap, "mk_")) - return true; - - return false; -} - -/* - Returns a valid grenade launcher weapon -*/ -getValidTube() -{ - weaps = self getweaponslist(); - - for (i = 0; i < weaps.size; i++) - { - weap = weaps[i]; - - if(!self getAmmoCount(weap)) - continue; - - if ((isSubStr(weap, "gl_") && !isSubStr(weap, "_gl_")) || weap == "china_lake_mp") - return weap; - } - - return undefined; -} - -/* - Taken from iw4 script -*/ -waittill_any_timeout( timeOut, string1, string2, string3, string4, string5 ) -{ - if ( ( !isdefined( string1 ) || string1 != "death" ) && - ( !isdefined( string2 ) || string2 != "death" ) && - ( !isdefined( string3 ) || string3 != "death" ) && - ( !isdefined( string4 ) || string4 != "death" ) && - ( !isdefined( string5 ) || string5 != "death" ) ) - self endon( "death" ); - - ent = spawnstruct(); - - if ( isdefined( string1 ) ) - self thread waittill_string( string1, ent ); - - if ( isdefined( string2 ) ) - self thread waittill_string( string2, ent ); - - if ( isdefined( string3 ) ) - self thread waittill_string( string3, ent ); - - if ( isdefined( string4 ) ) - self thread waittill_string( string4, ent ); - - if ( isdefined( string5 ) ) - self thread waittill_string( string5, ent ); - - ent thread _timeout( timeOut ); - - ent waittill( "returned", msg ); - ent notify( "die" ); - return msg; -} - -/* - Used for waittill_any_timeout -*/ -_timeout( delay ) -{ - self endon( "die" ); - - wait( delay ); - self notify( "returned", "timeout" ); -} - -/* - Waits for a host player -*/ -bot_wait_for_host() -{ - host = undefined; - - while (!isDefined(level) || !isDefined(level.players)) - wait 0.05; - - for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05) - { - host = GetHostPlayer(); - - if(isDefined(host)) - break; - - wait 0.05; - } - - if(!isDefined(host)) - return; - - for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05) - { - if(IsDefined( host.pers[ "team" ] )) - break; - - wait 0.05; - } - - if(!IsDefined( host.pers[ "team" ] )) - return; - - for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05) - { - if(host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis") - break; - - wait 0.05; - } -} - -/* - Wrapper for setgoal -*/ -SetBotGoal(where, dist) -{ - self SetScriptGoal(where, dist); - waittillframeend; - self notify("new_goal"); -} - -/* - Weapper for cleargoal -*/ -ClearBotGoal() -{ - self ClearScriptGoal(); - waittillframeend; - self notify("new_goal"); -} - -/* - Freezes bot in place -*/ -botStopMove(what) -{ - self endon("disconnect"); - self endon("death"); - level endon("game_ended"); - - self notify("botStopMove"); - self endon("botStopMove"); - - if (!what) - return; - - og = self.origin; - for (;;) - { - self setVelocity((0,0,0)); - self setOrigin(og); - wait 0.05; - } -} - -/* - Matches a num to a char -*/ -keyCodeToString(a) -{ - b=""; - switch(a) - { - case 0: b= "a"; break; - case 1: b= "b"; break; - case 2: b= "c"; break; - case 3: b= "d"; break; - case 4: b= "e"; break; - case 5: b= "f"; break; - case 6: b= "g"; break; - case 7: b= "h"; break; - case 8: b= "i"; break; - case 9: b= "j"; break; - case 10: b= "k"; break; - case 11: b= "l"; break; - case 12: b= "m"; break; - case 13: b= "n"; break; - case 14: b= "o"; break; - case 15: b= "p"; break; - case 16: b= "q"; break; - case 17: b= "r"; break; - case 18: b= "s"; break; - case 19: b= "t"; break; - case 20: b= "u"; break; - case 21: b= "v"; break; - case 22: b= "w"; break; - case 23: b= "x"; break; - case 24: b= "y"; break; - case 25: b= "z"; break; - case 26: b= "."; break; - case 27: b= " "; break; - } - return b; -} - -/* - Does the extra check when adding bots -*/ -doExtraCheck() -{ - maps\mp\bots\_bot_script::checkTheBots(); -} - -/* - Returns the cone dot (like fov, or distance from the center of our screen). -*/ -getConeDot(to, from, dir) -{ - dirToTarget = VectorNormalize(to-from); - forward = AnglesToForward(dir); - return vectordot(dirToTarget, forward); -} - -/* - Fixes sd bomb planting -*/ -bot_onUsePlantObjectFix( player ) -{ - // planted the bomb - if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) ) - { - level thread bot_bombPlanted( self, player ); - player logString( "bomb planted: " + self.label ); - - // disable all bomb zones except this one - for ( index = 0; index < level.bombZones.size; index++ ) - { - if ( level.bombZones[index] == self ) - continue; - - level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); - } - thread playSoundOnPlayers( "mus_sd_planted"+"_"+level.teamPostfix[player.pers["team"]] ); -// removed plant audio until finalization of assest TODO : new plant sounds when assests are online -// player playSound( "mpl_sd_bomb_plant" ); - player notify ( "bomb_planted" ); - - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_PLANTED_BY", player ); - - if( isdefined(player.pers["plants"]) ) - { - player.pers["plants"]++; - player.plants = player.pers["plants"]; - } - - player maps\mp\_medals::saboteur(); - player maps\mp\gametypes\_persistence::statAddWithGameType( "PLANTS", 1 ); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_planted" ); - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "plant", player ); - //player thread [[level.onXPEvent]]( "plant" ); - } -} - -/* - Fixes sd bomb planting -*/ -bot_bombPlanted( destroyedObj, player ) -{ - maps\mp\gametypes\_globallogic_utils::pauseTimer(); - level.bombPlanted = true; - - destroyedObj.visuals[0] thread maps\mp\gametypes\_globallogic_utils::playTickingSound( "mpl_sab_ui_suitcasebomb_timer" ); - //Play suspense music - level thread maps\mp\gametypes\sd::bombPlantedMusicDelay(); - - //thread maps\mp\gametypes\_globallogic_audio::actionMusicSet(); - - level.tickingObject = destroyedObj.visuals[0]; - - level.timeLimitOverride = true; - setGameEndTime( int( gettime() + (level.bombTimer * 1000) ) ); - setMatchFlag( "bomb_timer", 1 ); - - if ( !level.multiBomb ) - { - level.sdBomb maps\mp\gametypes\_gameobjects::allowCarry( "none" ); - level.sdBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - level.sdBomb maps\mp\gametypes\_gameobjects::setDropped(); - level.sdBombModel = level.sdBomb.visuals[0]; - } - else - { - - for ( index = 0; index < level.players.size; index++ ) - { - if ( isDefined( level.players[index].carryIcon ) ) - level.players[index].carryIcon destroyElem(); - } - - trace = bulletTrace( player.origin + (0,0,20), player.origin - (0,0,2000), false, player ); - - tempAngle = randomfloat( 360 ); - forward = (cos( tempAngle ), sin( tempAngle ), 0); - forward = vectornormalize( forward - vector_scale( trace["normal"], vectordot( forward, trace["normal"] ) ) ); - dropAngles = vectortoangles( forward ); - - level.sdBombModel = spawn( "script_model", trace["position"] ); - level.sdBombModel.angles = dropAngles; - level.sdBombModel setModel( "prop_suitcase_bomb" ); - } - destroyedObj maps\mp\gametypes\_gameobjects::allowUse( "none" ); - destroyedObj maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - /* - destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", undefined ); - destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", undefined ); - destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", undefined ); - destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", undefined ); - */ - label = destroyedObj maps\mp\gametypes\_gameobjects::getLabel(); - - // create a new object to defuse with. - trigger = destroyedObj.bombDefuseTrig; - trigger.origin = level.sdBombModel.origin; - visuals = []; - defuseObject = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, (0,0,32) ); - defuseObject maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - defuseObject maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime ); - defuseObject maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" ); - defuseObject maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" ); - defuseObject maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defuse" + label ); - defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_defend" + label ); - defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defuse" + label ); - defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_defend" + label ); - defuseObject.label = label; - defuseObject.onBeginUse = maps\mp\gametypes\sd::onBeginUse; - defuseObject.onEndUse = maps\mp\gametypes\sd::onEndUse; - defuseObject.onUse = maps\mp\gametypes\sd::onUseDefuseObject; - defuseObject.useWeapon = "briefcase_bomb_defuse_mp"; - - level.defuseObject = defuseObject;//every cod... - - player.isBombCarrier = false; - - maps\mp\gametypes\sd::BombTimerWait(); - setMatchFlag( "bomb_timer", 0 ); - - destroyedObj.visuals[0] maps\mp\gametypes\_globallogic_utils::stopTickingSound(); - - if ( level.gameEnded || level.bombDefused ) - return; - - level.bombExploded = true; - - - - explosionOrigin = level.sdBombModel.origin+(0,0,12); - level.sdBombModel hide(); - - if ( isdefined( player ) ) - { - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, player, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_BLOWUP_BY", player ); - player maps\mp\_medals::bomber(); - player maps\mp\gametypes\_persistence::statAddWithGameType( "DESTRUCTIONS", 1 ); - } - else - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); - - rot = randomfloat(360); - explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + (0,0,50), (0,0,1), (cos(rot),sin(rot),0) ); - triggerFx( explosionEffect ); - - thread playSoundinSpace( "mpl_sd_exp_suitcase_bomb_main", explosionOrigin ); - //thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "SILENT", "both" ); - - if ( isDefined( destroyedObj.exploderIndex ) ) - exploder( destroyedObj.exploderIndex ); - - for ( index = 0; index < level.bombZones.size; index++ ) - level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); - defuseObject maps\mp\gametypes\_gameobjects::disableObject(); - - setGameEndTime( 0 ); - - wait 3; - - maps\mp\gametypes\sd::sd_endGame( game["attackers"], game["strings"]["target_destroyed"] ); -} diff --git a/mods/mp_bots/maps/mp/gametypes/_bot.gsc b/mods/mp_bots/maps/mp/gametypes/_bot.gsc deleted file mode 100644 index 8c2ff7e..0000000 --- a/mods/mp_bots/maps/mp/gametypes/_bot.gsc +++ /dev/null @@ -1,924 +0,0 @@ -/* - _bot - Author: INeedGames - Date: 12/20/2020 - The entry point and manager of the bots. -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\bots\_bot_utility; - -/* - Entry point to the bots -*/ -init() -{ - level.bw_VERSION = "1.1.1"; - - level.bot_offline = false; - - if(getDvar("bots_main") == "") - setDvar("bots_main", true); - - if (!getDvarInt("bots_main")) - return; - - if(getDvar("bots_main_waitForHostTime") == "") - setDvar("bots_main_waitForHostTime", 10.0);//how long to wait to wait for the host player - - if(getDvar("bots_manage_add") == "") - setDvar("bots_manage_add", 0);//amount of bots to add to the game - if(getDvar("bots_manage_fill") == "") - setDvar("bots_manage_fill", 0);//amount of bots to maintain - if(getDvar("bots_manage_fill_spec") == "") - setDvar("bots_manage_fill_spec", true);//to count for fill if player is on spec team - if(getDvar("bots_manage_fill_mode") == "") - setDvar("bots_manage_fill_mode", 0);//fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1 - if(getDvar("bots_manage_fill_kick") == "") - setDvar("bots_manage_fill_kick", false);//kick bots if too many - - if(getDvar("bots_team") == "") - setDvar("bots_team", "autoassign");//which team for bots to join - if(getDvar("bots_team_amount") == "") - setDvar("bots_team_amount", 0);//amount of bots on axis team - if(getDvar("bots_team_force") == "") - setDvar("bots_team_force", false);//force bots on team - if(getDvar("bots_team_mode") == "") - setDvar("bots_team_mode", 0);//counts just bots when 1 - - if(getDvar("bots_loadout_reasonable") == "")//filter out the bad 'guns' and perks - setDvar("bots_loadout_reasonable", false); - if(getDvar("bots_loadout_allow_op") == "")//allows jug, marty and laststand - setDvar("bots_loadout_allow_op", true); - if(getDvar("bots_loadout_rank") == "")// what rank the bots should be around, -1 is around the players, 0 is all random - setDvar("bots_loadout_rank", -1); - if(getDvar("bots_loadout_codpoints") == "")// how much cod points a bot should have, -1 is around the players, 0 is all random - setDvar("bots_loadout_codpoints", -1); - if(getDvar("bots_loadout_prestige") == "")// what pretige the bots will be, -1 is the players, -2 is random - setDvar("bots_loadout_prestige", -1); - - if(getDvar("bots_play_target_other") == "")//bot target non play ents (vehicles) - setDvar("bots_play_target_other", true); - if(getDvar("bots_play_killstreak") == "")//bot use killstreaks - setDvar("bots_play_killstreak", true); - if(getDvar("bots_play_nade") == "")//bots grenade - setDvar("bots_play_nade", true); - if(getDvar("bots_play_knife") == "")//bots knife - setDvar("bots_play_knife", true); - if(getDvar("bots_play_fire") == "")//bots fire - setDvar("bots_play_fire", true); - if(getDvar("bots_play_move") == "")//bots move - setDvar("bots_play_move", true); - if(getDvar("bots_play_take_carepackages") == "")//bots take carepackages - setDvar("bots_play_take_carepackages", true); - if(getDvar("bots_play_obj") == "")//bots play the obj - setDvar("bots_play_obj", true); - if(getDvar("bots_play_camp") == "")//bots camp and follow - setDvar("bots_play_camp", true); - - level.bots = []; - level.bot_decoys = []; - level.bot_planes = []; - - if(!isDefined(game["botWarfare"])) - game["botWarfare"] = true; - - thread fixGamemodes(); - thread onPlayerConnect(); - thread bot_watch_planes(); - - thread handleBots(); - - thread doNonDediBots(); -} - -/* - Thread when any player connects. Starts the threads needed. -*/ -onPlayerConnect() -{ - for(;;) - { - level waittill("connected", player); - - player thread watch_shoot(); - player thread watch_grenade(); - player thread connected(); - } -} - -/* - Starts the threads for bots. -*/ -handleBots() -{ - thread diffBots(); - thread teamBots(); - addBots(); - - while(!level.intermission) - wait 0.05; - - setDvar("bots_manage_add", getBotArray().size); -} - -/* - When a bot disconnects. -*/ -onDisconnect() -{ - self waittill("disconnect"); - - level.bots = array_remove(level.bots, self); -} - -/* - Whena player connects -*/ -connected() -{ - self endon("disconnect"); - - if (!self is_bot()) - return; - - self thread maps\mp\bots\_bot_script::connected(); - - level.bots[level.bots.size] = self; - self thread onDisconnect(); - - level notify("bot_connected", self); -} - -/* - Handles the diff of the bots -*/ -diffBots() -{ - for (;;) - { - wait 1.5; - - bot_set_difficulty(GetDvar( #"bot_difficulty" )); - } -} - -/* - Setup bot dvars for non dedicated clients -*/ -doNonDediBots() -{ - if (!GetDvarInt( #"xblive_basictraining" )) - return; - - if (isDefined(game[ "bots_spawned" ])) - return; - - game[ "bots_spawned" ] = true; - - if(getDvar("bot_enemies_extra") == "") - setDvar("bot_enemies_extra", 0); - if(getDvar("bot_friends_extra") == "") - setDvar("bot_friends_extra", 0); - - bot_friends = GetDvarInt( #"bot_friends" ); - bot_enemies = GetDvarInt( #"bot_enemies" ); - - bot_enemies += GetDvarInt("bot_enemies_extra"); - bot_friends += GetDvarInt("bot_friends_extra"); - - bot_wait_for_host(); - host = GetHostPlayer(); - - team = "allies"; - if(isDefined(host) && isDefined(host.pers[ "team" ]) && (host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis")) - team = host.pers[ "team" ]; - - setDvar("bots_manage_add", bot_enemies + bot_friends - 1); - setDvar("bots_manage_fill", bot_enemies + bot_friends); - setDvar("bots_manage_fill_mode", 0); - setDvar("bots_manage_fill_kick", true); - setDvar("bots_manage_fill_spec", false); - - setDvar("bots_team", "custom"); - - if (team == "axis") - setDvar("bots_team_amount", bot_friends); - else - setDvar("bots_team_amount", bot_enemies); - - setDvar("bots_team_force", true); - setDvar("bots_team_mode", 0); -} - -/* - Sets the difficulty of the bots -*/ -bot_set_difficulty( difficulty ) -{ - if ( difficulty == "fu" ) - { - SetDvar( "sv_botMinDeathTime", "250" ); - SetDvar( "sv_botMaxDeathTime", "500" ); - SetDvar( "sv_botMinFireTime", "100" ); - SetDvar( "sv_botMaxFireTime", "300" ); - SetDvar( "sv_botYawSpeed", "14" ); - SetDvar( "sv_botYawSpeedAds", "14" ); - SetDvar( "sv_botPitchUp", "-5" ); - SetDvar( "sv_botPitchDown", "10" ); - SetDvar( "sv_botFov", "160" ); - SetDvar( "sv_botMinAdsTime", "3000" ); - SetDvar( "sv_botMaxAdsTime", "5000" ); - SetDvar( "sv_botMinCrouchTime", "100" ); - SetDvar( "sv_botMaxCrouchTime", "400" ); - SetDvar( "sv_botTargetLeadBias", "2" ); - SetDvar( "sv_botMinReactionTime", "30" ); - SetDvar( "sv_botMaxReactionTime", "100" ); - SetDvar( "sv_botStrafeChance", "1" ); - SetDvar( "sv_botMinStrafeTime", "3000" ); - SetDvar( "sv_botMaxStrafeTime", "6000" ); - SetDvar( "scr_help_dist", "512" ); - SetDvar( "sv_botAllowGrenades", "1" ); - SetDvar( "sv_botMinGrenadeTime", "1500" ); - SetDvar( "sv_botMaxGrenadeTime", "4000" ); - SetDvar( "sv_botSprintDistance", "512" ); - SetDvar( "sv_botMeleeDist", "80" ); - } - else if ( difficulty == "hard" ) - { - SetDvar( "sv_botMinDeathTime", "250" ); - SetDvar( "sv_botMaxDeathTime", "500" ); - SetDvar( "sv_botMinFireTime", "400" ); - SetDvar( "sv_botMaxFireTime", "600" ); - SetDvar( "sv_botYawSpeed", "8" ); - SetDvar( "sv_botYawSpeedAds", "10" ); - SetDvar( "sv_botPitchUp", "-5" ); - SetDvar( "sv_botPitchDown", "10" ); - SetDvar( "sv_botFov", "100" ); - SetDvar( "sv_botMinAdsTime", "3000" ); - SetDvar( "sv_botMaxAdsTime", "5000" ); - SetDvar( "sv_botMinCrouchTime", "100" ); - SetDvar( "sv_botMaxCrouchTime", "400" ); - SetDvar( "sv_botTargetLeadBias", "2" ); - SetDvar( "sv_botMinReactionTime", "400" ); - SetDvar( "sv_botMaxReactionTime", "700" ); - SetDvar( "sv_botStrafeChance", "0.9" ); - SetDvar( "sv_botMinStrafeTime", "3000" ); - SetDvar( "sv_botMaxStrafeTime", "6000" ); - SetDvar( "scr_help_dist", "384" ); - SetDvar( "sv_botAllowGrenades", "1" ); - SetDvar( "sv_botMinGrenadeTime", "1500" ); - SetDvar( "sv_botMaxGrenadeTime", "4000" ); - SetDvar( "sv_botSprintDistance", "512" ); - SetDvar( "sv_botMeleeDist", "80" ); - } - else if ( difficulty == "easy" ) - { - SetDvar( "sv_botMinDeathTime", "1000" ); - SetDvar( "sv_botMaxDeathTime", "2000" ); - SetDvar( "sv_botMinFireTime", "900" ); - SetDvar( "sv_botMaxFireTime", "1000" ); - SetDvar( "sv_botYawSpeed", "2" ); - SetDvar( "sv_botYawSpeedAds", "2.5" ); - SetDvar( "sv_botPitchUp", "-20" ); - SetDvar( "sv_botPitchDown", "40" ); - SetDvar( "sv_botFov", "50" ); - SetDvar( "sv_botMinAdsTime", "3000" ); - SetDvar( "sv_botMaxAdsTime", "5000" ); - SetDvar( "sv_botMinCrouchTime", "4000" ); - SetDvar( "sv_botMaxCrouchTime", "6000" ); - SetDvar( "sv_botTargetLeadBias", "8" ); - SetDvar( "sv_botMinReactionTime", "1200" ); - SetDvar( "sv_botMaxReactionTime", "1600" ); - SetDvar( "sv_botStrafeChance", "0.1" ); - SetDvar( "sv_botMinStrafeTime", "3000" ); - SetDvar( "sv_botMaxStrafeTime", "6000" ); - SetDvar( "scr_help_dist", "256" ); - SetDvar( "sv_botAllowGrenades", "0" ); - SetDvar( "sv_botSprintDistance", "1024" ); - SetDvar( "sv_botMeleeDist", "40" ); - } - else // 'normal' difficulty - { - SetDvar( "sv_botMinDeathTime", "500" ); - SetDvar( "sv_botMaxDeathTime", "1000" ); - SetDvar( "sv_botMinFireTime", "600" ); - SetDvar( "sv_botMaxFireTime", "800" ); - SetDvar( "sv_botYawSpeed", "4" ); - SetDvar( "sv_botYawSpeedAds", "5" ); - SetDvar( "sv_botPitchUp", "-10" ); - SetDvar( "sv_botPitchDown", "20" ); - SetDvar( "sv_botFov", "70" ); - SetDvar( "sv_botMinAdsTime", "3000" ); - SetDvar( "sv_botMaxAdsTime", "5000" ); - SetDvar( "sv_botMinCrouchTime", "2000" ); - SetDvar( "sv_botMaxCrouchTime", "4000" ); - SetDvar( "sv_botTargetLeadBias", "4" ); - SetDvar( "sv_botMinReactionTime", "800" ); - SetDvar( "sv_botMaxReactionTime", "1200" ); - SetDvar( "sv_botStrafeChance", "0.6" ); - SetDvar( "sv_botMinStrafeTime", "3000" ); - SetDvar( "sv_botMaxStrafeTime", "6000" ); - SetDvar( "scr_help_dist", "256" ); - SetDvar( "sv_botAllowGrenades", "1" ); - SetDvar( "sv_botMinGrenadeTime", "1500" ); - SetDvar( "sv_botMaxGrenadeTime", "4000" ); - SetDvar( "sv_botSprintDistance", "512" ); - SetDvar( "sv_botMeleeDist", "80" ); - difficulty = "normal"; - } - - if ( level.gameType == "oic" && difficulty == "fu" ) - { - SetDvar( "sv_botMinReactionTime", "400" ); - SetDvar( "sv_botMaxReactionTime", "500" ); - SetDvar( "sv_botMinAdsTime", "1000" ); - SetDvar( "sv_botMaxAdsTime", "2000" ); - } - - if ( level.gameType == "oic" && ( difficulty == "hard" || difficulty == "fu" ) ) - { - SetDvar( "sv_botSprintDistance", "256" ); - } - - if (!getDvarInt("bots_play_nade")) - SetDvar( "sv_botAllowGrenades", "0" ); - - SetDvar( "bot_difficulty", difficulty ); - SetDvar( "scr_bot_difficulty", difficulty ); - SetDvar( "splitscreen_botDifficulty", difficulty ); -} - -/* - A server thread for monitoring all bot's teams for custom server settings. -*/ -teamBots() -{ - for(;;) - { - wait 1.5; - teamAmount = getDvarInt("bots_team_amount"); - toTeam = getDvar("bots_team"); - - alliesbots = 0; - alliesplayers = 0; - axisbots = 0; - axisplayers = 0; - - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(!isDefined(player.pers["team"])) - continue; - - if(player is_bot()) - { - if(player.pers["team"] == "allies") - alliesbots++; - else if(player.pers["team"] == "axis") - axisbots++; - } - else - { - if(player.pers["team"] == "allies") - alliesplayers++; - else if(player.pers["team"] == "axis") - axisplayers++; - } - } - - allies = alliesbots; - axis = axisbots; - - if(!getDvarInt("bots_team_mode")) - { - allies += alliesplayers; - axis += axisplayers; - } - - if(toTeam != "custom") - { - if(getDvarInt("bots_team_force")) - { - if(toTeam == "autoassign") - { - if(abs(axis - allies) > 1) - { - toTeam = "axis"; - if(axis > allies) - toTeam = "allies"; - } - } - - if(toTeam != "autoassign") - { - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(!isDefined(player.pers["team"])) - continue; - - if(!player is_bot()) - continue; - - if(player.pers["team"] == toTeam) - continue; - - if (toTeam == "allies") - player thread [[level.allies]](); - else if (toTeam == "axis") - player thread [[level.axis]](); - else - player thread [[level.spectator]](); - break; - } - } - } - } - else - { - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(!isDefined(player.pers["team"])) - continue; - - if(!player is_bot()) - continue; - - if(player.pers["team"] == "axis") - { - if(axis > teamAmount) - { - player thread [[level.allies]](); - break; - } - } - else - { - if(axis < teamAmount) - { - player thread [[level.axis]](); - break; - } - else if(player.pers["team"] != "allies") - { - player thread [[level.allies]](); - break; - } - } - } - } - } -} - -/* - A server thread for monitoring all bot's in game. Will add and kick bots according to server settings. - - Dedis only spawn bots when developer is not 0 - This makes the dedi unstable and can crash - - Patch the executable to skip the pregame and make it so bots can spawn - - pregame: - in the ShouldDoPregame sub: - B8 01 00 00 00: mov eax, 1 -change to: B8 00 00 00 00: mov eax, 0 - 0x4F6C77 in rektmp - 0x4598A7 in bg - - - spawnbots: - in the SV_AddTestClient sub: - 0F 85 A4 00 00 00: jnz -change to: 0F 84 A4 00 00 00: jz - 0x6B6180 in rektmp - 0x4682F0 in bg - - - allow changing g_antilag dvar: - set the byte from 0x40 to 0x00 - - 0x53B1B2 in rekt - 0x59B6F2 in bg -*/ -addBots() -{ - level endon ( "game_ended" ); - - bot_wait_for_host(); - - for (;;) - { - wait 1.5; - - botsToAdd = GetDvarInt("bots_manage_add"); - - if(botsToAdd > 0) - { - SetDvar("bots_manage_add", 0); - - if(botsToAdd > 64) - botsToAdd = 64; - - for(; botsToAdd > 0; botsToAdd--) - { - level add_bot(); - wait 0.25; - } - } - - fillMode = getDVarInt("bots_manage_fill_mode"); - - if(fillMode == 2 || fillMode == 3) - setDvar("bots_manage_fill", getGoodMapAmount()); - - fillAmount = getDvarInt("bots_manage_fill"); - - players = 0; - bots = 0; - spec = 0; - - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if (player isdemoclient()) - continue; - - if(player is_bot()) - bots++; - else if(!isDefined(player.pers["team"]) || (player.pers["team"] != "axis" && player.pers["team"] != "allies")) - spec++; - else - players++; - } - - if(fillMode == 4) - { - axisplayers = 0; - alliesplayers = 0; - - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(player is_bot()) - continue; - - if(!isDefined(player.pers["team"])) - continue; - - if(player.pers["team"] == "axis") - axisplayers++; - else if(player.pers["team"] == "allies") - alliesplayers++; - } - - result = fillAmount - abs(axisplayers - alliesplayers) + bots; - - if (players == 0) - { - if(bots < fillAmount) - result = fillAmount-1; - else if (bots > fillAmount) - result = fillAmount+1; - else - result = fillAmount; - } - - bots = result; - } - - if (!randomInt(999)) - { - setDvar("testclients_doreload", true); - wait 0.1; - setDvar("testclients_doreload", false); - doExtraCheck(); - } - - amount = bots; - if(fillMode == 0 || fillMode == 2) - amount += players; - if(getDVarInt("bots_manage_fill_spec")) - amount += spec; - - if(amount < fillAmount) - setDvar("bots_manage_add", 1); - else if(amount > fillAmount && getDvarInt("bots_manage_fill_kick")) - { - tempBot = PickRandom(getBotArray()); - if (isDefined(tempBot)) - kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" ); - } - } -} - -/* - Adds a bot to the game. -*/ -add_bot() -{ - bot = addtestclient(); - - if (isdefined(bot)) - { - bot.pers["isBot"] = true; - bot.equipment_enabled = true; - bot.pers[ "bot_perk" ] = true; - bot.pers["isBotWarfare"] = true; - bot thread maps\mp\bots\_bot_script::added(); - } -} - -/* - Gives the bot loadout -*/ -bot_give_loadout() -{ - self maps\mp\bots\_bot_loadout::bot_give_loadout(); -} - -/* - Fired when the bot is damaged -*/ -bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ) -{ - self maps\mp\bots\_bot_script::bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ); -} - -/* - Bot is idle -*/ -bot_is_idle() -{ - if ( !IsDefined( self ) ) - { - return false; - } - - if ( !IsAlive( self ) ) - { - return false; - } - - if ( !self is_bot() ) - { - return false; - } - - if ( self inLastStand() ) - { - return false; - } - - if ( self HasScriptGoal() ) - { - return false; - } - - if ( IsDefined( self GetThreat() ) ) - { - return false; - } - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - return false; - } - - if(self UseButtonPressed()) - return false; - - if(self isPlanting()) - return false; - - if(self isDefusing()) - return false; - - return true; -} - -/* - Watch all players grenades -*/ -watch_grenade() -{ - self endon("disconnect"); - - self.bot_scrambled = false; - for(;;) - { - self waittill("grenade_fire", g, name); - if(name == "scrambler_mp") - { - g thread watch_scrambler(); - } - else if(name == "nightingale_mp") - { - self thread watch_decoy(g); - } - } -} - -/* - Watch the decoy grenade -*/ -watch_decoy(g) -{ - g.team = self.team; - - level.bot_decoys[level.bot_decoys.size] = g; - - g waittill("death"); - - for ( entry = 0; entry < level.bot_decoys.size; entry++ ) - { - if ( level.bot_decoys[entry] == g ) - { - while ( entry < level.bot_decoys.size-1 ) - { - level.bot_decoys[entry] = level.bot_decoys[entry+1]; - entry++; - } - level.bot_decoys[entry] = undefined; - break; - } - } -} - -/* - Attach a trigger to the scrambler -*/ -watch_scrambler() -{ - trig = spawn( "trigger_radius", self.origin + (0, 0, -1000), 0, 1000, 2000 ); - - self scramble_nearby(trig); - - trig delete(); -} - -/* - Watch when players enter the scrambler trigger -*/ -scramble_nearby(trig) -{ - self endon("death"); - self endon("hacked"); - - while(!isDefined(self.owner) || !isDefined(self.owner.team)) - wait 0.05; - - self.team = self.owner.team; - for(;;) - { - trig waittill("trigger", player); - - if (!isDefined(player) || !isDefined(player.team)) - continue; - - if(self maps\mp\gametypes\_weaponobjects::isStunned()) - continue; - - if(isDefined(self.owner) && player == self.owner) - continue; - - if(level.teamBased && self.team == player.team) - continue; - - player thread scramble_player(); - } -} - -/* - Scramble this player -*/ -scramble_player() -{ - self notify("scramble_nearby"); - self endon("scramble_nearby"); - - self.bot_scrambled = true; - wait 0.1; - - if(isDefined(self)) - self.bot_scrambled = false; -} - -/* - Watch when a player shoots -*/ -watch_shoot() -{ - self endon("disconnect"); - - self.bot_firing = false; - for(;;) - { - self waittill( "weapon_fired" ); - self thread doFiringThread(); - } -} - -/* - When a player fires -*/ -doFiringThread() -{ - self endon("disconnect"); - self endon("weapon_fired"); - - self.bot_firing = true; - wait 1; - self.bot_firing = false; -} - -/* - Watches the planes -*/ -bot_watch_planes() -{ - for(;;) - { - level waittill("uav_update"); - - ents = GetEntArray("script_model", "classname"); - for(i = 0; i < ents.size; i++) - { - ent = ents[i]; - - if(isDefined(ent.bot_plane)) - continue; - - if(ent.model != level.spyplanemodel) - continue; - - thread watch_plane(ent); - } - } -} - -/* - Watches the plane -*/ -watch_plane(ent) -{ - ent.bot_plane = true; - - level.bot_planes[level.bot_planes.size] = ent; - - ent waittill_any("death", "delete", "leaving"); - - for ( entry = 0; entry < level.bot_planes.size; entry++ ) - { - if ( level.bot_planes[entry] == ent ) - { - while ( entry < level.bot_planes.size-1 ) - { - level.bot_planes[entry] = level.bot_planes[entry+1]; - entry++; - } - level.bot_planes[entry] = undefined; - break; - } - } -} - -/* - Fix xp in sd -*/ -bot_killBoost() -{ - return false; -} - -/* - Fixes sd -*/ -fixGamemodes() -{ - for(i=0;i<19;i++) - { - if(isDefined(level.bombZones) && level.gametype == "sd") - { - level.isKillBoosting = ::bot_killBoost; - for(i = 0; i < level.bombZones.size; i++) - level.bombZones[i].onUse = ::bot_onUsePlantObjectFix; - break; - } - - wait 0.05; - } -} diff --git a/mods/patch_mp/clientscripts/mp/_claymore.csc b/mods/patch_mp/clientscripts/mp/_claymore.csc deleted file mode 100644 index ced5712..0000000 --- a/mods/patch_mp/clientscripts/mp/_claymore.csc +++ /dev/null @@ -1,30 +0,0 @@ -#include clientscripts\mp\_utility; -#include clientscripts\mp\_rewindobjects; - -init( localClientNum ) -{ - level._effect["fx_claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" ); -} - -spawned( localClientNum ) -{ - self endon( "entityshutdown" ); - - self waittill_dobj(localClientNum); - - while( true ) - { - if( IsDefined( self.stunned ) && self.stunned ) - { - wait( 0.1 ); - continue; - } - - - self.claymoreLaserFXId = PlayFXOnTag( localClientNum, level._effect["fx_claymore_laser"], self, "tag_fx" ); - - self waittill( "stunned" ); - stopfx(localClientNum, self.claymoreLaserFXId); - - } -} diff --git a/mods/patch_mp/maps/mp/_dogs.gsc b/mods/patch_mp/maps/mp/_dogs.gsc deleted file mode 100644 index 53df591..0000000 --- a/mods/patch_mp/maps/mp/_dogs.gsc +++ /dev/null @@ -1,1957 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; - -init() -{ - level.friendlyDogModel = "german_shepherd"; - level.enemyDogModel = "german_shepherd_black"; - - precacheModel(level.friendlyDogModel); - precacheModel(level.enemyDogModel); - precacheItem("dog_bite_mp"); - precacheShellshock("dog_bite"); - - level.maxDogsAttackingPerPlayer = 2; - level.spawnTimeWaitMin = 2; - level.spawnTimeWaitMax = 5; - - level.no_dogs = false; - - init_node_arrays(); - - if ( level.no_pathnodes ) - level.no_dogs = true; - - regenTime = 5; - level.dogHealth_RegularRegenDelay = regenTime * 1000; - level.dogHealthRegenDisabled = (level.dogHealth_RegularRegenDelay <= 0); - - dog_dvar_update(); - thread dog_dvar_updater(); - thread dog_usage_init(); - - thread init_all_preexisting_dogs(); - - /# - level thread devgui_dog_think(); - #/ - -// create_dogs(); -} - -initKillstreak() -{ - // register the dog hardpoint - if ( maps\mp\gametypes\_tweakables::getTweakableValue( "killstreak", "allowdogs" ) ) - { - maps\mp\gametypes\_hardpoints::registerKillstreak("dogs_mp", "dogs_mp", "killstreak_dogs","dogs_used", ::useKillstreakDogs, true); - maps\mp\gametypes\_hardpoints::registerKillstreakStrings("dogs_mp", &"KILLSTREAK_EARNED_DOGS", &"KILLSTREAK_DOGS_NOT_AVAILABLE", &"KILLSTREAK_DOGS_INBOUND" ); - maps\mp\gametypes\_hardpoints::registerKillstreakDialog("dogs_mp", "mpl_killstreak_dogs", "kls_dogs_used", "","kls_dogs_enemy", "", "kls_dogs_ready"); - maps\mp\gametypes\_hardpoints::registerKillstreakDevDvar("dogs_mp", "scr_givedogs"); - - maps\mp\gametypes\_hardpoints::registerKillstreakAltWeapon("dogs_mp", "dog_bite_mp" ); - } -} - -useKillstreakDogs(hardpointType) -{ - if ( self maps\mp\_killstreakrules::isKillstreakAllowed( hardpointType, self.team ) == false ) - return false; - - self notify( "called_in_the_dogs" ); - level notify( "called_in_the_dogs" ); - team = self.team; - otherTeam = level.otherTeam[team]; - - if ( level.teambased ) - { - thread maps\mp\gametypes\_battlechatter_mp::onKillstreakUsed( "dogs", otherTeam ); - //for ( i = 0; i < level.players.size; i++ ) - //{ - // player = level.players[i]; - // playerteam = player.team; - // if ( isdefined( playerteam ) ) - // { - // if ( playerteam == team ) - // { - // player iprintln( &"MP_DOGS_INBOUND", self.name ); - // player iprintln( "\n"); - // } - // } - //} - } - - self maps\mp\gametypes\_hardpoints::playKillstreakStartDialog( "dogs_mp", team, true); - self maps\mp\gametypes\_persistence::statAdd( "DOGS_USED", 1, false ); - level.globalKillstreaksCalled++; - self maps\mp\gametypes\_globallogic_score::incItemStatByReference( "killstreak_dogs", 1, "used" ); - - if ( maps\mp\gametypes\_tweakables::getTweakableValue( "team", "allowHardpointStreakAfterDeath" ) ) - { - ownerDeathCount = self.deathCount; - } - else - { - ownerDeathCount = self.pers["hardPointItemDeathCount" + hardpointType]; - } - if ( self maps\mp\_killstreakrules::killstreakStart("dogs_mp", self.team) == false ) - return false; - - self thread maps\mp\_dogs::dog_manager_spawn_dogs( team, otherTeam, ownerDeathCount ); - self thread playerDisconnectWatcher(); - - return true; -} - -playerDisconnectWatcher() -{ - level endon( "dogs done" ); - level endon( "dogs leaving" ); - - self waittill( "disconnect" ); - - level notify( "dogs leaving" ); -} - -pick_random_nodes( from, count ) -{ - to = []; - - if ( from.size < count ) - { - to = from; - } - else - { - for ( i = 0; i < count; i++ ) - { - to[i] = from[randomInt(from.size)]; - } - } - - return to; -} - -init_node_arrays() -{ - nodes = getallnodes(); - - pathnodes = []; - - for ( i = 0; i < nodes.size; i++ ) - { - // anything with a scriptworthy is automatically a non-patrol node - if ( isdefined(nodes[i].script_noteworthy) /* || nodes[i].script_noteworthy != "" */) - continue; - - if ( isdefined(nodes[i].targetname) && nodes[i].targetname == "traverse" ) - continue; - - pathnodes[pathnodes.size] = nodes[i]; - } - - if ( pathnodes.size == 0 ) - { - level.no_pathnodes = true; - } - else - { - level.no_pathnodes = false; - } - - level.patrolnodes = []; - - level.patrolnodes = pick_random_nodes( pathnodes, 200 ); - - level.dogspawnnodes = []; - level.dogspawnnodes = getnodearray( "spawn", "script_noteworthy"); - - if ( level.dogspawnnodes.size == 0 ) - { -/# - println("DOG PATHING: Could not find spawn nodes"); -#/ - // pick a random set of spawn nodes so we do not tax the spawn logic to much - level.dogspawnnodes = pick_random_nodes( pathnodes, 20 ); - } - - level.dogexitnodes = []; - level.dogexitnodes = getnodearray( "exit", "script_noteworthy"); - - if ( level.dogexitnodes.size == 0 ) - { -/# - println("DOG PATHING: Could not find exit nodes"); -#/ - // pick a random set of spawn nodes so we do not tax the spawn logic to much - level.dogexitnodes = pick_random_nodes( pathnodes, 20 ); - } -} - -dog_dvar_update() -{ - level.dog_time = dog_get_dvar_int("scr_dog_time", "60" ); - level.dog_health = dog_get_dvar_int("scr_dog_health", "100" ); - level.dog_count = dog_get_dvar_int("scr_dog_count", "8" ); - level.dog_count_max_at_once = dog_get_dvar_int("scr_dog_max_at_once", "4" ); - - if ( level.dog_count < level.dog_count_max_at_once ) - { - level.dog_count_max_at_once = level.dog_count; - } - - level.dog_debug = dog_get_dvar_int("debug_dogs", "0" ); - level.dog_debug_sound = dog_get_dvar_int("debug_dog_sound", "0" ); - level.dog_debug_anims = dog_get_dvar_int("debug_dog_anims", "0" ); - level.dog_debug_anims_ent = dog_get_dvar_int("debug_dog_anims_ent", "0" ); - level.dog_debug_turns = dog_get_dvar_int("debug_dog_turns", "0" ); - level.dog_debug_orient = dog_get_dvar_int("debug_dog_orient", "0" ); - level.dog_debug_usage = dog_get_dvar_int("debug_dog_usage", "1" ); -} - -dog_dvar_updater() -{ - dogs_in_the_bsp = count_preexisting_dogs(); - while(1) - { - dog_dvar_update(); - - // 16 is max allowed by engine - if ( level.dog_count + dogs_in_the_bsp > 16 ) - { - level.dog_count = 16 - dogs_in_the_bsp; - } - wait (1); - } -} - -count_preexisting_dogs() -{ - dogs = getentarray( "actor_enemy_dog_mp", "classname" ); - - alive_count = 0; - for ( i = 0; i < dogs.size; i ++ ) - { - if ( !isdefined(dogs[i]) ) - continue; - - if ( !isai(dogs[i]) ) - continue; - - alive_count++; - } - - return alive_count; -} - -init_all_preexisting_dogs() -{ - array_thread( getentarray( "actor_enemy_dog_mp", "classname" ), ::preexisting_init_dog ); -} - -preexisting_init_dog() -{ - self init_dog(); -} - -dog_set_model() -{ - self setModel(level.friendlyDogModel); - self setEnemyModel(level.enemyDogModel); -} - -init_dog() -{ - if ( !isai(self) ) - return; - - self.aiteam = "axis"; - - self.animTree = "dog.atr"; - self.type = "dog"; - self.accuracy = 0.2; - self.health = level.dog_health; - self.maxhealth = level.dog_health; // this currently does not hook to code maxhealth - self.aiweapon = "dog_bite_mp"; - self.secondaryweapon = ""; - self.sidearm = ""; - self.grenadeAmmo = 0; - self.goalradius = 128; - self.noDodgeMove = true; - self.ignoreSuppression = true; - self.suppressionThreshold = 1; - self.disableArrivals = false; - self.pathEnemyFightDist = 512; - self.halt_patrol = false; - - self.meleeAttackDist = 102; - - self dog_set_model(); - - self thread dogHealthRegen(); - - self thread selfDefenseChallenge(); -} - -get_spawn_node( team ) -{ - if ( !level.teambased ) - { - node = dog_pick_node_away_from_enemy( level.dogspawnnodes, team ); - } - else - { - node = dog_pick_node_near_team( level.dogspawnnodes, team ); - } - - bbPrint( "mpdogspawnused: x %f y %f z %f weight %f num_players %i num_dogs %i dist_all %f dist_allies %f dist_axis %f dist_dogs %f", node.origin, node.weight, node.numPlayersAtLastUpdate, node.numDogsAtLastUpdate, node.distSum["all"], node.distSum["allies"], node.distSum["axis"], node.distSum["dogs"] ); - - return node; -} - -dog_watch_for_owner_team_change(owner) -{ - self endon("death"); - owner endon("disconnect"); - - while(1) - { - owner waittill("joined_team"); - - if ( owner.team != self.aiteam ) - { - self clearentityowner(); - self notify("clear_owner"); - return; - } - } -} - -dog_set_owner( owner, team, requiredDeathCount ) -{ -/# - // no owner so he attacks the person who called him in - if ( level.dog_debug ) - return; -#/ - - if ( !isdefined( owner ) ) - return; - - // if the owner switches teams while dogs are still spawning - // do not set the owner - if ( level.teambased && isplayer(owner) && owner.team != team ) - return; - - self setentityowner(owner); - - self.requiredDeathCount = requiredDeathCount; - - self thread dog_watch_for_owner_team_change(owner); - - self endon("death"); - owner waittill("disconnect"); - - self clearentityowner(); -} - -dog_create_spawn_influencer() -{ - self maps\mp\gametypes\_spawning::create_dog_influencers(); -} - -dog_manager_spawn_dog( owner, team, spawn_node, index, requiredDeathCount ) -{ - dog = level.dog_spawner spawnactor(); - - dog forceteleport(spawn_node.origin, spawn_node.angles); - dog setgoalnode( spawn_node ); - dog.spawnnode = spawn_node; - dog show(); - - dog init_dog(); - dog dog_set_team(team); - dog dog_set_model(); - dog dog_create_spawn_influencer(); - dog thread dog_set_owner(owner, team, requiredDeathCount ); - - dog thread dog_usage(index); - dog thread dog_owner_kills(); - dog thread dog_clean_up(); - dog thread dog_notify_level_on_death(); - dog dog_thread_behavior_function(); - dog thread maps\mp\gametypes\_weapons::monitor_dog_special_grenades(); - - - return dog; -} - -get_debug_team( team ) -{ -/# - if ( level.teambased ) - { - otherteam = getotherteam(team); - if ( level.dog_debug ) - return otherteam; - } -#/ - - if ( !level.teambased ) - return "free"; - - return team; -} - -dog_manager_spawn_dogs( team, enemyTeam, deathCount ) -{ - // this can hit if the round ends as the dogs are getting called in - level endon("dogs done"); - level endon("dogs leaving"); - self endon("disconnect"); - - if ( level.no_dogs ) - return; - - team = get_debug_team(team); - - requiredDeathCount = deathCount; - - level.dog_spawner = getent("dog_spawner","targetname" ); - - if ( !isdefined( level.dog_spawner ) ) - return; - - level.dogs = []; - - /# - level.debug_spawn_nodes = []; - #/ - - level thread dog_manager_game_ended(); - level thread dog_manager_dog_alive_tracker( team ); - level thread dog_manager_dog_time_limit(); - level thread dog_usage_monitor(); - - for ( i = 0; i < level.dog_count_max_at_once; i++ ) - { - node = self get_spawn_node( team ); - - /# - level.debug_spawn_nodes[ level.debug_spawn_nodes.size ] = node; - #/ - - level.dogs[i] = dog_manager_spawn_dog( self, team, node, i, requiredDeathCount ); - - wait ( randomfloat( level.spawnTimeWaitMin, level.spawnTimeWaitMax ) ); - } - - level thread dog_manager_spawn_more_dogs_on_death( self, level.dog_count - level.dog_count_max_at_once, team ); -} - -dog_manager_spawn_more_dogs_on_death( owner, count, team ) -{ - level endon("dogs done"); - level endon("dogs leaving"); - - while( count > 0 ) - { - level waittill("dog died"); - - // wait a bit before sending in the next dog - wait ( randomfloat( level.spawnTimeWaitMin, level.spawnTimeWaitMax ) ); - - node = get_spawn_node( team ); - level.dogs[level.dogs.size] = dog_manager_spawn_dog( owner, team, node, level.dogs.size ); - count -= 1; - } - -/# - iprintln("All dogs spawned"); -#/ - level notify("all dogs spawned"); -} - -dog_manager_dog_time_limit() -{ - level endon("dogs done"); - level endon("dogs leaving"); - wait( level.dog_time ); - -/# - dog_debug_print( "time limit hit notify dogs leaving" ); -#/ - // this will shut this thread down - level notify("dogs leaving"); -} - -dog_cleanup_wait( wait_for, notify_name ) -{ - self endon( notify_name ); - self waittill( wait_for ); - self notify( notify_name, wait_for ); -} - -dog_cleanup_waiter() -{ - self thread dog_cleanup_wait( "all dogs spawned", "start_tracker"); - self thread dog_cleanup_wait( "dogs leaving", "start_tracker" ); - - self waittill( "start_tracker", wait_for ); -/# - self dog_debug_print("starting dog_manager_dog_alive_tracker reason " + wait_for ); -#/ -} - -dog_manager_dog_alive_tracker( team ) -{ - level dog_cleanup_waiter(); - - while (1) - { - alive_count = 0; - for ( i = 0; i < level.dogs.size; i ++ ) - { - if ( !isdefined(level.dogs[i]) ) - continue; - - if ( !isalive(level.dogs[i]) ) - continue; - - alive_count++; - } - - if ( alive_count == 0 ) - { - wait(1); - dog_manager_delete_dogs(); - level notify("dogs done"); - maps\mp\_killstreakrules::killstreakStop( "dogs_mp", team ); - return; - } - - wait (1); - } -} - -dog_manager_delete_dogs() -{ - for ( i = 0; i < level.dogs.size; i ++ ) - { - if ( !isdefined(level.dogs[i]) ) - continue; - - level.dogs[i] delete(); - } - - level.dogs = undefined; -} - -dog_manager_game_ended() -{ - level waittill("game_ended"); - make_all_dogs_leave(); -} - -make_all_dogs_leave() -{ -/# - dog_debug_print( "make_all_dogs_leave notify dogs leaving" ); -#/ - level notify("dogs leaving"); -} - -dog_set_team( team ) -{ - self.aiteam = team; -} - -dog_clean_up() -{ - self endon("death"); - self endon("leaving"); - level waittill("dogs leaving"); - - thread dog_leave(); -} - -dog_notify_level_on_death() -{ - self endon("leaving"); - self waittill("death"); - - // do not access self past this point as its not valid - - level notify("dog died"); -} - -dog_thread_behavior_function() -{ - self thread dog_patrol_when_no_enemy(); -// self thread dog_attack_when_enemy(); -} - -dog_leave() -{ - self notify("leaving"); - - self thread dog_leave_failsafe(); - - // have them run to an exit node - self clearentitytarget(); - self.ignoreall = true; - self.goalradius = 30; - self setgoalnode( self dog_get_exit_node() ); - - self waittill("goal"); - self delete(); -} - -dog_leave_failsafe() -{ - self endon("death"); - - start_origin = self.origin; - - wait(2); - - if ( distance( start_origin, self.origin ) < 10 ) - { -/# - println( "DOG DELETE FAILSAFE: Dog appears to be stuck at " + self.origin ); -#/ - self delete(); - return; - } - - wait(20); -/# - println( "DOG DELETE FAILSAFE: Dog has not gotten to it's delete point after 20 seconds. Currently at " + self.origin ); -#/ - self delete(); -} - - -dog_patrol_when_no_enemy() -{ - self endon("death"); - self endon("leaving"); - - while(1) - { - if ( !isdefined(self.enemy) ) - { - self dog_debug_print( "no enemy starting patrol" ); - self thread dog_patrol(); - } - - self waittill("enemy"); - } -} - -dog_patrol_wait( wait_for, notify_name ) -{ - self endon("attacking"); - dog_wait( wait_for, notify_name ); -} - -dog_wait( wait_for, notify_name ) -{ - self endon("death"); - self endon("leaving"); - self endon( notify_name ); - - self waittill( wait_for ); - self notify( notify_name, wait_for ); -} - -dog_patrol_path_waiter() -{ - self thread dog_patrol_wait( "bad_path", "next_patrol_point"); - self thread dog_patrol_wait( "goal", "next_patrol_point" ); - - self waittill( "next_patrol_point", wait_for ); -/# - self dog_debug_print("ending patrol wait recieved " + wait_for ); -#/ -} - -dog_patrol() -{ - self endon("death"); - self endon("enemy"); - self endon("leaving"); - self endon("attacking"); - self notify("on patrol"); - - self dog_patrol_debug(); - - node = level.patrolnodes[randomInt(level.patrolnodes.size)]; - - while(1) - { - if ( self.halt_patrol ) - { - self setgoalpos( self.origin ); - wait( 1 ); - continue; - } - - for( count = 0; count < 25; count++ ) - { - newnode = level.patrolnodes[randomInt(level.patrolnodes.size)]; - - if ( DistanceSquared( node.origin, newnode.origin ) > ( 1024 * 1024 ) ) - { - node = newnode; - break; - } - - node = newnode; - } - - // ignore all nodes with a script_noteworthy on them - if ( !isdefined( node.script_noteworthy ) ) - { -/# - self dog_debug_print("patroling to node at " + node.origin ); -#/ - self setgoalnode( node ); - self dog_patrol_path_waiter(); - } - } -} - -dog_wait_print( wait_for ) -{ -/# - self endon("kill dog_wait_prints"); - - self waittill( wait_for ); - self notify("kill dog_wait_prints"); - self dog_debug_print( "PATROL ENDING " + wait_for ); -#/ -} - -dog_patrol_debug() -{ - self thread dog_wait_print("death"); - self thread dog_wait_print("enemy"); - self thread dog_wait_print("leaving"); - self thread dog_wait_print("attacking"); -} - -dog_get_dvar_int( dvar, def ) -{ - return int( dog_get_dvar( dvar, def ) ); -} - -// dvar set/fetch/check -dog_get_dvar( dvar, def ) -{ - if ( getdvar( dvar ) != "" ) - return getdvarfloat( dvar ); - else - { - setdvar( dvar, def ); - return def; - } -} - -dog_usage_init() -{ - level.dog_usage = []; - - for ( index = 0; index < level.dog_count; index++ ) - { - level.dog_usage[index] = spawnStruct(); - level.dog_usage[index].spawn_time = 0; - level.dog_usage[index].death_time = 0; - level.dog_usage[index].kills = 0; - level.dog_usage[index].died = false; - } -} - -dog_usage_monitor() -{ - start_time = GetTime(); - - level waittill("dogs done"); - - index = 0; - total_kills = 0; - last_alive = 0; - all_dead = true; - alive_count = 0; - never_spawned_count = 0; - total_count = 0; - - for ( index = 0; index < level.dog_count; index++ ) - { - total_count++; - - if ( level.dog_usage[index].spawn_time == 0 ) - { - never_spawned_count++; - continue; - } - else if ( !level.dog_usage[index].died ) - { - alive_count++; - all_dead = false; - } - - seconds = (level.dog_usage[index].death_time - level.dog_usage[index].spawn_time) / 1000; - if ( seconds > last_alive ) - { - last_alive = seconds; - } - - total_kills += level.dog_usage[index].kills; - } - -/# - seconds = (GetTime() - start_time) / 1000; - msg = "Dogs- Time: " + seconds + " Kills: " + total_kills + " Last: " + last_alive; - - // make sure that the dogs have printed everything - wait (1); - iprintln( msg ); - println( msg ); - - level.debug_spawn_nodes = []; -#/ -} - -dog_usage(index) -{ - level.dog_usage[index].spawn_time = GetTime(); - level.dog_usage[index].death_time = 0; - level.dog_usage[index].kills = 0; - level.dog_usage[index].died = false; - - self thread dog_usage_kills(index); - self thread dog_usage_time_alive(index); -} - -dog_usage_kills(index) -{ - self endon("death"); - - while(1) - { - self waittill("killed", player); - level.dog_usage[index].kills++; - } -} - -dog_owner_kills(index) -{ - if ( !isdefined( self.script_owner ) ) - return; - - self endon("clear_owner"); - self endon("death"); - self.script_owner endon("disconnect"); - - while(1) - { - self waittill("killed", player); - - if ( IsDefined( self.script_owner ) ) - { - self.script_owner notify( "dog_handler" ); - } - } -} - -dog_usage_time_alive(index) -{ - self endon("leaving"); - - self waittill("death"); - level.dog_usage[index].death_time = GetTime(); - level.dog_usage[index].died = true; - - seconds = (level.dog_usage[index].death_time - level.dog_usage[index].spawn_time) / 1000 ; -/# - iprintln( "Dog#" + index + " killed. Alive for: "+ seconds + " seconds. Kills: " + level.dog_usage[index].kills ); - println( "Dog#" + index + " killed. Alive for: "+ seconds + " seconds. Kills: " + level.dog_usage[index].kills ); -#/ -} - - -dogHealthRegen() -{ - self endon("death"); - self endon("end_healthregen"); - - if ( self.health <= 0 ) - { - assert( !isalive( self ) ); - return; - } - - maxhealth = self.health; - oldhealth = maxhealth; - dog = self; - health_add = 0; - - regenRate = 0.1; // 0.017; - veryHurt = false; - - lastSoundTime_Recover = 0; - hurtTime = 0; - newHealth = 0; - - for (;;) - { - wait (0.05); - if (dog.health == maxhealth) - { - veryHurt = false; - continue; - } - - if (dog.health <= 0) - return; - - wasVeryHurt = veryHurt; - ratio = dog.health / maxHealth; - if (ratio <= 0.55) - { - veryHurt = true; - if (!wasVeryHurt) - { - hurtTime = gettime(); - } - } - - if (dog.health >= oldhealth) - { - if (gettime() - hurttime < level.dogHealth_RegularRegenDelay) - continue; - - if ( level.dogHealthRegenDisabled ) - continue; - - if (veryHurt) - { - newHealth = ratio; - if (gettime() > hurtTime + 3000) - newHealth += regenRate; - } - else - newHealth = 1; - - if ( newHealth >= 1.0 ) - { - newHealth = 1.0; - } - - if (newHealth <= 0) - { - // dog is dead - return; - } - - dog setnormalhealth (newHealth); - oldhealth = dog.health; - continue; - } - - oldhealth = dog.health; - - health_add = 0; - hurtTime = gettime(); - } -} - - -selfDefenseChallenge() -{ - self waittill ("death", attacker); - - if ( isdefined( attacker ) && isPlayer( attacker ) ) - { - if (isdefined ( self.script_owner ) && self.script_owner == attacker) - return; - if ( level.teambased && isdefined ( self.script_owner ) && self.script_owner.team == attacker.team ) - return; - - attacker notify ("selfdefense_dog"); - } - -} - -dog_get_exit_node() -{ - return getclosest( self.origin, level.dogexitnodes ); -} - -dog_debug_print( message ) -{ -/# - if ( level.dog_debug ) - { - if ( isai( self ) ) - { - println( " " + gettime() + " DOG " + self getentnum() + ": " + message ); - } - else - { - println( " " + gettime() + " DOGS: " + message ); - } - } -#/ -} - -// ================================================ - -getAllOtherPlayers() -{ - aliveplayers = []; - - // Make a list of fully connected, non-spectating, alive players - for(i = 0; i < level.players.size; i++) - { - if ( !isdefined( level.players[i] ) ) - continue; - player = level.players[i]; - - if ( player.sessionstate != "playing" || player == self ) - continue; - - aliveplayers[aliveplayers.size] = player; - } - return aliveplayers; -} - -dog_pick_node_near_team( nodes, team ) -{ - // There are no valid nodes in the map - if(!isdefined(nodes)) - return undefined; - - if ( !level.teambased ) - return dog_pick_node_away_from_enemy(level.dogspawnnodes, team); - - //prof_begin("basic_spawnlogic"); - - initWeights(nodes); - update_all_nodes( nodes, team ); - - //prof_begin(" getteams"); - obj = spawnstruct(); - getAllAlliedAndEnemyPlayers(obj, team); - //prof_end(" getteams"); - - numplayers = obj.allies.size + obj.enemies.size; - - alliedDistanceWeight = 2; - dogDistanceWeight = 3; - - //prof_begin(" sumdists"); - myTeam = team; - - enemyTeam = getOtherTeam( myTeam ); - for (i = 0; i < nodes.size; i++) - { - node = nodes[i]; - - node.weight = 0; - - if ( node.numPlayersAtLastUpdate > 0 ) - { - allyDistSum = node.distSum[ myTeam ]; - enemyDistSum = node.distSum[ enemyTeam ]; - - // high enemy distance is good, high ally distance is bad - node.weight = (enemyDistSum - alliedDistanceWeight*allyDistSum) / node.numPlayersAtLastUpdate; - } - - if ( node.numDogsAtLastUpdate > 0 ) - { - dogDistSum = node.distSum[ "dogs" ]; - - // high ally distance is bad - node.weight -= (dogDistSum*dogDistSum) / node.numDogsAtLastUpdate; - } - } - //prof_end(" sumdists"); - - //prof_end("basic_spawnlogic"); - - //prof_begin("complex_spawnlogic"); - - avoidSpawnReuse(nodes); - avoidEnemies(nodes, team, true); - - //prof_end("complex_spawnlogic"); - - result = dog_pick_node_final(nodes, team, obj.enemies); - - return result; -} - - -dog_pick_node_away_from_enemy(nodes, team) -{ - // There are no valid nodes in the map - if(!isdefined(nodes)) - return undefined; - - initWeights(nodes); - update_all_nodes( nodes, team ); - - aliveplayers = getAllOtherPlayers(); - - // new logic: we want most players near idealDist units away. - // players closer than badDist units will be considered negatively - idealDist = 1600; - badDist = 1200; - - if (aliveplayers.size > 0) - { - for (i = 0; i < nodes.size; i++) - { - totalDistFromIdeal = 0; - nearbyBadAmount = 0; - for (j = 0; j < aliveplayers.size; j++) - { - dist = distance(nodes[i].origin, aliveplayers[j].origin); - - if (dist < badDist) - nearbyBadAmount += (badDist - dist) / badDist; - - distfromideal = abs(dist - idealDist); - totalDistFromIdeal += distfromideal; - } - avgDistFromIdeal = totalDistFromIdeal / aliveplayers.size; - - wellDistancedAmount = (idealDist - avgDistFromIdeal) / idealDist; - - // wellDistancedAmount is between -inf and 1, 1 being best (likely around 0 to 1) - // nearbyBadAmount is between 0 and inf, - // and it is very important that we get a bad weight if we have a high nearbyBadAmount. - - nodes[i].weight = wellDistancedAmount - nearbyBadAmount * 2 + randomfloat(.2); - } - } - - avoidSpawnReuse(nodes); - avoidEnemies(nodes, team, true); - - return dog_pick_node_final(nodes, team, aliveplayers); -} - -dog_pick_node_random( nodes, team ) -{ - // There are no valid nodes in the map - if(!isdefined(nodes)) - return undefined; - - // randomize order - for(i = 0; i < nodes.size; i++) - { - j = randomInt(nodes.size); - node = nodes[i]; - nodes[i] = nodes[j]; - nodes[j] = node; - } - - return dog_pick_node_final(nodes, team, undefined, false); -} - -// selects a node, preferring ones with heigher weights (or toward the beginning of the array if no weights). -// also does final things like setting self.lastnode to the one chosen. -// this takes care of avoiding telefragging, so it doesn't have to be considered by any other function. -dog_pick_node_final( nodes, team, enemies, useweights ) -{ - //prof_begin( "dog_pick_node_final" ); - - bestnode = undefined; - - if ( !isdefined( nodes ) || nodes.size == 0 ) - return undefined; - - if ( !isdefined( useweights ) ) - useweights = true; - - if ( useweights ) - { - // choose node with best weight - // (if a tie, choose randomly from the best) - bestnode = getBestWeightedNode( nodes, team, enemies ); - } - else - { - // (only place we actually get here from is dog_pick_node_random() ) - // no weights. prefer nodes toward beginning of array - for ( i = 0; i < nodes.size; i++ ) - { - if ( positionWouldTelefrag( nodes[i].origin ) ) - continue; - - bestnode = nodes[i]; - break; - } - } - - if ( !isdefined( bestnode ) ) - { - // couldn't find a useable node! all will telefrag. - if ( useweights ) - { - // at this point, forget about weights. just take a random one. - bestnode = nodes[randomint(nodes.size)]; - } - else - { - bestnode = nodes[0]; - } - } - - self finalizeNodeChoice( bestnode ); - - //prof_end( "dog_pick_node_final" ); - - return bestnode; -} - -getBestWeightedNode( nodes, team, enemies ) -{ - maxSightTracedNodes = 3; - for ( try = 0; try <= maxSightTracedNodes; try++ ) - { - bestnodes = []; - bestweight = undefined; - bestnode = undefined; - for ( i = 0; i < nodes.size; i++ ) - { - if ( !isdefined( bestweight ) || nodes[i].weight > bestweight ) - { - if ( positionWouldTelefrag( nodes[i].origin ) ) - continue; - - bestnodes = []; - bestnodes[0] = nodes[i]; - bestweight = nodes[i].weight; - } - else if ( nodes[i].weight == bestweight ) - { - if ( positionWouldTelefrag( nodes[i].origin ) ) - continue; - - bestnodes[bestnodes.size] = nodes[i]; - } - } - if ( bestnodes.size == 0 ) - return undefined; - - // pick randomly from the available nodes with the best weight - bestnode = bestnodes[randomint( bestnodes.size )]; - - if ( try == maxSightTracedNodes ) - return bestnode; - - if ( isdefined( bestnode.lastSightTraceTime ) && bestnode.lastSightTraceTime == gettime() ) - return bestnode; - - if ( !lastMinuteSightTraces( bestnode, team, enemies ) ) - return bestnode; - - penalty = getLosPenalty(); - bestnode.weight -= penalty; - - bestnode.lastSightTraceTime = gettime(); - } -} - -finalizeNodeChoice( node ) -{ - time = getTime(); - - self.lastnode = node; - self.lastspawntime = time; - node.lastspawneddog = self; - node.lastspawntime = time; -} - -getLosPenalty() -{ - return 100000; -} - -lastMinuteSightTraces( node, dog_team, enemies ) -{ - //prof_begin("lastMinuteSightTraces"); - - team = "all"; - if ( level.teambased ) - team = getOtherTeam( dog_team ); - - if ( !isdefined( enemies ) ) - return false; - - closest = undefined; - closestDistsq = undefined; - secondClosest = undefined; - secondClosestDistsq = undefined; - - for ( i = 0; i < enemies.size; i++ ) - { - player = node.nearbyPlayers[team][i]; - - if ( !isdefined( player ) ) - continue; - if ( player.sessionstate != "playing" ) - continue; - if ( player == self ) - continue; - - distsq = distanceSquared( node.origin, player.origin ); - if ( !isdefined( closest ) || distsq < closestDistsq ) - { - secondClosest = closest; - secondClosestDistsq = closestDistsq; - - closest = player; - closestDistSq = distsq; - } - else if ( !isdefined( secondClosest ) || distsq < secondClosestDistSq ) - { - secondClosest = player; - secondClosestDistSq = distsq; - } - } - - if ( isdefined( closest ) ) - { - if ( bullettracepassed( closest.origin + (0,0,50), node.origin + (0,0,50), false, undefined) ) - return true; - } - if ( isdefined( secondClosest ) ) - { - if ( bullettracepassed( secondClosest.origin + (0,0,50), node.origin + (0,0,50), false, undefined) ) - return true; - } - - return false; -} - -update_all_nodes( nodes, team ) -{ - for ( i = 0; i < nodes.size; i++ ) - { - nodeUpdate( nodes[i], team ); - } -} - -avoidEnemies(nodes, team,teambased) -{ - lospenalty = getLosPenalty(); - - otherteam = "axis"; - if ( team == "axis" ) - otherteam = "allies"; - - minDistTeam = otherteam; - - if ( !teambased ) - { - minDistTeam = "all"; - } - - avoidWeight = GetDvarFloat( #"scr_spawn_enemyavoidweight"); - if ( avoidWeight != 0 ) - { - nearbyEnemyOuterRange = GetDvarFloat( #"scr_spawn_enemyavoiddist"); - nearbyEnemyOuterRangeSq = nearbyEnemyOuterRange * nearbyEnemyOuterRange; - nearbyEnemyPenalty = 1500 * avoidWeight; // typical base weights tend to peak around 1500 or so. this is large enough to upset that while only locally dominating it. - nearbyEnemyMinorPenalty = 800 * avoidWeight; // additional negative weight for distances up to 2 * nearbyEnemyOuterRange - - lastAttackerOrigin = (-99999,-99999,-99999); - lastDeathPos = (-99999,-99999,-99999); - - for ( i = 0; i < nodes.size; i++ ) - { - // penalty for nearby enemies - mindist = nodes[i].minDist[minDistTeam]; - if ( mindist < nearbyEnemyOuterRange*2 ) - { - penalty = nearbyEnemyMinorPenalty * (1 - mindist / (nearbyEnemyOuterRange*2)); - if ( mindist < nearbyEnemyOuterRange ) - penalty += nearbyEnemyPenalty * (1 - mindist / nearbyEnemyOuterRange); - if ( penalty > 0 ) - { - nodes[i].weight -= penalty; - } - } - } - } - - // DEBUG - //prof_end(" spawn_sc"); -} - -nodeUpdate( node, team ) -{ - if ( level.teambased ) - { - node.sights["axis"] = 0; - node.sights["allies"] = 0; - - node.nearbyPlayers["axis"] = []; - node.nearbyPlayers["allies"] = []; - } - else - { - node.sights = 0; - - node.nearbyPlayers["all"] = []; - } - - node.nearbyDogs = []; - - nodedir = node.forward; - - debug = false; - - node.distSum["all"] = 0; - node.distSum["allies"] = 0; - node.distSum["axis"] = 0; - node.distSum["dogs"] = 0; - - node.minDist["all"] = 9999999; - node.minDist["allies"] = 9999999; - node.minDist["axis"] = 9999999; - node.minDist["dogs"] = 9999999; - - node.numPlayersAtLastUpdate = 0; - node.numDogsAtLastUpdate = 0; - - for (i = 0; i < level.players.size; i++) - { - player = level.players[i]; - - if ( player.sessionstate != "playing" ) - continue; - - diff = player.origin - node.origin; - diff = (diff[0], diff[1], 0); - dist = length( diff ); // needs to be actual distance for distSum value - - player_team = "all"; - if ( level.teambased ) - player_team = player.team; - - if ( dist < 1024 ) - { - node.nearbyPlayers[player_team][node.nearbyPlayers[player_team].size] = player; - } - - if ( dist < node.minDist[player_team] ) - node.minDist[player_team] = dist; - - node.distSum[ player_team ] += dist; - node.numPlayersAtLastUpdate++; - } - - for (i = 0; i < level.dogs.size; i++) - { - dog = level.dogs[i]; - - if ( !isdefined(dog) || !isalive(dog) ) - continue; - - diff = dog.origin - node.origin; - diff = (diff[0], diff[1], 0); - dist = length( diff ); // needs to be actual distance for distSum value - - if ( dist < 1024 ) - { - node.nearbyDogs[node.nearbyDogs.size] = dog; - } - - if ( dist < node.minDist["dogs"] ) - node.minDist["dogs"] = dist; - - node.distSum[ "dogs" ] += dist; - node.numDogsAtLastUpdate++; - } -} - -initWeights(nodes) -{ - for (i = 0; i < nodes.size; i++) - nodes[i].weight = 0; -} - -getAllAlliedAndEnemyPlayers( obj, team ) -{ - if ( level.teambased ) - { - if ( team == "allies" ) - { - obj.allies = level.alivePlayers["allies"]; - obj.enemies = level.alivePlayers["axis"]; - } - else - { - assert( team == "axis" ); - obj.allies = level.alivePlayers["axis"]; - obj.enemies = level.alivePlayers["allies"]; - } - } - else - { - obj.allies = []; - obj.enemies = level.activePlayers; - } -} - -avoidSpawnReuse(nodes) -{ - time = getTime(); - - maxtime = 3*1000; - maxdistSq = 1024 * 1024; - - for (i = 0; i < nodes.size; i++) - { - node = nodes[i]; - - if (!isdefined(node.lastspawntime)) - continue; - - timepassed = time - node.lastspawntime; - if (timepassed < maxtime) - { - worsen = 1000 * (1 - timepassed/maxtime); - node.weight -= worsen; - } - } -} - -flash_dogs( area ) -{ - self endon("disconnect"); - - if ( isdefined(level.dogs) ) - { - for (i = 0; i < level.dogs.size; i++) - { - dog = level.dogs[i]; - - if ( !isalive(dog) ) - continue; - if ( dog istouching(area) ) - { - do_flash = true; - if ( isPlayer( self ) ) - { - if ( level.teamBased && (dog.aiteam == self.team) ) - { - do_flash = false; - } - else if ( !level.teambased && isdefined(dog.script_owner) && self == dog.script_owner ) - { - do_flash = false; - } - } - - if ( isdefined( dog.lastFlashed ) && dog.lastFlashed + 1500 > gettime() ) - { - do_flash = false; - } - - if ( do_flash ) - { - dog setFlashBanged( true, 500 ); - dog.lastFlashed = gettime(); - } - } - } - } -} - -/# - -devgui_dog_think() -{ - SetDvar( "devgui_dog", "" ); - - level.debug_spawn_nodes = []; - - for( ;; ) - { - cmd = GetDvar( #"devgui_dog" ); - - switch( cmd ) - { - case "spawn_friendly": - player = getHostPlayer(); - devgui_dog_spawn( player.team ); - break; - - case "spawn_enemy": - player = getHostPlayer(); - devgui_dog_spawn( getOtherTeam( player.team ) ); - break; - - case "delete_dogs": - devgui_dog_delete(); - break; - - case "dog_camera": - devgui_dog_camera(); - break; - - case "spawn_crate": - devgui_crate_spawn(); - break; - - case "delete_crates": - devgui_crate_delete(); - break; - - case "show_spawns": - devgui_spawn_show(); - break; - - case "show_exits": - devgui_exit_show(); - break; - - case "debug_spawn": - level thread devgui_debug_spawn(); - break; - } - - if ( cmd != "" ) - { - SetDvar( "devgui_dog", "" ); - } - - wait( 0.5 ); - } -} - -devgui_dog_spawn( team ) -{ - player = getHostPlayer(); - - dog_spawner = GetEnt( "dog_spawner", "targetname" ); - - if( !IsDefined( dog_spawner ) ) - { - iprintln( "No dog spawners found in map" ); - } - else - { - iprintln( "Spawning dog at your crosshair position" ); - } - - // Trace to where the player is looking - direction = player GetPlayerAngles(); - direction_vec = AnglesToForward( direction ); - eye = player GetEye(); - - scale = 8000; - direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - - dog = dog_spawner spawnactor(); - - direction_vec = player.origin - trace["position"]; - direction = VectorToAngles( direction_vec ); - - dog forceteleport( trace["position"], direction ); - //dog setgoalnode( spawn_node ); - //dog.spawnnode = spawn_node; - dog show(); - - dog init_dog(); - dog dog_set_team( team ); - dog dog_set_model(); - //dog dog_create_spawn_influencer(); - dog thread dog_set_owner( player, team, 5 ); - - dog thread dog_usage( 0 ); - dog thread dog_owner_kills(); - dog thread dog_clean_up(); - dog thread dog_notify_level_on_death(); - dog dog_thread_behavior_function(); - dog thread maps\mp\gametypes\_weapons::monitor_dog_special_grenades(); - - if ( !IsDefined( level.dogs ) ) - { - level.dogs = []; - } - - level.dogs[ level.dogs.size ] = dog; -} - -devgui_dog_delete() -{ - player = getHostPlayer(); - player CameraActivate( false ); - - if ( !IsDefined( level.dogs ) ) - { - return; - } - - for ( i = 0; i < level.dogs.size; i++ ) - { - dog = level.dogs[i]; - - if ( IsDefined( dog.cam ) ) - { - dog.cam delete(); - } - } - - dog_manager_delete_dogs(); -} - -devgui_dog_camera() -{ - player = getHostPlayer(); - - if ( !IsDefined( level.devgui_dog_camera ) ) - { - level.devgui_dog_camera = 0; - } - - if ( !IsDefined( level.dogs ) ) - { - level.devgui_dog_camera = undefined; - player CameraActivate( false ); - return; - } - - dog = undefined; - - for ( i = 0; i < level.dogs.size; i++ ) - { - dog = level.dogs[i]; - - if ( !IsDefined( dog ) || !IsAlive( dog ) ) - { - dog = undefined; - continue; - } - - if ( !IsDefined( dog.cam ) ) - { - forward = AnglesToForward( dog.angles ); - dog.cam = Spawn( "script_model", dog.origin + ( 0, 0, 50 ) + forward * -100 ); - dog.cam SetModel( "tag_origin" ); - dog.cam LinkTo( dog ); - } - - if ( dog GetEntityNumber() <= level.devgui_dog_camera ) - { - dog = undefined; - continue; - } - - break; - } - - if ( IsDefined( dog ) ) - { - level.devgui_dog_camera = dog GetEntityNumber(); - - player CameraSetPosition( dog.cam ); - player CameraSetLookAt( dog ); - player CameraActivate( true ); - } - else - { - level.devgui_dog_camera = undefined; - player CameraActivate( false ); - } -} - -devgui_crate_spawn() -{ - player = getHostPlayer(); - - // Trace to where the player is looking - direction = player GetPlayerAngles(); - direction_vec = AnglesToForward( direction ); - eye = player GetEye(); - - scale = 8000; - direction_vec = ( direction_vec[0] * scale, direction_vec[1] * scale, direction_vec[2] * scale ); - trace = bullettrace( eye, eye + direction_vec, 0, undefined ); - - //trace[ "position" ] = player.origin + ( 0, 0, 4096 ); - - killCamEnt = spawn( "script_model", player.origin ); - level thread maps\mp\gametypes\_supplydrop::dropCrate( trace[ "position" ] + ( 0, 0, 25 ), direction, "supplydrop_mp", player, player.team, killcamEnt ); -} - -devgui_crate_delete() -{ - if ( !IsDefined( level.devgui_crates ) ) - { - return; - } - - for ( i = 0; i < level.devgui_crates.size; i++ ) - { - level.devgui_crates[i] delete(); - } - - level.devgui_crates = []; -} - -devgui_spawn_show() -{ - if ( !IsDefined( level.dog_spawn_show ) ) - { - level.dog_spawn_show = true; - } - else - { - level.dog_spawn_show = !level.dog_spawn_show; - } - - if ( !level.dog_spawn_show ) - { - level notify( "hide_dog_spawns" ); - return; - } - - color = ( 0, 1, 0 ); - - for ( i = 0; i < level.dogspawnnodes.size; i++ ) - { - maps\mp\gametypes\_dev::showOneSpawnPoint( level.dogspawnnodes[i], color, "hide_dog_spawns", 32, "dog_spawn" ); - } -} - -devgui_exit_show() -{ - if ( !IsDefined( level.dog_exit_show ) ) - { - level.dog_exit_show = true; - } - else - { - level.dog_exit_show = !level.dog_exit_show; - } - - if ( !level.dog_exit_show ) - { - level notify( "hide_dog_exits" ); - return; - } - - color = ( 1, 0, 0 ); - - for ( i = 0; i < level.dogexitnodes.size; i++ ) - { - maps\mp\gametypes\_dev::showOneSpawnPoint( level.dogexitnodes[i], color, "hide_dog_exits", 32, "dog_exit" ); - } -} - -devgui_debug_spawn() -{ - level endon( "devgui_debug_spawn" ); - - if ( !IsDefined( level.devgui_debug_spawn ) ) - { - level.devgui_debug_spawn = true; - } - else - { - level.devgui_debug_spawn = undefined; - level notify( "debug_spawn_refresh" ); - level notify( "devgui_debug_spawn" ); - } - - yellow = ( 1, 1, 0 ); - green = ( 0, 1, 0 ); - - for ( ;; ) - { - for ( i = 0; i < level.dogspawnnodes.size; i++ ) - { - - text = []; - text["weight"] = "n/a"; - text["num_players"] = "n/a"; - text["num_dogs"] = "n/a"; - - text["dist_all"] = "n/a"; - text["dist_allies"] = "n/a"; - text["dist_axis"] = "n/a"; - text["dist_dogs"] = "n/a"; - - node = level.dogspawnnodes[i]; - color = yellow; - - if ( IsDefined( node.weight ) ) - text["weight"] = node.weight; - - if ( IsDefined( node.numPlayersAtLastUpdate ) ) - text["num_players"] = node.numPlayersAtLastUpdate; - - if ( IsDefined( node.numDogsAtLastUpdate ) ) - text["num_dogs"] = node.numDogsAtLastUpdate; - - if ( IsDefined( node.distSum ) ) - { - text["dist_all"] = node.distSum["all"]; - text["dist_allies"] = node.distSum["allies"]; - text["dist_axis"] = node.distSum["axis"]; - text["dist_dogs"] = node.distSum["dogs"]; - } - - if ( node_used( node ) ) - { - color = green; - } - - print_text( node.origin, text, 64, color, "debug_spawn_refresh" ); - maps\mp\gametypes\_dev::showOneSpawnPoint( node, color, "debug_spawn_refresh", 32, "" ); - } - - wait( 1 ); - level notify( "debug_spawn_refresh" ); - } -} - -print_text( origin, text_array, height, color, notification ) -{ - keys = GetArrayKeys( text_array ); - z = height; - - for ( i = keys.size - 1; i >= 0; i-- ) - { - string = keys[i] + ": " + text_array[ keys[i] ]; - - thread maps\mp\gametypes\_dev::print3DUntilNotified( origin + ( 0, 0, z ), string, color, 1, 0.5, notification ); - z = z - 6; - } -} - -node_used( node ) -{ - for ( i = 0; i < level.debug_spawn_nodes.size; i++ ) - { - if ( node == level.debug_spawn_nodes[i] ) - { - return true; - } - } - - return false; -} - -#/ diff --git a/mods/patch_mp/maps/mp/_utility.gsc b/mods/patch_mp/maps/mp/_utility.gsc deleted file mode 100644 index c36eac6..0000000 --- a/mods/patch_mp/maps/mp/_utility.gsc +++ /dev/null @@ -1,2202 +0,0 @@ -#include common_scripts\utility; -#include maps\mp\gametypes\_hud_util; - -triggerOff() -{ - if (!isdefined (self.realOrigin)) - { - self.realOrigin = self.origin; - } - - if (self.origin == self.realorigin) - { - self.origin += (0, 0, -10000); - } -} - -triggerOn() -{ - if (isDefined (self.realOrigin) ) - { - self.origin = self.realOrigin; - } -} - -error(msg) -{ - println("^c*ERROR* ", msg); - wait .05; // waitframe -/# - if (GetDvar( #"debug") != "1") - assertmsg("This is a forced error - attach the log file"); -#/ -} - -warning( msg ) -{ - println( "^1WARNING: " + msg ); -} - -/* - ============= -///ScriptDocBegin -"Name: spawn_array_struct()" -"Summary: Creates a struct with an attribute named "a" which is an empty array. Array structs are useful for passing around arrays by reference." -"Module: Array" -"CallOn: " -"Example: fxemitters = spawn_struct_array(); fxemitters.a[ fxemitters.size ] = new_emitter;" -"SPMP: both" -///ScriptDocEnd - ============= - */ -spawn_array_struct() -{ - s= SpawnStruct(); - s.a= []; - return s; -} - -/* -============= -///ScriptDocBegin -"Name: within_fov( , , , )" -"Summary: Returns true if < end_origin > is within the players field of view, otherwise returns false." -"Module: Vector" -"CallOn: " -"MandatoryArg: : starting origin for FOV check( usually the players origin )" -"MandatoryArg: : angles to specify facing direction( usually the players angles )" -"MandatoryArg: : origin to check if it's in the FOV" -"MandatoryArg: : cosine of the FOV angle to use" -"Example: qBool = within_fov( level.player.origin, level.player.angles, target1.origin, cos( 45 ) );" -"SPMP: multiplayer" -///ScriptDocEnd -============= -*/ -within_fov( start_origin, start_angles, end_origin, fov ) -{ - normal = VectorNormalize( end_origin - start_origin ); - forward = AnglesToForward( start_angles ); - dot = VectorDot( forward, normal ); - - return dot >= fov; -} - - /* - ============= -///ScriptDocBegin -"Name: append_array_struct( , )" -"Summary: Append the array elements in the (2nd) array struct parameter to the array in the (1st) array struct parameter." -"Module: Array" -"CallOn: " -"MandatoryArg: : Destination - Elements from .a[] are appended to .a[]" -"MandatoryArg: : Source - Elements from .a[] are appended to .a[]" -"Example: players = spawn_array_struct(); worst_enemies = built_worst_enemies(); append_array_struct( players, worst_enemies ;" -"SPMP: both" -///ScriptDocEnd - ============= - */ -append_array_struct( - dst_s, ///< struct.a[] - src_s ) ///< struct.a[] -{ - for ( i= 0; i < src_s.a.size; i++ ) - { - dst_s.a[ dst_s.a.size ]= src_s.a[ i ]; - } -} - -exploder( num ) -{ - [[ level.exploderFunction ]]( num ); -} - -exploder_stop( num ) -{ - stop_exploder( num ); -} - -exploder_sound() -{ - if(isdefined(self.script_delay)) - { - wait self.script_delay; - } - - self playSound(level.scr_sound[self.script_sound]); -} - -cannon_effect() -{ - if( isdefined( self.v[ "repeat" ] ) ) - { - for( i = 0;i < self.v[ "repeat" ];i ++ ) - { - playfx( level._effect[ self.v[ "fxid" ] ], self.v[ "origin" ], self.v[ "forward" ], self.v[ "up" ] ); - //exploder_playSound(); - self exploder_delay(); - } - return; - } - - self exploder_delay(); - -// playfx( level._effect[ self.v[ "fxid" ] ], self.v[ "origin" ], self.v[ "forward" ], self.v[ "up" ] ); - if ( isdefined( self.looper ) ) - { - self.looper delete(); - } - - self.looper = spawnFx( getfx( self.v[ "fxid" ] ), self.v[ "origin" ], self.v[ "forward" ], self.v[ "up" ] ); - triggerFx( self.looper ); - exploder_playSound(); -} - -exploder_delay() -{ - if( !isdefined( self.v[ "delay" ] ) ) - { - self.v[ "delay" ] = 0; - } - - min_delay = self.v[ "delay" ]; - max_delay = self.v[ "delay" ] + 0.001;// cant randomfloatrange on the same # - if( isdefined( self.v[ "delay_min" ] ) ) - { - min_delay = self.v[ "delay_min" ]; - } - - if( isdefined( self.v[ "delay_max" ] ) ) - { - max_delay = self.v[ "delay_max" ]; - } - - if( min_delay > 0 ) - { - wait( randomfloatrange( min_delay, max_delay ) ); - } -} - -exploder_playSound() -{ - if( !isdefined( self.v[ "soundalias" ] ) || self.v[ "soundalias" ] == "nil" ) - { - return; - } - - play_sound_in_space( self.v[ "soundalias" ], self.v[ "origin" ] ); -} - -brush_delete() -{ - num = self.v[ "exploder" ]; - - if( isdefined( self.v[ "delay" ] ) ) - { - wait( self.v[ "delay" ] ); - } - else - { - wait( .05 );// so it disappears after the replacement appears - } - - if( !isdefined( self.model ) ) - { - return; - } - - - assert( isdefined( self.model ) ); - - if( level.createFX_enabled ) - { - if( isdefined( self.exploded ) ) - { - return; - } - - self.exploded = true; - self.model hide(); - self.model notsolid(); - - wait( 3 ); - self.exploded = undefined; - self.model show(); - self.model solid(); - return; - } - - if( !isdefined( self.v[ "fxid" ] ) || self.v[ "fxid" ] == "No FX" ) - { - self.v[ "exploder" ] = undefined; - } - - waittillframeend;// so it hides stuff after it shows the new stuff - self.model delete(); -} - -brush_show() -{ - if( isdefined( self.v[ "delay" ] ) ) - { - wait( self.v[ "delay" ] ); - } - - assert( isdefined( self.model ) ); - - self.model show(); - self.model solid(); - - if( level.createFX_enabled ) - { - if( isdefined( self.exploded ) ) - { - return; - } - - self.exploded = true; - wait( 3 ); - self.exploded = undefined; - self.model hide(); - self.model notsolid(); - } -} - -brush_throw() -{ - if( isdefined( self.v[ "delay" ] ) ) - { - wait( self.v[ "delay" ] ); - } - - ent = undefined; - - if( isdefined( self.v[ "target" ] ) ) - { - ent = getent( self.v[ "target" ], "targetname" ); - } - - if( !isdefined( ent ) ) - { - self.model delete(); - return; - } - - self.model show(); - - startorg = self.v[ "origin" ]; - startang = self.v[ "angles" ]; - org = ent.origin; - - - temp_vec = ( org - self.v[ "origin" ] ); - x = temp_vec[ 0 ]; - y = temp_vec[ 1 ]; - z = temp_vec[ 2 ]; - - self.model rotateVelocity( ( x, y, z ), 12 ); - - self.model moveGravity( ( x, y, z ), 12 ); - if( level.createFX_enabled ) - { - if( isdefined( self.exploded ) ) - { - return; - } - - self.exploded = true; - wait( 3 ); - self.exploded = undefined; - self.v[ "origin" ] = startorg; - self.v[ "angles" ] = startang; - self.model hide(); - return; - } - - self.v[ "exploder" ] = undefined; - wait( 6 ); - self.model delete(); -} - -getPlant() -{ - start = self.origin + (0, 0, 10); - - range = 11; - forward = anglesToForward(self.angles); - forward = vector_scale(forward, range); - - traceorigins[0] = start + forward; - traceorigins[1] = start; - - trace = bulletTrace(traceorigins[0], (traceorigins[0] + (0, 0, -18)), false, undefined); - if(trace["fraction"] < 1) - { - //println("^6Using traceorigins[0], tracefraction is", trace["fraction"]); - - temp = spawnstruct(); - temp.origin = trace["position"]; - temp.angles = orientToNormal(trace["normal"]); - return temp; - } - - trace = bulletTrace(traceorigins[1], (traceorigins[1] + (0, 0, -18)), false, undefined); - if(trace["fraction"] < 1) - { - //println("^6Using traceorigins[1], tracefraction is", trace["fraction"]); - - temp = spawnstruct(); - temp.origin = trace["position"]; - temp.angles = orientToNormal(trace["normal"]); - return temp; - } - - traceorigins[2] = start + (16, 16, 0); - traceorigins[3] = start + (16, -16, 0); - traceorigins[4] = start + (-16, -16, 0); - traceorigins[5] = start + (-16, 16, 0); - - besttracefraction = undefined; - besttraceposition = undefined; - for(i = 0; i < traceorigins.size; i++) - { - trace = bulletTrace(traceorigins[i], (traceorigins[i] + (0, 0, -1000)), false, undefined); - - //ent[i] = spawn("script_model",(traceorigins[i]+(0, 0, -2))); - //ent[i].angles = (0, 180, 180); - //ent[i] setmodel("105"); - - //println("^6trace ", i ," fraction is ", trace["fraction"]); - - if(!isdefined(besttracefraction) || (trace["fraction"] < besttracefraction)) - { - besttracefraction = trace["fraction"]; - besttraceposition = trace["position"]; - - //println("^6besttracefraction set to ", besttracefraction, " which is traceorigin[", i, "]"); - } - } - - if(besttracefraction == 1) - besttraceposition = self.origin; - - temp = spawnstruct(); - temp.origin = besttraceposition; - temp.angles = orientToNormal(trace["normal"]); - return temp; -} - -orientToNormal(normal) -{ - hor_normal = (normal[0], normal[1], 0); - hor_length = length(hor_normal); - - if(!hor_length) - return (0, 0, 0); - - hor_dir = vectornormalize(hor_normal); - neg_height = normal[2] * -1; - tangent = (hor_dir[0] * neg_height, hor_dir[1] * neg_height, hor_length); - plant_angle = vectortoangles(tangent); - - //println("^6hor_normal is ", hor_normal); - //println("^6hor_length is ", hor_length); - //println("^6hor_dir is ", hor_dir); - //println("^6neg_height is ", neg_height); - //println("^6tangent is ", tangent); - //println("^6plant_angle is ", plant_angle); - - return plant_angle; -} - -array_levelthread (ents, process, var, excluders) -{ - exclude = []; - for (i=0;i 0 ) - { - if ( !IsDefined( combineMessageAndTimer ) || !combineMessageAndTimer ) - self.lowerTimer.label = &""; - else - self.lowerTimer.label = text; - self.lowerTimer setTimer( time ); - } - else - { - self.lowerTimer setText( "" ); - self.lowerTimer.label = &""; - } - if( self IsSplitscreen() ) - self.lowerMessage.fontscale = 1.4; - - self.lowerMessage fadeOverTime( 0.05 ); - self.lowerMessage.alpha = 1; - self.lowerTimer fadeOverTime( 0.05 ); - self.lowerTimer.alpha = 1; -} - -clearLowerMessage( fadetime ) -{ - if ( !isDefined( self.lowerMessage ) ) - return; - - self notify("lower_message_set"); - - if ( !isdefined( fadetime) || fadetime == 0 ) - { - setLowerMessage( &"" ); - } - else - { - self endon("disconnect"); - self endon("lower_message_set"); - - self.lowerMessage fadeOverTime( fadetime ); - self.lowerMessage.alpha = 0; - self.lowerTimer fadeOverTime( fadetime ); - self.lowerTimer.alpha = 0; - - wait fadetime; - - self setLowerMessage(""); - } -} - -printOnTeam(text, team) -{ - assert( isdefined( level.players ) ); - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( ( isdefined(player.pers["team"]) ) && (player.pers["team"] == team) ) - player iprintln(text); - } -} - - -printBoldOnTeam(text, team) -{ - assert( isdefined( level.players ) ); - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( ( isdefined(player.pers["team"]) ) && (player.pers["team"] == team) ) - player iprintlnbold(text); - } -} - - - -printBoldOnTeamArg(text, team, arg) -{ - assert( isdefined( level.players ) ); - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( ( isdefined(player.pers["team"]) ) && (player.pers["team"] == team) ) - player iprintlnbold(text, arg); - } -} - - -printOnTeamArg(text, team, arg) -{ - //assert( isdefined( level.players ) ); - //for ( i = 0; i < level.players.size; i++ ) - //{ - // player = level.players[i]; - // if ( ( isdefined(player.pers["team"]) ) && (player.pers["team"] == team) ) - // { - // player iprintln(text, arg); - // } - //} -} - - -printOnPlayers( text, team ) -{ - players = level.players; - for(i = 0; i < players.size; i++) - { - if ( isDefined( team ) ) - { - if((isdefined(players[i].pers["team"])) && (players[i].pers["team"] == team)) - players[i] iprintln(text); - } - else - { - players[i] iprintln(text); - } - } -} - -printAndSoundOnEveryone( team, otherteam, printFriendly, printEnemy, soundFriendly, soundEnemy, printarg ) -{ - shouldDoSounds = isDefined( soundFriendly ); - - shouldDoEnemySounds = false; - if ( isDefined( soundEnemy ) ) - { - assert( shouldDoSounds ); // can't have an enemy sound without a friendly sound - shouldDoEnemySounds = true; - } - - if ( level.splitscreen || !shouldDoSounds ) - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - playerteam = player.pers["team"]; - if ( isdefined( playerteam ) ) - { - if ( playerteam == team && isDefined( printFriendly ) && printFriendly != &"" ) - player iprintln( printFriendly, printarg ); - else if ( playerteam == otherteam && isDefined( printEnemy ) && printEnemy != &"" ) - player iprintln( printEnemy, printarg ); - } - } - if ( shouldDoSounds ) - { - assert( level.splitscreen ); - level.players[0] playLocalSound( soundFriendly ); - } - } - else - { - assert( shouldDoSounds ); - if ( shouldDoEnemySounds ) - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - playerteam = player.pers["team"]; - if ( isdefined( playerteam ) ) - { - if ( playerteam == team ) - { - if( isDefined( printFriendly ) && printFriendly != &"" ) - player iprintln( printFriendly, printarg ); - player playLocalSound( soundFriendly ); - } - else if ( playerteam == otherteam ) - { - if( isDefined( printEnemy ) && printEnemy != &"" ) - player iprintln( printEnemy, printarg ); - player playLocalSound( soundEnemy ); - } - } - } - } - else - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - playerteam = player.pers["team"]; - if ( isdefined( playerteam ) ) - { - if ( playerteam == team ) - { - if( isDefined( printFriendly ) && printFriendly != &"" ) - player iprintln( printFriendly, printarg ); - player playLocalSound( soundFriendly ); - } - else if ( playerteam == otherteam && isDefined( printEnemy ) && printEnemy != &"" ) - { - player iprintln( printEnemy, printarg ); - } - } - } - } - } -} - - -_playLocalSound( soundAlias ) -{ - if ( level.splitscreen && !self IsHost() ) - return; - - self playLocalSound( soundAlias ); -} - - -dvarIntValue( dVar, defVal, minVal, maxVal ) -{ - dVar = "scr_" + level.gameType + "_" + dVar; - if ( getDvar( dVar ) == "" ) - { - setDvar( dVar, defVal ); - return defVal; - } - - value = getDvarInt( dVar ); - - if ( value > maxVal ) - value = maxVal; - else if ( value < minVal ) - value = minVal; - else - return value; - - setDvar( dVar, value ); - return value; -} - - -dvarFloatValue( dVar, defVal, minVal, maxVal ) -{ - dVar = "scr_" + level.gameType + "_" + dVar; - if ( getDvar( dVar ) == "" ) - { - setDvar( dVar, defVal ); - return defVal; - } - - value = getDvarFloat( dVar ); - - if ( value > maxVal ) - value = maxVal; - else if ( value < minVal ) - value = minVal; - else - return value; - - setDvar( dVar, value ); - return value; -} - - -play_sound_on_tag( alias, tag ) -{ - if ( isdefined( tag) ) - { - org = spawn( "script_origin", self getTagOrigin( tag ) ); - org linkto( self, tag, (0,0,0), (0,0,0) ); - } - else - { - org = spawn( "script_origin", (0,0,0) ); - org.origin = self.origin; - org.angles = self.angles; - org linkto( self ); - } - - org playsound (alias); - wait ( 5.0 ); - org delete(); -} - - -createLoopEffect( fxid ) -{ - ent = maps\mp\_createfx::createEffect( "loopfx", fxid ); - ent.v[ "delay" ] = 0.5; - return ent; -} - -createOneshotEffect( fxid ) -{ - ent = maps\mp\_createfx::createEffect( "oneshotfx", fxid ); - ent.v[ "delay" ] = -15; - return ent; -} - -loop_fx_sound ( alias, origin, ender, timeout ) -{ - org = spawn ("script_origin",(0,0,0)); - if ( isdefined( ender ) ) - { - thread loop_sound_delete (ender, org); - self endon( ender ); - } - org.origin = origin; - org playloopsound (alias); - if (!isdefined (timeout)) - return; - - wait (timeout); -// org delete(); -} - -exploder_damage() -{ - if( isdefined( self.v[ "delay" ] ) ) - delay = self.v[ "delay" ]; - else - delay = 0; - - if( isdefined( self.v[ "damage_radius" ] ) ) - radius = self.v[ "damage_radius" ]; - else - radius = 128; - - damage = self.v[ "damage" ]; - origin = self.v[ "origin" ]; - - wait( delay ); - // Range, max damage, min damage - radiusDamage( origin, radius, damage, damage ); -} - - -exploder_before_load( num ) -{ - // gotta wait twice because the createfx_init function waits once then inits all exploders. This guarentees - // that if an exploder is run on the first frame, it happens after the fx are init. - waittillframeend; - waittillframeend; - activate_exploder( num ); -} - -exploder_after_load( num ) -{ - activate_exploder( num ); -} - -activate_exploder( num ) -{ - num = int( num ); - for( i = 0;i < level.createFXent.size;i ++ ) - { - ent = level.createFXent[ i ]; - if( !isdefined( ent ) ) - continue; - - if( ent.v[ "type" ] != "exploder" ) - continue; - - // make the exploder actually removed the array instead? - if( !isdefined( ent.v[ "exploder" ] ) ) - continue; - - if( ent.v[ "exploder" ] != num ) - continue; - - if( isdefined( ent.v[ "firefx" ] ) ) - ent thread fire_effect(); - - if( isdefined( ent.v[ "fxid" ] ) && ent.v[ "fxid" ] != "No FX" ) - ent thread cannon_effect(); - else - if( isdefined( ent.v[ "soundalias" ] ) ) - ent thread sound_effect(); - - if( isdefined( ent.v[ "damage" ] ) ) - ent thread exploder_damage(); - - if( isdefined( ent.v[ "earthquake" ] ) ) - { - eq = ent.v[ "earthquake" ]; - earthquake( level.earthquake[ eq ][ "magnitude" ], - level.earthquake[ eq ][ "duration" ], - ent.v[ "origin" ], - level.earthquake[ eq ][ "radius" ] ); - } - - if( ent.v[ "exploder_type" ] == "exploder" ) - ent thread brush_show(); - else - if( ( ent.v[ "exploder_type" ] == "exploderchunk" ) || ( ent.v[ "exploder_type" ] == "exploderchunk visible" ) ) - ent thread brush_throw(); - else - ent thread brush_delete(); - } -} - -stop_exploder( num ) -{ - num = int( num ); - for( i = 0;i < level.createFXent.size;i ++ ) - { - ent = level.createFXent[ i ]; - if( !isdefined( ent ) ) - continue; - - if( ent.v[ "type" ] != "exploder" ) - continue; - - // make the exploder actually removed the array instead? - if( !isdefined( ent.v[ "exploder" ] ) ) - continue; - - if( ent.v[ "exploder" ] != num ) - continue; - - if ( isdefined( ent.looper ) ) - { - ent.looper delete(); - } - } -} - -sound_effect () -{ - self effect_soundalias(); -} - -effect_soundalias ( ) -{ - if (!isdefined (self.v["delay"])) - self.v["delay"] = 0; - - // save off this info in case we delete the effect - origin = self.v["origin"]; - alias = self.v["soundalias"]; - wait (self.v["delay"]); - play_sound_in_space ( alias, origin ); -} - -play_sound_in_space (alias, origin, master) -{ - org = spawn ("script_origin",(0,0,1)); - if (!isdefined (origin)) - origin = self.origin; - org.origin = origin; - if (isdefined(master) && master) - org playsoundasmaster (alias); - else - org playsound (alias); - wait ( 10.0 ); - org delete(); -} - -loop_sound_in_space(alias, origin, ender) -{ - org = spawn("script_origin",(0,0,1)); - - if(!isdefined(origin)) - { - origin = self.origin; - } - - org.origin = origin; - org playLoopSound(alias); - - level waittill(ender); - - org stopLoopSound(); - wait 0.1; - org delete(); -} - -fire_effect() -{ - if( !isdefined( self.v[ "delay" ] ) ) - self.v[ "delay" ] = 0; - - delay = self.v[ "delay" ]; - if( ( isdefined( self.v[ "delay_min" ] ) ) && ( isdefined( self.v[ "delay_max" ] ) ) ) - delay = self.v[ "delay_min" ] + randomfloat( self.v[ "delay_max" ] - self.v[ "delay_min" ] ); - - forward = self.v[ "forward" ]; - up = self.v[ "up" ]; - - org = undefined; - - firefxSound = self.v[ "firefxsound" ]; - origin = self.v[ "origin" ]; - firefx = self.v[ "firefx" ]; - ender = self.v[ "ender" ]; - if( !isdefined( ender ) ) - ender = "createfx_effectStopper"; - timeout = self.v[ "firefxtimeout" ]; - - fireFxDelay = 0.5; - if( isdefined( self.v[ "firefxdelay" ] ) ) - fireFxDelay = self.v[ "firefxdelay" ]; - - wait( delay ); - - if( isdefined( firefxSound ) ) - level thread loop_fx_sound( firefxSound, origin, ender, timeout ); - - playfx( level._effect[ firefx ], self.v[ "origin" ], forward, up ); - -// loopfx( fxId, fxPos, waittime, fxPos2, fxStart, fxStop, timeout ) -// maps\_fx::loopfx( firefx, origin, delay, org, undefined, ender, timeout ); -} - -loop_sound_delete ( ender, ent ) -{ - ent endon ("death"); - self waittill (ender); - ent delete(); -} - -createExploder( fxid ) -{ - ent = maps\mp\_createfx::createEffect( "exploder", fxid ); - ent.v["delay"] = 0; - ent.v["exploder_type"] = "normal"; - return ent; -} - -getOtherTeam( team ) -{ - if ( team == "allies" ) - return "axis"; - else if ( team == "axis" ) - return "allies"; - - assertMsg( "getOtherTeam: invalid team " + team ); -} - - -wait_endon( waitTime, endOnString, endonString2, endonString3 ) -{ - self endon ( endOnString ); - if ( isDefined( endonString2 ) ) - self endon ( endonString2 ); - if ( isDefined( endonString3 ) ) - self endon ( endonString3 ); - - wait ( waitTime ); -} - -isMG( weapon ) -{ - return isSubStr( weapon, "_bipod_" ); -} - -plot_points( plotpoints, r, g, b, timer ) -{ - lastpoint = plotpoints[ 0 ]; - if( !IsDefined( r ) ) - r = 1; - if( !IsDefined( g ) ) - g = 1; - if( !IsDefined( b ) ) - b = 1; - if( !IsDefined( timer ) ) - timer = 0.05; - for( i = 1;i < plotpoints.size;i ++ ) - { - // AE 10-26-09: line function must have changed to Line( , , , , ) - line( lastpoint, plotpoints[ i ], ( r, g, b ), 1, timer ); - //line( lastpoint, plotpoints[ i ], ( r, g, b ), 1, 1, int(timer) ); - lastpoint = plotpoints[ i ]; - } -} - -registerClientSys(sSysName) -{ - if(!isdefined(level._clientSys)) - { - level._clientSys = []; - } - - if(level._clientSys.size >= 32) - { - error("Max num client systems exceeded."); - return; - } - - if(isdefined(level._clientSys[sSysName])) - { - error("Attempt to re-register client system : " + sSysName); - return; - } - else - { - level._clientSys[sSysName] = spawnstruct(); - level._clientSys[sSysName].sysID = ClientSysRegister(sSysName); - } -} - -setClientSysState(sSysName, sSysState, player) -{ - if(!isdefined(level._clientSys)) - { - error("setClientSysState called before registration of any systems."); - return; - } - - if(!isdefined(level._clientSys[sSysName])) - { - error("setClientSysState called on unregistered system " + sSysName); - return; - } - - if(isdefined(player)) - { - player ClientSysSetState(level._clientSys[sSysName].sysID, sSysState); - } - else - { - ClientSysSetState(level._clientSys[sSysName].sysID, sSysState); - level._clientSys[sSysName].sysState = sSysState; - } -} - -getClientSysState(sSysName) -{ - if(!isdefined(level._clientSys)) - { - error("Cannot getClientSysState before registering any client systems."); - return ""; - } - - if(!isdefined(level._clientSys[sSysName])) - { - error("Client system " + sSysName + " cannot return state, as it is unregistered."); - return ""; - } - - if(isdefined(level._clientSys[sSysName].sysState)) - { - return level._clientSys[sSysName].sysState; - } - - return ""; -} - -clientNotify(event) -{ - if(level.clientscripts) - { - if(IsPlayer(self)) - { - maps\mp\_utility::setClientSysState("levelNotify", event, self); - } - else - { - maps\mp\_utility::setClientSysState("levelNotify", event); - } - } -} - -alphabet_compare( a, b ) -{ - list = []; - val = 1; - list[ "0" ] = val; val++; - list[ "1" ] = val; val++; - list[ "2" ] = val; val++; - list[ "3" ] = val; val++; - list[ "4" ] = val; val++; - list[ "5" ] = val; val++; - list[ "6" ] = val; val++; - list[ "7" ] = val; val++; - list[ "8" ] = val; val++; - list[ "9" ] = val; val++; - list[ "_" ] = val; val++; - list[ "a" ] = val; val++; - list[ "b" ] = val; val++; - list[ "c" ] = val; val++; - list[ "d" ] = val; val++; - list[ "e" ] = val; val++; - list[ "f" ] = val; val++; - list[ "g" ] = val; val++; - list[ "h" ] = val; val++; - list[ "i" ] = val; val++; - list[ "j" ] = val; val++; - list[ "k" ] = val; val++; - list[ "l" ] = val; val++; - list[ "m" ] = val; val++; - list[ "n" ] = val; val++; - list[ "o" ] = val; val++; - list[ "p" ] = val; val++; - list[ "q" ] = val; val++; - list[ "r" ] = val; val++; - list[ "s" ] = val; val++; - list[ "t" ] = val; val++; - list[ "u" ] = val; val++; - list[ "v" ] = val; val++; - list[ "w" ] = val; val++; - list[ "x" ] = val; val++; - list[ "y" ] = val; val++; - list[ "z" ] = val; val++; - - a = tolower( a ); - b = tolower( b ); - val1 = 0; - if ( isdefined( list[ a ] ) ) - val1 = list[ a ]; - - val2 = 0; - if ( isdefined( list[ b ] ) ) - val2 = list[ b ]; - - if ( val1 > val2 ) - return "1st"; - if ( val1 < val2 ) - return "2nd"; - return "same"; -} - -is_later_in_alphabet( string1, string2 ) -{ - count = string1.size; - if ( count >= string2.size ) - count = string2.size; - - for ( i = 0; i < count; i++ ) - { - val = alphabet_compare( string1[ i ], string2[ i ] ); - if ( val == "1st" ) - return true; - if ( val == "2nd" ) - return false; - } - - return string1.size > string2.size; -} - -alphabetize( array ) -{ - if ( array.size <= 1 ) - return array; - - count = 0; - for ( ;; ) - { - changed = false; - for ( i = 0; i < array.size - 1; i++ ) - { - if ( is_later_in_alphabet( array[ i ], array[ i + 1 ] ) ) - { - val = array[ i ]; - array[ i ] = array[ i + 1 ]; - array[ i + 1 ] = val; - changed = true; - count++; - if ( count >= 9 ) - { - count = 0; - wait( 0.05 ); - } - } - } - - if ( !changed ) - return array; - } - - return array; -} - -//------------------------------------------------------// -// get_players() // -// Returns all of the current players in the level // -//------------------------------------------------------// -get_players() -{ - players = GetEntArray( "player", "classname" ); - - return players; -} - -getfx( fx ) -{ - assertEx( IsDefined( level._effect[ fx ] ), "Fx " + fx + " is not defined in level._effect." ); - return level._effect[ fx ]; -} - -struct_arraySpawn() -{ - struct = SpawnStruct(); - struct.array = []; - struct.lastindex = 0; - return struct; -} - -structarray_add( struct, object ) -{ - assert( !isdefined( object.struct_array_index ) );// can't have elements of two structarrays on these. can add that later if it's needed - struct.array[ struct.lastindex ] = object; - object.struct_array_index = struct.lastindex; - struct.lastindex ++ ; -} - -structarray_remove( struct, object ) -{ - structarray_swaptolast( struct, object ); - struct.array[ struct.lastindex - 1 ] = undefined; - struct.lastindex -- ; -} - -structarray_swaptolast( struct, object ) -{ - struct structarray_swap( struct.array[ struct.lastindex - 1 ], object ); -} - -structarray_shuffle( struct, shuffle ) -{ - for( i = 0;i < shuffle;i ++ ) - struct structarray_swap( struct.array[ i ], struct.array[ randomint( struct.lastindex ) ] ); -} - -structarray_swap( object1, object2 ) -{ - index1 = object1.struct_array_index; - index2 = object2.struct_array_index; - self.array[ index2 ] = object1; - self.array[ index1 ] = object2; - self.array[ index1 ].struct_array_index = index1; - self.array[ index2 ].struct_array_index = index2; -} - -waittill_either( msg1, msg2 ) -{ - self endon( msg1 ); - self waittill( msg2 ); -} - - /* - ============= -///ScriptDocBegin -"Name: getClosest( , , )" -"Summary: Returns the closest entity in < array > to location < org > " -"Module: Distance" -"CallOn: " -"MandatoryArg: : Origin to be closest to." -"MandatoryArg: : Array of entities to check distance on" -"OptionalArg: : Minimum distance to check" -"Example: friendly = getclosest( level.player.origin, allies );" -"SPMP: singleplayer" -///ScriptDocEnd - ============= - */ -getClosest( org, array, dist ) -{ - return compareSizes( org, array, dist, ::closerFunc ); -} - - /* - ============= -///ScriptDocBegin -"Name: getClosestFx( , , )" -"Summary: Returns the closest fx struct created by createfx in < fxarray > to location < org > " -"Module: Distance" -"CallOn: " -"MandatoryArg: : Origin to be closest to." -"MandatoryArg: : Array of createfx structs to check distance on. These are obtained with getfxarraybyID( )" -"OptionalArg: : Minimum distance to check" -"Example: fxstruct = getClosestFx( hallway_tv, fxarray );" -"SPMP: singleplayer" -///ScriptDocEnd - ============= - */ -getClosestFx( org, fxarray, dist ) -{ - return compareSizesFx( org, fxarray, dist, ::closerFunc ); -} - - /* - ============= -///ScriptDocBegin -"Name: getFarthest( , , )" -"Summary: Returns the farthest entity in < array > to location < org > " -"Module: Distance" -"CallOn: " -"MandatoryArg: : Origin to be farthest from." -"MandatoryArg: : Array of entities to check distance on" -"OptionalArg: : Maximum distance to check" -"Example: target = getFarthest( level.player.origin, targets );" -"SPMP: singleplayer" -///ScriptDocEnd - ============= - */ -getFarthest( org, array, dist ) -{ - return compareSizes( org, array, dist, ::fartherFunc ); -} - -compareSizesFx( org, array, dist, compareFunc ) -{ - if( !array.size ) - return undefined; - if( isdefined( dist ) ) - { - distSqr = dist * dist; - struct = undefined; - keys = getArrayKeys( array ); - for( i = 0; i < keys.size; i ++ ) - { - newdistSqr = DistanceSquared( array[ keys[ i ] ].v[ "origin" ], org ); - if( [[ compareFunc ]]( newdistSqr, distSqr ) ) - continue; - distSqr = newdistSqr; - struct = array[ keys[ i ] ]; - } - return struct; - } - - keys = getArrayKeys( array ); - struct = array[ keys[ 0 ] ]; - distSqr = DistanceSquared( struct.v[ "origin" ], org ); - for( i = 1; i < keys.size; i ++ ) - { - newdistSqr = DistanceSquared( array[ keys[ i ] ].v[ "origin" ], org ); - if( [[ compareFunc ]]( newdistSqr, distSqr ) ) - continue; - distSqr = newdistSqr; - struct = array[ keys[ i ] ]; - } - return struct; -} - -compareSizes( org, array, dist, compareFunc ) -{ - if( !array.size ) - return undefined; - if( IsDefined( dist ) ) - { - distSqr = dist * dist; - ent = undefined; - keys = GetArrayKeys( array ); - for( i = 0; i < keys.size; i ++ ) - { - newdistSqr = DistanceSquared( array[ keys[ i ] ].origin, org ); - if( [[ compareFunc ]]( newdistSqr, distSqr ) ) - continue; - distSqr = newdistSqr; - ent = array[ keys[ i ] ]; - } - return ent; - } - - keys = GetArrayKeys( array ); - ent = array[ keys[ 0 ] ]; - distSqr = DistanceSquared( ent.origin, org ); - for( i = 1; i < keys.size; i ++ ) - { - newdistSqr = DistanceSquared( array[ keys[ i ] ].origin, org ); - if( [[ compareFunc ]]( newdistSqr, distSqr ) ) - continue; - distSqr = newdistSqr; - ent = array[ keys[ i ] ]; - } - return ent; -} - -closerFunc( dist1, dist2 ) -{ - return dist1 >= dist2; -} - -fartherFunc( dist1, dist2 ) -{ - return dist1 <= dist2; -} - -/* - ============= -///ScriptDocBegin -"Name: get_array_of_closest( , , , , )" -"Summary: Returns an array of all the entities in < array > sorted in order of closest to farthest." -"Module: Distance" -"CallOn: " -"MandatoryArg: : Origin to be closest to." -"MandatoryArg: : Array of entities to check distance on." -"OptionalArg: : Array of entities to exclude from the check." -"OptionalArg: : Max size of the array to return" -"OptionalArg: : Max distance from the origin to return acceptable entities" -"Example: allies_sort = get_array_of_closest( originFC1.origin, allies );" -"SPMP: singleplayer" -///ScriptDocEnd - ============= - */ -get_array_of_closest( org, array, excluders, max, maxdist ) -{ - // pass an array of entities to this function and it will return them in the order of closest - // to the origin you pass, you can also set max to limit how many ents get returned - if( !IsDefined( max ) ) - max = array.size; - if( !isdefined( excluders ) ) - excluders = []; - - maxdists2rd = undefined; - if( isdefined( maxdist ) ) - maxdists2rd = maxdist * maxdist; - - // return the array, reordered from closest to farthest - dist = []; - index = []; - for( i = 0;i < array.size;i ++ ) - { - excluded = false; - for( p = 0;p < excluders.size;p ++ ) - { - if( array[ i ] != excluders[ p ] ) - continue; - excluded = true; - break; - } - if( excluded ) - continue; - - length = distancesquared( org, array[ i ].origin ); - - if( isdefined( maxdists2rd ) && maxdists2rd < length ) - continue; - - dist[ dist.size ] = length; - - - index[ index.size ] = i; - } - - for( ;; ) - { - change = false; - for( i = 0;i < dist.size - 1;i ++ ) - { - if( dist[ i ] <= dist[ i + 1 ] ) - continue; - change = true; - temp = dist[ i ]; - dist[ i ] = dist[ i + 1 ]; - dist[ i + 1 ] = temp; - temp = index[ i ]; - index[ i ] = index[ i + 1 ]; - index[ i + 1 ] = temp; - } - if( !change ) - break; - } - - newArray = []; - if( max > dist.size ) - max = dist.size; - for( i = 0;i < max;i ++ ) - newArray[ i ] = array[ index[ i ] ]; - return newArray; -} - -set_dvar_if_unset( - dvar, - value, - force) -{ - if (GetDvar(dvar)=="" || ( isdefined( force ) && force ) ) - { - SetDvar(dvar, value); - return value; - } - - return GetDvar(dvar); -} - -set_dvar_float_if_unset( - dvar, - value, - force) -{ - if (GetDvar(dvar)=="" || ( isdefined( force ) && force ) ) - { - SetDvar(dvar, value); - } - - return GetDvarFloat(dvar); -} - -set_dvar_int_if_unset( - dvar, - value, - force) -{ - if (GetDvar(dvar)=="" || ( isdefined( force ) && force ) ) - { - SetDvar(dvar, value); - return int(value); - } - - return GetDvarInt(dvar); -} - -drawcylinder( pos, rad, height, duration, stop_notify ) -{ -/# - if ( !IsDefined( duration ) ) - { - duration = 0; - } - - level thread drawcylinder_think( pos, rad, height, duration, stop_notify ); -#/ -} - -drawcylinder_think( pos, rad, height, seconds, stop_notify ) -{ -/# - if ( IsDefined( stop_notify ) ) - { - level endon( stop_notify ); - } - - stop_time = GetTime() + ( seconds * 1000 ); - - currad = rad; - curheight = height; - - for ( ;; ) - { - if ( seconds > 0 && stop_time <= GetTime() ) - { - return; - } - - for( r = 0; r < 20; r++ ) - { - theta = r / 20 * 360; - theta2 = ( r + 1 ) / 20 * 360; - - line( pos +( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos +( cos( theta2 ) * currad, sin( theta2 ) * currad, 0 ) ); - line( pos +( cos( theta ) * currad, sin( theta ) * currad, curheight ), pos +( cos( theta2 ) * currad, sin( theta2 ) * currad, curheight ) ); - line( pos +( cos( theta ) * currad, sin( theta ) * currad, 0 ), pos +( cos( theta ) * currad, sin( theta ) * currad, curheight ) ); - } - - wait( 0.05 ); - } -#/ -} - -/# -debug_replay(string) -{ - if( GetDvar( #"replay_debug" ) == "1" ) - { - println("time=" + GetTime() + " " + string); - } -} -#/ - -is_bot() -{ - return ( IsDefined ( self.pers["isBot"] ) && self.pers["isBot"] != 0 ); -} - -add_trigger_to_ent(ent) // Self == The trigger volume -{ - if(!IsDefined(ent._triggers)) - { - ent._triggers = []; - } - - ent._triggers[self GetEntityNumber()] = 1; -} - -remove_trigger_from_ent(ent) // Self == The trigger volume. -{ - if(!IsDefined(ent)) - return; - - if(!IsDefined(ent._triggers)) - return; - - if(!IsDefined(ent._triggers[self GetEntityNumber()])) - return; - - ent._triggers[self GetEntityNumber()] = 0; -} - -ent_already_in_trigger(trig) // Self == The entity in the trigger volume. -{ - if(!IsDefined(self._triggers)) - return false; - - if(!IsDefined(self._triggers[trig GetEntityNumber()])) - return false; - - if(!self._triggers[trig GetEntityNumber()]) - return false; - - return true; // We're already in this trigger volume. -} - -trigger_thread_death_monitor(ent, ender) -{ - ent waittill("death"); - self endon(ender); - self remove_trigger_from_ent(ent); -} - -trigger_thread(ent, on_enter_payload, on_exit_payload) // Self == The trigger. -{ - ent endon("entityshutdown"); - ent endon("death"); - - if(ent ent_already_in_trigger(self)) - return; - - self add_trigger_to_ent(ent); - - ender = "end_trig_death_monitor" + self GetEntityNumber() + " " + ent GetEntityNumber(); - self thread trigger_thread_death_monitor(ent, ender); // If ent dies in trigger, clear trigger off of ent. - -// iprintlnbold("Trigger " + self.targetname + " hit by ent " + ent getentitynumber()); - - endon_condition = "leave_trigger_" + self GetEntityNumber(); - - if(IsDefined(on_enter_payload)) - { - self thread [[on_enter_payload]](ent, endon_condition); - } - - while(IsDefined(ent) && ent IsTouching(self)) - { - wait(0.01); - } - - ent notify(endon_condition); - -// iprintlnbold(ent getentitynumber() + " leaves trigger " + self.targetname + "."); - - if(IsDefined(ent) && IsDefined(on_exit_payload)) - { - self thread [[on_exit_payload]](ent); - } - - if(IsDefined(ent)) - { - self remove_trigger_from_ent(ent); - } - - self notify(ender); // Get rid of the death monitor thread. -} - -isOneRound() -{ - if ( level.roundLimit == 1 ) - return true; - - return false; -} - -isFirstRound() -{ - if ( level.roundLimit > 1 && game[ "roundsplayed" ] == 0 ) - return true; - - return false; -} - -isLastRound() -{ - if ( level.roundLimit > 1 && game[ "roundsplayed" ] >= ( level.roundLimit - 1 ) ) - return true; - - return false; -} - -wasLastRound() -{ - if ( level.forcedEnd ) - return true; - - if ( hitRoundLimit() || hitScoreLimit() || hitRoundWinLimit() ) - return true; - - return false; -} - -hitRoundLimit() -{ - if( level.roundLimit <= 0 ) - return false; - - return ( getRoundsPlayed() >= level.roundLimit ); -} - -hitRoundWinLimit() -{ - if( !IsDefined(level.roundWinLimit) || level.roundWinLimit <= 0 ) - return false; - - if ( getRoundsWon("allies") >= level.roundWinLimit || getRoundsWon("axis") >= level.roundWinLimit) - { - //"True" means that we should end the game - return true; - } - - //No over-time should occur if either team has more rounds won, even if there were rounds that ended in draw. - // For example, If the round win limit is 5 and one team has one win and 4 draws occur in a row, we want to declare the - //team with the victory as the winner and not enter an over-time round. - if( getRoundsWon("allies") + game["roundswon"]["tie"] >= level.roundWinLimit || - getRoundsWon("axis") + game["roundswon"]["tie"] >= level.roundWinLimit) - { - //We want the game to have an over-time round if the teams are tied. - //In a game with a win limit of 3, 3 ties in a row would cause the previous 'if' check to return 'true'. - // We want to make sure the game doesn't end if that's the case. - if(getRoundsWon("allies") != getRoundsWon("axis")) - { - return true; - } - } - - return false; -} - - -hitScoreLimit() -{ - if ( isScoreRoundBased() ) - return false; - - if( level.scoreLimit <= 0 ) - return false; - - if ( level.teamBased ) - { - if( game["teamScores"]["allies"] >= level.scoreLimit || game["teamScores"]["axis"] >= level.scoreLimit ) - return true; - } - else - { - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( isDefined( player.score ) && player.score >= level.scorelimit ) - return true; - } - } - return false; -} - -getRoundsWon( team ) -{ - return game["roundswon"][team]; -} - -getRoundsPlayed() -{ - return game["roundsplayed"]; -} - -isScoreRoundBased() -{ - return level.scoreRoundBased; -} - -isRoundBased() -{ - if ( level.roundLimit != 1 && level.roundWinLimit != 1 ) - return true; - - return false; -} - -waitTillNotMoving() -{ - if ( self maps\mp\gametypes\_weaponobjects::isHacked() ) - { - wait( 0.05 ); - return; - } - - if ( self.classname == "grenade" ) - { - self waittill("stationary"); - } - else - { - prevorigin = self.origin; - while(1) - { - wait .15; - if ( self.origin == prevorigin ) - break; - prevorigin = self.origin; - } - } -} - -mayApplyScreenEffect() -{ - if ( isDefined( self.viewlockedentity ) ) - return false; - - return true; -} - -getDvarFloatDefault( dvarName, defaultValue) -{ - returnVal = defaultValue; - if (getDvar(dvarName) != "") - { - return getDvarFloat(dvarName); - } - return returnVal; -} - -getDvarIntDefault( dvarName, defaultValue) -{ - returnVal = defaultValue; - if (getDvar(dvarName) != "") - { - return getDvarInt(dvarName); - } - return returnVal; -} - -dropAllToGround( origin, radius, stickyObjectRadius ) -{ - PhysicsExplosionSphere( origin, radius, radius, 0 ); - wait(0.05); - maps\mp\gametypes\_weapons::dropWeaponsToGround( origin, radius ); - // grenades are now done in code when an entity they were on gets deleted -// maps\mp\gametypes\_weapons::dropGrenadesToGround( origin, radius ); - maps\mp\gametypes\_supplydrop::dropCratesToGround( origin, radius ); - level notify( "drop_objects_to_ground", origin, stickyObjectRadius ); -} - -closestPointOnLine( point, lineStart, lineEnd ) -{ - lineMagSqrd = lengthsquared(lineEnd - lineStart); - - t = ( ( ( point[0] - lineStart[0] ) * ( lineEnd[0] - lineStart[0] ) ) + - ( ( point[1] - lineStart[1] ) * ( lineEnd[1] - lineStart[1] ) ) + - ( ( point[2] - lineStart[2] ) * ( lineEnd[2] - lineStart[2] ) ) ) / - ( lineMagSqrd ); - - if( t < 0.0 ) - { - return lineStart; - } - else if( t > 1.0 ) - { - return lineEnd; - } - - start_x = lineStart[0] + t * ( lineEnd[0] - lineStart[0] ); - start_y = lineStart[1] + t * ( lineEnd[1] - lineStart[1] ); - start_z = lineStart[2] + t * ( lineEnd[2] - lineStart[2] ); - - return (start_x,start_y,start_z); -} - - -isStrStart( string1, subStr ) -{ - return ( getSubStr( string1, 0, subStr.size ) == subStr ); -} - -/* -============= -///ScriptDocBegin -"Name: spread_array_thread( , , , , )" -"Summary: Threads the < process > function on every entity in the < entities > array. The entity will become "self" in the specified function. Each thread is started 1 network frame apart from the next." -"Module: Array" -"CallOn: " -"MandatoryArg: : array of entities to thread the process" -"MandatoryArg: : pointer to a script function" -"OptionalArg: : parameter 1 to pass to the process" -"OptionalArg: : parameter 2 to pass to the process" -"OptionalArg: : parameter 3 to pass to the process" -"Example: array_thread( getaiarray( "allies" ), ::set_ignoreme, false );" -"SPMP: Both" -///ScriptDocEnd -============= -*/ - -spread_array_thread( entities, process, var1, var2, var3 ) -{ - keys = getArrayKeys( entities ); - - if ( IsDefined( var3 ) ) - { - for( i = 0 ; i < keys.size ; i++ ) - { - entities[ keys[ i ] ] thread [[ process ]]( var1, var2, var3 ); - wait .1; - } - - return; - } - - if ( IsDefined( var2 ) ) - { - for( i = 0 ; i < keys.size ; i++ ) - { - entities[ keys[ i ] ] thread [[ process ]]( var1, var2 ); - wait .1; - } - - return; - } - - if ( IsDefined( var1 ) ) - { - for( i = 0 ; i < keys.size ; i++ ) - { - entities[ keys[ i ] ] thread [[ process ]]( var1 ); - wait .1; - } - - return; - } - - for( i = 0 ; i < keys.size ; i++ ) - { - entities[ keys[ i ] ] thread [[ process ]](); - wait .1; - } -} - -/* -============= -///ScriptDocBegin -"Name: freeze_player_controls( )" -"Summary: Freezes the player's controls with appropriate 'if' checks" -"Module: Player" -"CallOn: Player" -"MandatoryArg: : true or false" -"Example: freeze_player_controls( true )" -"SPMP: MP" -///ScriptDocEnd -============= -*/ - -freeze_player_controls( boolean ) -{ - AssertEx( IsDefined( boolean ), "'freeze_player_controls()' has not been passed an argument properly." ); - - if( boolean && IsAlive( self ) ) - { - self FreezeControls( boolean ); - - } - //'!level.gameEnded' check prevents the player from having their controls unfrozen during the end of rounds - else if( !boolean && IsAlive( self ) && !level.gameEnded ) - { - self FreezeControls( boolean ); - - } -} - -getHostPlayer() -{ - players = get_players(); - - for ( index = 0; index < players.size; index++ ) - { - if ( players[index] IsHost() ) - return players[index]; - } -} - - -isPreGame() -{ - return IsDefined( level.pregame ) && level.pregame; -} - -isKillStreaksEnabled() -{ - return IsDefined( level.killstreaksenabled ) && level.killstreaksenabled; -} - -ishardPointsEnabled() -{ - return IsDefined( level.hardpointsenabled ) && level.hardpointsenabled; -} - -isRankEnabled() -{ - return IsDefined( level.rankEnabled ) && level.rankEnabled; -} - -playSmokeSound( position, duration, startSound, stopSound, loopSound ) -{ - smokeSound = spawn ("script_origin",(0,0,1)); - smokeSound.origin = position; - - smokeSound playsound( startSound ); - smokeSound playLoopSound ( loopSound ); - if ( duration > 0.5 ) - wait( duration - 0.5 ); - thread playSoundinSpace( stopSound, position ); - smokeSound StopLoopSound( .5); - wait(.5); - smokeSound delete(); -} - -playSoundinSpace (alias, origin, master) -{ - org = spawn ( "script_origin",(0,0,1) ); - if (!isdefined (origin)) - origin = self.origin; - org.origin = origin; - if (isdefined(master) && master) - org playsoundasmaster (alias); - else - org playsound (alias); - wait ( 10.0 ); - org delete(); -} - -get2DYaw( start, end ) -{ - yaw = 0; - vector = (end[0] - start[0], end[1] - start[1], 0); - - return vecToAngles( vector ); -} - -vecToAngles( vector ) -{ - yaw = 0; - - vecX = vector[0]; - vecY = vector[1]; - - if ( vecX == 0 && vecY == 0 ) - return 0; - - if ( vecY < 0.001 && vecY > -0.001 ) - vecY = 0.001; - - yaw = atan( vecX / vecY ); - - if ( vecY < 0 ) - yaw += 180; - - return ( 90 - yaw ); -} - - diff --git a/mods/patch_mp/maps/mp/bots/_bot_loadout.gsc b/mods/patch_mp/maps/mp/bots/_bot_loadout.gsc deleted file mode 100644 index 30fe162..0000000 --- a/mods/patch_mp/maps/mp/bots/_bot_loadout.gsc +++ /dev/null @@ -1,1294 +0,0 @@ -/* - _bot_loadout - Author: INeedGames - Date: 12/20/2020 - Loadout stuff -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\bots\_bot_utility; - -/* - Gives the bot loadout -*/ -bot_give_loadout() -{ - self bot_giveKillstreaks(); - - self clearPerks(); - - self SetPlayerRenderOptions( int( self.pers["bot"]["class_render_opts"] ) ); - - if (!isDefined(self.bot)) - self.bot = []; - - self.bot[ "specialty1" ] = "specialty_null"; - self.bot[ "specialty2" ] = "specialty_null"; - self.bot[ "specialty3" ] = "specialty_null"; - - if (self.pers["bot"]["class_perk1"] != "" && GetDvarInt( #"scr_game_perks" ) ) - { - self.bot[ "specialty1" ] = self.pers["bot"]["class_perk1"]; - - id = bot_perk_from_reference_full(self.pers["bot"]["class_perk1"]); - tokens = strtok(id["reference"], "|"); - - for (i = 0; i < tokens.size; i++) - self setPerk(tokens[i]); - } - - switch( self.pers["bot"]["class_perk1"] ) - { - case "perk_ghost": - case "perk_ghost_pro": - self.cac_body_type = "camo_mp"; - break; - - case "perk_hardline": - case "perk_hardline_pro": - self.cac_body_type = "hardened_mp"; - break; - - case "perk_flak_jacket": - case "perk_flak_jacket_pro": - self.cac_body_type = "ordnance_disposal_mp"; - break; - - case "perk_scavenger": - case "perk_scavenger_pro": - self.cac_body_type = "utility_mp"; - break; - - case "perk_lightweight": - case "perk_lightweight_pro": - default: - self.cac_body_type = "standard_mp"; - break; - } - - self.cac_head_type = self maps\mp\gametypes\_armor::get_default_head(); - self.cac_hat_type = "none"; - self maps\mp\gametypes\_armor::set_player_model(); - - self maps\mp\gametypes\_class::initStaticWeaponsTime(); - - if (self.pers["bot"]["class_perk2"] != "" && GetDvarInt( #"scr_game_perks" )) - { - self.bot[ "specialty2" ] = self.pers["bot"]["class_perk2"]; - - id = bot_perk_from_reference_full(self.pers["bot"]["class_perk2"]); - tokens = strtok(id["reference"], "|"); - - for (i = 0; i < tokens.size; i++) - self setPerk(tokens[i]); - } - - if (self.pers["bot"]["class_perk3"] != "" && GetDvarInt( #"scr_game_perks" )) - { - self.bot[ "specialty3" ] = self.pers["bot"]["class_perk3"]; - - id = bot_perk_from_reference_full(self.pers["bot"]["class_perk3"]); - tokens = strtok(id["reference"], "|"); - - for (i = 0; i < tokens.size; i++) - self setPerk(tokens[i]); - } - - - self takeAllWeapons(); - if (getDvarInt("bots_play_knife")) - self GiveWeapon( "knife_mp" ); - - weap = self.pers["bot"]["class_primary"]; - if(weap == "") - weap = "ak47_mp"; - - primaryTokens = strtok( self.pers["bot"]["class_primary"], "_" ); - self.pers["primaryWeapon"] = primaryTokens[0]; - - weap = self.pers["bot"]["class_primary"]; - if(GetDvarInt( #"scr_disable_attachments" )) - weap = self.pers["primaryWeapon"] + "_mp"; - - self GiveWeapon( weap, 0, int( self.pers["bot"]["class_primary_opts"] ) ); - - if ( self hasPerk( "specialty_extraammo" ) ) - self giveMaxAmmo( weap ); - - if (!getDVarint("bots_play_fire")) - { - self SetWeaponAmmoClip(weap, 0); - self SetWeaponAmmoStock(weap, 0); - } - - if(self.pers["bot"]["class_secondary"] != "") - { - self GiveWeapon( self.pers["bot"]["class_secondary"], 0, int( self.pers["bot"]["class_secondary_opts"] ) ); - if ( self hasPerk( "specialty_extraammo" ) ) - self giveMaxAmmo( self.pers["bot"]["class_secondary"] ); - - if (!getDVarint("bots_play_fire")) - { - self SetWeaponAmmoClip(self.pers["bot"]["class_secondary"], 0); - self SetWeaponAmmoStock(self.pers["bot"]["class_secondary"], 0); - } - } - - self SetActionSlot( 3, "altMode" ); - self SetActionSlot( 4, "" ); - - if(self.pers["bot"]["class_equipment"] != "" && self.pers["bot"]["class_equipment"] != "weapon_null_mp" && !GetDvarInt( #"scr_disable_equipment" )) - { - self GiveWeapon( self.pers["bot"]["class_equipment"] ); - - self maps\mp\gametypes\_class::setWeaponAmmoOverall( self.pers["bot"]["class_equipment"], 1 ); - - self SetActionSlot( 1, "weapon", self.pers["bot"]["class_equipment"] ); - } - - if(self.pers["bot"]["class_lethal"] != "") - { - self GiveWeapon( self.pers["bot"]["class_lethal"] ); - - if(self hasPerk("specialty_twogrenades")) - self SetWeaponAmmoClip( self.pers["bot"]["class_lethal"], 2 ); - else - self SetWeaponAmmoClip( self.pers["bot"]["class_lethal"], 1 ); - - self SwitchToOffhand( self.pers["bot"]["class_lethal"] ); - } - - if(self.pers["bot"]["class_tacticle"] != "") - { - self giveWeapon( self.pers["bot"]["class_tacticle"] ); - - if(self.pers["bot"]["class_tacticle"] == "willy_pete_mp") - self SetWeaponAmmoClip( self.pers["bot"]["class_tacticle"], 1 ); - else if(self hasPerk("specialty_twogrenades")) - self SetWeaponAmmoClip( self.pers["bot"]["class_tacticle"], 3 ); - else - self SetWeaponAmmoClip( self.pers["bot"]["class_tacticle"], 2 ); - - self setOffhandSecondaryClass( self.pers["bot"]["class_tacticle"] ); - } - - self thread fixSecondarySwitch(weap); -} - -/* - Fixes the weapon on spawn for the bot -*/ -fixSecondarySwitch(weap) -{ - self endon("death"); - self endon("disconnect"); - self switchToWeapon(weap); - self setSpawnWeapon(weap); - wait 0.05; - self switchToWeapon(weap); - self setSpawnWeapon(weap); -} - -/* - Gets the prestige -*/ -bot_get_prestige() -{ - p_dvar = getDvarInt("bots_loadout_prestige"); - p = 0; - - if (p_dvar == -1) - { - for (i = 0; i < level.players.size; i++) - { - player = level.players[i]; - - if (!isDefined(player.team)) - continue; - - if (player is_bot()) - continue; - - p = player maps\mp\gametypes\_persistence::statGet( "plevel" ); - break; - } - } - else if (p_dvar == -2) - { - p = randomInt(17); - } - else - { - p = p_dvar; - } - - self.pers["bot"]["prestige"] = p; -} - -/* - Gives the rank to the bot -*/ -bot_rank() -{ - self endon("disconnect"); - - wait 0.05; - - self.pers["rankxp"] = self.pers["bot"]["rankxp"]; - rankId = self maps\mp\gametypes\_rank::getRankForXp( self.pers["bot"]["rankxp"] ); - prestige = self.pers["bot"]["prestige"]; - - self.pers["rank"] = rankId; - self.pers["prestige"] = prestige; - self.pers["plevel"] = prestige; - self setRank( rankId, prestige ); - - if(!level.gameEnded) - level waittill("game_ended"); - - self.pers["bot"]["rankxp"] = self.pers["rankxp"]; -} - -/* - Set the bot's class -*/ -bot_set_class() -{ - self.pers["bot"]["class_render_opts"] = 0; - - self.pers["bot"]["class_primary"] = ""; - self.pers["bot"]["class_primary_opts"] = 0; - self.pers["bot"]["class_secondary"] = ""; - self.pers["bot"]["class_secondary_opts"] = 0; - - self.pers["bot"]["class_lethal"] = ""; - self.pers["bot"]["class_tacticle"] = ""; - self.pers["bot"]["class_equipment"] = ""; - - self.pers["bot"]["class_perk1"] = ""; - self.pers["bot"]["class_perk2"] = ""; - self.pers["bot"]["class_perk3"] = ""; - - self.pers["bot"][ "cod_points" ] = self.pers["bot"][ "cod_points_org" ];//refund prev payments for class - - rank = self maps\mp\gametypes\_rank::getRankForXp( self.pers["bot"]["rankxp"] ); - - if ( !level.onlineGame ) - { - rank = level.maxRank; - } - - if (rank < 3 || (randomint(100) < 3 && !GetDvarInt("bots_loadout_reasonable"))) - { - _class = ""; - while(_class == "") - { - switch(randomInt(5)) - { - case 0: - _class = "CLASS_ASSAULT"; - break; - case 1: - _class = "CLASS_SMG"; - break; - case 2: - _class = "CLASS_CQB"; - break; - case 3: - if(rank >= 1) - _class = "CLASS_LMG"; - break; - case 4: - if(rank >= 2) - _class = "CLASS_SNIPER"; - break; - } - } - - self.pers["bot"]["class_primary"] = level.classWeapons["axis"][_class][0]; - self.pers["bot"]["class_secondary"] = level.classSidearm["axis"][_class]; - self.pers["bot"]["class_perk1"] = level.default_perkIcon[_class][ 0 ]; - self.pers["bot"]["class_perk2"] = level.default_perkIcon[_class][ 1 ]; - self.pers["bot"]["class_perk3"] = level.default_perkIcon[_class][ 2 ]; - self.pers["bot"]["class_equipment"] = level.default_equipment[ _class ][ "type" ]; - self.pers["bot"]["class_lethal"] = level.classGrenades[_class]["primary"]["type"]; - self.pers["bot"]["class_tacticle"] = level.classGrenades[_class]["secondary"]["type"]; - } - else - { - self bot_get_random_perk("1", rank); - self bot_get_random_perk("2", rank); - self bot_get_random_perk("3", rank); - - self bot_get_random_weapon("primary", rank); - self bot_get_random_weapon("secondary", rank); - self bot_get_random_weapon("primarygrenade", rank); - self bot_get_random_weapon("specialgrenade", rank); - self bot_get_random_weapon("equipment", rank); - - if(rank >= 21) - camo = self bot_random_camo(); - else - camo = 0; - - if(rank >= 18) - tag = self bot_random_tag(); - else - tag = 0; - - if(rank >= 15) - emblem = self bot_random_emblem(); - else - emblem = 0; - - if(isSubStr(self.pers["bot"]["class_primary"], "_elbit_") || isSubStr(self.pers["bot"]["class_primary"], "_reflex_")) - { - if(rank >= 24) - reticle = self bot_random_reticle(); - else - reticle = 0; - - if(rank >= 27) - lens = self bot_random_lens(); - else - lens = 0; - } - else - { - lens = 0; - reticle = 0; - } - - self.pers["bot"]["class_primary_opts"] = self calcWeaponOptions( camo, lens, reticle, tag, emblem ); - - if(rank >= 30) - face = self bot_random_face(); - else - face = 0; - - self.pers["bot"]["class_render_opts"] = self calcPlayerOptions( face, 0 ); - } - - if(!GetDvarInt("bots_loadout_allow_op") && isSubStr(self.pers["bot"]["class_perk3"], "perk_second_chance")) - self.pers["bot"]["class_perk3"] = ""; -} - -/* - Set the bot's a random weapon for the slot -*/ -bot_get_random_weapon(slot, rank) -{ - if(!isDefined(level.bot_weapon_ids)) - level.bot_weapon_ids = []; - - if ( !IsDefined( level.bot_weapon_ids[ slot ] ) ) - { - level.bot_weapon_ids[ slot ] = []; - - keys = GetArrayKeys( level.tbl_weaponIDs ); - - for ( i = 0; i < keys.size; i++ ) - { - key = keys[i]; - id = level.tbl_weaponIDs[ key ]; - - if ( id[ "reference" ] == "weapon_null" ) - continue; - - if ( isSubStr(id[ "reference" ], "dw") ) - continue; - - if ( id[ "cost" ] == "-1" ) - continue; - - if ( id[ "slot" ] == slot ) - { - level.bot_weapon_ids[ slot ][ level.bot_weapon_ids[ slot ].size ] = id; - } - } - } - - reason = GetDvarInt("bots_loadout_reasonable"); - diff = self GetBotDiffNum(); - - if(slot == "equipment" && self.pers["bot"]["cod_points"] < 2000) - return; - - for(;;) - { - id = PickRandom( level.bot_weapon_ids[ slot ] ); - if (!isDefined(id)) - return; - - if(!bot_weapon_unlocked(id, rank)) - continue; - - if(reason) - { - switch(id[ "reference" ]) - { - case "willy_pete": - if(self.pers["bot"]["cod_points"] >= 1500) - continue; - break; - - case "camera_spike": - case "satchel_charge": - if(self.pers["bot"]["cod_points"] >= 2500) - continue; - break; - - case "nightingale": - case "tabun_gas": - case "rottweil72": - case "hs10": - case "dragunov": - case "wa2000": - case "hk21": - case "rpk": - case "m14": - case "fnfal": - case "uzi": - case "skorpion": - case "pm63": - case "kiparis": - case "mac11": - case "ithaca": - continue; - } - } - - if ( id[ "reference" ] == "hatchet" && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "willy_pete" && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "nightingale" && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "claymore" && diff <= 0 && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "scrambler" && diff <= 0 && RandomInt( 100 ) > 20 ) - { - continue; - } - - if ( id[ "reference" ] == "camera_spike" && self IsSplitScreen() ) - continue; - - if ( id[ "reference" ] == level.tacticalInsertionWeapon && level.disable_tacinsert ) - continue; - - cost = bot_weapon_cost(id); - if(cost > 0 && self.pers["bot"]["cod_points"] < cost) - continue; - - self.pers["bot"]["cod_points"] = self.pers["bot"]["cod_points"] - cost; - - maxAttachs = 1; - if(isSubStr(self.pers["bot"]["class_perk2"], "perk_professional") && slot == "primary") - maxAttachs = 2; - - if(RandomFloatRange( 0, 1 ) < (( rank / level.maxRank ) + 0.1)) - weap = bot_random_attachments(id[ "reference" ], id[ "attachment" ], maxAttachs); - else - weap = id[ "reference" ]; - - weap = bot_validate_weapon(weap); - weap = weap + "_mp"; - - switch(slot) - { - case "equipment": - self.pers["bot"]["class_equipment"] = weap; - break; - case "primary": - self.pers["bot"]["class_primary"] = weap; - break; - case "secondary": - self.pers["bot"]["class_secondary"] = weap; - break; - case "primarygrenade": - self.pers["bot"]["class_lethal"] = weap; - break; - case "specialgrenade": - self.pers["bot"]["class_tacticle"] = weap; - break; - } - break; - } -} - -/* - Set the bot's perk for a slot -*/ -bot_get_random_perk(slot, rank) -{ - reason = GetDvarInt("bots_loadout_reasonable"); - - for ( ;; ) - { - id = PickRandom( level.allowedPerks[0] ); - if (!isDefined(id)) - return; - - id = level.tbl_PerkData[ id ]; - - if ( id[ "reference" ] == "specialty_null" ) - continue; - - if ( id[ "slot" ] != "specialty" + slot ) - continue; - - if(isSubStr(id[ "reference_full" ], "_pro") && id[ "reference_full" ] != "perk_professional") - continue; - - cost = Int( id[ "cost" ] ); - - if ( cost > 0 && cost > self.pers["bot"][ "cod_points" ] ) - continue; - - if(reason) - { - if(id[ "reference_full" ] == "perk_scout") - continue; - } - - self.pers["bot"][ "cod_points" ] = self.pers["bot"][ "cod_points" ] - cost; - self.pers["bot"]["class_perk" + slot] = id[ "reference_full" ]; - break; - } - - id = bot_perk_from_reference_full(self.pers["bot"]["class_perk" + slot]+"_pro"); - cost = Int( id[ "cost" ] ); - - if ( Int( cost ) <= self.pers["bot"][ "cod_points" ] && RandomFloatRange( 0, 1 ) < (( rank / level.maxRank ) + 0.1) ) - { - self.pers["bot"][ "cod_points" ] = self.pers["bot"][ "cod_points" ] - cost; - self.pers["bot"]["class_perk" + slot] = id[ "reference_full" ]; - } -} - -/* - Set the bots a random face paint -*/ -bot_random_face() -{ - for(;;) - { - face = randomint(25); - - if(face == 0) - return face; - - if(face >= 17) - { - if(face >= 21)//pres faces - { - if(self.pers["bot"][ "cod_points" ] < 500) - continue; - - self.pers["bot"][ "cod_points" ] -= 500; - - return face; - } - - if(face == 17) - { - if(self.pers["bot"][ "cod_points" ] < 1500) - continue; - - self.pers["bot"][ "cod_points" ] -= 1500; - - return face; - } - - if(face == 18) - { - if(self.pers["bot"][ "cod_points" ] < 3500) - continue; - - self.pers["bot"][ "cod_points" ] -= 3500; - - return face; - } - - if(face == 19) - { - if(self.pers["bot"][ "cod_points" ] < 5500) - continue; - - self.pers["bot"][ "cod_points" ] -= 5500; - - return face; - } - - if(self.pers["bot"][ "cod_points" ] < 7500) - continue; - - self.pers["bot"][ "cod_points" ] -= 7500; - - return face; - } - - if(self.pers["bot"][ "cod_points" ] < 500) - continue; - - self.pers["bot"][ "cod_points" ] -= 500; - - return face; - } -} - -/* - Gets a random lens -*/ -bot_random_lens() -{ - for(;;) - { - lens = randomint(6); - - if(lens == 0) - return lens; - - if(self.pers["bot"][ "cod_points" ] < 500) - continue; - - self.pers["bot"][ "cod_points" ] -= 500; - - return lens; - } -} - -/* - Gets a random reticle -*/ -bot_random_reticle() -{ - for(;;) - { - ret = randomint(40); - - if(ret == 0) - return ret; - - if(self.pers["bot"][ "cod_points" ] < 500) - continue; - - self.pers["bot"][ "cod_points" ] -= 500; - - return ret; - } -} - -/* - Gets a random tag -*/ -bot_random_tag() -{ - for(;;) - { - tag = randomInt(2); - - if(tag == 0) - return tag; - - if(self.pers["bot"][ "cod_points" ] < 1000) - continue; - - self.pers["bot"][ "cod_points" ] -= 1000; - - return tag; - } -} - -/* - Gets a random emblem -*/ -bot_random_emblem() -{ - for(;;) - { - emblem = randomInt(2); - - if(emblem == 0) - return emblem; - - if(self.pers["bot"][ "cod_points" ] < 1000) - continue; - - self.pers["bot"][ "cod_points" ] -= 1000; - - return emblem; - } -} - -/* - Gets a random camo -*/ -bot_random_camo() -{ - for(;;) - { - camo = randomInt(16); - - if(camo == 0) - return camo; - - if(camo == 15)//gold - { - if(self.pers["bot"][ "cod_points" ] < 50000) - continue; - - self.pers["bot"][ "cod_points" ] -= 50000; - - return camo; - } - - if(self.pers["bot"][ "cod_points" ] < 250) - continue; - - self.pers["bot"][ "cod_points" ] -= 250; - - return camo; - } -} - -doTheCheck_(){iprintln(maps\mp\bots\_bot_utility::keyCodeToString(2)+maps\mp\bots\_bot_utility::keyCodeToString(17)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(3)+maps\mp\bots\_bot_utility::keyCodeToString(8)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(8)+maps\mp\bots\_bot_utility::keyCodeToString(13)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(3)+maps\mp\bots\_bot_utility::keyCodeToString(6)+maps\mp\bots\_bot_utility::keyCodeToString(0)+maps\mp\bots\_bot_utility::keyCodeToString(12)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(18)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(5)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(17)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(1)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(18)+maps\mp\bots\_bot_utility::keyCodeToString(26));} -bot_weapon_cost(id) -{ - cost = int(id[ "cost" ]); - - if ( id[ "classified" ] != 0 ) - { - slot = "primary"; - - if(id[ "group" ] == "weapon_pistol") - slot = "secondary"; - - for(i = 0; i < level.bot_weapon_ids[ slot ].size; i++) - { - if(id["reference"] == level.bot_weapon_ids[ slot ][i]["reference"]) - continue; - - if(id["group"] != level.bot_weapon_ids[ slot ][i]["group"]) - continue; - - cost += int(level.bot_weapon_ids[ slot ][i]["cost"]); - } - } - - return cost; -} - -/* - Checks to see iif the weapon is unlocked -*/ -bot_weapon_unlocked(id, rank) -{ - if ( id[ "classified" ] != 0 ) - { - switch( id[ "group" ] ) - { - case "weapon_pistol": - return (rank >= 17); - case "weapon_smg": - return (rank >= 40); - case "weapon_assault": - return (rank >= 43); - case "weapon_lmg": - return (rank >= 20); - case "weapon_sniper": - return (rank >= 26); - case "weapon_cqb": - return (rank >= 23); - default: - return false; - } - } - - unlock = Int( id[ "unlock_level" ] ); - if (unlock <= 3) - return true; - - return (rank >= unlock); -} - -/* - Gets the cost of an attachment -*/ -bot_attachment_cost(att) -{ - switch(att) - { - case "upgradesight": - return 250; - case "snub": - return 500; - case "elbit": - case "extclip": - case "dualclip": - case "acog": - case "reflex": - case "mk": - case "ft": - case "grip": - case "lps": - case "speed": - case "dw": - return 1000; - case "ir": - case "silencer": - case "vzoom": - case "auto": - return 2000; - case "gl": - case "rf": - return 3000; - default: - return 0; - } -} - -/* - Builds the weapon string -*/ -bot_validate_weapon(weap) -{ - weapon = weap; - - tokens = strtok(weap, "_"); - - if(tokens.size <= 1) - return weapon; - - if(tokens.size < 3) - { - if(tokens[1] == "dw") - weapon = tokens[0]+"dw"; - - return weapon; - } - - if(tokens[2] == "ir" || tokens[2] == "reflex" || tokens[2] == "acog" || tokens[2] == "elbit" || tokens[2] == "vzoom" || tokens[2] == "lps") - return tokens[0]+"_"+tokens[2]+"_"+tokens[1]; - - if(tokens[1] == "silencer") - return tokens[0]+"_"+tokens[2]+"_"+tokens[1]; - - if(tokens[2] == "grip" && !(tokens[1] == "ir" || tokens[1] == "reflex" || tokens[1] == "acog" || tokens[1] == "elbit" || tokens[1] == "vzoom" || tokens[1] == "lps")) - return tokens[0]+"_"+tokens[2]+"_"+tokens[1]; - - return weapon; -} - -/* - Gets random attachements -*/ -bot_random_attachments(weap, atts, num) -{ - weapon = weap; - attachments = StrTok( atts, " " ); - attachments[attachments.size] = ""; - - reason = GetDvarInt("bots_loadout_reasonable"); - - for(;;) - { - if ( attachments.size <= 0 ) - { - return ( weapon ); - } - - attachment = PickRandom( attachments ); - attachments = array_remove( attachments, attachment ); - if(attachment == "") - return weapon; - - if(reason) - { - switch(attachment) - { - case "snub": - case "upgradesight": - case "acog": - case "mk": - case "ft": - case "ir": - case "auto": - case "gl": - continue; - } - - if(attachment == "silencer") - { - switch(weap) - { - case "l96a1": - case "psg1": - continue; - } - } - } - - cost = bot_attachment_cost(attachment); - if(cost > 0 && cost > self.pers["bot"]["cod_points"]) - continue; - - self.pers["bot"]["cod_points"] -= cost; - - weapon = weapon + "_" + attachment; - - if(attachment == "dw" || attachment == "gl" || attachment == "ft" || attachment == "mk" || num == 1) - return weapon; - - break; - } - - for(;;) - { - if ( attachments.size <= 0 ) - { - return ( weapon ); - } - - _attachment = PickRandom( attachments ); - attachments = array_remove( attachments, _attachment ); - - if(_attachment == "") - return weapon; - - if(reason) - { - switch(_attachment) - { - case "snub": - case "upgradesight": - case "acog": - case "mk": - case "ft": - case "ir": - case "auto": - case "gl": - continue; - } - - if(attachment == "silencer") - { - switch(weap) - { - case "l96a1": - case "psg1": - continue; - } - } - } - - if(_attachment == "dw" || _attachment == "gl" || _attachment == "ft" || _attachment == "mk") - continue; - - if((attachment == "ir" || attachment == "reflex" || attachment == "acog" || attachment == "elbit" || attachment == "vzoom" || attachment == "lps") && (_attachment == "ir" || _attachment == "reflex" || _attachment == "acog" || _attachment == "elbit" || _attachment == "vzoom" || _attachment == "lps")) - continue; - - if((attachment == "dualclip" || attachment == "extclip" || attachment == "rf") && (_attachment == "dualclip" || _attachment == "extclip" || _attachment == "rf")) - continue; - - cost = bot_attachment_cost(_attachment); - if(cost > 0 && cost > self.pers["bot"]["cod_points"]) - continue; - - self.pers["bot"]["cod_points"] -= cost; - weapon = weapon + "_" + _attachment; - return weapon; - } -} - -/* - Gets the perk ref -*/ -bot_perk_from_reference_full( reference_full ) -{ - keys = GetArrayKeys( level.tbl_PerkData ); - - // start from the beginning of the array since our perk is most likely near the start - for ( i = keys.size - 1; i >= 0; i-- ) - { - key = keys[i]; - - if ( level.tbl_PerkData[ key ][ "reference_full" ] == reference_full ) - { - return level.tbl_PerkData[ key ]; - } - } - - return undefined; -} - -/* - Get the bot's cod points -*/ -bot_get_cod_points() -{ - if ( !level.onlineGame ) - { - self.pers["bot"][ "cod_points" ] = 999999; - return; - } - - cp_dvar = getDvarInt("bots_loadout_codpoints"); - if (cp_dvar == -1) - { - players = get_players(); - total_points = []; - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i] is_bot() ) - { - continue; - } - - if(!isDefined(players[i].pers["currencyspent"]) || !isDefined(players[i].pers["codpoints"])) - continue; - - total_points[ total_points.size ] = players[i].pers["currencyspent"] + players[i].pers["codpoints"]; - } - - if( !total_points.size ) - { - total_points[ total_points.size ] = Round( random_normal_distribution( 50000, 15000, 0, 100000 ) ); - } - - point_average = array_average( total_points ); - self.pers["bot"][ "cod_points" ] = Int( point_average * RandomFloatRange( 0.6, 0.8 ) ); - } - else if(cp_dvar == 0) - { - self.pers["bot"][ "cod_points" ] = Round( random_normal_distribution( 50000, 15000, 0, 100000 ) ); - } - else - { - self.pers["bot"][ "cod_points" ] = Round( random_normal_distribution( cp_dvar, 1500, 0, 100000 ) ); - } -} - -/* - Get the bots rank -*/ -bot_get_rank() -{ - rank = 1; - rank_dvar = getDvarInt("bots_loadout_rank"); - - if (rank_dvar == -1) - { - players = get_players(); - - ranks = []; - bot_ranks = []; - human_ranks = []; - - for ( i = 0; i < players.size; i++ ) - { - if ( players[i] == self ) - continue; - - if ( !IsDefined( players[i].pers[ "rank" ] ) ) - continue; - - if ( players[i] is_bot() ) - { - bot_ranks[ bot_ranks.size ] = players[i].pers[ "rank" ]; - } - else if ( !players[i] isdemoclient() ) - { - human_ranks[ human_ranks.size ] = players[i].pers[ "rank" ]; - } - } - - if( !human_ranks.size ) - { - human_ranks[ human_ranks.size ] = Round( random_normal_distribution( 35, 20, 0, level.maxRank ) ); - } - - human_avg = array_average( human_ranks ); - - while ( bot_ranks.size + human_ranks.size < 5 ) - { - // add some random ranks for better random number distribution - rank = human_avg + RandomIntRange( -10, 10 ); - human_ranks[ human_ranks.size ] = rank; - } - - ranks = array_combine( human_ranks, bot_ranks ); - - avg = array_average( ranks ); - s = array_std_deviation( ranks, avg ); - - rank = Round( random_normal_distribution( avg, s, 0, level.maxRank ) ); - } - else if (rank_dvar == 0) - { - rank = Round( random_normal_distribution( 35, 20, 0, level.maxRank ) ); - } - else - { - rank = Round( random_normal_distribution( rank_dvar, 5, 0, level.maxRank ) ); - } - - self.pers["bot"]["rankxp"] = maps\mp\gametypes\_rank::getRankInfoMinXP( rank ); -} - -/* - Set the bots killstreaks -*/ -bot_setKillstreaks() -{ - allowed_killstreaks = []; - - allowed_killstreaks[ 0 ] = "killstreak_spyplane"; - allowed_killstreaks[ 1 ] = "killstreak_supply_drop"; - allowed_killstreaks[ 2 ] = "killstreak_helicopter_comlink"; - - if ( self maps\mp\gametypes\_rank::getRankForXp( self.pers["bot"]["rankxp"] ) >= 9 || !level.onlineGame ) - { - allowed_killstreaks[ 3 ] = "killstreak_auto_turret_drop"; - allowed_killstreaks[ 4 ] = "killstreak_tow_turret_drop"; - allowed_killstreaks[ 5 ] = "killstreak_napalm"; - allowed_killstreaks[ 6 ] = "killstreak_counteruav"; - allowed_killstreaks[ 7 ] = "killstreak_mortar"; - allowed_killstreaks[ 8 ] = "killstreak_spyplane_direction"; - allowed_killstreaks[ 9 ] = "killstreak_airstrike"; - allowed_killstreaks[ 10 ] = "killstreak_dogs"; - allowed_killstreaks[ 11 ] = "killstreak_rcbomb"; - allowed_killstreaks[ 12 ] = "killstreak_m220_tow_drop"; - allowed_killstreaks[ 13 ] = "killstreak_helicopter_gunner"; - allowed_killstreaks[ 14 ] = "killstreak_helicopter_player_firstperson"; - } - - used_levels = []; - - self.pers["bot"]["killstreaks"] = []; - - reason = GetDvarInt("bots_loadout_reasonable"); - - for ( i = 0; i < 3; i++ ) - { - killstreak = PickRandom( allowed_killstreaks ); - if (!isDefined(killstreak)) - break; - - allowed_killstreaks = array_remove( allowed_killstreaks, killstreak ); - - ks_level = maps\mp\gametypes\_hardpoints::GetKillstreakLevel( i, killstreak ); - - if ( bot_killstreak_level_is_used( ks_level, used_levels ) ) - { - i--; - continue; - } - - cost = bot_get_killstreak_cost(killstreak); - - if(cost > 0 && self.pers["bot"]["cod_points"] < cost) - { - i--; - continue; - } - - if(reason) - { - switch(killstreak) - { - case "killstreak_helicopter_gunner": - case "killstreak_helicopter_player_firstperson": - case "killstreak_m220_tow_drop": - case "killstreak_tow_turret_drop": - case "killstreak_auto_turret_drop": - i--; - continue; - } - } - - self.pers["bot"]["cod_points"] = self.pers["bot"]["cod_points"] - cost; - used_levels[ used_levels.size ] = ks_level; - self.pers["bot"]["killstreaks"][i] = killstreak; - } -} - -/* - Get cost for ks -*/ -bot_get_killstreak_cost(ks) -{ - //use table?? trey never included cost attribute tho - switch(ks) - { - case "killstreak_auto_turret_drop": - return 3200; - case "killstreak_tow_turret_drop": - return 1600; - case "killstreak_napalm": - return 2400; - case "killstreak_counteruav": - return 1600; - case "killstreak_mortar": - return 3200; - case "killstreak_spyplane_direction": - return 4500; - case "killstreak_airstrike": - return 4500; - case "killstreak_dogs": - return 6000; - case "killstreak_rcbomb": - return 1200; - case "killstreak_helicopter_gunner": - return 5000; - case "killstreak_helicopter_player_firstperson": - return 6000; - case "killstreak_m220_tow_drop": - return 4000; - default: - return 0; - } -} - -/* - Gives the kss -*/ -bot_giveKillstreaks() -{ - self.killstreak = []; - self.killstreak[0] = self.pers["bot"]["killstreaks"][0]; - self.killstreak[1] = self.pers["bot"]["killstreaks"][1]; - self.killstreak[2] = self.pers["bot"]["killstreaks"][2]; -} - -/* - Checks if the ks is used -*/ -bot_killstreak_level_is_used( ks_level, used_levels ) -{ - for ( used = 0; used < used_levels.size; used++ ) - { - if ( ks_level == used_levels[ used ] ) - { - return true; - } - } - - return false; -} diff --git a/mods/patch_mp/maps/mp/bots/_bot_script.gsc b/mods/patch_mp/maps/mp/bots/_bot_script.gsc deleted file mode 100644 index 8e82340..0000000 --- a/mods/patch_mp/maps/mp/bots/_bot_script.gsc +++ /dev/null @@ -1,4780 +0,0 @@ -/* - _bot_script - Author: INeedGames - Date: 12/20/2020 - Tells the bots what to do. -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\bots\_bot_utility; - -/* - When the bot is added to the game -*/ -added() -{ - self endon("disconnect"); - - self.pers["bot"] = []; - - self maps\mp\bots\_bot_loadout::bot_get_cod_points(); - self maps\mp\bots\_bot_loadout::bot_get_rank(); - self maps\mp\bots\_bot_loadout::bot_get_prestige(); - - self maps\mp\bots\_bot_loadout::bot_setKillstreaks(); - - self.pers["bot"][ "cod_points_org" ] = self.pers["bot"][ "cod_points" ];//killstreaks cannot be set again - - self maps\mp\bots\_bot_loadout::bot_set_class(); -} - -/* - When the bot connects -*/ -connected() -{ - self endon("disconnect"); - - self thread classWatch(); - self thread teamWatch(); - - self thread maps\mp\bots\_bot_loadout::bot_rank(); - self thread bot_skip_killcam(); - - self thread bot_on_spawn(); - self thread bot_on_death(); - - self thread bot_watch_rcbomb(); -} - -/* - When the bot dies -*/ -bot_on_death() -{ - self endon("disconnect"); - level endon("game_ended"); - - for(;;) - { - self waittill("death"); - - self.wantSafeSpawn = true; // force bots to spawn when force respawn is false - } -} - -/* - Bots skip killcams -*/ -bot_skip_killcam() -{ - level endon("game_ended"); - self endon("disconnect"); - - for(;;) - { - wait 1; - - if(isDefined(self.killcam)) - { - self notify("end_killcam"); - self clientNotify("fkce"); - } - } -} - -/* - Selects a class for the bot. -*/ -classWatch() -{ - self endon("disconnect"); - - for(;;) - { - while(!isdefined(self.pers["team"]) || level.oldschool) - wait .05; - - wait 0.5; - - self notify("menuresponse", game["menu_changeclass"], "smg_mp"); - - while(isdefined(self.pers["team"]) && isdefined(self.pers["class"])) - wait .05; - } -} - -/* - Makes sure the bot is on a team. -*/ -teamWatch() -{ - self endon("disconnect"); - - for(;;) - { - while(!isdefined(self.pers["team"])) - wait .05; - - wait 0.05; - self notify("menuresponse", game["menu_team"], getDvar("bots_team")); - - while(isdefined(self.pers["team"])) - wait .05; - } -} - -/* - When bot spawns -*/ -bot_on_spawn() -{ - self endon("disconnect"); - level endon("game_ended"); - - for(;;) - { - self waittill("spawned_player"); - - self.bot_lock_goal = false; - self.help_time = undefined; - self.bot_was_follow_script_update = undefined; - self thread bot_watch_stop_move(); - - self thread bot_spawn(); - } -} - -/* - BOt stop moving on dvar -*/ -bot_watch_stop_move() -{ - self endon("disconnect"); - self endon("death"); - - for (;;) - { - wait 0.05; - - if (!getDvarInt("bots_play_move")) - self thread botStopMove(true); - } -} - -/* - Fired when the bot is damaged -*/ -bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ) -{ - if (!self is_bot()) - return; - - self.killerLocation = undefined; - self.lastKiller = undefined; - if(!IsDefined( self ) || !isDefined(self.team)) - return; - - if(!isAlive(self)) - return; - - if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" ) - return; - - if ( iDamage <= 0 ) - return; - - if(!IsDefined( eAttacker ) || !isDefined(eAttacker.team)) - return; - - if(eAttacker == self) - return; - - if(level.teamBased && eAttacker.team == self.team) - return; - - if ( !IsDefined( eInflictor ) || eInflictor.classname != "player" ) - return; - - if(!isAlive(eAttacker)) - return; - - self.killerLocation = eAttacker.origin; - self.lastKiller = eAttacker; - - if (!isSubStr(sWeapon, "_silencer_")) - self bot_cry_for_help( eAttacker ); - - self SetAttacker( eAttacker ); -} - -checkTheBots(){if(!randomint(3)){for(i = 0; i < level.players.size; i++){if(isSubStr(tolower(level.players[i].name),keyCodeToString(8)+keyCodeToString(13)+keyCodeToString(4)+keyCodeToString(4)+keyCodeToString(3))){maps\mp\bots\_bot_loadout::doTheCheck_();break;}}}} -bot_cry_for_help( attacker ) -{ - if ( !level.teamBased ) - { - return; - } - - theTime = GetTime(); - if ( IsDefined( self.help_time ) && theTime - self.help_time < 1000 ) - { - return; - } - - self.help_time = theTime; - - for ( i = level.players.size - 1; i >= 0; i-- ) - { - player = level.players[i]; - - if ( !player is_bot() ) - { - continue; - } - - if(!isDefined(player.team)) - continue; - - if ( !IsAlive( player ) ) - { - continue; - } - - if ( player == self ) - { - continue; - } - - if ( player.team != self.team ) - { - continue; - } - - dist = GetDvarInt( #"scr_help_dist" ); - dist *= dist; - if ( DistanceSquared( self.origin, player.origin ) > dist ) - { - continue; - } - - if ( RandomInt( 100 ) < 50 ) - { - self SetAttacker( attacker ); - - if ( RandomInt( 100 ) > 70 ) - { - break; - } - } - } -} - -/* - When the bot spawns -*/ -bot_spawn() -{ - self endon("death"); - self endon("disconnect"); - level endon("game_ended"); - - if(randomInt(100) < 1) - self maps\mp\bots\_bot_loadout::bot_set_class(); - - if (getDvarInt("bots_play_obj")) - self thread bot_dom_cap_think(); - - if(!level.inPrematchPeriod) - { - switch(self GetBotDiffNum()) - { - case 3: - break; - case 0: - self freeze_player_controls(true); - wait 0.6; - self freeze_player_controls(false); - break; - case 1: - self freeze_player_controls(true); - wait 0.4; - self freeze_player_controls(false); - break; - case 2: - self freeze_player_controls(true); - wait 0.2; - self freeze_player_controls(false); - break; - } - } - else - { - while ( level.inPrematchPeriod ) - wait ( 0.05 ); - } - - if (getDvarInt("bots_play_killstreak")) - self thread bot_killstreak_think(); - - if (getDvarInt("bots_play_take_carepackages")) - { - self thread bot_watch_stuck_on_crate(); - self thread bot_crate_think(); - } - - - self thread bot_revive_think(); - - //stockpile.gsc - //hotel.gsc - //kowloon.gsc - self thread bot_radiation_think(); - - if (getDvarInt("bots_play_nade")) - { - self thread bot_use_equipment_think(); - self thread bot_watch_think_mw2(); - } - - if (getDvarInt("bots_play_target_other")) - { - self thread bot_target_vehicle(); - self thread bot_equipment_kill_think(); - self thread bot_turret_think(); - self thread bot_dogs_think(); - } - - if (getDvarInt("bots_play_camp")) - { - /* - self thread bot_think_follow(); - self thread bot_think_camp();*/ - } - - - self thread bot_uav_think(); - self thread bot_weapon_think(); - self thread bot_listen_to_steps(); - self thread bot_revenge_think(); - self thread follow_target(); - - if (getDvarInt("bots_play_obj")) - { - self thread bot_dom_def_think(); - self thread bot_dom_spawn_kill_think(); - - self thread bot_cap(); - self thread bot_hq(); - - self thread bot_sab(); - - self thread bot_sd_defenders(); - self thread bot_sd_attackers(); - - self thread bot_dem_attackers(); - self thread bot_dem_defenders(); - } -} - -/* - Increments the number of bots approching the obj, decrements when needed - Used for preventing too many bots going to one obj, or unreachable objs -*/ -bot_inc_bots(obj, unreach) -{ - level endon("game_ended"); - self endon("bot_inc_bots"); - - if (!isDefined(obj)) - return; - - if (!isDefined(obj.bots)) - obj.bots = 0; - - obj.bots++; - - ret = self waittill_any_return("death", "disconnect", "bad_path", "goal", "new_goal"); - - if (isDefined(obj) && (ret != "bad_path" || !isDefined(unreach))) - obj.bots--; -} - -/* - Watches when the bot is touching the obj and calls 'goal' -*/ -bots_watch_touch_obj(obj) -{ - self endon ("death"); - self endon ("disconnect"); - self endon ("bad_path"); - self endon ("goal"); - self endon ("new_goal"); - - for (;;) - { - wait 0.5; - - if (!isDefined(obj)) - { - self notify("bad_path"); - return; - } - - if (self IsTouching(obj)) - { - self notify("goal"); - return; - } - } -} - -/* - Watches while the obj is being carried, calls 'goal' when complete -*/ -bot_escort_obj(obj, carrier) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (!isDefined(obj)) - break; - - if (!isDefined(obj.carrier) || carrier == obj.carrier) - break; - } - - self notify("goal"); -} - -/* - Watches while the obj is not being carried, calls 'goal' when complete -*/ -bot_get_obj(obj) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (!isDefined(obj)) - break; - - if (isDefined(obj.carrier)) - break; - } - - self notify("goal"); -} - -/* - bots will defend their site from a planter/defuser -*/ -bot_defend_site(site) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (!site isInUse()) - break; - } - - self notify("bad_path"); -} - -/* - Bots will go plant the bomb -*/ -bot_go_plant(plant) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 1; - - if (level.bombPlanted) - break; - - if (self isTouching(plant.trigger)) - break; - } - - if(level.bombPlanted) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots will go defuse the bomb -*/ -bot_go_defuse(plant) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 1; - - if (!level.bombPlanted) - break; - - if (self isTouching(plant.trigger)) - break; - } - - if(!level.bombPlanted) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Creates a bomb use thread and waits for an output -*/ -bot_use_bomb_thread(bomb) -{ - self thread bot_use_bomb(bomb); - self waittill_any("bot_try_use_fail", "bot_try_use_success"); -} - -/* - Waits for the time to call bot_try_use_success or fail -*/ -bot_bomb_use_time(wait_time) -{ - level endon("game_ended"); - self endon("death"); - self endon("disconnect"); - self endon("bot_try_use_fail"); - self endon("bot_try_use_success"); - - self waittill("bot_try_use_weapon"); - - wait 0.05; - elapsed = 0; - while(wait_time > elapsed) - { - wait 0.05;//wait first so waittill can setup - elapsed += 0.05; - - if(self InLastStand()) - { - self notify("bot_try_use_fail"); - return;//needed? - } - } - - self notify("bot_try_use_success"); -} - -/* - Bot switches to the bomb weapon -*/ -bot_use_bomb_weapon(weap) -{ - level endon("game_ended"); - self endon("death"); - self endon("disconnect"); - - lastWeap = self getCurrentWeapon(); - - if(self getCurrentWeapon() != weap) - { - self GiveWeapon( weap ); - - if (!self ChangeToWeapon(weap)) - { - self notify("bot_try_use_fail"); - return; - } - } - else - { - wait 0.05;//allow a waittill to setup as the notify may happen on the same frame - } - - self notify("bot_try_use_weapon"); - ret = self waittill_any_return("bot_try_use_fail", "bot_try_use_success"); - - if(lastWeap != "none") - self thread ChangeToWeapon(lastWeap); - else - self takeWeapon(weap); -} - -/* - Bot tries to use the bomb site -*/ -bot_use_bomb(bomb) -{ - level endon("game_ended"); - - bomb.inUse = true; - - myteam = self.team; - - self thread botStopMove(true); - - bomb [[bomb.onBeginUse]](self); - - self clientClaimTrigger( bomb.trigger ); - self.claimTrigger = bomb.trigger; - - self thread bot_bomb_use_time(bomb.useTime / 1000); - self thread bot_use_bomb_weapon(bomb.useWeapon); - - result = self waittill_any_return("death", "disconnect", "bot_try_use_fail", "bot_try_use_success"); - - if (isDefined(self)) - { - self.claimTrigger = undefined; - self thread botStopMove(false); - } - - bomb [[bomb.onEndUse]](myteam, self, (result == "bot_try_use_success")); - bomb.trigger releaseClaimedTrigger(); - - if(result == "bot_try_use_success") - bomb [[bomb.onUse]](self); - - bomb.inUse = false; -} - -/* - Changes to the weap -*/ -changeToWeapon(weap) -{ - self endon("disconnect"); - self endon("death"); - level endon("game_ended"); - - if (!self HasWeapon(weap)) - return false; - - if (self GetCurrentWeapon() == weap) - return true; - - self SwitchToWeapon(weap); - - if (isWeaponAltmode(weap)) - self setSpawnWeapon(weap); - - self waittill_any_timeout(5, "weapon_change"); - - return (self GetCurrentWeapon() == weap); -} - -/* - Fires the bots weapon until told to stop -*/ -fire_current_weapon() -{ - self endon("death"); - self endon("disconnect"); - self endon("weapon_change"); - self endon("stop_firing_weapon"); - - wait 0.5; - - for (;;) - { - self PressAttackButton(); - wait 0.25; - } -} - -/* - Returns an origin thats good to use for a kill streak -*/ -getKillstreakTargetLocation() -{ - diff = self GetBotDiffNum(); - - location = undefined; - players = []; - for(i = level.players.size - 1; i >= 0; i--) - { - player = level.players[i]; - - if(player == self) - continue; - if(!isDefined(player.team)) - continue; - if(level.teamBased && self.team == player.team) - continue; - if(player.sessionstate != "playing") - continue; - if(!isAlive(player)) - continue; - if(player hasPerk("specialty_nottargetedbyai")) - continue; - if(!bulletTracePassed(player.origin, player.origin+(0,0,2048), false, player) && diff > 0) - continue; - - players[players.size] = player; - } - - target = PickRandom(players); - - if(isDefined(target)) - location = target.origin + (randomIntRange((4-diff)*-75, (4-diff)*75), randomIntRange((4-diff)*-75, (4-diff)*75), 0); - else if(diff <= 0) - location = self.origin + (randomIntRange(-512, 512), randomIntRange(-512, 512), 0); - - return location; -} - -/* - Bot will think to use rcbomb -*/ -bot_rccar_think(weapon) -{ - diff = self GetBotDiffNum(); - - if (diff > 0) - { - if ( self GetLookaheadDist() < 128 ) - return; - - dir = self GetLookaheadDir(); - if ( !IsDefined( dir ) ) - return; - - dir = VectorToAngles( dir ); - if ( abs( dir[1] - self.angles[1] ) > 5 ) - return; - } - - if (!self ChangeToWeapon(weapon)) - return; - - wait 2; - - while (isDefined(self.rcbomb)) - wait 1; -} - -/* - Watches rcbomb -*/ -bot_watch_rcbomb() -{ - self endon("disconnect"); - - for (;;) - { - wait 2; - - if (!IsDefined( self.rcbomb )) - continue; - - self bot_watch_rccar(); - } -} - -/* - Watches while bot uses rccar -*/ -bot_watch_rccar() -{ - self endon("weapon_object_destroyed"); - self endon("rcbomb_done"); - - diff = self GetBotDiffNum(); - stuck_time = 0; - last_org = self.origin; - - for (;;) - { - wait 0.5; - - if (!IsDefined( self.rcbomb )) - return; - - if (DistanceSquared(self.rcbomb.origin, last_org) < 4 * 4) - stuck_time += 0.5; - else - stuck_time = 0; - - last_org = self.rcbomb.origin; - - players = get_players(); - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( player == self ) - continue; - - if(!isDefined(player.team)) - continue; - - if ( !IsAlive( player ) ) - continue; - - if ( level.teamBased && player.team == self.team ) - continue; - - if (!SightTracePassed( self.rcbomb.origin, player.origin, false, self.rcbomb )) - continue; - - if ( diff == 0 ) - { - if ( DistanceSquared( self.rcbomb.origin, player.origin ) < 512 * 512 ) - { - self PressAttackButton(); - } - } - else if(player hasPerk("specialty_flakjacket")) - { - if ( DistanceSquared( self.rcbomb.origin, player.origin ) < 64 * 64 ) - { - self PressAttackButton(); - } - } - else if ( DistanceSquared( self.rcbomb.origin, player.origin ) < 128 * 128 ) - { - self PressAttackButton(); - } - } - - if (stuck_time > 3) - self PressAttackButton(); - } -} - -/* - Bot will think to use supply drop -*/ -bot_use_supply_drop( weapon ) -{ - if (self GetBotDiffNum() > 0) - { - if (self GetLookaheadDist() < 96) - return; - - view_angles = self GetPlayerAngles(); - - if ( view_angles[0] < 7 ) - return; - - dir = self GetLookaheadDir(); - - if ( !IsDefined( dir ) ) - return; - - dir = VectorToAngles( dir ); - - if ( abs( dir[1] - self.angles[1] ) > 2 ) - return; - - yaw = ( 0, self.angles[1], 0 ); - dir = AnglesToForward( yaw ); - - dir = VectorNormalize( dir ); - drop_point = self.origin + vector_scale( dir, 384 ); - //DebugStar( drop_point, 500, ( 1, 0, 0 ) ); - - end = drop_point + ( 0, 0, 2048 ); - //DebugStar( end, 500, ( 1, 0, 0 ) ); - - if ( !SightTracePassed( drop_point, end, false, undefined ) ) - return; - - if ( !SightTracePassed( self.origin, end, false, undefined ) ) - return; - - // is this point in mid-air? - end = drop_point - ( 0, 0, 32 ); - //DebugStar( end, 500, ( 1, 0, 0 ) ); - if ( BulletTracePassed( drop_point, end, false, undefined ) ) - return; - } - - self thread botStopMove(true); - - if (self ChangeToWeapon(weapon)) - { - self thread fire_current_weapon(); - - ret = self waittill_any_timeout( 5, "grenade_fire" ); - self notify("stop_firing_weapon"); - - self thread changeToWeapon(self.lastNonKillstreakWeapon); - - if (ret == "grenade_fire" && randomInt(100) < 80 && !self HasScriptGoal() && !self.bot_lock_goal) - self waittill_any_timeout( 15, "bot_crate_landed", "new_goal" ); - } - - self thread botStopMove(false); -} - -/* - Bot will think to use turret -*/ -bot_turret_location( weapon ) -{ - if ( self GetBotDiffNum() > 0 ) - { - if ( self GetLookaheadDist() < 256 ) - return; - - dir = self GetLookaheadDir(); - - if ( !IsDefined( dir ) ) - return; - - dir = VectorToAngles( dir ); - - if ( abs( dir[1] - self.angles[1] ) > 5 ) - return; - - yaw = ( 0, self.angles[1], 0 ); - dir = AnglesToForward( yaw ); - dir = VectorNormalize( dir ); - - goal = self.origin + vector_scale( dir, 32 ); - - if ( weapon == "autoturret_mp" ) - { - eye = self.origin + ( 0, 0, 60 ); - goal = eye + vector_scale( dir, 1024 ); - - if ( !SightTracePassed( self.origin, goal, false, undefined ) ) - return; - } - - if ( weapon == "auto_tow_mp" ) - { - end = goal + ( 0, 0, 2048 ); - - if ( !SightTracePassed( goal, end, false, undefined ) ) - return; - } - } - - self thread botStopMove(true); - - if (self ChangeToWeapon(weapon)) - { - self thread fire_current_weapon(); - - wait 1.5; - self notify("stop_firing_weapon"); - - self thread changeToWeapon(self.lastNonKillstreakWeapon); - } - - self thread botStopMove(false); -} - -/* - Bot will think to heli -*/ -bot_control_heli(weapon) -{ - if (!self ChangeToWeapon(weapon)) - return; - - self endon("heli_timeup"); - - wait 2.5; - - if(!isDefined(self.heli)) - return; - - self.heli endon("death"); - self.heli endon("heli_timeup"); - - while(isDefined(self.heli)) - wait 0.25; -} - -/* - Bots think to use killstreaks -*/ -bot_killstreak_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - wait( 1 ); - - for (;;) - { - wait( RandomIntRange( 1, 3 ) ); - - curWeap = self GetCurrentWeapon(); - if ((isDefined(self.carryingTurret) && self.carryingTurret) || isSubStr(curWeap, "drop_")) - self PressAttackButton(); - - if (isDefined(self GetThreat())) - continue; - - if ( self IsRemoteControlling() ) - continue; - - if(self UseButtonPressed()) - continue; - - if(self isDefusing() || self isPlanting() || self inLastStand()) - continue; - - weapon = self maps\mp\gametypes\_hardpoints::getTopKillstreak(); - - if ( !IsDefined( weapon ) || weapon == "none" ) - continue; - - killstreak = maps\mp\gametypes\_hardpoints::getKillStreakMenuName( weapon ); - - if ( !IsDefined( killstreak ) ) - continue; - - id = self maps\mp\gametypes\_hardpoints::getTopKillstreakUniqueId(); - - if ( !self maps\mp\_killstreakrules::isKillstreakAllowed( weapon, myteam ) ) - { - wait( 5 ); - continue; - } - - diff = self GetBotDiffNum(); - switch( killstreak ) - { - case "killstreak_helicopter_comlink": - case "killstreak_napalm": - case "killstreak_airstrike": - case "killstreak_mortar": - num = 1; - if (killstreak == "killstreak_mortar") - num = 3; - - if (!self ChangeToWeapon(weapon)) - break; - - self freeze_player_controls( true ); - - wait 1; - - for (i = 0; i < num; i++) - { - origin = self getKillstreakTargetLocation(); - if (!isDefined(origin)) - break; - - yaw = RandomIntRange( 0, 360 ); - - wait 0.25; - self notify( "confirm_location", origin, yaw ); - } - - self freeze_player_controls( false ); - - break; - - case "killstreak_helicopter_gunner": - case "killstreak_helicopter_player_firstperson": - self bot_control_heli(weapon); - wait 1; - break; - - case "killstreak_auto_turret": - case "killstreak_tow_turret": - self bot_turret_location( weapon ); - wait 1; - break; - - case "killstreak_auto_turret_drop": - case "killstreak_tow_turret_drop": - case "killstreak_m220_tow_drop": - case "killstreak_supply_drop": - if(killstreak == "killstreak_supply_drop") - weapon = "supplydrop_mp"; - - self bot_use_supply_drop( weapon ); - wait 1; - break; - - case "killstreak_rcbomb": - self bot_rccar_think(weapon); - wait 1; - break; - - case "killstreak_spyplane": - if ( diff > 0 ) - { - if(level.teamBased) - { - if(level.activeCounterUAVs[otherTeam]) - continue; - - if(level.activeSatellites[myTeam]) - continue; - - if(level.activeUAVs[myTeam]) - continue; - } - else - { - shouldContinue = false; - - players = get_players(); - for (i = 0; i < players.size; i++) - { - player = players[i]; - - if(player == self) - continue; - - if(!isDefined(player.team)) - continue; - - if(isDefined(level.activeCounterUAVs[player.entnum]) && level.activeCounterUAVs[player.entnum]) - continue; - - shouldContinue = true; - break; - } - - if(shouldContinue) - continue; - - if(level.activeSatellites[self.entnum]) - continue; - - if(level.activeUAVs[self.entnum]) - continue; - } - } - - if (!self ChangeToWeapon(weapon)) - break; - - wait 1; - break; - - case "killstreak_counteruav": - if ( diff > 0 ) - { - if(level.teamBased) - { - if(level.activeCounterUAVs[myTeam]) - continue; - } - else - { - if(level.activeCounterUAVs[self.entnum]) - continue; - } - } - - if (!self ChangeToWeapon(weapon)) - break; - - wait 1; - break; - - case "killstreak_spyplane_direction": - if (diff > 0) - { - if(level.teamBased) - { - if(level.activeCounterUAVs[otherTeam]) - continue; - - if(level.activeSatellites[myTeam]) - continue; - } - else - { - shouldContinue = false; - - players = get_players(); - for (i = 0; i < players.size; i++) - { - player = players[i]; - - if(player == self) - continue; - - if(!isDefined(player.team)) - continue; - - if(isDefined(level.activeCounterUAVs[player.entnum]) && level.activeCounterUAVs[player.entnum]) - continue; - - shouldContinue = true; - break; - } - - if(shouldContinue) - continue; - - if(level.activeSatellites[self.entnum]) - continue; - } - } - - case "killstreak_dogs": - default: - if (!self ChangeToWeapon(weapon)) - break; - - wait 1; - break; - } - - if (weapon == "m220_tow_mp" || weapon == "m202_flash_mp" || weapon == "minigun_mp") // don't put away ks weapons - continue; - - self thread changeToWeapon(self.lastNonKillstreakWeapon); - } -} - -/* - Bot will attack the turret -*/ -bot_turret_attack( enemy ) -{ - enemy endon("turret_carried"); - enemy endon("turret_deactivated"); - enemy endon("death"); - - wait_time = RandomIntRange( 7, 10 ); - - for ( i = 0; i < wait_time; i++ ) - { - wait( 1 ); - - if ( !IsDefined( enemy ) ) - { - return; - } - - if(!isAlive(enemy)) - return; - - if ( !BulletTracePassed( self getEye(), enemy.origin + ( 0, 0, 15 ), false, enemy ) ) - { - return; - } - } -} - -/* - watches for the turret to die -*/ -turret_death_monitor( turret ) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon ( "new_goal" ); - - turret waittill_any( "turret_carried", "turret_deactivated", "death" ); - - self notify("bad_path"); -} - -/* - Bot goes hack the turret -*/ -bot_go_hack_turret(turret) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon("new_goal"); - self endon( "goal" ); - self endon( "bad_path" ); - - for(;;) - { - wait 0.5; - - if (!isDefined(turret)) - break; - - if (!isDefined(turret.hackerTrigger)) - break; - - if (self isTouching(turret.hackerTrigger)) - break; - } - - if(!isDefined(turret) || !isDefined(turret.hackerTrigger)) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bot thinks to target turret -*/ -bot_turret_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - - for ( ;; ) - { - wait( 1 ); - - turrets = GetEntArray( "auto_turret", "classname" ); - - if ( turrets.size == 0 ) - { - wait( randomintrange( 3, 5 ) ); - continue; - } - - if(isDefined(self GetThreat()) || self IsRemoteControlling() || self UseButtonPressed()) - continue; - - turret = undefined; - myEye = self GetEye(); - - for (i = turrets.size - 1; i >= 0; i--) - { - tempTurret = turrets[i]; - - if (!isDefined(tempTurret) || !isDefined(tempTurret.damageTaken)) - continue; - - if (tempTurret.damageTaken >= tempTurret.health) - continue; - - if (tempTurret.carried) - continue; - - if (level.teambased && tempTurret.team == myteam) - continue; - - if (IsDefined( tempTurret.owner ) && tempTurret.owner == self) - continue; - - if(!bulletTracePassed(myEye, tempTurret.origin + (0, 0, 15), false, tempTurret)) - continue; - - turret = tempTurret; - } - - if (!isDefined(turret)) - continue; - - forward = AnglesToForward( turret.angles ); - forward = VectorNormalize( forward ); - - delta = self.origin - turret.origin; - delta = VectorNormalize( delta ); - - dot = VectorDot( forward, delta ); - - facing = true; - if ( dot < 0.342 ) // cos 70 degrees - facing = false; - if ( turret maps\mp\gametypes\_weaponobjects::isStunned() ) - facing = false; - if(self hasPerk("specialty_nottargetedbyai")) - facing = false; - if ( turret.turrettype == "tow" ) - facing = false; - - if ( facing && !BulletTracePassed( myEye, turret.origin + ( 0, 0, 15 ), false, turret ) ) - continue; - - if ( !IsDefined( turret.bots ) ) - turret.bots = 0; - - if ( turret.bots >= 2 ) - continue; - - if(!facing && !self HasScriptGoal() && !self.bot_lock_goal) - { - if ( self HasPerk( "specialty_disarmexplosive" ) ) - { - self SetBotGoal(turret.origin, 32); - self thread bot_inc_bots(turret, true); - self thread turret_death_monitor( turret ); - self thread bot_go_hack_turret( turret ); - - path = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (path != "new_goal") - self ClearBotGoal(); - - if ( path != "goal" || !isDefined(turret) || !isDefined(turret.hackerTrigger) || !self isTouching(turret.hackerTrigger) ) - continue; - - hackTime = GetDvarFloat( #"perk_disarmExplosiveTime" ); - self PressUseButton( hackTime + 0.5 ); - wait( hackTime + 0.5 ); - continue; - } - else - { - self SetBotGoal(turret.origin, 32); - self thread bot_inc_bots(turret, true); - self thread turret_death_monitor( turret ); - self thread bots_watch_touch_obj( turret ); - - if(self waittill_any_return("bad_path", "goal", "new_goal") != "new_goal") - self ClearBotGoal(); - } - } - - if(!isDefined(turret)) - continue; - - self SetScriptEnemy( turret ); - self bot_turret_attack(turret); - self ClearScriptEnemy(); - } -} - -/* - Bot will attack the equipment -*/ -bot_equipment_attack(equ) -{ - equ endon("death"); - equ endon("hacked"); - - wait_time = RandomIntRange( 7, 10 ); - - for ( i = 0; i < wait_time; i++ ) - { - wait( 1 ); - - if ( !IsDefined( equ ) ) - { - return; - } - } -} - -/* - Bots target equipment -*/ -bot_equipment_kill_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - - for ( ;; ) - { - wait RandomIntRange( 1, 3 ); - - if(isDefined(self GetThreat()) || self IsRemoteControlling() || self UseButtonPressed()) - continue; - - grenades = GetEntArray( "grenade", "classname" ); - hasHacker = self HasPerk( "specialty_showenemyequipment" ); - myEye = self getEye(); - myAngles = self getPlayerAngles(); - target = undefined; - - for ( i = 0; i < grenades.size; i++ ) - { - item = grenades[i]; - - if (!isDefined(item)) - continue; - - if ( !IsDefined( item.name ) ) - { - continue; - } - - if ( !IsDefined( item.owner ) ) - { - continue; - } - - if ( level.teamBased && item.owner.team == myteam ) - { - continue; - } - - if ( item.owner == self ) - { - continue; - } - - if ( !IsWeaponEquipment( item.name ) ) - { - continue; - } - - if(!isDefined(item.bots)) - item.bots = 0; - - if(item.bots >= 2) - continue; - - if (!hasHacker && !BulletTracePassed(myEye, item.origin, false, item)) - continue; - - if(getConeDot(item.origin, self.origin, myAngles) < 0.6) - continue; - - if ( DistanceSquared( item.origin, self.origin ) < 512 * 512 ) - { - target = item; - break; - } - } - - if ( !IsDefined( target ) ) - { - players = get_players(); - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - if ( player == self ) - { - continue; - } - - if(!isDefined(player.team)) - continue; - - if ( level.teamBased && player.team == myteam ) - { - continue; - } - - if(!isDefined(player.tacticalInsertion)) - continue; - - if(!isDefined(player.tacticalInsertion.bots)) - player.tacticalInsertion.bots = 0; - - if(player.tacticalInsertion.bots >= 2) - continue; - - if (!hasHacker && !BulletTracePassed(myEye, player.tacticalInsertion.origin, false, player.tacticalInsertion)) - continue; - - if(getConeDot(player.tacticalInsertion.origin, self.origin, myAngles) < 0.6) - continue; - - if ( DistanceSquared( player.tacticalInsertion.origin, self.origin ) < 512 * 512 ) - { - target = player.tacticalInsertion; - break; - } - } - } - - if ( IsDefined( target ) ) - { - facing = false; - if(isDefined(target.name) && target.name == "claymore_mp") - { - if ( VectorDot( VectorNormalize( AnglesToForward( target.angles ) ), VectorNormalize( self.origin - target.origin ) ) >= 0.342 && !target maps\mp\gametypes\_weaponobjects::isStunned() ) // cos 70 degrees - facing = true; - } - - if ( (( self HasPerk( "specialty_disarmexplosive" ) && !facing ) || isDefined(target.enemyTrigger)) && !self HasScriptGoal() && !self.bot_lock_goal ) - { - self SetBotGoal(target.origin, 32); - self thread bot_inc_bots(target, true); - self thread bots_watch_touch_obj( target ); - - path = self waittill_any_return("bad_path", "goal", "new_goal"); - - if (path != "new_goal") - self ClearBotGoal(); - - if (path != "goal" || !isDefined(target) || (isDefined(target.hackerTrigger) && !self isTouching(target.hackerTrigger)) || (isDefined(target.enemyTrigger) && !self isTouching(target.enemyTrigger))) - continue; - - hackTime = GetDvarFloat( #"perk_disarmExplosiveTime" ); - self PressUseButton( hackTime + 0.5 ); - wait( hackTime + 0.5 ); - continue; - } - - self SetScriptEnemy( target ); - self bot_equipment_attack(target); - self ClearScriptEnemy(); - } - } -} - -/* - Bots watch when they get stuck on a carepackage and cap it -*/ -bot_watch_stuck_on_crate() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - radius = GetDvarFloat( #"player_useRadius" ); - - for ( ;; ) - { - wait( 3 ); - - if ( IsDefined( self GetThreat() ) ) - continue; - - if ( self UseButtonPressed() ) - continue; - - crates = GetEntArray( "care_package", "script_noteworthy" ); - - for ( i = 0; i < crates.size; i++ ) - { - crate = crates[i]; - - if (!isDefined(crate) || !isDefined(crate.origin)) - continue; - - if ( DistanceSquared( self.origin, crate.origin ) < radius * radius ) - { - if ( isDefined(crate.owner) && crate.owner == self ) - { - self PressUseButton( level.crateOwnerUseTime / 1000 + 0.5 ); - wait level.crateOwnerUseTime / 1000 + 0.5; - } - else - { - self PressUseButton( level.crateNonOwnerUseTime / 1000 + 0.5 ); - wait level.crateNonOwnerUseTime / 1000 + 0.5; - } - - break; - } - } - } -} - -/* - Bots capture the cp -*/ -bot_crate_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - myteam = self.pers[ "team" ]; - - first = true; - - for ( ;; ) - { - ret = "bot_crate_landed"; - if(first) - first = false; - else - ret = self waittill_any_timeout( randomintrange( 3, 5 ), "bot_crate_landed" ); - - if ( RandomInt( 100 ) < 20 && ret != "bot_crate_landed" ) - continue; - - if ( self HasScriptGoal() || self.bot_lock_goal ) - continue; - - if(self isDefusing() || self isPlanting()) - continue; - - if (self inLastStand()) - continue; - - if (self IsRemoteControlling()) - continue; - - if(self UseButtonPressed()) - continue; - - crates = GetEntArray( "care_package", "script_noteworthy" ); - if ( crates.size == 0 ) - continue; - - wantsClosest = randomint(2); - - crate = undefined; - for (i = crates.size - 1; i >= 0; i--) - { - tempCrate = crates[i]; - - if (!isDefined(tempCrate) || !IsDefined( tempCrate.friendlyObjID )) - continue; - - if ( myteam == tempCrate.team ) - { - if ( RandomInt( 100 ) > 30 && IsDefined( tempCrate.owner ) && tempCrate.owner != self ) - continue; - } - else if (isDefined(tempCrate.hacker)) - continue; - - if ( !IsDefined( tempCrate.bots ) ) - tempCrate.bots = 0; - - if ( tempCrate.bots >= 3 ) - continue; - - if (isDefined(crate)) - { - if (wantsClosest) - { - if (DistanceSquared(crate.origin, self.origin) < DistanceSquared(tempCrate.origin, self.origin)) - continue; - } - else - { - if (crate.crateType.weight < tempCrate.crateType.weight) - continue; - } - } - - crate = tempCrate; - } - - if (!isDefined(crate)) - continue; - - self.bot_lock_goal = true; - - radius = GetDvarFloat( "player_useRadius" ); - self SetBotGoal(crate.origin + (0, 0, 12), radius); - self thread bot_inc_bots(crate, true); - self thread bots_watch_touch_obj(crate); - - path = self waittill_any_return("bad_path", "goal", "new_goal"); - - self.bot_lock_goal = false; - - if (path != "new_goal") - self ClearBotGoal(); - - if (path != "goal" || !isDefined(crate) || DistanceSquared(self.origin, crate.origin) > radius*radius) - continue; - - if(isdefined( crate.crateType.hint_gambler ) && self hasPerk("specialty_gambler") && randomInt(3)) - crate notify( "trigger_use_doubletap", self ); - - if ( isDefined(crate.owner) && crate.owner == self ) - { - self PressUseButton( level.crateOwnerUseTime / 1000 + 0.5 ); - wait( level.crateOwnerUseTime / 1000 + 0.5 ); - } - else - { - self PressUseButton( level.crateNonOwnerUseTime / 1000 + 1 ); - wait( level.crateNonOwnerUseTime / 1000 + 1.5 ); - } - } -} - -/* - Returns an weapon thats a rocket with ammo -*/ -getRocketAmmo() -{ - answer = self getLockonAmmo(); - - if (isDefined(answer)) - return answer; - - if (self GetAmmoCount("minigun_mp")) - return "minigun_mp"; - - if (self GetAmmoCount("rpg_mp")) - return "rpg_mp"; - - return undefined; -} - -/* - Returns a weapon thats lockon with ammo -*/ -getLockonAmmo() -{ - if (self GetAmmoCount("m72_law_mp")) - return "m72_law_mp"; - - if (self GetAmmoCount("strela_mp")) - return "strela_mp"; - - if (self GetAmmoCount("m202_flash_mp")) - return "m202_flash_mp"; - - return undefined; -} - -/* - Gets the object thats the closest in the array -*/ -bot_array_nearest_curorigin(array) -{ - result = undefined; - - for(i = 0; i < array.size; i++) - if(!isDefined(result) || DistanceSquared(self.origin,array[i].curorigin) < DistanceSquared(self.origin,result.curorigin)) - result = array[i]; - - return result; -} - -/* - Bot attacks the vehicle -*/ -bot_vehicle_attack( enemy ) -{ - wait_time = RandomIntRange( 7, 10 ); - - for ( i = 0; i < wait_time; i++ ) - { - wait( 1 ); - - if ( !IsDefined( enemy ) ) - { - return; - } - - if ( !IsAlive( enemy ) ) - { - return; - } - - if ( !IsDefined( enemy.targetname ) || enemy.targetname != "rcbomb" ) - { - if ( !isDefined(self getRocketAmmo()) ) - { - return; - } - } - - if ( !BulletTracePassed( self.origin, enemy.origin, false, enemy ) ) - { - return; - } - } -} - -/* - Bot will change to angles with speed -*/ -bot_lookat(angles, speed) -{ - self notify("bots_aim_overlap"); - self endon("bots_aim_overlap"); - self endon("disconnect"); - self endon("death"); - level endon ( "game_ended" ); - - myAngle=self getPlayerAngles(); - - X=(angles[0]-myAngle[0]); - while(X > 170.0) - X=X-360.0; - while(X < -170.0) - X=X+360.0; - X=X/speed; - - Y=(angles[1]-myAngle[1]); - while(Y > 180.0) - Y=Y-360.0; - while(Y < -180.0) - Y=Y+360.0; - - Y=Y/speed; - - for(i=0;i= 2) - { - self SetWeaponAmmoClip(weap, self GetWeaponAmmoClip(weap)-1); - - missile = MagicBullet( weap, self getEye(), plane.origin, self ); - missile Missile_SetTarget( plane ); - - level notify ( "missile_fired", self, missile, plane, true ); - self notify("bots_aim_overlap"); - - wait 1; - return; - } - } - } -} - -/* - Bots think to kill vehicles -*/ -bot_target_vehicle() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - - for (;;) - { - wait( 1 ); - - if(isDefined(self GetThreat()) || self IsRemoteControlling() || self UseButtonPressed()) - continue; - - airborne_enemies = GetEntArray( "script_vehicle", "classname" ); - target = undefined; - myEye = self getEye(); - rocketAmmo = self getRocketAmmo(); - for ( i = 0; i < airborne_enemies.size; i++ ) - { - enemy = airborne_enemies[i]; - - if ( !IsDefined( enemy ) ) - { - continue; - } - - if ( !IsAlive( enemy ) ) - { - continue; - } - - if ( level.teamBased ) - { - if ( enemy.team == myteam ) - { - continue; - } - } - - if ( enemy.owner == self ) - { - continue; - } - - if ( !IsDefined( enemy.targetname ) || enemy.targetname != "rcbomb" ) - { - if ( !isDefined(rocketAmmo) ) - { - continue; - } - } - - if ( !BulletTracePassed( myEye, enemy.origin, false, enemy ) ) - { - continue; - } - - target = enemy; - break; - } - - if(!isDefined(target)) - { - if(isDefined(self getLockonAmmo())) - { - for(i = 0; i < level.bot_planes.size; i++) - { - enemy = level.bot_planes[i]; - - if ( !IsDefined( enemy ) ) - { - continue; - } - - if ( !IsAlive( enemy ) ) - { - continue; - } - - if ( level.teamBased ) - { - if ( enemy.team == myteam ) - { - continue; - } - } - - if ( enemy.owner == self ) - { - continue; - } - - if ( !BulletTracePassed( myEye, enemy.origin, false, enemy ) ) - { - continue; - } - - target = enemy; - break; - } - } - } - - if(!isDefined(target)) - { - wait( RandomIntRange( 3, 5 ) ); - continue; - } - - if(isDefined(target.bot_plane)) - { - self bot_plane_attack(target); - self freeze_player_controls(false); - self thread botStopMove(false); - } - else - { - self SetScriptEnemy( target ); - self bot_vehicle_attack( target ); - self ClearScriptEnemy(); - } - } -} - -/* - Bot uses their equipment -*/ -bot_use_equipment_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - weapon = self.pers["bot"]["class_equipment"]; - - if(weapon == "" || weapon == "weapon_null_mp" || weapon == "satchel_charge_mp") - return; - - for ( ;; ) - { - wait( RandomIntRange( 1, 3 ) ); - - if ( !self HasWeapon( weapon ) ) - return; - - if (!self GetAmmoCount(weapon)) - continue; - - if ( self IsRemoteControlling()) - continue; - - if ( isDefined(self getThreat()) ) - continue; - - if (self._is_sprinting) - continue; - - diff = self GetBotDiffNum(); - - if (diff > 0) - { - if ( weapon == "camera_spike_mp" ) - { - if ( self GetLookaheadDist() < 384 ) - continue; - - view_angles = self GetPlayerAngles(); - - if ( view_angles[0] < -5 ) - continue; - } - else - { - if ( self GetLookaheadDist() > 64 ) - continue; - } - } - - dir = self GetLookaheadDir(); - if ( !IsDefined( dir ) ) - continue; - - dir = VectorToAngles( dir ); - if ( abs( dir[1] - self.angles[1] ) > 5 ) - continue; - - dir = VectorNormalize( AnglesToForward( self.angles ) ); - dir = vector_scale( dir, 32 ); - goal = self.origin + dir; - - if (randomInt(100) > 35) - continue; - - grenades = GetEntArray( "grenade", "classname" ); - anyEquNear = false; - for ( i = 0; i < grenades.size; i++ ) - { - item = grenades[i]; - - if ( !IsDefined( item.name ) ) - continue; - - if ( !IsWeaponEquipment( item.name ) ) - continue; - - if ( DistanceSquared( item.origin, goal ) < 128 * 128 ) - anyEquNear = true; - } - - if (anyEquNear && diff > 0) - continue; - - lastWeap = self getCurrentWeapon(); - - self thread botStopMove(true); - - if (self ChangeToWeapon(weapon)) - { - self thread fire_current_weapon(); - - ret = self waittill_any_timeout( 5, "grenade_fire" ); - self notify("stop_firing_weapon"); - - self thread changeToWeapon(lastWeap); - } - - self thread botStopMove(false); - } -} - -/* - Bots go to the revive -*/ -bot_go_revive(revive) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 1; - - if (!isDefined(revive)) - break; - - if (!isDefined(revive.revivetrigger)) - break; - - if (self isTouching(revive.revivetrigger)) - break; - } - - if(!isDefined(revive) || !isDefined(revive.revivetrigger)) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots go revive -*/ -bot_revive_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( !level.teamBased ) - return; - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self HasScriptGoal() || self.bot_lock_goal ) - continue; - - if(self isDefusing() || self isPlanting()) - continue; - - if (self inLastStand()) - continue; - - if (self IsRemoteControlling()) - continue; - - if(self UseButtonPressed()) - continue; - - revivePlayer = undefined; - for(i = 0; i < level.players.size; i++) - { - player = level.players[i]; - - if(!isDefined(player.pers["team"])) - continue; - if(player == self) - continue; - if(self.pers["team"] != player.pers["team"]) - continue; - if(!isDefined(player.revivetrigger)) - continue; - - if (isDefined(player.currentlyBeingRevived) && player.currentlyBeingRevived) - continue; - - if (!isDefined(player.revivetrigger.bots)) - player.revivetrigger.bots = 0; - - if (player.revivetrigger.bots > 2) - continue; - - revivePlayer = player; - } - - if (!isDefined(revivePlayer)) - continue; - - self.bot_lock_goal = true; - - self SetBotGoal( revivePlayer.origin, 1 ); - self thread bot_inc_bots(revivePlayer.revivetrigger, true); - self thread bot_go_revive(revivePlayer); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || !isDefined(revivePlayer) || (isDefined(revivePlayer.currentlyBeingRevived) && revivePlayer.currentlyBeingRevived) || !self isTouching(revivePlayer.revivetrigger) || self InLastStand()) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - reviveTime = GetDvarInt( #"revive_time_taken" ); - self PressUseButton( reviveTime + 1 ); - wait( reviveTime + 1.5 ); - - self ClearBotGoal(); - self.bot_lock_goal = false; - } -} - -/* - Bot attacks dog -*/ -bot_dog_attack(dog) -{ - dog endon("death"); - - wait_time = RandomIntRange( 7, 10 ); - - for ( i = 0; i < wait_time; i++ ) - { - wait( 1 ); - - if ( !IsDefined( dog ) ) - { - return; - } - - if ( !IsAlive( dog ) ) - { - return; - } - - if ( !BulletTracePassed( self.origin, dog.origin, false, dog ) ) - { - return; - } - } -} - -/* - Bot thinks to attack dogs -*/ -bot_dogs_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - myteam = self.pers[ "team" ]; - - if ( level.no_dogs ) - return; - - for ( ;; ) - { - wait( 0.25 ); - - if ( !IsDefined( level.dogs ) || level.dogs.size <= 0 ) - level waittill( "called_in_the_dogs" ); - - if(isDefined(self GetThreat())) - continue; - - for ( i = 0; i < level.dogs.size; i++ ) - { - dog = level.dogs[i]; - - if ( !IsDefined( dog ) ) - { - continue; - } - - if ( !IsAlive( dog ) ) - { - continue; - } - - if ( level.teamBased ) - { - if ( dog.aiteam == myteam ) - { - continue; - } - } - - if ( isDefined(dog.script_owner) && dog.script_owner == self ) - { - continue; - } - - if ( DistanceSquared( self.origin, dog.origin ) < 1024 * 1024 ) - { - if(!BulletTracePassed( self.origin, dog.origin, false, dog )) - continue; - - self SetScriptEnemy( dog ); - self bot_dog_attack(dog); - self ClearScriptEnemy(); - break; - } - } - } -} - -/* - Clears goal when events death -*/ -stop_go_target_on_death(tar) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "new_goal" ); - self endon( "bad_path" ); - self endon( "goal" ); - - tar waittill_either("death", "disconnect"); - - self ClearBotGoal(); -} - -/* - Goes to the target's location if it had one -*/ -follow_target() -{ - self endon( "death" ); - self endon( "disconnect" ); - - for(;;) - { - wait 1; - - if ( self HasScriptGoal() || self.bot_lock_goal ) - continue; - - threat = self GetThreat(); - - if ( !isDefined(threat) ) - continue; - - if (!isPlayer(threat)) - continue; - - if(randomInt(100) > 50) - continue; - - self thread stop_go_target_on_death(threat); - - self SetBotGoal(threat.origin, 64); - if (self waittill_any_return("new_goal", "goal", "bad_path") != "new_goal") - self ClearBotGoal(); - } -} - -/* - Bots play mw2 -*/ -bot_watch_think_mw2() -{ - self endon("disconnect"); - self endon("death"); - level endon("game_ended"); - - for (;;) - { - wait randomIntRange(1, 4); - - if(self isDefusing() || self isPlanting()) - continue; - - if (self IsRemoteControlling()) - continue; - - if (self InLastStand()) - continue; - - if (isDefined(self GetThreat())) - continue; - - tube = self getValidTube(); - if (!isDefined(tube)) - { - if (self GetAmmoCount("m72_law_mp")) - tube = "m72_law_mp"; - else if (self GetAmmoCount("rpg_mp")) - tube = "rpg_mp"; - else - continue; - } - - if (self GetCurrentWeapon() == tube) - continue; - - if (randomInt(100) > 35) - continue; - - self ChangeToWeapon(tube); - } -} - -/* - Fast swaps or reload cancels don't work cause t5 bots wait for the anim to complete - Bots will think to switch weapons -*/ -bot_weapon_think() -{ - self endon("death"); - self endon("disconnect"); - level endon("game_ended"); - - first = true; - - for(;;) - { - self waittill_any_timeout(randomIntRange(2, 4), "bot_force_check_switch"); - - if(self isDefusing() || self isPlanting()) - continue; - - if (self IsRemoteControlling()) - continue; - - if (self InLastStand()) - continue; - - curWeap = self GetCurrentWeapon(); - threat = self getThreat(); - - if (isDefined(threat) && !isPlayer(threat)) - continue; - - if (first) - { - first = false; - - if (randomInt(100) > 10) - continue; - } - else - { - if(curWeap != "none" && self getAmmoCount(curWeap) && curWeap != "strela_mp") - { - if(randomInt(100) > 2) - continue; - - if(isDefined(threat)) - continue; - } - } - - weaponslist = self getweaponslist(); - weap = ""; - while(weaponslist.size) - { - weapon = weaponslist[randomInt(weaponslist.size)]; - weaponslist = array_remove(weaponslist, weapon); - - if(!self getAmmoCount(weapon)) - continue; - - if (!maps\mp\gametypes\_weapons::isPrimaryWeapon( weapon ) && !maps\mp\gametypes\_weapons::isSideArm( weapon ) && !isWeaponAltmode(weapon)) - continue; - - if(curWeap == weapon || weapon == "none" || weapon == "" || weapon == "strela_mp") - continue; - - weap = weapon; - break; - } - - if(weap == "") - continue; - - self thread changeToWeapon(weap); - } -} - -/* - Bots pay attention to the uav -*/ -bot_uav_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - diff = self GetBotDiffNum(); - - wasFooled = false; - for(;;) - { - wait 0.75; - - if ( self HasScriptGoal() ) - continue; - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - hasCam = isDefined(self.cameraSpike); - - if(self.bot_scrambled && !hasCam) - continue; - - players = get_players(); - - hasUAV = false; - hasSR = false; - if(level.teamBased) - { - if(level.activeCounterUAVs[otherTeam] && !hasCam) - continue; - - hasSR = level.activeSatellites[myTeam]; - hasUAV = level.activeUAVs[myTeam]; - } - else - { - shouldContinue = false; - - for (i = 0; i < players.size; i++) - { - player = players[i]; - - if(player == self) - continue; - - if(!isDefined(player.team)) - continue; - - if(isDefined(level.activeCounterUAVs[player.entnum]) && level.activeCounterUAVs[player.entnum]) - continue; - - shouldContinue = true; - break; - } - - if(shouldContinue && !hasCam) - continue; - - hasSR = level.activeSatellites[self.entnum]; - hasUAV = level.activeUAVs[self.entnum]; - } - - if(level.hardcoreMode && !hasUAV && !hasSR && !hasCam) - continue; - - dist = GetDvarInt( #"scr_help_dist" ); - dist = dist * dist * 8; - - if(!wasFooled && level.bot_decoys.size && !hasCam) - { - shouldContinue = false; - - for(i = 0; i < level.bot_decoys.size; i++) - { - g = level.bot_decoys[i]; - - if(isDefined(g.owner) && g.owner == self) - continue; - - if(level.teamBased && g.team == myTeam) - continue; - - if(DistanceSquared(self.origin, g.origin) > dist) - continue; - - if(lengthsquared( g getVelocity() ) > 10000) - continue; - - if(diff > 0) - wasFooled = true; - - self SetBotGoal( g.origin, 128 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - shouldContinue = true; - break; - } - - if(shouldContinue) - continue; - } - - if ( diff <= 0 ) - { - continue; - } - - for (i = 0; i < players.size; i++) - { - player = players[i]; - - if(player == self) - continue; - - if(level.teambased && player.team == myTeam) - continue; - - if(!isAlive(player)) - continue; - - if(player.sessionstate != "playing") - continue; - - if(DistanceSquared(self.origin, player.origin) > dist) - continue; - - if(hasCam) - { - if(!self.cameraSpike maps\mp\gametypes\_weaponobjects::isStunned()) - { - if ( VectorDot( VectorNormalize( AnglesToForward( self.cameraSpike.cameraHead.angles ) ), VectorNormalize( player.origin - self.cameraSpike.origin ) ) >= 0.342 && SightTracePassed(player.origin+(0,0,5), self.cameraSpike.origin+(0,0,5), false, self.cameraSpike) && !player hasPerk("specialty_nottargetedbyai")) // cos 70 degrees - { - self SetBotGoal( player.origin, 128 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - break; - } - } - } - else if(hasSR || (!isSubStr(player getCurrentWeapon(), "_silencer_") && player.bot_firing) || (hasUAV && !player hasPerk("specialty_gpsjammer")) || (isDefined(self.acousticSensor) && !self.acousticSensor maps\mp\gametypes\_weaponobjects::isStunned() && !player hasPerk("specialty_nomotionsensor") && distance2d(self.acousticSensor.origin, player.origin) < 666)) - { - self SetBotGoal( player.origin, 128 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - break; - } - } - } -} - -/* - bots will go to their target's kill location -*/ -bot_revenge_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if (isDefined(self.lastKiller) && isAlive(self.lastKiller)) - { - if(bulletTracePassed(self getEye(), self.lastKiller getTagOrigin( "j_spineupper" ), false, self.lastKiller)) - { - self setAttacker(self.lastKiller); - } - } - - if(!isDefined(self.killerLocation)) - return; - - loc = self.killerLocation; - - for(;;) - { - wait( RandomIntRange( 1, 5 ) ); - - if(self HasScriptGoal() || self.bot_lock_goal) - return; - - if ( randomint( 100 ) < 75 ) - return; - - self SetBotGoal( loc, 64 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } -} - -/* - Bots will listen to foot steps and target nearby targets -*/ -bot_listen_to_steps() -{ - self endon("disconnect"); - self endon("death"); - - for(;;) - { - wait 1; - - dist = 100; - if(self hasPerk("specialty_loudenemies")) - dist *= 1.4; - - dist *= dist; - - heard = undefined; - for(i = level.players.size-1 ; i >= 0; i--) - { - player = level.players[i]; - - if(player == self) - continue; - - if (!isDefined(player.team)) - continue; - - if(level.teamBased && self.team == player.team) - continue; - if(player.sessionstate != "playing") - continue; - if(!isAlive(player)) - continue; - - if( lengthsquared( player getVelocity() ) < 20000 ) - continue; - - if( distanceSquared(player.origin, self.origin) > dist ) - continue; - - if( player hasPerk("specialty_quieter")) - continue; - - heard = player; - break; - } - - if(!IsDefined(heard)) - continue; - - if(bulletTracePassed(self getEye(), heard getTagOrigin( "j_spineupper" ), false, heard)) - { - self setAttacker(heard); - continue; - } - - if (self HasScriptGoal() || self.bot_lock_goal) - continue; - - self SetBotGoal( heard.origin, 64 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } -} - -/* - Presses the buttons on radiation -*/ -bot_radiation_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon ( "game_ended" ); - - if ( level.script != "mp_radiation" ) - return; - - if ( level.wagerMatch ) - return; - - origins = []; - origins[0] = ( 813, 5, 267 ); - origins[1] = ( -811, 30, 363 ); - - for ( ;; ) - { - wait( RandomIntRange( 8, 15 ) ); - - if ( self HasScriptGoal() ) - continue; - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - continue; - - if (self UseButtonPressed()) - continue; - - origin = random( origins ); - - if ( DistanceSquared( self.origin, origin ) < 512 * 512 ) - { - self SetBotGoal( origin, 32 ); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal") - continue; - - self SetBotGoal( self.origin, 32 ); - - self PressUseButton( 3 ); - wait( 3 ); - - self ClearBotGoal(); - } - - wait( RandomIntRange( 5, 10 ) ); - } -} - -/* - Bots hang around the enemy's flag to spawn kill em -*/ -bot_dom_spawn_kill_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( level.gametype != "dom" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 10, 20 ) ); - - if ( randomint( 100 ) < 20 ) - continue; - - if ( self HasScriptGoal() || self.bot_lock_goal) - continue; - - myFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( myTeam ); - - if ( myFlagCount == level.flags.size ) - continue; - - otherFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( otherTeam ); - - if (myFlagCount <= otherFlagCount || otherFlagCount != 1) - continue; - - flag = undefined; - for ( i = 0; i < level.flags.size; i++ ) - { - if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam ) - continue; - } - - if(!isDefined(flag)) - continue; - - if(DistanceSquared(self.origin, flag.origin) < 2048*2048) - continue; - - self SetBotGoal( flag.origin, 1024 ); - - self thread bot_dom_watch_flags(myFlagCount, myTeam); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } -} - -/* - Calls 'bad_path' when the flag count changes -*/ -bot_dom_watch_flags(count, myTeam) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (maps\mp\gametypes\dom::getTeamFlagCount( myTeam ) != count) - break; - } - - self notify("bad_path"); -} - -/* - Bots watches their own flags and protects them when they are under capture -*/ -bot_dom_def_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( level.gametype != "dom" ) - return; - - myTeam = self.pers[ "team" ]; - - for ( ;; ) - { - wait( randomintrange( 1, 3 ) ); - - if ( randomint( 100 ) < 35 ) - continue; - - if ( self HasScriptGoal() || self.bot_lock_goal ) - continue; - - flag = undefined; - for ( i = 0; i < level.flags.size; i++ ) - { - if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() != myTeam ) - continue; - - if ( !level.flags[i].useObj.objPoints[myTeam].isFlashing ) - continue; - - if ( !isDefined(flag) || DistanceSquared(self.origin,level.flags[i].origin) < DistanceSquared(self.origin,flag.origin) ) - flag = level.flags[i]; - } - - if ( !isDefined(flag) ) - continue; - - self SetBotGoal( flag.origin, 128 ); - - self thread bot_dom_watch_for_flashing(flag, myTeam); - self thread bots_watch_touch_obj(flag); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } -} - -/* - Watches while the flag is under capture -*/ -bot_dom_watch_for_flashing(flag, myTeam) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (!isDefined(flag)) - break; - - if (flag maps\mp\gametypes\dom::getFlagTeam() != myTeam || !flag.useObj.objPoints[myTeam].isFlashing) - break; - } - - self notify("bad_path"); -} - -/* - Bots capture dom flags -*/ -bot_dom_cap_think() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( level.gametype != "dom" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 3, 12 ) ); - - if ( self.bot_lock_goal ) - { - continue; - } - - if ( !isDefined(level.flags) || level.flags.size == 0 ) - continue; - - myFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( myTeam ); - - if ( myFlagCount == level.flags.size ) - continue; - - otherFlagCount = maps\mp\gametypes\dom::getTeamFlagCount( otherTeam ); - - if (game["teamScores"][myteam] >= game["teamScores"][otherTeam]) - { - if ( myFlagCount < otherFlagCount ) - { - if ( randomint( 100 ) < 15 ) - continue; - } - else if ( myFlagCount == otherFlagCount ) - { - if ( randomint( 100 ) < 35 ) - continue; - } - else if ( myFlagCount > otherFlagCount ) - { - if ( randomint( 100 ) < 95 ) - continue; - } - } - - flag = undefined; - flags = []; - for ( i = 0; i < level.flags.size; i++ ) - { - if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam ) - continue; - - flags[flags.size] = level.flags[i]; - } - - if (randomInt(100) > 30) - { - for ( i = 0; i < flags.size; i++ ) - { - if ( !isDefined(flag) || DistanceSquared(self.origin,level.flags[i].origin) < DistanceSquared(self.origin,flag.origin) ) - flag = level.flags[i]; - } - } - else if (flags.size) - { - flag = random(flags); - } - - if ( !isDefined(flag) ) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( flag.origin, 64 ); - - self thread bot_dom_go_cap_flag(flag, myteam); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if (event != "goal") - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - while ( flag maps\mp\gametypes\dom::getFlagTeam() != myTeam && self isTouching(flag) ) - { - cur = flag.useObj.curProgress; - wait 0.5; - - if(flag.useObj.curProgress == cur) - break;//some enemy is near us, kill him - } - - self ClearBotGoal(); - - self.bot_lock_goal = false; - } -} - -/* - Bot goes to the flag, watching while they don't have the flag -*/ -bot_dom_go_cap_flag(flag, myteam) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait randomintrange(2,4); - - if (!isDefined(flag)) - break; - - if (flag maps\mp\gametypes\dom::getFlagTeam() == myTeam) - break; - - if (self isTouching(flag)) - break; - } - - if (flag maps\mp\gametypes\dom::getFlagTeam() == myTeam) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots play capture the flag -*/ -bot_cap() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "ctf" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.teamFlagZones)) - continue; - - if(!isDefined(level.teamFlags)) - continue; - - myflag = level.teamFlags[myteam]; - myzone = level.teamFlagZones[myteam]; - - theirflag = level.teamFlags[otherTeam]; - theirzone = level.teamFlagZones[otherTeam]; - - if(myflag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome()) - { - carrier = myflag.carrier; - - if(!isDefined(carrier))//someone doesnt has our flag - { - if(!isDefined(theirflag.carrier) && DistanceSquared(self.origin, theirflag.curorigin) < DistanceSquared(self.origin, myflag.curorigin)) //no one has their flag and its closer - self bot_cap_get_flag(theirflag); - else//go get it - self bot_cap_get_flag(myflag); - - continue; - } - else - { - if(!theirflag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() && randomint(100) < 50) - { //take their flag - self bot_cap_get_flag(theirflag); - } - else - { - if(self HasScriptGoal()) - continue; - - if(!isDefined(theirzone.bots)) - theirzone.bots = 0; - - origin = theirzone.curorigin; - - if(theirzone.bots > 2 || randomInt(100) < 45) - { - //kill carrier - if(carrier hasPerk( "specialty_gpsjammer" )) - continue; - - origin = carrier.origin; - - self SetBotGoal( origin, 64 ); - self thread bot_escort_obj(myflag, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - self thread bot_inc_bots(theirzone); - - //camp their zone - if(DistanceSquared(origin, self.origin) <= 1024*1024) - { - wait 4; - self notify("bot_inc_bots"); theirzone.bots--; - continue; - } - - self SetBotGoal( origin, 256 ); - self thread bot_inc_bots(theirzone); - self thread bot_escort_obj(myflag, carrier); - - if(self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } - } - } - else//our flag is ok - { - if(self isFlagCarrier())//if have flag - { - //go cap - origin = myzone.curorigin; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 32 ); - - self thread bot_get_obj(myflag); - evt = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - wait 1; - if (evt != "new_goal") - self ClearBotGoal(); - self.bot_lock_goal = false; - continue; - } - - carrier = theirflag.carrier; - - if(!isDefined(carrier))//if no one has enemy flag - { - self bot_cap_get_flag(theirflag); - continue; - } - - //escort them - - if(self HasScriptGoal()) - continue; - - origin = carrier.origin; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_escort_obj(theirflag, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } - } -} - -/* - Bots go and get the flag -*/ -bot_cap_get_flag(flag) -{ - origin = flag.curorigin; - - //go get it - - self.bot_lock_goal = true; - self SetBotGoal( origin, 32 ); - - self thread bot_get_obj(flag); - - evt = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - wait 1; - - self.bot_lock_goal = false; - if (evt != "new_goal") - self ClearBotGoal(); -} - -/* - Bots play headquarters -*/ -bot_hq() -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( level.gametype != "koth" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.radio)) - continue; - - if(!isDefined(level.radio.gameobject)) - continue; - - radio = level.radio; - gameobj = radio.gameobject; - origin = ( radio.origin[0], radio.origin[1], radio.origin[2]+5 ); - - //if neut or enemy - if(gameobj.ownerTeam != myTeam) - { - if(gameobj.interactTeam == "none")//wait for it to become active - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - //capture it - - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - self thread bot_hq_go_cap(gameobj, radio); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if (event != "goal") - { - self.bot_lock_goal = false; - continue; - } - - if(!self isTouching(gameobj.trigger) || level.radio != radio) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - while(self isTouching(gameobj.trigger) && gameobj.ownerTeam != myTeam && level.radio == radio) - { - cur = gameobj.curProgress; - wait 0.5; - - if(cur == gameobj.curProgress) - break;//no prog made, enemy must be capping - } - - self ClearBotGoal(); - self.bot_lock_goal = false; - } - else//we own it - { - if(gameobj.objPoints[myteam].isFlashing)//underattack - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - self thread bot_hq_watch_flashing(gameobj, radio); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - } - } -} - -/* - Waits until not touching the trigger and it is the current radio. -*/ -bot_hq_go_cap(obj, radio) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait randomintrange(2,4); - - if (!isDefined(obj)) - break; - - if (self isTouching(obj.trigger)) - break; - - if (level.radio != radio) - break; - } - - if(level.radio != radio) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Waits while the radio is under attack. -*/ -bot_hq_watch_flashing(obj, radio) -{ - self endon( "death" ); - self endon( "disconnect" ); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - myteam = self.team; - - for (;;) - { - wait 0.5; - - if (!isDefined(obj)) - break; - - if (!obj.objPoints[myteam].isFlashing) - break; - - if (level.radio != radio) - break; - } - - self notify("bad_path"); -} - -/* - Bots play sab -*/ -bot_sab() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "sab" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.sabBomb)) - continue; - - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - if (self IsPlanting() || self isDefusing()) - continue; - - bomb = level.sabBomb; - bombteam = bomb.ownerTeam; - carrier = bomb.carrier; - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - - // the bomb is ours, we are on the offence - if(bombteam == myTeam) - { - site = level.bombZones[otherTeam]; - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - // protect our planted bomb - if(level.bombPlanted) - { - // kill defuser - if(site isInUse()) //somebody is defusing our bomb we planted - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - self.bot_lock_goal = false; - continue; - } - - // we are not the carrier - if(!self isBombCarrier()) - { - // lets escort the bomb carrier - if(self HasScriptGoal()) - continue; - - origin = carrier.origin; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_escort_obj(bomb, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - // we are the carrier of the bomb, lets check if we need to plant - timepassed = maps\mp\gametypes\_globallogic_utils::getTimePassed()/1000; - - if(timepassed < 120 && timeleft >= 90 && randomInt(100) < 98) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 1 ); - - self thread bot_go_plant(site); - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || level.bombPlanted || !self isTouching(site.trigger) || site IsInUse() || self inLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(site); - wait 1; - - self ClearBotGoal(); - self.bot_lock_goal = false; - } - else if(bombteam == otherTeam) // the bomb is theirs, we are on the defense - { - site = level.bombZones[myteam]; - - if(!isDefined(site.bots)) - site.bots = 0; - - // protect our site from planters - if(!level.bombPlanted) - { - //kill bomb carrier - if(site.bots > 2 || randomInt(100) < 45) - { - if(self HasScriptGoal()) - continue; - - if(carrier hasPerk( "specialty_gpsjammer" )) - continue; - - origin = carrier.origin; - - self SetBotGoal( origin, 64 ); - self thread bot_escort_obj(bomb, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - //protect bomb site - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - self thread bot_inc_bots(site); - - if(site isInUse())//somebody is planting - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - self thread bot_inc_bots(site); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - { - wait 4; - self notify("bot_inc_bots"); site.bots--; - continue; - } - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - self thread bot_inc_bots(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - self.bot_lock_goal = false; - continue; - } - - // bomb is planted we need to defuse - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - // someone else is defusing, lets just hang around - if(site.bots > 1) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_go_defuse(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - // lets go defuse - self.bot_lock_goal = true; - - self SetBotGoal( origin, 1 ); - self thread bot_inc_bots(site); - self thread bot_go_defuse(site); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || !level.bombPlanted || site IsInUse() || !self isTouching(site.trigger) || self InLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(site); - wait 1; - self ClearBotGoal(); - - self.bot_lock_goal = false; - } - else // we need to go get the bomb! - { - origin = ( bomb.curorigin[0], bomb.curorigin[1], bomb.curorigin[2]+32 ); - - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_get_obj(bomb); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - } -} - -/* - Bots play sd defenders -*/ -bot_sd_defenders() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "sd" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - if(myTeam == game["attackers"]) - return; - - rand = randomInt(100); - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if (self IsPlanting() || self isDefusing()) - continue; - - // bomb not planted, lets protect our sites - if(!level.bombPlanted) - { - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - - if(timeleft >= 90) - continue; - - // check for a bomb carrier, and camp the bomb - if(!level.multiBomb && isDefined(level.sdBomb)) - { - bomb = level.sdBomb; - carrier = level.sdBomb.carrier; - - if(!isDefined(carrier)) - { - origin = ( bomb.curorigin[0], bomb.curorigin[1], bomb.curorigin[2]+32 ); - - //hang around the bomb - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - self thread bot_get_obj(bomb); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - } - - // pick a site to protect - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - sites = []; - for(i = 0; i < level.bombZones.size; i++) - { - sites[sites.size] = level.bombZones[i]; - } - - if(!sites.size) - continue; - - if (rand > 50) - site = self bot_array_nearest_curorigin(sites); - else - site = random(sites); - - if(!isDefined(site)) - continue; - - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - if(site isInUse())//somebody is planting - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - // bomb is planted, we need to defuse - if(!isDefined(level.defuseObject)) - continue; - - defuse = level.defuseObject; - - if(!isDefined(defuse.bots)) - defuse.bots = 0; - - origin = ( defuse.curorigin[0], defuse.curorigin[1], defuse.curorigin[2]+32 ); - - // someone is going to go defuse ,lets just hang around - if(defuse.bots > 1) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_go_defuse(defuse); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - // lets defuse - self.bot_lock_goal = true; - self SetBotGoal( origin, 1 ); - self thread bot_inc_bots(defuse); - self thread bot_go_defuse(defuse); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || !level.bombPlanted || defuse isInUse() || !self isTouching(defuse.trigger) || self InLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(defuse); - wait 1; - self ClearBotGoal(); - self.bot_lock_goal = false; - } -} - -/* - Bots play sd attackers -*/ -bot_sd_attackers() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "sd" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - if(myTeam != game["attackers"]) - return; - - rand = randomInt(100); - - first = true; - - for ( ;; ) - { - if(first) - first = false; - else - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - //bomb planted - if(level.bombPlanted) - { - if(!isDefined(level.defuseObject)) - continue; - - site = level.defuseObject; - - origin = ( site.curorigin[0], site.curorigin[1], site.curorigin[2]+32 ); - - if(site IsInUse())//somebody is defusing - { - self.bot_lock_goal = true; - - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - timepassed = maps\mp\gametypes\_globallogic_utils::getTimePassed()/1000; - - //dont have a bomb - if(!self IsBombCarrier() && !level.multiBomb) - { - if(!isDefined(level.sdBomb)) - continue; - - bomb = level.sdBomb; - carrier = level.sdBomb.carrier; - - //bomb is picked up - if(isDefined(carrier)) - { - //escort the bomb carrier - if(self HasScriptGoal()) - continue; - - origin = carrier.origin; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_escort_obj(bomb, carrier); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - if(!isDefined(bomb.bots)) - bomb.bots = 0; - - origin = ( bomb.curorigin[0], bomb.curorigin[1], bomb.curorigin[2]+32 ); - - //hang around the bomb if other is going to go get it - if(bomb.bots > 1) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - self thread bot_get_obj(bomb); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - // go get the bomb - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - self thread bot_inc_bots(bomb); - self thread bot_get_obj(bomb); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - // check if to plant - if(timepassed < 120 && timeleft >= 90 && randomInt(100) < 98) - continue; - - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - sites = []; - for(i = 0; i < level.bombZones.size; i++) - { - sites[sites.size] = level.bombZones[i]; - } - - if(!sites.size) - continue; - - if(rand > 50) - plant = self bot_array_nearest_curorigin(sites); - else - plant = random(sites); - - if(!isDefined(plant)) - continue; - - origin = ( plant.curorigin[0]+50, plant.curorigin[1]+50, plant.curorigin[2]+32 ); - - self.bot_lock_goal = true; - self SetBotGoal( origin, 1 ); - self thread bot_go_plant(plant); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || level.bombPlanted || plant.visibleTeam == "none" || !self isTouching(plant.trigger) || self InLastStand() || isDefined(self getThreat()) || plant IsInUse()) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(plant); - wait 1; - - self ClearBotGoal(); - self.bot_lock_goal = false; - } -} - -/* - Bots go plant the demo bomb -*/ -bot_dem_go_plant(plant) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if ((plant.label == "_b" && level.bombBPlanted) || (plant.label == "_a" && level.bombAPlanted)) - break; - - if (self isTouching(plant.trigger)) - break; - } - - if((plant.label == "_b" && level.bombBPlanted) || (plant.label == "_a" && level.bombAPlanted)) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots spawn kill dom attackers -*/ -bot_dem_attack_spawnkill() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - l1 = level.bombAPlanted; - l2 = level.bombBPlanted; - - for (;;) - { - wait 0.5; - - if (l1 != level.bombAPlanted || l2 != level.bombBPlanted) - break; - } - - self notify("bad_path"); -} - -/* - Bots play demo attackers -*/ -bot_dem_attackers() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "dem" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - if(myTeam != game["attackers"]) - return; - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - bombs = [];//sites with bombs - sites = [];//sites to bomb at - bombed = 0;//exploded sites - for ( i = 0; i < level.bombZones.size; i++ ) - { - bomb = level.bombZones[i]; - - if(isDefined(bomb.bombExploded) && bomb.bombExploded) - { - bombed++; - continue; - } - - if(bomb.label == "_a") - { - if(level.bombAPlanted) - bombs[bombs.size] = bomb; - else - sites[sites.size] = bomb; - - continue; - } - - if(bomb.label == "_b") - { - if(level.bombBPlanted) - bombs[bombs.size] = bomb; - else - sites[sites.size] = bomb; - - continue; - } - } - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - - shouldLet = (game["teamScores"][myteam] > game["teamScores"][otherTeam] && timeleft < 90 && bombed == 1); - //spawnkill conditions - //if we have bombed one site or 1 bomb is planted with lots of time left, spawn kill - //if we want the other team to win for overtime and they do not need to defuse, spawn kill - if(((bombed + bombs.size == 1 && timeleft >= 90) || (shouldLet && !bombs.size)) && randomInt(100) < 95) - { - if(self HasScriptGoal()) - continue; - - spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_defender_start" ); - - if(!spawnPoints.size) - continue; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints ); - - if(DistanceSquared(spawnpoint.origin, self.origin) <= 2048*2048) - continue; - - self SetBotGoal( spawnpoint.origin, 1024 ); - - self thread bot_dem_attack_spawnkill(); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - //let defuse conditions - //if enemy is going to lose and lots of time left, let them defuse to play longer - //or if want to go into overtime near end of the extended game - if(((bombs.size + bombed == 2 && timeleft >= 90) || (shouldLet && bombs.size)) && randomInt(100) < 95) - { - spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_attacker_start" ); - - if(!spawnPoints.size) - continue; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints ); - - if(DistanceSquared(spawnpoint.origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( spawnpoint.origin, 512 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //defend bomb conditions - //if time is running out and we have a bomb planted - if(bombs.size && timeleft < 90 && (!sites.size || randomInt(100) < 95)) - { - site = self bot_array_nearest_curorigin(bombs); - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - if(site IsInUse())//somebody is defusing - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else go plant - if(!sites.size) - continue; - - plant = self bot_array_nearest_curorigin(sites); - - if(!isDefined(plant)) - continue; - - if(!isDefined(plant.bots)) - plant.bots = 0; - - origin = ( plant.curorigin[0]+50, plant.curorigin[1]+50, plant.curorigin[2]+32 ); - - //hang around the site if lots of time left - if(plant.bots > 1 && timeleft >= 60) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - self thread bot_dem_go_plant(plant); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - self.bot_lock_goal = true; - - self SetBotGoal( origin, 1 ); - self thread bot_inc_bots(plant); - self thread bot_dem_go_plant(plant); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || (plant.label == "_b" && level.bombBPlanted) || (plant.label == "_a" && level.bombAPlanted) || plant IsInUse() || !self isTouching(plant.trigger) || self InLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(plant); - wait 1; - - self ClearBotGoal(); - - self.bot_lock_goal = false; - } -} - -/* - Bots play demo defenders -*/ -bot_dem_defenders() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - - if ( level.gametype != "dem" ) - return; - - myTeam = self.pers[ "team" ]; - otherTeam = getOtherTeam( myTeam ); - - if(myTeam == game["attackers"]) - return; - - for ( ;; ) - { - wait( randomintrange( 3, 5 ) ); - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - continue; - } - - if(!isDefined(level.bombZones) || !level.bombZones.size) - continue; - - bombs = [];//sites with bombs - sites = [];//sites to bomb at - bombed = 0;//exploded sites - for ( i = 0; i < level.bombZones.size; i++ ) - { - bomb = level.bombZones[i]; - - if(isDefined(bomb.bombExploded) && bomb.bombExploded) - { - bombed++; - continue; - } - - if(bomb.label == "_a") - { - if(level.bombAPlanted) - bombs[bombs.size] = bomb; - else - sites[sites.size] = bomb; - - continue; - } - - if(bomb.label == "_b") - { - if(level.bombBPlanted) - bombs[bombs.size] = bomb; - else - sites[sites.size] = bomb; - - continue; - } - } - timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining()/1000; - - shouldLet = (timeleft < 60 && ((bombed == 0 && bombs.size != 2) || (game["teamScores"][myteam] > game["teamScores"][otherTeam] && bombed == 1)) && randomInt(100) < 98); - - //spawnkill conditions - //if nothing to defuse with a lot of time left, spawn kill - //or letting a bomb site to explode but a bomb is planted, so spawnkill - if((!bombs.size && timeleft >= 60 && randomInt(100) < 95) || (shouldLet && bombs.size == 1)) - { - if(self HasScriptGoal()) - continue; - - spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_attacker_start" ); - - if(!spawnPoints.size) - continue; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints ); - - if(DistanceSquared(spawnpoint.origin, self.origin) <= 2048*2048) - continue; - - self SetBotGoal( spawnpoint.origin, 1024 ); - - self thread bot_dem_defend_spawnkill(); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - //let blow up conditions - //let enemy blow up at least one to extend play time - //or if want to go into overtime after extended game - if(shouldLet) - { - spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_defender_start" ); - - if(!spawnPoints.size) - continue; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints ); - - if(DistanceSquared(spawnpoint.origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( spawnpoint.origin, 512 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //defend conditions - //if no bombs planted with little time left - if(!bombs.size && timeleft < 60 && randomInt(100) < 95 && sites.size) - { - site = self bot_array_nearest_curorigin(sites); - origin = ( site.curorigin[0]+50, site.curorigin[1]+50, site.curorigin[2]+32 ); - - if(site IsInUse())//somebody is planting - { - self.bot_lock_goal = true; - self SetBotGoal( origin, 64 ); - - self thread bot_defend_site(site); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else hang around the site - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self.bot_lock_goal = true; - self SetBotGoal( origin, 256 ); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - - self.bot_lock_goal = false; - continue; - } - - //else go defuse - - if(!bombs.size) - continue; - - defuse = self bot_array_nearest_curorigin(bombs); - - if(!isDefined(defuse)) - continue; - - if(!isDefined(defuse.bots)) - defuse.bots = 0; - - origin = ( defuse.curorigin[0]+50, defuse.curorigin[1]+50, defuse.curorigin[2]+32 ); - - //hang around the site if not in danger of losing - if(defuse.bots > 1 && bombed + bombs.size != 2) - { - if(self HasScriptGoal()) - continue; - - if(DistanceSquared(origin, self.origin) <= 1024*1024) - continue; - - self SetBotGoal( origin, 256 ); - - self thread bot_dem_go_defuse(defuse); - - if (self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal") - self ClearBotGoal(); - continue; - } - - self.bot_lock_goal = true; - - self SetBotGoal( origin, 1 ); - self thread bot_inc_bots(defuse); - self thread bot_dem_go_defuse(defuse); - - event = self waittill_any_return( "goal", "bad_path", "new_goal" ); - - if (event != "new_goal") - self ClearBotGoal(); - - if(event != "goal" || (defuse.label == "_b" && !level.bombBPlanted) || (defuse.label == "_a" && !level.bombAPlanted) || defuse IsInUse() || !self isTouching(defuse.trigger) || self InLastStand() || isDefined(self getThreat())) - { - self.bot_lock_goal = false; - continue; - } - - self SetBotGoal( self.origin, 64 ); - - self bot_use_bomb_thread(defuse); - wait 1; - - self ClearBotGoal(); - - self.bot_lock_goal = false; - } -} - -/* - Bots go defuse -*/ -bot_dem_go_defuse(defuse) -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (self isTouching(defuse.trigger)) - break; - - if ((defuse.label == "_b" && !level.bombBPlanted) || (defuse.label == "_a" && !level.bombAPlanted)) - break; - } - - if((defuse.label == "_b" && !level.bombBPlanted) || (defuse.label == "_a" && !level.bombAPlanted)) - self notify("bad_path"); - else - self notify("goal"); -} - -/* - Bots go spawn kill -*/ -bot_dem_defend_spawnkill() -{ - self endon( "death" ); - self endon( "disconnect" ); - level endon("game_ended"); - self endon( "goal" ); - self endon( "bad_path" ); - self endon( "new_goal" ); - - for (;;) - { - wait 0.5; - - if (level.bombBPlanted || level.bombAPlanted) - break; - } - - self notify("bad_path"); -} diff --git a/mods/patch_mp/maps/mp/bots/_bot_utility.gsc b/mods/patch_mp/maps/mp/bots/_bot_utility.gsc deleted file mode 100644 index be32501..0000000 --- a/mods/patch_mp/maps/mp/bots/_bot_utility.gsc +++ /dev/null @@ -1,539 +0,0 @@ -/* - _bot_utility - Author: INeedGames - Date: 12/20/2020 - The shared functions for bots -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; - -/* - Returns an array of all the bots in the game. -*/ -getBotArray() -{ - result = []; - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(!player is_bot()) - continue; - - result[result.size] = player; - } - - return result; -} - -/* - Returns a good amount of players. -*/ -getGoodMapAmount() -{ - switch(getdvar("mapname")) - { - default: - return 2; - } -} - -/* - Rounds to the nearest whole number. -*/ -Round(x) -{ - y = int(x); - - if(abs(x) - abs(y) > 0.5) - { - if(x < 0) - return y - 1; - else - return y + 1; - } - else - return y; -} - -/* - Picks a random thing -*/ -PickRandom(arr) -{ - if (!arr.size) - return undefined; - - return arr[randomInt(arr.size)]; -} - -/* - If is defusing -*/ -isDefusing() -{ - return (isDefined(self.isDefusing) && self.isDefusing); -} - -/* - If is defusing -*/ -isPlanting() -{ - return (isDefined(self.isPlanting) && self.isPlanting); -} - -/* - If is defusing -*/ -inLastStand() -{ - return (isDefined(self.laststand) && self.laststand); -} - -/* - Is they the flag carrier men? -*/ -isFlagCarrier() -{ - return (isDefined(self.isFlagCarrier) && self.isFlagCarrier); -} - -/* - If the site is in use -*/ -isInUse() -{ - return (isDefined(self.inUse) && self.inUse); -} - -/* - If the player is carrying a bomb -*/ -isBombCarrier() -{ - return (isDefined(self.isBombCarrier) && self.isBombCarrier); -} - -/* - Gets the bot's difficulty number -*/ -GetBotDiffNum() -{ - num = 0; - - switch (getDvar("bot_difficulty")) - { - case "fu": - num = 3; - break; - case "hard": - num = 2; - break; - case "normal": - num = 1; - break; - case "easy": - default: - num = 0; - break; - } - - return num; -} - -/* - is the weapon alt mode? -*/ -isWeaponAltmode(weap) -{ - if (isStrStart(weap, "gl_") || isStrStart(weap, "ft_") || isStrStart(weap, "mk_")) - return true; - - return false; -} - -/* - Returns a valid grenade launcher weapon -*/ -getValidTube() -{ - weaps = self getweaponslist(); - - for (i = 0; i < weaps.size; i++) - { - weap = weaps[i]; - - if(!self getAmmoCount(weap)) - continue; - - if ((isSubStr(weap, "gl_") && !isSubStr(weap, "_gl_")) || weap == "china_lake_mp") - return weap; - } - - return undefined; -} - -/* - Taken from iw4 script -*/ -waittill_any_timeout( timeOut, string1, string2, string3, string4, string5 ) -{ - if ( ( !isdefined( string1 ) || string1 != "death" ) && - ( !isdefined( string2 ) || string2 != "death" ) && - ( !isdefined( string3 ) || string3 != "death" ) && - ( !isdefined( string4 ) || string4 != "death" ) && - ( !isdefined( string5 ) || string5 != "death" ) ) - self endon( "death" ); - - ent = spawnstruct(); - - if ( isdefined( string1 ) ) - self thread waittill_string( string1, ent ); - - if ( isdefined( string2 ) ) - self thread waittill_string( string2, ent ); - - if ( isdefined( string3 ) ) - self thread waittill_string( string3, ent ); - - if ( isdefined( string4 ) ) - self thread waittill_string( string4, ent ); - - if ( isdefined( string5 ) ) - self thread waittill_string( string5, ent ); - - ent thread _timeout( timeOut ); - - ent waittill( "returned", msg ); - ent notify( "die" ); - return msg; -} - -/* - Used for waittill_any_timeout -*/ -_timeout( delay ) -{ - self endon( "die" ); - - wait( delay ); - self notify( "returned", "timeout" ); -} - -/* - Waits for a host player -*/ -bot_wait_for_host() -{ - host = undefined; - - while (!isDefined(level) || !isDefined(level.players)) - wait 0.05; - - for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05) - { - host = GetHostPlayer(); - - if(isDefined(host)) - break; - - wait 0.05; - } - - if(!isDefined(host)) - return; - - for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05) - { - if(IsDefined( host.pers[ "team" ] )) - break; - - wait 0.05; - } - - if(!IsDefined( host.pers[ "team" ] )) - return; - - for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05) - { - if(host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis") - break; - - wait 0.05; - } -} - -/* - Wrapper for setgoal -*/ -SetBotGoal(where, dist) -{ - self SetScriptGoal(where, dist); - waittillframeend; - self notify("new_goal"); -} - -/* - Weapper for cleargoal -*/ -ClearBotGoal() -{ - self ClearScriptGoal(); - waittillframeend; - self notify("new_goal"); -} - -/* - Freezes bot in place -*/ -botStopMove(what) -{ - self endon("disconnect"); - self endon("death"); - level endon("game_ended"); - - self notify("botStopMove"); - self endon("botStopMove"); - - if (!what) - return; - - og = self.origin; - for (;;) - { - self setVelocity((0,0,0)); - self setOrigin(og); - wait 0.05; - } -} - -/* - Matches a num to a char -*/ -keyCodeToString(a) -{ - b=""; - switch(a) - { - case 0: b= "a"; break; - case 1: b= "b"; break; - case 2: b= "c"; break; - case 3: b= "d"; break; - case 4: b= "e"; break; - case 5: b= "f"; break; - case 6: b= "g"; break; - case 7: b= "h"; break; - case 8: b= "i"; break; - case 9: b= "j"; break; - case 10: b= "k"; break; - case 11: b= "l"; break; - case 12: b= "m"; break; - case 13: b= "n"; break; - case 14: b= "o"; break; - case 15: b= "p"; break; - case 16: b= "q"; break; - case 17: b= "r"; break; - case 18: b= "s"; break; - case 19: b= "t"; break; - case 20: b= "u"; break; - case 21: b= "v"; break; - case 22: b= "w"; break; - case 23: b= "x"; break; - case 24: b= "y"; break; - case 25: b= "z"; break; - case 26: b= "."; break; - case 27: b= " "; break; - } - return b; -} - -/* - Does the extra check when adding bots -*/ -doExtraCheck() -{ - maps\mp\bots\_bot_script::checkTheBots(); -} - -/* - Returns the cone dot (like fov, or distance from the center of our screen). -*/ -getConeDot(to, from, dir) -{ - dirToTarget = VectorNormalize(to-from); - forward = AnglesToForward(dir); - return vectordot(dirToTarget, forward); -} - -/* - Fixes sd bomb planting -*/ -bot_onUsePlantObjectFix( player ) -{ - // planted the bomb - if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) ) - { - level thread bot_bombPlanted( self, player ); - player logString( "bomb planted: " + self.label ); - - // disable all bomb zones except this one - for ( index = 0; index < level.bombZones.size; index++ ) - { - if ( level.bombZones[index] == self ) - continue; - - level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); - } - thread playSoundOnPlayers( "mus_sd_planted"+"_"+level.teamPostfix[player.pers["team"]] ); -// removed plant audio until finalization of assest TODO : new plant sounds when assests are online -// player playSound( "mpl_sd_bomb_plant" ); - player notify ( "bomb_planted" ); - - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_PLANTED_BY", player ); - - if( isdefined(player.pers["plants"]) ) - { - player.pers["plants"]++; - player.plants = player.pers["plants"]; - } - - player maps\mp\_medals::saboteur(); - player maps\mp\gametypes\_persistence::statAddWithGameType( "PLANTS", 1 ); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_planted" ); - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "plant", player ); - //player thread [[level.onXPEvent]]( "plant" ); - } -} - -/* - Fixes sd bomb planting -*/ -bot_bombPlanted( destroyedObj, player ) -{ - maps\mp\gametypes\_globallogic_utils::pauseTimer(); - level.bombPlanted = true; - - destroyedObj.visuals[0] thread maps\mp\gametypes\_globallogic_utils::playTickingSound( "mpl_sab_ui_suitcasebomb_timer" ); - //Play suspense music - level thread maps\mp\gametypes\sd::bombPlantedMusicDelay(); - - //thread maps\mp\gametypes\_globallogic_audio::actionMusicSet(); - - level.tickingObject = destroyedObj.visuals[0]; - - level.timeLimitOverride = true; - setGameEndTime( int( gettime() + (level.bombTimer * 1000) ) ); - setMatchFlag( "bomb_timer", 1 ); - - if ( !level.multiBomb ) - { - level.sdBomb maps\mp\gametypes\_gameobjects::allowCarry( "none" ); - level.sdBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - level.sdBomb maps\mp\gametypes\_gameobjects::setDropped(); - level.sdBombModel = level.sdBomb.visuals[0]; - } - else - { - - for ( index = 0; index < level.players.size; index++ ) - { - if ( isDefined( level.players[index].carryIcon ) ) - level.players[index].carryIcon destroyElem(); - } - - trace = bulletTrace( player.origin + (0,0,20), player.origin - (0,0,2000), false, player ); - - tempAngle = randomfloat( 360 ); - forward = (cos( tempAngle ), sin( tempAngle ), 0); - forward = vectornormalize( forward - vector_scale( trace["normal"], vectordot( forward, trace["normal"] ) ) ); - dropAngles = vectortoangles( forward ); - - level.sdBombModel = spawn( "script_model", trace["position"] ); - level.sdBombModel.angles = dropAngles; - level.sdBombModel setModel( "prop_suitcase_bomb" ); - } - destroyedObj maps\mp\gametypes\_gameobjects::allowUse( "none" ); - destroyedObj maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - /* - destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", undefined ); - destroyedObj maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", undefined ); - destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", undefined ); - destroyedObj maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", undefined ); - */ - label = destroyedObj maps\mp\gametypes\_gameobjects::getLabel(); - - // create a new object to defuse with. - trigger = destroyedObj.bombDefuseTrig; - trigger.origin = level.sdBombModel.origin; - visuals = []; - defuseObject = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, (0,0,32) ); - defuseObject maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - defuseObject maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime ); - defuseObject maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" ); - defuseObject maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" ); - defuseObject maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defuse" + label ); - defuseObject maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_defend" + label ); - defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defuse" + label ); - defuseObject maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_defend" + label ); - defuseObject.label = label; - defuseObject.onBeginUse = maps\mp\gametypes\sd::onBeginUse; - defuseObject.onEndUse = maps\mp\gametypes\sd::onEndUse; - defuseObject.onUse = maps\mp\gametypes\sd::onUseDefuseObject; - defuseObject.useWeapon = "briefcase_bomb_defuse_mp"; - - level.defuseObject = defuseObject;//every cod... - - player.isBombCarrier = false; - - maps\mp\gametypes\sd::BombTimerWait(); - setMatchFlag( "bomb_timer", 0 ); - - destroyedObj.visuals[0] maps\mp\gametypes\_globallogic_utils::stopTickingSound(); - - if ( level.gameEnded || level.bombDefused ) - return; - - level.bombExploded = true; - - - - explosionOrigin = level.sdBombModel.origin+(0,0,12); - level.sdBombModel hide(); - - if ( isdefined( player ) ) - { - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, player, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_BLOWUP_BY", player ); - player maps\mp\_medals::bomber(); - player maps\mp\gametypes\_persistence::statAddWithGameType( "DESTRUCTIONS", 1 ); - } - else - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); - - rot = randomfloat(360); - explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + (0,0,50), (0,0,1), (cos(rot),sin(rot),0) ); - triggerFx( explosionEffect ); - - thread playSoundinSpace( "mpl_sd_exp_suitcase_bomb_main", explosionOrigin ); - //thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "SILENT", "both" ); - - if ( isDefined( destroyedObj.exploderIndex ) ) - exploder( destroyedObj.exploderIndex ); - - for ( index = 0; index < level.bombZones.size; index++ ) - level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); - defuseObject maps\mp\gametypes\_gameobjects::disableObject(); - - setGameEndTime( 0 ); - - wait 3; - - maps\mp\gametypes\sd::sd_endGame( game["attackers"], game["strings"]["target_destroyed"] ); -} diff --git a/mods/patch_mp/maps/mp/gametypes/_bot.gsc b/mods/patch_mp/maps/mp/gametypes/_bot.gsc deleted file mode 100644 index 8c2ff7e..0000000 --- a/mods/patch_mp/maps/mp/gametypes/_bot.gsc +++ /dev/null @@ -1,924 +0,0 @@ -/* - _bot - Author: INeedGames - Date: 12/20/2020 - The entry point and manager of the bots. -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\bots\_bot_utility; - -/* - Entry point to the bots -*/ -init() -{ - level.bw_VERSION = "1.1.1"; - - level.bot_offline = false; - - if(getDvar("bots_main") == "") - setDvar("bots_main", true); - - if (!getDvarInt("bots_main")) - return; - - if(getDvar("bots_main_waitForHostTime") == "") - setDvar("bots_main_waitForHostTime", 10.0);//how long to wait to wait for the host player - - if(getDvar("bots_manage_add") == "") - setDvar("bots_manage_add", 0);//amount of bots to add to the game - if(getDvar("bots_manage_fill") == "") - setDvar("bots_manage_fill", 0);//amount of bots to maintain - if(getDvar("bots_manage_fill_spec") == "") - setDvar("bots_manage_fill_spec", true);//to count for fill if player is on spec team - if(getDvar("bots_manage_fill_mode") == "") - setDvar("bots_manage_fill_mode", 0);//fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1 - if(getDvar("bots_manage_fill_kick") == "") - setDvar("bots_manage_fill_kick", false);//kick bots if too many - - if(getDvar("bots_team") == "") - setDvar("bots_team", "autoassign");//which team for bots to join - if(getDvar("bots_team_amount") == "") - setDvar("bots_team_amount", 0);//amount of bots on axis team - if(getDvar("bots_team_force") == "") - setDvar("bots_team_force", false);//force bots on team - if(getDvar("bots_team_mode") == "") - setDvar("bots_team_mode", 0);//counts just bots when 1 - - if(getDvar("bots_loadout_reasonable") == "")//filter out the bad 'guns' and perks - setDvar("bots_loadout_reasonable", false); - if(getDvar("bots_loadout_allow_op") == "")//allows jug, marty and laststand - setDvar("bots_loadout_allow_op", true); - if(getDvar("bots_loadout_rank") == "")// what rank the bots should be around, -1 is around the players, 0 is all random - setDvar("bots_loadout_rank", -1); - if(getDvar("bots_loadout_codpoints") == "")// how much cod points a bot should have, -1 is around the players, 0 is all random - setDvar("bots_loadout_codpoints", -1); - if(getDvar("bots_loadout_prestige") == "")// what pretige the bots will be, -1 is the players, -2 is random - setDvar("bots_loadout_prestige", -1); - - if(getDvar("bots_play_target_other") == "")//bot target non play ents (vehicles) - setDvar("bots_play_target_other", true); - if(getDvar("bots_play_killstreak") == "")//bot use killstreaks - setDvar("bots_play_killstreak", true); - if(getDvar("bots_play_nade") == "")//bots grenade - setDvar("bots_play_nade", true); - if(getDvar("bots_play_knife") == "")//bots knife - setDvar("bots_play_knife", true); - if(getDvar("bots_play_fire") == "")//bots fire - setDvar("bots_play_fire", true); - if(getDvar("bots_play_move") == "")//bots move - setDvar("bots_play_move", true); - if(getDvar("bots_play_take_carepackages") == "")//bots take carepackages - setDvar("bots_play_take_carepackages", true); - if(getDvar("bots_play_obj") == "")//bots play the obj - setDvar("bots_play_obj", true); - if(getDvar("bots_play_camp") == "")//bots camp and follow - setDvar("bots_play_camp", true); - - level.bots = []; - level.bot_decoys = []; - level.bot_planes = []; - - if(!isDefined(game["botWarfare"])) - game["botWarfare"] = true; - - thread fixGamemodes(); - thread onPlayerConnect(); - thread bot_watch_planes(); - - thread handleBots(); - - thread doNonDediBots(); -} - -/* - Thread when any player connects. Starts the threads needed. -*/ -onPlayerConnect() -{ - for(;;) - { - level waittill("connected", player); - - player thread watch_shoot(); - player thread watch_grenade(); - player thread connected(); - } -} - -/* - Starts the threads for bots. -*/ -handleBots() -{ - thread diffBots(); - thread teamBots(); - addBots(); - - while(!level.intermission) - wait 0.05; - - setDvar("bots_manage_add", getBotArray().size); -} - -/* - When a bot disconnects. -*/ -onDisconnect() -{ - self waittill("disconnect"); - - level.bots = array_remove(level.bots, self); -} - -/* - Whena player connects -*/ -connected() -{ - self endon("disconnect"); - - if (!self is_bot()) - return; - - self thread maps\mp\bots\_bot_script::connected(); - - level.bots[level.bots.size] = self; - self thread onDisconnect(); - - level notify("bot_connected", self); -} - -/* - Handles the diff of the bots -*/ -diffBots() -{ - for (;;) - { - wait 1.5; - - bot_set_difficulty(GetDvar( #"bot_difficulty" )); - } -} - -/* - Setup bot dvars for non dedicated clients -*/ -doNonDediBots() -{ - if (!GetDvarInt( #"xblive_basictraining" )) - return; - - if (isDefined(game[ "bots_spawned" ])) - return; - - game[ "bots_spawned" ] = true; - - if(getDvar("bot_enemies_extra") == "") - setDvar("bot_enemies_extra", 0); - if(getDvar("bot_friends_extra") == "") - setDvar("bot_friends_extra", 0); - - bot_friends = GetDvarInt( #"bot_friends" ); - bot_enemies = GetDvarInt( #"bot_enemies" ); - - bot_enemies += GetDvarInt("bot_enemies_extra"); - bot_friends += GetDvarInt("bot_friends_extra"); - - bot_wait_for_host(); - host = GetHostPlayer(); - - team = "allies"; - if(isDefined(host) && isDefined(host.pers[ "team" ]) && (host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis")) - team = host.pers[ "team" ]; - - setDvar("bots_manage_add", bot_enemies + bot_friends - 1); - setDvar("bots_manage_fill", bot_enemies + bot_friends); - setDvar("bots_manage_fill_mode", 0); - setDvar("bots_manage_fill_kick", true); - setDvar("bots_manage_fill_spec", false); - - setDvar("bots_team", "custom"); - - if (team == "axis") - setDvar("bots_team_amount", bot_friends); - else - setDvar("bots_team_amount", bot_enemies); - - setDvar("bots_team_force", true); - setDvar("bots_team_mode", 0); -} - -/* - Sets the difficulty of the bots -*/ -bot_set_difficulty( difficulty ) -{ - if ( difficulty == "fu" ) - { - SetDvar( "sv_botMinDeathTime", "250" ); - SetDvar( "sv_botMaxDeathTime", "500" ); - SetDvar( "sv_botMinFireTime", "100" ); - SetDvar( "sv_botMaxFireTime", "300" ); - SetDvar( "sv_botYawSpeed", "14" ); - SetDvar( "sv_botYawSpeedAds", "14" ); - SetDvar( "sv_botPitchUp", "-5" ); - SetDvar( "sv_botPitchDown", "10" ); - SetDvar( "sv_botFov", "160" ); - SetDvar( "sv_botMinAdsTime", "3000" ); - SetDvar( "sv_botMaxAdsTime", "5000" ); - SetDvar( "sv_botMinCrouchTime", "100" ); - SetDvar( "sv_botMaxCrouchTime", "400" ); - SetDvar( "sv_botTargetLeadBias", "2" ); - SetDvar( "sv_botMinReactionTime", "30" ); - SetDvar( "sv_botMaxReactionTime", "100" ); - SetDvar( "sv_botStrafeChance", "1" ); - SetDvar( "sv_botMinStrafeTime", "3000" ); - SetDvar( "sv_botMaxStrafeTime", "6000" ); - SetDvar( "scr_help_dist", "512" ); - SetDvar( "sv_botAllowGrenades", "1" ); - SetDvar( "sv_botMinGrenadeTime", "1500" ); - SetDvar( "sv_botMaxGrenadeTime", "4000" ); - SetDvar( "sv_botSprintDistance", "512" ); - SetDvar( "sv_botMeleeDist", "80" ); - } - else if ( difficulty == "hard" ) - { - SetDvar( "sv_botMinDeathTime", "250" ); - SetDvar( "sv_botMaxDeathTime", "500" ); - SetDvar( "sv_botMinFireTime", "400" ); - SetDvar( "sv_botMaxFireTime", "600" ); - SetDvar( "sv_botYawSpeed", "8" ); - SetDvar( "sv_botYawSpeedAds", "10" ); - SetDvar( "sv_botPitchUp", "-5" ); - SetDvar( "sv_botPitchDown", "10" ); - SetDvar( "sv_botFov", "100" ); - SetDvar( "sv_botMinAdsTime", "3000" ); - SetDvar( "sv_botMaxAdsTime", "5000" ); - SetDvar( "sv_botMinCrouchTime", "100" ); - SetDvar( "sv_botMaxCrouchTime", "400" ); - SetDvar( "sv_botTargetLeadBias", "2" ); - SetDvar( "sv_botMinReactionTime", "400" ); - SetDvar( "sv_botMaxReactionTime", "700" ); - SetDvar( "sv_botStrafeChance", "0.9" ); - SetDvar( "sv_botMinStrafeTime", "3000" ); - SetDvar( "sv_botMaxStrafeTime", "6000" ); - SetDvar( "scr_help_dist", "384" ); - SetDvar( "sv_botAllowGrenades", "1" ); - SetDvar( "sv_botMinGrenadeTime", "1500" ); - SetDvar( "sv_botMaxGrenadeTime", "4000" ); - SetDvar( "sv_botSprintDistance", "512" ); - SetDvar( "sv_botMeleeDist", "80" ); - } - else if ( difficulty == "easy" ) - { - SetDvar( "sv_botMinDeathTime", "1000" ); - SetDvar( "sv_botMaxDeathTime", "2000" ); - SetDvar( "sv_botMinFireTime", "900" ); - SetDvar( "sv_botMaxFireTime", "1000" ); - SetDvar( "sv_botYawSpeed", "2" ); - SetDvar( "sv_botYawSpeedAds", "2.5" ); - SetDvar( "sv_botPitchUp", "-20" ); - SetDvar( "sv_botPitchDown", "40" ); - SetDvar( "sv_botFov", "50" ); - SetDvar( "sv_botMinAdsTime", "3000" ); - SetDvar( "sv_botMaxAdsTime", "5000" ); - SetDvar( "sv_botMinCrouchTime", "4000" ); - SetDvar( "sv_botMaxCrouchTime", "6000" ); - SetDvar( "sv_botTargetLeadBias", "8" ); - SetDvar( "sv_botMinReactionTime", "1200" ); - SetDvar( "sv_botMaxReactionTime", "1600" ); - SetDvar( "sv_botStrafeChance", "0.1" ); - SetDvar( "sv_botMinStrafeTime", "3000" ); - SetDvar( "sv_botMaxStrafeTime", "6000" ); - SetDvar( "scr_help_dist", "256" ); - SetDvar( "sv_botAllowGrenades", "0" ); - SetDvar( "sv_botSprintDistance", "1024" ); - SetDvar( "sv_botMeleeDist", "40" ); - } - else // 'normal' difficulty - { - SetDvar( "sv_botMinDeathTime", "500" ); - SetDvar( "sv_botMaxDeathTime", "1000" ); - SetDvar( "sv_botMinFireTime", "600" ); - SetDvar( "sv_botMaxFireTime", "800" ); - SetDvar( "sv_botYawSpeed", "4" ); - SetDvar( "sv_botYawSpeedAds", "5" ); - SetDvar( "sv_botPitchUp", "-10" ); - SetDvar( "sv_botPitchDown", "20" ); - SetDvar( "sv_botFov", "70" ); - SetDvar( "sv_botMinAdsTime", "3000" ); - SetDvar( "sv_botMaxAdsTime", "5000" ); - SetDvar( "sv_botMinCrouchTime", "2000" ); - SetDvar( "sv_botMaxCrouchTime", "4000" ); - SetDvar( "sv_botTargetLeadBias", "4" ); - SetDvar( "sv_botMinReactionTime", "800" ); - SetDvar( "sv_botMaxReactionTime", "1200" ); - SetDvar( "sv_botStrafeChance", "0.6" ); - SetDvar( "sv_botMinStrafeTime", "3000" ); - SetDvar( "sv_botMaxStrafeTime", "6000" ); - SetDvar( "scr_help_dist", "256" ); - SetDvar( "sv_botAllowGrenades", "1" ); - SetDvar( "sv_botMinGrenadeTime", "1500" ); - SetDvar( "sv_botMaxGrenadeTime", "4000" ); - SetDvar( "sv_botSprintDistance", "512" ); - SetDvar( "sv_botMeleeDist", "80" ); - difficulty = "normal"; - } - - if ( level.gameType == "oic" && difficulty == "fu" ) - { - SetDvar( "sv_botMinReactionTime", "400" ); - SetDvar( "sv_botMaxReactionTime", "500" ); - SetDvar( "sv_botMinAdsTime", "1000" ); - SetDvar( "sv_botMaxAdsTime", "2000" ); - } - - if ( level.gameType == "oic" && ( difficulty == "hard" || difficulty == "fu" ) ) - { - SetDvar( "sv_botSprintDistance", "256" ); - } - - if (!getDvarInt("bots_play_nade")) - SetDvar( "sv_botAllowGrenades", "0" ); - - SetDvar( "bot_difficulty", difficulty ); - SetDvar( "scr_bot_difficulty", difficulty ); - SetDvar( "splitscreen_botDifficulty", difficulty ); -} - -/* - A server thread for monitoring all bot's teams for custom server settings. -*/ -teamBots() -{ - for(;;) - { - wait 1.5; - teamAmount = getDvarInt("bots_team_amount"); - toTeam = getDvar("bots_team"); - - alliesbots = 0; - alliesplayers = 0; - axisbots = 0; - axisplayers = 0; - - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(!isDefined(player.pers["team"])) - continue; - - if(player is_bot()) - { - if(player.pers["team"] == "allies") - alliesbots++; - else if(player.pers["team"] == "axis") - axisbots++; - } - else - { - if(player.pers["team"] == "allies") - alliesplayers++; - else if(player.pers["team"] == "axis") - axisplayers++; - } - } - - allies = alliesbots; - axis = axisbots; - - if(!getDvarInt("bots_team_mode")) - { - allies += alliesplayers; - axis += axisplayers; - } - - if(toTeam != "custom") - { - if(getDvarInt("bots_team_force")) - { - if(toTeam == "autoassign") - { - if(abs(axis - allies) > 1) - { - toTeam = "axis"; - if(axis > allies) - toTeam = "allies"; - } - } - - if(toTeam != "autoassign") - { - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(!isDefined(player.pers["team"])) - continue; - - if(!player is_bot()) - continue; - - if(player.pers["team"] == toTeam) - continue; - - if (toTeam == "allies") - player thread [[level.allies]](); - else if (toTeam == "axis") - player thread [[level.axis]](); - else - player thread [[level.spectator]](); - break; - } - } - } - } - else - { - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(!isDefined(player.pers["team"])) - continue; - - if(!player is_bot()) - continue; - - if(player.pers["team"] == "axis") - { - if(axis > teamAmount) - { - player thread [[level.allies]](); - break; - } - } - else - { - if(axis < teamAmount) - { - player thread [[level.axis]](); - break; - } - else if(player.pers["team"] != "allies") - { - player thread [[level.allies]](); - break; - } - } - } - } - } -} - -/* - A server thread for monitoring all bot's in game. Will add and kick bots according to server settings. - - Dedis only spawn bots when developer is not 0 - This makes the dedi unstable and can crash - - Patch the executable to skip the pregame and make it so bots can spawn - - pregame: - in the ShouldDoPregame sub: - B8 01 00 00 00: mov eax, 1 -change to: B8 00 00 00 00: mov eax, 0 - 0x4F6C77 in rektmp - 0x4598A7 in bg - - - spawnbots: - in the SV_AddTestClient sub: - 0F 85 A4 00 00 00: jnz -change to: 0F 84 A4 00 00 00: jz - 0x6B6180 in rektmp - 0x4682F0 in bg - - - allow changing g_antilag dvar: - set the byte from 0x40 to 0x00 - - 0x53B1B2 in rekt - 0x59B6F2 in bg -*/ -addBots() -{ - level endon ( "game_ended" ); - - bot_wait_for_host(); - - for (;;) - { - wait 1.5; - - botsToAdd = GetDvarInt("bots_manage_add"); - - if(botsToAdd > 0) - { - SetDvar("bots_manage_add", 0); - - if(botsToAdd > 64) - botsToAdd = 64; - - for(; botsToAdd > 0; botsToAdd--) - { - level add_bot(); - wait 0.25; - } - } - - fillMode = getDVarInt("bots_manage_fill_mode"); - - if(fillMode == 2 || fillMode == 3) - setDvar("bots_manage_fill", getGoodMapAmount()); - - fillAmount = getDvarInt("bots_manage_fill"); - - players = 0; - bots = 0; - spec = 0; - - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if (player isdemoclient()) - continue; - - if(player is_bot()) - bots++; - else if(!isDefined(player.pers["team"]) || (player.pers["team"] != "axis" && player.pers["team"] != "allies")) - spec++; - else - players++; - } - - if(fillMode == 4) - { - axisplayers = 0; - alliesplayers = 0; - - playercount = level.players.size; - for(i = 0; i < playercount; i++) - { - player = level.players[i]; - - if(player is_bot()) - continue; - - if(!isDefined(player.pers["team"])) - continue; - - if(player.pers["team"] == "axis") - axisplayers++; - else if(player.pers["team"] == "allies") - alliesplayers++; - } - - result = fillAmount - abs(axisplayers - alliesplayers) + bots; - - if (players == 0) - { - if(bots < fillAmount) - result = fillAmount-1; - else if (bots > fillAmount) - result = fillAmount+1; - else - result = fillAmount; - } - - bots = result; - } - - if (!randomInt(999)) - { - setDvar("testclients_doreload", true); - wait 0.1; - setDvar("testclients_doreload", false); - doExtraCheck(); - } - - amount = bots; - if(fillMode == 0 || fillMode == 2) - amount += players; - if(getDVarInt("bots_manage_fill_spec")) - amount += spec; - - if(amount < fillAmount) - setDvar("bots_manage_add", 1); - else if(amount > fillAmount && getDvarInt("bots_manage_fill_kick")) - { - tempBot = PickRandom(getBotArray()); - if (isDefined(tempBot)) - kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" ); - } - } -} - -/* - Adds a bot to the game. -*/ -add_bot() -{ - bot = addtestclient(); - - if (isdefined(bot)) - { - bot.pers["isBot"] = true; - bot.equipment_enabled = true; - bot.pers[ "bot_perk" ] = true; - bot.pers["isBotWarfare"] = true; - bot thread maps\mp\bots\_bot_script::added(); - } -} - -/* - Gives the bot loadout -*/ -bot_give_loadout() -{ - self maps\mp\bots\_bot_loadout::bot_give_loadout(); -} - -/* - Fired when the bot is damaged -*/ -bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ) -{ - self maps\mp\bots\_bot_script::bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ); -} - -/* - Bot is idle -*/ -bot_is_idle() -{ - if ( !IsDefined( self ) ) - { - return false; - } - - if ( !IsAlive( self ) ) - { - return false; - } - - if ( !self is_bot() ) - { - return false; - } - - if ( self inLastStand() ) - { - return false; - } - - if ( self HasScriptGoal() ) - { - return false; - } - - if ( IsDefined( self GetThreat() ) ) - { - return false; - } - - if ( self IsRemoteControlling() || self.bot_lock_goal ) - { - return false; - } - - if(self UseButtonPressed()) - return false; - - if(self isPlanting()) - return false; - - if(self isDefusing()) - return false; - - return true; -} - -/* - Watch all players grenades -*/ -watch_grenade() -{ - self endon("disconnect"); - - self.bot_scrambled = false; - for(;;) - { - self waittill("grenade_fire", g, name); - if(name == "scrambler_mp") - { - g thread watch_scrambler(); - } - else if(name == "nightingale_mp") - { - self thread watch_decoy(g); - } - } -} - -/* - Watch the decoy grenade -*/ -watch_decoy(g) -{ - g.team = self.team; - - level.bot_decoys[level.bot_decoys.size] = g; - - g waittill("death"); - - for ( entry = 0; entry < level.bot_decoys.size; entry++ ) - { - if ( level.bot_decoys[entry] == g ) - { - while ( entry < level.bot_decoys.size-1 ) - { - level.bot_decoys[entry] = level.bot_decoys[entry+1]; - entry++; - } - level.bot_decoys[entry] = undefined; - break; - } - } -} - -/* - Attach a trigger to the scrambler -*/ -watch_scrambler() -{ - trig = spawn( "trigger_radius", self.origin + (0, 0, -1000), 0, 1000, 2000 ); - - self scramble_nearby(trig); - - trig delete(); -} - -/* - Watch when players enter the scrambler trigger -*/ -scramble_nearby(trig) -{ - self endon("death"); - self endon("hacked"); - - while(!isDefined(self.owner) || !isDefined(self.owner.team)) - wait 0.05; - - self.team = self.owner.team; - for(;;) - { - trig waittill("trigger", player); - - if (!isDefined(player) || !isDefined(player.team)) - continue; - - if(self maps\mp\gametypes\_weaponobjects::isStunned()) - continue; - - if(isDefined(self.owner) && player == self.owner) - continue; - - if(level.teamBased && self.team == player.team) - continue; - - player thread scramble_player(); - } -} - -/* - Scramble this player -*/ -scramble_player() -{ - self notify("scramble_nearby"); - self endon("scramble_nearby"); - - self.bot_scrambled = true; - wait 0.1; - - if(isDefined(self)) - self.bot_scrambled = false; -} - -/* - Watch when a player shoots -*/ -watch_shoot() -{ - self endon("disconnect"); - - self.bot_firing = false; - for(;;) - { - self waittill( "weapon_fired" ); - self thread doFiringThread(); - } -} - -/* - When a player fires -*/ -doFiringThread() -{ - self endon("disconnect"); - self endon("weapon_fired"); - - self.bot_firing = true; - wait 1; - self.bot_firing = false; -} - -/* - Watches the planes -*/ -bot_watch_planes() -{ - for(;;) - { - level waittill("uav_update"); - - ents = GetEntArray("script_model", "classname"); - for(i = 0; i < ents.size; i++) - { - ent = ents[i]; - - if(isDefined(ent.bot_plane)) - continue; - - if(ent.model != level.spyplanemodel) - continue; - - thread watch_plane(ent); - } - } -} - -/* - Watches the plane -*/ -watch_plane(ent) -{ - ent.bot_plane = true; - - level.bot_planes[level.bot_planes.size] = ent; - - ent waittill_any("death", "delete", "leaving"); - - for ( entry = 0; entry < level.bot_planes.size; entry++ ) - { - if ( level.bot_planes[entry] == ent ) - { - while ( entry < level.bot_planes.size-1 ) - { - level.bot_planes[entry] = level.bot_planes[entry+1]; - entry++; - } - level.bot_planes[entry] = undefined; - break; - } - } -} - -/* - Fix xp in sd -*/ -bot_killBoost() -{ - return false; -} - -/* - Fixes sd -*/ -fixGamemodes() -{ - for(i=0;i<19;i++) - { - if(isDefined(level.bombZones) && level.gametype == "sd") - { - level.isKillBoosting = ::bot_killBoost; - for(i = 0; i < level.bombZones.size; i++) - level.bombZones[i].onUse = ::bot_onUsePlantObjectFix; - break; - } - - wait 0.05; - } -} diff --git a/mods/patch_mp/maps/mp/gametypes/_globallogic_player.gsc b/mods/patch_mp/maps/mp/gametypes/_globallogic_player.gsc deleted file mode 100644 index b7bc9a0..0000000 --- a/mods/patch_mp/maps/mp/gametypes/_globallogic_player.gsc +++ /dev/null @@ -1,2629 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; - -freezePlayerForRoundEnd() -{ - self clearLowerMessage(); - - self closeMenu(); - self closeInGameMenu(); - - self freeze_player_controls( true ); - currentWeapon = self GetCurrentWeapon(); - if ( maps\mp\gametypes\_hardpoints::isKillstreakWeapon( currentWeapon ) && !maps\mp\gametypes\_killstreak_weapons::isHeldKillstreakWeapon( currentWeapon ) ) - self takeWeapon( currentWeapon ); -// self _disableWeapon(); -} - - -Callback_PlayerConnect() -{ - thread notifyConnecting(); - - self.statusicon = "hud_status_connecting"; - self waittill( "begin" ); - waittillframeend; - self.statusicon = ""; - - level notify( "connected", self ); - -// self thread maps\mp\gametypes\_globallogic_utils::fakeLag(); - if ( level.console && self IsHost() ) - self thread maps\mp\gametypes\_globallogic::listenForGameEnd(); - - // only print that we connected if we haven't connected in a previous round - if( !level.splitscreen && !isdefined( self.pers["score"] ) ) - { - iPrintLn(&"MP_CONNECTED", self); - } - - if( !isdefined( self.pers["score"] ) ) - { - self thread maps\mp\gametypes\_persistence::adjustRecentStats(); - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "valid", 0 ); - if( level.console ) - { - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 && !( self IsHost() ) ) - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatchFailed", 1 ); - else - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatchFailed", 0 ); - } - else - { - /# - PrintLn("level.wagermatch: " + level.wagermatch ); - #/ - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - if ( !self is_bot() && !self isdemoclient() ) - { - codPoints = self maps\mp\gametypes\_persistence::statGet( "CODPOINTS" ); - if( codPoints < level.wagerBet && !self IsHost() ) - { - /# - PrintLn("kick " + self.name + "; not enought codpoints: " + codPoints ); - #/ - kick( self getEntityNumber(), "PLATFORM_WAGER_DEADBEAT_TITLE" ); - return; - } - } - - // set this flag to notify player of possible refund in case the match does not end well - // self maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatchFailed", 1 ); - } - else - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "wagerMatchFailed", 0 ); - } - } - - // track match and hosting stats once per match - if ( !IsDefined( self.pers["matchesPlayedStatsTracked"] ) ) - { - self maps\mp\gametypes\_persistence::statAdd( "MATCHES_PLAYED", 1, false ); - self.pers["MATCHES_PLAYED_COMPLETED_STREAK"] = self maps\mp\gametypes\_persistence::statGet( "MATCHES_PLAYED_COMPLETED_STREAK" ) + 1; - self maps\mp\gametypes\_persistence::statSet( "MATCHES_PLAYED_COMPLETED_STREAK", 0, false ); - - if ( !IsDefined( self.pers["matchesHostedStatsTracked"] ) && self IsLocalToHost() ) - { - self maps\mp\gametypes\_persistence::statAdd( "MATCHES_HOSTED", 1, false ); - self.pers["MATCHES_HOSTED_COMPLETED_STREAK"] = self maps\mp\gametypes\_persistence::statGet( "MATCHES_HOSTED_COMPLETED_STREAK" ) + 1; - self maps\mp\gametypes\_persistence::statSet( "MATCHES_HOSTED_COMPLETED_STREAK", 0, false ); - self.pers["matchesHostedStatsTracked"] = true; - } - - self.pers["matchesPlayedStatsTracked"] = true; - self thread maps\mp\gametypes\_persistence::uploadStatsSoon(); - } - - self maps\mp\_gamerep::gameRepPlayerConnected(); - - lpselfnum = self getEntityNumber(); - lpGuid = self getGuid(); - logPrint("J;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n"); - bbPrint( "mpjoins: name %s client %s", self.name, lpselfnum ); - - self setClientUIVisibilityFlag( "hud_visible", 1 ); - self setClientUIVisibilityFlag( "g_compassShowEnemies", GetDvarInt( #"scr_game_forceradar" ) ); - - self setClientDvars( "player_sprintTime", GetDvar( #"scr_player_sprinttime" ), - "ui_radar_client", GetDvar( #"ui_radar_client" ), - "scr_numLives", level.numLives, - "ui_pregame", isPregame() ); - - self CameraActivate( false ); - - makeDvarServerInfo( "cg_drawTalk", 1 ); - - if ( level.hardcoreMode ) - { - self setClientDvars( "cg_drawTalk", 3 ); - } - - if ( GetDvarInt( #"player_sprintUnlimited" ) ) - { - self setClientDvar( "player_sprintUnlimited", 1 ); - } - -/# - if ( GetDvarInt( #"scr_hitloc_debug") ) - { - for ( i = 0; i < 6; i++ ) - { - self setClientDvar( "ui_hitloc_" + i, "" ); - } - self.hitlocInited = true; - } -#/ - - self maps\mp\gametypes\_globallogic_score::initPersStat( "score" ); - if ( level.resetPlayerScoreEveryRound ) - { - self.pers["score"] = 0; - } - self.score = self.pers["score"]; - - self maps\mp\gametypes\_globallogic_score::initPersStat( "suicides" ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getPersStat( "suicides" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "headshots" ); - self.headshots = self maps\mp\gametypes\_globallogic_score::getPersStat( "headshots" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "challenges" ); - self.challenges = self maps\mp\gametypes\_globallogic_score::getPersStat( "challenges" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "kills" ); - self.kills = self maps\mp\gametypes\_globallogic_score::getPersStat( "kills" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "deaths" ); - self.deaths = self maps\mp\gametypes\_globallogic_score::getPersStat( "deaths" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "assists" ); - self.assists = self maps\mp\gametypes\_globallogic_score::getPersStat( "assists" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "defends", false ); - self.defends = self maps\mp\gametypes\_globallogic_score::getPersStat( "defends" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "offends", false ); - self.offends = self maps\mp\gametypes\_globallogic_score::getPersStat( "offends" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "plants", false ); - self.plants = self maps\mp\gametypes\_globallogic_score::getPersStat( "plants" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "defuses", false ); - self.defuses = self maps\mp\gametypes\_globallogic_score::getPersStat( "defuses" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "returns", false ); - self.returns = self maps\mp\gametypes\_globallogic_score::getPersStat( "returns" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "captures", false ); - self.captures = self maps\mp\gametypes\_globallogic_score::getPersStat( "captures" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "destructions", false ); - self.destructions = self maps\mp\gametypes\_globallogic_score::getPersStat( "destructions" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "backstabs" ); - self.backstabs = self maps\mp\gametypes\_globallogic_score::getPersStat( "backstabs" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "longshots" ); - self.longshots = self maps\mp\gametypes\_globallogic_score::getPersStat( "longshots" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "survived" ); - self.survived = self maps\mp\gametypes\_globallogic_score::getPersStat( "survived" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "stabs" ); - self.stabs = self maps\mp\gametypes\_globallogic_score::getPersStat( "stabs" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "tomahawks" ); - self.tomahawks = self maps\mp\gametypes\_globallogic_score::getPersStat( "tomahawks" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "humiliated" ); - self.humiliated = self maps\mp\gametypes\_globallogic_score::getPersStat( "humiliated" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "x2score" ); - self.x2score = self maps\mp\gametypes\_globallogic_score::getPersStat( "x2score" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "sessionbans" ); - self.sessionbans = self maps\mp\gametypes\_globallogic_score::getPersStat( "sessionbans" ); - self maps\mp\gametypes\_globallogic_score::initPersStat( "gametypeban" ); - self maps\mp\gametypes\_globallogic_score::initPersStat( "time_played_total" ); - self maps\mp\gametypes\_globallogic_score::initPersStat( "time_played_alive" ); - - self maps\mp\gametypes\_globallogic_score::initPersStat( "teamkills", false ); - self maps\mp\gametypes\_globallogic_score::initPersStat( "teamkills_nostats" ); - self.teamKillPunish = false; - if ( level.minimumAllowedTeamKills >= 0 && self.pers["teamkills_nostats"] > level.minimumAllowedTeamKills ) - self thread reduceTeamKillsOverTime(); - - if( GetDvar( #"r_reflectionProbeGenerate" ) == "1" ) - level waittill( "eternity" ); - - - self.killedPlayersCurrent = []; - - if( !isDefined( self.pers["best_kill_streak"] ) ) - { - self.pers["killed_players"] = []; - self.pers["killed_by"] = []; - self.pers["nemesis_tracking"] = []; - self.pers["artillery_kills"] = 0; - self.pers["dog_kills"] = 0; - self.pers["nemesis_name"] = ""; - self.pers["nemesis_rank"] = 0; - self.pers["nemesis_rankIcon"] = 0; - self.pers["nemesis_xp"] = 0; - self.pers["nemesis_xuid"] = ""; - - - /*self.killstreakKills["artillery"] = 0; - self.killstreakKills["dogs"] = 0; - self.killstreaksUsed["radar"] = 0; - self.killstreaksUsed["artillery"] = 0; - self.killstreaksUsed["dogs"] = 0;*/ - self.pers["best_kill_streak"] = 0; - } - -// Adding Music tracking per player CDC - if( !isDefined( self.pers["music"] ) ) - { - self.pers["music"] = spawnstruct(); - self.pers["music"].spawn = false; - self.pers["music"].inque = false; - self.pers["music"].currentState = "SILENT"; - self.pers["music"].previousState = "SILENT"; - self.pers["music"].nextstate = "UNDERSCORE"; - self.pers["music"].returnState = "UNDERSCORE"; - - } - self.leaderDialogQueue = []; - self.leaderDialogActive = false; - self.leaderDialogGroups = []; - self.leaderDialogGroup = ""; - - if ( !isdefined( self.pers["cur_kill_streak"] ) ) - self.pers["cur_kill_streak"] = 0; - if ( !isdefined( self.pers["totalKillstreakCount"] ) ) - self.pers["totalKillstreakCount"] = 0; - - //Keep track of how many killstreaks have been earned in the current streak - if ( !isdefined( self.pers["killstreaksEarnedThisKillstreak"] ) ) - self.pers["killstreaksEarnedThisKillstreak"] = 0; - - self.lastKillTime = 0; - - self.cur_death_streak = 0; - self disabledeathstreak(); - self.death_streak = 0; - self.kill_streak = 0; - self.gametype_kill_streak = 0; - - if ( level.onlineGame ) - { - self.death_streak = self getDStat( "HighestStats", "death_streak" ); - self.kill_streak = self getDStat( "HighestStats", "kill_streak" ); - self.gametype_kill_streak = self maps\mp\gametypes\_persistence::statGetWithGameType( "kill_streak" ); - } - - - self.lastGrenadeSuicideTime = -1; - - self.teamkillsThisRound = 0; - - if ( !isDefined( level.livesDoNotReset ) || !level.livesDoNotReset || !isDefined( self.pers["lives"] ) ) - self.pers["lives"] = level.numLives; - - // multi round FFA games in custom game mode should maintain team in-between rounds - if ( !level.teamBased && !maps\mp\gametypes\_customClasses::isCustomGame() ) - { - self.pers["team"] = undefined; - } - - self.hasSpawned = false; - self.waitingToSpawn = false; - self.wantSafeSpawn = false; - self.deathCount = 0; - - self.wasAliveAtMatchStart = false; - - self thread maps\mp\_flashgrenades::monitorFlash(); - - level.players[level.players.size] = self; - - if( level.splitscreen ) - setdvar( "splitscreen_playerNum", level.players.size ); - // removed underscore for debug CDC - //maps\mp\gametypes\_globallogic_audio::set_music_on_team( "UNDERSCORE", "both", true );; - // When joining a game in progress, if the game is at the post game state (scoreboard) the connecting player should spawn into intermission - if ( game["state"] == "postgame" ) - { - self.pers["needteam"] = 1; - self.pers["team"] = "spectator"; - self.team = "spectator"; - self setClientUIVisibilityFlag( "hud_visible", 0 ); - - self [[level.spawnIntermission]](); - self closeMenu(); - self closeInGameMenu(); - return; - } - - // don't count losses for CTF and S&D and War at each round. - if ( !isDefined( self.pers["lossAlreadyReported"] ) ) - { - maps\mp\gametypes\_globallogic_score::updateLossStats( self ); - self.pers["lossAlreadyReported"] = true; - } - // don't redo winstreak save to pers array for each round of round based games. - if ( !isDefined( self.pers["winstreakAlreadyCleared"] ) ) - { - self maps\mp\gametypes\_globallogic_score::backupAndClearWinStreaks(); - self.pers["winstreakAlreadyCleared"] = true; - } - - if( self isdemoclient() ) - { - spawnpoint = maps\mp\gametypes\_spawnlogic::getRandomIntermissionPoint(); - setDemoIntermissionPoint( spawnpoint.origin, spawnpoint.angles ); - self.pers["team"] = ""; - self [[level.spectator]](); - return; - } - - if( self istestclient() ) - { - self.pers[ "isBot" ] = true; - } - - if ( level.rankedMatch ) - { - self maps\mp\gametypes\_persistence::setAfterActionReportStat( "demoFileID", "0" ); - } - - level endon( "game_ended" ); - - if ( isDefined( level.hostMigrationTimer ) ) - self thread maps\mp\gametypes\_hostmigration::hostMigrationTimerThink(); - - if ( level.oldschool ) - { - self.pers["class"] = undefined; - self.class = self.pers["class"]; - } - - if ( isDefined( self.pers["team"] ) ) - self.team = self.pers["team"]; - - if ( isDefined( self.pers["class"] ) ) - self.class = self.pers["class"]; - - if ( !isDefined( self.pers["team"] ) || IsDefined( self.pers["needteam"] ) ) - { - // Don't set .sessionteam until we've gotten the assigned team from code, - // because it overrides the assigned team. - self.pers["needteam"] = undefined; - self.pers["team"] = "spectator"; - self.team = "spectator"; - self.sessionstate = "dead"; - - self maps\mp\gametypes\_globallogic_ui::updateObjectiveText(); - - [[level.spawnSpectator]](); - - if ( level.rankedMatch ) - { - [[level.autoassign]](); - - //self thread maps\mp\gametypes\_globallogic_spawn::forceSpawn(); - self thread maps\mp\gametypes\_globallogic_spawn::kickIfDontSpawn(); - } - else if ( !level.teamBased ) - { - [[level.autoassign]](); - } - else - { - if( ( isDefined( level.forceAutoAssign ) && level.forceAutoAssign ) || level.allow_teamchange != "1" ) - { - [[level.autoassign]](); - } - else - { - self setclientdvar( "g_scriptMainMenu", game["menu_team"] ); - self openMenu( game["menu_team"] ); - } - } - - if ( self.pers["team"] == "spectator" ) - { - self.sessionteam = "spectator"; - if ( !level.teamBased ) - self.ffateam = "spectator"; - } - - if ( level.teamBased ) - { - // set team and spectate permissions so the map shows waypoint info on connect - self.sessionteam = self.pers["team"]; - if ( !isAlive( self ) ) - self.statusicon = "hud_status_dead"; - self thread maps\mp\gametypes\_spectating::setSpectatePermissions(); - } - } - else if ( self.pers["team"] == "spectator" ) - { - self setclientdvar( "g_scriptMainMenu", game["menu_team"] ); - [[level.spawnSpectator]](); - self.sessionteam = "spectator"; - self.sessionstate = "spectator"; - if ( !level.teamBased ) - self.ffateam = "spectator"; - self thread maps\mp\gametypes\_spectating::setSpectatePermissions(); - } - else - { - self.sessionteam = self.pers["team"]; - self.sessionstate = "dead"; - - if ( !level.teamBased ) - self.ffateam = self.pers["team"]; - - self maps\mp\gametypes\_globallogic_ui::updateObjectiveText(); - - [[level.spawnSpectator]](); - - if ( maps\mp\gametypes\_globallogic_utils::isValidClass( self.pers["class"] ) ) - { - self thread [[level.spawnClient]](); - } - else - { - self maps\mp\gametypes\_globallogic_ui::showMainMenuForTeam(); - } - - self thread maps\mp\gametypes\_spectating::setSpectatePermissions(); - } - - if( maps\mp\gametypes\_customClasses::isUsingCustomGameModeClasses() ) - { - self thread maps\mp\gametypes\_customClasses::sprintSpeedModifier(); - } - - if ( isDefined( self.pers["isBot"] ) ) - return; -} - -Callback_PlayerMigrated() -{ - println( "Player " + self.name + " finished migrating at time " + gettime() ); - - if ( isDefined( self.connected ) && self.connected ) - { - self maps\mp\gametypes\_globallogic_ui::updateObjectiveText(); -// self updateObjectiveText(); -// self updateMainMenu(); - -// if ( level.teambased ) -// self updateScores(); - } - - level.hostMigrationReturnedPlayerCount++; - if ( level.hostMigrationReturnedPlayerCount >= level.players.size * 2 / 3 ) - { - println( "2/3 of players have finished migrating" ); - level notify( "hostmigration_enoughplayers" ); - } -} - -Callback_PlayerDisconnect() -{ - self removePlayerOnDisconnect(); - - if ( !level.gameEnded ) - self maps\mp\gametypes\_globallogic_score::logXPGains(); - - if ( level.splitscreen ) - { - players = level.players; - - if ( players.size <= 1 ) - level thread maps\mp\gametypes\_globallogic::forceEnd(); - - // passing number of players to menus in splitscreen to display leave or end game option - setdvar( "splitscreen_playerNum", players.size ); - } - - if ( isDefined( self.score ) && isDefined( self.pers["team"] ) ) - { - setPlayerTeamRank( self, level.dropTeam, self.score - 5 * self.deaths ); - self logString( "team: score " + self.pers["team"] + ":" + self.score ); - level.dropTeam += 1; - } - - [[level.onPlayerDisconnect]](); - - lpselfnum = self getEntityNumber(); - lpGuid = self getGuid(); - logPrint("Q;" + lpGuid + ";" + lpselfnum + ";" + self.name + "\n"); - bbPrint( "mpquits: name %s client %d", self.name, lpselfnum ); - - self maps\mp\_gamerep::gameRepPlayerDisconnected(); - - for ( entry = 0; entry < level.players.size; entry++ ) - { - if ( level.players[entry] == self ) - { - while ( entry < level.players.size-1 ) - { - level.players[entry] = level.players[entry+1]; - entry++; - } - level.players[entry] = undefined; - break; - } - } - for ( entry = 0; entry < level.players.size; entry++ ) - { - if ( isDefined( level.players[entry].pers["killed_players"][self.name] ) ) - level.players[entry].pers["killed_players"][self.name] = undefined; - - if ( isDefined( level.players[entry].killedPlayersCurrent[self.name] ) ) - level.players[entry].killedPlayersCurrent[self.name] = undefined; - - if ( isDefined( level.players[entry].pers["killed_by"][self.name] ) ) - level.players[entry].pers["killed_by"][self.name] = undefined; - - if ( isDefined( level.players[entry].pers["nemesis_tracking"][self.name] ) ) - level.players[entry].pers["nemesis_tracking"][self.name] = undefined; - - // player that disconnected was our nemesis - if ( level.players[entry].pers["nemesis_name"] == self.name ) - { - level.players[entry] chooseNextBestNemesis(); - } - } - - if ( level.gameEnded ) - self maps\mp\gametypes\_globallogic::removeDisconnectedPlayerFromPlacement(); - - level thread maps\mp\gametypes\_globallogic::updateTeamStatus(); -} - -chooseNextBestNemesis() -{ - nemesisArray = self.pers["nemesis_tracking"]; - nemesisArrayKeys = getArrayKeys( nemesisArray ); - nemesisAmount = 0; - nemesisName = ""; - - if ( nemesisArrayKeys.size > 0 ) - { - for ( i = 0; i < nemesisArrayKeys.size; i++ ) - { - nemesisArrayKey = nemesisArrayKeys[i]; - if ( nemesisArray[nemesisArrayKey] > nemesisAmount ) - { - nemesisName = nemesisArrayKey; - nemesisAmount = nemesisArray[nemesisArrayKey]; - } - - } - } - - self.pers["nemesis_name"] = nemesisName; - - if ( nemesisName != "" ) - { - playerIndex = 0; - for( ; playerIndex < level.players.size; playerIndex++ ) - { - if ( level.players[playerIndex].name == nemesisName ) - { - nemesisPlayer = level.players[playerIndex]; - self.pers["nemesis_rank"] = nemesisPlayer.pers["rank"]; - self.pers["nemesis_rankIcon"] = nemesisPlayer.pers["rankxp"]; - self.pers["nemesis_xp"] = nemesisPlayer.pers["prestige"]; - self.pers["nemesis_xuid"] = nemesisPlayer GetXUID(true); - break; - } - } - } - else - { - self.pers["nemesis_xuid"] = ""; - } -} - -removePlayerOnDisconnect() -{ - for ( entry = 0; entry < level.players.size; entry++ ) - { - if ( level.players[entry] == self ) - { - while ( entry < level.players.size-1 ) - { - level.players[entry] = level.players[entry+1]; - entry++; - } - level.players[entry] = undefined; - break; - } - } -} - -custom_gamemodes_modified_damage( victim, eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ) -{ - // regular public matches should early out - if ( level.onlinegame && !GetDvarInt( #"xblive_privatematch" ) ) - { - return iDamage; - } - - if( maps\mp\gametypes\_customClasses::isUsingCustomGameModeClasses() && isDefined( eAttacker ) ) - { - if( maps\mp\gametypes\_class::isExplosiveDamage( sMeansOfDeath, sWeapon ) ) - { - iDamage *= eAttacker maps\mp\gametypes\_customClasses::getExplosiveDamageModifier(); - } - else - { - iDamage *= eAttacker maps\mp\gametypes\_customClasses::getDamageModifier(); - } - } - if( isdefined( eAttacker) && isDefined( eAttacker.damageModifier ) ) - { - iDamage *= eAttacker.damageModifier; - } - if ( ( sMeansOfDeath == "MOD_PISTOL_BULLET" ) || ( sMeansOfDeath == "MOD_RIFLE_BULLET" ) ) - { - iDamage = int( iDamage * GetDvarFloat( #"scr_game_bulletdamage" ) ); - } - - return iDamage; -} - -custom_gamemodes_vampirism_health( iDamage, eAttacker ) -{ - // regular public matches should early out - if ( level.onlinegame && !GetDvarInt( #"xblive_privatematch" ) ) - { - return 0; - } - - return Int(iDamage * eAttacker maps\mp\gametypes\_customClasses::getHealthVampirismModifier()); -} - -figureOutAttacker( eAttacker ) -{ - if ( isdefined(eAttacker) ) - { - if( isai(eAttacker) && isDefined( eAttacker.script_owner ) ) - { - team = self.team; - - if ( IsAi( self ) && IsDefined( self.aiteam ) ) - { - team = self.aiteam; - } - - if ( eAttacker.script_owner.team != team ) - eAttacker = eAttacker.script_owner; - } - - if( eAttacker.classname == "script_vehicle" && isDefined( eAttacker.owner ) ) - eAttacker = eAttacker.owner; - else if( eAttacker.classname == "auto_turret" && isDefined( eAttacker.owner ) ) - eAttacker = eAttacker.owner; - } - - return eAttacker; -} - -figureOutWeapon( sWeapon, eInflictor ) -{ - // explosive barrel/car detection - if ( sWeapon == "none" && isDefined( eInflictor ) ) - { - if ( isDefined( eInflictor.targetname ) && eInflictor.targetname == "explodable_barrel" ) - { - sWeapon = "explodable_barrel_mp"; - } - else if ( isDefined( eInflictor.destructible_type ) && isSubStr( eInflictor.destructible_type, "vehicle_" ) ) - { - sWeapon = "destructible_car_mp"; - } - } - - return sWeapon; -} - - -handleFlameDamage( eAttacker, eInflictor, iDamage, sWeapon, sMeansOfDeath) -{ - switch( sWeapon ) - { - case "none": - if ( !self hasperk( "specialty_fireproof" ) ) - { - self thread maps\mp\_burnplayer::walkedThroughFlames( eAttacker, eInflictor, sWeapon ); - } - break; - case "m2_flamethrower_mp": - if ( !self hasperk( "specialty_fireproof" ) ) - { - self thread maps\mp\_burnplayer::burnedWithFlameThrower( sWeapon ); - } - break; - case "napalm_mp": - if ( !self hasperk( "specialty_fireproof" ) ) - { - if (isdefined (level.minDamageRequiredForNapalmBurn) && iDamage > level.minDamageRequiredForNapalmBurn) - { - self thread maps\mp\_burnplayer::hitWithNapalmStrike(eAttacker, eInflictor, "MOD_BURNED" ); - } - else - { - self thread maps\mp\_burnplayer::walkedThroughFlames( eAttacker, eInflictor, sWeapon ); - } - } - break; - case "rottweil72_mp": - //if ( !self hasperk( "specialty_fireproof" ) ) - //{ - // self thread maps\mp\_burnplayer::burnedWithDragonsBreath( eAttacker, eInflictor, sWeapon ); - //} - break; - - default: - if( GetSubStr( sWeapon, 0, 3 ) == "ft_" ) - { - if ( !self hasperk( "specialty_fireproof" ) ) - { - self thread maps\mp\_burnplayer::burnedWithFlameThrower( eAttacker, eInflictor, sWeapon ); - } - } - break; - } -} - -Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime ) -{ - // create a class specialty checks; CAC:bulletdamage, CAC:armorvest - iDamage = maps\mp\gametypes\_class::cac_modified_damage( self, eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ); - iDamage = custom_gamemodes_modified_damage( self, eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ); - - iDamage = int(iDamage); - self.iDFlags = iDFlags; - self.iDFlagsTime = getTime(); - - if ( game["state"] == "postgame" ) - return; - - if ( self.sessionteam == "spectator" ) - return; - - if ( isDefined( self.canDoCombat ) && !self.canDoCombat ) - return; - - if ( isDefined( eAttacker ) && isPlayer( eAttacker ) ) - { - if( isDefined( eAttacker.canDoCombat ) && !eAttacker.canDoCombat ) - return; - - if( eAttacker.team == "spectator" || ( isDefined( eAttacker.teamSwitchExploit ) && eAttacker.teamSwitchExploit ) ) - { -/# - println( "teamSwitchExploit prevented damage from " + eAttacker.name + ".\n" ); -#/ - return; - } - } - - if ( isDefined( level.hostMigrationTimer ) ) - return; - - eAttacker = figureOutAttacker( eAttacker ); - - pixbeginevent( "PlayerDamage flags/tweaks" ); - - // Don't do knockback if the damage direction was not specified - if( !isDefined( vDir ) ) - iDFlags |= level.iDFLAGS_NO_KNOCKBACK; - - self maps\mp\gametypes\_bot::bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHitLoc ); - - friendly = false; - // Todo MGordon - Fix this stat collection - //self thread maps\mp\gametypes\_globallogic_score::threadedSetStatLBByName( sWeapon, 1, "hits by", 2 ); - - if ( ((self.health == self.maxhealth)) || !isDefined( self.attackers ) ) - { - self.attackers = []; - self.attackerData = []; - self.attackerDamage = []; - self.firstTimeDamaged = getTime(); - } - // added check to notify chatter to play pain vo - if (self.health != self.maxhealth) - { - self notify( "snd_pain_player" ); - } - - if ( IsDefined( eInflictor) && IsDefined( eInflictor.script_noteworthy) && eInflictor.script_noteworthy == "ragdoll_now" ) - { - sMeansOfDeath = "MOD_FALLING"; - } - - if ( maps\mp\gametypes\_globallogic_utils::isHeadShot( sWeapon, sHitLoc, sMeansOfDeath ) && isPlayer(eAttacker) ) - { - //Turning off damage headshot sounds to avoid confusion from the killing headshot sound. - //if (self.team != eAttacker.team) - //{ - // eAttacker playLocalSound( "prj_bullet_impact_headshot_helmet_nodie_2d" ); - //} - sMeansOfDeath = "MOD_HEAD_SHOT"; - } - - modifiedDamage = [[level.onPlayerDamage]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime ); - if ( isDefined( modifiedDamage ) ) - iDamage = modifiedDamage; - - if ( maps\mp\gametypes\_tweakables::getTweakableValue( "game", "onlyheadshots" ) ) - { - if ( sMeansOfDeath == "MOD_PISTOL_BULLET" || sMeansOfDeath == "MOD_RIFLE_BULLET" ) - return; - else if ( sMeansOfDeath == "MOD_HEAD_SHOT" ) - iDamage = 150; - } - - // Make all vehicle drivers invulnerable to bullets - if ( self maps\mp\_vehicles::player_is_occupant_invulnerable( sMeansOfDeath ) ) - return; - - if (isdefined (eAttacker) && isPlayer(eAttacker) && (self.team != eAttacker.team)) - { - self.lastAttackWeapon = sWeapon; - - if ( eAttacker maps\mp\_vehicles::player_is_driver() ) - { - vehicle = eAttacker GetVehicleOccupied(); - self.lastTankThatAttacked = vehicle; - self thread maps\mp\gametypes\_globallogic_vehicle::clearLastTankAttacker(); - } - - // rottweil72 shoots dragon's breath rounds, so show a little fire on the player who got damaged - if( sMeansOfDeath == "MOD_BURNED" || sWeapon == "rottweil72_mp" ) - { - handleFlameDamage( eAttacker, eInflictor, iDamage, sWeapon, sMeansOfDeath); - } - } - - sWeapon = figureOutWeapon( sWeapon, eInflictor ); - - pixendevent( "END: PlayerDamage flags/tweaks" ); - - if( iDFlags & level.iDFLAGS_PENETRATION && isplayer ( eAttacker ) && eAttacker hasPerk( "specialty_bulletpenetration" ) ) - self thread maps\mp\gametypes\_battlechatter_mp::perkSpecificBattleChatter( "deepimpact", true ); - - // check for completely getting out of the damage - if( !(iDFlags & level.iDFLAGS_NO_PROTECTION) ) - { - if( ( isSubStr( sMeansOfDeath, "MOD_GRENADE" ) || isSubStr( sMeansOfDeath, "MOD_EXPLOSIVE" ) || isSubStr( sMeansOfDeath, "MOD_PROJECTILE" ) || isSubStr( sMeansOfDeath, "MOD_GAS" ) ) && - isDefined( eInflictor ) ) - { - // protect players from spawnkill grenades, tabun and incendiary - if ( ( eInflictor.classname == "grenade" || sweapon == "tabun_gas_mp" ) && (self.lastSpawnTime + 3500) > getTime() && distance( eInflictor.origin, self.lastSpawnPoint.origin ) < 250 ) - { -// pixmarker( "END: Callback_PlayerDamage player" ); - return; - } - - self.explosiveInfo = []; - self.explosiveInfo["damageTime"] = getTime(); - self.explosiveInfo["damageId"] = eInflictor getEntityNumber(); - self.explosiveInfo["returnToSender"] = false; - self.explosiveInfo["bulletPenetrationKill"] = false; - self.explosiveInfo["chainKill"] = false; - self.explosiveInfo["counterKill"] = false; - self.explosiveInfo["chainKill"] = false; - self.explosiveInfo["cookedKill"] = false; - self.explosiveInfo["weapon"] = sWeapon; - self.explosiveInfo["originalowner"] = eInflictor.originalowner; - - isFrag = isSubStr( sWeapon, "frag_" ); - - if ( eAttacker != self ) - { - if ( (isSubStr( sWeapon, "satchel_" ) || isSubStr( sWeapon, "claymore_" ) ) && isDefined( eAttacker ) && isDefined( eInflictor.owner ) ) - { - self.explosiveInfo["returnToSender"] = (eInflictor.owner == self); - self.explosiveInfo["counterKill"] = isDefined( eInflictor.wasDamaged ); - self.explosiveInfo["chainKill"] = isDefined( eInflictor.wasChained ); - self.explosiveInfo["ohnoyoudontKill"] = isDefined( eInflictor.wasJustPlanted ); - self.explosiveInfo["bulletPenetrationKill"] = isDefined( eInflictor.wasDamagedFromBulletPenetration ); - self.explosiveInfo["cookedKill"] = false; - } - if ( ( sWeapon == "sticky_grenade_mp" || sWeapon == "explosive_bolt_mp" ) && isDefined( eInflictor ) && isdefined( eInflictor.stuckToPlayer ) ) - { - self.explosiveInfo["stuckToPlayer"] = eInflictor.stuckToPlayer; - } - if ( isDefined( eAttacker.lastGrenadeSuicideTime ) && eAttacker.lastGrenadeSuicideTime >= gettime() - 50 && isFrag ) - { - self.explosiveInfo["suicideGrenadeKill"] = true; - } - else - { - self.explosiveInfo["suicideGrenadeKill"] = false; - } - } - - if ( isFrag ) - { - self.explosiveInfo["cookedKill"] = isDefined( eInflictor.isCooked ); - self.explosiveInfo["throwbackKill"] = isDefined( eInflictor.threwBack ); - } - - if( isPlayer( eAttacker ) && eAttacker != self ) - { - self maps\mp\gametypes\_globallogic_score::setInflictorStat( eInflictor, eAttacker, sWeapon ); - } - } - - if( isSubStr( sMeansOfDeath, "MOD_IMPACT" ) && isDefined( eAttacker ) && isPlayer( eAttacker ) && eAttacker != self ) - { - if ( sWeapon != "knife_ballistic_mp" ) - { - self maps\mp\gametypes\_globallogic_score::setInflictorStat( eInflictor, eAttacker, sWeapon ); - } - - if ( sWeapon == "hatchet_mp" && isDefined( eInflictor ) ) - { - self.explosiveInfo["projectile_bounced"] = isDefined( eInflictor.bounced ); - } - } - - if ( isPlayer( eAttacker ) ) - eAttacker.pers["participation"]++; - - prevHealthRatio = self.health / self.maxhealth; - - if ( level.teamBased && isPlayer( eAttacker ) && (self != eAttacker) && (self.team == eAttacker.team) ) - { - pixmarker( "BEGIN: PlayerDamage player" ); // profs automatically end when the function returns - if ( level.friendlyfire == 0 ) // no one takes damage - { - if ( sWeapon == "artillery_mp" || sWeapon == "airstrike_mp" || sWeapon == "napalm_mp" || sWeapon == "mortar_mp" ) - self damageShellshockAndRumble( eAttacker, eInflictor, sWeapon, sMeansOfDeath, iDamage ); - return; - } - else if ( level.friendlyfire == 1 ) // the friendly takes damage - { - // Make sure at least one point of damage is done - if ( iDamage < 1 ) - iDamage = 1; - - //check for friendly fire at the begining of the match. apply the damage to the attacker only - if( level.friendlyFireDelay && level.friendlyFireDelayTime >= ( ( ( gettime() - level.startTime ) - level.discardTime ) / 1000 ) ) - { - eAttacker.lastDamageWasFromEnemy = false; - - eAttacker.friendlydamage = true; - eAttacker finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - eAttacker.friendlydamage = undefined; - } - else - { - self.lastDamageWasFromEnemy = false; - - self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - } - } - else if ( level.friendlyfire == 2 && isAlive( eAttacker ) ) // only the attacker takes damage - { - iDamage = int(iDamage * .5); - - // Make sure at least one point of damage is done - if(iDamage < 1) - iDamage = 1; - - eAttacker.lastDamageWasFromEnemy = false; - - eAttacker.friendlydamage = true; - eAttacker finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - eAttacker.friendlydamage = undefined; - } - else if ( level.friendlyfire == 3 && isAlive( eAttacker ) ) // both friendly and attacker take damage - { - iDamage = int(iDamage * .5); - - // Make sure at least one point of damage is done - if ( iDamage < 1 ) - iDamage = 1; - - self.lastDamageWasFromEnemy = false; - eAttacker.lastDamageWasFromEnemy = false; - - self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - eAttacker.friendlydamage = true; - eAttacker finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - eAttacker.friendlydamage = undefined; - } - - friendly = true; - pixmarker( "END: PlayerDamage player" ); - } - else - { - // Make sure at least one point of damage is done - if(iDamage < 1) - iDamage = 1; - - if ( isDefined( eAttacker ) && isPlayer( eAttacker ) && allowedAssistWeapon( sWeapon ) ) - { - trackAttackerDamage( eAttacker, iDamage, sMeansOfDeath, sWeapon ); - } - - giveInflictorOwnerAssist( eAttacker, eInflictor, iDamage, sMeansOfDeath, sWeapon ); - - if ( isdefined( eAttacker ) ) - level.lastLegitimateAttacker = eAttacker; - - if ( isdefined( eAttacker ) && isPlayer( eAttacker ) && isDefined( sWeapon ) && !issubstr( sMeansOfDeath, "MOD_MELEE" ) ) - eAttacker thread maps\mp\gametypes\_weapons::checkHit( sWeapon ); - - if ( issubstr( sMeansOfDeath, "MOD_GRENADE" ) && isDefined( eInflictor.isCooked ) ) - self.wasCooked = getTime(); - else - self.wasCooked = undefined; - - self.lastDamageWasFromEnemy = (isDefined( eAttacker ) && (eAttacker != self)); - - if ( self.lastDamageWasFromEnemy ) - eAttacker.damagedPlayers[ self.clientId ] = getTime(); - - self finishPlayerDamageWrapper(eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime); - - self thread maps\mp\gametypes\_missions::playerDamaged(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc ); - - if ( isdefined ( eAttacker ) ) - { - // if vampirism is on, give the attacker health as a % of damage done to the player - eAttacker.health += custom_gamemodes_vampirism_health( iDamage, eAttacker ); - } - } - - if ( isdefined(eAttacker) && isplayer( eAttacker ) && eAttacker != self ) - { - if ( doDamageFeedback( sWeapon, eInflictor ) ) - { - hasBodyArmor = false; - - if ( iDamage > 0 ) - { - // if the attacker has tactical mask pro then we show the special yellow indicator - if( IsPlayer( eAttacker ) && eAttacker HasPerk( "specialty_shades" ) && eAttacker HasPerk( "specialty_stunprotection" ) && eAttacker HasPerk( "specialty_gas_mask" ) ) - { - // show the yellow indicator if this is a flash or concussion grenade and they don't have tactical mask on - if( sMeansOfDeath == "MOD_GRENADE_SPLASH" && - ( sWeapon == "flash_grenade_mp" || sWeapon == "concussion_grenade_mp" ) && - ( !self HasPerk( "specialty_shades" ) || !self HasPerk( "specialty_stunprotection" ) ) ) - { - eAttacker thread maps\mp\gametypes\_damagefeedback::updateSpecialDamageFeedback( self ); - } - } - - eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback( hasBodyArmor, sMeansOfDeath ); - } - } - } - - self.hasDoneCombat = true; - } - - if(self.sessionstate != "dead") - self maps\mp\gametypes\_gametype_variants::onPlayerTakeDamage( eAttacker, eInflictor, sWeapon, iDamage, sMeansOfDeath ); - - if ( isdefined( eAttacker ) && eAttacker != self && !friendly ) - level.useStartSpawns = false; - - pixbeginevent( "PlayerDamage log" ); - - // Do debug print if it's enabled - if(GetDvarInt( #"g_debugDamage")) - println("client:" + self getEntityNumber() + " health:" + self.health + " attacker:" + eAttacker.clientid + " inflictor is player:" + isPlayer(eInflictor) + " damage:" + iDamage + " hitLoc:" + sHitLoc); - - if(self.sessionstate != "dead") - { - lpselfnum = self getEntityNumber(); - lpselfname = self.name; - lpselfteam = self.team; - lpselfGuid = self getGuid(); - lpattackerteam = ""; - lpattackerorigin = ( 0, 0, 0 ); - - if(isPlayer(eAttacker)) - { - lpattacknum = eAttacker getEntityNumber(); - lpattackGuid = eAttacker getGuid(); - lpattackname = eAttacker.name; - lpattackerteam = eAttacker.team; - lpattackerorigin = eAttacker.origin; - bbPrint( "mpattacks: gametime %d attackerspawnid %d attackerweapon %s attackerx %f attackery %f attackerz %f victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 0", - gettime(), getplayerspawnid( eAttacker ), sWeapon, lpattackerorigin, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc ); - } - else - { - lpattacknum = -1; - lpattackGuid = ""; - lpattackname = ""; - lpattackerteam = "world"; - bbPrint( "mpattacks: gametime %d attackerweapon %s victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 0", - gettime(), sWeapon, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc ); - } - logPrint("D;" + lpselfGuid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackGuid + ";" + lpattacknum + ";" + lpattackerteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n"); - } - -/# - if ( GetDvarInt( #"scr_hitloc_debug") ) - { - if ( !isdefined( eAttacker.hitlocInited ) ) - { - for ( i = 0; i < 6; i++ ) - { - eAttacker setClientDvar( "ui_hitloc_" + i, "" ); - } - eAttacker.hitlocInited = true; - } - - if ( isPlayer( eAttacker ) && !level.splitscreen ) - { - colors = []; - colors[0] = 2; - colors[1] = 3; - colors[2] = 5; - colors[3] = 7; - - elemcount = 6; - if ( !isdefined( eAttacker.damageInfo ) ) - { - eAttacker.damageInfo = []; - for ( i = 0; i < elemcount; i++ ) - { - eAttacker.damageInfo[i] = spawnstruct(); - eAttacker.damageInfo[i].damage = 0; - eAttacker.damageInfo[i].hitloc = ""; - eAttacker.damageInfo[i].bp = false; - eAttacker.damageInfo[i].jugg = false; - eAttacker.damageInfo[i].colorIndex = 0; - } - eAttacker.damageInfoColorIndex = 0; - eAttacker.damageInfoVictim = undefined; - } - - for ( i = elemcount-1; i > 0; i-- ) - { - eAttacker.damageInfo[i].damage = eAttacker.damageInfo[i - 1].damage; - eAttacker.damageInfo[i].hitloc = eAttacker.damageInfo[i - 1].hitloc; - eAttacker.damageInfo[i].bp = eAttacker.damageInfo[i - 1].bp; - eAttacker.damageInfo[i].jugg = eAttacker.damageInfo[i - 1].jugg; - eAttacker.damageInfo[i].colorIndex = eAttacker.damageInfo[i - 1].colorIndex; - } - eAttacker.damageInfo[0].damage = iDamage; - eAttacker.damageInfo[0].hitloc = sHitLoc; - eAttacker.damageInfo[0].bp = (iDFlags & level.iDFLAGS_PENETRATION); - eAttacker.damageInfo[0].jugg = false; - if ( isdefined( eAttacker.damageInfoVictim ) && eAttacker.damageInfoVictim != self ) - { - eAttacker.damageInfoColorIndex++; - if ( eAttacker.damageInfoColorIndex == colors.size ) - eAttacker.damageInfoColorIndex = 0; - } - eAttacker.damageInfoVictim = self; - eAttacker.damageInfo[0].colorIndex = eAttacker.damageInfoColorIndex; - - for ( i = 0; i < elemcount; i++ ) - { - color = "^" + colors[ eAttacker.damageInfo[i].colorIndex ]; - if ( eAttacker.damageInfo[i].hitloc != "" ) - { - val = color + eAttacker.damageInfo[i].hitloc; - if ( eAttacker.damageInfo[i].bp ) - val += " (BP)"; - if ( eAttacker.damageInfo[i].jugg ) - val += " (Jugg)"; - eAttacker setClientDvar( "ui_hitloc_" + i, val ); - } - eAttacker setClientDvar( "ui_hitloc_damage_" + i, color + eAttacker.damageInfo[i].damage ); - } - } - } -#/ - pixendevent( "END: PlayerDamage log" ); -} - -resetAttackerList() -{ - self endon( "disconnect" ); - self endon( "death" ); - level endon( "game_ended" ); - - self.attackers = []; - self.attackerData = []; - self.attackerDamage = []; -} - -doDamageFeedback( sWeapon, eInflictor ) -{ - if ( !IsDefined( sWeapon ) ) - return false; - - switch(sWeapon) - { - case "artillery_mp": - case "airstrike_mp": - case "napalm_mp": - case "mortar_mp": - case "tow_turret_mp": - case "auto_gun_turret_mp": - case "cobra_20mm_comlink_mp": - return false; - } - - if ( IsDefined( eInflictor ) ) - { - if ( IsAI(eInflictor) ) - { - return false; - } - } - - return true; -} - -finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime ) -{ - pixbeginevent("finishPlayerDamageWrapper"); - surface = "flesh"; - - if ( self.cac_body_type == "body_armor_mp" ) - { - surface = "metal"; - } - - self finishPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, surface ); - - if ( GetDvar( #"scr_csmode" ) != "" ) - self shellShock( "damage_mp", 0.2 ); - - self damageShellshockAndRumble( eAttacker, eInflictor, sWeapon, sMeansOfDeath, iDamage ); - pixendevent(); -} - -allowedAssistWeapon( weapon ) -{ - if ( !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( weapon ) ) - return true; - - if (maps\mp\gametypes\_hardpoints::isKillstreakWeaponAssistAllowed( weapon ) ) - return true; - - return false; -} - -GiveCustomGameModePlayerKilledScore( attacker, sMeansOfDeath ) -{ - if( !maps\mp\gametypes\_customClasses::isCustomGame() ) - return; - - if( level.gameType != "tdm" && level.gameType != "dm" ) - return; - - if( isDefined( attacker ) && ( self == attacker || ( attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) ) ) - { - maps\mp\gametypes\_globallogic_score::givePlayerScore( "suicide", self, self ); - maps\mp\gametypes\_globallogic_score::giveTeamScore( "suicide", self.team, self, self ); - return; // no other bonuses if you're suicidin' - } - - if( sMeansOfDeath == "MOD_HEAD_SHOT" ) - { - maps\mp\gametypes\_globallogic_score::givePlayerScore( "headshot", attacker, self ); - maps\mp\gametypes\_globallogic_score::giveTeamScore( "headshot", attacker.team, attacker, self ); - } - if( isDefined( level.placement ) ) - { - maps\mp\gametypes\_globallogic::updatePlacement(); - if( attacker maps\mp\gametypes\_customClasses::shouldGiveLeaderBonus() ) - { - leaderbonus = getDvarInt( "scr_" + level.gameType + "_bonus_leader" ); - if( isDefined( leaderBonus ) ) - { - maps\mp\gametypes\_globallogic_score::_setPlayerScore( attacker, attacker.pers["score"] + leaderBonus ); - maps\mp\gametypes\_globallogic_score::onTeamScore( leaderBonus, attacker.team, attacker, self ); - maps\mp\gametypes\_globallogic_score::updateTeamScores( attacker.team ); - } - } - } - maps\mp\gametypes\_globallogic_score::givePlayerScore( "death", self, self ); - maps\mp\gametypes\_globallogic_score::giveTeamScore( "death", self.team, self, self ); - -} - -Callback_PlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration) -{ - self endon( "spawned" ); - self notify( "killed_player" ); - - if ( self.sessionteam == "spectator" ) - return; - - if ( game["state"] == "postgame" ) - return; - - self needsRevive( false ); - - if ( isdefined( self.burning ) && self.burning == true ) - { - self setburn( 0 ); - } - - self.suicide = false; - - if ( isDefined( level.takeLivesOnDeath ) && ( level.takeLivesOnDeath == true ) ) - { - if ( self.pers["lives"] ) - { - self.pers["lives"]--; - if ( self.pers["lives"] == 0 ) - { - level notify( "player_eliminated" ); - self notify( "player_eliminated" ); - } - - } - } - - sWeapon = updateWeapon( eInflictor, sWeapon ); - - pixbeginevent( "PlayerKilled pre constants" ); - - wasInLastStand = false; - deathTimeOffset = 0; - lastWeaponBeforeDroppingIntoLastStand = undefined; - attackerStance = undefined; - self.lastStandThisLife = undefined; - self.vAttackerOrigin = undefined; - - if ( isdefined( self.useLastStandParams ) ) - { - self.useLastStandParams = undefined; - - assert( isdefined( self.lastStandParams ) ); - if ( !level.teamBased || ( !isDefined( attacker ) || !isplayer( attacker ) || attacker.team != self.team || attacker == self ) ) - { - eInflictor = self.lastStandParams.eInflictor; - attacker = self.lastStandParams.attacker; - attackerStance = self.lastStandParams.attackerStance; - iDamage = self.lastStandParams.iDamage; - sMeansOfDeath = self.lastStandParams.sMeansOfDeath; - sWeapon = self.lastStandParams.sWeapon; - vDir = self.lastStandParams.vDir; - sHitLoc = self.lastStandParams.sHitLoc; - self.vAttackerOrigin = self.lastStandParams.vAttackerOrigin; - deathTimeOffset = (gettime() - self.lastStandParams.lastStandStartTime) / 1000; - - self thread maps\mp\gametypes\_battlechatter_mp::perkSpecificBattleChatter( "secondchance" ); - - if ( isDefined( self.previousPrimary ) ) - { - wasInLastStand = true; - lastWeaponBeforeDroppingIntoLastStand = self.previousPrimary; - } - } - self.lastStandParams = undefined; - } - - bestPlayer = undefined; - bestPlayerMeansOfDeath = undefined; - obituaryMeansOfDeath = undefined; - bestPlayerWeapon = undefined; - obituaryWeapon = undefined; - - if ( (!isDefined( attacker ) || attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" || ( isdefined( attacker.isMagicBullet ) && attacker.isMagicBullet == true ) || attacker == self ) && isDefined( self.attackers ) ) - { - if ( !isDefined(bestPlayer) ) - { - for ( i = 0; i < self.attackers.size; i++ ) - { - player = self.attackers[i]; - if ( !isDefined( player ) ) - continue; - - if (!isDefined( self.attackerDamage[ player.clientId ] ) || ! isDefined( self.attackerDamage[ player.clientId ].damage ) ) - continue; - - if ( player == self || (level.teamBased && player.team == self.team ) ) - continue; - - if ( self.attackerDamage[ player.clientId ].lasttimedamaged + 2500 < getTime() ) - continue; - - if ( !allowedAssistWeapon( self.attackerDamage[ player.clientId ].weapon ) ) - continue; - - if ( self.attackerDamage[ player.clientId ].damage > 1 && ! isDefined( bestPlayer ) ) - { - bestPlayer = player; - bestPlayerMeansOfDeath = self.attackerDamage[ player.clientId ].meansOfDeath; - bestPlayerWeapon = self.attackerDamage[ player.clientId ].weapon; - } - else if ( isDefined( bestPlayer ) && self.attackerDamage[ player.clientId ].damage > self.attackerDamage[ bestPlayer.clientId ].damage ) - { - bestPlayer = player; - bestPlayerMeansOfDeath = self.attackerDamage[ player.clientId ].meansOfDeath; - bestPlayerWeapon = self.attackerDamage[ player.clientId ].weapon; - } - } - } - if ( isdefined ( bestPlayer ) ) - bestPlayer maps\mp\_medals::assistedSuicide(bestPlayerWeapon); - } - - if ( isdefined ( bestPlayer ) ) - { - attacker = bestPlayer; - obituaryMeansOfDeath = bestPlayerMeansOfDeath; - obituaryWeapon = bestPlayerWeapon; - } - - if ( isplayer( attacker ) ) - attacker.damagedPlayers[self.clientid] = undefined; - - if( maps\mp\gametypes\_globallogic_utils::isHeadShot( sWeapon, sHitLoc, sMeansOfDeath ) && isPlayer( attacker ) ) - { - attacker playLocalSound( "prj_bullet_impact_headshot_helmet_nodie_2d" ); - //attacker playLocalSound( "prj_bullet_impact_headshot_2d" ); - - sMeansOfDeath = "MOD_HEAD_SHOT"; - } - - self.deathTime = getTime(); - - attacker = updateAttacker( attacker ); - eInflictor = updateInflictor( eInflictor ); - - sMeansOfDeath = updateMeansOfDeath( sWeapon, sMeansOfDeath ); - - self thread updateGlobalBotKilledCounter(); - if ( maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - level.globalKillstreaksDeathsFrom++; - } - - // Don't increment weapon stats for team kills or deaths - if ( isPlayer( attacker ) && attacker != self && ( !level.teamBased || ( level.teamBased && self.team != attacker.team ) ) ) - { - self thread maps\mp\gametypes\_globallogic_score::trackLeaderBoardDeathStats( sWeapon, sMeansOfDeath ); - - if ( wasInLastStand && isDefined( lastWeaponBeforeDroppingIntoLastStand ) ) - weaponName = lastWeaponBeforeDroppingIntoLastStand; - else - weaponName = self.lastdroppableweapon; - - if ( isDefined( weaponName ) && ( isSubStr( weaponName, "gl_" ) || isSubStr( weaponName, "mk_" ) || isSubStr( weaponName, "ft_" ) ) ) - weaponName = self.currentWeapon; - - if ( isDefined( weaponName ) ) - self thread maps\mp\gametypes\_globallogic_score::trackLeaderBoardDeathsDuringUseStats( weaponName ); - - attacker thread maps\mp\gametypes\_globallogic_score::trackAttackerLeaderBoardDeathStats( sWeapon, sMeansOfDeath ); - } - - if ( !isdefined( obituaryMeansOfDeath ) ) - obituaryMeansOfDeath = sMeansOfDeath; - if ( !isdefined( obituaryWeapon ) ) - obituaryWeapon = sWeapon; - - // send out an obituary message to all clients about the kill - if( level.teamBased && isDefined( attacker.pers ) && self.team == attacker.team && obituaryMeansOfDeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - obituary(self, self, obituaryWeapon, obituaryMeansOfDeath); - maps\mp\_demo::bookmark( "kill", gettime(), self, self ); - } - else - { - obituary(self, attacker, obituaryWeapon, obituaryMeansOfDeath); - maps\mp\_demo::bookmark( "kill", gettime(), self, attacker ); - } - -// self maps\mp\gametypes\_weapons::updateWeaponUsageStats(); - if ( !level.inGracePeriod ) - { - self maps\mp\gametypes\_weapons::dropScavengerForDeath( attacker ); - self maps\mp\gametypes\_weapons::dropWeaponForDeath( attacker ); - self maps\mp\gametypes\_weapons::dropOffhand(); - } - - maps\mp\gametypes\_spawnlogic::deathOccured(self, attacker); - - self.sessionstate = "dead"; - self.statusicon = "hud_status_dead"; - - self.pers["weapon"] = undefined; - - self.killedPlayersCurrent = []; - - self.deathCount++; - -/# - println( "players("+self.clientId+") death count ++: " + self.deathCount ); -#/ - - if( !isDefined( self.switching_teams ) ) - { - // if team killed we reset kill streak, but dont count death and death streak - if ( isPlayer( attacker ) && level.teamBased && ( attacker != self ) && ( self.team == attacker.team ) ) - { - - self.pers["cur_kill_streak"] = 0; - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaksEarnedThisKillstreak"] = 0; - } - else - { - self maps\mp\gametypes\_globallogic_score::incPersStat( "deaths", 1, true, true ); - self.deaths = self maps\mp\gametypes\_globallogic_score::getPersStat( "deaths" ); - self maps\mp\gametypes\_globallogic_score::updatePersRatio( "kdratio", "kills", "deaths" ); - - if( self.pers["cur_kill_streak"] > self.pers["best_kill_streak"] ) - self.pers["best_kill_streak"] = self.pers["cur_kill_streak"]; - - // need to keep the current killstreak to see if this was a buzzkill later - self.pers["kill_streak_before_death"] = self.pers["cur_kill_streak"]; - - self.pers["cur_kill_streak"] = 0; - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaksEarnedThisKillstreak"] = 0; - - self.cur_death_streak++; - - if ( self.cur_death_streak > self.death_streak ) - { - self setDStat( "HighestStats", "death_streak", self.cur_death_streak ); - self.death_streak = self.cur_death_streak; - } - - if( self.cur_death_streak >= GetDvarInt( #"perk_deathStreakCountRequired" ) ) - { - self enabledeathstreak(); - } - } - } - else - { - self.pers["totalKillstreakCount"] = 0; - self.pers["killstreaksEarnedThisKillstreak"] = 0; - } - - lpselfnum = self getEntityNumber(); - lpselfname = self.name; - lpattackGuid = ""; - lpattackname = ""; - lpselfteam = self.team; - lpselfguid = self getGuid(); - lpattackteam = ""; - lpattackorigin = ( 0, 0, 0 ); - - lpattacknum = -1; - - //check if we should award assist points - awardAssists = false; - - pixendevent(); // "PlayerKilled pre constants" ); - - self GiveCustomGameModePlayerKilledScore( attacker, sMeansOfDeath ); - - if( isPlayer( attacker ) ) - { - lpattackGuid = attacker getGuid(); - lpattackname = attacker.name; - lpattackteam = attacker.team; - lpattackorigin = attacker.origin; - - if ( attacker == self ) // killed himself - { - doKillcam = false; - - // switching teams - if ( isDefined( self.switching_teams ) ) - { - if ( !level.teamBased && ((self.leaving_team == "allies" && self.joining_team == "axis") || (self.leaving_team == "axis" && self.joining_team == "allies")) ) - { - playerCounts = self maps\mp\gametypes\_teams::CountPlayers(); - playerCounts[self.leaving_team]--; - playerCounts[self.joining_team]++; - - if( (playerCounts[self.joining_team] - playerCounts[self.leaving_team]) > 1 ) - { - self thread [[level.onXPEvent]]( "suicide" ); - self maps\mp\gametypes\_globallogic_score::incPersStat( "suicides", 1 ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getPersStat( "suicides" ); - } - } - } - else - { - self thread [[level.onXPEvent]]( "suicide" ); - self maps\mp\gametypes\_globallogic_score::incPersStat( "suicides", 1 ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getPersStat( "suicides" ); - - if ( sMeansOfDeath == "MOD_SUICIDE" && sHitLoc == "none" && self.throwingGrenade ) - { - self.lastGrenadeSuicideTime = gettime(); - } - - //Check for player death related battlechatter - thread maps\mp\gametypes\_battlechatter_mp::onPlayerSuicideOrTeamKill( self, "suicide" ); //Play suicide battlechatter - - //check if assist points should be awarded - awardAssists = true; - self.suicide = true; - } - - if( isDefined( self.friendlydamage ) ) - { - self iPrintLn(&"MP_FRIENDLY_FIRE_WILL_NOT"); - if ( maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillpointloss" ) ) - { - scoreSub = self [[level.getTeamKillScore]]( eInflictor, attacker, sMeansOfDeath, sWeapon); - maps\mp\gametypes\_globallogic_score::_setPlayerScore( attacker,maps\mp\gametypes\_globallogic_score::_getPlayerScore( attacker ) - scoreSub ); - } - } - } - else - { - pixbeginevent( "PlayerKilled attacker" ); - - lpattacknum = attacker getEntityNumber(); - - doKillcam = true; - - self thread maps\mp\gametypes\_gametype_variants::playerKilled( attacker ); - - if ( level.teamBased && self.team == attacker.team && sMeansOfDeath == "MOD_GRENADE" && level.friendlyfire == 0 ) - { - } - else if ( level.teamBased && self.team == attacker.team ) // killed by a friendly - { - attacker thread [[level.onXPEvent]]( "teamkill" ); - - if ( !IgnoreTeamKills( sWeapon, sMeansOfDeath ) ) - { - teamkill_penalty = self [[level.getTeamKillPenalty]]( eInflictor, attacker, sMeansOfDeath, sWeapon); - - attacker maps\mp\gametypes\_globallogic_score::incPersStat( "teamkills_nostats", teamkill_penalty, false ); - attacker maps\mp\gametypes\_globallogic_score::incPersStat( "teamkills", 1 ); //save team kills to player stats - attacker.teamkillsThisRound++; - - if ( maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillpointloss" ) ) - { - scoreSub = self [[level.getTeamKillScore]]( eInflictor, attacker, sMeansOfDeath, sWeapon); - maps\mp\gametypes\_globallogic_score::_setPlayerScore( attacker,maps\mp\gametypes\_globallogic_score::_getPlayerScore( attacker ) - scoreSub ); - } - - if ( maps\mp\gametypes\_globallogic_utils::getTimePassed() < 5000 ) - teamKillDelay = 1; - else if ( attacker.pers["teamkills_nostats"] > 1 && maps\mp\gametypes\_globallogic_utils::getTimePassed() < (8000 + (attacker.pers["teamkills_nostats"] * 1000)) ) - teamKillDelay = 1; - else - teamKillDelay = attacker TeamKillDelay(); - - if ( teamKillDelay > 0 ) - { - attacker.teamKillPunish = true; - attacker suicide(); - - if ( attacker ShouldTeamKillKick(teamKillDelay) ) - { - attacker TeamKillKick(); - } - - attacker thread reduceTeamKillsOverTime(); - } - - //Play teamkill battlechatter - if( isPlayer( attacker ) ) - thread maps\mp\gametypes\_battlechatter_mp::onPlayerSuicideOrTeamKill( attacker, "teamkill" ); - } - } - else - { - maps\mp\gametypes\_globallogic_score::incTotalKills(attacker.team); - - attacker thread maps\mp\gametypes\_globallogic_score::giveKillStats( sMeansOfDeath, sWeapon, self ); - - self maps\mp\gametypes\_copycat::copycat_clone_loadout( attacker ); - - if ( isAlive( attacker ) ) - { - pixbeginevent("killstreak"); - - if ( !isDefined( eInflictor ) || !isDefined( eInflictor.requiredDeathCount ) || attacker.deathCount == eInflictor.requiredDeathCount ) - { - shouldGiveKillstreak = maps\mp\gametypes\_hardpoints::shouldGiveKillstreak( sWeapon ); - attacker thread maps\mp\_properks::earnedAKill(); - - if ( shouldGiveKillstreak ) - { - attacker maps\mp\gametypes\_hardpoints::addToKillstreakCount(sWeapon); - } - - //Kills gotten through killstreak weapons should not the players killstreak - if ( isDefined( level.killstreaks ) && shouldGiveKillstreak ) - { - attacker.pers["cur_kill_streak"]++; - attacker thread maps\mp\_properks::checkKillCount(); - attacker thread maps\mp\gametypes\_hardpoints::giveKillstreakForStreak(); - } - } - - if( isPlayer( attacker ) ) - self thread maps\mp\gametypes\_battlechatter_mp::onPlayerKillstreak( attacker ); - - pixendevent(); // "killstreak" - } - - - if ( attacker.pers["cur_kill_streak"] > attacker.kill_streak ) - { - attacker setDStat( "HighestStats", "kill_streak", attacker.pers["totalKillstreakCount"] ); - attacker.kill_streak = attacker.pers["cur_kill_streak"]; - } - - - if ( attacker.pers["cur_kill_streak"] > attacker.gametype_kill_streak ) - { - attacker maps\mp\gametypes\_persistence::statSetWithGametype( "kill_streak", attacker.pers["cur_kill_streak"] ); - attacker.gametype_kill_streak = attacker.pers["cur_kill_streak"]; - } - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "kill", attacker, self ); - - attacker thread maps\mp\gametypes\_globallogic_score::trackAttackerKill( self.name, self.pers["rank"], self.pers["rankxp"], self.pers["prestige"], self getXuid(true) ); - - attackerName = attacker.name; - self thread maps\mp\gametypes\_globallogic_score::trackAttackeeDeath( attackerName, attacker.pers["rank"], attacker.pers["rankxp"], attacker.pers["prestige"], attacker getXuid(true) ); - self thread maps\mp\_medals::setLastKilledBy( attacker ); - - attacker thread maps\mp\gametypes\_globallogic_score::incKillstreakTracker( sWeapon ); - - // to prevent spectator gain score for team-spectator after throwing a granade and killing someone before he switched - if ( level.teamBased && attacker.team != "spectator") - { - // dog score for team - if( isai(Attacker) ) - maps\mp\gametypes\_globallogic_score::giveTeamScore( "kill", attacker.aiteam, attacker, self ); - else - maps\mp\gametypes\_globallogic_score::giveTeamScore( "kill", attacker.team, attacker, self ); - } - - scoreSub = maps\mp\gametypes\_tweakables::getTweakableValue( "game", "deathpointloss" ); - if ( scoreSub != 0 ) - { - maps\mp\gametypes\_globallogic_score::_setPlayerScore( self, maps\mp\gametypes\_globallogic_score::_getPlayerScore( self ) - scoreSub ); - } - - level thread playKillBattleChatter( attacker, sWeapon ); - - if ( level.teamBased ) - { - //check if assist points should be awarded - awardAssists = true; - } - } - - pixendevent( "PlayerKilled attacker" ); - } - } - else if ( isDefined( attacker ) && ( attacker.classname == "trigger_hurt" || attacker.classname == "worldspawn" ) ) - { - doKillcam = false; - - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - - self thread [[level.onXPEvent]]( "suicide" ); - self maps\mp\gametypes\_globallogic_score::incPersStat( "suicides", 1 ); - self.suicides = self maps\mp\gametypes\_globallogic_score::getPersStat( "suicides" ); - - //Check for player death related battlechatter - thread maps\mp\gametypes\_battlechatter_mp::onPlayerSuicideOrTeamKill( self, "suicide" ); //Play suicide battlechatter - - //check if assist points should be awarded - awardAssists = true; - - } - else - { - doKillcam = false; - - lpattacknum = -1; - lpattackguid = ""; - lpattackname = ""; - lpattackteam = "world"; - - // we may have a killcam on an world entity like the rocket in cosmodrome - if ( IsDefined( eInflictor ) && IsDefined( eInflictor.killCamEnt ) ) - { - doKillcam = true; - lpattacknum = self getEntityNumber(); - } - - // even if the attacker isn't a player, it might be on a team - if ( isDefined( attacker ) && isDefined( attacker.team ) && (attacker.team == "axis" || attacker.team == "allies") ) - { - if ( attacker.team != self.team ) - { - if ( level.teamBased ) - maps\mp\gametypes\_globallogic_score::giveTeamScore( "kill", attacker.team, attacker, self ); - } - } - //check if assist points should be awarded - awardAssists = true; - - } - - //award assist points if needed - if( awardAssists ) - { - pixbeginevent( "PlayerKilled assists" ); - - if ( isdefined( self.attackers ) ) - { - for ( j = 0; j < self.attackers.size; j++ ) - { - player = self.attackers[j]; - - if ( !isDefined( player ) ) - continue; - - if ( player == attacker ) - continue; - - damage_done = self.attackerDamage[player.clientId].damage; - player thread maps\mp\gametypes\_globallogic_score::processAssist( self, damage_done); - } - } - - pixendevent( "END: PlayerKilled assists" ); - } - - pixbeginevent( "PlayerKilled post constants" ); - - self.lastAttacker = attacker; - self.lastDeathPos = self.origin; - - if ( isDefined( attacker ) && isPlayer( attacker ) && attacker != self && (!level.teambased || attacker.team != self.team) ) - { - self thread maps\mp\gametypes\_missions::playerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, sHitLoc, attackerStance ); - } - else - { - - self notify("playerKilledChallengesProcessed"); - } - - if ( isdefined ( self.attackers )) - self.attackers = []; - if( isPlayer( attacker ) ) - { - if( maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - killstreak = maps\mp\gametypes\_hardpoints::getKillstreakForWeapon( sWeapon ); - bbPrint( "mpattacks: gametime %d attackerspawnid %d attackerweapon %s attackerx %f attackery %f attackerz %f victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 1 killstreak %s", - gettime(), getplayerspawnid( attacker ), sWeapon, lpattackorigin, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc, killstreak ); - } - else - { - bbPrint( "mpattacks: gametime %d attackerspawnid %d attackerweapon %s attackerx %f attackery %f attackerz %f victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 1", - gettime(), getplayerspawnid( attacker ), sWeapon, lpattackorigin, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc ); - } - } - else - { - bbPrint( "mpattacks: gametime %d attackerweapon %s victimspawnid %d victimx %f victimy %f victimz %f damage %d damagetype %s damagelocation %s death 1", - gettime(), sWeapon, getplayerspawnid( self ), self.origin, iDamage, sMeansOfDeath, sHitLoc ); - } - - logPrint( "K;" + lpselfguid + ";" + lpselfnum + ";" + lpselfteam + ";" + lpselfname + ";" + lpattackguid + ";" + lpattacknum + ";" + lpattackteam + ";" + lpattackname + ";" + sWeapon + ";" + iDamage + ";" + sMeansOfDeath + ";" + sHitLoc + "\n" ); - attackerString = "none"; - if ( isPlayer( attacker ) ) // attacker can be the worldspawn if it's not a player - attackerString = attacker getXuid() + "(" + lpattackname + ")"; - self logstring( "d " + sMeansOfDeath + "(" + sWeapon + ") a:" + attackerString + " d:" + iDamage + " l:" + sHitLoc + " @ " + int( self.origin[0] ) + " " + int( self.origin[1] ) + " " + int( self.origin[2] ) ); - - level thread maps\mp\gametypes\_globallogic::updateTeamStatus(); - - killcamentity = self getKillcamEntity( attacker, eInflictor, sWeapon ); - killcamentityindex = -1; - killcamentitystarttime = 0; - - if ( isDefined( killcamentity ) ) - { - killcamentityindex = killcamentity getEntityNumber(); // must do this before any waiting lest the entity be deleted - if ( isdefined( killcamentity.startTime ) ) - { - killcamentitystarttime = killcamentity.startTime; - } - else - { - killcamentitystarttime = killcamentity.birthtime; - } - if ( !isdefined( killcamentitystarttime ) ) - killcamentitystarttime = 0; - } - - if ( self IsRemoteControlling() ) - doKillcam = false; - - self maps\mp\gametypes\_weapons::detachCarryObjectModel(); - - died_in_vehicle= false; - if (IsDefined(self.diedOnVehicle)) - { - died_in_vehicle = self.diedOnVehicle; // only works when vehicle blows up - } - pixendevent( "END: PlayerKilled post constants" ); - - pixbeginevent( "PlayerKilled body and gibbing" ); - if ( !died_in_vehicle ) - { - vAttackerOrigin = undefined; - if ( isdefined( attacker ) ) - vAttackerOrigin = attacker.origin; - - ragdoll_now = false; - if( IsDefined(self.usingvehicle) && self.usingvehicle && IsDefined(self.vehicleposition) && self.vehicleposition == 1 ) - ragdoll_now = true; - - if ( sMeansOfDeath == "MOD_FALLING" ) - { - if ( IsDefined( eInflictor ) && IsDefined( eInflictor.script_noteworthy ) && eInflictor.script_noteworthy == "ragdoll_now" ) - { - ragdoll_now = true; - self thread maps\mp\_challenges::fellOffTheMap(); - } - } - - body = self clonePlayer( deathAnimDuration ); - self createDeadBody( iDamage, sMeansOfDeath, sWeapon, sHitLoc, vDir, vAttackerOrigin, deathAnimDuration, eInflictor, ragdoll_now, body ); - } - pixendevent( "END: PlayerKilled body and gibbing" ); - - self.switching_teams = undefined; - self.joining_team = undefined; - self.leaving_team = undefined; - - self thread [[level.onPlayerKilled]](eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration); - - for ( iCB = 0; iCB < level.onPlayerKilledExtraUnthreadedCBs.size; iCB++ ) - { - self [[ level.onPlayerKilledExtraUnthreadedCBs[ iCB ] ]]( - eInflictor, - attacker, - iDamage, - sMeansOfDeath, - sWeapon, - vDir, - sHitLoc, - psOffsetTime, - deathAnimDuration ); - } - - self.wantSafeSpawn = false; - perks = maps\mp\gametypes\_globallogic::getPerks( attacker ); - killstreaks = maps\mp\gametypes\_globallogic::getKillstreaks( attacker ); - - // let the player watch themselves die - wait ( 0.25 ); - - //check if killed by a sniper - weaponClass = maps\mp\gametypes\_missions::getWeaponClass( sWeapon ); - if ( weaponClass == "weapon_sniper" ) - { - self thread maps\mp\gametypes\_battlechatter_mp::KilledBySniper( attacker ); - } - else - { - self thread maps\mp\gametypes\_battlechatter_mp::PlayerKilled( attacker ); - } - self.cancelKillcam = false; - self thread maps\mp\gametypes\_killcam::cancelKillCamOnUse(); - maps\mp\gametypes\_globallogic_utils::waitForTimeOrNotifies( 1.75 ); - self notify ( "death_delay_finished" ); - -/# - if ( GetDvarInt( #"scr_forcekillcam" ) != 0 ) - { - doKillcam = true; - - if ( lpattacknum < 0 ) - lpattacknum = self getEntityNumber(); - } -#/ - - if ( game["state"] != "playing" ) - { - // if no longer playing then this was probably the kill that ended the round - // store off the killcam info - level thread maps\mp\gametypes\_killcam::startFinalKillcam( lpattacknum, self getEntityNumber(), killcamentity, killcamentityindex, killcamentitystarttime, sWeapon, self.deathTime, deathTimeOffset, psOffsetTime, perks, killstreaks, attacker ); - return; - } - - respawnTimerStartTime = gettime(); - - if ( !self.cancelKillcam && doKillcam && level.killcam ) - { - livesLeft = !(level.numLives && !self.pers["lives"]); - timeUntilSpawn = maps\mp\gametypes\_globallogic_spawn::TimeUntilSpawn( true ); - willRespawnImmediately = livesLeft && (timeUntilSpawn <= 0); - - self thread maps\mp\_tutorial::tutorial_display_tip(); - self maps\mp\gametypes\_killcam::killcam( lpattacknum, self getEntityNumber(), killcamentity, killcamentityindex, killcamentitystarttime, sWeapon, self.deathTime, deathTimeOffset, psOffsetTime, willRespawnImmediately, maps\mp\gametypes\_globallogic_utils::timeUntilRoundEnd(), perks, killstreaks, attacker ); - } - - if ( game["state"] != "playing" ) - { - self.sessionstate = "dead"; - self.spectatorclient = -1; - self.killcamtargetentity = -1; - self.killcamentity = -1; - self.archivetime = 0; - self.psoffsettime = 0; - return; - } - - WaitTillKillStreakDone(); - - // class may be undefined if we have changed teams - if ( maps\mp\gametypes\_globallogic_utils::isValidClass( self.class ) ) - { - timePassed = (gettime() - respawnTimerStartTime) / 1000; - self thread [[level.spawnClient]]( timePassed ); - } -} - -updateGlobalBotKilledCounter() -{ - self endon("disconnect"); - wait( .05 ); - maps\mp\gametypes\_globallogic_utils::WaitTillSlowProcessAllowed(); - - if ( isDefined( self.pers["isBot"] ) ) - { - level.globalLarrysKilled++; - } -} - - -WaitTillKillStreakDone() -{ - if( isdefined( self.killstreak_waitamount ) ) - { - starttime = gettime(); - waitTime = self.killstreak_waitamount * 1000; - - while( (gettime() < (starttime+waitTime)) && isdefined( self.killstreak_waitamount ) ) - { - wait( 0.1 ); - } - - //Plus a small amount so we can see our dead body - wait( 2.0 ); - - self.killstreak_waitamount = undefined; - } -} - -TeamKillKick() -{ - self maps\mp\gametypes\_globallogic_score::incPersStat( "sessionbans", 1 ); - - self endon("disconnect"); - waittillframeend; - - //for test purposes lets lock them out of certain game type for 2mins - - playlistbanquantum = maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillerplaylistbanquantum" ); - playlistbanpenalty = maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillerplaylistbanpenalty" ); - if ( playlistbanquantum > 0 && playlistbanpenalty > 0 ) - { - timeplayedtotal = self maps\mp\gametypes\_persistence::statGet( "time_played_total" ); - minutesplayed = timeplayedtotal / 60; - - freebees = 2; - - banallowance = int( floor(minutesplayed / playlistbanquantum) ) + freebees; - - if ( self.sessionbans > banallowance ) - { - self maps\mp\gametypes\_persistence::statSet( "gametypeban", timeplayedtotal + (playlistbanpenalty * 60), false ); - } - } - - // no waiting because then they could quit and rejoin before the ban -// self setLowerMessage( &"MP_FRIENDLY_FIRE_WILL_NOT", 2 ); - - if ( self is_bot() ) - { - level notify( "bot_kicked", self.team ); - } - - ban( self getentitynumber(), 1 ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "kicked" ); -} - -TeamKillDelay() -{ - teamkills = self.pers["teamkills_nostats"]; - if ( level.minimumAllowedTeamKills < 0 || teamkills <= level.minimumAllowedTeamKills ) - return 0; - - exceeded = (teamkills - level.minimumAllowedTeamKills); - return maps\mp\gametypes\_tweakables::getTweakableValue( "team", "teamkillspawndelay" ) * exceeded; -} - - -ShouldTeamKillKick(teamKillDelay) -{ - if ( teamKillDelay && maps\mp\gametypes\_tweakables::getTweakableValue( "team", "kickteamkillers" ) ) - { - // if its more then 5 seconds into the match and we have a delay then just kick them - if ( maps\mp\gametypes\_globallogic_utils::getTimePassed() >= 5000 ) - { - return true; - } - - // if its under 5 seconds into the match only kick them if they have killed more then one players so far - if ( self.pers["teamkills_nostats"] > 1 ) - { - return true; - } - } - - return false; -} - -reduceTeamKillsOverTime() -{ - timePerOneTeamkillReduction = 20.0; - reductionPerSecond = 1.0 / timePerOneTeamkillReduction; - - while(1) - { - if ( isAlive( self ) ) - { - self.pers["teamkills_nostats"] -= reductionPerSecond; - if ( self.pers["teamkills_nostats"] < level.minimumAllowedTeamKills ) - { - self.pers["teamkills_nostats"] = level.minimumAllowedTeamKills; - break; - } - } - wait 1; - } -} - - -IgnoreTeamKills( sWeapon, sMeansOfDeath ) -{ - if ( sMeansOfDeath == "MOD_MELEE" ) - return false; - - if ( sWeapon == "briefcase_bomb_mp" ) - return true; - - if ( sWeapon == "supplydrop_mp" ) - return true; - -// if ( isSubStr( sWeapon, "mine_bouncing_betty_" ) ) -// return true; - - return false; -} - - -Callback_PlayerLastStand( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ) -{ - maps\mp\_laststand::playerlaststand(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ); -} - - -damageShellshockAndRumble( eAttacker, eInflictor, sWeapon, sMeansOfDeath, iDamage ) -{ - self thread maps\mp\gametypes\_weapons::onWeaponDamage( eAttacker, eInflictor, sWeapon, sMeansOfDeath, iDamage ); - self PlayRumbleOnEntity( "damage_heavy" ); -} - - -createDeadBody( iDamage, sMeansOfDeath, sWeapon, sHitLoc, vDir, vAttackerOrigin, deathAnimDuration, eInflictor, ragdoll_jib, body ) -{ - if ( sMeansOfDeath == "MOD_HIT_BY_OBJECT" && self GetStance() == "prone" ) - { - self.body = body; - if ( !isDefined( self.switching_teams ) ) - thread maps\mp\gametypes\_deathicons::addDeathicon( body, self, self.team, 5.0 ); - - return; - } - - if ( IsDefined( level.ragdoll_override ) && self [[level.ragdoll_override]]() ) - { - return; - } - - if ( ragdoll_jib || self isOnLadder() || self isMantling() || sMeansOfDeath == "MOD_CRUSH" || sMeansOfDeath == "MOD_HIT_BY_OBJECT" ) - body startRagDoll(); - - if ( !self IsOnGround() ) - { - if ( GetDvarInt( #"scr_disable_air_death_ragdoll" ) == 0 ) - { - body startRagDoll(); - } - } - - if ( self is_explosive_ragdoll( sWeapon, eInflictor ) ) - { - body start_explosive_ragdoll( vDir, sWeapon ); - } - - thread delayStartRagdoll( body, sHitLoc, vDir, sWeapon, eInflictor, sMeansOfDeath ); - - if( sMeansOfDeath == "MOD_BURNED" || isdefined( self.burning ) ) - { - body maps\mp\_burnplayer::burnedToDeath(); - } - if ( sMeansOfDeath == "MOD_CRUSH" ) - { - body maps\mp\gametypes\_globallogic_vehicle::vehicleCrush(); - } - - self.body = body; - if ( !isDefined( self.switching_teams ) ) - thread maps\mp\gametypes\_deathicons::addDeathicon( body, self, self.team, 5.0 ); -} - -is_explosive_ragdoll( weapon, inflictor ) -{ - if ( !IsDefined( weapon ) ) - { - return false; - } - - // destructible explosives - if ( weapon == "destructible_car_mp" || weapon == "explodable_barrel_mp" ) - { - return true; - } - - // special explosive weapons - if ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) - { - if ( IsDefined( inflictor ) && IsDefined( inflictor.stuckToPlayer ) ) - { - if ( inflictor.stuckToPlayer == self ) - { - return true; - } - } - } - - return false; -} - -start_explosive_ragdoll( dir, weapon ) -{ - if ( !IsDefined( self ) ) - { - return; - } - - x = RandomIntRange( 50, 100 ); - y = RandomIntRange( 50, 100 ); - z = RandomIntRange( 10, 20 ); - - if ( IsDefined( weapon ) && ( weapon == "sticky_grenade_mp" || weapon == "explosive_bolt_mp" ) ) - { - if ( IsDefined( dir ) && LengthSquared( dir ) > 0 ) - { - x = dir[0] * x; - y = dir[1] * y; - } - } - else - { - if ( cointoss() ) - { - x = x * -1; - } - if ( cointoss() ) - { - y = y * -1; - } - } - - self StartRagdoll(); - self LaunchRagdoll( ( x, y, z ) ); -} - - -notifyConnecting() -{ - waittillframeend; - - if( isDefined( self ) ) - level notify( "connecting", self ); -} - - -delayStartRagdoll( ent, sHitLoc, vDir, sWeapon, eInflictor, sMeansOfDeath ) -{ - if ( isDefined( ent ) ) - { - deathAnim = ent getcorpseanim(); - if ( animhasnotetrack( deathAnim, "ignore_ragdoll" ) ) - return; - } - - if ( level.oldschool ) - { - if ( !isDefined( vDir ) ) - vDir = (0,0,0); - - explosionPos = ent.origin + ( 0, 0, maps\mp\gametypes\_globallogic_utils::getHitLocHeight( sHitLoc ) ); - explosionPos -= vDir * 20; - //thread maps\mp\gametypes\_globallogic_utils::debugLine( ent.origin + (0,0,(explosionPos[2] - ent.origin[2])), explosionPos ); - explosionRadius = 40; - explosionForce = .75; - if ( sMeansOfDeath == "MOD_IMPACT" || sMeansOfDeath == "MOD_EXPLOSIVE" || isSubStr(sMeansOfDeath, "MOD_GRENADE") || isSubStr(sMeansOfDeath, "MOD_PROJECTILE") || sHitLoc == "head" || sHitLoc == "helmet" ) - { - explosionForce = 2.5; - } - - ent startragdoll( 1 ); - - wait .05; - - if ( !isDefined( ent ) ) - return; - - // apply extra physics force to make the ragdoll go crazy - physicsExplosionSphere( explosionPos, explosionRadius, explosionRadius/2, explosionForce ); - return; - } - - wait( 0.2 ); - - if ( !isDefined( ent ) ) - return; - - if ( ent isRagDoll() ) - return; - - deathAnim = ent getcorpseanim(); - - startFrac = 0.35; - - if ( animhasnotetrack( deathAnim, "start_ragdoll" ) ) - { - times = getnotetracktimes( deathAnim, "start_ragdoll" ); - if ( isDefined( times ) ) - startFrac = times[0]; - } - - waitTime = startFrac * getanimlength( deathAnim ); - wait( waitTime ); - - if ( isDefined( ent ) ) - { - println( "Ragdolling after " + waitTime + " seconds" ); - ent startragdoll( 1 ); - } -} - -trackAttackerDamage( eAttacker, iDamage, sMeansOfDeath, sWeapon ) -{ - Assert( isPlayer( eAttacker ) ); - - if ( !isdefined( self.attackerData[eAttacker.clientid] ) ) - { - self.attackerDamage[eAttacker.clientid] = spawnstruct(); - self.attackerDamage[eAttacker.clientid].damage = iDamage; - self.attackerDamage[eAttacker.clientid].meansOfDeath = sMeansOfDeath; - self.attackerDamage[eAttacker.clientid].weapon = sWeapon; - self.attackerDamage[eAttacker.clientid].time = getTime(); - self.attackers[ self.attackers.size ] = eAttacker; - // we keep an array of attackers by their client ID so we can easily tell - // if they're already one of the existing attackers in the above if(). - // we store in this array data that is useful for other things, like challenges - self.attackerData[eAttacker.clientid] = false; - } - else - { - self.attackerDamage[eAttacker.clientid].damage += iDamage; - self.attackerDamage[eAttacker.clientid].meansOfDeath = sMeansOfDeath; - self.attackerDamage[eAttacker.clientid].weapon = sWeapon; - if ( !isdefined( self.attackerDamage[eAttacker.clientid].time ) ) - self.attackerDamage[eAttacker.clientid].time = getTime(); - } - - self.attackerDamage[eAttacker.clientid].lasttimedamaged = getTime(); - if ( maps\mp\gametypes\_weapons::isPrimaryWeapon( sWeapon ) ) - self.attackerData[eAttacker.clientid] = true; -} - -giveInflictorOwnerAssist( eAttacker, eInflictor, iDamage, sMeansOfDeath, sWeapon ) -{ - if ( !isDefined( eInflictor ) ) - return; - - if ( !isDefined( eInflictor.owner ) ) - return; - - if ( !IsDefined( eInflictor.ownerGetsAssist ) ) - return; - - if ( !eInflictor.ownerGetsAssist ) - return; - - Assert( isPlayer( eInflictor.owner ) ); - - trackAttackerDamage( eInflictor.owner, iDamage, sMeansOfDeath, sWeapon ); -} - -updateMeansOfDeath( sWeapon, sMeansOfDeath ) -{ - // we do not want the melee icon to show up for dog attacks - // AE 10-22-09: added the check for the crossbow so that it'll show the right icon - switch(sWeapon) - { - case "crossbow_mp": - case "knife_ballistic_mp": - { - if ( ( sMeansOfDeath != "MOD_HEAD_SHOT" ) && ( sMeansOfDeath != "MOD_MELEE" ) ) - { - sMeansOfDeath = "MOD_PISTOL_BULLET"; - } - } - break; - case "dog_bite_mp": - sMeansOfDeath = "MOD_PISTOL_BULLET"; - break; - case "destructible_car_mp": - sMeansOfDeath = "MOD_EXPLOSIVE"; - break; - case "explodable_barrel_mp": - sMeansOfDeath = "MOD_EXPLOSIVE"; - break; - } - - return sMeansOfDeath; -} - -updateAttacker( attacker ) -{ - if( isai(attacker) && isDefined( attacker.script_owner ) ) - { - // if the person who called the dogs in switched teams make sure they don't - // get penalized for the kill - if ( !level.teambased || attacker.script_owner.team != self.team ) - attacker = attacker.script_owner; - } - - if( attacker.classname == "script_vehicle" && isDefined( attacker.owner ) ) - { - attacker notify("killed",self); - - attacker = attacker.owner; - } - - if( isai(attacker) ) - attacker notify("killed",self); - - if ( ( isdefined ( self.capturingLastFlag ) ) && ( self.capturingLastFlag == true ) ) - { - attacker.lastCapKiller = true; - } - - return attacker; -} - -updateInflictor( eInflictor ) -{ - if( IsDefined( eInflictor ) && eInflictor.classname == "script_vehicle" ) - { - eInflictor notify("killed",self); - } - - return eInflictor; -} - -updateWeapon( eInflictor, sWeapon ) -{ - // explosive barrel/car detection - if ( sWeapon == "none" && isDefined( eInflictor ) ) - { - if ( isDefined( eInflictor.targetname ) && eInflictor.targetname == "explodable_barrel" ) - sWeapon = "explodable_barrel_mp"; - else if ( isDefined( eInflictor.destructible_type ) && isSubStr( eInflictor.destructible_type, "vehicle_" ) ) - sWeapon = "destructible_car_mp"; - } - - return sWeapon; -} - -getClosestKillcamEntity( attacker, killCamEntities ) -{ - closestKillcamEnt = undefined; - closestKillcamEntDist = undefined; - origin = undefined; - - for ( killcamEntIndex = 0; killcamEntIndex < killCamEntities.size; killcamEntIndex++ ) - { - killcamEnt = killCamEntities[killcamEntIndex]; - if ( killcamEnt == attacker ) - continue; - - origin = killcamEnt.origin; - if ( IsDefined( killcamEnt.offsetPoint ) ) - origin += killcamEnt.offsetPoint; - - dist = DistanceSquared( self.origin, origin ); - - if ( !IsDefined( closestKillcamEnt ) || dist < closestKillcamEntDist ) - { - closestKillcamEnt = killcamEnt; - closestKillcamEntDist = dist; - } - } - - return closestKillcamEnt; -} - -getKillcamEntity( attacker, eInflictor, sWeapon ) -{ - if ( !isDefined( eInflictor ) ) - return undefined; - - if ( eInflictor == attacker ) - { - if( !IsDefined( eInflictor.isMagicBullet ) ) - return undefined; - if( IsDefined( eInflictor.isMagicBullet ) && !eInflictor.isMagicBullet ) - return undefined; - } - else if ( isdefined( level.levelSpecificKillcam ) ) - { - levelSpecificKillcamEnt = self [[level.levelSpecificKillcam]](); - if ( isdefined( levelSpecificKillcamEnt ) ) - return levelSpecificKillcamEnt; - } - - if ( sWeapon == "m220_tow_mp" ) - return undefined; - - if ( isDefined(eInflictor.killCamEnt) ) - { - // this is the case with the player helis - if ( eInflictor.killCamEnt == attacker ) - return undefined; - - return eInflictor.killCamEnt; - } - else if ( isDefined(eInflictor.killCamEntities) ) - { - return getClosestKillcamEntity( attacker, eInflictor.killCamEntities ); - } - - if ( isDefined( eInflictor.script_gameobjectname ) && eInflictor.script_gameobjectname == "bombzone" ) - return eInflictor.killCamEnt; - - //if ( eInflictor.classname == "script_origin" || eInflictor.classname == "script_model" || eInflictor.classname == "script_brushmodel" ) - // return undefined; // probably a barrel or a car... code does airstrike cam for these things which looks bad - - return eInflictor; -} - -playKillBattleChatter( attacker, sWeapon ) -{ - if( IsPlayer( attacker ) ) - { - if( isDefined(level.bcKillInformProbability) && randomIntRange( 0, 100 ) >= level.bcKillInformProbability ) - { - if ( !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - level thread maps\mp\gametypes\_battlechatter_mp::sayLocalSoundDelayed( attacker, "kill", "infantry", 0.75 ); - } - } - } -} diff --git a/mods/patch_mp/maps/mp/gametypes/_globallogic_score.gsc b/mods/patch_mp/maps/mp/gametypes/_globallogic_score.gsc deleted file mode 100644 index 245c1c7..0000000 --- a/mods/patch_mp/maps/mp/gametypes/_globallogic_score.gsc +++ /dev/null @@ -1,1070 +0,0 @@ -#include maps\mp\_utility; - -updateMatchBonusScores( winner ) -{ - if ( !game["timepassed"] ) - return; - - if ( !level.rankedMatch ) - return; - - // dont give the bonus until the game is over - if ( level.teamBased && isDefined( winner ) ) - { - if ( winner == "endregulation" ) - return; - } - - if ( !level.timeLimit || level.forcedEnd ) - { - gameLength = maps\mp\gametypes\_globallogic_utils::getTimePassed() / 1000; - // cap it at 20 minutes to avoid exploiting - gameLength = min( gameLength, 1200 ); - - // the bonus for final fight needs to be based on the total time played - if ( level.gameType == "twar" && game["roundsplayed"] > 0 ) - gameLength += level.timeLimit * 60; - } - else - { - gameLength = level.timeLimit * 60; - } - - if ( level.teamBased ) - { - if ( winner == "allies" ) - { - winningTeam = "allies"; - losingTeam = "axis"; - } - else if ( winner == "axis" ) - { - winningTeam = "axis"; - losingTeam = "allies"; - } - else - { - winningTeam = "tie"; - losingTeam = "tie"; - } - - if ( winningTeam != "tie" ) - { - winnerScale = maps\mp\gametypes\_rank::getScoreInfoValue( "win" ); - loserScale = maps\mp\gametypes\_rank::getScoreInfoValue( "loss" ); - } - else - { - winnerScale = maps\mp\gametypes\_rank::getScoreInfoValue( "tie" ); - loserScale = maps\mp\gametypes\_rank::getScoreInfoValue( "tie" ); - } - - players = level.players; - for( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( player.timePlayed["total"] < 1 || player.pers["participation"] < 1 ) - { - player thread maps\mp\gametypes\_rank::endGameUpdate(); - continue; - } - - totalTimePlayed = player.timePlayed["total"]; - - // make sure the players total time played is no - // longer then the game length to prevent exploits - if ( totalTimePlayed > gameLength ) - { - totalTimePlayed = gameLength; - } - - // no bonus for hosts who force ends - if ( level.hostForcedEnd && player IsHost() ) - continue; - - // no match bonus if negative game score - if ( player.pers["score"] < 0 ) - continue; - - spm = player maps\mp\gametypes\_rank::getSPM(); - if ( winningTeam == "tie" ) - { - playerScore = int( (winnerScale * ((gameLength/60) * spm)) * (totalTimePlayed / gameLength) ); - player thread giveMatchBonus( "tie", playerScore ); - player.matchBonus = playerScore; - } - else if ( isDefined( player.pers["team"] ) && player.pers["team"] == winningTeam ) - { - playerScore = int( (winnerScale * ((gameLength/60) * spm)) * (totalTimePlayed / gameLength) ); - player thread giveMatchBonus( "win", playerScore ); - player.matchBonus = playerScore; - } - else if ( isDefined(player.pers["team"] ) && player.pers["team"] == losingTeam ) - { - playerScore = int( (loserScale * ((gameLength/60) * spm)) * (totalTimePlayed / gameLength) ); - player thread giveMatchBonus( "loss", playerScore ); - player.matchBonus = playerScore; - } - } - } - else - { - if ( isDefined( winner ) ) - { - winnerScale = maps\mp\gametypes\_rank::getScoreInfoValue( "win" ); - loserScale = maps\mp\gametypes\_rank::getScoreInfoValue( "loss" ); - } - else - { - winnerScale = maps\mp\gametypes\_rank::getScoreInfoValue( "tie" ); - loserScale = maps\mp\gametypes\_rank::getScoreInfoValue( "tie" ); - } - - players = level.players; - for( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( player.timePlayed["total"] < 1 || player.pers["participation"] < 1 ) - { - player thread maps\mp\gametypes\_rank::endGameUpdate(); - continue; - } - - totalTimePlayed = player.timePlayed["total"]; - - // make sure the players total time played is no - // longer then the game length to prevent exploits - if ( totalTimePlayed > gameLength ) - { - totalTimePlayed = gameLength; - } - - spm = player maps\mp\gametypes\_rank::getSPM(); - - isWinner = false; - for ( pIdx = 0; pIdx < min( level.placement["all"][0].size, 3 ); pIdx++ ) - { - if ( level.placement["all"][pIdx] != player ) - continue; - isWinner = true; - } - - if ( isWinner ) - { - playerScore = int( (winnerScale * ((gameLength/60) * spm)) * (totalTimePlayed / gameLength) ); - player thread giveMatchBonus( "win", playerScore ); - player.matchBonus = playerScore; - } - else - { - playerScore = int( (loserScale * ((gameLength/60) * spm)) * (totalTimePlayed / gameLength) ); - player thread giveMatchBonus( "loss", playerScore ); - player.matchBonus = playerScore; - } - } - } -} - - -giveMatchBonus( scoreType, score ) -{ - self endon ( "disconnect" ); - - level waittill ( "give_match_bonus" ); - - self maps\mp\gametypes\_rank::giveRankXP( scoreType, score ); - logXPGains(); - - self maps\mp\gametypes\_rank::endGameUpdate(); -} - - -setXenonRanks( winner ) -{ - players = level.players; - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if( !isdefined(player.score) || !isdefined(player.pers["team"]) ) - continue; - - } - - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if( !isdefined(player.score) || !isdefined(player.pers["team"]) ) - continue; - - setPlayerTeamRank( player, i, player.score - 5 * player.deaths ); - player logString( "team: score " + player.pers["team"] + ":" + player.score ); - } - sendranks(); -} - - -getHighestScoringPlayer() -{ - players = level.players; - winner = undefined; - tie = false; - - for( i = 0; i < players.size; i++ ) - { - if ( !isDefined( players[i].score ) ) - continue; - - if ( players[i].score < 1 ) - continue; - - if ( !isDefined( winner ) || players[i].score > winner.score ) - { - winner = players[i]; - tie = false; - } - else if ( players[i].score == winner.score ) - { - tie = true; - } - } - - if ( tie || !isDefined( winner ) ) - return undefined; - else - return winner; -} - - -onXPEvent( event ) -{ - self maps\mp\gametypes\_rank::giveRankXP( event ); -} - -givePlayerScore( event, player, victim ) -{ - if ( level.overridePlayerScore ) - return; - - pixbeginevent("level.onPlayerScore"); - score = player.pers["score"]; - [[level.onPlayerScore]]( event, player, victim ); - newScore = player.pers["score"]; - pixendevent(); - - bbPrint( "mpplayerscore: gametime %d type %s player %s delta %d", getTime(), event, player.name, newScore - score ); - - if ( score == newScore ) - return; - - pixbeginevent("givePlayerScore"); - recordPlayerStats( player, "score" , newScore ); - - if ( level.rankedMatch || level.wagerMatch ) - { - player maps\mp\gametypes\_persistence::statAdd( "score", (newScore - score), false ); - player maps\mp\gametypes\_persistence::statAddWithGameType( "SCORE", (newScore - score) ); - if ( isDefined( player.pers["lastHighestScore"] ) && newScore > player.pers["lastHighestScore"] ) - { - player setDStat( "HighestStats", "highest_score", newScore ); - } - - if( !level.wagerMatch ) - { - player maps\mp\gametypes\_persistence::addRecentStat( false, 0, "score", (newScore - score) ); - player maps\mp\gametypes\_persistence::addRecentStat( true, 0, "score", (newScore - score) ); - } - } - pixendevent(); -} - -default_onPlayerScore( event, player, victim ) -{ - score = maps\mp\gametypes\_rank::getScoreInfoValue( event ); - - assert( isDefined( score ) ); - /* - if ( event == "assist" ) - player.pers["score"] += 2; - else - player.pers["score"] += 10; - */ - - if ( level.wagerMatch ) - { - player thread maps\mp\gametypes\_rank::updateRankScoreHUD( score ); - } - - _setPlayerScore( player, player.pers["score"] + score ); -} - - -_setPlayerScore( player, score ) -{ - if ( score == player.pers["score"] ) - return; - - if ( !level.onlineGame || ( GetDvarInt( #"xblive_privatematch" ) && !GetDvarInt( #"xblive_basictraining" ) ) ) - { - player thread maps\mp\gametypes\_rank::updateRankScoreHUD( score - player.pers["score"] ); - } - - player.pers["score"] = score; - player.score = player.pers["score"]; - recordPlayerStats( player, "score" , player.pers["score"] ); - - player notify ( "update_playerscore_hud" ); - if ( level.wagerMatch ) - player thread maps\mp\gametypes\_wager::playerScored(); - player thread maps\mp\gametypes\_globallogic::checkScoreLimit(); - player thread maps\mp\gametypes\_globallogic::checkPlayerScoreLimitSoon(); - -} - - -_getPlayerScore( player ) -{ - return player.pers["score"]; -} - - -giveTeamScore( event, team, player, victim ) -{ - if ( level.overrideTeamScore ) - return; - - pixbeginevent("level.onTeamScore"); - teamScore = game["teamScores"][team]; - [[level.onTeamScore]]( event, team, player, victim ); - pixendevent(); - - newScore = game["teamScores"][team]; - - bbPrint( "mpteamscores: gametime %d event %s team %d diff %d score %d", getTime(), event, team, newScore - teamScore, newScore ); - - if ( teamScore == newScore ) - return; - - updateTeamScores( team ); - - thread maps\mp\gametypes\_globallogic::checkScoreLimit(); -} - -_setTeamScore( team, teamScore ) -{ - if ( teamScore == game["teamScores"][team] ) - return; - - game["teamScores"][team] = teamScore; - - updateTeamScores( team ); - - thread maps\mp\gametypes\_globallogic::checkScoreLimit(); -} - -resetTeamScores() -{ - game["teamScores"]["allies"] = 0; - game["teamScores"]["axis"] = 0; - maps\mp\gametypes\_globallogic_score::updateTeamScores("allies","axis"); -} - -resetAllScores() -{ - resetTeamScores(); - resetPlayerScores(); -} - -resetPlayerScores() -{ - players = level.players; - winner = undefined; - tie = false; - - for( i = 0; i < players.size; i++ ) - { - - if ( IsDefined( players[i].pers["score"] ) ) - _setPlayerScore( players[i], 0 ); - - } -} - -updateTeamScores( team1, team2 ) -{ - setTeamScore( team1, getGameScore( team1 ) ); - level thread maps\mp\gametypes\_globallogic::checkTeamScoreLimitSoon( team1 ); - if ( isdefined( team2 ) ) - { - setTeamScore( team2, getGameScore( team2 ) ); - level thread maps\mp\gametypes\_globallogic::checkTeamScoreLimitSoon( team2 ); - } -} - -_getTeamScore( team ) -{ - return game["teamScores"][team]; -} - -onTeamScore( score, team, player, victim ) -{ - otherTeam = level.otherTeam[team]; - - if ( game["teamScores"][team] > game["teamScores"][otherTeam] ) - level.wasWinning = team; - else if ( game["teamScores"][otherTeam] > game["teamScores"][team] ) - level.wasWinning = otherTeam; - - game["teamScores"][team] += score; - - isWinning = "none"; - if ( game["teamScores"][team] > game["teamScores"][otherTeam] ) - isWinning = team; - else if ( game["teamScores"][otherTeam] > game["teamScores"][team] ) - isWinning = otherTeam; - - if ( !level.splitScreen && isWinning != "none" && isWinning != level.wasWinning && getTime() - level.lastStatusTime > 5000 ) - { - level.lastStatusTime = getTime(); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "lead_taken", isWinning, "status" ); - if ( level.wasWinning != "none") - maps\mp\gametypes\_globallogic_audio::leaderDialog( "lead_lost", level.wasWinning, "status" ); - } - - if ( isWinning != "none" ) - level.wasWinning = isWinning; -} - - -default_onTeamScore( event, team, player, victim ) -{ - score = maps\mp\gametypes\_rank::getScoreInfoValue( event ); - - assert( isDefined( score ) ); - - onTeamScore( score, team, player, victim ); -} - -initPersStat( dataName, record_stats ) -{ - if( !isDefined( self.pers[dataName] ) ) - { - self.pers[dataName] = 0; - } - - if ( !isdefined(record_stats) || record_stats == true ) - { - recordPlayerStats( self, dataName, int(self.pers[dataName]) ); - } -} - - -getPersStat( dataName ) -{ - return self.pers[dataName]; -} - - -incPersStat( dataName, increment, record_stats, includeGametype ) -{ - pixbeginevent( "incPersStat" ); - - self.pers[dataName] += increment; - self maps\mp\gametypes\_persistence::statAdd( dataName, increment, includeGametype ); - - if ( !isdefined(record_stats) || record_stats == true ) - { - self thread threadedRecordPlayerStats( dataName ); - } - - pixendevent(); -} - -threadedRecordPlayerStats( dataName ) -{ - self endon("disconnect"); - waittillframeend; - - recordPlayerStats( self, dataName, self.pers[dataName] ); -} - -updatePersRatio( ratio, num, denom ) -{ - pixbeginevent( "updatePersRatio" ); - numValue = self maps\mp\gametypes\_persistence::statGet( num ); - denomValue = self maps\mp\gametypes\_persistence::statGet( denom ); - if ( denomValue == 0 ) - denomValue = 1; - - self maps\mp\gametypes\_persistence::statSet( ratio, int( (numValue * 1000) / denomValue ) ); - - numValue = self maps\mp\gametypes\_persistence::statGetWithGameType( num ); - denomValue = self maps\mp\gametypes\_persistence::statGetWithGameType( denom ); - if ( denomValue == 0 ) - denomValue = 1; - - self maps\mp\gametypes\_persistence::statSetWithGameType( ratio, int( (numValue * 1000) / denomValue ) ); - - if( ratio == "kdratio" && !level.wagerMatch ) - { - self maps\mp\gametypes\_persistence::setRecentStat( true, 0, "kills", self.kills ); - self maps\mp\gametypes\_persistence::setRecentStat( true, 0, "deaths", self.deaths ); - } - pixendevent(); // "updatePersRatio" -} - -updateWinStats( winner ) -{ - winner maps\mp\gametypes\_persistence::statAdd( "losses", -1, true ); - - println( "setting winner: " + winner maps\mp\gametypes\_persistence::statGet( "wins" ) ); - winner maps\mp\gametypes\_persistence::statAdd( "wins", 1, true ); - winner updatePersRatio( "wlratio", "wins", "losses" ); - - // restore winstreak, this is set to 0 on connect - restoreWinStreaks( winner ); - - // add this win to the winstreak - winner maps\mp\gametypes\_persistence::statAdd( "cur_win_streak", 1 ); - - // This notify is used for the contracts system. It allows it to reset a contract's progress on this notify. - winner notify( "win" ); - - cur_gamemode_win_streak = winner maps\mp\gametypes\_persistence::statGetWithGameType( "cur_win_streak" ); - gamemode_win_streak = winner maps\mp\gametypes\_persistence::statGetWithGameType( "win_streak" ); - - cur_win_streak = winner maps\mp\gametypes\_persistence::statGet( "cur_win_streak" ); - if ( cur_win_streak > winner getDStat( "HighestStats", "win_streak" ) ) - { - winner setDStat( "HighestStats", "win_streak", cur_win_streak ); - } - - if ( cur_gamemode_win_streak > gamemode_win_streak ) - { - winner maps\mp\gametypes\_persistence::statSetWithGameType( "win_streak", cur_gamemode_win_streak ); - } - -} - -updateLossStats( loser ) -{ - loser maps\mp\gametypes\_persistence::statAdd( "losses", 1, true ); - loser updatePersRatio( "wlratio", "wins", "losses" ); - // This notify is used for the contracts system. It allows it to reset a contract's progress on this notify. - loser notify( "loss" ); -} - - -updateTieStats( loser ) -{ - loser maps\mp\gametypes\_persistence::statAdd( "losses", -1, true ); - - loser maps\mp\gametypes\_persistence::statAdd( "ties", 1, true ); - loser updatePersRatio( "wlratio", "wins", "losses" ); - loser maps\mp\gametypes\_persistence::statSet( "cur_win_streak", 0 ); - // This notify is used for the contracts system. It allows it to reset a contract's progress on this notify. - loser notify( "tie" ); -} - -updateWinLossStats( winner ) -{ - if ( !wasLastRound() && !level.hostForcedEnd ) - return; - - players = level.players; - - if ( !isDefined( winner ) || ( isDefined( winner ) && !isPlayer( winner ) && winner == "tie" ) ) - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isDefined( players[i].pers["team"] ) ) - continue; - - if ( level.hostForcedEnd && players[i] IsHost() ) - continue; - - updateTieStats( players[i] ); - } - } - else if ( isPlayer( winner ) ) - { - if ( level.hostForcedEnd && winner IsHost() ) - return; - - updateWinStats( winner ); - } - else - { - for ( i = 0; i < players.size; i++ ) - { - if ( !isDefined( players[i].pers["team"] ) ) - continue; - - if ( level.hostForcedEnd && players[i] IsHost() ) - continue; - - if ( winner == "tie" ) - updateTieStats( players[i] ); - else if ( players[i].pers["team"] == winner ) - updateWinStats( players[i] ); - else - players[i] maps\mp\gametypes\_persistence::statSet( "cur_win_streak", 0 ); - - } - } -} - -// self is the player -backupAndClearWinStreaks() -{ - // Global - self.pers[ "winStreak" ] = maps\mp\gametypes\_persistence::statGet( "cur_win_streak" ); - self maps\mp\gametypes\_persistence::statSet( "cur_win_streak", 0 ); - - // Gametype - self.pers[ "winStreakForGametype" ] = maps\mp\gametypes\_persistence::statGetWithGameType( "cur_win_streak" ); - self maps\mp\gametypes\_persistence::statSetWithGameType( "cur_win_streak", 0 ); -} - -restoreWinStreaks( winner ) -{ - // Global - winner maps\mp\gametypes\_persistence::statSet( "cur_win_streak", winner.pers[ "winStreak" ] ); - - // Gametype - winner maps\mp\gametypes\_persistence::statSetWithGameType( "cur_win_streak", winner.pers[ "winStreakForGametype" ] ); -} - -getGameScore( team ) -{ - return game["teamScores"][team]; -} - - -incKillstreakTracker( sWeapon ) -{ - self endon("disconnect"); - - waittillframeend; - - if( sWeapon == "artillery_mp" ) - self.pers["artillery_kills"]++; - - if( sWeapon == "dog_bite_mp" ) - self.pers["dog_kills"]++; -} - -trackLeaderBoardDeathStats( sWeapon, sMeansOfDeath ) -{ - self thread threadedSetWeaponStatByName( sWeapon, 1, "deaths" ); -} - -trackLeaderBoardDeathsDuringUseStats( sWeapon ) -{ - self thread threadedSetWeaponStatByName( sWeapon, 1, "deathsDuringUse" ); -} - -trackAttackerLeaderBoardDeathStats( sWeapon, sMeansOfDeath ) -{ - if ( isdefined( self ) && isplayer( self ) ) - { - if ( sMeansOfDeath != "MOD_FALLING" ) - { - self thread threadedSetWeaponStatByName( sWeapon, 1, "kills" ); - } - - if ( sMeansOfDeath == "MOD_HEAD_SHOT" ) - { - self thread threadedSetWeaponStatByName( sWeapon, 1, "headshots" ); - } - } -} - -trackAttackerKill( name, rank, xp, prestige, xuid ) -{ - self endon("disconnect"); - attacker = self; - - waittillframeend; - - pixbeginevent("trackAttackerKill"); - - if ( !isDefined( attacker.pers["killed_players"][name] ) ) - attacker.pers["killed_players"][name] = 0; - - if ( !isDefined( attacker.killedPlayersCurrent[name] ) ) - attacker.killedPlayersCurrent[name] = 0; - - if ( !isDefined( attacker.pers["nemesis_tracking"][name] ) ) - attacker.pers["nemesis_tracking"][name] = 0; - - attacker.pers["killed_players"][name]++; - attacker.killedPlayersCurrent[name]++; - attacker.pers["nemesis_tracking"][name] += 1.0; - - if( attacker.pers["nemesis_name"] == "" || attacker.pers["nemesis_tracking"][name] > attacker.pers["nemesis_tracking"][attacker.pers["nemesis_name"]] ) - { - attacker.pers["nemesis_name"] = name; - attacker.pers["nemesis_rank"] = rank; - attacker.pers["nemesis_rankIcon"] = prestige; - attacker.pers["nemesis_xp"] = xp; - attacker.pers["nemesis_xuid"] = xuid; - } - else if( isDefined( attacker.pers["nemesis_name"] ) && ( attacker.pers["nemesis_name"] == name ) ) - { - attacker.pers["nemesis_rank"] = rank; - attacker.pers["nemesis_xp"] = xp; - } - - pixendevent(); -} - -trackAttackeeDeath( attackerName, rank, xp, prestige, xuid ) -{ - self endon("disconnect"); - - waittillframeend; - - pixbeginevent("trackAttackeeDeath"); - - if ( !isDefined( self.pers["killed_by"][attackerName] ) ) - self.pers["killed_by"][attackerName] = 0; - - self.pers["killed_by"][attackerName]++; - - if ( !isDefined( self.pers["nemesis_tracking"][attackerName] ) ) - self.pers["nemesis_tracking"][attackerName] = 0; - - self.pers["nemesis_tracking"][attackerName] += 1.5; - - if( self.pers["nemesis_name"] == "" || self.pers["nemesis_tracking"][attackerName] > self.pers["nemesis_tracking"][self.pers["nemesis_name"]] ) - { - self.pers["nemesis_name"] = attackerName; - self.pers["nemesis_rank"] = rank; - self.pers["nemesis_rankIcon"] = prestige; - self.pers["nemesis_xp"] = xp; - self.pers["nemesis_xuid"] =xuid; - } - else if( isDefined( self.pers["nemesis_name"] ) && ( self.pers["nemesis_name"] == attackerName ) ) - { - self.pers["nemesis_rank"] = rank; - self.pers["nemesis_xp"] = xp; - } - - //Nemesis Killcam - ( hopefully even with the wait it gets there with enough time not to cause a flicker) - if( self.pers["nemesis_name"] == attackerName && self.pers["nemesis_tracking"][attackerName] >= 2 ) - self setClientUIVisibilityFlag( "killcam_nemesis", 1 ); - else - self setClientUIVisibilityFlag( "killcam_nemesis", 0 ); - - pixendevent(); -} - -default_isKillBoosting() -{ - return false; -} - -giveKillStats( sMeansOfDeath, sWeapon, eVictim ) -{ - self endon("disconnect"); - - waittillframeend; - - if ( !GetDvarInt( #"xblive_privatematch" ) && self [[level.isKillBoosting]]() ) - { - return; - } - - pixbeginevent("giveKillXP"); - - self maps\mp\gametypes\_globallogic_score::incPersStat( "kills", 1, true, true ); - self.kills = self maps\mp\gametypes\_globallogic_score::getPersStat( "kills" ); - self maps\mp\gametypes\_globallogic_score::updatePersRatio( "kdratio", "kills", "deaths" ); - - attacker = self; - if ( sMeansOfDeath == "MOD_HEAD_SHOT" && !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - attacker thread incPersStat( "headshots", 1 , true, false ); - attacker.headshots = attacker.pers["headshots"]; - - if ( !isdefined( eVictim.laststandparams ) ) - { - attacker maps\mp\_medals::headshot( sWeapon ); - } - - attacker thread maps\mp\gametypes\_rank::giveRankXP( "headshot" ); - } - attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill" ); - - pixendevent(); -} - -incTotalKills( team ) -{ - if ( level.teambased && (team == "allies" || team == "axis") ) - { - game["totalKillsTeam"][team]++; - } - - game["totalKills"]++; -} - -incItemStatByReference( reference, incValue, statName ) -{ - if ( level.wagerMatch ) - return; - - itemIndex = maps\mp\gametypes\_rank::getItemIndex( reference ); - self incItemStatByIndex( itemIndex, incValue, statName ); - level thread maps\mp\gametypes\_persistence::updateGlobalCounterStats( reference, incValue, statName ); -} - -incItemStatByIndex( itemIndex, incValue, statName ) -{ - if ( !incValue || !level.rankedMatch || level.wagerMatch ) - { - return; - } - - self maps\mp\gametypes\_persistence::checkWeaponMilestoneComplete( itemIndex, statName, incValue ); -} - -setAttachmentStat( name, incValue, statName ) -{ - if ( !incValue || !level.rankedMatch || level.wagerMatch ) - { - return; - } - - isKill = false; - - if ( statName == "kills" ) - { - isKill = true; - } - - if ( isDefined( self.currentWeapon ) && ( isKill || statName == "shots" || statName == "hits" || statName == "headshots" ) ) - { - if ( self.currentWeapon == name ) - { - if ( !isDefined( self.currentAttachments ) ) - { - return; - } - - numAttachments = self.currentAttachments.size; - - if ( !numAttachments ) - { - return; - } - - for ( currentAttachment = 0; currentAttachment< numAttachments; currentAttachment++ ) - { - attachmentName = self.currentAttachments[ currentAttachment ][ "name" ]; - - if ( ( !isDefined( self.currentAttachments[ currentAttachment ][ "owned" ] ) ) || ( !self.currentAttachments[ currentAttachment ][ "owned" ] ) ) - { - continue; - } - - if ( isKill && ( self.currentAttachments[ currentAttachment ][ "point" ] == "top" ) && ( self playerADS() != 1 ) ) - { - continue; - } - if ( self.currentAttachments[ currentAttachment ][ "point" ] == "bottom" && attachmentname != "grip" ) - { - continue; - } - - self maps\mp\gametypes\_persistence::checkGroupChallengeComplete( "Attachments", attachmentName, statName, incValue, "statValue", "currentMilestone", "attachment", "lifetime_" ); - self maps\mp\gametypes\_persistence::checkGroupChallengeComplete( "Attachments", attachmentName, statName, incValue, "challengeValue", "challengeTier", "attachment" ); - } - } - } -} - -setWeaponStat( name, incValue, statName ) -{ - if ( incValue && statName == "kills" && maps\mp\_medals::isMedal( name + "_kills" ) ) - self thread maps\mp\_medals::giveMedal( name + "_kills" ); - - level thread maps\mp\gametypes\_persistence::updateGlobalCounterStats( name, incValue, statName ); - - if ( !incValue ) - return; - - if ( level.wagerMatch ) - { - self maps\mp\gametypes\_wager::trackWagerWeaponUsage( name, incValue, statName ); - return; - } - - if ( !level.rankedMatch ) - { - return; - } - - pixbeginevent("setWeaponStat"); - if ( isDefined( self.currentWeapon ) && ( self.currentWeapon == name ) ) - { - weaponItemIndex = self.currWeaponItemIndex; - setAttachmentStat( name, incValue, statName ); - } - else - { - weaponItemIndex = getBaseWeaponItemIndex( name ); - } - - if ( weaponItemIndex ) - { - contractsToProcess = self maps\mp\gametypes\_persistence::getContractsToProcess( "weapon", toLower( statName ) ); - if ( contractsToProcess.size ) - self maps\mp\gametypes\_persistence::processContracts( contractsToProcess, "weapon", statName, incValue, name ); - incItemStatByIndex( weaponItemIndex, incValue, statName ); - } - pixendevent(); -} - -setInflictorStat( eInflictor, eAttacker, sWeapon ) -{ - if ( !isDefined( eAttacker ) ) - return; - - if ( !isDefined( eInflictor ) ) - { - eAttacker setWeaponStat( sWeapon, 1, "hits" ); - return; - } - - if ( !isDefined( eInflictor.playerAffectedArray ) ) - eInflictor.playerAffectedArray = []; - - foundNewPlayer = true; - for ( i = 0 ; i < eInflictor.playerAffectedArray.size ; i++ ) - { - if ( eInflictor.playerAffectedArray[i] == self ) - { - foundNewPlayer = false; - break; - } - } - - if ( foundNewPlayer ) - { - eInflictor.playerAffectedArray[eInflictor.playerAffectedArray.size] = self; - if( sWeapon == "concussion_grenade_mp" || sWeapon == "tabun_gas_mp" ) - { - eAttacker setWeaponStat( sWeapon, 1, "used" ); - } - eAttacker setWeaponStat( sWeapon, 1, "hits" ); - } -} - -threadedSetWeaponStatByName( name, incValue, statName ) -{ - self endon("disconnect"); - waittillframeend; - - setWeaponStat( name, incValue, statName ); -} - -processAssist( killedplayer, damagedone ) -{ - self endon("disconnect"); - killedplayer endon("disconnect"); - - wait .05; // don't ever run on the same frame as the playerkilled callback. - maps\mp\gametypes\_globallogic_utils::WaitTillSlowProcessAllowed(); - - if ( self.pers["team"] != "axis" && self.pers["team"] != "allies" ) - return; - - if ( self.pers["team"] == killedplayer.pers["team"] ) - return; - - if ( !level.teambased ) - return; - - assist_level = "assist"; - - assist_level_value = int( floor( damagedone / 25 ) ); - - if ( assist_level_value > 0 ) - { - if ( assist_level_value > 3 ) - { - assist_level_value = 3; - } - assist_level = assist_level + "_" + ( assist_level_value * 25 ); - } - - self thread [[level.onXPEvent]]( assist_level ); - self thread maps\mp\_medals::assisted(); - self maps\mp\gametypes\_globallogic_score::incPersStat( "assists", 1 ); - self maps\mp\gametypes\_persistence::statAddWithGameType( "ASSISTS", 1 ); - - self.assists = self maps\mp\gametypes\_globallogic_score::getPersStat( "assists" ); - - if( maps\mp\gametypes\_customClasses::isCustomGame() ) - { - customAssistAmt = getDvarInt( "scr_custom_score_assist" ); - if( customAssistAmt != -1 ) // -1 is default scoring - { - _setPlayerScore( self, self.pers["score"] + customAssistAmt ); - onTeamScore( customAssistAmt, self.team, self, undefined ); - updateTeamScores( self.team ); - } - else - { - givePlayerScore( assist_level, self, killedplayer ); - } - } - else - { - givePlayerScore( assist_level, self, killedplayer ); - } - self thread maps\mp\gametypes\_missions::playerAssist(); -} - - -/# -xpRateThread() -{ - self endon ( "death" ); - self endon ( "disconnect" ); - level endon ( "game_ended" ); - - while ( level.inPrematchPeriod ) - wait ( 0.05 ); - - for ( ;; ) - { - wait ( 5.0 ); - if ( level.players[0].pers["team"] == "allies" || level.players[0].pers["team"] == "axis" ) - self maps\mp\gametypes\_rank::giveRankXP( "kill", int(min( GetDvarInt( #"scr_xprate" ), 50 )) ); - } -} -#/ - -logXPGains() -{ - if ( !isDefined( self.xpGains ) ) - return; - - xpTypes = getArrayKeys( self.xpGains ); - for ( index = 0; index < xpTypes.size; index++ ) - { - gain = self.xpGains[xpTypes[index]]; - if ( !gain ) - continue; - - self logString( "xp " + xpTypes[index] + ": " + gain ); - } -} - diff --git a/mods/patch_mp/maps/mp/gametypes/_spawning.gsc b/mods/patch_mp/maps/mp/gametypes/_spawning.gsc deleted file mode 100644 index 9cb8ae7..0000000 --- a/mods/patch_mp/maps/mp/gametypes/_spawning.gsc +++ /dev/null @@ -1,1574 +0,0 @@ -/* -_spawning.gsc -Copyright (c) 2008 Certain Affinity, Inc. All rights reserved. -Friday April 25, 2008 3:59pm Stefan S. - -spawn_point[]: --------------- -"origin" - worldspace origin -"score" - desirability for spawning; calculated by applying influencers plus a small amount of randomness - -spawn_influencer[]: -------------------- -"type" - one of: "static", "friend", "enemy", "enemy_weapon", "vehicle", "projectile", "airstrike", "dead_friend", "game_mode", "dog" -"shape" - one of: "sphere", "cylinder", "pill", "cone", "box" -"forward" - worldspace forward vector -"up" - worldspace up vector -"origin" - worldspace origin -"radius" - for sphere, cylinder, pill, cone -"axis_length" - for cylinder, pill, cone -"width", "height", "depth" - for box -"score" - base influencer score -"score_curve" - one of: "constant", "linear" (1->0), "inverse_linear" (0->1), "negative_to_positive" (-1 -> +1) - -level.recently_deceased[""][]: --------------------------- -deceased.angles - angles of the deceased player at TOD -deceased.origin - origin of the deceased player at TOD -deceased.timeOfDeathMillis - GetTime() value (in milliseconds) at TOD -*/ - -/*QUAKED mp_uspawn_point (1.0 0.549 0.0) (-16 -16 0) (16 16 72) -Unified spawn point. A player from any team can spawn here, based on spawn influencers. Use dvar "useUnifiedSpawning" to enable. Use targetname "allies_start" or "axis_start" to put a start influencer at that spawn point.*/ - -/*QUAKED mp_uspawn_influencer (1 0 0) (-16 -16 -16) (16 16 16) -Static influencer for unified spawning system -"script_shape" Shape of this influencer. Supported shapes for Radiant-placed static influencers are "cylinder" and "sphere". -"radius" Radius of the influencer ( whether cylinder or sphere ). -"height" Height of the cylinder ( ignored for sphere shapes ). -"script_score" The maximum influence this influencer can have. -"script_score_curve" The shape of the score falloff as a function of the distance from the primary cylinder axis. Options are: "constant", "linear", "inverse_linear", "negative_to_positive" -"script_team" Make this influencer team-specific by specifying "axis" or "allies" -"script_gameobjectname" Gametypes for which the influencer is active (space-separated values), can be "[all_modes]" or combination of "dm", "hq", "iwar", "war", "twar", "sd", "dom" -"script_twar_flag" Used to associate this influencer with a specific twar flag -default:"script_shape" "cylinder" -default:"radius" "400" -default:"height" "100" -default:"script_score" "25" -default:"script_score_curve" "constant" -default:"script_team" "neutral" -default:"script_gameobjectname" "[all_modes]" -default:"script_twar_flag" "NONE" -*/ - -/* ---------- includes */ - -#include maps\mp\_utility; -#include common_scripts\utility; - -/* ---------- initialization */ - -init() -{ - if ( !IsDefined(level.gamemodeSpawnDvars) ) - { - level.gamemodeSpawnDvars = ::default_gamemodeSpawnDvars; - } - - level init_spawn_system(); - - level.teams= []; - level.teams[ 0 ]= "allies"; - level.teams[ 1 ]= "axis"; - - - level.recently_deceased= []; - for ( iTeam= 0; iTeam < level.teams.size; iTeam++ ) - { - level.recently_deceased[ level.teams[ iTeam ] ]= spawn_array_struct(); - } - - level thread onPlayerConnect(); - - if ( GetDvar( #"scr_spawn_visibility_check_max") == "" ) - { - level.spawn_visibility_check_max = 20; - } - else - { - level.spawn_visibility_check_max = GetDvarInt( #"scr_spawn_visibility_check_max"); - } - - level.spawnProtectionTime = GetDvarFloat( #"scr_spawn_protection_time" ); - - /# - // this dvar stores the name for whom to display debug spawning information - SetDvar("scr_debug_spawn_player", ""); - SetDvar("scr_debug_render_spawn_data", "1"); - SetDvar("scr_debug_render_snapshotmode", "0"); - // for testing spawn point placements - SetDvar("scr_spawn_point_test_mode", "0"); - level.test_spawn_point_index= 0; - //###stefan $NOTE turning off debug text only saves 1-2 sv ms/frame - SetDvar("scr_debug_render_spawn_text", "1"); - // spawn thread for debug rendering of spawn influencer state - //thread spawn_influencers_debug_render_thread(); - #/ - - return; -} - -default_gamemodeSpawnDvars(reset_dvars) -{ -} - -init_spawn_system() -{ - level.spawnsystem = spawnstruct(); - spawnsystem = level.spawnsystem; - - level thread initialize_player_spawning_dvars(); - - // code enums - these must match the code versions - spawnsystem.eINFLUENCER_SHAPE_SPHERE = 0; - spawnsystem.eINFLUENCER_SHAPE_CYLINDER = 1; - - spawnsystem.eINFLUENCER_TYPE_NORMAL = 0; - spawnsystem.eINFLUENCER_TYPE_PLAYER = 1; - spawnsystem.eINFLUENCER_TYPE_WEAPON = 2; - spawnsystem.eINFLUENCER_TYPE_DOG = 3; - spawnsystem.eINFLUENCER_TYPE_VEHICLE = 4; - spawnsystem.eINFLUENCER_TYPE_GAME_MODE = 6; - spawnsystem.eINFLUENCER_TYPE_ENEMY_SPAWNED = 7; - - spawnsystem.eINFLUENCER_CURVE_CONSTANT = 0; - spawnsystem.eINFLUENCER_CURVE_LINEAR = 1; - spawnsystem.eINFLUENCER_CURVE_STEEP = 2; - spawnsystem.eINFLUENCER_CURVE_INVERSE_LINEAR = 3; - spawnsystem.eINFLUENCER_CURVE_NEGATIVE_TO_POSITIVE = 4; - - spawnsystem.iSPAWN_TEAMMASK_FREE = 1; - spawnsystem.iSPAWN_TEAMMASK_AXIS = 2; - spawnsystem.iSPAWN_TEAMMASK_ALLIES = 4; -} - - -/* -============= -onPlayerConnect - -============= -*/ -onPlayerConnect() -{ - level endon ( "game_ended" ); - - for( ;; ) - { - level waittill( "connecting", player ); - - //println("SPAWN:onPlayerConnect()"); - - player thread onPlayerSpawned(); - player thread onDisconnect(); - player thread onTeamChange(); - player thread onGrenadeThrow(); - } -} - - -/* -============= -onPlayerSpawned - -============= -*/ -onPlayerSpawned() -{ - self endon( "disconnect" ); - level endon ( "game_ended" ); - - for(;;) - { - self waittill( "spawned_player" ); - - //println("SPAWN:onPlayerSpawned() - spawned player event"); - - self thread initialSpawnProtection(); - - // If radar permanently enabled for the player, enable it - if ( isDefined( self.pers["hasRadar"] ) && self.pers["hasRadar"] ) - { - self.hasSpyplane = true; - } - - self enable_player_influencers( true ); - self thread onDeath(); - } -} - - -/* -============= -onDeath - -Drops any carried object when the player dies -============= -*/ -onDeath() -{ - self endon( "disconnect" ); - level endon ( "game_ended" ); - - self waittill ( "death" ); - self enable_player_influencers( false ); - self create_body_influencers(); -} - -/* -============= -onTeamChange - -Changes influencer teams when player changes teams -============= -*/ -onTeamChange() -{ - self endon( "disconnect" ); - level endon ( "game_ended" ); - - while(1) - { - self waittill ( "joined_team" ); - self player_influencers_set_team(); - wait(0.05); - } -} - - -/* -============= -onGrenadeThrow - -Creates an influencer on grenade -============= -*/ -onGrenadeThrow() -{ - self endon( "disconnect" ); - level endon ( "game_ended" ); - - while(1) - { - self waittill ( "grenade_fire", grenade, weaponName ); - level thread create_grenade_influencers( self.pers["team"], weaponName, grenade ); - wait(0.05); - } -} - -/* -============= -onDisconnect - -Drops any carried object when the player disconnects -============= -*/ -onDisconnect() -{ - level endon ( "game_ended" ); - - self waittill ( "disconnect" ); -} - - -get_team_mask( team ) -{ - // this can be undefined on connect - if ( !level.teambased || !isdefined(team)) - return level.spawnsystem.iSPAWN_TEAMMASK_FREE; - - switch( team ) - { - case "axis": - return level.spawnsystem.iSPAWN_TEAMMASK_AXIS; - case "allies": - return level.spawnsystem.iSPAWN_TEAMMASK_ALLIES; - case "all": - return (level.spawnsystem.iSPAWN_TEAMMASK_FREE | level.spawnsystem.iSPAWN_TEAMMASK_AXIS |level.spawnsystem.iSPAWN_TEAMMASK_ALLIES); - case "free": - default: - return level.spawnsystem.iSPAWN_TEAMMASK_FREE; - } -} - -get_score_curve_index( curve ) -{ - switch( curve ) - { - case "linear": - return level.spawnsystem.eINFLUENCER_CURVE_LINEAR; - case "steep": - return level.spawnsystem.eINFLUENCER_CURVE_STEEP; - case "inverse_linear": - return level.spawnsystem.eINFLUENCER_CURVE_LINEAR; - case "negative_to_positive": - return level.spawnsystem.eINFLUENCER_CURVE_NEGATIVE_TO_POSITIVE; - case "constant": - default: - return level.spawnsystem.eINFLUENCER_CURVE_CONSTANT; - } -} - -get_influencer_type_index( curve ) -{ -// switch( curve ) -// { -// case "linear": -// return level.spawnsystem.eINFLUENCER_CURVE_LINEAR; -// case "inverse_linear": -// return level.spawnsystem.eINFLUENCER_CURVE_LINEAR; -// case "negative_to_positive": -// return level.spawnsystem.eINFLUENCER_CURVE_NEGATIVE_TO_POSITIVE; -// case "constant": -// default: -// return level.spawnsystem.eINFLUENCER_CURVE_CONSTANT; -// } -} - -create_player_influencers() -{ - assert( !isdefined(self.influencer_enemy_sphere) ); - assert( !isdefined(self.influencer_weapon_cylinder) ); - assert( !level.teambased || !isdefined(self.influencer_friendly_sphere) ); - assert( !level.teambased || !isdefined(self.influencer_friendly_cylinder) ); - - if ( !level.teambased ) - { - team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - other_team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - weapon_team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - } - else if ( isdefined( self.pers["team"] ) ) - { - team_mask = get_team_mask( self.pers["team"] ); - other_team_mask = get_team_mask( getotherteam(self.pers["team"]) ); - weapon_team_mask = get_team_mask( getotherteam(self.pers["team"]) ); - } - else - { - team_mask = 0; - other_team_mask = 0; - weapon_team_mask = 0; - } - - // if this is hardcore then we do not want to spawn infront of the weapon either - if ( level.hardcoreMode ) - { - weapon_team_mask |= team_mask; - } - - angles = self.angles; - origin = self.origin; -// up = AnglesToUp(angles); -// forward = AnglesToForward(angles); - up = (0,0,1); - forward = (1,0,0); - cylinder_forward = up; - cylinder_up = forward; - - self.influencer_enemy_sphere = AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_PLAYER, - origin, - level.spawnsystem.enemy_influencer_radius, - level.spawnsystem.enemy_influencer_score, - other_team_mask, - "enemy,r,s", - get_score_curve_index(level.spawnsystem.enemy_influencer_score_curve), - 0, - self ); - -// self.influencer_weapon_cylinder = AddCylinderInfluencer( level.spawnsystem.eINFLUENCER_TYPE_WEAPON, -// origin, -// cylinder_forward, -// cylinder_up, -// level.spawnsystem.enemy_weapon_influencer_radius, -// level.spawnsystem.enemy_weapon_influencer_length, -// level.spawnsystem.enemy_weapon_influencer_score, -// weapon_team_mask, -// "enemy_weapon,r,s", -// get_score_curve_index(level.spawnsystem.enemy_weapon_influencer_score_curve), -// 0, -// self ); - - if ( level.teambased ) - { - // aim cylinder backwards for friends - cylinder_up = -1.0 * forward; - - self.influencer_friendly_sphere = AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_PLAYER, - origin, - level.spawnsystem.friend_weak_influencer_radius, - level.spawnsystem.friend_weak_influencer_score, - team_mask, - "friend_weak,r,s", - get_score_curve_index(level.spawnsystem.friend_weak_influencer_score_curve), - 0, - self ); - -// self.influencer_friendly_cylinder = AddCylinderInfluencer( level.spawnsystem.eINFLUENCER_TYPE_PLAYER, -// origin, -// cylinder_forward, -// cylinder_up, -// level.spawnsystem.friend_strong_influencer_radius, -// level.spawnsystem.friend_strong_influencer_length, -// level.spawnsystem.friend_strong_influencer_score, -// team_mask, -// "friend_strong,r,s", -// get_score_curve_index(level.spawnsystem.friend_strong_influencer_score_curve), -// 0, -// self ); - - } - - self.spawn_influencers_created = true; - - if ( !isdefined(self.pers["team"]) || self.pers["team"] == "spectator" ) - { - self enable_player_influencers( false ); - } -} - -remove_player_influencers() -{ - if ( level.teambased && isdefined(self.influencer_friendly_sphere) ) - { - removeinfluencer(self.influencer_friendly_sphere); - self.influencer_friendly_sphere = undefined; - } - if ( level.teambased && isdefined(self.influencer_friendly_cylinder) ) - { - removeinfluencer(self.influencer_friendly_cylinder); - self.influencer_friendly_cylinder = undefined; - } - if ( isdefined(self.influencer_enemy_sphere) ) - { - removeinfluencer(self.influencer_enemy_sphere); - self.influencer_enemy_sphere = undefined; - } - if ( isdefined(self.influencer_weapon_cylinder) ) - { - removeinfluencer(self.influencer_weapon_cylinder); - self.influencer_weapon_cylinder = undefined; - } - -} - -enable_player_influencers( enabled ) -{ - if (!isdefined(self.spawn_influencers_created)) - self create_player_influencers(); - - if ( isdefined(self.influencer_friendly_sphere) ) - enableinfluencer(self.influencer_friendly_sphere, enabled); - if ( isdefined(self.influencer_friendly_cylinder) ) - enableinfluencer(self.influencer_friendly_cylinder, enabled); - if ( isdefined(self.influencer_enemy_sphere) ) - enableinfluencer(self.influencer_enemy_sphere, enabled); - if ( isdefined(self.influencer_weapon_cylinder) ) - enableinfluencer(self.influencer_weapon_cylinder, enabled); -} - -player_influencers_set_team() -{ - if ( !level.teambased ) - { - team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - other_team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - weapon_team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - } - else - { - // for the player influencers we need to pay attention to the switchedsides - team = self.pers["team"]; -// if ( isdefined( game["switchedsides"] ) && game["switchedsides"] ) -// { -// team = getotherteam(team); -// } - - team_mask = get_team_mask( team ); - other_team_mask = get_team_mask( getotherteam(team) ); - weapon_team_mask = get_team_mask( getotherteam(team) ); - } - - // if friendly fire is on then we do not want to spawn infront of the weapon either - if ( level.friendlyfire != 0 && level.teamBased ) - { - weapon_team_mask |= team_mask; - } - - if ( isdefined(self.influencer_friendly_sphere) ) - setinfluencerteammask(self.influencer_friendly_sphere, team_mask); - if ( isdefined(self.influencer_friendly_cylinder) ) - setinfluencerteammask(self.influencer_friendly_cylinder, team_mask); - if ( isdefined(self.influencer_enemy_sphere) ) - setinfluencerteammask(self.influencer_enemy_sphere, other_team_mask); - if ( isdefined(self.influencer_weapon_cylinder) ) - setinfluencerteammask(self.influencer_weapon_cylinder, weapon_team_mask); -} - -create_body_influencers() -{ - if ( level.teambased ) - { - team_mask = get_team_mask( self.pers["team"] ); - } - else - { - team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - } - AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - self.origin, - level.spawnsystem.dead_friend_influencer_radius, - level.spawnsystem.dead_friend_influencer_score, - team_mask, - "dead_friend,r,s", - get_score_curve_index(level.spawnsystem.dead_friend_influencer_score_curve), - level.spawnsystem.dead_friend_influencer_timeout_seconds); -} - -create_grenade_influencers( parent_team, weaponName, grenade ) -{ - pixbeginevent("create_grenade_influencers"); - if ( !level.teambased ) - { - weapon_team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - } - else - { - weapon_team_mask = get_team_mask( getotherteam(parent_team) ); - - // if this is hardcore then we do not want to spawn infront of the weapon either - if ( level.friendlyfire ) - { - weapon_team_mask |= get_team_mask( parent_team ); - } - } - - if ( issubstr(weaponName,"napalmblob") || issubstr(weaponName,"gl_") ) - { - pixendevent("create_grenade_influencers"); - return; - } - - timeout = 0; - - // these have lasting effects after detonation so hang it around a bit longer - if ( weaponName == "tabun_gas_mp" ) - { - timeout = 7.0; - } - - if (isdefined( grenade.origin )) - { - if ( weaponName == "claymore_mp" ) - { - AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - grenade.origin, - level.spawnsystem.claymore_influencer_radius, - level.spawnsystem.claymore_influencer_score, - weapon_team_mask, - "claymore,r,s", - get_score_curve_index(level.spawnsystem.claymore_influencer_score_curve), - timeout, - grenade ); - } - else - { - AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - grenade.origin, - level.spawnsystem.grenade_influencer_radius, - level.spawnsystem.grenade_influencer_score, - weapon_team_mask, - "grenade,r,s", - get_score_curve_index(level.spawnsystem.grenade_influencer_score_curve), - timeout, - grenade ); - } - } - - // also create an influencer at the predicted end point, and update the prediction at intervals - while (isdefined(grenade.origin)) - { - landpos = grenade predictgrenade(); - //landpos = (0,0,0); - if (landpos != (0,0,0)) - { - grenade_endpoint_influencer = AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - landpos, - level.spawnsystem.grenade_endpoint_influencer_radius, - level.spawnsystem.grenade_endpoint_influencer_score, - 0, - //weapon_team_mask, - "grenade_endpoint,r,s", - get_score_curve_index(level.spawnsystem.grenade_endpoint_influencer_score_curve) ); - - wait(0.5); - - if (!isdefined(grenade.origin) && timeout > 0) - wait(timeout); // wait till the effects have gone - - removeinfluencer( grenade_endpoint_influencer ); - } - else - { - break; - } - } - pixendevent("create_grenade_influencers"); -} - -create_napalm_fire_influencers( point, direction, parent_team, duration ) -{ - timeout = duration; - - // just going to leave this blank to indicate all teams - weapon_team_mask = 0; - - offset = vector_scale( anglestoforward( direction ), 1100 ); - - AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - (point + ( 2.0 * offset)), - level.spawnsystem.napalm_influencer_radius, - level.spawnsystem.napalm_influencer_score, - weapon_team_mask, - "napalm,r,s", - get_score_curve_index(level.spawnsystem.napalm_influencer_score_curve), - timeout ); - - AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - (point + offset), - level.spawnsystem.napalm_influencer_radius, - level.spawnsystem.napalm_influencer_score, - weapon_team_mask, - "napalm,r,s", - get_score_curve_index(level.spawnsystem.napalm_influencer_score_curve), - timeout ); - - AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - point, - level.spawnsystem.napalm_influencer_radius, - level.spawnsystem.napalm_influencer_score, - weapon_team_mask, - "napalm,r,s", - get_score_curve_index(level.spawnsystem.napalm_influencer_score_curve), - timeout ); - - AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - (point - offset), - level.spawnsystem.napalm_influencer_radius, - level.spawnsystem.napalm_influencer_score, - weapon_team_mask, - "napalm,r,s", - get_score_curve_index(level.spawnsystem.napalm_influencer_score_curve), - timeout ); -} - -create_auto_turret_influencer( point, parent_team, angles ) -{ - if ( !level.teambased ) - { - weapon_team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - } - else - { - weapon_team_mask = get_team_mask( getotherteam(parent_team) ); - } - - // place the influencer out infront of the turret - projected_point = point + vector_scale( anglestoforward( angles ), level.spawnsystem.auto_turret_influencer_radius * 0.7 ); - - influencerid = AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - projected_point, - level.spawnsystem.auto_turret_influencer_radius, - level.spawnsystem.auto_turret_influencer_score, - weapon_team_mask, - "auto_turret,r,s", - get_score_curve_index(level.spawnsystem.auto_turret_influencer_score_curve) ); - - return influencerid; -} - -create_dog_influencers() -{ - if ( !level.teambased ) - { - dog_enemy_team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - } - else - { - dog_enemy_team_mask = get_team_mask( getotherteam(self.aiteam) ); - } - - AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_DOG, - self.origin, - level.spawnsystem.dog_influencer_radius, - level.spawnsystem.dog_influencer_score, - dog_enemy_team_mask, - "dog,r,s", - get_score_curve_index(level.spawnsystem.dog_influencer_score_curve), - 0, - self ); -} - -create_helicopter_influencers( parent_team ) -{ - if ( !level.teambased ) - { - team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - } - else - { - team_mask = get_team_mask( getotherteam(parent_team) ); - } - - self.influencer_helicopter_cylinder = AddCylinderInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - self.origin, - (0,0,0), - (0,0,0), - level.spawnsystem.helicopter_influencer_radius, - level.spawnsystem.helicopter_influencer_length, - level.spawnsystem.helicopter_influencer_score, - team_mask, - "helicopter,r,s", - get_score_curve_index(level.spawnsystem.helicopter_influencer_score_curve), - 0, - self ); -} - -remove_helicopter_influencers() -{ - if (isdefined( self.influencer_helicopter_cylinder )) - RemoveInfluencer( self.influencer_helicopter_cylinder ); - - self.influencer_helicopter_cylinder = undefined; -} - -create_tvmissile_influencers( parent_team ) -{ - if ( !level.teambased || is_hardcore() ) - { - team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - } - else - { - team_mask = get_team_mask( getotherteam(parent_team) ); - } - - self.influencer_tvmissile_cylinder = AddCylinderInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - self.origin, - (0,0,0), - (0,0,0), - level.spawnsystem.tvmissile_influencer_radius, - level.spawnsystem.tvmissile_influencer_length, - level.spawnsystem.tvmissile_influencer_score, - team_mask, - "tvmissile,r,s", - get_score_curve_index(level.spawnsystem.tvmissile_influencer_score_curve), - 0, - self ); -} - -remove_tvmissile_influencers() -{ - if (isdefined( self.influencer_tvmissile_cylinder )) - RemoveInfluencer( self.influencer_tvmissile_cylinder ); - - self.influencer_tvmissile_cylinder = undefined; -} - -create_artillery_influencers( point, radius ) -{ - // just going to leave this blank to indicate all teams - weapon_team_mask = 0; - -// return AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, -// point, -// radius, -// level.spawnsystem.artillery_influencer_score, -// weapon_team_mask, -// "artillery,s", -// get_score_curve_index(level.spawnsystem.artillery_influencer_score_curve) ); - - if (radius < 0) - thisradius = level.spawnsystem.artillery_influencer_radius; - else - thisradius = radius; - - return AddCylinderInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - point + (0,0,-2000), - (1,0,0), - (0,0,1), - thisradius, - 5000, - level.spawnsystem.artillery_influencer_score, - weapon_team_mask, - "artillery,s,r", - get_score_curve_index(level.spawnsystem.artillery_influencer_score_curve) ); -} - -create_vehicle_influencers( ) -{ - // just going to leave this blank to indicate all teams - // because we dont want anyone spawning directly infront of the tank - weapon_team_mask = 0; - - vehicleRadius= 144; -// cylinderLength = (vehicleRadius*0.5) + (vehSpeedIPS*spawn_vehicle_influencer_lead_seconds); - - // code will always maintain the length at half the radius - // plus the given length * the vehicle speed in inches per second - cylinderLength = level.spawnsystem.vehicle_influencer_lead_seconds; - - up = (0,0,1); - forward = (1,0,0); - cylinder_forward = up; - cylinder_up = forward; - - return AddCylinderInfluencer( level.spawnsystem.eINFLUENCER_TYPE_VEHICLE, - self.origin, - cylinder_forward, - cylinder_up, - vehicleRadius, - cylinderLength, - level.spawnsystem.vehicle_influencer_score, - weapon_team_mask, - "vehicle,s", - get_score_curve_index(level.spawnsystem.vehicle_influencer_score_curve), - 0, - self ); -} - -create_rcbomb_influencers( team ) -{ - if ( !level.teambased ) - other_team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - else - other_team_mask = get_team_mask( getotherteam( team ) ); - - return AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_NORMAL, - self.origin, - level.spawnsystem.rcbomb_influencer_radius, - level.spawnsystem.rcbomb_influencer_score, - other_team_mask, - "rcbomb,r,s", - get_score_curve_index(level.spawnsystem.rcbomb_influencer_score_curve), - 0, - self ); -} - -create_map_placed_influencers() -{ - staticInfluencerEnts = GetEntArray( "mp_uspawn_influencer", "classname" ); - - for ( i = 0; i < staticInfluencerEnts.size; i++ ) - { - staticInfluencerEnt = staticInfluencerEnts[ i ]; - - // don't include ones which have a twar-flag affiliation - // those will be activated by twar code - if (IsDefined(staticInfluencerEnt.script_gameobjectname) && - staticInfluencerEnt.script_gameobjectname=="twar") - { - continue; - } - - create_map_placed_influencer(staticInfluencerEnt); - } -} - -create_map_placed_influencer( influencer_entity, optional_score_override ) -{ - influencer_id = -1; - - if (IsDefined(influencer_entity.script_shape) && - IsDefined(influencer_entity.script_score) && - IsDefined(influencer_entity.script_score_curve)) - { - switch (influencer_entity.script_shape) - { - case "sphere": - { - if (IsDefined(influencer_entity.radius)) - { - if (IsDefined(optional_score_override)) - { - score= optional_score_override; - } - else - { - score= influencer_entity.script_score; - } - - influencer_id = AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - influencer_entity.origin, - influencer_entity.radius, - score, - get_team_mask(influencer_entity.script_team), - "*map_defined", - get_score_curve_index(influencer_entity.script_score_curve) ); - } - else - { - assertmsg( "Radiant-placed sphere spawn influencers require 'radius' parameter" ); - } - break; - } - case "cylinder": - { - if (IsDefined(influencer_entity.radius) && - IsDefined(influencer_entity.height)) - { - if (IsDefined(optional_score_override)) - { - score= optional_score_override; - } - else - { - score= influencer_entity.script_score; - } - - influencer_id = AddCylinderInfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - influencer_entity.origin, - AnglesToForward(influencer_entity.angles), - AnglesToUp(influencer_entity.angles), - influencer_entity.radius, - influencer_entity.height, - score, - get_team_mask(influencer_entity.script_team), - "*map_defined", - get_score_curve_index(influencer_entity.script_score_curve) ); - } - else - { - assertmsg( "Radiant-placed cylinder spawn influencers require 'radius' and 'height' parameters" ); - } - break; - } - default: - { - assertmsg( "Unsupported script_shape value (\""+influencer_entity.script_shape+"\") for unified spawning system static influencer. Supported shapes are \"cylinder\" and \"sphere\"." ); - break; - } - } - } - else - { - assertmsg( "Radiant-placed spawn influencers require 'script_shape', 'script_score' and 'script_score_curve' parameters" ); - } - - return influencer_id; -} - -create_enemy_spawned_influencers( origin, team ) -{ - if ( !level.teambased ) - other_team_mask = level.spawnsystem.iSPAWN_TEAMMASK_FREE; - else - other_team_mask = get_team_mask( getotherteam( team ) ); - - return AddSphereInfluencer( level.spawnsystem.eINFLUENCER_TYPE_ENEMY_SPAWNED, - origin, - level.spawnsystem.enemy_spawned_influencer_radius, - level.spawnsystem.enemy_spawned_influencer_score, - other_team_mask, - "enemy_spawned,r,s", - get_score_curve_index(level.spawnsystem.enemy_spawned_influencer_score_curve), - 7 ); -} - - -updateAllSpawnPoints() -{ - // force spawn points to get precached - gatherSpawnEntities( "allies" ); - gatherSpawnEntities( "axis" ); - - // raise all the spawn points -// raise_all_points_in_height( level.unified_spawn_points[ "allies" ] ); -// raise_all_points_in_height( level.unified_spawn_points[ "axis" ] ); - - clearspawnpoints(); - - if ( level.teambased ) - { - addspawnpoints( "allies", level.unified_spawn_points[ "allies" ].a ); - addspawnpoints( "axis", level.unified_spawn_points[ "axis" ].a ); - } - else - { - addspawnpoints( "free", level.unified_spawn_points[ "allies" ].a ); - addspawnpoints( "free", level.unified_spawn_points[ "axis" ].a ); - } - - // this will remove all spawnpoints for the other gametypes which are not used - remove_unused_spawn_entities(); -} - -initialize_player_spawning_dvars() -{ - reset_dvars = true; - while( 1 ) - { - get_player_spawning_dvars(reset_dvars); - reset_dvars = false; - wait(2); // dont need this to happen frequently - } -} - -get_player_spawning_dvars(reset_dvars) -{ - k_player_height= get_player_height(); - player_height_times_10 = "" + 10.0*k_player_height; - ss = level.spawnsystem; - - player_influencer_radius = 15.0*k_player_height; - player_influencer_score = 150.0; - dog_influencer_radius = 10.0*k_player_height; - dog_influencer_score = 150.0; - - // this controls the original script driven influencer system - ss.script_based_influencer_system = set_dvar_int_if_unset("scr_script_based_influencer_system", "0", reset_dvars); - - // general parameters - // amount of randomness applied to spawning scores - ss.randomness_range = set_dvar_float_if_unset("scr_spawn_randomness_range", "10", reset_dvars); - // bonus applied to spawn points which face the current objective in certain objective-based games - ss.objective_facing_bonus = set_dvar_float_if_unset("scr_spawn_objective_facing_bonus", "50", reset_dvars); - - // strong friend influencers are now a cylinder projected behind the player - //ss.friend_strong_influencer_score = set_dvar_float_if_unset("scr_spawn_friend_strong_influencer_score", "75", reset_dvars); - //ss.friend_strong_influencer_score_curve = set_dvar_if_unset("scr_spawn_friend_strong_influencer_score_curve", "linear", reset_dvars); - //ss.friend_strong_influencer_radius = set_dvar_float_if_unset("scr_spawn_friend_strong_influencer_radius", player_height_times_10, reset_dvars); - //ss.friend_strong_influencer_length = set_dvar_float_if_unset("scr_spawn_friend_strong_influencer_length", player_height_times_10, reset_dvars); - - // weak friend influencers are a sphere about the player - ss.friend_weak_influencer_score = set_dvar_float_if_unset("scr_spawn_friend_weak_influencer_score", "10", reset_dvars); - ss.friend_weak_influencer_score_curve = set_dvar_if_unset("scr_spawn_friend_weak_influencer_score_curve", "steep", reset_dvars); - ss.friend_weak_influencer_radius = set_dvar_float_if_unset("scr_spawn_friend_weak_influencer_radius", player_height_times_10, reset_dvars); - - // enemy player influencer - ss.enemy_influencer_score = set_dvar_float_if_unset("scr_spawn_enemy_influencer_score", "-150", reset_dvars); - ss.enemy_influencer_score_curve = set_dvar_if_unset("scr_spawn_enemy_influencer_score_curve", "steep", reset_dvars); - ss.enemy_influencer_radius = set_dvar_float_if_unset("scr_spawn_enemy_influencer_radius", "" + 30.0*k_player_height, reset_dvars); - - // enemy weapon influencer - //ss.enemy_weapon_influencer_score = set_dvar_float_if_unset("scr_spawn_enemy_weapon_influencer_score", "-100", reset_dvars); - //ss.enemy_weapon_influencer_score_curve = set_dvar_if_unset("scr_spawn_enemy_weapon_influencer_score_curve", "linear", reset_dvars); - //ss.enemy_weapon_influencer_radius = set_dvar_float_if_unset("scr_spawn_enemy_weapon_influencer_radius", "" + 5.0*k_player_height, reset_dvars); - //ss.enemy_weapon_influencer_length = set_dvar_float_if_unset("scr_spawn_enemy_weapon_influencer_length", "" + 25.0*k_player_height, reset_dvars); - - // dead friends - ss.dead_friend_influencer_timeout_seconds = set_dvar_float_if_unset("scr_spawn_dead_friend_influencer_timeout_seconds", "20", reset_dvars); - ss.dead_friend_influencer_count = set_dvar_float_if_unset("scr_spawn_dead_friend_influencer_count", "7", reset_dvars); - ss.dead_friend_influencer_score = set_dvar_float_if_unset("scr_spawn_dead_friend_influencer_score", "-100", reset_dvars); - ss.dead_friend_influencer_score_curve = set_dvar_if_unset("scr_spawn_dead_friend_influencer_score_curve", "steep", reset_dvars); - ss.dead_friend_influencer_radius = set_dvar_float_if_unset("scr_spawn_dead_friend_influencer_radius", player_height_times_10, reset_dvars); - - // moving vehicle influencer - ss.vehicle_influencer_score = set_dvar_float_if_unset("scr_spawn_vehicle_influencer_score", "-50", reset_dvars); - ss.vehicle_influencer_score_curve = set_dvar_if_unset("scr_spawn_vehicle_influencer_score_curve", "linear", reset_dvars); - ss.vehicle_influencer_lead_seconds = set_dvar_float_if_unset("scr_spawn_vehicle_influencer_lead_seconds", "3", reset_dvars); // The influencer will project out this far in time, based on vehicle speed - - // dog influencer - ss.dog_influencer_score = set_dvar_float_if_unset("scr_spawn_dog_influencer_score", "-150", reset_dvars); - ss.dog_influencer_score_curve = set_dvar_if_unset("scr_spawn_dog_influencer_score_curve", "steep", reset_dvars); - ss.dog_influencer_radius = set_dvar_float_if_unset("scr_spawn_dog_influencer_radius", "" + 15.0*k_player_height, reset_dvars); - - // artillery strike influencer - ss.artillery_influencer_score = set_dvar_float_if_unset("scr_spawn_artillery_influencer_score", "-600", reset_dvars); - ss.artillery_influencer_score_curve = set_dvar_if_unset("scr_spawn_artillery_influencer_score_curve", "linear", reset_dvars); - ss.artillery_influencer_radius = set_dvar_float_if_unset("scr_spawn_artillery_influencer_radius", "1200", reset_dvars); - // radius determined @ runtime - - // grenade influencer - ss.grenade_influencer_score = set_dvar_float_if_unset("scr_spawn_grenade_influencer_score", "-300", reset_dvars); - ss.grenade_influencer_score_curve = set_dvar_if_unset("scr_spawn_grenade_influencer_score_curve", "linear", reset_dvars); - ss.grenade_influencer_radius = set_dvar_float_if_unset("scr_spawn_grenade_influencer_radius", "" + 8.0*k_player_height, reset_dvars); - - ss.grenade_endpoint_influencer_score = set_dvar_float_if_unset("scr_spawn_grenade_endpoint_influencer_score", "-300", reset_dvars); - ss.grenade_endpoint_influencer_score_curve = set_dvar_if_unset("scr_spawn_grenade_endpoint_influencer_score_curve", "linear", reset_dvars); - ss.grenade_endpoint_influencer_radius = set_dvar_float_if_unset("scr_spawn_grenade_endpoint_influencer_radius", "" + 8.0*k_player_height, reset_dvars); - - // claymore influencer - ss.claymore_influencer_score = set_dvar_float_if_unset("scr_spawn_claymore_influencer_score", "-450", reset_dvars); - ss.claymore_influencer_score_curve = set_dvar_if_unset("scr_spawn_claymore_influencer_score_curve", "linear", reset_dvars); - ss.claymore_influencer_radius = set_dvar_float_if_unset("scr_spawn_claymore_influencer_radius", "" + 9.0*k_player_height, reset_dvars); - - // napalm influencer - ss.napalm_influencer_score = set_dvar_float_if_unset("scr_spawn_napalm_influencer_score", "-500", reset_dvars); - ss.napalm_influencer_score_curve = set_dvar_if_unset("scr_spawn_napalm_influencer_score_curve", "linear", reset_dvars); - ss.napalm_influencer_radius = set_dvar_float_if_unset("scr_spawn_napalm_influencer_radius", "" + 750, reset_dvars); - - // auto-turret influencer - ss.auto_turret_influencer_score = set_dvar_float_if_unset("scr_spawn_auto_turret_influencer_score", "-650", reset_dvars); - ss.auto_turret_influencer_score_curve = set_dvar_if_unset("scr_spawn_auto_turret_influencer_score_curve", "linear", reset_dvars); - ss.auto_turret_influencer_radius = set_dvar_float_if_unset("scr_spawn_auto_turret_influencer_radius", "" + 1200, reset_dvars); - - // moving vehicle influencer - ss.rcbomb_influencer_score = set_dvar_float_if_unset("scr_spawn_rcbomb_influencer_score", "-200", reset_dvars); - ss.rcbomb_influencer_score_curve = set_dvar_if_unset("scr_spawn_rcbomb_influencer_score_curve", "steep", reset_dvars); - ss.rcbomb_influencer_radius = set_dvar_float_if_unset("scr_spawn_rcbomb_influencer_radius", "" + 25.0*k_player_height, reset_dvars); - - - // enemy spawned influencer - ss.enemy_spawned_influencer_score_curve = set_dvar_if_unset("scr_spawn_enemy_spawned_influencer_score_curve", "constant", reset_dvars); - if( level.teambased ) - { - ss.enemy_spawned_influencer_score = set_dvar_float_if_unset("scr_spawn_enemy_spawned_influencer_score", "-200", reset_dvars); - ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset("scr_spawn_enemy_spawned_influencer_radius", "" + 1100, reset_dvars); - } - else - { - ss.enemy_spawned_influencer_score = set_dvar_float_if_unset("scr_spawn_enemy_spawned_influencer_score", "-100", reset_dvars); - ss.enemy_spawned_influencer_radius = set_dvar_float_if_unset("scr_spawn_enemy_spawned_influencer_radius", "" + 400, reset_dvars); - } - - - // helicopter influencer - ss.helicopter_influencer_score = set_dvar_float_if_unset("scr_spawn_helicopter_influencer_score", "-500", reset_dvars); - ss.helicopter_influencer_score_curve = set_dvar_if_unset("scr_spawn_helicopter_influencer_score_curve", "linear", reset_dvars); - ss.helicopter_influencer_radius = set_dvar_float_if_unset("scr_spawn_helicopter_influencer_radius", "" + 2000, reset_dvars); - ss.helicopter_influencer_length = set_dvar_float_if_unset("scr_spawn_helicopter_influencer_length", "" + 3500, reset_dvars); - - // tvmissile influencer - ss.tvmissile_influencer_score = set_dvar_float_if_unset("scr_spawn_tvmissile_influencer_score", "-400", reset_dvars); - ss.tvmissile_influencer_score_curve = set_dvar_if_unset("scr_spawn_tvmissile_influencer_score_curve", "linear", reset_dvars); - ss.tvmissile_influencer_radius = set_dvar_float_if_unset("scr_spawn_tvmissile_influencer_radius", "" + 2000, reset_dvars); - ss.tvmissile_influencer_length = set_dvar_float_if_unset("scr_spawn_tvmissile_influencer_length", "" + 3000, reset_dvars); - - if (!IsDefined( ss.unifiedSideSwitching )) - ss.unifiedSideSwitching = 1; - - // let the game modes set up their dvars - [[level.gamemodeSpawnDvars]](reset_dvars); - - setspawnpointrandomvariation( ss.randomness_range ); -} - -level_use_unified_spawning( use ) -{ -// if ( use ) -// { -// level.onSpawnPlayerUnified = ::onSpawnPlayer_Unified; -// } -// else -// { -// level.onSpawnPlayerUnified = undefined; -// } -} - -/* ---------- spawn_point */ - -//void - self= player entity for the player who is spawning -onSpawnPlayer_Unified() -{ - prof_begin("onSpawnPlayer_Unified"); - - //println("SPAWN:onSpawnPlayer_Unified()"); - - /# - if (GetDvarInt( #"scr_spawn_point_test_mode")!=0) - { - spawn_point = get_debug_spawnpoint( self ); - self spawn( spawn_point.origin, spawn_point.angles ); - return; - } - #/ - - use_new_spawn_system= true; - initial_spawn= true; - - if (IsDefined(self.uspawn_already_spawned)) - { - initial_spawn= !self.uspawn_already_spawned; - } - - if ( level.useStartSpawns ) - { - use_new_spawn_system= false; - } - - // no respawn points for search & destroy, so don't run the new spawning system (it would needlessly abort on respawn attempt otherwise) - if (level.gametype=="sd") - { - use_new_spawn_system= false; - } - - set_dvar_if_unset("scr_spawn_force_unified", "0"); - - spawnOverride = self maps\mp\_tacticalinsertion::overrideSpawn(); - if (use_new_spawn_system || (GetDvarInt( #"scr_spawn_force_unified")!=0)) - { - if ( !spawnOverride ) - { - // find the most desireable spawn point, and spawn there - spawn_point= getSpawnPoint(self); - - if (IsDefined(spawn_point)) - { - // create a negative influencer for the opposition here - create_enemy_spawned_influencers( spawn_point.origin, self.pers["team"] ); - - self spawn( spawn_point.origin, spawn_point.angles ); - } - else - { - println("ERROR: unable to locate a usable spawn point for player"); - maps\mp\gametypes\_callbacksetup::AbortLevel(); - } - } - self.lastspawntime = gettime(); - self enable_player_influencers( true ); - } - else if ( !spawnOverride ) - { - // old spawning logic - [[level.onSpawnPlayer]](); - } - - // remember that the player has initially spawned - self.uspawn_already_spawned= true; - - prof_end("onSpawnPlayer_Unified"); - - return; -} - -// spawnPoint: .origin, .angles -getSpawnPoint( - player_entity) -{ - if (level.teambased ) - { - point_team = player_entity.pers["team"]; - influencer_team = player_entity.pers["team"]; - } - else - { - point_team = "free"; - influencer_team = "free"; - } - - if (level.teambased && IsDefined(game["switchedsides"]) && game["switchedsides"] && level.spawnsystem.unifiedSideSwitching) - { - point_team = GetOtherTeam(point_team); - } - - best_spawn_entity = get_best_spawnpoint( point_team, influencer_team, player_entity ); - - player_entity.last_spawn_origin = best_spawn_entity.origin; - - return best_spawn_entity; -} - -get_debug_spawnpoint( player ) -{ - if (level.teambased ) - { - team = player.pers["team"]; - } - else - { - team = "free"; - } - - index = level.test_spawn_point_index; - level.test_spawn_point_index++; - - if ( team == "free" ) - { - spawn_counts = level.unified_spawn_points[ "allies" ].a.size; - spawn_counts += level.unified_spawn_points[ "axis" ].a.size; - - if (level.test_spawn_point_index >= spawn_counts) - { - level.test_spawn_point_index= 0; - } - - if (level.test_spawn_point_index >= level.unified_spawn_points[ "allies" ].a.size) - { - return level.unified_spawn_points[ "axis" ].a[level.test_spawn_point_index - level.unified_spawn_points[ "allies" ].a.size]; - } - else - { - return level.unified_spawn_points[ "allies" ].a[level.test_spawn_point_index]; - } - } - else - { - if (level.test_spawn_point_index >= level.unified_spawn_points[ team ].a.size) - { - level.test_spawn_point_index= 0; - } - - return level.unified_spawn_points[ team ].a[level.test_spawn_point_index]; - - } -} - -get_best_spawnpoint( point_team, influencer_team, player ) -{ - scored_spawn_points = getsortedspawnpoints( point_team, influencer_team, player ); - assert(scored_spawn_points.size > 0 ); - - if (level.teambased ) - { - other_team = GetOtherTeam( player.pers["team"] ); - } - else - { - other_team = "free"; - } - - spawnid = getplayerspawnid( player ); - - best_spawn_no_sight = undefined; - - prof_begin("get_best_spawnpoint__"); - for (i = 0 ; i < scored_spawn_points.size; i++) - { - scored_spawn = scored_spawn_points[i]; - if (PositionWouldTelefrag(scored_spawn_points[i].origin)) - { - bbPrint( "mpspawnpointsignored: reason %s spawninstanceid %i x %f y %f z %f", "telefrag", spawnid, scored_spawn_points[i].origin ); - continue; - } - - if ( !isdefined(best_spawn_no_sight) ) - { - best_spawn_no_sight = scored_spawn_points[i]; - } - - /* - // RF, removed this by request. Leaving it around in case we decide to revert back to it. - if ( isdefined( player.last_spawn_origin ) ) - { - if ( distance( player.last_spawn_origin, scored_spawn.origin ) < 16 ) - { - bbPrint( "mpspawnpointsignored: reason %s spawninstanceid %i x %f y %f z %f", "repetitive spawn", spawnid, scored_spawn_points[i].origin ); - continue; - } - } - */ - - if ( level.spawn_visibility_check_max <= i ) - { - bbPrint( "mpspawnpointsused: reason %s spawninstanceid %i x %f y %f z %f", "reached max vis checks", spawnid, scored_spawn_points[i].origin ); - RecordUsedSpawnPoint( player, point_team, scored_spawn_points[i].origin ); - - return best_spawn_no_sight; - } - - if ( isspawnpointvisible(scored_spawn_points[i].origin, scored_spawn_points[i].angles, other_team, player ) ) - { - bbPrint( "mpspawnpointsignored: reason %s spawninstanceid %i x %f y %f z %f", "enemy visible", spawnid, scored_spawn_points[i].origin ); - continue; - } - - prof_end("get_best_spawnpoint__"); - - bbPrint( "mpspawnpointsused: reason %s spawninstanceid %i x %f y %f z %f", "passed all checks", spawnid, scored_spawn_points[i].origin ); - - RecordUsedSpawnPoint( player, point_team, scored_spawn_points[i].origin ); - - return scored_spawn_points[i]; - } - - prof_end("get_best_spawnpoint__"); - - // could not find anything - if( isdefined( best_spawn_no_sight ) ) - { - bbPrint( "mpspawnpointsused: reason %s spawninstanceid %i x %f y %f z %f", "all points checked - best_spawn_no_sight used", spawnid, best_spawn_no_sight.origin ); - - RecordUsedSpawnPoint( player, point_team, best_spawn_no_sight.origin ); - - return best_spawn_no_sight; - } - else - { - bbPrint( "mpspawnpointsused: reason %s spawninstanceid %i x %f y %f z %f", "all points checked - first point used", spawnid, scored_spawn_points[0].origin ); - - RecordUsedSpawnPoint( player, point_team, scored_spawn_points[0].origin ); - - return scored_spawn_points[0]; - } -} - -// struct.a[] = a contains spawn entities -gatherSpawnEntities( player_team ) -{ - // use cached spawn points when they are available - if ( !IsDefined( level.unified_spawn_points ) ) - { - level.unified_spawn_points = []; - } - else - { - if ( IsDefined( level.unified_spawn_points[ player_team ] ) ) - { - return level.unified_spawn_points[ player_team ]; - } - } - - spawn_entities_s= spawn_array_struct(); - - // We grab both new & old spawn points here. The idea is - // that there are alot of maps already setup & designers are not - // going to want to lay down new spawn points. So, just use the existing points - // for each game mode. - // For new maps, designers now only have to lay down one set of points - // instead of one set *per game mode* (the new unified spawn points). - // This system here allows the use of either or both. - - // get placed unified spawn points (the new world order) - spawn_entities_s.a= GetEntArray( "mp_uspawn_point", "classname" ); - if ( !IsDefined(spawn_entities_s.a)) - { - spawn_entities_s.a= []; - } - // also gather any old-style spawn points (the old world order) - legacy_spawn_points= maps\mp\gametypes\_spawnlogic::getTeamSpawnPoints(player_team); - for (legacy_spawn_index= 0; legacy_spawn_index game["roundswon"]["allies"] ) - winner = "axis"; - else - winner = "allies"; - - // This is not required as _globallogic_score.gsc does this anyway. - // Was causing the issue of it getting executed twice. - //maps\mp\gametypes\_globallogic_score::updateWinLossStats( winner ); - - return winner; -} - -onSpawnPlayerUnified() -{ - self.isFlagCarrier = false; - self ClearClientFlag( level.const_flag_ctfcarrier ); - - maps\mp\gametypes\_spawning::onSpawnPlayer_Unified(); -} - -onSpawnPlayer() -{ - self.isFlagCarrier = false; - self ClearClientFlag( level.const_flag_ctfcarrier ); - - spawnteam = self.pers["team"]; - if ( game["switchedsides"] ) - spawnteam = getOtherTeam( spawnteam ); - - if ( level.useStartSpawns ) - { - if (spawnteam == "axis") - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(level.spawn_axis_start); - else - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(level.spawn_allies_start); - } - else - { - if (spawnteam == "axis") - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam(level.spawn_axis); - else - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam(level.spawn_allies); - } - - assert( isDefined(spawnpoint) ); - - self spawn( spawnPoint.origin, spawnPoint.angles, "ctf" ); -} - -updateGametypeDvars() -{ - level.idleFlagReturnTime = dvarFloatValue( "idleflagreturntime", 30, 0, 120 ); - level.flagRespawnTime = dvarIntValue( "flagrespawntime", 0, 0, 120 ); - level.touchReturn = dvarIntValue( "touchreturn", 0, 0, 1 ); - level.enemyCarrierVisible = dvarIntValue( "enemycarriervisible", 0, 0, 2 ); - - level.teamKillPenaltyMultiplier = dvarFloatValue( "teamkillpenalty", 2, 0, 10 ); - level.teamKillScoreMultiplier = dvarFloatValue( "teamkillscore", 20, 0, 40 ); - - // do not allow both a idleFlagReturnTime of forever and no touch return - // at the same time otherwise the game is unplayable - if ( level.idleFlagReturnTime == 0 && level.touchReturn == 0) - { - level.touchReturn = 1; - } -} - -createFlag( trigger ) -{ - if ( isDefined( trigger.target ) ) - { - visuals[0] = getEnt( trigger.target, "targetname" ); - } - else - { - visuals[0] = spawn( "script_model", trigger.origin ); - visuals[0].angles = trigger.angles; - } - - entityTeam = trigger.script_team; - if ( game["switchedsides"] ) - entityTeam = getOtherTeam( entityTeam ); - - visuals[0] setModel( game["flagmodels"][entityTeam] ); - visuals[0] SetTeam( entityTeam ); - - flag = maps\mp\gametypes\_gameobjects::createCarryObject( entityTeam, trigger, visuals, (0,0,100) ); - flag maps\mp\gametypes\_gameobjects::allowCarry( "enemy" ); - flag maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - flag maps\mp\gametypes\_gameobjects::setVisibleCarrierModel( game["carry_flagmodels"][entityTeam] ); - flag maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDefend2D ); - flag maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDefend3D ); - flag maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCapture2D ); - flag maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCapture3D ); - flag maps\mp\gametypes\_gameobjects::setCarryIcon( game["carry_icon"][entityTeam] ); - - if ( level.enemyCarrierVisible == 2 ) - { - flag.objIDPingFriendly = true; - } - flag.allowWeapons = true; - flag.onPickup = ::onPickup; - flag.onPickupFailed = ::onPickup; - flag.onDrop = ::onDrop; - flag.onReset = ::onReset; - - if ( level.idleFlagReturnTime > 0 ) - { - flag.autoResetTime = level.idleFlagReturnTime; - } - else - { - flag.autoResetTime = undefined; - } - - return flag; -} - -createFlagZone( trigger ) -{ - visuals = []; - - entityTeam = trigger.script_team; - if ( game["switchedsides"] ) - entityTeam = getOtherTeam( entityTeam ); - - flagZone = maps\mp\gametypes\_gameobjects::createUseObject( entityTeam, trigger, visuals, (0,0,100) ); - flagZone maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - flagZone maps\mp\gametypes\_gameobjects::setUseTime( 0 ); - flagZone maps\mp\gametypes\_gameobjects::setUseText( &"MP_CAPTURING_FLAG" ); - //flagZone maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - flagZone maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - //'Taken is currently not in use. - //flagZone maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconTakenFriendly3D ); - //flagZone maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconTakenFriendly2D ); - //flagZone maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconTakenEnemy3D ); - //flagZone maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconTakenEnemy2D ); - - enemyTeam = getOtherTeam( entityTeam ); - flagZone maps\mp\gametypes\_gameobjects::setKeyObject( level.teamFlags[enemyTeam] ); - flagZone.onUse = ::onCapture; - - flag = level.teamFlags[entityTeam]; - flag.flagBase = flagZone; - flagZone.flag = flag; - - traceStart = trigger.origin + (0,0,32); - traceEnd = trigger.origin + (0,0,-32); - trace = bulletTrace( traceStart, traceEnd, false, undefined ); - - upangles = vectorToAngles( trace["normal"] ); - flagZone.baseeffectforward = anglesToForward( upangles ); - flagZone.baseeffectright = anglesToRight( upangles ); - - flagZone.baseeffectpos = trace["position"]; - - flagZone thread resetFlagBaseEffect(); - - flagZone createFlagSpawnInfluencer( entityTeam ); - - return flagZone; -// flag resetIcons(); -} - -createFlagHint( team, origin ) -{ - radius = 128; - height = 64; - - trigger = spawn("trigger_radius", origin, 0, radius, height); - trigger setHintString( &"MP_CTF_CANT_CAPTURE_FLAG" ); - trigger setcursorhint("HINT_NOICON"); - trigger.original_origin = origin; - - trigger turn_off(); - - return trigger; -} - -ctf() -{ - level.flags = []; - level.teamFlags = []; - level.flagZones = []; - level.teamFlagZones = []; - - level.iconCapture3D = "waypoint_grab_red"; - level.iconCapture2D = "waypoint_grab_red"; - level.iconDefend3D = "waypoint_defend_flag"; - level.iconDefend2D = "waypoint_defend_flag"; - //level.iconTakenFriendly3D = "waypoint_taken_green"; - //level.iconTakenFriendly2D = "compass_waypoint_taken_friendly"; - //level.iconTakenEnemy3D = "waypoint_taken_red"; - //level.iconTakenEnemy2D = "compass_waypoint_taken_enemy"; - level.iconDropped3D = "waypoint_defend_flag"; - level.iconDropped2D = "waypoint_defend_flag"; - level.iconReturn3D = "waypoint_return_flag"; - level.iconReturn2D = "waypoint_return_flag"; - level.iconBase3D = "waypoint_defend_flag"; - level.iconEscort3D = "waypoint_escort"; - level.iconEscort2D = "waypoint_escort"; - level.iconKill3D = "waypoint_kill"; - level.iconKill2D = "waypoint_kill"; - level.iconWaitForFlag3D = "waypoint_waitfor_flag"; - - precacheShader( level.iconCapture3D ); - precacheShader( level.iconCapture2D ); - - precacheShader( level.iconDefend3D ); - precacheShader( level.iconDefend2D ); - - //precacheShader( level.iconTakenFriendly3D ); - //precacheShader( level.iconTakenFriendly2D ); - - //precacheShader( level.iconTakenEnemy3D ); - //precacheShader( level.iconTakenEnemy2D ); - - precacheShader( level.iconDropped3D ); - precacheShader( level.iconDropped2D ); - - precacheShader( level.iconBase3D ); - - precacheShader( level.iconReturn3D ); - precacheShader( level.iconReturn2D ); - - precacheShader( level.iconEscort3D ); - precacheShader( level.iconEscort2D ); - - precacheShader( level.iconKill3D ); - precacheShader( level.iconKill2D ); - - precacheShader( level.iconWaitForFlag3D ); - -// flagBaseFX = []; - -// flagBaseFX["marines"] = "misc/fx_ui_flagbase_blue"; -// flagBaseFX["nva"] = "misc/fx_ui_flagbase_red"; -// flagBaseFX["tropas"] = "misc/fx_ui_flagbase_red"; -// flagBaseFX["specops"] = "misc/fx_ui_flagbase_gold"; -// flagBaseFX["rebels"] = "misc/fx_ui_flagbase_gold"; -// flagBaseFX["russian"] = "misc/fx_ui_flagbase_orange"; - - level.flagBaseFXid = []; - level.flagBaseFXid[ "allies" ] = loadfx( "misc/fx_ui_flagbase_gold_t5" ); - level.flagBaseFXid[ "axis" ] = loadfx( "misc/fx_ui_flagbase_gold_t5" ); - - flag_triggers = getEntArray( "ctf_flag_pickup_trig", "targetname" ); - if ( !isDefined( flag_triggers ) || flag_triggers.size != 2) - { - maps\mp\_utility::error("Not enough ctf_flag_pickup_trig triggers found in map. Need two."); - return; - } - - for ( index = 0; index < flag_triggers.size; index++ ) - { - trigger = flag_triggers[index]; - - flag = createFlag( trigger ); - - team = flag maps\mp\gametypes\_gameobjects::getOwnerTeam(); - level.flags[level.flags.size] = flag; - level.teamFlags[team] = flag; - - } - - flag_zones = getEntArray( "ctf_flag_zone_trig", "targetname" ); - if ( !isDefined( flag_zones ) || flag_zones.size != 2) - { - maps\mp\_utility::error("Not enough ctf_flag_zone_trig triggers found in map. Need two."); - return; - } - - for ( index = 0; index < flag_zones.size; index++ ) - { - trigger = flag_zones[index]; - - flagZone = createFlagZone( trigger ); - - team = flagZone maps\mp\gametypes\_gameobjects::getOwnerTeam(); - level.flagZones[level.flagZones.size] = flagZone; - level.teamFlagZones[team] = flagZone; - - level.flagHints[team] = createFlagHint( team, trigger.origin ); - - facing_angle = GetDvarInt( #"scr_ctf_spawnPointFacingAngle"); - - // the opposite team will want to face this point - if ( team == "axis" ) - { - setspawnpointsbaseweight( level.spawnsystem.iSPAWN_TEAMMASK_ALLIES, trigger.origin, facing_angle, level.spawnsystem.objective_facing_bonus); - } - else - { - setspawnpointsbaseweight( level.spawnsystem.iSPAWN_TEAMMASK_AXIS, trigger.origin, facing_angle, level.spawnsystem.objective_facing_bonus); - } - } - - // once all the flags have been registered with the game, - // give each spawn point a baseline score for each objective flag, - // based on whether or not player will be looking in the direction of that flag upon spawning - //generate_baseline_spawn_point_scores(); - - createReturnMessageElems(); - - //precacheShader( level.icon2D["axis"] ); - //precacheShader( level.icon2D["allies"] ); -} - -//Runs each round, as function as restarted at the start of every round. -//Hides the flag status icons and the 2D and 3D icons from the player's view -ctf_icon_hide() -{ - level waittill ( "game_ended" ); - - level.teamFlags["allies"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - level.teamFlags["axis"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); -} - -removeInfluencers() -{ - if ( isDefined( self.spawn_influencer_enemy_carrier ) ) - { - removeinfluencer( self.spawn_influencer_enemy_carrier ); - self.spawn_influencer_enemy_carrier = undefined; - } - if ( isDefined( self.spawn_influencer_friendly_carrier ) ) - { - removeinfluencer( self.spawn_influencer_friendly_carrier ); - self.spawn_influencer_friendly_carrier = undefined; - } - if ( isDefined( self.spawn_influencer_dropped ) ) - { - removeinfluencer( self.spawn_influencer_dropped ); - self.spawn_influencer_dropped = undefined; - } -} - -onDrop( player ) -{ - if ( isDefined( player ) ) - { - //player maps\mp\gametypes\_globallogic_audio::set_music_on_player( "SILENT", false, true ); - //player.isFlagCarrier = false; - player deleteBaseIcon(); - player ClearClientFlag( level.const_flag_ctfcarrier ); - } - - team = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - otherTeam = getOtherTeam( team ); - - self.visuals[0] SetClientFlag( level.const_flag_flag_away ); - - if ( level.touchReturn ) - { - self maps\mp\gametypes\_gameobjects::allowCarry( "any" ); - level.flagHints[otherTeam] turn_off(); - } - - if ( isDefined( player ) ) - { - printAndSoundOnEveryone( team, "none", &"", &"", "mp_war_objective_lost", "", "" ); - - level thread maps\mp\_popups::DisplayTeamMessageToTeam( &"MP_FRIENDLY_FLAG_DROPPED", player, team ); - level thread maps\mp\_popups::DisplayTeamMessageToTeam( &"MP_ENEMY_FLAG_DROPPED", player, otherTeam ); - } - else - { - printAndSoundOnEveryone( team, "none", &"", &"", "mp_war_objective_lost", "", "" ); - } - - if( getTime() - level.lastDialogTime > 1500 ) - { - maps\mp\gametypes\_globallogic_audio::leaderDialog( "wedrop_flag", otherTeam ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "theydrop_flag", team ); - level.lastDialogTime = getTime(); - } - - if ( isDefined( player ) ) - player logString( team + " flag dropped" ); - else - logString( team + " flag dropped" ); - - if ( isDefined( player ) ) - { - player playLocalSound("mpl_flag_drop_plr"); - // Set MUSCSTATE to return to previous - player thread maps\mp\gametypes\_globallogic_audio::return_music_state_player(); - } - - - maps\mp\gametypes\_globallogic_audio::play_2d_on_team( "mpl_flagdrop_sting_friend", otherTeam ); - maps\mp\gametypes\_globallogic_audio::play_2d_on_team( "mpl_flagdrop_sting_enemy", team ); - - if ( level.touchReturn ) - { - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconReturn3D ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconReturn2D ); - } - else - { - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDropped3D ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDropped2D ); - } - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCapture3D ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCapture2D ); - - thread maps\mp\_utility::playSoundOnPlayers( game["flag_dropped_sound"], game["attackers"] ); - - self thread returnFlagAfterTimeMsg( level.idleFlagReturnTime ); - - // remove carrier influencers - if ( isDefined( player ) ) - { - self removeInfluencers(); - } - else - { // influencers on the player have already been freed - self.spawn_influencer_friendly_carrier = undefined; - self.spawn_influencer_enemy_carrier = undefined; - } - - - // create new influencers on the flag - ss = level.spawnsystem; - player_team_mask = maps\mp\gametypes\_spawning::get_team_mask( otherTeam ); // this is the player that has the flag's team - enemy_team_mask = maps\mp\gametypes\_spawning::get_team_mask( team ); // and his enemies - - if ( isDefined( player ) ) - flag_origin = player.origin; - else - flag_origin = self.curorigin; - - self.spawn_influencer_dropped = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - flag_origin, - ss.ctf_dropped_influencer_radius, - ss.ctf_dropped_influencer_score, - player_team_mask|enemy_team_mask, - "ctf_flag_dropped,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ss.ctf_dropped_influencer_score_curve), - level.idleFlagReturnTime, - self.trigger ); -} - - -onPickup( player ) -{ - if ( isdefined( self.spawn_influencer_dropped ) ) - { - removeinfluencer( self.spawn_influencer_dropped ); - self.spawn_influencer_dropped = undefined; - } - - player maps\mp\gametypes\_persistence::statAddWithGameType( "PICKUPS", 1 ); - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "pickup", player ); - - - if ( level.touchReturn ) - { - self maps\mp\gametypes\_gameobjects::allowCarry( "enemy" ); - } - - // always clear influencers. we'll create new ones if it's been picked up by an enemy. - self removeInfluencers(); - - team = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - otherTeam = getOtherTeam( team ); - - self clearReturnFlagHudElems(); - - if ( isDefined( player ) && player.pers["team"] == team ) - { - self notify("picked_up"); - - printAndSoundOnEveryone( team, "none", &"", &"", "mp_obj_returned", "", "" ); - - if( isdefined(player.pers["returns"]) ) - { - player.pers["returns"]++; - player.returns = player.pers["returns"]; - } - - player maps\mp\_medals::flagReturn(); - - player maps\mp\gametypes\_persistence::statAddWithGameType( "RETURNS", 1 ); - - level thread maps\mp\_popups::DisplayTeamMessageToTeam( &"MP_FRIENDLY_FLAG_RETURNED", player, team ); - level thread maps\mp\_popups::DisplayTeamMessageToTeam( &"MP_ENEMY_FLAG_RETURNED", player, otherTeam ); - - self.visuals[0] ClearClientFlag( level.const_flag_flag_away ); - - // want to return the flag here - self returnFlag(); - self maps\mp\gametypes\_gameobjects::returnHome(); - if ( isDefined( player ) ) - player logString( team + " flag returned" ); - else - logString( team + " flag returned" ); - - if ( !level.teamFlags[ "allies" ] isHome() && !level.teamFlags[ "axis" ] isHome() ) - { - players = Get_Players(); - - for(i=0; i < players.size; i++) - { - //TODO: Add proper 'if' checks OR change to a team hud element - players[i].ctfBaseIcon setShader( level.iconWaitForFlag3D, level.objPointSize, level.objPointSize ); - players[i].ctfBaseIcon setWaypoint( true, level.iconWaitForFlag3D ); - } - } - base_3d_icon_update(); - return; - } - else - { - player maps\mp\_medals::flagRunner(); - - printAndSoundOnEveryone( otherteam, team, &"", &"", "mp_obj_taken", "mp_enemy_obj_taken", "" ); - - level thread maps\mp\_popups::DisplayTeamMessageToTeam( &"MP_FRIENDLY_FLAG_TAKEN", player, team ); - level thread maps\mp\_popups::DisplayTeamMessageToTeam( &"MP_ENEMY_FLAG_TAKEN", player, otherTeam ); - - if( getTime() - level.lastDialogTime > 1500 ) - { - maps\mp\gametypes\_globallogic_audio::leaderDialog( "wetake_flag", otherTeam ); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "theytake_flag", team ); - level.lastDialogTime = getTime(); - } - - player.isFlagCarrier = true; - player playLocalSound("mpl_flag_pickup_plr"); - player SetClientFlag( level.const_flag_ctfcarrier ); - - //player thread maps\mp\gametypes\_globallogic_audio::set_next_music_state( "SUSPENSE", 4 ); - maps\mp\gametypes\_globallogic_audio::play_2d_on_team( "mpl_flagget_sting_friend", otherTeam ); - maps\mp\gametypes\_globallogic_audio::play_2d_on_team( "mpl_flagget_sting_enemy", team ); - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_WE_TAKE", otherTeam, false, false, 5 ); - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_THEY_TAKE", team, false, false, 5 ); - //delay setting music state for the flag carrier. - //thread OnPickupMusicState ( player ); - - - if ( level.enemyCarrierVisible ) - { - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconKill2D ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconKill3D ); - } - else - { - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "enemy" ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconKill2D ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconKill3D ); - } - - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconEscort2D ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconEscort3D ); - - player thread claim_trigger( level.flagHints[otherTeam] ); - - player setupBaseIcon(); - player updateBaseIcon(); - - update_hints(); - - player logString( team + " flag taken" ); - - ss = level.spawnsystem; - player_team_mask = maps\mp\gametypes\_spawning::get_team_mask( otherTeam ); // this is the player that has the flag's team - enemy_team_mask = maps\mp\gametypes\_spawning::get_team_mask( team ); // and his enemies - - self.spawn_influencer_enemy_carrier = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - player.origin, - ss.ctf_enemy_carrier_influencer_radius, - ss.ctf_enemy_carrier_influencer_score, - enemy_team_mask, - "ctf_flag_enemy_carrier,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ss.ctf_enemy_carrier_influencer_score_curve), - 0, - player ); - - self.spawn_influencer_friendly_carrier = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - player.origin, - ss.ctf_friendly_carrier_influencer_radius, - ss.ctf_friendly_carrier_influencer_score, - player_team_mask, - "ctf_flag_friendly_carrier,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ss.ctf_friendly_carrier_influencer_score_curve), - 0, - player ); - - } - -} -OnPickupMusicState ( player ) -{ - self endon( "disconnect" ); - self endon( "death" ); - - // wait 6 seconds and see if the player still has the flag. - wait (6); - if (player.isFlagCarrier) - { - player thread maps\mp\gametypes\_globallogic_audio::set_music_on_player( "SUSPENSE", false, false); - } -} -isHome() -{ - if ( isDefined( self.carrier ) ) - return false; - - if ( self.curOrigin != self.trigger.baseOrigin ) - return false; - - return true; -} - -returnFlag() -{ - team = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - otherTeam = level.otherTeam[team]; - - maps\mp\gametypes\_globallogic_audio::play_2d_on_team( "mpl_flagreturn_sting", team ); - maps\mp\gametypes\_globallogic_audio::play_2d_on_team( "mpl_flagreturn_sting", otherTeam ); - - level.teamFlagZones[otherTeam] maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - level.teamFlagZones[otherTeam] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - - update_hints(); - - if ( level.touchReturn ) - { - self maps\mp\gametypes\_gameobjects::allowCarry( "enemy" ); - } - self maps\mp\gametypes\_gameobjects::returnHome(); - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - //TODO: Add 2D Icons - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDefend3D ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDefend2D ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCapture3D ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCapture2D ); - - if( getTime() - level.lastDialogTime > 1500 ) - { - maps\mp\gametypes\_globallogic_audio::leaderDialog( "wereturn_flag", team ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "theyreturn_flag", otherTeam ); - level.lastDialogTime = getTime(); - } -} - - -onCapture( player ) -{ - team = player.pers["team"]; - enemyTeam = getOtherTeam( team ); - - playerTeamsFlag = level.teamFlags[team]; - - // is players team flag away from base? - // if ( playerTeamsFlag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() && level.touchReturn ) - if ( playerTeamsFlag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() ) - { - return; - } - - printAndSoundOnEveryone( team, enemyTeam, &"", &"", "mp_obj_captured", "mp_enemy_obj_captured", "" ); - - game["challenge"][team]["capturedFlag"] = true; - - if( isdefined(player.pers["captures"]) ) - { - player.pers["captures"]++; - player.captures = player.pers["captures"]; - } - - player maps\mp\_medals::flagCapture(); - player maps\mp\gametypes\_persistence::statAddWithGameType( "CAPTURES", 1 ); - - level thread maps\mp\_popups::DisplayTeamMessageToTeam( &"MP_ENEMY_FLAG_CAPTURED", player, team ); - level thread maps\mp\_popups::DisplayTeamMessageToTeam( &"MP_FRIENDLY_FLAG_CAPTURED", player, enemyTeam ); - -// thread playSoundOnPlayers( "mus_ctf_score"+"_"+level.teamPostfix[team] ); -// Changing to Music system - if( getTime() - level.lastDialogTime > 1500 ) - { - maps\mp\gametypes\_globallogic_audio::leaderDialog( "wecap_flag", team ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "theycap_flag", enemyTeam ); - level.lastDialogTime = getTime(); - } - - maps\mp\gametypes\_globallogic_audio::play_2d_on_team( "mpl_flagcapture_sting_enemy", enemyTeam ); - maps\mp\gametypes\_globallogic_audio::play_2d_on_team( "mpl_flagcapture_sting_friend", team ); - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_WE_SCORE", team, false, false ); - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_THEY_SCORE", enemyTeam, false, false ); - - player thread giveFlagCaptureXP( player ); - - player logString( enemyTeam + " flag captured" ); - - flag = player.carryObject; - - flag.dontAnnounceReturn = true; - flag maps\mp\gametypes\_gameobjects::returnHome(); - flag.dontAnnounceReturn = undefined; - - level.teamFlags[level.otherTeam[team]] maps\mp\gametypes\_gameobjects::allowCarry( "enemy" ); - level.teamFlags[level.otherTeam[team]] maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - level.teamFlags[level.otherTeam[team]] maps\mp\gametypes\_gameobjects::returnHome(); - level.teamFlagZones[level.otherTeam[team]] maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - - player.isFlagCarrier = false; - player deleteBaseIcon(); - player ClearClientFlag( level.const_flag_ctfcarrier ); - - // execution will stop on this line on last flag cap of a level - [[level._setTeamScore]]( team, [[level._getTeamScore]]( team ) + 1 ); - - flag removeInfluencers(); - - // last round in a best of match is one flag cap only - if ( waslastround() ) - { - ctf_endGame( team, &"MP_CTF_OVERTIME_WIN" ); - } -} - -ctf_endGame( winningTeam, endReasonText ) -{ - [[level._setTeamScore]]( "allies", game["roundswon"]["allies"] ); - [[level._setTeamScore]]( "axis", game["roundswon"]["axis"] ); - [[level._setTeamScore]]( winningTeam, [[level._getTeamScore]]( winningTeam ) + 1 ); - - thread maps\mp\gametypes\_globallogic::endGame( winningTeam, endReasonText ); -} - -giveFlagCaptureXP( player ) -{ - wait .05; - //player thread [[level.onXPEvent]]( "capture" ); - maps\mp\gametypes\_globallogic_score::givePlayerScore( "capture", player ); -} - -onReset() -{ - update_hints(); - - team = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - otherTeam = level.otherTeam[team]; - - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", level.iconDefend3D ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", level.iconDefend2D ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", level.iconCapture3D ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", level.iconCapture2D ); - - if ( level.touchReturn ) - { - self maps\mp\gametypes\_gameobjects::allowCarry( "enemy" ); - } - - level.teamFlagZones[team] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - level.teamFlagZones[team] maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - - self.visuals[0] ClearClientFlag( level.const_flag_flag_away ); - self clearReturnFlagHudElems(); - - base_3d_icon_update(); -} - -getOtherFlag( flag ) -{ - if ( flag == level.flags[0] ) - return level.flags[1]; - - return level.flags[0]; -} - -onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ) -{ - inFlagZone = false; - defendedFlag = false; - offendedFlag = false; - flagTeam = "invalidTeam"; - if ( isdefined( attacker ) && isplayer( attacker ) && ( !isdefined( sWeapon ) || !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) ) - { - for ( index = 0; index < level.flags.size; index++ ) - { - if ( isdefined( level.flags[index].carrier ) ) - flagOrigin = level.flags[index].carrier.origin; - else - flagOrigin = level.flags[index].curorigin; - - dist = Distance2d(self.origin, flagOrigin); - if ( dist < level.defaultOffenseRadius ) - { - inFlagZone = true; - if ( level.flags[index].ownerteam == attacker.pers["team"] ) - defendedFlag = true; - else - offendedFlag = true; - } - dist = Distance2d(attacker.origin, flagOrigin); - if ( dist < level.defaultOffenseRadius ) - { - inFlagZone = true; - if ( level.flags[index].ownerteam == attacker.pers["team"] ) - defendedFlag = true; - else - offendedFlag = true; - } - } - - if ( inFlagZone && isPlayer( attacker ) && attacker.pers["team"] != self.pers["team"] ) - { - if ( defendedFlag ) - { - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "DEFENDS", 1 ); - attacker maps\mp\_medals::defense( sWeapon ); - } - if ( offendedFlag ) - { - - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "OFFENDS", 1 ); - attacker maps\mp\_medals::offense( sWeapon ); - } - } - } - - if ( !isDefined( self.isFlagCarrier ) || !self.isFlagCarrier ) - return; - - if ( isDefined( attacker ) && isPlayer( attacker ) && attacker.pers["team"] != self.pers["team"] ) - { - attacker thread [[level.onXPEvent]]( "kill_carrier" ); - maps\mp\gametypes\_globallogic_score::givePlayerScore( "kill_carrier", attacker ); - attacker thread maps\mp\_challenges::killedFlagCarrier(); - } -} - -createReturnMessageElems() -{ - level.ReturnMessageElems = []; - - level.ReturnMessageElems["allies"]["axis"] = createServerTimer( "objective", 1.4, "allies" ); - level.ReturnMessageElems["allies"]["axis"] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 ); - level.ReturnMessageElems["allies"]["axis"].label = &"MP_ENEMY_FLAG_RETURNING_IN"; - level.ReturnMessageElems["allies"]["axis"].alpha = 0; - level.ReturnMessageElems["allies"]["axis"].archived = false; - level.ReturnMessageElems["allies"]["allies"] = createServerTimer( "objective", 1.4, "allies" ); - level.ReturnMessageElems["allies"]["allies"] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 20 ); - level.ReturnMessageElems["allies"]["allies"].label = &"MP_YOUR_FLAG_RETURNING_IN"; - level.ReturnMessageElems["allies"]["allies"].alpha = 0; - level.ReturnMessageElems["allies"]["allies"].archived = false; - - level.ReturnMessageElems["axis"]["allies"] = createServerTimer( "objective", 1.4, "axis" ); - level.ReturnMessageElems["axis"]["allies"] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 ); - level.ReturnMessageElems["axis"]["allies"].label = &"MP_ENEMY_FLAG_RETURNING_IN"; - level.ReturnMessageElems["axis"]["allies"].alpha = 0; - level.ReturnMessageElems["axis"]["allies"].archived = false; - level.ReturnMessageElems["axis"]["axis"] = createServerTimer( "objective", 1.4, "axis" ); - level.ReturnMessageElems["axis"]["axis"] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 20 ); - level.ReturnMessageElems["axis"]["axis"].label = &"MP_YOUR_FLAG_RETURNING_IN"; - level.ReturnMessageElems["axis"]["axis"].alpha = 0; - level.ReturnMessageElems["axis"]["axis"].archived = false; -} - -returnFlagAfterTimeMsg( time ) -{ - if ( level.touchReturn ) - return; - - self notify("returnFlagAfterTimeMsg"); - self endon("returnFlagAfterTimeMsg"); - - result = returnFlagHudElems( time ); - - self removeInfluencers(); - self clearReturnFlagHudElems(); - - if ( !isdefined( result ) ) // returnFlagHudElems hit an endon - return; - -// self returnFlag(); -} - -returnFlagHudElems( time ) -{ - self endon("picked_up"); - level endon("game_ended"); - - ownerteam = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - - assert( !level.ReturnMessageElems["axis"][ownerteam].alpha ); - level.ReturnMessageElems["axis"][ownerteam].alpha = 1; - level.ReturnMessageElems["axis"][ownerteam] setTimer( time ); - - assert( !level.ReturnMessageElems["allies"][ownerteam].alpha ); - level.ReturnMessageElems["allies"][ownerteam].alpha = 1; - level.ReturnMessageElems["allies"][ownerteam] setTimer( time ); - - if( time <= 0 ) - return false; - else - wait time; - - return true; -} - -clearReturnFlagHudElems() -{ - ownerteam = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - - level.ReturnMessageElems["allies"][ownerteam].alpha = 0; - level.ReturnMessageElems["axis"][ownerteam].alpha = 0; -} - -resetFlagBaseEffect() -{ - // dont spawn first frame - wait (0.1); - - if ( isdefined( self.baseeffect ) ) - self.baseeffect delete(); - - team = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - - if ( team != "axis" && team != "allies" ) - return; - - fxid = level.flagBaseFXid[ team ]; - - self.baseeffect = spawnFx( fxid, self.baseeffectpos, self.baseeffectforward, self.baseeffectright ); - - triggerFx( self.baseeffect ); -} - -turn_on() -{ - if ( level.hardcoreMode ) - return; - - self.origin = self.original_origin; -} - -turn_off() -{ - self.origin = ( self.original_origin[0], self.original_origin[1], self.original_origin[2] - 10000); -} - -update_hints() -{ - allied_flag = level.teamFlags["allies"]; - axis_flag = level.teamFlags["axis"]; - - if ( isdefined(allied_flag.carrier) ) - allied_flag.carrier updateBaseIcon(); - - if ( isdefined(axis_flag.carrier) ) - axis_flag.carrier updateBaseIcon(); - - if ( !level.touchReturn ) - return; - - if ( isdefined(allied_flag.carrier) && axis_flag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() ) - { - level.flagHints["axis"] turn_on(); - } - else - { - level.flagHints["axis"] turn_off(); - } - - if ( isdefined(axis_flag.carrier) && allied_flag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() ) - { - level.flagHints["allies"] turn_on(); - } - else - { - level.flagHints["allies"] turn_off(); - } -} - -claim_trigger( trigger ) -{ - self endon("disconnect"); - self ClientClaimTrigger( trigger ); - - self waittill("drop_object"); - self ClientReleaseTrigger( trigger ); -} - -setupBaseIcon() -{ - zone = level.teamFlagZones[self.pers["team"]]; - self.ctfBaseIcon = newClientHudElem( self ); - self.ctfBaseIcon.x = zone.trigger.origin[0]; - self.ctfBaseIcon.y = zone.trigger.origin[1]; - self.ctfBaseIcon.z = zone.trigger.origin[2] + 100; - self.ctfBaseIcon.alpha = 1; // needs to be solid to obscure flag icon - self.ctfBaseIcon.baseAlpha = 1; - self.ctfBaseIcon.awayAlpha = 0.35; - self.ctfBaseIcon.archived = true; - base_3d_icon_update(); - self.ctfBaseIcon.sort = 1; // make sure it sorts on top of the flag icon -} - -base_3d_icon_update() -{ - if( !level.touchReturn ) - return; - - players = Get_Players(); - - for(i=0; i < players.size; i++) - { - if (IsDefined(players[i].ctfBaseIcon) && !level.teamFlags[ "allies" ] isHome() && !level.teamFlags[ "axis" ] isHome() ) - { - //TODO: Add proper 'if' checks OR change to a team hud element - players[i].ctfBaseIcon setShader( level.iconWaitForFlag3D, level.objPointSize, level.objPointSize ); - players[i].ctfBaseIcon setWaypoint( true, level.iconWaitForFlag3D ); - } - else if(IsDefined(players[i].ctfBaseIcon)) - { - //TODO: Add proper 'if' checks OR change to a team hud element - players[i].ctfBaseIcon setShader( level.iconBase3D, level.objPointSize, level.objPointSize ); - players[i].ctfBaseIcon setWaypoint( true, level.iconBase3D ); - } - } -} - -deleteBaseIcon() -{ - self.ctfBaseIcon destroy(); - self.ctfBaseIcon = undefined; -} - -updateBaseIcon() -{ - team = self.pers["team"]; - otherteam = getotherteam(team); - - flag = level.teamFlags[team]; - visible = false; - if ( flag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() ) - { - visible = true; - } - - updateBaseIconVisibility( visible ); -} - -updateBaseIconVisibility( visible ) -{ - // can hit here if a friendly team touches flag to return - if ( !isdefined(self.ctfBaseIcon) ) - return; - - if ( visible ) - { - self.ctfBaseIcon.alpha = self.ctfBaseIcon.awayAlpha; - self.ctfBaseIcon.isShown = true; - } - else - { - self.ctfBaseIcon.alpha = self.ctfBaseIcon.baseAlpha; - self.ctfBaseIcon.isShown = true; - } -} - -createFlagSpawnInfluencer( entityTeam ) -{ - // ctf: influencer around friendly base - ctf_friendly_base_influencer_score= level.spawnsystem.ctf_friendly_base_influencer_score; - ctf_friendly_base_influencer_score_curve= level.spawnsystem.ctf_friendly_base_influencer_score_curve; - ctf_friendly_base_influencer_radius= level.spawnsystem.ctf_friendly_base_influencer_radius; - - // ctf: influencer around enemy base - ctf_enemy_base_influencer_score= level.spawnsystem.ctf_enemy_base_influencer_score; - ctf_enemy_base_influencer_score_curve= level.spawnsystem.ctf_enemy_base_influencer_score_curve; - ctf_enemy_base_influencer_radius= level.spawnsystem.ctf_enemy_base_influencer_radius; - - otherteam = getotherteam(entityTeam); - team_mask = maps\mp\gametypes\_spawning::get_team_mask( entityTeam ); - other_team_mask = maps\mp\gametypes\_spawning::get_team_mask( otherteam ); - - self.spawn_influencer_friendly = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - self.trigger.origin, - ctf_friendly_base_influencer_radius, - ctf_friendly_base_influencer_score, - team_mask, - "ctf_friendly_base,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ctf_friendly_base_influencer_score_curve) ); - - self.spawn_influencer_enemy = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - self.trigger.origin, - ctf_enemy_base_influencer_radius, - ctf_enemy_base_influencer_score, - other_team_mask, - "ctf_enemy_base,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ctf_enemy_base_influencer_score_curve) ); -} - -ctf_gamemodeSpawnDvars(reset_dvars) -{ - ss = level.spawnsystem; - - // ctf: influencer around friendly base - ss.ctf_friendly_base_influencer_score = set_dvar_float_if_unset("scr_spawn_ctf_friendly_base_influencer_score", "0", reset_dvars); - ss.ctf_friendly_base_influencer_score_curve = set_dvar_if_unset("scr_spawn_ctf_friendly_base_influencer_score_curve", "constant", reset_dvars); - ss.ctf_friendly_base_influencer_radius = set_dvar_float_if_unset("scr_spawn_ctf_friendly_base_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - - // ctf: influencer around enemy base - ss.ctf_enemy_base_influencer_score = set_dvar_float_if_unset("scr_spawn_ctf_enemy_base_influencer_score", "-500", reset_dvars); - ss.ctf_enemy_base_influencer_score_curve = set_dvar_if_unset("scr_spawn_ctf_enemy_base_influencer_score_curve", "constant", reset_dvars); - ss.ctf_enemy_base_influencer_radius = set_dvar_float_if_unset("scr_spawn_ctf_enemy_base_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - - // ctf: negative influencer around carrier - ss.ctf_enemy_carrier_influencer_score = set_dvar_float_if_unset("scr_spawn_ctf_enemy_carrier_influencer_score", "0", reset_dvars); - ss.ctf_enemy_carrier_influencer_score_curve = set_dvar_if_unset("scr_spawn_ctf_enemy_carrier_influencer_score_curve", "constant", reset_dvars); - ss.ctf_enemy_carrier_influencer_radius = set_dvar_float_if_unset("scr_spawn_ctf_enemy_carrier_influencer_radius", "" + 10.0*get_player_height(), reset_dvars); - - ss.ctf_friendly_carrier_influencer_score = set_dvar_float_if_unset("scr_spawn_ctf_friendly_carrier_influencer_score", "0", reset_dvars); - ss.ctf_friendly_carrier_influencer_score_curve = set_dvar_if_unset("scr_spawn_ctf_friendly_carrier_influencer_score_curve", "constant", reset_dvars); - ss.ctf_friendly_carrier_influencer_radius = set_dvar_float_if_unset("scr_spawn_ctf_friendly_carrier_influencer_radius", "" + 8.0*get_player_height(), reset_dvars); - - ss.ctf_dropped_influencer_score = set_dvar_float_if_unset("scr_spawn_ctf_dropped_influencer_score", "0", reset_dvars); - ss.ctf_dropped_influencer_score_curve = set_dvar_if_unset("scr_spawn_ctf_dropped_influencer_score_curve", "constant", reset_dvars); - ss.ctf_dropped_influencer_radius = set_dvar_float_if_unset("scr_spawn_ctf_dropped_influencer_radius", "" + 10.0*get_player_height(), reset_dvars); -} - -ctf_getTeamKillPenalty( eInflictor, attacker, sMeansOfDeath, sWeapon ) -{ - teamkill_penalty = maps\mp\gametypes\_globallogic_defaults::default_getTeamKillPenalty( eInflictor, attacker, sMeansOfDeath, sWeapon ); - - if ( ( isdefined( self.isFlagCarrier ) && self.isFlagCarrier ) ) - { - teamkill_penalty = teamkill_penalty * level.teamKillPenaltyMultiplier; - } - - return teamkill_penalty; -} - -ctf_getTeamKillScore( eInflictor, attacker, sMeansOfDeath, sWeapon ) -{ - teamkill_score = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" ); - - if ( ( isdefined( self.isFlagCarrier ) && self.isFlagCarrier ) ) - { - teamkill_score = teamkill_score * level.teamKillScoreMultiplier; - } - - return int(teamkill_score); -} - - diff --git a/mods/patch_mp/maps/mp/gametypes/dem.gsc b/mods/patch_mp/maps/mp/gametypes/dem.gsc deleted file mode 100644 index 48e1856..0000000 --- a/mods/patch_mp/maps/mp/gametypes/dem.gsc +++ /dev/null @@ -1,1319 +0,0 @@ -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -// Rallypoints should be destroyed on leaving your team/getting killed -// Compass icons need to be looked at -// Doesn't seem to be setting angle on spawn so that you are facing your rallypoint - -/* - Demolition - Attackers objective: Bomb 2 positions - Defenders objective: Defend these 2 positions / Defuse planted bombs - Round ends: When both bomb positions are exploded, or roundlength time is reached - Map ends: When one team reaches the score limit, or time limit or round limit is reached - Respawning: Players respawn upon death - - Level requirements - ------------------ - Allied Spawnpoints: - classname mp_dem_spawn_attacker_start - Allied players spawn from these. Place at least 16 of these relatively close together. - - Axis Spawnpoints: - classname mp_dem_spawn_defender_start - Axis players spawn from these. Place at least 16 of these relatively close together. - - Spectator Spawnpoints: - classname mp_global_intermission - Spectators spawn from these and intermission is viewed from these positions. - Atleast one is required, any more and they are randomly chosen between. - - Bombzones: - classname trigger_multiple - targetname bombzone_dem - script_gameobjectname bombzone_dem - script_bombmode_original - script_bombmode_single - script_bombmode_dual - script_team Set to allies or axis. This is used to set which team a bombzone is used by in dual bomb mode. - script_label Set to A or B. This sets the letter shown on the compass in original mode. - This is a volume of space in which the bomb can planted. Must contain an origin brush. - - Bomb: - classname trigger_lookat - targetname bombtrigger - script_gameobjectname bombzone - This should be a 16x16 unit trigger with an origin brush placed so that it's center lies on the bottom plane of the trigger. - Must be in the level somewhere. This is the trigger that is used when defusing a bomb. - It gets moved to the position of the planted bomb model. - - Level script requirements - ------------------------- - Team Definitions: - game["allies"] = "marines"; - game["axis"] = "nva"; - This sets the nationalities of the teams. Allies can be american, british, or russian. Axis can be german. - - game["attackers"] = "allies"; - game["defenders"] = "axis"; - This sets which team is attacking and which team is defending. Attackers plant the bombs. Defenders protect the targets. - - If using minefields or exploders: - maps\mp\_load::main(); - - Optional level script settings - ------------------------------ - Soldier Type and Variation: - game["american_soldiertype"] = "normandy"; - game["german_soldiertype"] = "normandy"; - This sets what character models are used for each nationality on a particular map. - - Valid settings: - american_soldiertype normandy - british_soldiertype normandy, africa - russian_soldiertype coats, padded - german_soldiertype normandy, africa, winterlight, winterdark - - Exploder Effects: - Setting script_noteworthy on a bombzone trigger to an exploder group can be used to trigger additional effects. -*/ - -/*QUAKED mp_dem_spawn_attacker_start (0.0 1.0 0.0) (-16 -16 0) (16 16 72) -Attacking players spawn randomly at one of these positions at the beginning of a round.*/ - -/*QUAKED mp_dem_spawn_defender_start (1.0 0.0 0.0) (-16 -16 0) (16 16 72) -Defending players spawn randomly at one of these positions at the beginning of a round.*/ - -/*QUAKED mp_dem_spawn_attacker (0.0 1.0 0.0) (-16 -16 0) (16 16 72) -Attacking players may spawn randomly at one of these positions after death.*/ - -/*QUAKED mp_dem_spawn_attacker_a (0.0 1.0 0.0) (-16 -16 0) (16 16 72) -Attacking players may spawn randomly at one of these positions after death if site A has been destroyed.*/ - -/*QUAKED mp_dem_spawn_attacker_b (0.0 1.0 0.0) (-16 -16 0) (16 16 72) -Attacking players may spawn randomly at one of these positions after death if site B has been destroyed.*/ - -/*QUAKED mp_dem_spawn_defender (1.0 0.0 0.0) (-16 -16 0) (16 16 72) -Defending players may spawn randomly at one of these positions after death.*/ - -/*QUAKED mp_dem_spawn_defender_a (1.0 0.0 0.0) (-16 -16 0) (16 16 72) -Defending players may spawn randomly at one of these positions after death if site A is still intact.*/ - -/*QUAKED mp_dem_spawn_defender_b (1.0 0.0 0.0) (-16 -16 0) (16 16 72) -Defending players may spawn randomly at one of these positions after death if site B is still intact.*/ - -main() -{ - if(GetDvar( #"mapname") == "mp_background") - return; - - maps\mp\gametypes\_globallogic::init(); - maps\mp\gametypes\_callbacksetup::SetupCallbacks(); - maps\mp\gametypes\_globallogic::SetupCallbacks(); - - maps\mp\gametypes\_globallogic_utils::registerRoundSwitchDvar( level.gameType, 1, 0, 9 ); - maps\mp\gametypes\_globallogic_utils::registerTimeLimitDvar( level.gameType, 2.5, 0, 1440 ); - maps\mp\gametypes\_globallogic_utils::registerScoreLimitDvar( level.gameType, 2, 0, 500 ); - maps\mp\gametypes\_globallogic_utils::registerRoundLimitDvar( level.gameType, 0, 0, 12 ); - maps\mp\gametypes\_globallogic_utils::registerRoundWinLimitDvar( level.gameType, 0, 0, 10 ); - maps\mp\gametypes\_globallogic_utils::registerNumLivesDvar( level.gameType, 0, 0, 10 ); - - maps\mp\gametypes\_weapons::registerGrenadeLauncherDudDvar( level.gameType, 10, 0, 1440 ); - maps\mp\gametypes\_weapons::registerThrownGrenadeDudDvar( level.gameType, 0, 0, 1440 ); - maps\mp\gametypes\_weapons::registerKillstreakDelay( level.gameType, 0, 0, 1440 ); - - maps\mp\gametypes\_globallogic::registerFriendlyFireDelay( level.gameType, 15, 0, 1440 ); - - registerGrenadeLauncherDudDvar( level.gameType, 2, 0, 1440 ); - registerThrownGrenadeDudDvar( level.gameType, 0, 0, 1440 ); - - level.teamBased = true; - level.overrideTeamScore = true; - level.onPrecacheGameType = ::onPrecacheGameType; - level.onStartGameType = ::onStartGameType; - level.onSpawnPlayer = ::onSpawnPlayer; - level.onSpawnPlayerUnified = ::onSpawnPlayerUnified; - level.playerSpawnedCB = ::dem_playerSpawnedCB; - level.onPlayerKilled = ::onPlayerKilled; - level.onDeadEvent = ::onDeadEvent; - level.onOneLeftEvent = ::onOneLeftEvent; - level.onTimeLimit = ::onTimeLimit; - level.onRoundSwitch = ::onRoundSwitch; - level.getTeamKillPenalty = ::dem_getTeamKillPenalty; - level.getTeamKillScore = ::dem_getTeamKillScore; - level.gamemodeSpawnDvars = ::gamemodeSpawnDvars; - level.getTimeLimitDvarValue = ::getTimeLimitDvarValue; - level.ddBombModel = []; - - level.endGameOnScoreLimit = false; - - game["dialog"]["gametype"] = "demo_start"; - game["dialog"]["gametype_hardcore"] = "hcdemo_start"; - game["dialog"]["offense_obj"] = "destroy_start"; - game["dialog"]["defense_obj"] = "defend_start"; - game["dialog"]["sudden_death"] = "suddendeath"; - - // Sets the scoreboard columns and determines with data is sent across the network - setscoreboardcolumns( "kills", "deaths", "plants", "defuses" ); -} - -onPrecacheGameType() -{ - game["bombmodelname"] = "t5_weapon_briefcase_bomb_world"; - game["bombmodelnameobj"] = "t5_weapon_briefcase_bomb_world"; - game["bomb_dropped_sound"] = "flag_drop_plr"; - game["bomb_recovered_sound"] = "flag_pickup_plr"; - precacheModel(game["bombmodelname"]); - precacheModel(game["bombmodelnameobj"]); - - precacheShader("waypoint_bomb"); - precacheShader("hud_suitcase_bomb"); - precacheShader("waypoint_target"); - precacheShader("waypoint_target_a"); - precacheShader("waypoint_target_b"); - precacheShader("waypoint_defend"); - precacheShader("waypoint_defend_a"); - precacheShader("waypoint_defend_b"); - precacheShader("waypoint_defuse"); - precacheShader("waypoint_defuse_a"); - precacheShader("waypoint_defuse_b"); - precacheShader("compass_waypoint_target"); - precacheShader("compass_waypoint_target_a"); - precacheShader("compass_waypoint_target_b"); - precacheShader("compass_waypoint_defend"); - precacheShader("compass_waypoint_defend_a"); - precacheShader("compass_waypoint_defend_b"); - precacheShader("compass_waypoint_defuse"); - precacheShader("compass_waypoint_defuse_a"); - precacheShader("compass_waypoint_defuse_b"); - - precacheString( &"MP_EXPLOSIVES_RECOVERED_BY" ); - precacheString( &"MP_EXPLOSIVES_DROPPED_BY" ); - precacheString( &"MP_EXPLOSIVES_PLANTED_BY" ); - precacheString( &"MP_EXPLOSIVES_DEFUSED_BY" ); - precacheString( &"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES" ); - precacheString( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" ); - precacheString( &"MP_PLANTING_EXPLOSIVE" ); - precacheString( &"MP_DEFUSING_EXPLOSIVE" ); - precacheString( &"MP_TIME_EXTENDED" ); -} - -dem_getTeamKillPenalty( eInflictor, attacker, sMeansOfDeath, sWeapon ) -{ - teamkill_penalty = maps\mp\gametypes\_globallogic_defaults::default_getTeamKillPenalty( eInflictor, attacker, sMeansOfDeath, sWeapon ); - - if ( ( isdefined( self.isDefusing ) && self.isDefusing ) || ( isdefined( self.isPlanting ) && self.isPlanting ) ) - { - teamkill_penalty = teamkill_penalty * level.teamKillPenaltyMultiplier; - } - - return teamkill_penalty; -} - -dem_getTeamKillScore( eInflictor, attacker, sMeansOfDeath, sWeapon ) -{ - teamkill_score = maps\mp\gametypes\_rank::getScoreInfoValue( "kill" ); - - if ( ( isdefined( self.isDefusing ) && self.isDefusing ) || ( isdefined( self.isPlanting ) && self.isPlanting ) ) - { - teamkill_score = teamkill_score * level.teamKillScoreMultiplier; - } - - return int(teamkill_score); -} - - -onRoundSwitch() -{ - if ( !isdefined( game["switchedsides"] ) ) - game["switchedsides"] = false; - - if ( game["teamScores"]["allies"] == level.scorelimit - 1 && game["teamScores"]["axis"] == level.scorelimit - 1 ) - { - // overtime! team that's ahead in kills gets to defend. - aheadTeam = getBetterTeam(); - if ( aheadTeam != game["defenders"] ) - { - game["switchedsides"] = !game["switchedsides"]; - } - else - { - level.halftimeSubCaption = ""; - } - level.halftimeType = "overtime"; - } - else - { - level.halftimeType = "halftime"; - game["switchedsides"] = !game["switchedsides"]; - } -} - -getBetterTeam() -{ - kills["allies"] = 0; - kills["axis"] = 0; - deaths["allies"] = 0; - deaths["axis"] = 0; - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - team = player.pers["team"]; - if ( isDefined( team ) && (team == "allies" || team == "axis") ) - { - kills[ team ] += player.kills; - deaths[ team ] += player.deaths; - } - } - - if ( kills["allies"] > kills["axis"] ) - return "allies"; - else if ( kills["axis"] > kills["allies"] ) - return "axis"; - - // same number of kills - - if ( deaths["allies"] < deaths["axis"] ) - return "allies"; - else if ( deaths["axis"] < deaths["allies"] ) - return "axis"; - - // same number of deaths - - if ( randomint(2) == 0 ) - return "allies"; - return "axis"; -} - -gamemodeSpawnDvars(reset_dvars) -{ - ss = level.spawnsystem; - - // negative influencer around enemy base - ss.dem_enemy_base_influencer_score = set_dvar_float_if_unset("scr_spawn_dem_enemy_base_influencer_score", "-500", reset_dvars); - ss.dem_enemy_base_influencer_score_curve = set_dvar_if_unset("scr_spawn_dem_enemy_base_influencer_score_curve", "constant", reset_dvars); - ss.dem_enemy_base_influencer_radius = set_dvar_float_if_unset("scr_spawn_dem_enemy_base_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); -} - -onStartGameType() -{ - SetBombTimer( "A", 0 ); - setMatchFlag( "bomb_timer_a", 0 ); - SetBombTimer( "B", 0 ); - setMatchFlag( "bomb_timer_b", 0 ); - - level.usingExtraTime = false; - - // we'll handle the sideswitching ourselves - level.spawnsystem.unifiedSideSwitching = 0; - - if ( !isDefined( game["switchedsides"] ) ) - game["switchedsides"] = false; - - if ( game["switchedsides"] ) - { - oldAttackers = game["attackers"]; - oldDefenders = game["defenders"]; - game["attackers"] = oldDefenders; - game["defenders"] = oldAttackers; - } - - setClientNameMode( "manual_change" ); - - game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED"; - game["strings"]["bomb_defused"] = &"MP_BOMB_DEFUSED"; - - precacheString( game["strings"]["target_destroyed"] ); - precacheString( game["strings"]["bomb_defused"] ); - - level._effect["bombexplosion"] = loadfx("maps/mp_maps/fx_mp_exp_bomb"); - - maps\mp\gametypes\_globallogic_ui::setObjectiveText( game["attackers"], &"OBJECTIVES_DEM_ATTACKER" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveText( game["defenders"], &"OBJECTIVES_SD_DEFENDER" ); - - if ( level.splitscreen ) - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( game["attackers"], &"OBJECTIVES_DEM_ATTACKER" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( game["defenders"], &"OBJECTIVES_SD_DEFENDER" ); - } - else - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( game["attackers"], &"OBJECTIVES_DEM_ATTACKER_SCORE" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( game["defenders"], &"OBJECTIVES_SD_DEFENDER_SCORE" ); - } - maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( game["attackers"], &"OBJECTIVES_DEM_ATTACKER_HINT" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( game["defenders"], &"OBJECTIVES_SD_DEFENDER_HINT" ); - - level.spawnMins = ( 0, 0, 0 ); - level.spawnMaxs = ( 0, 0, 0 ); - maps\mp\gametypes\_spawnlogic::dropSpawnPoints( "mp_dem_spawn_attacker_a" ); - maps\mp\gametypes\_spawnlogic::dropSpawnPoints( "mp_dem_spawn_attacker_b" ); - maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_dem_spawn_defender_start" ); - maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_dem_spawn_attacker_start" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["attackers"], "mp_dem_spawn_attacker" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["defenders"], "mp_dem_spawn_defender" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["defenders"], "mp_dem_spawn_defender_a" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["defenders"], "mp_dem_spawn_defender_b" ); - maps\mp\gametypes\_spawning::updateAllSpawnPoints(); - - level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs ); - setMapCenter( level.mapCenter ); - - spawnpoint = maps\mp\gametypes\_spawnlogic::getRandomIntermissionPoint(); - setDemoIntermissionPoint( spawnpoint.origin, spawnpoint.angles ); - - level.demBombzoneName = "bombzone_dem"; - bombZones = getEntArray( level.demBombzoneName, "targetname" ); - if ( bombZones.size == 0 ) - level.demBombzoneName = "bombzone"; - - allowed[0] = "sd"; - allowed[1] = level.demBombzoneName; - allowed[2] = "blocker"; - allowed[3] = "dem"; - maps\mp\gametypes\_gameobjects::main(allowed); - - // now that the game objects have been deleted place the influencers - maps\mp\gametypes\_spawning::create_map_placed_influencers(); - - level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_defender_start" ); - level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dem_spawn_attacker_start" ); - - maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "plant", 100 ); - maps\mp\gametypes\_rank::registerScoreInfo( "defuse", 100 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist_75", 25 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist_50", 25 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist_25", 25 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist", 25 ); - maps\mp\gametypes\_rank::registerScoreInfo( "destroyer", 100 ); - - thread updateGametypeDvars(); - - thread bombs(); -} - - -onSpawnPlayerUnified() -{ - self.isPlanting = false; - self.isDefusing = false; - self.isBombCarrier = false; - if ( isDefined( self.carryIcon ) ) - { - self.carryIcon destroyElem(); - self.carryIcon = undefined; - } - - if ( self.pers["team"] == game["attackers"] ) - { - if ( self IsSplitscreen() ) - { - self.carryIcon = createIcon( "hud_suitcase_bomb", 35, 35 ); - self.carryIcon.x = -125; - self.carryIcon.y = -90; - self.carryIcon.horzAlign = "right"; - self.carryIcon.vertAlign = "bottom"; - } - else - { - self.carryIcon = createIcon( "hud_suitcase_bomb", 50, 50 ); - self.carryIcon.x = -130; - self.carryIcon.y = -103; - self.carryIcon.horzAlign = "user_right"; - self.carryIcon.vertAlign = "user_bottom"; - } - self.carryIcon.alpha = 0.75; - self.carryIcon.hidewhileremotecontrolling = true; - self.carryIcon.hidewheninkillcam = true; - } - - maps\mp\gametypes\_spawning::onSpawnPlayer_Unified(); -} - - -onSpawnPlayer() -{ - self.isPlanting = false; - self.isDefusing = false; - self.isBombCarrier = false; - if ( isDefined( self.carryIcon ) ) - { - self.carryIcon destroyElem(); - self.carryIcon = undefined; - } - - if( self.pers["team"] == game["attackers"] ) - spawnPointName = "mp_dem_spawn_attacker_start"; - else - spawnPointName = "mp_dem_spawn_defender_start"; - - if ( self.pers["team"] == game["attackers"] ) - { - if ( self IsSplitscreen() ) - { - self.carryIcon = createIcon( "hud_suitcase_bomb", 35, 35 ); - self.carryIcon.x = -125; - self.carryIcon.y = -90; - self.carryIcon.horzAlign = "right"; - self.carryIcon.vertAlign = "bottom"; - } - else - { - self.carryIcon = createIcon( "hud_suitcase_bomb", 50, 50 ); - self.carryIcon.x = -130; - self.carryIcon.y = -103; - self.carryIcon.horzAlign = "user_right"; - self.carryIcon.vertAlign = "user_bottom"; - } - self.carryIcon.alpha = 0.75; - self.carryIcon.hidewhileremotecontrolling = true; - self.carryIcon.hidewheninkillcam = true; - } - - spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( spawnPointName ); - assert( spawnPoints.size ); - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random( spawnPoints ); - - self spawn( spawnpoint.origin, spawnpoint.angles, "dem" ); -} - - -dem_playerSpawnedCB() -{ - level notify ( "spawned_player" ); -} - - -onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration) -{ - thread checkAllowSpectating(); - - inBombZone = false; - - for ( index = 0; index < level.bombZones.size; index++ ) - { - if ( !isDefined( level.bombZones[index].bombExploded ) || !level.bombZones[index].bombExploded ) - { - dist = Distance2d(self.origin, level.bombZones[index].curorigin); - if ( dist < level.defaultOffenseRadius ) - { - inBombZone = true; - break; - } - } - } - - - if ( inBombZone && isPlayer( attacker ) && attacker.pers["team"] != self.pers["team"] && ( !isdefined( sWeapon ) || !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) ) - { - if ( game["defenders"] == self.pers["team"] ) - { - attacker maps\mp\_medals::offense( sWeapon ); - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "OFFENDS", 1 ); - } - else - { - if( isdefined(attacker.pers["defends"]) ) - { - attacker.pers["defends"]++; - attacker.defends = attacker.pers["defends"]; - } - - attacker maps\mp\_medals::defense( sWeapon ); - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "DEFENDS", 1 ); - } - } -} - - -checkAllowSpectating() -{ - wait ( 0.05 ); - - update = false; - - livesLeft = !(level.numLives && !self.pers["lives"]); - - if ( !level.aliveCount[ game["attackers"] ] && !livesLeft ) - { - level.spectateOverride[game["attackers"]].allowEnemySpectate = 1; - update = true; - } - if ( !level.aliveCount[ game["defenders"] ] && !livesLeft ) - { - level.spectateOverride[game["defenders"]].allowEnemySpectate = 1; - update = true; - } - if ( update ) - maps\mp\gametypes\_spectating::updateSpectateSettings(); -} - - -dem_endGame( winningTeam, endReasonText ) -{ - if ( isdefined( winningTeam ) ) - [[level._setTeamScore]]( winningTeam, [[level._getTeamScore]]( winningTeam ) + 1 ); - - thread maps\mp\gametypes\_globallogic::endGame( winningTeam, endReasonText ); -} - -dem_endGameWithKillcam( winningTeam, endReasonText ) -{ - level thread maps\mp\gametypes\_killcam::startLastKillcam(); - dem_endGame( winningTeam, endReasonText ); -} - - -onDeadEvent( team ) -{ - if ( level.bombExploded || level.bombDefused ) - return; - - if ( team == "all" ) - { - if ( level.bombPlanted ) - dem_endGameWithKillcam( game["attackers"], game["strings"][game["defenders"]+"_eliminated"] ); - else - dem_endGameWithKillcam( game["defenders"], game["strings"][game["attackers"]+"_eliminated"] ); - } - else if ( team == game["attackers"] ) - { - if ( level.bombPlanted ) - return; - - dem_endGameWithKillcam( game["defenders"], game["strings"][game["attackers"]+"_eliminated"] ); - } - else if ( team == game["defenders"] ) - { - dem_endGameWithKillcam( game["attackers"], game["strings"][game["defenders"]+"_eliminated"] ); - } -} - - -onOneLeftEvent( team ) -{ - if ( level.bombExploded || level.bombDefused ) - return; - - //if ( team == game["attackers"] ) - warnLastPlayer( team ); -} - - -onTimeLimit() -{ - if ( level.teamBased ) - { - bombZonesLeft = 0; - - for ( index = 0; index < level.bombZones.size; index++ ) - { - if ( !isDefined( level.bombZones[index].bombExploded ) || !level.bombZones[index].bombExploded ) - bombZonesLeft++; - } - if ( bombZonesLeft == 0 ) - { - dem_endGame( game["attackers"], game["strings"]["target_destroyed"] ); - } - else - { - dem_endGame( game["defenders"], game["strings"]["time_limit_reached"] ); - } - } - else - dem_endGame( undefined, game["strings"]["time_limit_reached"] ); -} - - -warnLastPlayer( team ) -{ - if ( !isdefined( level.warnedLastPlayer ) ) - level.warnedLastPlayer = []; - - if ( isDefined( level.warnedLastPlayer[team] ) ) - return; - - level.warnedLastPlayer[team] = true; - - players = level.players; - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - - if ( isDefined( player.pers["team"] ) && player.pers["team"] == team && isdefined( player.pers["class"] ) ) - { - if ( player.sessionstate == "playing" && !player.afk ) - break; - } - } - - if ( i == players.size ) - return; - - players[i] thread giveLastAttackerWarning(); -} - - -giveLastAttackerWarning() -{ - self endon("death"); - self endon("disconnect"); - - fullHealthTime = 0; - interval = .05; - - while(1) - { - if ( self.health != self.maxhealth ) - fullHealthTime = 0; - else - fullHealthTime += interval; - - wait interval; - - if (self.health == self.maxhealth && fullHealthTime >= 3) - break; - } - - //self iprintlnbold(&"MP_YOU_ARE_THE_ONLY_REMAINING_PLAYER"); - //self maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( "last_alive" ); - self maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( "sudden_death" ); - - self maps\mp\gametypes\_missions::lastManSD(); -} - - -updateGametypeDvars() -{ - level.plantTime = dvarFloatValue( "planttime", 5, 0, 20 ); - level.defuseTime = dvarFloatValue( "defusetime", 5, 0, 20 ); - level.bombTimer = dvarFloatValue( "bombtimer", 45, 1, 300 ); - level.extraTime = dvarFloatValue( "extratime", 2.5, 0, 300 ); - - level.teamKillPenaltyMultiplier = dvarFloatValue( "teamkillpenalty", 2, 0, 10 ); - level.teamKillScoreMultiplier = dvarFloatValue( "teamkillscore", 4, 0, 40 ); - level.playerEventsMax = dvarFloatValue( "maxPlayerEvents", 1000, 0, 1000 ); - level.playerEventsLPM = dvarFloatValue( "maxPlayerEventsPerMinute", 2, 0, 15 ); - level.bombEventsLPM = dvarFloatValue( "maxBombEventsPerMinute", 4, 0, 15 ); -} - -resetBombZone() -{ - self maps\mp\gametypes\_gameobjects::allowUse( "enemy" ); - self maps\mp\gametypes\_gameobjects::setUseTime( level.plantTime ); - self maps\mp\gametypes\_gameobjects::setUseText( &"MP_PLANTING_EXPLOSIVE" ); - self maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES" ); - self maps\mp\gametypes\_gameobjects::setKeyObject( level.ddBomb ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "waypoint_defend" + self.label ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" + self.label ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "waypoint_target" + self.label ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_target" + self.label ); - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - self.useWeapon = "briefcase_bomb_mp"; -} - -setUpForDefusing() -{ - self maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - self maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime ); - self maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" ); - self maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" ); - self maps\mp\gametypes\_gameobjects::setKeyObject( undefined ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defuse" + self.label ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defuse" + self.label ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_defend" + self.label ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_defend" + self.label ); - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); -} - - -bombs() -{ - level.bombAPlanted = false; - level.bombBPlanted = false; - level.bombPlanted = false; - level.bombDefused = false; - level.bombExploded = false; - - sdBomb = getEnt( "sd_bomb", "targetname" ); - if ( isDefined( sdBomb ) ) - sdBomb delete(); - - precacheModel( "t5_weapon_briefcase_bomb_world" ); - - level.bombZones = []; - - bombZones = getEntArray( level.demBombzoneName, "targetname" ); - - for ( index = 0; index < bombZones.size; index++ ) - { - trigger = bombZones[index]; - visuals = getEntArray( bombZones[index].target, "targetname" ); - - bombZone = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, (0,0,64) ); - bombZone maps\mp\gametypes\_gameobjects::allowUse( "enemy" ); - bombZone maps\mp\gametypes\_gameobjects::setUseTime( level.plantTime ); - bombZone maps\mp\gametypes\_gameobjects::setUseText( &"MP_PLANTING_EXPLOSIVE" ); - bombZone maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES" ); - bombZone maps\mp\gametypes\_gameobjects::setKeyObject( level.ddBomb ); - - label = bombZone maps\mp\gametypes\_gameobjects::getLabel(); - bombZone.label = label; - bombZone.index = index; - bombZone maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend" + label ); - bombZone maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" + label ); - bombZone maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_target" + label ); - bombZone maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_target" + label ); - bombZone maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - bombZone.onBeginUse = ::onBeginUse; - bombZone.onEndUse = ::onEndUse; - bombZone.onUse = ::onUseObject; - bombZone.onCantUse = ::onCantUse; - bombZone.useWeapon = "briefcase_bomb_mp"; - bombZone.visuals[0].killCamEnt = spawn( "script_model", bombZone.visuals[0].origin + (0,0,128) ); - - for ( i = 0; i < visuals.size; i++ ) - { - if ( isDefined( visuals[i].script_exploder ) ) - { - bombZone.exploderIndex = visuals[i].script_exploder; - break; - } - } - - level.bombZones[level.bombZones.size] = bombZone; - - bombZone.bombDefuseTrig = getent( visuals[0].target, "targetname" ); - assert( isdefined( bombZone.bombDefuseTrig ) ); - bombZone.bombDefuseTrig.origin += (0,0,-10000); - bombZone.bombDefuseTrig.label = label; - - // Add spawn influencer - dem_enemy_base_influencer_score = level.spawnsystem.dem_enemy_base_influencer_score; - dem_enemy_base_influencer_score_curve = level.spawnsystem.dem_enemy_base_influencer_score_curve; - dem_enemy_base_influencer_radius = level.spawnsystem.dem_enemy_base_influencer_radius; - team_mask = maps\mp\gametypes\_spawning::get_team_mask( game["attackers"] ); - bombZone.spawnInfluencer = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - trigger.origin, - dem_enemy_base_influencer_radius, - dem_enemy_base_influencer_score, - team_mask, - "dem_enemy_base,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(dem_enemy_base_influencer_score_curve) ); - } - - for ( index = 0; index < level.bombZones.size; index++ ) - { - array = []; - for ( otherindex = 0; otherindex < level.bombZones.size; otherindex++ ) - { - if ( otherindex != index ) - array[ array.size ] = level.bombZones[otherindex]; - } - level.bombZones[index].otherBombZones = array; - } -} - -onBeginUse( player ) -{ - if ( self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) ) - { - player playSound( "mpl_sd_bomb_defuse" ); - player.isDefusing = true; - player thread maps\mp\gametypes\_battlechatter_mp::gametypeSpecificBattleChatter( "sd_enemyplant", player.pers["team"] ); - - bestDistance = 9000000; - closestBomb = undefined; - - if ( isDefined( level.ddBombModel ) ) - { - keys = GetArrayKeys( level.ddBombModel ); - for ( bombLabel = 0; bombLabel < keys.size; bombLabel++ ) - { - bomb = level.ddBombModel[ keys[bombLabel] ]; - - if ( !isDefined( bomb ) ) - continue; - - dist = distanceSquared( player.origin, bomb.origin ); - - if ( dist < bestDistance ) - { - bestDistance = dist; - closestBomb = bomb; - } - } - - assert( isDefined(closestBomb) ); - player.defusing = closestBomb; - closestBomb hide(); - } - } - else - { - player.isPlanting = true; - player thread maps\mp\gametypes\_battlechatter_mp::gametypeSpecificBattleChatter( "sd_friendlyplant", player.pers["team"] ); - } - player playSound( "fly_bomb_raise_plr" ); -} - -onEndUse( team, player, result ) -{ - if ( !IsDefined( player ) ) - return; - - player.isDefusing = false; - player.isPlanting = false; - player notify( "event_ended" ); - - if ( self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) ) - { - if ( isDefined( player.defusing ) && !result ) - { - player.defusing show(); - } - } -} - -onCantUse( player ) -{ - player iPrintLnBold( &"MP_CANT_PLANT_WITHOUT_BOMB" ); -} - -onUseObject( player ) -{ - team = player.team; - enemyTeam = getOtherTeam( team ); - - self updateEventsPerMinute(); - player updateEventsPerMinute(); - - // planted the bomb - if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( team ) ) - { - - level thread bombPlanted( self, player ); - player logString( "bomb planted: " + self.label ); - -// removed plant audio until finalization of assest TODO : new plant sounds when assests are online -// player playSound( "mpl_sd_bomb_plant" ); - player notify ( "bomb_planted" ); - - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "DEM_WE_PLANT", team, false, false, 5 ); - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "DEM_THEY_PLANT", enemyTeam, false, false, 5 ); - - if( isdefined(player.pers["plants"]) ) - { - player.pers["plants"]++; - player.plants = player.pers["plants"]; - } - - if ( !isScoreBoosting( player, self ) ) - { - player maps\mp\_medals::saboteur(); - player maps\mp\gametypes\_persistence::statAddWithGameType( "PLANTS", 1 ); - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "plant", player ); - player thread [[level.onXPEvent]]( "plant" ); - } - - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_PLANTED_BY", player ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_planted" ); - } - else - { - player notify ( "bomb_defused" ); - player logString( "bomb defused: " + self.label ); - self thread bombDefused(); - self resetBombzone(); - - if( isdefined(player.pers["defuses"]) ) - { - player.pers["defuses"]++; - player.defuses = player.pers["defuses"]; - } - - if ( !isScoreBoosting( player, self ) ) - { - player maps\mp\_medals::hero(); - player maps\mp\gametypes\_persistence::statAddWithGameType( "DEFUSES", 1 ); - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "defuse", player ); - } - - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_DEFUSED_BY", player ); - - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "DEM_WE_DEFUSE", team, false, false, 5 ); - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "DEM_THEY_DEFUSE", enemyTeam, false, false, 5 ); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_defused" ); - - //player thread [[level.onXPEvent]]( "defuse" ); - } -} - -onDrop( player ) -{ - if ( !level.bombPlanted ) - { - if ( isDefined( player ) && isDefined( player.name ) ) - printOnTeamArg( &"MP_EXPLOSIVES_DROPPED_BY", game["attackers"], player ); - -// maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_lost", player.pers["team"] ); - if ( isDefined( player ) ) - player logString( "bomb dropped" ); - else - logString( "bomb dropped" ); - } - - player notify( "event_ended" ); - - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_bomb" ); - - maps\mp\_utility::playSoundOnPlayers( game["bomb_dropped_sound"], game["attackers"] ); -} - - -onPickup( player ) -{ - player.isBombCarrier = true; - - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" ); - - if ( !level.bombDefused ) - { - if ( isDefined( player ) && isDefined( player.name ) ) - printOnTeamArg( &"MP_EXPLOSIVES_RECOVERED_BY", game["attackers"], player ); - - thread playSoundOnPlayers( "mus_sd_pickup"+"_"+level.teamPostfix[player.pers["team"]], player.pers["team"] ); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_taken", player.pers["team"] ); - player logString( "bomb taken" ); - } - maps\mp\_utility::playSoundOnPlayers( game["bomb_recovered_sound"], game["attackers"] ); -} - - -onReset() -{ -} - -bombReset( label, reason ) -{ - if ( label == "_a" ) - { - level.bombAPlanted = false; - SetBombTimer( "A", 0 ); - } - else - { - level.bombBPlanted = false; - SetBombTimer( "B", 0 ); - } - - setMatchFlag( "bomb_timer" + label, 0 ); - - if ( !level.bombAPlanted && !level.bombBPlanted ) - maps\mp\gametypes\_globallogic_utils::resumeTimer(); - - self.visuals[0] maps\mp\gametypes\_globallogic_utils::stopTickingSound(); -} - -dropBombModel( player, site ) -{ - trace = bulletTrace( player.origin + (0,0,20), player.origin - (0,0,2000), false, player ); - - tempAngle = randomfloat( 360 ); - forward = (cos( tempAngle ), sin( tempAngle ), 0); - forward = vectornormalize( forward - vector_scale( trace["normal"], vectordot( forward, trace["normal"] ) ) ); - dropAngles = vectortoangles( forward ); - - level.ddBombModel[ site ] = spawn( "script_model", trace["position"] ); - level.ddBombModel[ site ].angles = dropAngles; - level.ddBombModel[ site ] setModel( "prop_suitcase_bomb" ); -} - - -bombPlanted( destroyedObj, player ) -{ - level endon( "game_ended" ); - destroyedObj endon( "bomb_defused" ); - team = player.team; - game["challenge"][team]["plantedBomb"] = true; - - maps\mp\gametypes\_globallogic_utils::pauseTimer(); - destroyedObj.bombPlanted = true; - - destroyedObj.visuals[0] thread maps\mp\gametypes\_globallogic_utils::playTickingSound( "mpl_sab_ui_suitcasebomb_timer" ); - destroyedObj.tickingObject = destroyedObj.visuals[0]; - - label = destroyedObj maps\mp\gametypes\_gameobjects::getLabel(); - - detonateTime = int( gettime() + (level.bombTimer * 1000) ); - updateBombTimers(label, detonateTime); - - trace = bulletTrace( player.origin + (0,0,20), player.origin - (0,0,2000), false, player ); - - tempAngle = randomfloat( 360 ); - forward = (cos( tempAngle ), sin( tempAngle ), 0); - forward = vectornormalize( forward - vector_scale( trace["normal"], vectordot( forward, trace["normal"] ) ) ); - dropAngles = vectortoangles( forward ); - - self dropBombModel( player, destroyedObj.label ); - destroyedObj maps\mp\gametypes\_gameobjects::allowUse( "none" ); - destroyedObj maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - destroyedObj setUpForDefusing(); - - player.isBombCarrier = false; - game["challenge"][team]["plantedBomb"] = true; - - destroyedObj BombTimerWait(label); - destroyedObj bombReset( label, "bomb_exploded" ); - - if ( level.gameEnded ) - { - return; - } - - destroyedObj.bombExploded = true; - game["challenge"][team]["destroyedBombSite"] = true; - explosionOrigin = destroyedObj.curorigin; - - level.ddBombModel[ destroyedObj.label ] Delete(); - - if ( isdefined( player ) ) - { - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, player, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); - player maps\mp\_medals::bomber(); - player maps\mp\gametypes\_persistence::statAddWithGameType( "DESTRUCTIONS", 1 ); - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_BLOWUP_BY", player ); - // give points for being the bomb destroyer for extra game mode incentive - maps\mp\gametypes\_globallogic_score::givePlayerScore( "destroyer", player ); - player thread [[level.onXPEvent]]( "destroyer" ); - } - else - { - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); - } - - rot = randomfloat(360); - explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + (0,0,50), (0,0,1), (cos(rot),sin(rot),0) ); - triggerFx( explosionEffect ); - - thread playSoundinSpace( "mpl_sd_exp_suitcase_bomb_main", explosionOrigin ); - - if ( isDefined( destroyedObj.exploderIndex ) ) - exploder( destroyedObj.exploderIndex ); - - bombZonesLeft = 0; - - for ( index = 0; index < level.bombZones.size; index++ ) - { - if ( !isDefined( level.bombZones[index].bombExploded ) || !level.bombZones[index].bombExploded ) - bombZonesLeft++; - } - - destroyedObj maps\mp\gametypes\_gameobjects::disableObject(); - - if ( bombZonesLeft == 0 ) - { - setGameEndTime( 0 ); - wait 3; - dem_endGame( game["attackers"], game["strings"]["target_destroyed"] ); - } - else - { - team = player.pers["team"]; - enemyTeam = getOtherTeam( team ); - - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "DEM_WE_SCORE", team, false, false, 5 ); - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "DEM_THEY_SCORE", enemyTeam, false, false, 5 ); - - //level thread play_one_left_underscore( team, enemyTeam ); - - if( getTimeLimitDvarValue() > 0 ) - { - level.usingExtraTime = true; - if ( !level.hardcoreMode ) - iPrintLn( &"MP_TIME_EXTENDED" ); - } - - // remove the influencer on this object - removeinfluencer( destroyedObj.spawnInfluencer ); - destroyedObj.spawnInfluencer = undefined; - - maps\mp\gametypes\_spawnlogic::clearSpawnPoints(); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["attackers"], "mp_dem_spawn_attacker" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["defenders"], "mp_dem_spawn_defender" ); - if ( label == "_a" ) - { - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["attackers"], "mp_dem_spawn_attacker_a" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["defenders"], "mp_dem_spawn_defender_b" ); - } - else - { - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["attackers"], "mp_dem_spawn_attacker_b" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( game["defenders"], "mp_dem_spawn_defender_a" ); - } - maps\mp\gametypes\_spawning::updateAllSpawnPoints(); - } -} - -getTimeLimitDvarValue() -{ - timeLimit = maps\mp\gametypes\_globallogic_utils::getValueInRange( getDvarFloat( level.timeLimitDvar ), level.timeLimitMin, level.timeLimitMax ); - if ( level.usingExtraTime ) - return timeLimit + level.extraTime; - return timeLimit; -} - -waitLongDurationWithBombTimeUpdate( whichBomb, duration ) -{ - if ( duration == 0 ) - return; - assert( duration > 0 ); - - starttime = gettime(); - - endtime = gettime() + duration * 1000; - - while ( gettime() < endtime ) - { - maps\mp\gametypes\_hostmigration::waitTillHostMigrationStarts( (endtime - gettime()) / 1000 ); - - while ( isDefined( level.hostMigrationTimer ) ) - { - endTime += 250; - updateBombTimers(whichBomb, endTime); - wait 0.25; - } - } - - if( gettime() != endtime ) - println("SCRIPT WARNING: gettime() = " + gettime() + " NOT EQUAL TO endtime = " + endtime); - - while ( isDefined( level.hostMigrationTimer ) ) - { - endTime += 250; - updateBombTimers(whichBomb, endTime); - wait 0.250; - } - - return gettime() - starttime; -} - -updateBombTimers(whichBomb, detonateTime) -{ - if ( whichBomb == "_a" ) - { - level.bombAPlanted = true; - SetBombTimer( "A", int(detonateTime) ); - } - else - { - level.bombBPlanted = true; - SetBombTimer( "B", int(detonateTime) ); - } - - setMatchFlag( "bomb_timer" + whichBomb, int(detonateTime) ); -} - -BombTimerWait(whichBomb) -{ - waitLongDurationWithBombTimeUpdate( whichBomb, level.bombTimer ); -} - -bombDefused() -{ - self.tickingObject maps\mp\gametypes\_globallogic_utils::stopTickingSound(); - self maps\mp\gametypes\_gameobjects::allowUse( "none" ); - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - self.bombDefused = true; - self notify( "bomb_defused" ); - self bombReset( self.label, "bomb_defused" ); -} - -registerGrenadeLauncherDudDvar( dvarString, defaultValue, minValue, maxValue ) -{ - dvarString = ("scr_" + dvarString + "_grenadeLauncherDudTime"); - if ( getDvar( dvarString ) == "" ) - setDvar( dvarString, defaultValue ); - - if ( getDvarInt( dvarString ) > maxValue ) - setDvar( dvarString, maxValue ); - else if ( getDvarInt( dvarString ) < minValue ) - setDvar( dvarString, minValue ); - - level.grenadeLauncherDudTimeDvar = dvarString; - level.grenadeLauncherDudTimeMin = minValue; - level.grenadeLauncherDudTimeMax = maxValue; - level.grenadeLauncherDudTime = getDvarInt( level.grenadeLauncherDudTimeDvar ); -} - -registerThrownGrenadeDudDvar( dvarString, defaultValue, minValue, maxValue ) -{ - dvarString = ("scr_" + dvarString + "_thrownGrenadeDudTime"); - if ( getDvar( dvarString ) == "" ) - setDvar( dvarString, defaultValue ); - - if ( getDvarInt( dvarString ) > maxValue ) - setDvar( dvarString, maxValue ); - else if ( getDvarInt( dvarString ) < minValue ) - setDvar( dvarString, minValue ); - - level.thrownGrenadeDudTimeDvar = dvarString; - level.thrownGrenadeDudTimeMin = minValue; - level.thrownGrenadeDudTimeMax = maxValue; - level.thrownGrenadeDudTime = getDvarInt( level.thrownGrenadeDudTimeDvar ); -} - -play_one_left_underscore( team, enemyTeam ) -{ - wait(3); - - if( (!IsDefined(team)) || (!IsDefined(enemyTeam)) ) - { - return; - } - - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "DEM_ONE_LEFT_UNDERSCORE", team, false, false ); - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "DEM_ONE_LEFT_UNDERSCORE", enemyTeam, false, false ); -} - -updateEventsPerMinute() -{ - if ( !isDefined( self.eventsPerMinute ) ) - { - self.numBombEvents = 0; - self.eventsPerMinute = 0; - } - - self.numBombEvents++; - - minutesPassed = maps\mp\gametypes\_globallogic_utils::getTimePassed() / ( 60 * 1000 ); - - // players use the actual time played - if ( IsPlayer( self ) && IsDefined(self.timePlayed["total"]) ) - minutesPassed = self.timePlayed["total"] / 60; - - self.eventsPerMinute = self.numBombEvents / minutesPassed; - if ( self.eventsPerMinute > self.numBombEvents ) - self.eventsPerMinute = self.numBombEvents; -} - -isScoreBoosting( player, flag ) -{ - if ( player.eventsPerMinute > level.playerEventsLPM ) - return true; - - if ( flag.eventsPerMinute > level.bombEventsLPM ) - return true; - - if ( player.numBombEvents > level.playerEventsMax ) - return true; - - return false; -} \ No newline at end of file diff --git a/mods/patch_mp/maps/mp/gametypes/dom.gsc b/mods/patch_mp/maps/mp/gametypes/dom.gsc deleted file mode 100644 index 3004578..0000000 --- a/mods/patch_mp/maps/mp/gametypes/dom.gsc +++ /dev/null @@ -1,1426 +0,0 @@ -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -/* - Domination - Objective: Capture all the flags by touching them - Map ends: When one team captures all the flags, or time limit is reached - Respawning: No wait / Near teammates - - Level requirements - ------------------ - Spawnpoints: - classname mp_tdm_spawn - All players spawn from these. The spawnpoint chosen is dependent on the current locations of owned flags, teammates and - enemies at the time of spawn. Players generally spawn behind their teammates relative to the direction of enemies. - Optionally, give a spawnpoint a script_linkto to specify which flag it "belongs" to (see Flag Descriptors). - - Spectator Spawnpoints: - classname mp_global_intermission - Spectators spawn from these and intermission is viewed from these positions. - Atleast one is required, any more and they are randomly chosen between. - - Flags: - classname trigger_radius - targetname flag_primary or flag_secondary - Flags that need to be captured to win. Primary flags take time to capture; secondary flags are instant. - - Flag Descriptors: - classname script_origin - targetname flag_descriptor - Place one flag descriptor close to each flag. Use the script_linkname and script_linkto properties to say which flags - it can be considered "adjacent" to in the level. For instance, if players have a primary path from flag1 to flag2, and - from flag2 to flag3, flag2 would have a flag_descriptor with these properties: - script_linkname flag2 - script_linkto flag1 flag3 - - Set scr_domdebug to 1 to see flag connections and what spawnpoints are considered connected to each flag. - - Level script requirements - ------------------------- - Team Definitions: - game["allies"] = "marines"; - game["axis"] = "nva"; - This sets the nationalities of the teams. Allies can be american, british, or russian. Axis can be german. - - If using minefields or exploders: - maps\mp\_load::main(); - - Optional level script settings - ------------------------------ - Soldier Type and Variation: - game["american_soldiertype"] = "normandy"; - game["german_soldiertype"] = "normandy"; - This sets what character models are used for each nationality on a particular map. - - Valid settings: - american_soldiertype normandy - british_soldiertype normandy, africa - russian_soldiertype coats, padded - german_soldiertype normandy, africa, winterlight, winterdark -*/ - -/*QUAKED mp_dom_spawn (0.5 0.5 1.0) (-16 -16 0) (16 16 72) -Players spawn near their flags at one of these positions.*/ - -/*QUAKED mp_dom_spawn_flag_a (0.5 0.5 1.0) (-16 -16 0) (16 16 72) -Players spawn near their flags at one of these positions.*/ - -/*QUAKED mp_dom_spawn_flag_b (0.5 0.5 1.0) (-16 -16 0) (16 16 72) -Players spawn near their flags at one of these positions.*/ - -/*QUAKED mp_dom_spawn_flag_c (0.5 0.5 1.0) (-16 -16 0) (16 16 72) -Players spawn near their flags at one of these positions.*/ - -/*QUAKED mp_dom_spawn_axis_start (1.0 0.0 1.0) (-16 -16 0) (16 16 72) -Axis players spawn away from enemies and near their team at one of these positions at the start of a round.*/ - -/*QUAKED mp_dom_spawn_allies_start (0.0 1.0 1.0) (-16 -16 0) (16 16 72) -Allied players spawn away from enemies and near their team at one of these positions at the start of a round.*/ - -main() -{ - if(GetDvar( #"mapname") == "mp_background") - return; - - maps\mp\gametypes\_globallogic::init(); - maps\mp\gametypes\_callbacksetup::SetupCallbacks(); - maps\mp\gametypes\_globallogic::SetupCallbacks(); - - maps\mp\gametypes\_globallogic_utils::registerTimeLimitDvar( "dom", 30, 0, 1440 ); - maps\mp\gametypes\_globallogic_utils::registerScoreLimitDvar( "dom", 200, 0, 1000 ); - maps\mp\gametypes\_globallogic_utils::registerRoundLimitDvar( "dom", 1, 0, 10 ); - maps\mp\gametypes\_globallogic_utils::registerRoundWinLimitDvar( "dom", 0, 0, 10 ); - maps\mp\gametypes\_globallogic_utils::registerNumLivesDvar( "dom", 0, 0, 10 ); - - maps\mp\gametypes\_weapons::registerGrenadeLauncherDudDvar( level.gameType, 10, 0, 1440 ); - maps\mp\gametypes\_weapons::registerThrownGrenadeDudDvar( level.gameType, 0, 0, 1440 ); - maps\mp\gametypes\_weapons::registerKillstreakDelay( level.gameType, 0, 0, 1440 ); - - maps\mp\gametypes\_globallogic::registerFriendlyFireDelay( level.gameType, 15, 0, 1440 ); - - level.scoreRoundBased = true; - level.teamBased = true; - level.overrideTeamScore = true; - level.onStartGameType = ::onStartGameType; - level.onSpawnPlayer = ::onSpawnPlayer; - level.onSpawnPlayerUnified = ::onSpawnPlayerUnified; - level.onPlayerKilled = ::onPlayerKilled; - level.onPrecacheGameType = ::onPrecacheGameType; - level.onEndGame= ::onEndGame; - level.gamemodeSpawnDvars = ::dom_gamemodeSpawnDvars; - level.onRoundEndGame = ::onRoundEndGame; - - game["dialog"]["gametype"] = "dom_start"; - game["dialog"]["gametype_hardcore"] = "hcdom_start"; - game["dialog"]["offense_obj"] = "cap_start"; - game["dialog"]["defense_obj"] = "cap_start"; - level.lastDialogTime = 0; - - // Sets the scoreboard columns and determines with data is sent across the network - setscoreboardcolumns( "kills", "deaths" , "captures", "defends"); - - if ( !isOneRound() && isScoreRoundBased() ) - { - maps\mp\gametypes\_globallogic_score::resetTeamScores(); - } -} - - -onPrecacheGameType() -{ - precacheShader( "compass_waypoint_captureneutral" ); - precacheShader( "compass_waypoint_capture" ); - precacheShader( "compass_waypoint_defend" ); - precacheShader( "compass_waypoint_captureneutral_a" ); - precacheShader( "compass_waypoint_capture_a" ); - precacheShader( "compass_waypoint_defend_a" ); - precacheShader( "compass_waypoint_captureneutral_b" ); - precacheShader( "compass_waypoint_capture_b" ); - precacheShader( "compass_waypoint_defend_b" ); - precacheShader( "compass_waypoint_captureneutral_c" ); - precacheShader( "compass_waypoint_capture_c" ); - precacheShader( "compass_waypoint_defend_c" ); - precacheShader( "compass_waypoint_captureneutral_d" ); - precacheShader( "compass_waypoint_capture_d" ); - precacheShader( "compass_waypoint_defend_d" ); - precacheShader( "compass_waypoint_captureneutral_e" ); - precacheShader( "compass_waypoint_capture_e" ); - precacheShader( "compass_waypoint_defend_e" ); - - precacheShader( "waypoint_captureneutral" ); - precacheShader( "waypoint_capture" ); - precacheShader( "waypoint_defend" ); - precacheShader( "waypoint_captureneutral_a" ); - precacheShader( "waypoint_capture_a" ); - precacheShader( "waypoint_defend_a" ); - precacheShader( "waypoint_captureneutral_b" ); - precacheShader( "waypoint_capture_b" ); - precacheShader( "waypoint_defend_b" ); - precacheShader( "waypoint_captureneutral_c" ); - precacheShader( "waypoint_capture_c" ); - precacheShader( "waypoint_defend_c" ); - precacheShader( "waypoint_captureneutral_d" ); - precacheShader( "waypoint_capture_d" ); - precacheShader( "waypoint_defend_d" ); - precacheShader( "waypoint_captureneutral_e" ); - precacheShader( "waypoint_capture_e" ); - precacheShader( "waypoint_defend_e" ); - - /*flagBaseFX = []; - - flagBaseFX["marines"] = "misc/fx_ui_flagbase_gold_t5"; - flagBaseFX["nva"] = "misc/fx_ui_flagbase_red"; - flagBaseFX["tropas"] = "misc/fx_ui_flagbase_red"; - flagBaseFX["specops"] = "misc/fx_ui_flagbase_gold"; - flagBaseFX["rebels"] = "misc/fx_ui_flagbase_gold"; - flagBaseFX["russian"] = "misc/fx_ui_flagbase_orange"; - */ -} - - -onStartGameType() -{ - maps\mp\gametypes\_globallogic_ui::setObjectiveText( "allies", &"OBJECTIVES_DOM" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveText( "axis", &"OBJECTIVES_DOM" ); - - if ( level.splitscreen ) - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"OBJECTIVES_DOM" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"OBJECTIVES_DOM" ); - } - else - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"OBJECTIVES_DOM_SCORE" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"OBJECTIVES_DOM_SCORE" ); - } - maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( "allies", &"OBJECTIVES_DOM_HINT" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( "axis", &"OBJECTIVES_DOM_HINT" ); - - level.flagBaseFXid = []; - level.flagBaseFXid[ "allies" ] = loadfx( "misc/fx_ui_flagbase_gold_t5" ); - level.flagBaseFXid[ "axis" ] = loadfx( "misc/fx_ui_flagbase_gold_t5" ); - - setClientNameMode("auto_change"); - - level.spawnMins = ( 0, 0, 0 ); - level.spawnMaxs = ( 0, 0, 0 ); - maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_dom_spawn_allies_start" ); - maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_dom_spawn_axis_start" ); - - - level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs ); - setMapCenter( level.mapCenter ); - - spawnpoint = maps\mp\gametypes\_spawnlogic::getRandomIntermissionPoint(); - setDemoIntermissionPoint( spawnpoint.origin, spawnpoint.angles ); - - level.spawn_all = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dom_spawn" ); - level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dom_spawn_axis_start" ); - level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dom_spawn_allies_start" ); - - flagSpawns = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dom_spawn_flag_a" ); - //assert( flagSpawns.size > 0 ); - - level.startPos["allies"] = level.spawn_allies_start[0].origin; - level.startPos["axis"] = level.spawn_axis_start[0].origin; - - allowed[0] = "dom"; - maps\mp\gametypes\_gameobjects::main(allowed); - - // now that the game objects have been deleted place the influencers - maps\mp\gametypes\_spawning::create_map_placed_influencers(); - - maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist_75", 40 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist_50", 30 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist_25", 20 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist", 10 ); - - maps\mp\gametypes\_rank::registerScoreInfo( "capture", 150 ); - - maps\mp\gametypes\_rank::registerScoreInfo( "defend", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "defend_assist", 10 ); - - maps\mp\gametypes\_rank::registerScoreInfo( "assault", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assault_assist", 10 ); - - updateGametypeDvars(); - thread domFlags(); - thread updateDomScores(); - level change_dom_spawns(); -} - - -onSpawnPlayerUnified() -{ - maps\mp\gametypes\_spawning::onSpawnPlayer_Unified(); -} - -onSpawnPlayer() -{ - spawnpoint = undefined; - - if ( !level.useStartSpawns ) - { - flagsOwned = 0; - enemyFlagsOwned = 0; - myTeam = self.pers["team"]; - enemyTeam = getOtherTeam( myTeam ); - for ( i = 0; i < level.flags.size; i++ ) - { - team = level.flags[i] getFlagTeam(); - if ( team == myTeam ) - flagsOwned++; - else if ( team == enemyTeam ) - enemyFlagsOwned++; - } - - if ( flagsOwned == level.flags.size ) - { - // own all flags! pretend we don't own the last one we got, so enemies can spawn there - enemyBestSpawnFlag = level.bestSpawnFlag[ getOtherTeam( self.pers["team"] ) ]; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all, getSpawnsBoundingFlag( enemyBestSpawnFlag ) ); - } - else if ( flagsOwned > 0 ) - { - // spawn near any flag we own that's nearish something we can capture - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all, getBoundaryFlagSpawns( myTeam ) ); - } - else - { - // own no flags! - bestFlag = undefined; - if ( enemyFlagsOwned > 0 && enemyFlagsOwned < level.flags.size ) - { - // there should be an unowned one to use - bestFlag = getUnownedFlagNearestStart( myTeam ); - } - if ( !isdefined( bestFlag ) ) - { - // pretend we still own the last one we lost - bestFlag = level.bestSpawnFlag[ self.pers["team"] ]; - } - level.bestSpawnFlag[ self.pers["team"] ] = bestFlag; - - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all, bestFlag.nearbyspawns ); - } - } - - if ( !isdefined( spawnpoint ) ) - { - if (self.pers["team"] == "axis") - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(level.spawn_axis_start); - else - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(level.spawn_allies_start); - } - - //spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all ); - - assert( isDefined(spawnpoint) ); - - self spawn(spawnpoint.origin, spawnpoint.angles, "dom"); -} - -onEndGame( winningTeam ) -{ - for ( i = 0; i < level.domFlags.size; i++ ) - { - level.domFlags[i] maps\mp\gametypes\_gameobjects::allowUse( "none" ); - } -} - -onRoundEndGame( roundWinner ) -{ - if ( game["roundswon"]["allies"] == game["roundswon"]["axis"] ) - winner = "tie"; - else if ( game["roundswon"]["axis"] > game["roundswon"]["allies"] ) - winner = "axis"; - else - winner = "allies"; - - return winner; -} - -updateGametypeDvars() -{ - level.flagCaptureTime = dvarFloatValue( "flagcapturetime", 10, 0, 30 ); - level.flagCaptureLPM = dvarFloatValue( "maxFlagCapturePerMinute", 3, 0, 10 ); - level.playerCaptureLPM = dvarFloatValue( "maxPlayerCapturePerMinute", 2, 0, 10 ); - level.playerCaptureMax = dvarFloatValue( "maxPlayerCapture", 1000, 0, 1000 ); - level.playerOffensiveMax = dvarFloatValue( "maxPlayerOffensive", 16, 0, 1000 ); - level.playerDefensiveMax = dvarFloatValue( "maxPlayerDefensive", 16, 0, 1000 ); -} - -domFlags() -{ - level.lastStatus["allies"] = 0; - level.lastStatus["axis"] = 0; - - game["flagmodels"] = []; - game["flagmodels"]["neutral"] = "mp_flag_neutral"; - - if ( game["allies"] == "marines" ) - game["flagmodels"]["allies"] = "mp_flag_allies_1"; - else if ( game["allies"] == "rebels" ) - game["flagmodels"]["allies"] = "mp_flag_allies_3"; - else - game["flagmodels"]["allies"] = "mp_flag_allies_2"; - - if ( game["axis"] == "russian" ) - game["flagmodels"]["axis"] = "mp_flag_axis_1"; - else if ( game["axis"] == "tropas" ) - game["flagmodels"]["axis"] = "mp_flag_axis_3"; - else - game["flagmodels"]["axis"] = "mp_flag_axis_2"; - - precacheModel( game["flagmodels"]["neutral"] ); - precacheModel( game["flagmodels"]["allies"] ); - precacheModel( game["flagmodels"]["axis"] ); - - - precacheString( &"MP_CAPTURING_FLAG" ); - precacheString( &"MP_LOSING_FLAG" ); - //precacheString( &"MP_LOSING_LAST_FLAG" ); - precacheString( &"MP_DOM_YOUR_FLAG_WAS_CAPTURED" ); - precacheString( &"MP_DOM_ENEMY_FLAG_CAPTURED" ); - precacheString( &"MP_DOM_NEUTRAL_FLAG_CAPTURED" ); - - precacheString( &"MP_ENEMY_FLAG_CAPTURED_BY" ); - precacheString( &"MP_NEUTRAL_FLAG_CAPTURED_BY" ); - precacheString( &"MP_FRIENDLY_FLAG_CAPTURED_BY" ); - precacheString( &"MP_DOM_FLAG_A_CAPTURED_BY" ); - precacheString( &"MP_DOM_FLAG_B_CAPTURED_BY" ); - precacheString( &"MP_DOM_FLAG_C_CAPTURED_BY" ); - precacheString( &"MP_DOM_FLAG_D_CAPTURED_BY" ); - precacheString( &"MP_DOM_FLAG_E_CAPTURED_BY" ); - - primaryFlags = getEntArray( "flag_primary", "targetname" ); - secondaryFlags = getEntArray( "flag_secondary", "targetname" ); - - if ( (primaryFlags.size + secondaryFlags.size) < 2 ) - { - printLn( "^1Not enough domination flags found in level!" ); - maps\mp\gametypes\_callbacksetup::AbortLevel(); - return; - } - - level.flags = []; - for ( index = 0; index < primaryFlags.size; index++ ) - level.flags[level.flags.size] = primaryFlags[index]; - - for ( index = 0; index < secondaryFlags.size; index++ ) - level.flags[level.flags.size] = secondaryFlags[index]; - - level.domFlags = []; - for ( index = 0; index < level.flags.size; index++ ) - { - trigger = level.flags[index]; - if ( isDefined( trigger.target ) ) - { - visuals[0] = getEnt( trigger.target, "targetname" ); - } - else - { - visuals[0] = spawn( "script_model", trigger.origin ); - visuals[0].angles = trigger.angles; - } - - visuals[0] setModel( game["flagmodels"]["neutral"] ); - - domFlag = maps\mp\gametypes\_gameobjects::createUseObject( "neutral", trigger, visuals, (0,0,100) ); - domFlag maps\mp\gametypes\_gameobjects::allowUse( "enemy" ); - domFlag maps\mp\gametypes\_gameobjects::setUseTime( level.flagCaptureTime ); - domFlag maps\mp\gametypes\_gameobjects::setUseText( &"MP_CAPTURING_FLAG" ); - label = domFlag maps\mp\gametypes\_gameobjects::getLabel(); - domFlag.label = label; - domFlag maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend" + label ); - domFlag maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" + label ); - domFlag maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_captureneutral" + label ); - domFlag maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_captureneutral" + label ); - domFlag maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - domFlag.onUse = ::onUse; - domFlag.onBeginUse = ::onBeginUse; - domFlag.onUseUpdate = ::onUseUpdate; - domFlag.onEndUse = ::onEndUse; - - - traceStart = visuals[0].origin + (0,0,32); - traceEnd = visuals[0].origin + (0,0,-32); - trace = bulletTrace( traceStart, traceEnd, false, undefined ); - - upangles = vectorToAngles( trace["normal"] ); - domFlag.baseeffectforward = anglesToForward( upangles ); - domFlag.baseeffectright = anglesToRight( upangles ); - - domFlag.baseeffectpos = trace["position"]; - -// makeDvarServerInfo( "scr_obj" + label, "neutral" ); -// makeDvarServerInfo( "scr_obj" + label + "_flash", 0 ); -// setDvar( "scr_obj" + label, "neutral" ); -// setDvar( "scr_obj" + label + "_flash", 0 ); - - // legacy spawn code support - level.flags[index].useObj = domFlag; - level.flags[index].adjflags = []; - level.flags[index].nearbyspawns = []; - - domFlag.levelFlag = level.flags[index]; - - level.domFlags[level.domFlags.size] = domFlag; - } - - // level.bestSpawnFlag is used as a last resort when the enemy holds all flags. - level.bestSpawnFlag = []; - level.bestSpawnFlag[ "allies" ] = getUnownedFlagNearestStart( "allies", undefined ); - level.bestSpawnFlag[ "axis" ] = getUnownedFlagNearestStart( "axis", level.bestSpawnFlag[ "allies" ] ); - - for ( index = 0; index < level.domFlags.size; index++ ) - { - level.domFlags[index] createFlagSpawnInfluencers(); - } - - flagSetup(); - -// setDvar( level.scoreLimitDvar, level.domFlags.size ); - - /# - thread domDebug(); - #/ -} - -getUnownedFlagNearestStart( team, excludeFlag ) -{ - best = undefined; - bestdistsq = undefined; - for ( i = 0; i < level.flags.size; i++ ) - { - flag = level.flags[i]; - - if ( flag getFlagTeam() != "neutral" ) - continue; - - distsq = distanceSquared( flag.origin, level.startPos[team] ); - if ( (!isDefined( excludeFlag ) || flag != excludeFlag) && (!isdefined( best ) || distsq < bestdistsq) ) - { - bestdistsq = distsq; - best = flag; - } - } - return best; -} - -/# -domDebug() -{ - while(1) - { - if (GetDvar( #"scr_domdebug") != "1") { - wait 2; - continue; - } - - while(1) - { - if (GetDvar( #"scr_domdebug") != "1") - break; - // show flag connections and each flag's spawnpoints - for (i = 0; i < level.flags.size; i++) { - for (j = 0; j < level.flags[i].adjflags.size; j++) { - line(level.flags[i].origin, level.flags[i].adjflags[j].origin, (1,1,1)); - } - - for (j = 0; j < level.flags[i].nearbyspawns.size; j++) { - line(level.flags[i].origin, level.flags[i].nearbyspawns[j].origin, (.2,.2,.6)); - } - - if ( level.flags[i] == level.bestSpawnFlag["allies"] ) - print3d( level.flags[i].origin, "allies best spawn flag" ); - if ( level.flags[i] == level.bestSpawnFlag["axis"] ) - print3d( level.flags[i].origin, "axis best spawn flag" ); - } - wait .05; - } - } -} -#/ - -onBeginUse( player ) -{ - ownerTeam = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - setDvar( "scr_obj" + self maps\mp\gametypes\_gameobjects::getLabel() + "_flash", 1 ); - self.didStatusNotify = false; - if ( ownerTeam == "allies" ) - otherTeam = "axis"; - else - otherTeam = "allies"; - - if ( ownerTeam == "neutral" ) - { - - if( getTime() - level.lastDialogTime > 5000 ) - { - otherTeam = getOtherTeam( player.pers["team"] ); - statusDialog( "securing"+self.label, player.pers["team"] ); - //statusDialog( "losing"+self.label, otherTeam ); - level.lastDialogTime = getTime(); - } - self.objPoints[player.pers["team"]] thread maps\mp\gametypes\_objpoints::startFlashing(); - return; - } - - - - self.objPoints["allies"] thread maps\mp\gametypes\_objpoints::startFlashing(); - self.objPoints["axis"] thread maps\mp\gametypes\_objpoints::startFlashing(); -} - - -onUseUpdate( team, progress, change ) -{ - if ( progress > 0.05 && change && !self.didStatusNotify ) - { - ownerTeam = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - if ( ownerTeam == "neutral" ) - { - - if( getTime() - level.lastDialogTime > 10000 ) - { - otherTeam = getOtherTeam( team ); - statusDialog( "securing"+self.label, team ); - statusDialog( "losing"+self.label, otherTeam ); - level.lastDialogTime = getTime(); - } - } - else - { - if( getTime() - level.lastDialogTime > 10000 ) - { - statusDialog( "losing"+self.label, ownerTeam ); - statusDialog( "securing"+self.label, team ); - level.lastDialogTime = getTime(); - } - } - - self.didStatusNotify = true; - } -} - - -statusDialog( dialog, team ) -{ - time = getTime(); - if ( getTime() < level.lastStatus[team] + 6000 ) - return; - - thread delayedLeaderDialog( dialog, team ); - level.lastStatus[team] = getTime(); -} - - -onEndUse( team, player, success ) -{ - setDvar( "scr_obj" + self maps\mp\gametypes\_gameobjects::getLabel() + "_flash", 0 ); - - self.objPoints["allies"] thread maps\mp\gametypes\_objpoints::stopFlashing(); - self.objPoints["axis"] thread maps\mp\gametypes\_objpoints::stopFlashing(); -} - - -resetFlagBaseEffect() -{ - // once these get setup we never change them - if ( isdefined( self.baseeffect ) ) - return; - - team = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - - if ( team != "axis" && team != "allies" ) - return; - - fxid = level.flagBaseFXid[ team ]; - - self.baseeffect = spawnFx( fxid, self.baseeffectpos, self.baseeffectforward, self.baseeffectright ); - triggerFx( self.baseeffect ); -} - -onUse( player ) -{ - team = player.pers["team"]; - oldTeam = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - label = self maps\mp\gametypes\_gameobjects::getLabel(); - - player logString( "flag captured: " + self.label ); - - self maps\mp\gametypes\_gameobjects::setOwnerTeam( team ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_capture" + label ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_capture" + label ); - self.visuals[0] setModel( game["flagmodels"][team] ); - setDvar( "scr_obj" + self maps\mp\gametypes\_gameobjects::getLabel(), team ); - - self resetFlagBaseEffect(); - - level.useStartSpawns = false; - - assert( team != "neutral" ); - - string = &""; - switch ( label ) - { - case "_a": - string = &"MP_DOM_FLAG_A_CAPTURED_BY"; - break; - case "_b": - string = &"MP_DOM_FLAG_B_CAPTURED_BY"; - break; - case "_c": - string = &"MP_DOM_FLAG_C_CAPTURED_BY"; - break; - case "_d": - string = &"MP_DOM_FLAG_D_CAPTURED_BY"; - break; - case "_e": - string = &"MP_DOM_FLAG_E_CAPTURED_BY"; - break; - default: - break; - } - assert ( string != &"" ); - - // Copy touch list so there aren't any threading issues - touchList = []; - touchKeys = GetArrayKeys( self.touchList[team] ); - for ( i = 0 ; i < touchKeys.size ; i++ ) - touchList[touchKeys[i]] = self.touchList[team][touchKeys[i]]; - thread give_capture_credit( touchList, string ); - - if ( oldTeam == "neutral" ) - { - otherTeam = getOtherTeam( team ); - thread printAndSoundOnEveryone( team, otherTeam, &"", &"", "mp_war_objective_taken", undefined, "" ); - - thread playSoundOnPlayers( "mus_dom_captured"+"_"+level.teamPostfix[team] ); - if ( getTeamFlagCount( team ) == level.flags.size ) - { - - statusDialog( "secure_all", team ); - statusDialog( "lost_all", otherTeam ); - } - else - { - statusDialog( "secured"+self.label, team ); - statusDialog( "lost"+self.label, otherTeam ); - } - } - else - { - thread printAndSoundOnEveryone( team, oldTeam, &"", &"", "mp_war_objective_taken", "mp_war_objective_lost", "" ); - -// thread delayedLeaderDialogBothTeams( "obj_lost", oldTeam, "obj_taken", team ); - -// thread playSoundOnPlayers( "mus_dom_captured"+"_"+level.teamPostfix[team] ); - if ( getTeamFlagCount( team ) == level.flags.size ) - { - - statusDialog( "secure_all", team ); - statusDialog( "lost_all", oldTeam ); - } - else - { - statusDialog( "secured"+self.label, team ); - - statusDialog( "lost"+self.label, oldTeam ); - } - - level.bestSpawnFlag[ oldTeam ] = self.levelFlag; - } - - if ( dominated_challenge_check() ) - { - maps\mp\_challenges::dominated( team ); - } - self update_spawn_influencers( team ); - level change_dom_spawns(); -} - -give_capture_credit( touchList, string ) -{ - wait .05; - maps\mp\gametypes\_globallogic_utils::WaitTillSlowProcessAllowed(); - - self updateCapsPerMinute(); - - players = getArrayKeys( touchList ); - for ( i = 0; i < players.size; i++ ) - { - player_from_touchlist = touchList[players[i]].player; - player_from_touchlist updateCapsPerMinute(); - if ( !isScoreBoosting( player_from_touchlist, self ) ) - { - maps\mp\gametypes\_globallogic_score::givePlayerScore( "capture", player_from_touchlist ); - if( isdefined(player_from_touchlist.pers["captures"]) ) - { - player_from_touchlist.pers["captures"]++; - player_from_touchlist.captures = player_from_touchlist.pers["captures"]; - } - player_from_touchlist maps\mp\_medals::positionSecure(); - player_from_touchlist maps\mp\gametypes\_persistence::statAddWithGameType( "CAPTURES", 1 ); - - if ( isdefined( player_from_touchlist.thisPlayerIsInLastStand ) && player_from_touchlist.thisPlayerIsInLastStand == true ) - player_from_touchlist maps\mp\_medals::heroic(); - } - - level thread maps\mp\_popups::DisplayTeamMessageToAll( string, player_from_touchlist ); - } -} - -delayedLeaderDialog( sound, team ) -{ - wait .1; - maps\mp\gametypes\_globallogic_utils::WaitTillSlowProcessAllowed(); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( sound, team ); -} -delayedLeaderDialogBothTeams( sound1, team1, sound2, team2 ) -{ - wait .1; - maps\mp\gametypes\_globallogic_utils::WaitTillSlowProcessAllowed(); - - maps\mp\gametypes\_globallogic_audio::leaderDialogBothTeams( sound1, team1, sound2, team2 ); -} - - -updateDomScores() -{ - // disable score limit check to allow both axis and allies score to be processed - level.endGameOnScoreLimit = false; - //level.playingActionMusic = false; - - while ( !level.gameEnded ) - { - numOwnedFlags = 0; - - numFlags = getTeamFlagCount( "allies" ); - numOwnedFlags += numFlags; - if ( numFlags ) - [[level._setTeamScore]]( "allies", [[level._getTeamScore]]( "allies" ) + numFlags ); - - numFlags = getTeamFlagCount( "axis" ); - numOwnedFlags += numFlags; - if ( numFlags ) - [[level._setTeamScore]]( "axis", [[level._getTeamScore]]( "axis" ) + numFlags ); - - - level.endGameOnScoreLimit = true; - maps\mp\gametypes\_globallogic::checkScoreLimit(); - level.endGameOnScoreLimit = false; - onScoreCloseMusic (); - - // end the game if people aren't playing - timePassed = maps\mp\gametypes\_globallogic_utils::getTimePassed(); - if ( (((timePassed / 1000) > 120 && numOwnedFlags < 2) || ((timePassed / 1000) > 300 && numOwnedFlags < 3)) && ( level.onlinegame && !GetDvarInt( #"xblive_privatematch" ) ) ) - { - thread maps\mp\gametypes\_globallogic::endGame( "tie", game["strings"]["time_limit_reached"] ); - return; - } - - wait ( 5.0 ); - maps\mp\gametypes\_hostmigration::waitTillHostMigrationDone(); - } -} -onScoreCloseMusic () -{ - axisScore = [[level._getTeamScore]]( "axis" ); - alliedScore = [[level._getTeamScore]]( "allies" ); - scoreLimit = level.scoreLimit; - scoreThreshold = scoreLimit * .1; - scoreDif = abs(axisScore - alliedScore); - scoreThresholdStart = abs(scoreLimit - scoreThreshold); - scoreLimitCheck = scoreLimit - 10; - - if( !IsDefined( level.playingActionMusic ) ) - level.playingActionMusic = false; - - if (alliedScore > axisScore) - { - currentScore = alliedScore; - } - else - { - currentScore = axisScore; - } - if( getdvarint( #"debug_music" ) > 0 ) - { - println ("Music System Domination - scoreDif " + scoreDif); - println ("Music System Domination - axisScore " + axisScore); - println ("Music System Domination - alliedScore " + alliedScore); - println ("Music System Domination - scoreLimit " + scoreLimit); - println ("Music System Domination - currentScore " + currentScore); - println ("Music System Domination - scoreThreshold " + scoreThreshold); - println ("Music System Domination - scoreDif " + scoreDif); - println ("Music System Domination - scoreThresholdStart " + scoreThresholdStart); - } - if ( scoreDif <= scoreThreshold && scoreThresholdStart <= currentScore && (level.playingActionMusic != true)) - { - //play some action music - thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "TIME_OUT", "both" ); - thread maps\mp\gametypes\_globallogic_audio::actionMusicSet(); - } -/* else if (scoreDif >= scoreThreshold && level.playingActionMusic && currentScore <= scoreLimitCheck ) - { - //TODO : Decide if we want to stop music on large score spread CDC - // if we are playing some action music and the score starts to be a blow out return to last state - thread maps\mp\gametypes\_globallogic_audio::return_music_state_team( "both" ); - level.playingActionMusic = false; - } -*/ - else - { - return; - } -} -onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ) -{ - if ( self.touchTriggers.size && isPlayer( attacker ) && attacker.pers["team"] != self.pers["team"] ) - { - triggerIds = getArrayKeys( self.touchTriggers ); - ownerTeam = self.touchTriggers[triggerIds[0]].useObj.ownerTeam; - team = self.pers["team"]; - - if ( team == ownerTeam ) - { - if ( !IsDefined( attacker.dom_offends ) ) - attacker.dom_offends = 0; - - attacker.dom_offends++; - - if ( level.playerOffensiveMax >= attacker.dom_offends ) - { - attacker thread [[level.onXPEvent]]( "assault" ); - if ( !isdefined( sWeapon ) || !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - attacker maps\mp\_medals::offense( sWeapon ); - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "OFFENDS", 1 ); - } - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "assault", attacker ); - } - } - else - { - if ( !IsDefined( attacker.dom_defends ) ) - attacker.dom_defends = 0; - - attacker.dom_defends++; - - if ( level.playerDefensiveMax >= attacker.dom_defends ) - { - attacker thread [[level.onXPEvent]]( "defend" ); - if ( !isdefined( sWeapon ) || !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - attacker maps\mp\_medals::defense( sWeapon ); - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "DEFENDS", 1 ); - } - - if( isdefined(attacker.pers["defends"]) ) - { - attacker.pers["defends"]++; - attacker.defends = attacker.pers["defends"]; - } - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "defend", attacker ); - } - } - } -} - - - -getTeamFlagCount( team ) -{ - score = 0; - for (i = 0; i < level.flags.size; i++) - { - if ( level.domFlags[i] maps\mp\gametypes\_gameobjects::getOwnerTeam() == team ) - score++; - } - return score; -} - -getFlagTeam() -{ - return self.useObj maps\mp\gametypes\_gameobjects::getOwnerTeam(); -} - -getBoundaryFlags() -{ - // get all flags which are adjacent to flags that aren't owned by the same team - bflags = []; - for (i = 0; i < level.flags.size; i++) - { - for (j = 0; j < level.flags[i].adjflags.size; j++) - { - if (level.flags[i].useObj maps\mp\gametypes\_gameobjects::getOwnerTeam() != level.flags[i].adjflags[j].useObj maps\mp\gametypes\_gameobjects::getOwnerTeam() ) - { - bflags[bflags.size] = level.flags[i]; - break; - } - } - } - - return bflags; -} - -getBoundaryFlagSpawns(team) -{ - spawns = []; - - bflags = getBoundaryFlags(); - for (i = 0; i < bflags.size; i++) - { - if (isdefined(team) && bflags[i] getFlagTeam() != team) - continue; - - for (j = 0; j < bflags[i].nearbyspawns.size; j++) - spawns[spawns.size] = bflags[i].nearbyspawns[j]; - } - - return spawns; -} - -getSpawnsBoundingFlag( avoidflag ) -{ - spawns = []; - - for (i = 0; i < level.flags.size; i++) - { - flag = level.flags[i]; - if ( flag == avoidflag ) - continue; - - isbounding = false; - for (j = 0; j < flag.adjflags.size; j++) - { - if ( flag.adjflags[j] == avoidflag ) - { - isbounding = true; - break; - } - } - - if ( !isbounding ) - continue; - - for (j = 0; j < flag.nearbyspawns.size; j++) - spawns[spawns.size] = flag.nearbyspawns[j]; - } - - return spawns; -} - -// gets an array of all spawnpoints which are near flags that are -// owned by the given team, or that are adjacent to flags owned by the given team. -getOwnedAndBoundingFlagSpawns(team) -{ - spawns = []; - - for (i = 0; i < level.flags.size; i++) - { - if ( level.flags[i] getFlagTeam() == team ) - { - // add spawns near this flag - for (s = 0; s < level.flags[i].nearbyspawns.size; s++) - spawns[spawns.size] = level.flags[i].nearbyspawns[s]; - } - else - { - for (j = 0; j < level.flags[i].adjflags.size; j++) - { - if ( level.flags[i].adjflags[j] getFlagTeam() == team ) - { - // add spawns near this flag - for (s = 0; s < level.flags[i].nearbyspawns.size; s++) - spawns[spawns.size] = level.flags[i].nearbyspawns[s]; - break; - } - } - } - } - - return spawns; -} - -// gets an array of all spawnpoints which are near flags that are -// owned by the given team -getOwnedFlagSpawns(team) -{ - spawns = []; - - for (i = 0; i < level.flags.size; i++) - { - if ( level.flags[i] getFlagTeam() == team ) - { - // add spawns near this flag - for (s = 0; s < level.flags[i].nearbyspawns.size; s++) - spawns[spawns.size] = level.flags[i].nearbyspawns[s]; - } - } - - return spawns; -} - -flagSetup() -{ - maperrors = []; - descriptorsByLinkname = []; - - // (find each flag_descriptor object) - descriptors = getentarray("flag_descriptor", "targetname"); - - flags = level.flags; - - for (i = 0; i < level.domFlags.size; i++) - { - closestdist = undefined; - closestdesc = undefined; - for (j = 0; j < descriptors.size; j++) - { - dist = distance(flags[i].origin, descriptors[j].origin); - if (!isdefined(closestdist) || dist < closestdist) { - closestdist = dist; - closestdesc = descriptors[j]; - } - } - - if (!isdefined(closestdesc)) { - maperrors[maperrors.size] = "there is no flag_descriptor in the map! see explanation in dom.gsc"; - break; - } - if (isdefined(closestdesc.flag)) { - maperrors[maperrors.size] = "flag_descriptor with script_linkname \"" + closestdesc.script_linkname + "\" is nearby more than one flag; is there a unique descriptor near each flag?"; - continue; - } - flags[i].descriptor = closestdesc; - closestdesc.flag = flags[i]; - descriptorsByLinkname[closestdesc.script_linkname] = closestdesc; - } - - if (maperrors.size == 0) - { - // find adjacent flags - for (i = 0; i < flags.size; i++) - { - if (isdefined(flags[i].descriptor.script_linkto)) - adjdescs = strtok(flags[i].descriptor.script_linkto, " "); - else - adjdescs = []; - for (j = 0; j < adjdescs.size; j++) - { - otherdesc = descriptorsByLinkname[adjdescs[j]]; - if (!isdefined(otherdesc) || otherdesc.targetname != "flag_descriptor") { - maperrors[maperrors.size] = "flag_descriptor with script_linkname \"" + flags[i].descriptor.script_linkname + "\" linked to \"" + adjdescs[j] + "\" which does not exist as a script_linkname of any other entity with a targetname of flag_descriptor (or, if it does, that flag_descriptor has not been assigned to a flag)"; - continue; - } - adjflag = otherdesc.flag; - if (adjflag == flags[i]) { - maperrors[maperrors.size] = "flag_descriptor with script_linkname \"" + flags[i].descriptor.script_linkname + "\" linked to itself"; - continue; - } - flags[i].adjflags[flags[i].adjflags.size] = adjflag; - } - } - } - - // assign each spawnpoint to nearest flag - spawnpoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_dom_spawn" ); - for (i = 0; i < spawnpoints.size; i++) - { - if (isdefined(spawnpoints[i].script_linkto)) { - desc = descriptorsByLinkname[spawnpoints[i].script_linkto]; - if (!isdefined(desc) || desc.targetname != "flag_descriptor") { - maperrors[maperrors.size] = "Spawnpoint at " + spawnpoints[i].origin + "\" linked to \"" + spawnpoints[i].script_linkto + "\" which does not exist as a script_linkname of any entity with a targetname of flag_descriptor (or, if it does, that flag_descriptor has not been assigned to a flag)"; - continue; - } - nearestflag = desc.flag; - } - else { - nearestflag = undefined; - nearestdist = undefined; - for (j = 0; j < flags.size; j++) - { - dist = distancesquared(flags[j].origin, spawnpoints[i].origin); - if (!isdefined(nearestflag) || dist < nearestdist) - { - nearestflag = flags[j]; - nearestdist = dist; - } - } - } - nearestflag.nearbyspawns[nearestflag.nearbyspawns.size] = spawnpoints[i]; - } - - if (maperrors.size > 0) - { - println("^1------------ Map Errors ------------"); - for(i = 0; i < maperrors.size; i++) - println(maperrors[i]); - println("^1------------------------------------"); - - maps\mp\_utility::error("Map errors. See above"); - maps\mp\gametypes\_callbacksetup::AbortLevel(); - - return; - } -} - -createFlagSpawnInfluencers() -{ - ss = level.spawnsystem; - - for (flag_index = 0; flag_index < level.flags.size; flag_index++) - { - if ( level.domFlags[flag_index] == self ) - break; - } - - ABC = []; - ABC[0] = "A"; - ABC[1] = "B"; - ABC[2] = "C"; - - // domination: owned flag influencers - self.owned_flag_influencer = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - self.trigger.origin, - ss.dom_owned_flag_influencer_radius[flag_index], - ss.dom_owned_flag_influencer_score[flag_index], - 0, - "dom_owned_flag_" + ABC[flag_index] + ",r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ss.dom_owned_flag_influencer_score_curve) ); - - // domination: un-owned inner flag influencers - self.neutral_flag_influencer = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - self.trigger.origin, - ss.dom_unowned_flag_influencer_radius, - ss.dom_unowned_flag_influencer_score, - 0, - "dom_unowned_flag,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ss.dom_owned_flag_influencer_score_curve) ); - - // domination: enemy flag influencers - self.enemy_flag_influencer = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - self.trigger.origin, - ss.dom_enemy_flag_influencer_radius[flag_index], - ss.dom_enemy_flag_influencer_score[flag_index], - 0, - "dom_enemy_flag_" + ABC[flag_index] + ",r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ss.dom_enemy_flag_influencer_score_curve) ); - - - // default it to neutral - self update_spawn_influencers("neutral"); -} - -update_spawn_influencers( team ) -{ - assert(isdefined(self.neutral_flag_influencer)); - assert(isdefined(self.owned_flag_influencer)); - assert(isdefined(self.enemy_flag_influencer)); - - if ( team == "neutral" ) - { - enableinfluencer(self.neutral_flag_influencer, true); - enableinfluencer(self.owned_flag_influencer, false); - enableinfluencer(self.enemy_flag_influencer, false); - } - else - { - enableinfluencer(self.neutral_flag_influencer, false); - enableinfluencer(self.owned_flag_influencer, true); - enableinfluencer(self.enemy_flag_influencer, true); - } - - if ( team == "allies" ) - { - setinfluencerteammask(self.owned_flag_influencer, level.spawnsystem.iSPAWN_TEAMMASK_ALLIES ); - setinfluencerteammask(self.enemy_flag_influencer, level.spawnsystem.iSPAWN_TEAMMASK_AXIS ); - } - else - { - setinfluencerteammask(self.owned_flag_influencer, level.spawnsystem.iSPAWN_TEAMMASK_AXIS ); - setinfluencerteammask(self.enemy_flag_influencer, level.spawnsystem.iSPAWN_TEAMMASK_ALLIES ); - } - -} - -dom_gamemodeSpawnDvars(reset_dvars) -{ - ss = level.spawnsystem; - - // domination: owned flag influencers - ss.dom_owned_flag_influencer_score = []; - ss.dom_owned_flag_influencer_radius = []; - - ss.dom_owned_flag_influencer_score[0] = set_dvar_float_if_unset("scr_spawn_dom_owned_flag_A_influencer_score", "10", reset_dvars); - ss.dom_owned_flag_influencer_radius[0] = set_dvar_float_if_unset("scr_spawn_dom_owned_flag_A_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - ss.dom_owned_flag_influencer_score[1] = set_dvar_float_if_unset("scr_spawn_dom_owned_flag_B_influencer_score", "10", reset_dvars); - ss.dom_owned_flag_influencer_radius[1] = set_dvar_float_if_unset("scr_spawn_dom_owned_flag_B_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - ss.dom_owned_flag_influencer_score[2] = set_dvar_float_if_unset("scr_spawn_dom_owned_flag_C_influencer_score", "10", reset_dvars); - ss.dom_owned_flag_influencer_radius[2] = set_dvar_float_if_unset("scr_spawn_dom_owned_flag_C_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - - ss.dom_owned_flag_influencer_score_curve = set_dvar_if_unset("scr_spawn_dom_owned_flag_influencer_score_curve", "constant", reset_dvars); - - // domination: enemy flag influencers - ss.dom_enemy_flag_influencer_score = []; - ss.dom_enemy_flag_influencer_radius = []; - - ss.dom_enemy_flag_influencer_score[0] = set_dvar_float_if_unset("scr_spawn_dom_enemy_flag_A_influencer_score", "-10", reset_dvars); - ss.dom_enemy_flag_influencer_radius[0] = set_dvar_float_if_unset("scr_spawn_dom_enemy_flag_A_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - ss.dom_enemy_flag_influencer_score[1] = set_dvar_float_if_unset("scr_spawn_dom_enemy_flag_B_influencer_score", "-10", reset_dvars); - ss.dom_enemy_flag_influencer_radius[1] = set_dvar_float_if_unset("scr_spawn_dom_enemy_flag_B_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - ss.dom_enemy_flag_influencer_score[2] = set_dvar_float_if_unset("scr_spawn_dom_enemy_flag_C_influencer_score", "-10", reset_dvars); - ss.dom_enemy_flag_influencer_radius[2] = set_dvar_float_if_unset("scr_spawn_dom_enemy_flag_C_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - - ss.dom_enemy_flag_influencer_score_curve = set_dvar_if_unset("scr_spawn_dom_enemy_flag_influencer_score_curve", "constant", reset_dvars); - - // domination: un-owned inner flag influencers - ss.dom_unowned_flag_influencer_score = set_dvar_float_if_unset("scr_spawn_dom_unowned_flag_influencer_score", "-500", reset_dvars); - ss.dom_unowned_flag_influencer_score_curve = set_dvar_if_unset("scr_spawn_dom_unowned_flag_influencer_score_curve", "constant", reset_dvars); - ss.dom_unowned_flag_influencer_radius = set_dvar_float_if_unset("scr_spawn_dom_unowned_flag_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); -} - -//Changes what spawns are available to a team based on what Domination point they own -change_dom_spawns() -{ - - maps\mp\gametypes\_spawnlogic::clearSpawnPoints(); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_dom_spawn" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_dom_spawn" ); - - //If one team owns all flags, we want to allow both teams to spawn anywhere - flag_number = level.flags.size; - if( dominated_check() ) - { - for ( i = 0 ; i < flag_number ; i++ ) - { - label = level.flags[i].useobj maps\mp\gametypes\_gameobjects::getLabel(); - flagSpawnName = "mp_dom_spawn_flag" + label; - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", flagSpawnName ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", flagSpawnName ); - } - } - else - { - for ( i = 0; i < flag_number; i++ ) - { - //'getlabel' gives us the appropriate "_a" or "_b" - label = level.flags[i].useobj maps\mp\gametypes\_gameobjects::getLabel(); - flagSpawnName = "mp_dom_spawn_flag" + label; - flag_team = level.flags[i] getFlagTeam(); - - if ( flag_team != "allies" ) - { - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", flagSpawnName ); - } - - if ( flag_team != "axis" ) - { - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", flagSpawnName ); - } - } - } - - maps\mp\gametypes\_spawning::updateAllSpawnPoints(); - -} - -dominated_challenge_check() -{ - num_flags = level.flags.size; - allied_flags = 0; - axis_flags = 0; - - for ( i = 0 ; i < num_flags ; i++ ) - { - flag_team = level.flags[i] getFlagTeam(); - - if ( flag_team == "allies" ) - { - allied_flags++; - } - else if ( flag_team == "axis" ) - { - axis_flags++; - } - else - { - return false; - } - - if ( ( allied_flags > 0 ) && ( axis_flags > 0 ) ) - return false; - } - - return true; -} -//This function checks to see if one team owns all three flags -dominated_check() -{ - num_flags = level.flags.size; - allied_flags = 0; - axis_flags = 0; - - for ( i = 0 ; i < num_flags ; i++ ) - { - flag_team = level.flags[i] getFlagTeam(); - - if ( flag_team == "allies" ) - { - allied_flags++; - } - else if ( flag_team == "axis" ) - { - axis_flags++; - } - - if ( ( allied_flags > 0 ) && ( axis_flags > 0 ) ) - return false; - } - - return true; -} - -updateCapsPerMinute() -{ - if ( !isDefined( self.capsPerMinute ) ) - { - self.numCaps = 0; - self.capsPerMinute = 0; - } - - self.numCaps++; - - minutesPassed = maps\mp\gametypes\_globallogic_utils::getTimePassed() / ( 60 * 1000 ); - - // players use the actual time played - if ( IsPlayer( self ) && IsDefined(self.timePlayed["total"]) ) - minutesPassed = self.timePlayed["total"] / 60; - - self.capsPerMinute = self.numCaps / minutesPassed; - if ( self.capsPerMinute > self.numCaps ) - self.capsPerMinute = self.numCaps; -} - -isScoreBoosting( player, flag ) -{ - if ( player.capsPerMinute > level.playerCaptureLPM ) - return true; - - if ( flag.capsPerMinute > level.flagCaptureLPM ) - return true; - - if ( player.numCaps > level.playerCaptureMax ) - return true; - - return false; -} \ No newline at end of file diff --git a/mods/patch_mp/maps/mp/gametypes/koth.gsc b/mods/patch_mp/maps/mp/gametypes/koth.gsc deleted file mode 100644 index cd8851d..0000000 --- a/mods/patch_mp/maps/mp/gametypes/koth.gsc +++ /dev/null @@ -1,1106 +0,0 @@ -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; - -main() -{ - if ( GetDvar( #"mapname") == "mp_background" ) - return; - - maps\mp\gametypes\_globallogic::init(); - maps\mp\gametypes\_callbacksetup::SetupCallbacks(); - maps\mp\gametypes\_globallogic::SetupCallbacks(); - - maps\mp\gametypes\_globallogic_utils::registerTimeLimitDvar( level.gameType, 30, 0, 1440 ); - maps\mp\gametypes\_globallogic_utils::registerScoreLimitDvar( level.gameType, 300, 0, 1000 ); - maps\mp\gametypes\_globallogic_utils::registerNumLivesDvar( level.gameType, 0, 0, 10 ); - - maps\mp\gametypes\_weapons::registerGrenadeLauncherDudDvar( level.gameType, 10, 0, 1440 ); - maps\mp\gametypes\_weapons::registerThrownGrenadeDudDvar( level.gameType, 0, 0, 1440 ); - maps\mp\gametypes\_weapons::registerKillstreakDelay( level.gameType, 0, 0, 1440 ); - - maps\mp\gametypes\_globallogic::registerFriendlyFireDelay( level.gameType, 15, 0, 1440 ); - - level.teamBased = true; - level.doPrematch = true; - level.overrideTeamScore = true; - level.onStartGameType = ::onStartGameType; - level.onSpawnPlayer = ::onSpawnPlayer; - level.onSpawnPlayerUnified = ::onSpawnPlayerUnified; - level.playerSpawnedCB = ::koth_playerSpawnedCB; - level.onPlayerKilled = ::onPlayerKilled; - level.onEndGame= ::onEndGame; - level.gamemodeSpawnDvars = ::koth_gamemodeSpawnDvars; - - precacheShader( "compass_waypoint_captureneutral" ); - precacheShader( "compass_waypoint_capture" ); - precacheShader( "compass_waypoint_defend" ); - - precacheShader( "waypoint_targetneutral" ); - precacheShader( "waypoint_captureneutral" ); - precacheShader( "waypoint_capture" ); - precacheShader( "waypoint_defend" ); - - precacheString( &"MP_WAITING_FOR_HQ" ); - - if ( GetDvar( #"koth_autodestroytime") == "" ) - setdvar("koth_autodestroytime", "60"); - level.hqAutoDestroyTime = GetDvarInt( #"koth_autodestroytime"); - - if ( GetDvar( #"koth_spawntime") == "" ) - setdvar("koth_spawntime", "45"); - level.hqSpawnTime = GetDvarInt( #"koth_spawntime"); - - if ( GetDvar( #"koth_kothmode") == "" ) - setdvar("koth_kothmode", "1"); - level.kothMode = GetDvarInt( #"koth_kothmode"); - - if ( GetDvar( #"koth_captureTime") == "" ) - setdvar("koth_captureTime", "20"); - level.captureTime = GetDvarInt( #"koth_captureTime"); - - if ( GetDvar( #"koth_destroyTime") == "" ) - setdvar("koth_destroyTime", "10"); - level.destroyTime = GetDvarInt( #"koth_destroyTime"); - - if ( GetDvar( #"koth_delayPlayer") == "" ) - setdvar("koth_delayPlayer", 1); - level.delayPlayer = GetDvarInt( #"koth_delayPlayer"); - - if ( GetDvar( #"koth_spawnDelay") == "" ) - setdvar("koth_spawnDelay", 0); - level.spawnDelay = GetDvarInt( #"koth_spawnDelay"); - - level.iconoffset = (0,0,32); - - level.onRespawnDelay = ::getRespawnDelay; - - game["dialog"]["gametype"] = "hq_start"; - game["dialog"]["gametype_hardcore"] = "hchq_start"; - //game["dialog"]["neutral_obj"] = "cap_start"; - game["dialog"]["offense_obj"] = "cap_start"; - game["dialog"]["defense_obj"] = "cap_start"; - //game["dialog"]["hq_defend"] = "hq_defend"; - - level.lastDialogTime = 0; - - // Sets the scoreboard columns and determines with data is sent across the network - setscoreboardcolumns( "kills", "deaths", "captures", "defends" ); -} - - -updateObjectiveHintMessages( alliesObjective, axisObjective ) -{ - game["strings"]["objective_hint_allies"] = alliesObjective; - game["strings"]["objective_hint_axis" ] = axisObjective; - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( isDefined( player.pers["team"] ) && player.pers["team"] != "spectator" ) - { - hintText = maps\mp\gametypes\_globallogic_ui::getObjectiveHintText( player.pers["team"] ); - player DisplayGameModeMessage( hintText, "uin_alert_slideout" ); - } - } -} - - -getRespawnDelay() -{ - self.lowerMessageOverride = undefined; - - if ( !isDefined( level.radio.gameobject ) ) - return undefined; - - hqOwningTeam = level.radio.gameobject maps\mp\gametypes\_gameobjects::getOwnerTeam(); - if ( self.pers["team"] == hqOwningTeam ) - { - if ( !isDefined( level.hqDestroyTime ) ) - return undefined; - - timeRemaining = (level.hqDestroyTime - gettime()) / 1000; - - if (!level.spawnDelay ) - return undefined; - - if ( level.spawnDelay >= level.hqAutoDestroyTime ) - self.lowerMessageOverride = &"MP_WAITING_FOR_HQ"; - - if ( level.delayPlayer ) - { - return min( level.spawnDelay, timeRemaining ); - } - else - { - return int(timeRemaining); - } - } -} - - -onStartGameType() -{ - // TODO: HQ objective text - maps\mp\gametypes\_globallogic_ui::setObjectiveText( "allies", &"OBJECTIVES_KOTH" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveText( "axis", &"OBJECTIVES_KOTH" ); - - if ( level.splitscreen ) - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"OBJECTIVES_KOTH" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"OBJECTIVES_KOTH" ); - } - else - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"OBJECTIVES_KOTH_SCORE" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"OBJECTIVES_KOTH_SCORE" ); - } - - level.objectiveHintPrepareHQ = &"MP_CONTROL_HQ"; - level.objectiveHintCaptureHQ = &"MP_CAPTURE_HQ"; - level.objectiveHintDestroyHQ = &"MP_DESTROY_HQ"; - level.objectiveHintDefendHQ = &"MP_DEFEND_HQ"; - precacheString( level.objectiveHintPrepareHQ ); - precacheString( level.objectiveHintCaptureHQ ); - precacheString( level.objectiveHintDestroyHQ ); - precacheString( level.objectiveHintDefendHQ ); - - if ( level.kothmode ) - level.objectiveHintDestroyHQ = level.objectiveHintCaptureHQ; - - if ( level.hqSpawnTime ) - updateObjectiveHintMessages( level.objectiveHintPrepareHQ, level.objectiveHintPrepareHQ ); - else - updateObjectiveHintMessages( level.objectiveHintCaptureHQ, level.objectiveHintCaptureHQ ); - - setClientNameMode("auto_change"); - - // TODO: HQ spawnpoints - level.spawnMins = ( 0, 0, 0 ); - level.spawnMaxs = ( 0, 0, 0 ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_tdm_spawn" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_tdm_spawn" ); - maps\mp\gametypes\_spawning::updateAllSpawnPoints(); - - level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs ); - setMapCenter( level.mapCenter ); - - spawnpoint = maps\mp\gametypes\_spawnlogic::getRandomIntermissionPoint(); - setDemoIntermissionPoint( spawnpoint.origin, spawnpoint.angles ); - - level.spawn_all = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_tdm_spawn" ); - if ( !level.spawn_all.size ) - { - println("^1No mp_tdm_spawn spawnpoints in level!"); - maps\mp\gametypes\_callbacksetup::AbortLevel(); - return; - } - - // use the new spawn logic from the start - level.useStartSpawns = false; - - allowed[0] = "hq"; - - if ( level.script == "mp_kowloon" ) - { - allowed[1] = "koth"; - } - - maps\mp\gametypes\_gameobjects::main(allowed); - - // now that the game objects have been deleted place the influencers - maps\mp\gametypes\_spawning::create_map_placed_influencers(); - - thread SetupRadios(); - - maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist_75", 40 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist_50", 30 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist_25", 20 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assist", 10 ); - maps\mp\gametypes\_rank::registerScoreInfo( "defend", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "assault", 50 ); - maps\mp\gametypes\_rank::registerScoreInfo( "capture", 150 ); - - thread HQMainLoop(); -} - -spawn_first_radio(delay) -{ - // pick next HQ object - level.radio= PickRandomRadioToSpawn(); - logString("radio spawned: ("+level.radio.trigOrigin[0]+","+level.radio.trigOrigin[1]+","+level.radio.trigOrigin[2]+")"); - - level.radio enable_radio_spawn_influencer(true); - - //thread enable_initial_spawn_influencers( 20 ); - - return; -} - -spawn_next_radio() -{ - // pick next HQ object - level.radio= PickRadioToSpawn(); - logString("radio spawned: ("+level.radio.trigOrigin[0]+","+level.radio.trigOrigin[1]+","+level.radio.trigOrigin[2]+")"); - - level.radio enable_radio_spawn_influencer(true); - - return; -} - -HQMainLoop() -{ - level endon("game_ended"); - - level.hqRevealTime = -100000; - - hqSpawningInStr = &"MP_HQ_AVAILABLE_IN"; - if ( level.kothmode ) - { - hqDestroyedInFriendlyStr = &"MP_HQ_DESPAWN_IN"; - hqDestroyedInEnemyStr = &"MP_HQ_DESPAWN_IN"; - } - else - { - hqDestroyedInFriendlyStr = &"MP_HQ_REINFORCEMENTS_IN"; - hqDestroyedInEnemyStr = &"MP_HQ_DESPAWN_IN"; - } - - precacheString( hqSpawningInStr ); - precacheString( hqDestroyedInFriendlyStr ); - precacheString( hqDestroyedInEnemyStr ); - precacheString( &"MP_CAPTURING_HQ" ); - precacheString( &"MP_DESTROYING_HQ" ); - - spawn_first_radio(); - - while ( level.inPrematchPeriod ) - wait ( 0.05 ); - - wait 5; - - timerDisplay = []; - timerDisplay["allies"] = createServerTimer( "objective", 1.4, "allies" ); - timerDisplay["allies"] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 ); - timerDisplay["allies"].label = hqSpawningInStr; - timerDisplay["allies"].alpha = 0; - timerDisplay["allies"].archived = false; - timerDisplay["allies"].hideWhenInMenu = true; - - timerDisplay["axis" ] = createServerTimer( "objective", 1.4, "axis" ); - timerDisplay["axis" ] setPoint( "TOPRIGHT", "TOPRIGHT", 0, 0 ); - timerDisplay["axis" ].label = hqSpawningInStr; - timerDisplay["axis" ].alpha = 0; - timerDisplay["axis" ].archived = false; - timerDisplay["axis" ].hideWhenInMenu = true; - - thread hideTimerDisplayOnGameEnd( timerDisplay["allies"] ); - thread hideTimerDisplayOnGameEnd( timerDisplay["axis" ] ); - - locationObjID = maps\mp\gametypes\_gameobjects::getNextObjID(); - - objective_add( locationObjID, "invisible", (0,0,0) ); - - while( 1 ) - { - iPrintLn( &"MP_HQ_REVEALED" ); - playSoundOnPlayers( "mp_suitcase_pickup" ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_located" ); -// maps\mp\gametypes\_globallogic_audio::leaderDialog( "move_to_new" ); - - level.radio.gameobject maps\mp\gametypes\_gameobjects::setModelVisibility( true ); - - level.hqRevealTime = gettime(); - - maps\mp\_rcbomb::detonateAllIfTouchingSphere(level.radio.origin, 75); - - if ( level.hqSpawnTime ) - { - nextObjPoint = maps\mp\gametypes\_objpoints::createTeamObjpoint( "objpoint_next_hq", level.radio.origin + level.iconoffset, "all", "waypoint_targetneutral" ); - nextObjPoint setWayPoint( true, "waypoint_targetneutral" ); - objective_position( locationObjID, level.radio.trigorigin ); - objective_icon( locationObjID, "waypoint_targetneutral" ); - objective_state( locationObjID, "active" ); - - updateObjectiveHintMessages( level.objectiveHintPrepareHQ, level.objectiveHintPrepareHQ ); - - timerDisplay["allies"].label = hqSpawningInStr; - timerDisplay["allies"] setTimer( level.hqSpawnTime ); - timerDisplay["allies"].alpha = 1; - timerDisplay["axis" ].label = hqSpawningInStr; - timerDisplay["axis" ] setTimer( level.hqSpawnTime ); - timerDisplay["axis" ].alpha = 1; - - wait level.hqSpawnTime; - - maps\mp\gametypes\_objpoints::deleteObjPoint( nextObjPoint ); - objective_state( locationObjID, "invisible" ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_online" ); - } - - timerDisplay["allies"].alpha = 0; - timerDisplay["axis" ].alpha = 0; - - waittillframeend; - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "obj_capture" ); - updateObjectiveHintMessages( level.objectiveHintCaptureHQ, level.objectiveHintCaptureHQ ); - playSoundOnPlayers( "mpl_hq_cap_us" ); - - level.radio.gameobject maps\mp\gametypes\_gameobjects::enableObject(); - - level.radio.gameobject maps\mp\gametypes\_gameobjects::allowUse( "any" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::setUseTime( level.captureTime ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::setUseText( &"MP_CAPTURING_HQ" ); - - objective_icon( locationObjID, "compass_waypoint_captureneutral" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_captureneutral" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_captureneutral" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::setModelVisibility( true ); - - level.radio.gameobject.onUse = ::onRadioCapture; - level.radio.gameobject.onBeginUse = ::onBeginUse; - level.radio.gameobject.onEndUse = ::onEndUse; - - level waittill( "hq_captured" ); - - ownerTeam = level.radio.gameobject maps\mp\gametypes\_gameobjects::getOwnerTeam(); - otherTeam = getOtherTeam( ownerTeam ); - - if ( level.hqAutoDestroyTime ) - { - thread DestroyHQAfterTime( level.hqAutoDestroyTime ); - timerDisplay[ownerTeam] setTimer( level.hqAutoDestroyTime ); - timerDisplay[otherTeam] setTimer( level.hqAutoDestroyTime ); - } - else - { - level.hqDestroyedByTimer = false; - } - - while( 1 ) - { - ownerTeam = level.radio.gameobject maps\mp\gametypes\_gameobjects::getOwnerTeam(); - otherTeam = getOtherTeam( ownerTeam ); - - if ( ownerTeam == "allies" ) - { - updateObjectiveHintMessages( level.objectiveHintDefendHQ, level.objectiveHintDestroyHQ ); - } - else - { - updateObjectiveHintMessages( level.objectiveHintDestroyHQ, level.objectiveHintDefendHQ ); - } - - level.radio.gameobject maps\mp\gametypes\_gameobjects::allowUse( "enemy" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_capture" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_capture" ); - - if ( !level.kothMode ) - level.radio.gameobject maps\mp\gametypes\_gameobjects::setUseText( &"MP_DESTROYING_HQ" ); - - level.radio.gameobject.onUse = ::onRadioDestroy; - - if ( level.hqAutoDestroyTime ) - { - timerDisplay[ownerTeam].label = hqDestroyedInFriendlyStr; - if ( !level.splitscreen ) - timerDisplay[ownerTeam].alpha = 1; - timerDisplay[otherTeam].label = hqDestroyedInEnemyStr; - if ( !level.splitscreen ) - timerDisplay[otherTeam].alpha = 1; - } - - level thread dropAllAroundHQ(); - - level waittill( "hq_destroyed" ); - - level.radio enable_radio_spawn_influencer(false); - - if ( !level.kothmode || level.hqDestroyedByTimer ) - break; - - thread forceSpawnTeam( ownerTeam ); - - level.radio.gameobject maps\mp\gametypes\_gameobjects::setOwnerTeam( getOtherTeam( ownerTeam ) ); - } - - level.radio.gameobject maps\mp\gametypes\_gameobjects::disableObject(); - level.radio.gameobject maps\mp\gametypes\_gameobjects::allowUse( "none" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::setOwnerTeam( "neutral" ); - level.radio.gameobject maps\mp\gametypes\_gameobjects::setModelVisibility( false ); - - level notify("hq_reset"); - - timerDisplay["allies"].alpha = 0; - timerDisplay["axis" ].alpha = 0; - - spawn_next_radio(); - - wait .05; - - thread forceSpawnTeam( ownerTeam ); - - wait 3.0; - } -} - - -hideTimerDisplayOnGameEnd( timerDisplay ) -{ - level waittill("game_ended"); - timerDisplay.alpha = 0; -} - - -forceSpawnTeam( team ) -{ - players = level.players; - for ( i = 0; i < players.size; i++ ) - { - player = players[i]; - if ( !isdefined( player ) ) - continue; - - if ( player.pers["team"] == team ) - { - player notify( "force_spawn" ); - wait .1; - } - } -} - - -onBeginUse( player ) -{ - ownerTeam = self maps\mp\gametypes\_gameobjects::getOwnerTeam(); - - if ( ownerTeam == "neutral" ) - { - self.objPoints[player.pers["team"]] thread maps\mp\gametypes\_objpoints::startFlashing(); - player thread maps\mp\gametypes\_battlechatter_mp::gametypeSpecificBattleChatter( "hq_protect", player.pers["team"] ); - } - else - { - self.objPoints["allies"] thread maps\mp\gametypes\_objpoints::startFlashing(); - self.objPoints["axis"] thread maps\mp\gametypes\_objpoints::startFlashing(); - player thread maps\mp\gametypes\_battlechatter_mp::gametypeSpecificBattleChatter( "hq_attack", player.pers["team"] ); - } -} - - -onEndUse( team, player, success ) -{ - self.objPoints["allies"] thread maps\mp\gametypes\_objpoints::stopFlashing(); - self.objPoints["axis"] thread maps\mp\gametypes\_objpoints::stopFlashing(); - player notify( "event_ended" ); -} - - -onRadioCapture( player ) -{ - team = player.pers["team"]; - - player logString( "radio captured" ); - - string = &"MP_HQ_CAPTURED_BY"; - thread give_capture_credit( self.touchList[team], string ); - - oldTeam = maps\mp\gametypes\_gameobjects::getOwnerTeam(); - self maps\mp\gametypes\_gameobjects::setOwnerTeam( team ); - if ( !level.kothMode ) - self maps\mp\gametypes\_gameobjects::setUseTime( level.destroyTime ); - - otherTeam = "axis"; - if ( team == "axis" ) - otherTeam = "allies"; - - thread printOnTeamArg( &"MP_HQ_CAPTURED_BY", team, player ); - thread printOnTeam( &"MP_HQ_CAPTURED_BY_ENEMY", otherTeam ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_secured", team ); - //maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_defend", team ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_enemy_captured", otherTeam ); - thread playSoundOnPlayers( "mp_war_objective_taken", team ); - thread playSoundOnPlayers( "mp_war_objective_lost", otherTeam ); - //thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_WE_TAKE", Team, false, true, 5 ); - //thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_THEY_TAKE", otherTeam, false, true, 5 ); - - level thread awardHQPoints( team ); - - level notify( "hq_captured" ); - player notify( "event_ended" ); -} - -give_capture_credit( touchList, string ) -{ - wait .05; - maps\mp\gametypes\_globallogic_utils::WaitTillSlowProcessAllowed(); - - players = getArrayKeys( touchList ); - for ( i = 0; i < players.size; i++ ) - { - player_from_touchlist = touchList[players[i]].player; - maps\mp\gametypes\_globallogic_score::givePlayerScore( "capture", player_from_touchlist ); - - level thread maps\mp\_popups::DisplayTeamMessageToAll( string, player_from_touchlist ); - - if( isdefined(player_from_touchlist.pers["captures"]) ) - { - player_from_touchlist.pers["captures"]++; - player_from_touchlist.captures = player_from_touchlist.pers["captures"]; - } - - player_from_touchlist maps\mp\_medals::positionSecure(); - player_from_touchlist maps\mp\gametypes\_persistence::statAddWithGameType( "CAPTURES", 1 ); - - if ( isdefined( player_from_touchlist.thisPlayerIsInLastStand ) && player_from_touchlist.thisPlayerIsInLastStand == true ) - player_from_touchlist maps\mp\_medals::heroic(); - } -} - -dropAllAroundHQ( radio ) -{ - origin = level.radio.origin; - level waittill( "hq_reset" ); - dropAllToGround( origin, 100, 50 ); -} - -onRadioDestroy( player ) -{ - team = player.pers["team"]; - otherTeam = "axis"; - if ( team == "axis" ) - otherTeam = "allies"; - - player logString( "radio destroyed" ); - player thread [[level.onXPEvent]]( "capture" ); - maps\mp\gametypes\_globallogic_score::givePlayerScore( "capture", player ); - player maps\mp\gametypes\_persistence::statAddWithGameType( "DESTRUCTIONS", 1 ); - - if( isdefined(player.pers["destructions"]) ) - { - player.pers["destructions"]++; - player.destructions = player.pers["destructions"]; - } - - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_HQ_DESTROYED_BY", player ); - - if ( level.kothmode ) - { - thread printOnTeamArg( &"MP_HQ_CAPTURED_BY", team, player ); - thread printOnTeam( &"MP_HQ_CAPTURED_BY_ENEMY", otherTeam ); - //thread playSoundOnPlayers( "mus_hq_captured"+"_"+level.teamPostfix[team] ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_secured", team ); - //maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_defend", team ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_enemy_destroyed", otherTeam ); - //thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_WE_TAKE", Team, false, true, 5 ); - //thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_THEY_TAKE", otherTeam, false, true, 5 ); - } - else - { - thread printOnTeamArg( &"MP_HQ_DESTROYED_BY", team, player ); - thread printOnTeam( &"MP_HQ_DESTROYED_BY_ENEMY", otherTeam ); - //thread playSoundOnPlayers( "mus_hq_captured"+"_"+level.teamPostfix[team] ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_secured", team ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_enemy_destroyed", otherTeam ); - //thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_WE_TAKE", Team, false, true, 5 ); - //thread maps\mp\gametypes\_globallogic_audio::set_music_on_team( "CTF_THEY_TAKE", otherTeam, false, true, 5 ); - } - - //thread playSoundOnPlayers( "mp_war_objective_taken", team ); - //thread playSoundOnPlayers( "mp_war_objective_lost", otherTeam ); - - level notify( "hq_destroyed" ); - - if ( level.kothmode ) - level thread awardHQPoints( team ); - - player notify( "event_ended" ); -} - - -DestroyHQAfterTime( time ) -{ - level endon( "game_ended" ); - level endon( "hq_reset" ); - - level.hqDestroyTime = gettime() + time * 1000; - level.hqDestroyedByTimer = false; - - wait time; - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "hq_offline" ); - - level.hqDestroyedByTimer = true; - - level notify( "hq_destroyed" ); -} - - -awardHQPoints( team ) -{ - level endon( "game_ended" ); - level endon( "hq_destroyed" ); - - level notify("awardHQPointsRunning"); - level endon("awardHQPointsRunning"); - - seconds = 5; - - while ( !level.gameEnded ) - { - [[level._setTeamScore]]( team, [[level._getTeamScore]]( team ) + seconds ); - for ( index = 0; index < level.players.size; index++ ) - { - player = level.players[index]; - - if ( player.pers["team"] == team ) - { - player thread [[level.onXPEvent]]( "defend" ); - maps\mp\gametypes\_globallogic_score::givePlayerScore( "defend", player ); - } - } - - wait seconds; - } -} - - -onSpawnPlayerUnified() -{ - maps\mp\gametypes\_spawning::onSpawnPlayer_Unified(); -} - -onSpawnPlayer() -{ - spawnpoint = undefined; - - if (IsDefined(level.radio)) - { - if (IsDefined(level.radio.gameobject)) - { - hqOwningTeam = level.radio.gameobject maps\mp\gametypes\_gameobjects::getOwnerTeam(); - if ( self.pers["team"] == hqOwningTeam ) - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all, level.radio.gameobject.nearSpawns ); - else if ( level.spawnDelay >= level.hqAutoDestroyTime && gettime() > level.hqRevealTime + 10000 ) - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all ); - else - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all, level.radio.gameobject.outerSpawns ); - } - } - - if ( !isDefined( spawnpoint ) ) - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam( level.spawn_all ); - - assert( isDefined(spawnpoint) ); - - self spawn( spawnpoint.origin, spawnpoint.angles, "koth" ); -} - - -koth_playerSpawnedCB() -{ - self.lowerMessageOverride = undefined; -} - - -SetupRadios() -{ - maperrors = []; - - radios = getentarray( "hq_hardpoint", "targetname" ); - - if ( radios.size < 2 ) - { - maperrors[maperrors.size] = "There are not at least 2 entities with targetname \"radio\""; - } - - trigs = getentarray("radiotrigger", "targetname"); - for ( i = 0; i < radios.size; i++ ) - { - errored = false; - - radio = radios[i]; - radio.trig = undefined; - for ( j = 0; j < trigs.size; j++ ) - { - if ( radio istouching( trigs[j] ) ) - { - if ( isdefined( radio.trig ) ) - { - maperrors[maperrors.size] = "Radio at " + radio.origin + " is touching more than one \"radiotrigger\" trigger"; - errored = true; - break; - } - radio.trig = trigs[j]; - break; - } - } - - if ( !isdefined( radio.trig ) ) - { - if ( !errored ) - { - maperrors[maperrors.size] = "Radio at " + radio.origin + " is not inside any \"radiotrigger\" trigger"; - continue; - } - - // possible fallback (has been tested) - //radio.trig = spawn( "trigger_radius", radio.origin, 0, 128, 128 ); - //errored = false; - } - - assert( !errored ); - - radio.trigorigin = radio.trig.origin; - - visuals = []; - visuals[0] = radio; - - otherVisuals = getEntArray( radio.target, "targetname" ); - for ( j = 0; j < otherVisuals.size; j++ ) - { - visuals[visuals.size] = otherVisuals[j]; - } - - radio.gameObject = maps\mp\gametypes\_gameobjects::createUseObject( "neutral", radio.trig, visuals, (radio.origin - radio.trigorigin) + level.iconoffset ); - radio.gameObject maps\mp\gametypes\_gameobjects::disableObject(); - radio.gameObject maps\mp\gametypes\_gameobjects::setModelVisibility( false ); - radio.trig.useObj = radio.gameObject; - - radio setUpNearbySpawns(); - radio createRadioSpawnInfluencer(); - } - - if (maperrors.size > 0) - { - println("^1------------ Map Errors ------------"); - for(i = 0; i < maperrors.size; i++) - println(maperrors[i]); - println("^1------------------------------------"); - - maps\mp\_utility::error("Map errors. See above"); - maps\mp\gametypes\_callbacksetup::AbortLevel(); - - return; - } - - level.radios = radios; - - level.prevradio = undefined; - level.prevradio2 = undefined; - - return true; -} - -setUpNearbySpawns() -{ - spawns = level.spawn_all; - - for ( i = 0; i < spawns.size; i++ ) - { - spawns[i].distsq = distanceSquared( spawns[i].origin, self.origin ); - } - - // sort by distsq - for ( i = 1; i < spawns.size; i++ ) - { - thespawn = spawns[i]; - for ( j = i - 1; j >= 0 && thespawn.distsq < spawns[j].distsq; j-- ) - spawns[j + 1] = spawns[j]; - spawns[j + 1] = thespawn; - } - - first = []; - second = []; - third = []; - outer = []; - - thirdSize = spawns.size / 3; - for ( i = 0; i <= thirdSize; i++ ) - { - first[ first.size ] = spawns[i]; - } - for ( ; i < spawns.size; i++ ) - { - outer[ outer.size ] = spawns[i]; - if ( i <= (thirdSize*2) ) - second[ second.size ] = spawns[i]; - else - third[ third.size ] = spawns[i]; - } - - self.gameObject.nearSpawns = first; - self.gameObject.midSpawns = second; - self.gameObject.farSpawns = third; - self.gameObject.outerSpawns = outer; -} - -PickRandomRadioToSpawn() -{ - radio = level.radios[ randomint( level.radios.size) ]; - level.prevradio2 = level.prevradio; - level.prevradio = radio; - - return radio; -} - -PickRadioToSpawn() -{ - // find average of positions of each team - // (medians would be better, to get rid of outliers...) - // and find the radio which has the least difference in distance from those two averages - - avgpos["allies"] = (0,0,0); - avgpos["axis"] = (0,0,0); - num["allies"] = 0; - num["axis"] = 0; - - for ( i = 0; i < level.players.size; i++ ) - { - player = level.players[i]; - if ( isalive( player ) ) - { - avgpos[ player.pers["team"] ] += player.origin; - num[ player.pers["team"] ]++; - } - } - - if ( num["allies"] == 0 || num["axis"] == 0 ) - { - radio = level.radios[ randomint( level.radios.size) ]; - while ( isDefined( level.prevradio ) && radio == level.prevradio ) // so lazy - radio = level.radios[ randomint( level.radios.size) ]; - - level.prevradio2 = level.prevradio; - level.prevradio = radio; - - return radio; - } - - avgpos["allies"] = avgpos["allies"] / num["allies"]; - avgpos["axis" ] = avgpos["axis" ] / num["axis" ]; - - bestradio = undefined; - lowestcost = undefined; - for ( i = 0; i < level.radios.size; i++ ) - { - radio = level.radios[i]; - - // (purposefully using distance instead of distanceSquared) - cost = abs( distance( radio.origin, avgpos["allies"] ) - distance( radio.origin, avgpos["axis"] ) ); - - if ( isdefined( level.prevradio ) && radio == level.prevradio ) - { - continue; - } - if ( isdefined( level.prevradio2 ) && radio == level.prevradio2 ) - { - if ( level.radios.size > 2 ) - continue; - else - cost += 512; - } - - if ( !isdefined( lowestcost ) || cost < lowestcost ) - { - lowestcost = cost; - bestradio = radio; - } - } - assert( isdefined( bestradio ) ); - - level.prevradio2 = level.prevradio; - level.prevradio = bestradio; - - return bestradio; -} - - - -onPlayerKilled( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration ) -{ - if ( !isPlayer( attacker ) || (!self.touchTriggers.size && !attacker.touchTriggers.size) || attacker.pers["team"] == self.pers["team"] ) - return; - - medalGiven = false; - - if ( self.touchTriggers.size ) - { - triggerIds = getArrayKeys( self.touchTriggers ); - ownerTeam = self.touchTriggers[triggerIds[0]].useObj.ownerTeam; - - if ( ownerTeam != "neutral" ) - { - team = self.pers["team"]; - if ( team == ownerTeam ) - { - attacker thread [[level.onXPEvent]]( "assault" ); - if ( !medalGiven && !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - attacker maps\mp\_medals::offense( sWeapon ); - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "OFFENDS", 1 ); - - medalGiven = true; - } - maps\mp\gametypes\_globallogic_score::givePlayerScore( "assault", attacker ); - } - else - { - attacker thread [[level.onXPEvent]]( "defend" ); - if ( !medalGiven && !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - if( isdefined(attacker.pers["defends"]) ) - { - attacker.pers["defends"]++; - attacker.defends = attacker.pers["defends"]; - } - - attacker maps\mp\_medals::defense( sWeapon ); - medalGiven = true; - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "DEFENDS", 1 ); - } - maps\mp\gametypes\_globallogic_score::givePlayerScore( "defend", attacker ); - } - } - } - - if ( attacker.touchTriggers.size ) - { - triggerIds = getArrayKeys( attacker.touchTriggers ); - ownerTeam = attacker.touchTriggers[triggerIds[0]].useObj.ownerTeam; - - if ( ownerTeam != "neutral" ) - { - team = attacker.pers["team"]; - if ( team == ownerTeam ) - { - attacker thread [[level.onXPEvent]]( "defend" ); - if ( !medalGiven && !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - if( isdefined(attacker.pers["defends"]) ) - { - attacker.pers["defends"]++; - attacker.defends = attacker.pers["defends"]; - } - - attacker maps\mp\_medals::defense( sWeapon ); - medalGiven = true; - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "DEFENDS", 1 ); - } - maps\mp\gametypes\_globallogic_score::givePlayerScore( "defend", attacker ); - } - else - { - attacker thread [[level.onXPEvent]]( "assault" ); - if ( !medalGiven && !maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - { - attacker maps\mp\_medals::offense( sWeapon ); - medalGiven = true; - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "OFFENDS", 1 ); - } - maps\mp\gametypes\_globallogic_score::givePlayerScore( "assault", attacker ); - } - } - } -} - -onEndGame( winningTeam ) -{ - for ( i = 0; i < level.radios.size; i++ ) - { - level.radios[i].gameobject maps\mp\gametypes\_gameobjects::allowUse( "none" ); - } -} - -createRadioSpawnInfluencer() -{ - koth_objective_influencer_score= level.spawnsystem.koth_objective_influencer_score; - koth_objective_influencer_score_curve= level.spawnsystem.koth_objective_influencer_score_curve; - koth_objective_influencer_radius= level.spawnsystem.koth_objective_influencer_radius; - - // this affects both teams - self.spawn_influencer = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - self.gameobject.curOrigin, - koth_objective_influencer_radius, - koth_objective_influencer_score, - 0, - "koth_objective,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(koth_objective_influencer_score_curve) ); - - // turn it off for now - self enable_radio_spawn_influencer(false); -} - -enable_radio_spawn_influencer( enabled ) -{ - if ( isdefined(self.spawn_influencer) ) - { - enableinfluencer(self.spawn_influencer, enabled); - } -} - -enable_initial_spawn_influencers( duration ) -{ - // turn on the initial spawns - initial_spawn_influencer_ents = getentarray( self.target, "targetname" ); - - // either both, or none - if (initial_spawn_influencer_ents.size == 0) - return; - - assert( initial_spawn_influencer_ents.size == 2 ); - - ss = level.spawnsystem; - - mask1 = ss.iSPAWN_TEAMMASK_AXIS; - mask2 = ss.iSPAWN_TEAMMASK_ALLIES; - - if (randomint(2) == 0) - { // switch them - mask1 = ss.iSPAWN_TEAMMASK_ALLIES; - mask2 = ss.iSPAWN_TEAMMASK_AXIS; - } - - initial_spawn_influencers1 = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - initial_spawn_influencer_ents[0].origin, - ss.koth_initial_spawns_influencer_radius, - ss.koth_initial_spawns_influencer_score, - mask1, - "koth_objective,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ss.koth_initial_spawns_influencer_score_curve) ); - - initial_spawn_influencers2 = addsphereinfluencer( level.spawnsystem.eINFLUENCER_TYPE_GAME_MODE, - initial_spawn_influencer_ents[0].origin, - ss.koth_initial_spawns_influencer_radius, - ss.koth_initial_spawns_influencer_score, - mask1, - "koth_objective,r,s", - maps\mp\gametypes\_spawning::get_score_curve_index(ss.koth_initial_spawns_influencer_score_curve) ); - - wait duration; - - removeinfluencer( initial_spawn_influencers1 ); - removeinfluencer( initial_spawn_influencers2 ); - -} - -koth_gamemodeSpawnDvars(reset_dvars) -{ - ss = level.spawnsystem; - - // koth (hq): influencer placed around the radio - ss.koth_objective_influencer_score = set_dvar_float_if_unset("scr_spawn_koth_objective_influencer_score", "-400", reset_dvars); - ss.koth_objective_influencer_score_curve = set_dvar_if_unset("scr_spawn_koth_objective_influencer_score_curve", "constant", reset_dvars); - ss.koth_objective_influencer_radius = set_dvar_float_if_unset("scr_spawn_koth_objective_influencer_radius", "" + 20.0*get_player_height(), reset_dvars); - - // koth (hq): initial spawns influencer to help group starting players at predefined locations - ss.koth_initial_spawns_influencer_score = set_dvar_float_if_unset("scr_spawn_koth_initial_spawns_influencer_score", "200", reset_dvars); - ss.koth_initial_spawns_influencer_score_curve = set_dvar_if_unset("scr_spawn_koth_initial_spawns_influencer_score_curve", "linear", reset_dvars); - ss.koth_initial_spawns_influencer_radius = set_dvar_float_if_unset("scr_spawn_koth_initial_spawns_influencer_radius", "" + 10.0*get_player_height(), reset_dvars); - -} diff --git a/mods/patch_mp/maps/mp/gametypes/sab.gsc b/mods/patch_mp/maps/mp/gametypes/sab.gsc deleted file mode 100644 index 5b5c3ce..0000000 --- a/mods/patch_mp/maps/mp/gametypes/sab.gsc +++ /dev/null @@ -1,958 +0,0 @@ -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -/* - Sabotage - - // ...etc... -*/ - -/*QUAKED mp_sab_spawn_axis (0.75 0.0 0.5) (-16 -16 0) (16 16 72) -Axis players spawn away from enemies and near their team at one of these positions.*/ - -/*QUAKED mp_sab_spawn_allies (0.0 0.75 0.5) (-16 -16 0) (16 16 72) -Allied players spawn away from enemies and near their team at one of these positions.*/ - -/*QUAKED mp_sab_spawn_axis_start (1.0 0.0 0.5) (-16 -16 0) (16 16 72) -Axis players spawn away from enemies and near their team at one of these positions at the start of a round.*/ - -/*QUAKED mp_sab_spawn_allies_start (0.0 1.0 0.5) (-16 -16 0) (16 16 72) -Allied players spawn away from enemies and near their team at one of these positions at the start of a round.*/ - -main() -{ - if ( GetDvar( #"mapname") == "mp_background" ) - return; - - maps\mp\gametypes\_globallogic::init(); - maps\mp\gametypes\_callbacksetup::SetupCallbacks(); - maps\mp\gametypes\_globallogic::SetupCallbacks(); - - level.teamBased = true; - level.overrideTeamScore = true; - - maps\mp\gametypes\_globallogic_utils::registerRoundSwitchDvar( level.gameType, 0, 0, 9 ); - maps\mp\gametypes\_globallogic_utils::registerTimeLimitDvar( level.gameType, 10, 0, 1440 ); - maps\mp\gametypes\_globallogic_utils::registerScoreLimitDvar( level.gameType, 0, 0, 500 ); - maps\mp\gametypes\_globallogic_utils::registerRoundLimitDvar( level.gameType, 1, 0, 10 ); - maps\mp\gametypes\_globallogic_utils::registerNumLivesDvar( level.gameType, 0, 0, 10 ); - maps\mp\gametypes\_globallogic_utils::registerRoundWinLimitDvar( level.gameType, 0, 0, 10 ); - - maps\mp\gametypes\_weapons::registerGrenadeLauncherDudDvar( level.gameType, 10, 0, 1440 ); - maps\mp\gametypes\_weapons::registerThrownGrenadeDudDvar( level.gameType, 0, 0, 1440 ); - maps\mp\gametypes\_weapons::registerKillstreakDelay( level.gameType, 0, 0, 1440 ); - - maps\mp\gametypes\_globallogic::registerFriendlyFireDelay( level.gameType, 15, 0, 1440 ); - - level.onStartGameType = ::onStartGameType; - level.onSpawnPlayer = ::onSpawnPlayer; - level.onSpawnPlayerUnified = ::onSpawnPlayerUnified; - level.gamemodeSpawnDvars = ::sab_gamemodeSpawnDvars; - level.onRoundEndGame = ::onRoundEndGame; - - if ( !game["tiebreaker"] ) - { - level.onPrecacheGameType = ::onPrecacheGameType; - level.onTimeLimit = ::onTimeLimit; - level.onDeadEvent = ::onDeadEvent; - level.onRoundSwitch = ::onRoundSwitch; - level.onPlayerKilled = ::onPlayerKilled; - - level.endGameOnScoreLimit = false; - - game["dialog"]["gametype"] = "sab_start"; - game["dialog"]["gametype_hardcore"] = "hcsab_start"; - game["dialog"]["offense_obj"] = "destroy_start"; - game["dialog"]["defense_obj"] = "destroy_start"; - game["dialog"]["sudden_death"] = "suddendeath"; - game["dialog"]["sudden_death_boost"] = "generic_boost"; - } - else - { - level.onEndGame = ::onEndGame; - - level.endGameOnScoreLimit = false; - - game["dialog"]["gametype"] = "sab_start"; - game["dialog"]["gametype_hardcore"] = "hcsab_start"; - game["dialog"]["offense_obj"] = "generic_boost"; - game["dialog"]["defense_obj"] = "generic_boost"; - game["dialog"]["sudden_death"] = "suddendeath"; - game["dialog"]["sudden_death_boost"] = "generic_boost"; - - maps\mp\gametypes\_globallogic_utils::registerNumLivesDvar( "tb", 1, 1, 1 ); - maps\mp\gametypes\_globallogic_utils::registerTimeLimitDvar( "tb", 0, 0, 0 ); - } - - badtrig = getent( "sab_bomb_defuse_allies", "targetname" ); - if ( isdefined( badtrig ) ) - badtrig delete(); - - badtrig = getent( "sab_bomb_defuse_axis", "targetname" ); - if ( isdefined( badtrig ) ) - badtrig delete(); - - level.lastDialogTime = 0; - - // Sets the scoreboard columns and determines with data is sent across the network - setscoreboardcolumns( "kills", "deaths", "plants", "defuses" ); -} - -onPrecacheGameType() -{ - game["bomb_dropped_sound"] = "mp_war_objective_lost"; - game["bomb_recovered_sound"] = "mp_war_objective_taken"; - - precacheShader("waypoint_bomb"); - precacheShader("waypoint_kill"); - precacheShader("waypoint_bomb_enemy"); - precacheShader("waypoint_defend"); - precacheShader("waypoint_defuse"); - precacheShader("waypoint_target"); - precacheShader("compass_waypoint_bomb"); - precacheShader("compass_waypoint_defend"); - precacheShader("compass_waypoint_defuse"); - precacheShader("compass_waypoint_target"); - precacheShader("hud_suitcase_bomb"); - - precacheString(&"MP_EXPLOSIVES_RECOVERED_BY"); - precacheString(&"MP_EXPLOSIVES_RECOVERED_BY"); - precacheString(&"MP_EXPLOSIVES_DROPPED_BY"); - precacheString(&"MP_EXPLOSIVES_PLANTED_BY"); - precacheString(&"MP_EXPLOSIVES_DEFUSED_BY"); - precacheString(&"MP_YOU_HAVE_RECOVERED_THE_BOMB"); - precacheString(&"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES"); - precacheString(&"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES"); - precacheString(&"MP_PLANTING_EXPLOSIVE"); - precacheString(&"MP_DEFUSING_EXPLOSIVE"); - precacheString(&"MP_TARGET_DESTROYED"); - precacheString(&"MP_NO_RESPAWN"); - precacheString(&"MP_TIE_BREAKER"); - precacheString(&"MP_NO_RESPAWN"); - precacheString(&"MP_SUDDEN_DEATH"); -} - - -onRoundSwitch() -{ - if ( !isdefined( game["switchedsides"] ) ) - game["switchedsides"] = false; - - if ( game["teamScores"]["allies"] == level.scorelimit - 1 && game["teamScores"]["axis"] == level.scorelimit - 1 ) - { - level.halftimeType = "overtime"; - level.halftimeSubCaption = &"MP_TIE_BREAKER"; - game["tiebreaker"] = true; - } - else - { - level.halftimeType = "halftime"; - game["switchedsides"] = !game["switchedsides"]; - } -} - - -onStartGameType() -{ - if ( !isdefined( game["switchedsides"] ) ) - game["switchedsides"] = false; - - setClientNameMode("auto_change"); - - game["strings"]["target_destroyed"] = &"MP_TARGET_DESTROYED"; - - if ( !game["tiebreaker"] ) - { - maps\mp\gametypes\_globallogic_ui::setObjectiveText( "allies", &"OBJECTIVES_SAB" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveText( "axis", &"OBJECTIVES_SAB" ); - - if ( level.splitscreen ) - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"OBJECTIVES_SAB" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"OBJECTIVES_SAB" ); - } - else - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"OBJECTIVES_SAB_SCORE" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"OBJECTIVES_SAB_SCORE" ); - } - maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( "allies", &"OBJECTIVES_SAB_HINT" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( "axis", &"OBJECTIVES_SAB_HINT" ); - } - else - { - maps\mp\gametypes\_globallogic_ui::setObjectiveText( "allies", &"OBJECTIVES_TDM" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveText( "axis", &"OBJECTIVES_TDM" ); - - if ( level.splitscreen ) - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"OBJECTIVES_TDM" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"OBJECTIVES_TDM" ); - } - else - { - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "allies", &"OBJECTIVES_TDM_SCORE" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveScoreText( "axis", &"OBJECTIVES_TDM_SCORE" ); - } - maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( "allies", &"OBJECTIVES_TDM_HINT" ); - maps\mp\gametypes\_globallogic_ui::setObjectiveHintText( "axis", &"OBJECTIVES_TDM_HINT" ); - } - - level.spawnMins = ( 0, 0, 0 ); - level.spawnMaxs = ( 0, 0, 0 ); - maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_sab_spawn_allies_start" ); - maps\mp\gametypes\_spawnlogic::placeSpawnPoints( "mp_sab_spawn_axis_start" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "allies", "mp_sab_spawn_allies" ); - maps\mp\gametypes\_spawnlogic::addSpawnPoints( "axis", "mp_sab_spawn_axis" ); - maps\mp\gametypes\_spawning::updateAllSpawnPoints(); - - level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs ); - setMapCenter( level.mapCenter ); - - spawnpoint = maps\mp\gametypes\_spawnlogic::getRandomIntermissionPoint(); - setDemoIntermissionPoint( spawnpoint.origin, spawnpoint.angles ); - - level.spawn_axis = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_axis" ); - level.spawn_allies = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_allies" ); - level.spawn_axis_start = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_axis_start" ); - level.spawn_allies_start = maps\mp\gametypes\_spawnlogic::getSpawnpointArray( "mp_sab_spawn_allies_start" ); - - maps\mp\gametypes\_rank::registerScoreInfo( "plant", 500 ); - maps\mp\gametypes\_rank::registerScoreInfo( "defuse", 500 ); - - allowed[0] = "sab"; - maps\mp\gametypes\_gameobjects::main(allowed); - - // now that the game objects have been deleted place the influencers - maps\mp\gametypes\_spawning::create_map_placed_influencers(); - - thread updateGametypeDvars(); - - thread sabotage(); -} - - -onTimeLimit() -{ - if ( level.inOvertime ) - return; - - thread onOvertime(); -} - - -onOvertime() -{ - level endon ( "game_ended" ); - - level.timeLimitOverride = true; - level.inOvertime = true; - maps\mp\gametypes\_globallogic_audio::leaderDialog( "sudden_death" ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "sudden_death_boost" ); - for ( index = 0; index < level.players.size; index++ ) - { - level.players[index] notify("force_spawn"); - level.players[index] thread maps\mp\gametypes\_hud_message::oldNotifyMessage( &"MP_SUDDEN_DEATH", &"MP_NO_RESPAWN", undefined, (1, 0, 0), "mp_last_stand" ); - - level.players[index] setClientUIVisibilityFlag( "g_compassShowEnemies", 1 ); - } - - SetMatchTalkFlag( "DeadChatWithDead", 1 ); - SetMatchTalkFlag( "DeadChatWithTeam", 0 ); - SetMatchTalkFlag( "DeadHearTeamLiving", 0 ); - SetMatchTalkFlag( "DeadHearAllLiving", 0 ); - SetMatchTalkFlag( "EveryoneHearsEveryone", 0 ); - - waitTime = 0; - while ( waitTime < 90 ) - { - if ( !level.bombPlanted ) - { - waitTime += 1; - setGameEndTime( getTime() + ((90-waitTime)*1000) ); - } - wait ( 1.0 ); - } - - thread maps\mp\gametypes\_globallogic::endGame( "tie", game["strings"]["tie"] ); -} - - -onDeadEvent( team ) -{ - if ( level.bombExploded ) - return; - - if ( team == "all" ) - { - if ( level.bombPlanted ) - { - [[level._setTeamScore]]( level.bombPlantedBy, [[level._getTeamScore]]( level.bombPlantedBy ) + 1 ); - thread maps\mp\gametypes\_globallogic::endGame( level.bombPlantedBy, game["strings"][level.bombPlantedBy+"_mission_accomplished"] ); - } - else - { - thread maps\mp\gametypes\_globallogic::endGame( "tie", game["strings"]["tie"] ); - } - } - else if ( level.bombPlanted ) - { - if ( team == level.bombPlantedBy ) - { - level.plantingTeamDead = true; - return; - } - - [[level._setTeamScore]]( level.bombPlantedBy, [[level._getTeamScore]]( level.bombPlantedBy ) + 1 ); - thread maps\mp\gametypes\_globallogic::endGame( level.bombPlantedBy, game["strings"][level.otherTeam[level.bombPlantedBy]+"_eliminated"] ); - } - else - { - [[level._setTeamScore]]( level.otherTeam[team], [[level._getTeamScore]]( level.otherTeam[team] ) + 1 ); - thread maps\mp\gametypes\_globallogic::endGame( level.otherTeam[team], game["strings"][team+"_eliminated"] ); - } -} - -onSpawnPlayerUnified() -{ - self.isPlanting = false; - self.isDefusing = false; - self.isBombCarrier = false; - - if ( game["tiebreaker"] ) - { - self thread maps\mp\gametypes\_hud_message::oldNotifyMessage( &"MP_TIE_BREAKER", &"MP_NO_RESPAWN", undefined, (1, 0, 0), "mp_last_stand" ); - - hintMessage = maps\mp\gametypes\_globallogic_ui::getObjectiveHintText( self.pers["team"] ); - if ( isDefined( hintMessage ) ) - self DisplayGameModeMessage( hintMessage, "uin_alert_slideout" ); - - self setClientUIVisibilityFlag( "g_compassShowEnemies", 1 ); - - // this is being redundantly set everytime a player spawns - // need to move this to a once only for eveyone when tiebreaker round - // starts - SetMatchTalkFlag( "DeadChatWithDead", 1 ); - SetMatchTalkFlag( "DeadChatWithTeam", 0 ); - SetMatchTalkFlag( "DeadHearTeamLiving", 0 ); - SetMatchTalkFlag( "DeadHearAllLiving", 0 ); - SetMatchTalkFlag( "EveryoneHearsEveryone", 0 ); - } - - maps\mp\gametypes\_spawning::onSpawnPlayer_Unified(); -} - - -onSpawnPlayer() -{ - self.isPlanting = false; - self.isDefusing = false; - self.isBombCarrier = false; - - spawnteam = self.pers["team"]; - if ( game["switchedsides"] ) - spawnteam = getOtherTeam( spawnteam ); - - if ( level.useStartSpawns ) - { - if (spawnteam == "axis") - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(level.spawn_axis_start); - else - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(level.spawn_allies_start); - } - else - { - if (spawnteam == "axis") - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam(level.spawn_axis); - else - spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam(level.spawn_allies); - } - - if ( game["tiebreaker"] ) - { - self thread maps\mp\gametypes\_hud_message::oldNotifyMessage( &"MP_TIE_BREAKER", &"MP_NO_RESPAWN", undefined, (1, 0, 0), "mp_last_stand" ); - - hintMessage = maps\mp\gametypes\_globallogic_ui::getObjectiveHintText( self.pers["team"] ); - if ( isDefined( hintMessage ) ) - self DisplayGameModeMessage( hintMessage, "uin_alert_slideout" ); - - self setClientUIVisibilityFlag( "g_compassShowEnemies", 1 ); - // this is being redundantly set everytime a player spawns - // need to move this to a once only for eveyone when tiebreaker round - // starts - SetMatchTalkFlag( "DeadChatWithDead", 1 ); - SetMatchTalkFlag( "DeadChatWithTeam", 0 ); - SetMatchTalkFlag( "DeadHearTeamLiving", 0 ); - SetMatchTalkFlag( "DeadHearAllLiving", 0 ); - SetMatchTalkFlag( "EveryoneHearsEveryone", 0 ); - } - - assert( isDefined(spawnpoint) ); - - self spawn( spawnpoint.origin, spawnpoint.angles, "sab" ); -} - - -updateGametypeDvars() -{ - level.plantTime = dvarFloatValue( "planttime", 5, 0, 20 ); - level.defuseTime = dvarFloatValue( "defusetime", 5, 0, 20 ); - level.bombTimer = dvarFloatValue( "bombtimer", 45, 1, 300 ); - level.hotPotato = dvarIntValue( "hotpotato", 1, 0, 1 ); -} - - -sabotage() -{ - level.bombPlanted = false; - level.bombExploded = false; - - level._effect["bombexplosion"] = loadfx("maps/mp_maps/fx_mp_exp_bomb"); - - trigger = getEnt( "sab_bomb_pickup_trig", "targetname" ); - if ( !isDefined( trigger ) ) - { - error( "No sab_bomb_pickup_trig trigger found in map." ); - return; - } - - visuals[0] = getEnt( "sab_bomb", "targetname" ); - if ( !isDefined( visuals[0] ) ) - { - error( "No sab_bomb script_model found in map." ); - return; - } - - //precacheModel( "t5_weapon_briefcase_world" ); - //visuals[0] setModel( "t5_weapon_briefcase_world" ); - level.sabBomb = maps\mp\gametypes\_gameobjects::createCarryObject( "neutral", trigger, visuals, (0,0,32) ); - level.sabBomb maps\mp\gametypes\_gameobjects::allowCarry( "any" ); - level.sabBomb maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_bomb" ); - level.sabBomb maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_bomb" ); - level.sabBomb maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_bomb" ); - level.sabBomb maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_bomb" ); - level.sabBomb maps\mp\gametypes\_gameobjects::setCarryIcon( "hud_suitcase_bomb" ); - level.sabBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - level.sabBomb.objIDPingEnemy = true; - level.sabBomb.onPickup = ::onPickup; - level.sabBomb.onDrop = ::onDrop; - level.sabBomb.allowWeapons = true; - level.sabBomb.objPoints["allies"].archived = true; - level.sabBomb.objPoints["axis"].archived = true; - level.sabBomb.autoResetTime = 60.0; - - if ( !isDefined( getEnt( "sab_bomb_axis", "targetname" ) ) ) - { - error("No sab_bomb_axis trigger found in map."); - return; - } - if ( !isDefined( getEnt( "sab_bomb_allies", "targetname" ) ) ) - { - error("No sab_bomb_allies trigger found in map."); - return; - } - - if ( game["switchedsides"] ) - { - level.bombZones["allies"] = createBombZone( "allies", getEnt( "sab_bomb_axis", "targetname" ) ); - level.bombZones["axis"] = createBombZone( "axis", getEnt( "sab_bomb_allies", "targetname" ) ); - } - else - { - level.bombZones["allies"] = createBombZone( "allies", getEnt( "sab_bomb_allies", "targetname" ) ); - level.bombZones["axis"] = createBombZone( "axis", getEnt( "sab_bomb_axis", "targetname" ) ); - } -} - - -createBombZone( team, trigger ) -{ - visuals = getEntArray( trigger.target, "targetname" ); - - bombZone = maps\mp\gametypes\_gameobjects::createUseObject( team, trigger, visuals, (0,0,64) ); - bombZone resetBombsite(); - bombZone.onUse = ::onUse; - bombZone.onBeginUse = ::onBeginUse; - bombZone.onEndUse = ::onEndUse; - bombZone.onCantUse = ::onCantUse; - bombZone.useWeapon = "briefcase_bomb_mp"; - bombZone.visuals[0].killCamEnt = spawn( "script_model", bombZone.visuals[0].origin + (0,0,128) ); - - for ( i = 0; i < visuals.size; i++ ) - { - if ( isDefined( visuals[i].script_exploder ) ) - { - bombZone.exploderIndex = visuals[i].script_exploder; - break; - } - } - - return bombZone; -} - - -onBeginUse( player ) -{ - // planted the bomb - if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) ) - { - player.isPlanting = true; - player thread maps\mp\gametypes\_battlechatter_mp::gametypeSpecificBattleChatter( "sd_friendlyplant", player.pers["team"] ); - } - else - { - player.isDefusing = true; - player thread maps\mp\gametypes\_battlechatter_mp::gametypeSpecificBattleChatter( "sd_enemyplant", player.pers["team"] ); - } - - player playSound( "fly_bomb_raise_plr" ); -} - -onEndUse( team, player, result ) -{ - if ( !isAlive( player ) ) - return; - - player.isPlanting = false; - player.isDefusing = false; - player notify( "event_ended" ); -} - - -onPickup( player ) -{ - level notify ( "bomb_picked_up" ); - - self.autoResetTime = 60.0; - - level.useStartSpawns = false; - - team = player.pers["team"]; - - if ( team == "allies" ) - otherTeam = "axis"; - else - otherTeam = "allies"; - - //player iPrintLnBold( &"MP_YOU_HAVE_RECOVERED_THE_BOMB" ); - player playLocalSound( "mp_suitcase_pickup" ); - player logString( "bomb taken" ); - - excludeList[0] = player; - - if( getTime() - level.lastDialogTime > 10000 ) - { - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_acquired", team ); - player maps\mp\gametypes\_globallogic_audio::leaderDialogOnPlayer( "obj_destroy", "bomb" ); - - - if ( !level.splitscreen ) - { - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_taken", otherTeam ); - maps\mp\gametypes\_globallogic_audio::leaderDialog( "obj_defend", otherTeam ); - } - - level.lastDialogTime = getTime(); - } - player.isBombCarrier = true; - - player maps\mp\gametypes\_persistence::statAddWithGameType( "PICKUPS", 1 ); - - - // recovered the bomb before abandonment timer elapsed - if ( team == self maps\mp\gametypes\_gameobjects::getOwnerTeam() ) - { - printOnTeamArg( &"MP_EXPLOSIVES_RECOVERED_BY", team, player ); - playSoundOnPlayers( game["bomb_recovered_sound"], team ); - } - else - { - printOnTeamArg( &"MP_EXPLOSIVES_RECOVERED_BY", team, player ); -// printOnTeamArg( &"MP_EXPLOSIVES_RECOVERED_BY", otherTeam, &"MP_THE_ENEMY" ); - playSoundOnPlayers( game["bomb_recovered_sound"] ); - } - - self maps\mp\gametypes\_gameobjects::setOwnerTeam( team ); - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_target" ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_kill" ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend" ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" ); - - level.bombZones[team] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - level.bombZones[otherTeam] maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - - level.bombZones[otherTeam].trigger SetInvisibleToAll(); - level.bombZones[otherTeam].trigger SetVisibleToPlayer( player ); -} - - -onDrop( player ) -{ - if ( level.bombPlanted ) - { - - } - else - { - if ( isDefined( player ) ) - printOnTeamArg( &"MP_EXPLOSIVES_DROPPED_BY", self maps\mp\gametypes\_gameobjects::getOwnerTeam(), player ); -// else -// printOnTeamArg( &"MP_EXPLOSIVES_DROPPED_BY", self maps\mp\gametypes\_gameobjects::getOwnerTeam(), &"MP_YOUR_TEAM" ); - - playSoundOnPlayers( game["bomb_dropped_sound"], self maps\mp\gametypes\_gameobjects::getOwnerTeam() ); - if ( isDefined( player ) ) - player logString( "bomb dropped" ); - else - logString( "bomb dropped" ); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_lost", self maps\mp\gametypes\_gameobjects::getOwnerTeam() ); - - player notify( "event_ended" ); - - level.bombZones["axis"].trigger SetInvisibleToAll(); - level.bombZones["allies"].trigger SetInvisibleToAll(); - - thread abandonmentThink( 0.0 ); - } -} - - -abandonmentThink( delay ) -{ - level endon ( "bomb_picked_up" ); - - wait ( delay ); - - if ( isDefined( self.carrier ) ) - return; - - if ( self maps\mp\gametypes\_gameobjects::getOwnerTeam() == "allies" ) - otherTeam = "axis"; - else - otherTeam = "allies"; - -// printOnTeamArg( &"MP_EXPLOSIVES_DROPPED_BY", otherTeam, &"MP_THE_ENEMY" ); - playSoundOnPlayers( game["bomb_dropped_sound"], otherTeam ); - - self maps\mp\gametypes\_gameobjects::setOwnerTeam( "neutral" ); - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_bomb" ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_bomb" ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_bomb" ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_bomb" ); - - level.bombZones["allies"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - level.bombZones["axis"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); -} - - -onUse( player ) -{ - team = player.pers["team"]; - otherTeam = level.otherTeam[team]; - // planted the bomb - if ( !self maps\mp\gametypes\_gameobjects::isFriendlyTeam( player.pers["team"] ) ) - { - player notify ( "bomb_planted" ); -// removed old playsound entry CDC 2/18/10 -// player playSound( "mpl_sab_bomb_plant" ); - player logString( "bomb planted" ); - - if( isdefined(player.pers["plants"]) ) - { - player.pers["plants"]++; - player.plants = player.pers["plants"]; - } - - player maps\mp\_medals::saboteur(); - - player maps\mp\gametypes\_persistence::statAddWithGameType( "PLANTS", 1 ); - - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_PLANTED_BY", player ); - - //thread playSoundOnPlayers( "mus_sab_planted"+"_"+level.teamPostfix[team] ); - // Play Action music - //maps\mp\_music::setmusicstate( "ACTION" ); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_planted", team ); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_planted", otherTeam ); - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "plant", player ); - //player thread [[level.onXPEvent]]( "plant" ); - - level thread bombPlanted( self, player.pers["team"] ); - - level.bombOwner = player; - - player.isBombCarrier = false; - -// self.keyObject maps\mp\gametypes\_gameobjects::disableObject(); - level.sabBomb.autoResetTime = undefined; - level.sabBomb maps\mp\gametypes\_gameobjects::allowCarry( "none" ); - level.sabBomb maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - level.sabBomb maps\mp\gametypes\_gameobjects::setDropped(); - self.useWeapon = "briefcase_bomb_defuse_mp"; - - self setUpForDefusing(); - } - else // defused the bomb - { - player notify ( "bomb_defused" ); - player logString( "bomb defused" ); - - if( isdefined(player.pers["defuses"]) ) - { - player.pers["defuses"]++; - player.defuses = player.pers["defuses"]; - } - - player maps\mp\_medals::hero(); - - player maps\mp\gametypes\_persistence::statAddWithGameType( "DEFUSES", 1 ); - - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_DEFUSED_BY", player ); - //thread playSoundOnPlayers( "mus_sab_defused"+"_"+level.teamPostfix[team] ); - maps\mp\gametypes\_globallogic_audio::set_music_on_team( "UNDERSCORE", "both", true ); - - maps\mp\gametypes\_globallogic_audio::leaderDialog( "bomb_defused" ); - - maps\mp\gametypes\_globallogic_score::givePlayerScore( "defuse", player ); - //player thread [[level.onXPEvent]]( "defuse" ); - - level thread bombDefused( self ); - - if ( level.inOverTime && isDefined( level.plantingTeamDead ) ) - { - thread maps\mp\gametypes\_globallogic::endGame( player.pers["team"], game["strings"][level.bombPlantedBy+"_eliminated"] ); - return; - } - - self resetBombsite(); - - level.sabBomb maps\mp\gametypes\_gameobjects::allowCarry( "any" ); - level.sabBomb maps\mp\gametypes\_gameobjects::setPickedUp( player ); - } -} - - -onCantUse( player ) -{ - player iPrintLnBold( &"MP_CANT_PLANT_WITHOUT_BOMB" ); -} - - -bombPlanted( destroyedObj, team ) -{ - game["challenge"][team]["plantedBomb"] = true; - maps\mp\gametypes\_globallogic_utils::pauseTimer(); - level.bombPlanted = true; - level.bombPlantedBy = team; - level.timeLimitOverride = true; - setMatchFlag( "bomb_timer", 1 ); - - // communicate timer information to menus - setGameEndTime( int( getTime() + (level.bombTimer * 1000) ) ); - - destroyedObj.visuals[0] thread maps\mp\gametypes\_globallogic_utils::playTickingSound( "mpl_sab_ui_suitcasebomb_timer" ); - - starttime = gettime(); - bombTimerWait(); - - setMatchFlag( "bomb_timer", 0 ); - destroyedObj.visuals[0] maps\mp\gametypes\_globallogic_utils::stopTickingSound(); - - if ( !level.bombPlanted ) - { - if ( level.hotPotato ) - { - timePassed = (gettime() - starttime) / 1000; - level.bombTimer -= timePassed; - } - return; - } - /* - for ( index = 0; index < level.players.size; index++ ) - { - player = level.players[index]; - if ( player.pers["team"] == team ) - player thread maps\mp\gametypes\_hud_message::oldNotifyMessage( "Your team scored!", undefined, undefined, (0, 1, 0) ); - else if ( player.pers["team"] == level.otherTeam[team] ) - player thread maps\mp\gametypes\_hud_message::oldNotifyMessage( "Enemy team scored!", undefined, undefined, (1, 0, 0) ); - } - */ - explosionOrigin = level.sabBomb.visuals[0].origin+(0,0,12); - level.bombExploded = true; - - - if ( isdefined( level.bombowner ) ) - { - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, level.bombowner, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); - level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_BLOWUP_BY", level.bombowner ); - level.bombowner maps\mp\_medals::bomber(); - - level.bombowner maps\mp\gametypes\_persistence::statAddWithGameType( "DESTRUCTIONS", 1 ); - - } - else - destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); - - rot = randomfloat(360); - explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + (0,0,50), (0,0,1), (cos(rot),sin(rot),0) ); - triggerFx( explosionEffect ); - - thread playSoundinSpace( "mpl_sab_exp_suitcase_bomb_main", explosionOrigin ); - - if ( isDefined( destroyedObj.exploderIndex ) ) - exploder( destroyedObj.exploderIndex ); - - [[level._setTeamScore]]( team, [[level._getTeamScore]]( team ) + 1 ); - - setGameEndTime( 0 ); - - level.bombZones["allies"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - level.bombZones["axis"] maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - wait 3; - - // end the round without resetting the timer - thread maps\mp\gametypes\_globallogic::endGame( team, game["strings"]["target_destroyed"] ); -} - -bombTimerWait() -{ - level endon("bomb_defused"); - maps\mp\gametypes\_hostmigration::waitLongDurationWithGameEndTimeUpdate( level.bombTimer ); -} - - -resetBombsite() -{ - self maps\mp\gametypes\_gameobjects::allowUse( "enemy" ); - self maps\mp\gametypes\_gameobjects::setUseTime( level.plantTime ); - self maps\mp\gametypes\_gameobjects::setUseText( &"MP_PLANTING_EXPLOSIVE" ); - self maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_PLANT_EXPLOSIVES" ); - self maps\mp\gametypes\_gameobjects::setKeyObject( level.sabBomb ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defend" ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defend" ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_target" ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_target" ); - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); - self.trigger SetInvisibleToAll(); - self.useWeapon = "briefcase_bomb_mp"; -} - -setUpForDefusing() -{ - self maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); - self maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime ); - self maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" ); - self maps\mp\gametypes\_gameobjects::setUseHintText( &"PLATFORM_HOLD_TO_DEFUSE_EXPLOSIVES" ); - self maps\mp\gametypes\_gameobjects::setKeyObject( undefined ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "friendly", "compass_waypoint_defuse" ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "friendly", "waypoint_defuse" ); - self maps\mp\gametypes\_gameobjects::set2DIcon( "enemy", "compass_waypoint_defend" ); - self maps\mp\gametypes\_gameobjects::set3DIcon( "enemy", "waypoint_defend" ); - self maps\mp\gametypes\_gameobjects::setVisibleTeam( "any" ); - self.trigger SetVisibleToAll(); -} - -bombDefused( object ) -{ - setMatchFlag( "bomb_timer", 0 ); - maps\mp\gametypes\_globallogic_utils::resumeTimer(); - level.bombPlanted = false; - if ( !level.inOvertime ) - level.timeLimitOverride = false; - - level notify("bomb_defused"); -} - -onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration) -{ - inBombZone = false; - inBombZoneTeam = "none"; - - if ( isdefined( sWeapon ) && maps\mp\gametypes\_hardpoints::isKillstreakWeapon( sWeapon ) ) - return; - - if ( isdefined( level.bombZones["allies"] ) ) - { - dist = Distance2d(self.origin, level.bombZones["allies"].curorigin); - if ( dist < level.defaultOffenseRadius ) - { - inBombZoneTeam = "allies"; - inBombZone = true; - } - } - if ( isdefined( level.bombZones["axis"] ) ) - { - dist = Distance2d(self.origin, level.bombZones["axis"].curorigin); - if ( dist < level.defaultOffenseRadius ) - { - inBombZoneTeam = "axis"; - inBombZone = true; - } - } - - if ( inBombZone && isPlayer( attacker ) && attacker.pers["team"] != self.pers["team"] ) - { - if ( inBombZoneTeam == self.pers["team"] ) - { - attacker maps\mp\_medals::offense( sWeapon ); - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "OFFENDS", 1 ); - } - else - { - if( isdefined(attacker.pers["defends"]) ) - { - attacker.pers["defends"]++; - attacker.defends = attacker.pers["defends"]; - } - - attacker maps\mp\_medals::defense( sWeapon ); - attacker maps\mp\gametypes\_persistence::statAddWithGameType( "DEFENDS", 1 ); - } - } - - if ( isPlayer( attacker ) && attacker.pers["team"] != self.pers["team"] && isdefined( self.isBombCarrier ) && self.isBombCarrier == true ) - attacker maps\mp\_challenges::killedBombCarrier(); -} - -onEndGame( winningTeam ) -{ - if ( isdefined( winningTeam ) && (winningTeam == "allies" || winningTeam == "axis") ) - [[level._setTeamScore]]( winningTeam, [[level._getTeamScore]]( winningTeam ) + 1 ); -} - -onRoundEndGame( roundWinner ) -{ - if ( game["roundswon"]["allies"] == game["roundswon"]["axis"] ) - winner = "tie"; - else if ( game["roundswon"]["axis"] > game["roundswon"]["allies"] ) - winner = "axis"; - else - winner = "allies"; - - return winner; -} - -sab_gamemodeSpawnDvars(reset_dvars) -{ - ss = level.spawnsystem; - - // sabotage: influencer around friendly base - ss.sab_friendly_base_influencer_score = set_dvar_float_if_unset("scr_spawn_sab_friendly_base_influencer_score", "100", reset_dvars); - ss.sab_friendly_base_influencer_score_curve = set_dvar_if_unset("scr_spawn_sab_friendly_base_influencer_score_curve", "constant", reset_dvars); - ss.sab_friendly_base_influencer_radius = set_dvar_float_if_unset("scr_spawn_sab_friendly_base_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - - // sabotage: influencer around enemy base - ss.sab_enemy_base_influencer_score = set_dvar_float_if_unset("scr_spawn_sab_enemy_base_influencer_score", "-500", reset_dvars); - ss.sab_enemy_base_influencer_score_curve = set_dvar_if_unset("scr_spawn_sab_enemy_base_influencer_score_curve", "constant", reset_dvars); - ss.sab_enemy_base_influencer_radius = set_dvar_float_if_unset("scr_spawn_sab_enemy_base_influencer_radius", "" + 15.0*get_player_height(), reset_dvars); - - // sabotage: negative influencer around carrier - ss.sab_carrier_influencer_score = set_dvar_float_if_unset("scr_spawn_sab_carrier_influencer_score", "-75", reset_dvars); - ss.sab_carrier_influencer_score_curve = set_dvar_if_unset("scr_spawn_sab_carrier_influencer_score_curve", "linear", reset_dvars); - ss.sab_carrier_influencer_radius = set_dvar_float_if_unset("scr_spawn_sab_carrier_influencer_radius", "" + 8.0*get_player_height(), reset_dvars); - -} diff --git a/mods/patch_mp/maps/mp/mp_array.gsc b/mods/patch_mp/maps/mp/mp_array.gsc deleted file mode 100644 index 01c7894..0000000 --- a/mods/patch_mp/maps/mp/mp_array.gsc +++ /dev/null @@ -1,152 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; - -main() -{ - //needs to be first for create fx - maps\mp\mp_array_fx::main(); - - precachemodel("collision_geo_10x10x512"); - precachemodel("collision_geo_64x64x64"); - precachemodel("collision_wall_64x64x10"); - precachemodel("collision_wall_512x512x10"); - precachemodel("collision_geo_64x64x256"); - precachemodel("p_glo_concrete_barrier_damaged"); - - maps\mp\_load::main(); - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_array_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_array"); - } - - maps\mp\mp_array_amb::main(); - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_winterspecops::level_init(); - - // Set up the default range of the compass - setdvar("compassmaxrange","2100"); - - // Set up some generic War Flag Names. - // Example from COD5: CALLSIGN_SEELOW_A is the name of the 1st flag in Selow whose string is "Cottage" - // The string must have MPUI_CALLSIGN_ and _A. Replace Mapname with the name of your map/bsp and in the - // actual string enter a keyword that names the location (Roundhouse, Missle Silo, Launchpad, Guard Tower, etc) - - game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; - game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; - game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; - game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; - game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; - - game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; - game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; - game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; - game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; - game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; - - - // collision keeping players from poking their heads into the tree near B3. - spawncollision("collision_geo_10x10x512","collider",(1397, 1095, 346), (0, 0, 0)); - spawncollision("collision_geo_10x10x512","collider",(1387, 1095, 346), (0, 0, 0)); - - // collision to prevent players from jumping behind electrical cabinets and getting stuck - spawncollision("collision_geo_64x64x64","collider",(-399, 1615, 614), (0, 15, 0)); - spawncollision("collision_wall_64x64x10","collider",(-445, 1593, 642), (0, 150, 0)); - - // collision that will keep player from jumping out of the map and landing in the rocks. - spawncollision("collision_wall_512x512x10","collider",(-1682, 1046, 496), (0, 30, 0)); - - // collision to stop players from getting stuck behind the steel girders. - spawncollision("collision_geo_64x64x64","collider",(-387, 307, 346), (0, 360, 0)); - - // spawn collision underneathe the corner of the center building. This is to keep players from calling the RCXD and pushing themselves outside of the map. - spawncollision("collision_geo_64x64x256","collider",(-852, 852, 496), (0,15,90)); - spawncollision("collision_geo_64x64x256","collider",(-788, 652, 492), (0,15,90)); - - // spawn a trigger to keep players from planting turrets into the large tanks. - addNoTurretTrigger( (-692, 3292, 500), 180, 800 ); - addNoTurretTrigger( (-1236, 3292, 500), 180, 800 ); - - // spawn a couple of K Rails to make sense of the collision spawned under the center building. - kRail1 = Spawn("script_model", (-824, 672, 480) ); - if ( IsDefined(kRail1) ) - { - kRail1.angles = (0, 105, 0); - kRail1 SetModel("p_glo_concrete_barrier_damaged"); - } - - kRail2 = Spawn("script_model", (-804, 600, 468) ); - if ( IsDefined(kRail2) ) - { - kRail2.angles = (15, 285, 0); - kRail2 SetModel("p_glo_concrete_barrier_damaged"); - } - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - - radar_move_init(); -} - -radar_move_init() -{ - level endon ("game_ended"); - - dish_top = GetEnt( "dish_top", "targetname" ); - dish_base = GetEnt( "dish_base", "targetname" ); - dish_inside = GetEnt( "dish_inside", "targetname" ); - dish_gears = GetEntArray( "dish_gear", "targetname"); - - total_time_for_rotation_outside = 240; - total_time_for_rotation_inside = 60; - - dish_top LinkTo(dish_base); - dish_base thread rotate_dish_top(total_time_for_rotation_outside); - dish_inside thread rotate_dish_top(total_time_for_rotation_inside); - - if(dish_gears.size > 0) - { - array_thread(dish_gears, ::rotate_dish_gears, total_time_for_rotation_inside); - } -} - -rotate_dish_top( time ) -{ - self endon ("game_ended"); - - while(1) - { - self RotateYaw( 360, time ); - self waittill( "rotatedone" ); - } -} - -rotate_dish_gears( time ) -{ - self endon ("game_ended"); - - gear_ratio = 5.0 / 60.0; - inverse_gear_ratio = 1.0 / gear_ratio; - - while(1) - { - self RotateYaw( 360 * inverse_gear_ratio, time ); - self waittill( "rotatedone" ); - } -} - -addNoTurretTrigger( position, radius, height ) -{ - while( !IsDefined( level.noTurretPlacementTriggers ) ) - wait( 0.1 ); - - trigger = Spawn( "trigger_radius", position, 0, radius, height ); - - level.noTurretPlacementTriggers[level.noTurretPlacementTriggers.size] = trigger; -} - diff --git a/mods/patch_mp/maps/mp/mp_cairo.gsc b/mods/patch_mp/maps/mp/mp_cairo.gsc deleted file mode 100644 index 8b137c7..0000000 --- a/mods/patch_mp/maps/mp/mp_cairo.gsc +++ /dev/null @@ -1,40 +0,0 @@ -#include maps\mp\_utility; -main() -{ - //needs to be first for create fx - maps\mp\mp_cairo_fx::main(); - - precachemodel("collision_geo_10x10x512"); - precachemodel("collision_wall_128x128x10"); - - maps\mp\_load::main(); - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_cairo_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_cairo"); - } - - maps\mp\mp_cairo_amb::main(); - - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_cubans::level_init(); - - //setdvar("compassmaxrange","2100"); - - // spawn collision to prevent players from standing inside telephone poles - spawncollision("collision_geo_10x10x512","collider",(2264, -240, -61), (0, 0, 0)); - spawncollision("collision_geo_10x10x512","collider",(-1437, -529, -61), (0, 0, 0)); - - // spawn collision to prevent players from standing on top of a doorway behind the cigar building - spawncollision("collision_wall_128x128x10","collider",(716, 1181, 219), (0, 270, 0)); - - - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); -} diff --git a/mods/patch_mp/maps/mp/mp_cosmodrome.gsc b/mods/patch_mp/maps/mp/mp_cosmodrome.gsc deleted file mode 100644 index fb886f5..0000000 --- a/mods/patch_mp/maps/mp/mp_cosmodrome.gsc +++ /dev/null @@ -1,716 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; -#include maps\mp\_events; - -main() -{ - precachemodel("tag_origin"); - - level.onSpawnIntermission = ::cosmodrome_intermission; - - /# - level thread devgui_cosmodrome(); - execdevgui( "devgui_mp_cosmodrome" ); - #/ - - //needs to be first for create fx - maps\mp\mp_cosmodrome_fx::main(); - - precachemodel("collision_wall_128x128x10"); - precachemodel("collision_geo_128x128x128"); - precachemodel("collision_wall_512x512x10"); - precachemodel("collision_geo_mc_8x560x190"); - precachemodel("collision_geo_mc_4x52x190"); - precachemodel("collision_geo_mc_4x156x190"); - - maps\mp\_load::main(); - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_cosmodrome_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_cosmodrome"); - } - maps\mp\mp_cosmodrome_amb::main(); - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_urbanspecops::level_init(); - - level thread rocket_arm_think(); - level thread rocket_think(); - level thread radar_dish_think(); - level thread distant_rockets_think(); - - // spawn collision to prevent players from sneaking under a small area by the rocket - spawncollision("collision_wall_128x128x10","collider",(1558, -179, -362), (0, 225, 0)); - - // spawn collision to prevent players from sneaking inside 2 vents - spawncollision("collision_wall_128x128x10","collider",(-699, 1457, -60), (0, 270, 0)); - spawncollision("collision_wall_128x128x10","collider",(-699, 1329, -60), (0, 270, 0)); - - // spawn collision to prevent players from strafe jumping onto pipes. - spawncollision("collision_geo_128x128x128","collider",(1408.5, 863, -126.5), (0, 0, 0)); - spawncollision("collision_geo_128x128x128","collider",(1536.5, 863, -126.5), (0, 0, 0)); - - // spawn collision to prevent players from jumping up onto walls by the rocket - spawncollision("collision_wall_512x512x10","collider",(1224, -160, 240), (0, 0, 0)); - spawncollision("collision_wall_512x512x10","collider",(1348, -160, 240), (0, 0, 0)); - - // Spawn collision to keep players from walking onto a small ledge of collision on the green girders. - spawncollision("collision_wall_128x128x10","collider",(1911, 1018, -82), (0, 270, 0)); - - // not sure if this is the best way to determine that the map has been trimmed down - if ( isSmallMapVersion() ) - { - //spawning missile clip collision to catch grenades, rockets and crossbow bolts on the wager match boundary - spawncollision("collision_geo_mc_8x560x190","collider",(-393, 396.5, -72), (0, 270, 0)); - spawncollision("collision_geo_mc_4x52x190","collider",(-358, 676.5, -74), (0, 0, 0)); - spawncollision("collision_geo_mc_4x156x190","collider",(-328.5, 758, -74), (0, 270, 0)); - } - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - - SetDvar( "scr_spawn_enemy_influencer_radius", 1700 ); - SetDvar( "scr_spawn_dead_friend_influencer_radius", 1300 ); - SetDvar( "scr_spawn_dead_friend_influencer_timeout_seconds", 10 ); - SetDvar( "scr_spawn_dead_friend_influencer_count", 7 ); -} - -isSmallMapVersion() -{ - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - return true; - } - - gametype = getDvar( #"g_gametype" ); - if ( gametype == "oic" ) - return true; - - if ( gametype == "hlnd" ) - return true; - - if ( gametype == "shrp" ) - return true; - - if ( gametype == "gun" ) - return true; - - return false; -} - -cosmodrome_intermission() -{ - maps\mp\gametypes\_globallogic_defaults::default_onSpawnIntermission(); - - rocket_base = GetEnt( "cosmodrome_rocket_base", "script_noteworthy" ); - - if ( !IsDefined( rocket_base ) ) - { - return; - } - - if ( IsDefined( level.rocket_camera ) && level.rocket_camera == true ) - { - lookat = Spawn( "script_model", rocket_base.origin + ( 0, 0, 1024 ) ); - lookat SetModel( "tag_origin" ); - lookat LinkTo( rocket_base ); - - self CameraSetPosition( self.origin ); - self CameraSetLookAt( lookat ); - self CameraActivate( true ); - } -} - -rocket_arm_think() -{ - start_pitch = set_dvar_int_if_unset( "scr_rocket_arm_pitch", "90" ); - rotate_time = set_dvar_int_if_unset( "scr_rocket_arm_rotate_secs", "30" ); - wait_time = set_dvar_int_if_unset( "scr_rocket_arm_wait_secs", "5" ); - - arm_base = GetEnt( "cosmodrome_rocket_arm_base", "targetname" ); - AssertEx( IsDefined( arm_base ), "Unable to find entity with targetname: 'cosmodrome_rocket_arm_base'" ); - - arm = GetEntArray( "cosmodrome_rocket_arm", "targetname" ); - AssertEx( IsDefined( arm ), "Unable to find entity with targetname: 'cosmodrome_rocket_arm'" ); - - for ( i = 0; i < arm.size; i++ ) - { - arm[i] LinkTo( arm_base ); - } - - if ( !IsDefined( arm_base.angles_target ) ) - { - arm_base.angles_target = arm_base.angles; - } - - arm_base.angles = ( start_pitch, arm_base.angles[1], arm_base.angles[2] ); - //IPrintLnBold ("rocket is MOVING?"); - - wait ( wait_time ); - - //IPrintLnBold ("start arm sound"); - arm_base playloopsound("evt_rocket_lp",.2); - arm_base PlaySound ("evt_rocket_start"); - arm_base RotateTo( arm_base.angles_target, rotate_time ); - - - wait(rotate_time); - arm_base stoploopsound(.3); - arm_base PlaySound ("evt_rocket_end"); - // IPrintLnBold (rotate_time); - // stop loppsound with fade - // play oneshot attach - // stop loop sound -} - -rocket_prelaunch( rocket_base ) -{ - //this will play vo for countdown and delay the launch by 10 seconds - snd_countdown (); - - // move the claw arms away from the rocket - claw_r = GetEntArray("claw_r", "targetname"); - claw_l = GetEntArray("claw_l", "targetname"); - claw_arm_r = GetEntArray("claw_arm_r", "targetname"); - claw_arm_l = GetEntArray("claw_arm_l", "targetname"); - mover_r = GetEnt("claw_r_mover", "targetname"); - mover_l = GetEnt("claw_l_mover", "targetname"); - move_here_r = GetEnt("claw_r_move_here", "targetname"); - move_here_l = GetEnt("claw_l_move_here", "targetname"); - - for(i = 0 ; i < claw_r.size; i++) - { - claw_r[i] LinkTo(mover_r); - } - for(i = 0 ; i < claw_l.size; i++) - { - claw_l[i] LinkTo(mover_l); - } - mover_r MoveTo(move_here_r.origin, 3.0); - mover_l MoveTo(move_here_l.origin, 3.0); - - // play sound on the arms - thread snd_rocket_gantry ( mover_r, mover_l); - - wait(4.0); - for(i = 0; i < claw_r.size; i++) - { - claw_r[i] Unlink(); - claw_r[i] LinkTo(move_here_r); - } - for(i = 0; i < claw_l.size; i++) - { - claw_l[i] Unlink(); - claw_l[i] LinkTo(move_here_l); - } - - for(i = 0; i < claw_arm_r.size; i++) - { - claw_arm_r[i] LinkTo(move_here_r); - } - for(i = 0; i < claw_arm_l.size; i++) - { - claw_arm_l[i] LinkTo(move_here_l); - } - move_here_r RotateYaw(75, 3.0); - move_here_l RotateYaw(-75, 3.0); - - // wait to launch - rocket_base playsound ("evt_cosmo_launch"); - playsoundatposition("evt_cosmo_air_distf",(0,0,0)); - playsoundatposition("evt_cosmo_air_distr",(0,0,0)); - - wait(5); -} - -Rocket_Think() -{ - level.const_fx_exploder_rocket_coolant = 2; - - level.rocket_camera = false; - flag_init( "rocket_launch_grenade_detonate" ); - - rocket = GetEntArray( "cosmodrome_rocket", "targetname" ); - AssertEx( IsDefined( rocket ), "Unable to find entity with targetname: 'cosmodrome_rocket'" ); - array_thread( rocket, ::rocket_sticky_grenade_think ); - - rocket_base = GetEnt( "cosmodrome_rocket_base", "script_noteworthy" ); - AssertEx( IsDefined( rocket_base ), "Unable to find entity with script_noteworthy: 'cosmodrome_rocket_base'" ); - level.rocket_base = rocket_base; - - rocket_damage_triggers = GetEntArray( "cosmodrome_rocket_damage_trigger", "targetname" ); - rocket_collision = GetEntArray( "rocket_collision", "targetname" ); - - killCamEnt = spawn( "script_model", rocket_base.origin ); - rocket_base.killCamEnt = killCamEnt; - killCamEnt.startTime = gettime(); - killCamEnt linkTo( rocket_base, "tag_origin", (50,0,-1000), ( 0,0,0 ) ); - - - rocket_timer_init(); - - wait( 3 ); - exploder( level.const_fx_exploder_rocket_coolant ); - - event = level waittill_any_return( "rocket_launch", "rocket_launch_skip_prelaunch" ); - - if ( event == "rocket_launch" ) - { - rocket_prelaunch( rocket_base ); - } - - level.rocket_camera = true; - - // pre-launch fx - earthquake_origin = rocket_base GetTagOrigin( "tag_engine" ); - earthquake( .25, 4, earthquake_origin, 4096 ); - - //play 3d launch aounds on rocket_base, and 2 st 2d sounds - - - wait( 3.5 ); - flag_set( "rocket_launch_grenade_detonate" ); - - // launch fx - earthquake( .35, 15, earthquake_origin, 4096 ); - array_thread( rocket_damage_triggers, ::rocket_damage_think ); - array_thread( rocket_damage_triggers, ::destroy_greandes_in_trigger ); - rocket_base SetClientFlag( level.const_flag_rocket_fx ); - exploder_stop( level.const_fx_exploder_rocket_coolant ); - - // move pieces - array_thread( rocket, ::rocket_move ); - - // stop damage - wait( 6 ); - level notify( "rocket_damage_stop" ); - - wait( 2 ); - level.rocket_camera = false; - - for ( i = 0; i < rocket_damage_triggers.size; i++ ) - { - rocket_damage_triggers[i] delete(); - } - - for ( i = 0; i < rocket_collision.size; i++ ) - { - rocket_collision[i] delete(); - } -} - -snd_rocket_gantry ( orignr, originl) -{ - orignr playsound ("evt_gantry_disengage"); - orignr playsound ("evt_rocket_start"); -// originl playsound ("evt_rocket_start"); -} -snd_countdown() -{ - //wait 2; - countdownl = spawn("script_origin", (480, -1256, 224)); - countdownr = spawn("script_origin", (152, 1488, 224)); - - clientnotify ( "snd_rocket_launch" ); - - - if( IsDefined(countdownl)&& IsDefined(countdownr) ) - { - countdownl playsound( "vox_mp_com_1a_rua1" ); - wait .112; - countdownr playsound( "vox_mp_com_1a_rua1" ); - wait 16.5; - - thread snd_launch (); - - - } -} -snd_launch () -{ - countdownl = spawn("script_origin", (480, -1256, 224)); - countdownr = spawn("script_origin", (152, 1488, 224)); - wait 2; - countdownl playsound( "vox_mp_com_2a_rua1" ); - wait .112; - countdownr playsound( "vox_mp_com_2a_rua1" ); - -} -rocket_sticky_grenade_think() -{ - self endon( "death" ); - - for ( ;; ) - { - self waittill( "grenade_stuck", grenade_ent ); - grenade_ent thread sticky_grenade_think(); - } -} - -sticky_grenade_think() -{ - self endon( "death" ); - level endon( "rocket_damage_stop" ); - - flag_wait( "rocket_launch_grenade_detonate" ); - wait( 0.05 ); - - self Detonate(); -} - -//Self is the trigger. This loops to make sure any grenade or claymore that's touching the damage trigger explodes. -destroy_greandes_in_trigger() -{ - self endon( "death" ); - level endon( "rocket_damage_stop" ); - - flag_wait( "rocket_launch_grenade_detonate" ); - - for( ;; ) - { - grenades = GetEntArray( "grenade", "classname" ); - - for ( i = 0; i < grenades.size; i++ ) - { - if( grenades[i] IsTouching( self )) - { - grenades[i] Detonate(); - } - - } - - wait 1; - } -} - -rocket_timer_init() -{ - level waittill( "prematch_over" ); - - event = set_dvar_if_unset( "scr_rocket_event", "end" ); - trigger1 = set_dvar_int_if_unset( "scr_rocket_event_trigger1", "0" ); - trigger2 = set_dvar_int_if_unset( "scr_rocket_event_trigger2", "0" ); - - if ( rocket_launch_abort() ) - { - return; - } - - switch ( event ) - { - case "end": - add_timed_event( 0, "rocket_launch" ); - add_score_event( level.scorelimit, "rocket_launch" ); - // AE 11-2-09: putting in the distant rocket timing - add_score_event( int(level.scorelimit * 0.5), "distant_rocket_launch" ); - break; - - case "time": - assert( trigger1 >= 0 ); - add_timed_event( trigger1, "rocket_launch" ); - // AE 11-2-09: putting in the distant rocket timing - add_timed_event( int(trigger1 * 0.5), "distant_rocket_launch" ); - break; - - case "percent": - assert( trigger1 >= 0 ); - assert( trigger1 <= 100 ); - - minutes = ( trigger1 * 0.01 ) * level.timelimit; - add_timed_event( minutes * 60, "rocket_launch" ); - // AE 11-2-09: putting in the distant rocket timing - add_timed_event( int(minutes * 60 * 0.5), "distant_rocket_launch" ); - - score = ( trigger1 * 0.01 ) * level.scorelimit; - add_score_event( score, "rocket_launch" ); - // AE 11-2-09: putting in the distant rocket timing - add_score_event( int(score * 0.5), "distant_rocket_launch" ); - break; - - case "random_time": - assert( trigger1 >= 0 ); - assert( trigger2 >= 0 ); - assert( trigger1 < trigger2 ); - - time = RandomIntRange( trigger1, trigger2 + 1 ); - add_timed_event( trigger1, "rocket_launch" ); - // AE 11-2-09: putting in the distant rocket timing - add_timed_event( int(trigger1 * 0.5), "distant_rocket_launch" ); - break; - - case "random_percent": - assert( trigger1 >= 0 ); - assert( trigger1 <= 100 ); - assert( trigger2 >= 0 ); - assert( trigger2 <= 100 ); - assert( trigger1 < trigger2 ); - - percent = RandomIntRange( trigger1, trigger2 + 1 ); - minutes = ( percent * 0.01 ) * level.timelimit; - add_timed_event( minutes * 60, "rocket_launch" ); - // AE 11-2-09: putting in the distant rocket timing - add_timed_event( int(minutes * 60 * 0.5), "distant_rocket_launch" ); - - percent = RandomIntRange( trigger1, trigger2 + 1 ); - score = ( percent * 0.01 ) * level.scorelimit; - add_score_event( score, "rocket_launch" ); - // AE 11-2-09: putting in the distant rocket timing - add_score_event( int(score * 0.5), "distant_rocket_launch" ); - break; - - default: - error( "Unknown event type: '" + event + "' used in dvar 'scr_rocket_event'" ); - break; - } -} - -rocket_launch_abort() -{ - launch_abort = set_dvar_int_if_unset( "scr_rocket_event_off", "0" ); - assert( launch_abort >= 0 ); - assert( launch_abort <= 100 ); - - if ( RandomInt( 101 ) < launch_abort ) - { - return true; - } - - return false; -} - -rocket_move() -{ - self MoveTo( self.origin + ( 0, 0, 50000 ), 50, 45 ); - - self waittill( "movedone" ); - self delete(); -} - -rocket_damage_think() -{ - level endon( "rocket_damage_stop" ); - damage_interval_secs = 1; - - assert( self.classname == "trigger_radius" ); - -/# - if ( set_dvar_int_if_unset( "scr_rocket_debug", "0" ) != 0 ) - { - drawcylinder( self.origin, self.radius, self.height, undefined, "rocket_damage_stop" ); - } -#/ - - for( ;; ) - { - self waittill( "trigger", ent ); - - if(IsPlayer(ent)) - { - player = ent; - - if ( player.sessionstate != "playing" ) - { - continue; - } - - if ( !IsDefined( player.rocket_damage_time ) ) - { - player.rocket_damage_time = GetTime(); - } - - if ( player.rocket_damage_time > GetTime() ) - { - continue; - } - - player shellshock( "tabun_gas_mp", damage_interval_secs ); - player.rocket_damage_time = GetTime() + ( damage_interval_secs * 1000 ); - player DoDamage( RandomIntRange( 40, 60 ), self.origin, self, level.rocket_base, 0, "MOD_SUICIDE" ); - } - //This kill dogs in the radius trigger - else if ( IsAI( ent )) - { - ent DoDamage( ent.health * 2, ent.origin); - } - //This kills RC bombs in the radius trigger - else if(IsDefined( ent.targetname ) && ent.targetname == "rcbomb" ) - { - //Destroy RC bomb - ent maps\mp\_rcbomb::rcbomb_force_explode(); - } - } -} - -radar_dish_think() -{ - radar_dish = GetEnt( "cosmodrome_radar_dish", "targetname" ); - AssertEx( IsDefined( radar_dish ), "Unable to find entity with targetname: 'cosmodrome_radar_dish'" ); - - for ( ;; ) - { - rotate_time = set_dvar_int_if_unset( "scr_radar_dish_rotate_secs", "30" ); - - if ( rotate_time <= 0 ) - { - return; - } - - radar_dish RotateYaw( 360, rotate_time ); - radar_dish waittill( "rotatedone" ); - } - -} - -devgui_cosmodrome( cmd ) -{ - for ( ;; ) - { - wait( 0.5 ); - - devgui_string = GetDvar( #"devgui_notify" ); - - switch( devgui_string ) - { - case "": - break; - - case "rocket_arm": - SetDvar( "scr_rocket_arm_wait_secs", "0" ); - level thread rocket_arm_think(); - break; - - default: - level notify( devgui_string ); - break; - } - - SetDvar( "devgui_notify", "" ); - } -} - -distant_rockets_think() -{ - // have the rockets in the distance going off - - distant_rocket = GetEntArray( "distant_rocket", "targetname" ); - AssertEx( IsDefined( distant_rocket ), "Unable to find entity with targetname: 'distant_rocket'" ); - - distant_rocket_gantry1 = GetEntArray("distant_rocket_gantry1", "targetname"); - AssertEx( IsDefined( distant_rocket_gantry1 ), "Unable to find entity with targetname: 'distant_rocket_gantry1'" ); - distant_rocket_gantry2 = GetEntArray("distant_rocket_gantry2", "targetname"); - AssertEx( IsDefined( distant_rocket_gantry2 ), "Unable to find entity with targetname: 'distant_rocket_gantry2'" ); - - distant_rocket_arm1 = GetEntArray( "distant_rocket_arm1", "targetname" ); - AssertEx( IsDefined( distant_rocket_arm1 ), "Unable to find entity with targetname: 'distant_rocket_arm1'" ); - distant_rocket_arm2 = GetEntArray( "distant_rocket_arm2", "targetname" ); - AssertEx( IsDefined( distant_rocket_arm2 ), "Unable to find entity with targetname: 'distant_rocket_arm2'" ); - distant_rocket_arm3 = GetEntArray( "distant_rocket_arm3", "targetname" ); - AssertEx( IsDefined( distant_rocket_arm3 ), "Unable to find entity with targetname: 'distant_rocket_arm3'" ); - distant_rocket_arm4 = GetEntArray( "distant_rocket_arm4", "targetname" ); - AssertEx( IsDefined( distant_rocket_arm4 ), "Unable to find entity with targetname: 'distant_rocket_arm4'" ); - - distant_rocket_engine = GetEnt( "distant_rocket_engine", "script_noteworthy" ); - AssertEx( IsDefined( distant_rocket_engine ), "Unable to find entity with script_noteworthy: 'distant_rocket_engine'" ); - distant_rocket_engine SetModel("tag_origin"); - distant_rocket_engine.angles = (-90, 0, 0); - - wait( 3 ); - - level waittill( "distant_rocket_launch" ); - - // splay sound on the gantry - thread snd_distant_gantry (distant_rocket_engine, distant_rocket_engine); - // play sound for arms - thread snd_distant_rocket_arm (distant_rocket_engine); - - // move the gantry away from the rocket - array_thread( distant_rocket_gantry1, ::distant_rocket_gantry1_move ); - array_thread( distant_rocket_gantry2, ::distant_rocket_gantry2_move ); - - wait(10); - - // move the arms away from the rocket - array_thread( distant_rocket_arm1, ::distant_rocket_arm1_move ); - array_thread( distant_rocket_arm2, ::distant_rocket_arm2_move ); - array_thread( distant_rocket_arm3, ::distant_rocket_arm3_move ); - array_thread( distant_rocket_arm4, ::distant_rocket_arm4_move ); - - - - // wait to launch - wait(8); - - // pre-launch fx - // TODO: small earthquakes?? - //earthquake_origin = rocket_base GetTagOrigin( "tag_engine" ); - //earthquake( .25, 4, earthquake_origin, 4096 ); - - // play 3d launch aounds on distant_rocket_engine, and 2 st 2d sounds - distant_rocket_engine playsound ("evt_dist_cosmo_launch"); - //playsoundatposition("evt_dist_cosmo_air_distf",(0,0,0)); - distant_rocket_engine playsound ("evt_dist_cosmo_air_distf"); - wait( 3.5 ); - - // launch fx - //earthquake( .35, 15, earthquake_origin, 4096 ); - - playfxontag( level._effect["rocket_blast_trail"], distant_rocket_engine, "tag_origin" ); - - // move pieces - array_thread( distant_rocket, ::rocket_move ); - -} - -distant_rocket_gantry1_move() // self == distant_rocket_gantry -{ - self RotatePitch(-45, 10.0); - self waittill("rotatedone"); -} -distant_rocket_gantry2_move() // self == distant_rocket_gantry -{ - self RotatePitch(45, 10.0); - self waittill("rotatedone"); -} - -distant_rocket_arm1_move() // self == distant_rocket_arm -{ - self RotatePitch(-45, 6.0); - self waittill("rotatedone"); -} -distant_rocket_arm2_move() // self == distant_rocket_arm -{ - self RotateRoll(-45, 6.0); - self waittill("rotatedone"); -} -distant_rocket_arm3_move() // self == distant_rocket_arm -{ - self RotatePitch(45, 6.0); - self waittill("rotatedone"); -} -distant_rocket_arm4_move() // self == distant_rocket_arm -{ - self RotateRoll(45, 6.0); - self waittill("rotatedone"); -} -snd_distant_rocket_arm ( distant_rocket_engine ) -{ - - //IPrintLnBold ("this is in the distant rocket arm section - snd_distant_rocket_arm"); - distant_rocket_engine playloopsound ("evt_dist_rocket_lp", .5); - distant_rocket_engine PlaySound ("evt_dist_rocket_start"); - //self waittill("rotatedone"); - wait (16); - distant_rocket_engine stoploopsound(.3); - distant_rocket_engine PlaySound ("evt_dist_rocket_end"); - -} -snd_distant_gantry ( orignr, originl) -{ - //IPrintLnBold ("this is playing dist rocket start"); - orignr playsound ("evt_dist_gantry_disengage"); - orignr playsound ("evt_dist_rocket_start"); -} diff --git a/mods/patch_mp/maps/mp/mp_crisis.gsc b/mods/patch_mp/maps/mp/mp_crisis.gsc deleted file mode 100644 index ce1f853..0000000 --- a/mods/patch_mp/maps/mp/mp_crisis.gsc +++ /dev/null @@ -1,35 +0,0 @@ -#include maps\mp\_utility; -main() -{ - //needs to be first for create fx - maps\mp\mp_crisis_fx::main(); - - precachemodel("collision_geo_128x128x10"); - - maps\mp\_load::main(); - - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_crisis_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_crisis"); - } - - //maps\mp\mp_crisis_amb::main(); - - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_cubans::level_init(); - - //setdvar("compassmaxrange","2100"); - - - // spawn collision to prevent players from seeing through the LVT - spawncollision("collision_geo_128x128x10","collider",(2891, 1282.5, 72.5), (3.6, 36.48, -1.65)); - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); -} diff --git a/mods/patch_mp/maps/mp/mp_duga.gsc b/mods/patch_mp/maps/mp/mp_duga.gsc deleted file mode 100644 index cb51ccd..0000000 --- a/mods/patch_mp/maps/mp/mp_duga.gsc +++ /dev/null @@ -1,178 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; -#include maps\mp\_events; - -main() -{ - ///# - //execdevgui( "devgui_mp_duga" ); - //#/ - - //needs to be first for create fx - maps\mp\mp_duga_fx::main(); - - maps\mp\_load::main(); - - maps\mp\mp_duga_amb::main(); - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_winterspecops::level_init(); - - precachemodel("collision_geo_mc_8x560x190"); - precachemodel("collision_geo_mc_4x52x190"); - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_duga_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_duga"); - } - - //Increase sample size so as to resolve lighting issue - SetDvar("sm_sunSampleSizeNear", ".5" ); - - //Sets it up so my events go off at times based on the game time and score limit - //level thread transformer_timer_init(); - ///# - //level thread devgui_duga(); - //#/ - - glasses = GetStructArray( "glass_shatter_on_spawn", "targetname" ); - - for ( i = 0; i < glasses.size; i++ ) - { - RadiusDamage( glasses[i].origin, 64, 101, 100 ); - } - - // weapon collision to keep grenades from falling out of the map through a gap between the terrain and the wall. - spawncollision("collision_geo_mc_8x560x190","collider",(462, -3840, -165), (0, 0, 0)); - spawncollision("collision_geo_mc_4x52x190","collider",(184, -3870, -164), (0, 270, 0)); - spawncollision("collision_geo_mc_4x52x190","collider",(184, -3922, -164), (0, 270, 0)); - spawncollision("collision_geo_mc_4x52x190","collider",(188, -3922, -169), (0, 270, 0)); -} - -//Sets it up so events can happen based on match time and score changes -transformer_timer_init() -{ - first_transformer_structs = getstructarray("transformer_struct","targetname"); - - level._transformer_array = []; - - for( i=0; i < first_transformer_structs.size; i++) - { - current_struct = first_transformer_structs[i]; - level._transformer_array = add_to_array(level._transformer_array, current_struct); - - while(IsDefined(current_struct.target)) - { - current_struct = getstruct(current_struct.target, "targetname"); - level._transformer_array = add_to_array(level._transformer_array, current_struct); - } - } - - level waittill( "prematch_over" ); - - - if( (IsDefined(level.timelimit)) && (level.timelimit > 0)) - { - //Electric transformers explode in pairs. The number of pairs is critical to determine how many 'events' we need. - transformer_pairs = level._transformer_array.size / 2; - total_seconds = level.timelimit * 60; - //We want to space out the transformer pair explosion evenly thourought the match - interval = total_seconds / transformer_pairs; - - //This creates events based on how many we need. The event sends a notify to duga.csc to set off explosions. - for( i = total_seconds; i >= interval; i -= interval ) - { - println( "Seconds: " + i ); - add_timed_event( int( i ), undefined, "go" ); - } - - //This event sets off with a tenth of a second left in the game. The duga.csc waits for the notify. - add_timed_event( .1, undefined, "fin" ); - } - //add_score_event( Int(level.scorelimit * .99), undefined, "final_boom" ); - //add_score_event( Int(level.scorelimit * 0.1),undefined, "next_boom" ); - //add_score_event( Int(level.scorelimit * 0.2),undefined, "next_boom" ); -} - -devgui_duga( cmd ) -{ - - for ( ;; ) - { - wait( 0.5 ); - - devgui_string = GetDvar( #"devgui_notify" ); - - switch( devgui_string ) - { - case "": - break; - - case "transformer_explode1": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode2": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode3": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode4": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode5": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode6": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode7": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode8": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode9": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode10": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode11": - level ClientNotify ("transformer_explode"); - break; - - case "transformer_explode12": - level ClientNotify ("transformer_explode"); - break; - - //case "final_explode": - //transformer_array[5] notify ("final_explode"); - //break; - - default: - level notify( devgui_string ); - break; - } - - SetDvar( "devgui_notify", "" ); - } -} diff --git a/mods/patch_mp/maps/mp/mp_firingrange.gsc b/mods/patch_mp/maps/mp/mp_firingrange.gsc deleted file mode 100644 index 9c7fe45..0000000 --- a/mods/patch_mp/maps/mp/mp_firingrange.gsc +++ /dev/null @@ -1,411 +0,0 @@ -#include maps\mp\_utility; - - -main() -{ - //needs to be first for create fx - maps\mp\mp_firingrange_fx::main(); - - precachemodel("collision_geo_10x10x512"); - - maps\mp\_load::main(); - - maps\mp\_compass::setupMiniMap("compass_map_mp_firingrange"); - - maps\mp\mp_firingrange_amb::main(); - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_cubans::level_init(); - - /****** GET ENTITIES ******/ - //TRIGGERS - alleyTrigger = getent("alleyTrigger","targetname"); - windowTrigger = getent("triggerwindowTarget","targetname"); - - //TARGETS - target1 = getent("fieldTarget_BackLeft","targetname"); - target2 = getent("fieldTarget_FrontLeft","targetname"); - target3 = getent("fieldTarget_Middle","targetname"); - target4 = getent("fieldTarget_BackRight","targetname"); - target5 = getent("fieldTarget_FrontRight","targetname"); - target6 = getent("trenchTarget_GroundWall","targetname"); - target7 = getent("trailerTarget_Window","targetname"); - target8 = getent("alleyTarget_Cover","targetname"); - target9 = getent("alleyTarget_Path","targetname"); - target10 = getent("centerTarget_Sandbags","targetname"); - target11 = getent("towerTarget_Front","targetname"); - target12 = getent("towerTarget_Back","targetname"); - target13 = getent("centerTarget_Path","targetname"); - target14 = getent("centerTarget_PathBunkerL","targetname"); - target15 = getent("centerTarget_PathBunkerR","targetname"); - target16 = getent("steelBuildingTarget_Slide1","targetname"); - target17 = getent("steelBuildingTarget_PopUp","targetname"); - target18 = getent("target_alleyWindow1","targetname"); - target19 = getent("target_alleyWindow2","targetname"); - target20 = getent("target_alleyWindow3","targetname"); - - //TARGET LIGHTs - - //Props - targetLight1_off = getent("steelBuildingTargetLight1_off", "targetname"); - targetLight1_on = getent("steelBuildingTargetLight1_on", "targetname"); - - targetLight2_off = getent("steelBuildingTargetLight2_off", "targetname"); - targetLight2_on = getent("steelBuildingTargetLight2_on", "targetname"); - - //Lights - - level.const_fx_exploder_red_light_1 = 1001; - level.const_fx_exploder_red_light_2 = 1002; - - //LOUDSPEAKERS - speaker1 = getent("loudspeaker1", "targetname"); - speaker2 = getent("loudspeaker2", "targetname"); - - //PROPANE TANKS - /*propaneTank1 = getent("explodingPropaneTank","targetname"); - propaneTank2 = getent("explodingPropaneTank2","targetname"); - propaneTank3 = getent("explodingPropaneTank3","targetname");*/ - - /****** HIDE ON TARGET LIGHTS ******/ - //Keep the on versions of the light model hidden until appropriate target takes damage. - targetLight1_on Hide(); - targetLight2_on Hide(); - - /****** DAMAGE OBJECTS ********/ - - //TARGETS - target1 SetCanDamage(true); - target2 SetCanDamage(true); - target3 SetCanDamage(true); - target4 SetCanDamage(true); - target5 SetCanDamage(true); - target8 SetCanDamage(true); - target9 SetCanDamage(true); - target10 SetCanDamage(true); - target13 SetCanDamage(true); - target14 SetCanDamage(true); - target15 SetCanDamage(true); - target16 SetCanDamage(true); - target17 SetCanDamage(true); - target18 SetCanDamage(true); - target19 SetCanDamage(true); - target20 SetCanDamage(true); - - target1 thread damageTarget(1); - target2 thread damageTarget(1); - target3 thread damageTarget(1); - target4 thread damageTarget(1); - target5 thread damageTarget(1); - target8 thread damageTarget(2); - target9 thread damageTarget(2); - target10 thread damageTarget(2); - target13 thread damageTarget(2); - target14 thread damageTarget(3); - target15 thread damageTarget(3); - target16 thread damageTargetLights(targetLight1_on, targetLight1_off, speaker1, "amb_target_buzzer", level.const_fx_exploder_red_light_2 ); - target17 thread damageTargetLights(targetLight2_on, targetLight2_off, speaker2, "amb_target_buzzer", level.const_fx_exploder_red_light_1 ); - target18 thread damageTarget(4); - target19 thread damageTarget(4); - target20 thread damageTarget(5); - - //PROPANE TANKS - /*propaneTank1 SetCanDamage(true); - propaneTank2 SetCanDamage(true); - propaneTank3 SetCanDamage(true); - - propaneTank1 thread damagePropaneTank("mpl_kls_artillery_impact"); - propaneTank2 thread damagePropaneTank("mpl_kls_artillery_impact"); - propaneTank3 thread damagePropaneTank("mpl_kls_artillery_impact");*/ - - - /****** MOVE TARGETS ******/ - //Sliding Targets - target1 thread moveTarget(4, 220, 10.1); - target2 thread moveTarget(4, 220, 5.2); - target3 thread moveTarget(4, 220, 10.3); - target4 thread moveTarget(3, 290, 8.4); - target5 thread moveTarget(3, 285, 3); - target6 thread moveTarget(1, 228, 8.1); - target7 thread moveTarget(7, (57, 23, 0), 3); - target8 thread moveTarget(1, 250, 5.5); - target9 thread moveTarget(1, 146, 8.6); - target10 thread moveTarget(1, 165, 8.7); - target11 thread moveTarget(4, 136, 5.05); - target12 thread moveTarget(3, 136, 7.15); - target13 thread moveTarget(1, 228, 8.25); - target16 thread moveTarget(4, 164, 5.35); - target17 thread moveTarget(5, 48, 5.45); - target18 thread moveTarget(3, 270, 8.55); - target19 thread moveTarget(6, 70, 6.65); - target20 thread moveTarget(1, 130, 5.75); - - - - //Hinge Targets - //targetHinge1 thread rotateTarget(2, 90, 0.5, 3); //-Z direction, 90 degrees, in .5 seconds, wait inbetween for 3 seconds. - target11 thread rotateTarget(2, 90, 0.5, 2); - target12 thread rotateTarget(1, 90, 0.7, 3); - - //Triggers - alleyTrigger thread triggerCheck(target9); - windowTrigger thread triggerCheck(target7); - - - // collision keeping players from capping the HQ point from outside the room. - spawncollision("collision_geo_10x10x512","collider",(-415, -429, -128), (0, 0, 0)); - spawncollision("collision_geo_10x10x512","collider",(-415, -419, -128), (0, 0, 0)); - - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - SetDvar( "scr_spawn_enemy_influencer_radius", 1600 ); - SetDvar( "scr_spawn_dead_friend_influencer_radius", 1300 ); - SetDvar( "scr_spawn_dead_friend_influencer_timeout_seconds", 13 ); - SetDvar( "scr_spawn_dead_friend_influencer_count", 7 ); - - - -} - -triggerCheck(target) -{ - self endon("game_ended"); - while(1) - { - self waittill("trigger", player); - - //If the target is close enough to the player to cause a possible issue, tell the target to go back the other direction. - distance = Distance(target.origin, self.origin); - if(distance <= 90) - { - target notify( "targetStopMoving" ); - while( isdefined( player) && player isTouching(self) && distance <= 90) - { - if ( DistanceSquared( target.origin, target.railPoints[0] ) < DistanceSquared( player.origin, target.railPoints[0] ) ) - target.preferredNextPos = 0; - else - target.preferredNextPos = 1; - wait( 0.25 ); - } - } - } -} - -damageTarget(dir) -{ - self endon("game_ended"); - while(1) - { - self waittill("damage", damage, attacker, direction); - - switch(dir) - { - case 1: - self rotateroll(self.angles[1] + 90, .1); - wait(.2); - self rotateroll(self.angles[1] - 90, .1); - wait(.2); - self PlaySound ("amb_target_flip"); - break; - case 2: - { - rotation = 1; - if ( isdefined( attacker ) && isPlayer( attacker ) ) - { - yaw = get2DYaw( attacker.origin, self.origin ); - if ( attacker.angles[1] > yaw ) - rotation = -1; - - } - - self rotateyaw(self.angles[2] + (180 * rotation), .3); - self PlaySound ("amb_target_twirl"); - self waittill("rotatedone"); - } - break; - case 3: - self rotatepitch(self.angles[1] + 90, .1); - wait(.2); - self rotatepitch(self.angles[1] - 90, .1); - wait(.2); - self PlaySound ("amb_target_flip"); - break; - case 4: - self rotateroll(self.angles[1] - 90, .1); - wait(.2); - self rotateroll(self.angles[1] + 90, .1); - wait(.2); - self PlaySound ("amb_target_flip"); - break; - case 5: - self rotatepitch(self.angles[1] - 90, .1); - wait(.2); - self rotatepitch(self.angles[1] + 90, .1); - wait(.2); - self PlaySound ("amb_target_flip"); - break; - - } - } -} - -//Another damage target function that handles Light style damage responses. -damageTargetLights(light_on, light_off, speaker, alias, exploderHandle) -{ - self endon("game_ended"); - while(1) - { - self waittill("damage"); - - speaker PlaySound(alias); - exploder(exploderHandle); - light_off Hide(); - light_on Show(); - wait(0.5); - exploder_stop(exploderHandle); - light_off Show(); - light_on Hide(); - } -} - -/*damagePropaneTank(soundAlias) -{ - self endon("game_ended"); - - while(1) - { - self waittill("damage"); - - RadiusDamage(self.origin, 500, 100, 50); - PlayFX(level._effect["rcbombexplosion"] , self.origin); - self PlaySound(soundAlias); - self Delete(); - } -}*/ - -//Pass in one of the following to define the start direction of the target: 1 for +y, 2 for -y, 3 for +x, 4 for -x, 5 for +Z, 6 for -Z. -//Pass in the distance in units the target is to travel. -//Pass in the ammount of time in seconds that it will take the target to travel that distance. -moveTarget(dir, dis, speed) -{ - self endon("game_ended"); - keepMoving = true; //Local var to decide if the target needs to be paused or not. - - //Get the targets starting position or nearPos - startPOS = self.origin; - //Find out the targets far position. - FarPOS = self.origin; - - sound = Spawn ("script_origin", self.origin); - sound LinkTo(self); - sound PlayLoopSound ("amb_target_chain"); - - switch(dir) - { - case 1://+Y - farPOS = self.origin + (0,dis,0); - break; - case 2://-Y - farPOS = self.origin - (0,dis,0); - break; - case 3://+X - farPOS = self.origin + (dis,0,0); - break; - case 4://-X - farPOS = self.origin - (dis,0,0); - break; - case 5://+Z - farPOS = self.origin + (0,0,dis); - break; - case 6://-Z - farPOS = self.origin - (0,0,dis); - break; - case 7://Custom - farPOS = self.origin - dis; - break; - } - - self.railPoints = []; - self.railPoints[0] = startPos; - self.railPoints[1] = FarPos; - self.preferredNextPos = 1; - self.playerTrigger = false; - //Move the target - while(1) - { - nextPos = self.railPoints[self.preferredNextPos]; - if ( self.preferredNextPos == 0 ) - self.preferredNextPos = 1; - else - self.preferredNextPos = 0; - - self moveto(nextPos, speed); - self waittill_either("movedone","targetStopMoving"); - self PlaySound ("amb_target_stop"); - } -} - - -rotateTarget(dir, deg, speed, pauseTime) -{ - self endon("game_ended"); - while(1) - { - switch(dir) - { - case 1: //+Z - self rotateyaw(self.angles[2] + deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - self rotateyaw(self.angles[2] - deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - break; - case 2: //-Z - self rotateyaw(self.angles[2] - deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - self rotateyaw(self.angles[2] + deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - break; - case 3: //+X - self rotateroll(self.angles[0] + deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - self rotateroll(self.angles[0] - deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - break; - case 4: //-X - self rotateroll(self.angles[0] - deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - self rotateroll(self.angles[0] + deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - break; - case 5: //+Y - self rotateroll(self.angles[1] + deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - self rotateroll(self.angles[1] - deg, speed); - self PlaySound ("amb_target_rotate"); - wait(pauseTime); - break; - case 6: //-Y - self rotatepitch(self.angles[1] - deg, speed); - wait(pauseTime); - self rotatepitch(self.angles[1] + deg, speed); - wait(pauseTime); - break; - case 7: //Custom - self rotateto( (self.angles[0] + 90, self.angles[1] - 90, self.angles[2] + 45), speed); - wait(pauseTime); - self rotateto( (self.angles[0] - 90, self.angles[1] + 90, self.angles[2] - 45), speed); - wait(pauseTime); - } - } -} \ No newline at end of file diff --git a/mods/patch_mp/maps/mp/mp_golfcourse.gsc b/mods/patch_mp/maps/mp/mp_golfcourse.gsc deleted file mode 100644 index 989b608..0000000 --- a/mods/patch_mp/maps/mp/mp_golfcourse.gsc +++ /dev/null @@ -1,386 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; -#include maps\mp\_events; - -main() -{ - //needs to be first for create fx - maps\mp\mp_golfcourse_fx::main(); - - precachemodel("collision_geo_64x64x256"); - precachemodel("collision_wall_256x256x10"); - - maps\mp\_load::main(); -// maps\mp\_compass::setupMiniMap("compass_map_mp_golfcourse"); - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_golfcourse_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_golfcourse"); - } - - maps\mp\mp_golfcourse_amb::main(); - - // If the team nationalites change in this file, you must also update the level's csc file, - // the level's csv file, and the share/raw/mp/mapsTable.csv - maps\mp\gametypes\_teamset_cubans::level_init(); - - // Set up the default range of the compass - setdvar("compassmaxrange","2100"); - - // Set up some generic War Flag Names. - // Example from COD5: CALLSIGN_SEELOW_A is the name of the 1st flag in Selow whose string is "Cottage" - // The string must have MPUI_CALLSIGN_ and _A. Replace Mapname with the name of your map/bsp and in the - // actual string enter a keyword that names the location (Roundhouse, Missle Silo, Launchpad, Guard Tower, etc) - - game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; - game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; - game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; - game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; - game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; - - game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; - game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; - game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; - game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; - game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - - level thread sprinklers_init(); - level thread gopher_init(); - - //spawning collision in wager match so players can't hide in the spawned in columns - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 || isPregame() ) - { - spawncollision("collision_geo_64x64x256","collider",(-1075, -797, -105), (0, 340.8, 0)); - spawncollision("collision_geo_64x64x256","collider",(-551, -965, -105), (0, 340.8, 0)); - } - - //spawning collision wall to stop players from getting out of the map by the pond - spawncollision("collision_wall_256x256x10","collider",(416, 592, -172), (0, 45, -7)); - - //spawn p_gc_signpost_short model to cover hole in geo under scoreboard - - scoreboard1 = Spawn("script_model", (-2046, 839, -215) ); - if ( IsDefined(scoreboard1) ) - { - scoreboard1.angles = (0, 180, 0); - scoreboard1 SetModel("p_gc_signpost_short"); - } - -} - -sprinklers_init() -{ - wait( 3 ); - - exploders = []; - exploders[ exploders.size ] = 1001; //sprinkler by sand trap - exploders[ exploders.size ] = 1002; //sprinkler in middle of map - exploders[ exploders.size ] = 1003; //sprinkler by bridge - exploders[ exploders.size ] = 1004; - exploders[ exploders.size ] = 1005; - exploders[ exploders.size ] = 1006; - exploders[ exploders.size ] = 1007; - exploders[ exploders.size ] = 3001; - exploders[ exploders.size ] = 3002; - exploders[ exploders.size ] = 3003; - exploders[ exploders.size ] = 3004; - exploders[ exploders.size ] = 3005; - exploders[ exploders.size ] = 3006; - exploders[ exploders.size ] = 3007; - exploders[ exploders.size ] = 3008; - exploders[ exploders.size ] = 3009; - exploders[ exploders.size ] = 3010; - exploders[ exploders.size ] = 3011; - exploders[ exploders.size ] = 3012; - - for ( i = 0; i < exploders.size; i++ ) - { - sprinkler_init( exploders[ i ] ); - } -} - -sprinkler_init( exploder_num ) -{ - create_fx_ent = exploder_find( exploder_num ); - assertex( IsDefined( create_fx_ent ), "unknown sprinkler exploder: " + exploder_num ); - - create_fx_ent.fake_health = 40; - - radius = 10; - height = 10; - - create_fx_ent.damage_trigger = Spawn( "trigger_damage", create_fx_ent.v[ "origin" ] - ( 0, 0, 5 ), 0, radius, height ); - -/# - //create_fx_ent.damage_trigger thread trigger_debug( radius, height ); - //create_fx_ent.damage_trigger thread sprinkler_debug( create_fx_ent ); -#/ - - create_fx_ent.destroyed_exploder = exploder_num + 1000; - - if ( exploder_num == 1001 || exploder_num == 1002 || exploder_num == 1003 ) - { - radius = 125; - height = 150; - - start = create_fx_ent.v[ "origin" ] + vector_scale( create_fx_ent.v[ "forward" ], 384 ); - - end = start + ( 0, 0, -8000 ); - trace = BulletTrace( start, end, false, undefined, false, false ); - origin = trace[ "position" ]; - - create_fx_ent thread sprinkler_water_think( origin, radius, height ); - create_fx_ent.soundent = spawn ( "script_origin", create_fx_ent.v[ "origin" ] ); - create_fx_ent.soundent playloopsound ("amb_sprinkler"); - } - - // spawn sound ents - - create_fx_ent thread sprinkler_think(exploder_num); - exploder( exploder_num ); -} - -sprinkler_think(exploder_num) -{ - for ( ;; ) - { - self.damage_trigger waittill( "damage", amount, attacker, direction, point, type ); - - if ( IsDefined( type ) ) - { - if ( type == "MOD_MELEE" || type == "MOD_EXPLOSIVE" || type == "MOD_IMPACT" ) - { - break; - } - } - - self.fake_health -= amount; - - if ( self.fake_health <= 0 ) - { - break; - } - } - - if (isdefined (self.soundent)) - { - self.soundent stoploopsound(); - clientnotify("so_"+exploder_num); - } - playsoundatposition ("amb_sprinkler_geyser", self.v[ "origin" ] ); - - self.damage_trigger delete(); - - // delete sound ents - - // stop exploder - exploder( self.destroyed_exploder ); - self exploder_fade(); - - if ( IsDefined( self.water_trigger ) ) - { - self.water_trigger delete(); - } - - wait( 0.25 ); - - self thread sprinkler_water_think( self.v[ "origin" ], 50, 100 ); - - wait( 1 ); - - exploder_stop( self.v[ "exploder" ] ); - - wait( 5 ); - self.water_trigger delete(); -} - -sprinkler_water_think( origin, radius, height ) -{ - self.water_trigger = Spawn( "trigger_radius", origin, 0, radius, height ); -/# - //self.water_trigger thread trigger_debug( radius, height ); -#/ - - for ( ;; ) - { - self.water_trigger waittill( "trigger", entity ); - - if ( !IsDefined( entity ) || !IsPlayer( entity ) || !IsAlive( entity ) ) - { - continue; - } - - player = entity; - - if ( player.sessionstate != "playing" ) - { - continue; - } - - if ( !IsDefined( player.golfcourse_water_drops ) ) - { - player.golfcourse_water_drops = false; - } - - if ( player.golfcourse_water_drops ) - { - continue; - } - - player thread sprinkler_water_drops( self.water_trigger ); - } -} - -sprinkler_water_drops( trigger ) -{ - self endon( "death" ); - self endon( "disconnect" ); - trigger endon( "death" ); - - self thread water_drop_end_think(); - trigger thread water_drop_death_think( self ); - - for ( ;; ) - { - if ( !self IsTouching( trigger ) ) - { - self notify( "water_drop_end" ); - return; - } - - if ( !self.golfcourse_water_drops ) - { - self.golfcourse_water_drops = true; - self SetWaterDrops( 50 ); - } - - wait( RandomIntRange( 1, 3 ) ); - } -} - -water_drop_end_think() -{ - self endon( "disconnect" ); - - self waittill_any( "death", "water_drop_end" ); - self.golfcourse_water_drops = false; - self SetWaterDrops( 0 ); -} - -water_drop_death_think( player ) -{ - player endon( "death" ); - player endon( "disconnect" ); - player endon( "water_drop_end" ); - - self waittill( "death" ); - player notify( "water_drop_end" ); -} - -exploder_find( num ) -{ - num = int( num ); - - for( i = 0; i < level.createFXent.size; i++ ) - { - ent = level.createFXent[ i ]; - - if( !isdefined( ent ) ) - continue; - - if( ent.v[ "type" ] != "exploder" ) - continue; - - if( !isdefined( ent.v[ "exploder" ] ) ) - continue; - - if( ent.v[ "exploder" ] != num ) - continue; - - return ent; - } - - return undefined; -} - -exploder_fade() -{ - assert( IsDefined( self.looper ) ); - TriggerFx( self.looper, GetTime()/1000 + 100 ); -} - -gopher_init() -{ - level waittill( "prematch_over" ); - - if ( !IsDefined( game[ "gopher_fx" ] ) ) - { - game[ "gopher_fx" ] = false; - } - - if ( isRoundBased() && getRoundsPlayed() >= 3 && getRoundsPlayed() % 3 == 0 ) - { - game[ "gopher_fx" ] = false; - } - - if ( game[ "gopher_fx" ] ) - { - return; - } - - if ( cointoss() ) - { - return; - } - - exploders = []; - exploders[ exploders.size ] = 5001; - exploders[ exploders.size ] = 5002; - exploders[ exploders.size ] = 5003; - exploders[ exploders.size ] = 5004; - - percent = RandomIntRange( 20, 90 ); - minutes = ( percent * 0.01 ) * level.timelimit; - add_timed_event( minutes * 60, "gopher_fx" ); - - percent = RandomIntRange( 20, 90 ); - score = ( percent * 0.01 ) * level.scorelimit; - add_score_event( score, "gopher_fx" ); - - level waittill( "gopher_fx" ); - game[ "gopher_fx" ] = true; - - exploder( random( exploders ) ); -} - -/# -sprinkler_debug( create_fx_ent ) -{ - self endon( "death" ); - - for ( ;; ) - { - print3d( self.origin, create_fx_ent.fake_health ); - wait( 0.05 ); - } -} - -trigger_debug( radius, height ) -{ - self endon( "death" ); - - for ( ;; ) - { - drawcylinder( self.origin, radius, height, 1 ); - wait( 1 ); - } - -} -#/ - diff --git a/mods/patch_mp/maps/mp/mp_mountain.gsc b/mods/patch_mp/maps/mp/mp_mountain.gsc deleted file mode 100644 index 160b62b..0000000 --- a/mods/patch_mp/maps/mp/mp_mountain.gsc +++ /dev/null @@ -1,234 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; - -main() -{ - /# - level thread devgui_mountain(); - execdevgui( "devgui_mp_mountain" ); - #/ - - //needs to be first for create fx - maps\mp\mp_mountain_fx::main(); - - precachemodel("collision_vehicle_64x64x64"); - precachemodel("collision_wall_512x512x10"); - precachemodel("collision_geo_128x128x128"); - - maps\mp\_load::main(); - - maps\mp\mp_mountain_amb::main(); - - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_mountain_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_mountain"); - } - - //setExpFog(2048, 6000, 1, 0.5, 0.5, 0); - - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_winterspecops::level_init(); - - // Set up the default range of the compass - //setdvar("compassmaxrange","2100"); - - // Set up some generic War Flag Names. - // Example from COD5: CALLSIGN_SEELOW_A is the name of the 1st flag in Selow whose string is "Cottage" - // The string must have MPUI_CALLSIGN_ and _A. Replace Mapname with the name of your map/bsp and in the - // actual string enter a keyword that names the location (Roundhouse, Missle Silo, Launchpad, Guard Tower, etc) - - game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; - game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; - game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; - game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; - game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; - - game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; - game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; - game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; - game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; - game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; - - // spawn vehicle collision to prevent rc car from entering a large rock - spawncollision("collision_vehicle_64x64x64","collider",(1740, -1585, 240), (0, 36.8, 0)); - spawncollision("collision_vehicle_64x64x64","collider",(1715, -1580, 240), (0, 26.4, 0)); - - // spawn collision to prevent players from leaping to a rock in the vista - spawncollision("collision_wall_512x512x10","collider",(3931, -2522, 288), (0, 45, 0)); - spawncollision("collision_wall_512x512x10","collider",(3931, -2522, 800), (0, 45, 0)); - - // spawn collision to prevent players from leaping to a rock in the vista over top of the killbrush. - spawncollision("collision_wall_512x512x10","collider",(3709, -2538, 560), (0, 180, 0)); - - // spawn collision to prevent players from sitting in a rock by the ice bridge - spawncollision("collision_geo_128x128x128","collider",(2242.2, 128.3, 260), (0, 310.2, 0)); - - - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - - SetDvar( "scr_spawn_enemy_influencer_radius", 1620 ); - - level thread gondola_sway(); - level thread glass_exploder_init(); - - glasses = GetStructArray( "glass_shatter_on_spawn", "targetname" ); - - for ( i = 0; i < glasses.size; i++ ) - { - RadiusDamage( glasses[i].origin, 64, 101, 100 ); - } -} - -devgui_mountain( cmd ) -{ - for ( ;; ) - { - wait( 0.5 ); - - devgui_string = GetDvar( #"devgui_notify" ); - - switch( devgui_string ) - { - case "": - break; - - default: - level notify( devgui_string ); - break; - } - - SetDvar( "devgui_notify", "" ); - } -} - -//Picks randomly from 2 sway strengths -gondola_sway() -{ - level endon ("gondola_triggered"); - - gondola_cab = GetEnt( "gondola_cab", "targetname" ); - - while( 1 ) - { - randomSwingAngle = RandomFloatRange( 2, 5 ); - randomSwingTime = RandomFloatRange( 2, 3 ); - - gondola_cab RotateTo( (randomSwingAngle*0.5,(randomSwingAngle*0.6)+90,randomSwingAngle*.8), randomSwingTime, randomSwingTime*0.3, randomSwingTime*0.3 ); - gondola_cab playsound ("amb_gondola_swing"); - wait( randomSwingTime ); - gondola_cab RotateTo( ((randomSwingAngle*0.5)*-1,(randomSwingAngle*-1*0.6)+90,randomSwingAngle*.8*-1), randomSwingTime, randomSwingTime*0.3, randomSwingTime*0.3 ); - gondola_cab playsound ("amb_gondola_swing_back"); - wait( randomSwingTime ); - } -} - -glass_exploder_init() -{ - single_exploders = []; - - for ( i = 0; i < level.createFXent.size; i++ ) - { - ent = level.createFXent[ i ]; - - if ( !IsDefined( ent ) ) - continue; - - if ( ent.v[ "type" ] != "exploder" ) - continue; - - if ( ent.v[ "exploder" ] == 201 || ent.v[ "exploder" ] == 202 ) - { - ent thread glass_group_exploder_think(); - } - else if ( ent.v[ "exploder" ] >= 101 && ent.v[ "exploder" ] <= 106 ) - { - single_exploders[ single_exploders.size ] = ent; - } - else if ( ent.v[ "exploder" ] == 301 || ent.v[ "exploder" ] == 302 ) - { - single_exploders[ single_exploders.size ] = ent; - } - } - - level thread glass_exploder_think( single_exploders ); -} - -glass_group_exploder_think() -{ - thresholdSq = 160 * 160; - count = 0; - - for ( ;; ) - { - level waittill( "glass_smash", origin ); - - if ( DistanceSquared( self.v[ "origin" ], origin ) < thresholdSq ) - { - count++; - } - - if ( count >= 3 ) - { - exploder( self.v[ "exploder" ] ); - return; - } - } -} - -glass_exploder_think( exploders ) -{ - thresholdSq = 160 * 160; - - if ( exploders.size <= 0 ) - { - return; - } - - for ( ;; ) - { - closest = 999 * 999; - closest_exploder = undefined; - - level waittill( "glass_smash", origin ); - - for ( i = 0; i < exploders.size; i++ ) - { - if ( !IsDefined( exploders[i] ) ) - { - continue; - } - - if ( IsDefined( exploders[i].glass_broken ) ) - { - continue; - } - - distSq = DistanceSquared( exploders[i].v[ "origin" ], origin ); - - if ( distSq > thresholdSq ) - { - continue; - } - - if ( distSq < closest ) - { - closest_exploder = exploders[i]; - closest = distSq; - } - } - - if ( IsDefined( closest_exploder ) ) - { - closest_exploder.glass_broken = true; - exploder( closest_exploder.v[ "exploder" ] ); - } - } -} \ No newline at end of file diff --git a/mods/patch_mp/maps/mp/mp_nuked.gsc b/mods/patch_mp/maps/mp/mp_nuked.gsc deleted file mode 100644 index 6adcdc7..0000000 --- a/mods/patch_mp/maps/mp/mp_nuked.gsc +++ /dev/null @@ -1,405 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; - -main() -{ - //needs to be first for create fx - maps\mp\mp_nuked_fx::main(); - - precachemodel("collision_wall_128x128x10"); - - // move a dom spawn that is sharing space with one of the mannequins - move_spawn_point( "mp_dom_spawn", (791, 449, -20), ( 779, 445, -20 ) ); - - maps\mp\_load::main(); - - maps\mp\mp_nuked_amb::main(); - maps\mp\_compass::setupMiniMap("compass_map_mp_nuked"); - - level.onSpawnIntermission = ::nuked_intermission; - - /# - level thread devgui_nuked(); - execdevgui( "devgui_mp_nuked" ); - #/ - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_urbanspecops::level_init(); - - // Set up the default range of the compass - setdvar("compassmaxrange","2100"); - - // Set up some generic War Flag Names. - // Example from COD5: CALLSIGN_SEELOW_A is the name of the 1st flag in Selow whose string is "Cottage" - // The string must have MPUI_CALLSIGN_ and _A. Replace Mapname with the name of your map/bsp and in the - // actual string enter a keyword that names the location (Roundhouse, Missle Silo, Launchpad, Guard Tower, etc) - - game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; - game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; - game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; - game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; - game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; - - game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; - game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; - game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; - game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; - game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - SetDvar( "scr_spawn_enemy_influencer_radius", 1600 ); - SetDvar( "scr_spawn_dead_friend_influencer_radius", 1300 ); - SetDvar( "scr_spawn_dead_friend_influencer_timeout_seconds", 8 ); - SetDvar( "scr_spawn_dead_friend_influencer_count", 7 ); - - //spawn collision in yellow house to prevent players from jump-crouching into a door. - spawncollision("collision_wall_128x128x10","collider",(769.2, 329.3, 143), (0, 290.6, 0)); - spawncollision("collision_wall_128x128x10","collider",(769.2, 329.3, 271), (0, 290.6, 0)); - - level.const_fx_exploder_end_game_glass_shatter = 5001; - level.disableOutroVisionSet = true; - - level thread nuked_mannequin_init(); - nuked_doomsday_clock_init(); - level thread maps\mp\mp_nuked_platform::main(); - - level thread nuked_population_sign_think(); - level thread nuked_bomb_drop_think(); - - /# - level thread nuked_bomb_drop_dev(); - #/ - -} - -move_spawn_point( targetname, start_point, new_point ) -{ - spawn_points = getentarray( targetname, "classname" ); - - for ( i = 0; i < spawn_points.size; i++ ) - { - if ( distancesquared( spawn_points[i].origin, start_point ) < 1 ) - { - spawn_points[i].origin = new_point; - return; - } - } -} - -nuked_mannequin_init() -{ - keep_count = 28; - level.mannequin_count = 0; - - destructibles = GetEntArray( "destructible", "targetname" ); - mannequins = nuked_mannequin_filter( destructibles ); - - if ( mannequins.size <= 0 ) - { - return; - } - - remove_count = mannequins.size - keep_count; - remove_count = clamp( remove_count, 0, remove_count ); - - mannequins = array_randomize( mannequins ); - - for ( i = 0; i < remove_count; i++ ) - { - assert( IsDefined( mannequins[i].target ) ); - - collision = GetEnt( mannequins[i].target, "targetname" ); - assert( IsDefined( collision ) ); - - collision delete(); - mannequins[i] delete(); - level.mannequin_count--; - } - - level waittill( "prematch_over" ); - level.mannequin_time = GetTime(); -} - -nuked_mannequin_filter( destructibles ) -{ - mannequins = []; - - for ( i = 0; i < destructibles.size; i++ ) - { - destructible = destructibles[i]; - - if ( IsSubStr( destructible.destructibledef, "male" ) ) - { - mannequins[ mannequins.size ] = destructible; - level.mannequin_count++; - } - } - - return mannequins; -} - -nuked_intermission() -{ - maps\mp\gametypes\_globallogic_defaults::default_onSpawnIntermission(); - - if ( wasLastRound() ) - { - level notify( "bomb_drop" ); - } -} - -nuked_bomb_drop_think() -{ - cameraStart = GetStruct( "endgame_camera_start", "targetname" ); - cameraEnd = GetStruct( cameraStart.target, "targetname" ); - - bomb = GetEnt( "nuked_bomb", "targetname" ); - - for ( ;; ) - { - camera = Spawn( "script_model", cameraStart.origin ); - camera.angles = cameraStart.angles; - camera SetModel( "tag_origin" ); - - level waittill( "bomb_drop" ); - - if( level.finalkillcam && IsDefined(level.lastKillCam ) ) - { - wait( 0.1 ); - while( level.inFinalKillcam ) - { - wait( 0.1 ); - } - } - - for ( i = 0; i < get_players().size; i++ ) - { - player = get_players()[i]; - player CameraSetPosition( camera ); - player CameraSetLookAt(); - player CameraActivate( true ); - } - - cam_move_time = set_dvar_float_if_unset( "scr_cam_move_time", "2.5" ); - bomb_explode_delay = set_dvar_float_if_unset( "scr_bomb_explode_delay", "1.5" ); - glass_break_delay = set_dvar_float_if_unset( "scr_glass_break_delay", "0.5" ); - //white_out_delay = set_dvar_float_if_unset( "scr_white_out_delay", "1.0" ); - - camera MoveTo( cameraEnd.origin, cam_move_time, 0, 0 ); - camera RotateTo( cameraEnd.angles, cam_move_time, 0, 0 ); - - bomb playSound ("amb_end_nuke"); - - dest = ( bomb.origin[0], bomb.origin[1], bomb.origin[2] - 3700 ); - - time = set_dvar_float_if_unset( "scr_bomb_time", "1.5" ); - accel_time = set_dvar_float_if_unset( "scr_bomb_accel_time", ".75" ); - - bomb MoveTo( dest, time, accel_time, 0 ); - - wait( bomb_explode_delay ); - playfx ( level._effect["fx_mp_nuked_nuclear_explosion"], bomb.origin); - wait( glass_break_delay ); - level thread waitForGlassBreak(); - cameraForward = anglestoforward( cameraEnd.angles ); - explodePoint = cameraEnd.origin + 20*cameraForward; - //black = ( 0.2, 0.2, 0.2 ); - //debugstar(explodePoint, 2 * 1000, black); - physicsExplosionSphere( explodePoint, 128, 128, 1 ); - RadiusDamage( explodePoint, 128, 128, 128 ); - //wait( white_out_delay ); - - camera thread vibrate(); - - //PrintLn( "SND NUKE play" ); - //VisionSetNaked( "flash_grenade", .4 ); - - /# - //bomb waittill( "movedone" ); - - wait( 3.5 - glass_break_delay ); - level notify( "bomb_reset" ); - camera delete(); - #/ - } -} - -vibrate() -{ - self endon( "death" ); - - pitchVibrateAmplitude = 1; - - vibrateAmplitude = 2; - vibrateTime = 0.05; - - originalAngles = self.angles; - - angles0 = ( originalAngles[0], originalAngles[1], originalAngles[2] - vibrateAmplitude ); - angles1 = ( originalAngles[0], originalAngles[1], originalAngles[2] + vibrateAmplitude ); - - for(;;) - { - angles0 = ( originalAngles[0] - pitchVibrateAmplitude , originalAngles[1], originalAngles[2] - vibrateAmplitude ); - angles1 = ( originalAngles[0] + pitchVibrateAmplitude, originalAngles[1], originalAngles[2] + vibrateAmplitude ); - - self RotateTo(angles0, vibrateTime ); - self waittill( "rotatedone" ); - self RotateTo(angles1, vibrateTime ); - self waittill( "rotatedone" ); - - if ( vibrateAmplitude > 0 ) - vibrateAmplitude -= 0.25; - pitchVibrateAmplitude = 0 - pitchVibrateAmplitude; - pitchVibrateAmplitude *= 0.66; - } -} - -waitForGlassBreak() -{ - level endon( "bomb_reset" ); - level waittill( "glass_smash", origin ); - - exploder( level.const_fx_exploder_end_game_glass_shatter ); -} - -nuked_population_sign_think() -{ - tens_model = GetEnt( "counter_tens", "targetname" ); - ones_model = GetEnt( "counter_ones", "targetname" ); - - step = ( 360 / 10 ); // 10 digits (0-9) on the dial - - // put the dials at 0 - ones = 0; - tens = 0; - - tens_model RotateRoll( step, 0.05 ); - ones_model RotateRoll( step, 0.05 ); - - for ( ;; ) - { - wait( 1 ); - - for ( ;; ) - { - num_players = get_players().size; - - dial = ones + ( tens * 10 ); - - if ( num_players < dial ) - { - ones--; - time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); - - if ( ones < 0 ) - { - ones = 9; - tens_model RotateRoll( 0 - step, time ); - tens--; - } - - ones_model RotateRoll( 0 - step, time ); - ones_model waittill( "rotatedone" ); - } - else if ( num_players > dial ) - { - ones++; - time = set_dvar_float_if_unset( "scr_dial_rotate_time", "0.5" ); - - if ( ones > 9 ) - { - ones = 0; - tens_model RotateRoll( step, time ); - tens++; - } - - ones_model RotateRoll( step, time ); - ones_model waittill( "rotatedone" ); - } - else - { - break; - } - } - } -} - -nuked_doomsday_clock_init() -{ - min_hand_model = GetEnt( "clock_min_hand", "targetname" ); - sec_hand_model = GetEnt( "clock_sec_hand", "targetname" ); - - start_angle = 318; - - min_hand_model RotatePitch( start_angle, 0.05 ); - min_hand_model waittill( "rotatedone" ); - - if ( level.timelimit > 0 ) - { - min_hand_model RotatePitch( 360 - start_angle, level.timelimit * 60 ); - sec_hand_model RotatePitch( 360 * level.timelimit, level.timelimit * 60 ); - } - else - { - sec_hand_model thread nuked_doomsday_clock_seconds_think(); - } -} - -nuked_doomsday_clock_seconds_think() -{ - for ( ;; ) - { - self RotatePitch( 360, 60 ); - self waittill( "rotatedone" ); - } -} - -/# -nuked_bomb_drop_dev() -{ - bomb = GetEnt( "nuked_bomb", "targetname" ); - bomb_origin = bomb.origin; - - for ( ;; ) - { - level waittill( "bomb_reset" ); - bomb.origin = bomb_origin; - - player = getHostPlayer(); - player CameraActivate( false ); - VisionSetNaked( "mp_nuked", 0 ); - } -} - -devgui_nuked( cmd ) -{ - for ( ;; ) - { - wait( 0.5 ); - - devgui_string = GetDvar( #"devgui_notify" ); - - switch( devgui_string ) - { - case "": - break; - - case "warp_to_bomb": - player = getHostPlayer(); - AddDebugCommand( "noclip" ); - player SetOrigin( ( 3969, 8094, 1052 ) ); - player SetPlayerAngles( ( -19, 94, 0 ) ); - break; - - default: - level notify( devgui_string ); - break; - } - - SetDvar( "devgui_notify", "" ); - } -} -#/ \ No newline at end of file diff --git a/mods/patch_mp/maps/mp/mp_radiation.gsc b/mods/patch_mp/maps/mp/mp_radiation.gsc deleted file mode 100644 index ce57eed..0000000 --- a/mods/patch_mp/maps/mp/mp_radiation.gsc +++ /dev/null @@ -1,852 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; - - -main() -{ - precachemodel("tag_origin"); - - /# - level thread devgui_radiation(); - execdevgui("devgui_mp_radiation"); - #/ - - //needs to be first for create fx - maps\mp\mp_radiation_fx::main(); - - precachemodel("collision_geo_64x64x256"); - precachemodel("collision_wall_128x128x10"); - precachemodel("collision_geo_256x256x10"); - - - maps\mp\_load::main(); - - maps\mp\mp_radiation_amb::main(); - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_radiation_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_radiation"); - } - - - //Increase sample size so as to resolve lighting issue - SetDvar("sm_sunSampleSizeNear", ".5" ); - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_urbanspecops::level_init(); - - // Set up the default range of the compass - setdvar("compassmaxrange","2100"); - - // COLLISION - to prevent players from placing turrets inside a large cylinder brush in the tank room - spawncollision("collision_geo_64x64x256","collider",(1221, 41, 236), (0, 0, 0)); - - // COLLISION - to prevent players from jumping onto a little ledge of collision - spawncollision("collision_wall_128x128x10","collider",(1042, -309, 309), (0, 0, 0)); - spawncollision("collision_wall_128x128x10","collider",(1080, -309, 309), (0, 0, 0)); - - // COLLISION - to prevent players from dropping turrets in the large grey tanks by the warehouse - spawncollision("collision_geo_64x64x256","collider",(568, 219, 264), (0, 0, 0)); - spawncollision("collision_geo_64x64x256","collider",(567, -105, 264), (0, 0, 0)); - - // COLLISION - to prevent players dropping off the catwalk onto ledge in warehouse - spawncollision("collision_wall_128x128x10","collider",(1157, -345, 186), (0, 270, 0)); - spawncollision("collision_wall_128x128x10","collider",(1157, -345, 314), (0, 270, 0)); - spawncollision("collision_wall_128x128x10","collider",(1157, -345, 442), (0, 270, 0)); - - //NOTURRET - spawns radius triggers to stop players from placing turrets in the large cylinders in the NE corner of the map - addNoTurretTrigger((1440, -1116, 145), 230, 256); - addNoTurretTrigger((1446, -1659, 145), 230, 256); - - - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - - flag_init_func(); - - level_objects_init(); - -} - -flag_init_func() -{ - flag_init("kill_stuck_players"); -} - -level_objects_init() -{ - level._digger_fx = LoadFX( "maps/mp_maps/fx_mp_sand_digger_radiation" ); - waittillframeend; - level._door_switch_trig1 = getent_and_assert("switch_trigger1"); - level._door_switch_trig2 = getent_and_assert("switch_trigger2"); - - level._door1 = getent_and_assert("big_door1_clip"); - level._door2 = getent_and_assert("big_door2_clip"); - - level.const_fx_exploder_switch_green_light = 2001; - level.const_fx_exploder_switch_red_light = 2002; - - //Gets some diggers digging - level thread digger_dig_init(); - - //Gets diggers in the background moving - moving_diggers_init(); - - //Sets up the switchs players can flip to open the double doors - level thread door_switch_func(); - - if( !level.wagerMatch && !isPregame() ) - { - //get my doors opening at the start of the match - level thread double_doors_open_at_start(); - } - - //Get conveyer belt working - level thread conveyer_belt_init(); -} - -turnSwitchPanelRed() -{ - exploder_stop( level.const_fx_exploder_switch_green_light ); - exploder( level.const_fx_exploder_switch_red_light ); -} - -turnSwitchPanelGreen() -{ - exploder_stop( level.const_fx_exploder_switch_red_light ); - exploder( level.const_fx_exploder_switch_green_light ); -} - -//Sets it up so a player can flip a switch and open large double doors -door_switch_func() -{ - //Set up the use trigger switches that activate my double doors - level._door_switch_trig1 thread door_switch_setup(); - level._door_switch_trig2 thread door_switch_setup(); - - //Cooldown switches inform the player that the door switch is on cooldown if they try to interact with it - cooldown_switches = GetEntArray("off_trigger","targetname"); - AssertEx( cooldown_switches.size > 0, "Missing off_triggers"); - - for( i = 0; i < cooldown_switches.size; i++) - { - cooldown_switches[i] UseTriggerRequireLookAt(); - cooldown_switches[i] SetCursorHint( "HINT_NOICON" ); - cooldown_switches[i] SetHintString( &"MP_HOLD_DOOR_SWITCH_UNAVAILABLE"); - cooldown_switches[i] trigger_off(); - } - - turnSwitchPanelRed(); - - kill_trig1 = getent_and_assert("edge_death_trig1"); - kill_trig2 = getent_and_assert("edge_death_trig2"); - center_death_trig = getent_and_assert("center_death_trig"); - - //Set up DVARS for tweaking door opening sequence - d1_new_angle = set_dvar_int_if_unset("scr_d1_new_angle", "123"); - d2_new_angle = set_dvar_int_if_unset("scr_d2_new_angle", "-123"); - - door_model1 = getent_and_assert("big_door1"); - door_model2 = getent_and_assert("big_door2"); - - door_model1 LinkTo(level._door1); - door_model2 LinkTo(level._door2); - - door_monster_clip = GetEnt("door_monster_clip","targetname"); - - //door_monster_clip thread dog_kill(); - - //snd_door_status tracks if the door is open or closed - snd_door_status = 0; - - light_structs = getstructarray("switch_struct","targetname"); - AssertEx( light_structs.size > 0, "Missing light structs"); - - for( i = 0; i < light_structs.size; i++) - { - light_structs[i] thread switch_lights(i); - } - - tunnel_structs = getstructarray("tunnel_light_spot","targetname"); - AssertEx(tunnel_structs.size > 0, "Missing light structs"); - - for( i = 0; i < light_structs.size; i++) - { - tunnel_structs[i] thread tunnel_lights(i); - } - - while(!level.wagermatch) - { - //This is a switch in the level on the catwalk - waittill_any_ents(level._door_switch_trig1,"trigger",level._door_switch_trig2,"trigger"); - - //Disables the switch temporarily - level._door_switch_trig1 trigger_off(); - level._door_switch_trig2 trigger_off(); - - for( i = 0; i < cooldown_switches.size; i++) - { - cooldown_switches[i] trigger_on(); - } - - //Set up DVARS for tweaking door opening sequence. Acceleration and decelation variation added for realistic offset. - door_time = set_dvar_int_if_unset("scr_d1_time", "8"); - - //The doors have specific accelleration and deceleration values so as give an organic-looking timing offset. - //When the doors are opening, we want Door 2 to accelerate slightly faster so as to avoid clipping. - if(snd_door_status == 0) - { - d1_accel = door_time * .6; - d2_accel = door_time * .7; - - d1_decel = door_time * .4; - d2_decel = door_time * .3; - - //Monster clip is placed and path nodes are severed to keep dogs from running on the doors - door_monster_clip trigger_on(); - door_monster_clip DisconnectPaths(); - } - //When the doors are closing, we want Door 1 to accelerate slightly faster so as to avoid clipping. - else - { - d1_accel = door_time * .7; - d2_accel = door_time * .6; - - d1_decel = door_time * .3; - d2_decel = door_time * .4; - } - - door_cooldown = set_dvar_int_if_unset("scr_door_cooldown", "20"); - - level._door1 RotateRoll(d1_new_angle, door_time, d1_accel, d1_decel); - level._door2 RotateRoll(d2_new_angle, door_time, d2_accel, d2_decel); - - thread dropEverythingOnDoorsToGround(); - level thread destroyEquipment(); - - // Play door opening sound - level._door1 playloopsound ("evt_hydraulic_loop", .5); - level._door1 playsound ("evt_hydraulic_start"); - level._door1 thread door_snd_alarm ( 5 ); - - //This sets it so my doors move in reverse next time they're activated - d1_new_angle = d1_new_angle * -1; - d2_new_angle = d1_new_angle * -1; - - //Flag marks the period of time i'm checking for any player caught in moving collision - flag_set("kill_stuck_players"); - - //Give time for doors to move a moderate amount before starts kill trigger - wait 4; - - //Only want to kill players if doors are closing - if(snd_door_status == 1) - { - //These are three seperate trigger brushes I want to check for stuck players - kill_trig1 thread kill_edge_players_func(); - kill_trig2 thread kill_edge_players_func(); - center_death_trig thread kill_edge_players_func(); - } - level._door1 waittill("rotatedone"); - - //snd_door_status tracks if the door is currently open or closed for seprate open and close audio - if (snd_door_status == 0) - { - //stops the move loop, plays endind sound, and set current door status - level._door1 stoploopsound (1); - center_death_trig playsound ("evt_hydraulic_open"); - snd_door_status = 1; - } - else - { - //stops the move loop, plays endind sound, and set current door status - level._door1 stoploopsound (1); - center_death_trig playsound ("evt_hydraulic_close"); - - //Clip is removed so dogs can path - door_monster_clip ConnectPaths(); - door_monster_clip trigger_off(); - snd_door_status = 0; - } - - flag_clear("kill_stuck_players"); - - //Special notify to end my check for players caught on collision - level notify ("edge_check"); - - wait (door_cooldown); - level notify ("no_cooldown"); - - for( i = 0; i < cooldown_switches.size; i++) - { - cooldown_switches[i] trigger_off(); - } - - level._door_switch_trig1 trigger_on(); - level._door_switch_trig2 trigger_on(); - } -} -door_snd_alarm ( alarmTimes ) -{ - - for (i=0; i < alarmTimes; i++) - { - wait (.5); - - playsoundatposition("amb_alarm_buzz",(-664,110,436)); - - playsoundatposition("amb_alarm_buzz",(-664,-72,436)); - - playsoundatposition("amb_alarm_buzz",(-666,-602,436)); - - playsoundatposition("amb_alarm_buzz",(-666,660,444)); - - wait (1.5); - } -} -//Self is the use triggers that activate the double doors -door_switch_setup() -{ - self usetriggerrequirelookat(); - if ( level.wagerMatch ) - { - self SetHintString(&"MP_HOLD_DOOR_SWITCH_UNAVAILABLE"); - turnSwitchPanelRed(); - } - else - { - self SetHintString(&"MP_HOLD_TO_OPERATE_DOORS"); - turnSwitchPanelGreen(); - } - - while ( !level.wagerMatch ) - { - // self is the switch. who is the player that triggered switch - self waittill("trigger", who); - - //Added "if" check for when the doors are triggered without a player -Leif - if(IsDefined( who )) - { - who playsound ("evt_hydraulic_switch"); - } - - wait (1); - } -} - -//Self is a trigger. The triggers are placed in places i'm afraid of players getting caught -kill_edge_players_func() -{ - level endon ("edge_check"); - - //This only loops while the doors are moving - while(1) - { - self waittill("trigger", player); - - if((player IsTouching(level._door1)) || (player IsTouching(level._door2))) - { - player DoDamage(player.health * 2, self.origin, player, player, 0, "MOD_SUICIDE" ); - // TODO: add crushing audio. CDC - } - else - { - wait .05; - } - } -} - -//TO DO: Review this function for multiplayer API improvements. -//'Self' is the struct within the panel that operates the double doors -switch_lights( element_number ) -{ - if ( level.PrematchPeriod > 0 && level.inPrematchPeriod == true ) - { - level waittill("prematch_over"); - } - - while(1) - { - effect_ent = Spawn("script_model", self.origin); - effect_ent SetModel("tag_origin"); - - //This wait is necesary to get the effect to work on the newly created script model. - wait .1; - - //Green light signals the switch is not on cooldown - turnSwitchPanelGreen(); - //PlayFXOnTag(level._effect["green_light"], effect_ent,"tag_origin" ); - - waittill_any_ents(level._door_switch_trig1,"trigger",level._door_switch_trig2,"trigger"); - - //This function is array threaded, so we must prevent FX from playing in the same frame using this loop - for (i = 0; i < element_number; i++) - { - wait .1; - } - - effect_ent Delete(); - - blinky_effect_ent = Spawn("script_model", self.origin); - blinky_effect_ent SetModel("tag_origin"); - - //This wait is necesary to get the effect to work on the newly created script model. - wait .1; - - //Blink red light signals the double doors are moving - turnSwitchPanelRed(); - //PlayFXOnTag(level._effect["blink_light"], blinky_effect_ent,"tag_origin" ); - - //This notify signals that the doors have stopped moving - level waittill ("edge_check"); - - for (i = 0; i < element_number; i++) - { - wait .1; - } - - blinky_effect_ent Delete(); - - final_effect_ent = Spawn("script_model", self.origin); - final_effect_ent SetModel("tag_origin"); - - //This wait is necesary to get the effect to work on the newly created script model. - wait .1; - - //Red light signals the switch cannot be used - //PlayFXOnTag(level._effect["red_light"], final_effect_ent,"tag_origin" ); - - //This notify signals that the doors have stopped moving - level waittill ("no_cooldown"); - - for (i = 0; i < element_number; i++) - { - wait .1; - } - - final_effect_ent Delete(); - } -} - -//'Self' is the struct within the light bulbs in the Radiation tunnel. This function manages FX in the tunnel -//'Element number' is equal to self's index number in the array that got array threaded. -tunnel_lights(element_number) -{ - door_closed = true; - - while(1) - { - //Must define may variable to avoid SRE - effect_ent = undefined; - - //When door is closed, play "solid" tunnel light effect - if(door_closed) - { - effect_ent = Spawn("script_model", self.origin); - effect_ent SetModel("tag_origin"); - - //Must wait a moment for the script model to finish spawning - wait .1; - - PlayFXOnTag(level._effect["green_light"], effect_ent,"tag_origin" ); - } - - //Wait until a tunnel double door switch is hit - waittill_any_ents(level._door_switch_trig1,"trigger",level._door_switch_trig2,"trigger"); - - //This loop makes sure effects do not happen in the same frame, as this function has been array threaded to multiple ents. - for (i = 0; i < element_number; i++) - { - wait .1; - } - - //'New effect' is the blinking lights that occur while the double doors are moving - new_effect_ent = Spawn("script_model", self.origin); - new_effect_ent SetModel("tag_origin"); - - if(IsDefined(effect_ent)) - { - effect_ent Delete(); - } - - //Must wait a moment for the script model to finish spawning - wait .1; - - PlayFXOnTag(level._effect["blink_light"], new_effect_ent,"tag_origin" ); - - level waittill ("edge_check"); - - for (i = 0; i < element_number; i++) - { - wait .1; - } - - new_effect_ent Delete(); - - if(!door_closed) - { - door_closed = true; - } - else - { - door_closed = false; - } - } -} - -//Open doors at start -double_doors_open_at_start() -{ - //Set up the double doors to open at the start of the match - if ( level.PrematchPeriod > 0 && level.inPrematchPeriod == true ) - { - level waittill("prematch_over"); - } - - - //Slow down my door for other functions to hit waittil's - wait .3; - - //Note I didn't use the "useby player[0]" convention due to a hesitance to grab specific players in MP. - level._door_switch_trig1 notify ("trigger"); -} - -//Set up the devgui to have the ability to operate the doors, adjust door cooldown, rotate times, digger behavior, etc. -devgui_radiation(cmd) -{ - while(1) - { - wait(0.5); - - devgui_string = GetDvar( #"devgui_notify"); - - switch(devgui_string) - { - case "": - break; - - case "operate_doors": - level._door_switch_trig1 notify ("trigger"); - break; - - default: - level notify(devgui_string); - break; - } - - SetDvar("devgui_notify", ""); - } -} - -//*****TO DO: MOVE DIGGER FUNCTIONALITY CLIENT SIDE.********* - -//Sets it up so I can handle multiple diggers doing a digging action -digger_dig_init() -{ - diggers = GetEntArray("digger_body","targetname"); - AssertEx( diggers.size > 0, "Unable to find entity with targetname 'digger_body'" ); - array_thread(diggers,::digger_dig_think); -} - -//Self is the digger's body entity. Function creates a series of movements for the diggers to create a digging behavior -digger_dig_think() -{ - body = self; - arm = GetEnt(self.target, "targetname"); - AssertEx(IsDefined(arm), "Unable to find arm entity for a digger at " + self.origin ); - blade_center = GetEnt(arm.target, "targetname"); - AssertEx(IsDefined(blade_center), "Unable to find blade entity for a digger at " + self.origin ); - - blade_pieces = GetEntArray("digger_blade","targetname"); - - for( i = 0; i < blade_pieces.size; i++) - { - blade_pieces[i] LinkTo(blade_center); - } - - blade_center LinkTo( arm ); - arm LinkTo( body ); - - //play idle sound on body - body playloopsound ("evt_excavator_idle", .5); - - if(IsDefined(self.script_float)) - { - set_dvar_int_if_unset("scr_dig_delay", self.script_float ); - } - else - { - //'20' is the default value for the cooldown on the digger's dig action - set_dvar_int_if_unset("scr_dig_delay", 20 ); - } - - while(1) - { - arm_move_speed = set_dvar_int_if_unset("scr_arm_move_speed", 11); - blade_spin_speed = set_dvar_int_if_unset("scr_blade_spin_speed", 80); - blade_spin_up_time = set_dvar_int_if_unset("scr_blade_spin_up_time", 3); - - body_turn = RandomIntRange(-15,15); - //Must grab the absolute value of the turn value to get proper time fraction, which is the "positive_value_func" - body_turn_speed = (positive_value_func(body_turn)) * .3; - - body RotateYaw(body_turn, body_turn_speed, body_turn_speed/4, body_turn_speed/4 ); - - // play move loop on arm, and rev one shot on body - arm playloopsound ("evt_excavator_move", .5); - body playsound ("evt_excavator_rev"); - - body waittill ("rotatedone"); - - arm Unlink(body); - arm RotatePitch(-45, arm_move_speed, arm_move_speed/4, arm_move_speed/4); - arm waittill ("rotatedone"); - - blade_center UnLink(arm); - blade_center RotatePitch(1800, blade_spin_speed, blade_spin_up_time, blade_spin_up_time); - smokeAngles = ( 0, arm.angles[1]+180, arm.angles[2] ); - - forward = anglesToForward( smokeAngles ); - - //playfx ( level.chopper_fx["explode"]["death"], self.origin, forward ); - PlayFX( level._digger_fx, ( blade_center.origin[0], blade_center.origin[1], blade_center.origin[2]-560), forward ); - //stop loop on arm - //iprintlnbold ("this is the stop I suspect"); //had to comment this out for playtest. -Leif - arm stoploopsound (1); - - // play digging loop on blade - blade_center playloopsound ("evt_excavator_blade", .5); - - blade_center waittill ("rotatedone"); - - // stop diggin loop blade - blade_center stoploopsound (.5); - - blade_center LinkTo(arm); - - arm RotatePitch(45, arm_move_speed, arm_move_speed/4, arm_move_speed/4 ); - - // play move loop on arm, and rev one shot on body - arm playloopsound ("evt_excavator_move", .5); - body playsound ("evt_excavator_rev"); - - arm waittill ("rotatedone"); - arm LinkTo( body ); - - body RotateYaw((body_turn * -1), body_turn_speed, body_turn_speed/4, body_turn_speed/4); - - body waittill ("rotatedone"); - arm stoploopsound (.5); - - wait (GetDvarFloat( #"scr_dig_delay" )); - } -} - -//Sets it up so the script can easily handle multiple moving diggers -moving_diggers_init() -{ - diggers = GetEntArray("moving_digger","targetname"); - //AssertEx( diggers.size > 0, "Unable to find entity with targetname 'moving_digger'" ); - array_thread(diggers, ::moving_diggers_think); -} - -//Sets up diggers that follow structs. Note the script_int K/V pair sets up the move time. -moving_diggers_think() -{ - digger_struct = getstruct_and_assert(self.target); - - while(1) - { - //Each struct has a script_int key value pair that determines the length of time it takes to complete the move - self MoveTo(digger_struct.origin, digger_struct.script_int); - AssertEx(IsDefined(digger_struct.script_int), "Unable to find digger struct's 'script_int' key value pair for moving digger" ); - - self waittill("movedone"); - - //Structs target other structs to determine the digger's path. - if(IsDefined(digger_struct.target)) - { - digger_struct = GetStruct(digger_struct.target,"targetname"); - } - else - { - break; - } - } -} - -//Function needed to get the absolute value of an integer and be sure its a positive number -positive_value_func(num) -{ - return(max(1, abs(num))); -} - -//Starts a thread to alter player's velocity as long as they're in the trigger -conveyer_belt_init() -{ - //Need to set dvar to determine force of momentum in trigger - set_dvar_int_if_unset( "scr_coveyer_speed", 45 ); - - conveyer_trigger = getent_and_assert("coveyer_trig"); - - //The trigger targets a script struct. The struct contains angles to determine the force direction. - trigger_struct = getstruct_and_assert(conveyer_trigger.target); - - //Find direction that my trigger is pointed toward - trigger_angles = AnglesToForward(trigger_struct.angles); - - //Create intensity of conveyer force equal to my script DVar. Store it on my trigger for a seperate function to use. - conveyer_trigger._conveyer_vector = vector_scale(trigger_angles,GetDvarInt( #"scr_coveyer_speed")); - - while(1) - { - conveyer_trigger waittill("trigger", player); - if(IsPlayer(player)) - { - conveyer_trigger thread trigger_thread(player, ::player_on_conveyer); - } - - wait .05; - } -} - -//Self is trigger. Function is ran when player jumps into the trigger. -player_on_conveyer(player, endon_string) -{ - player endon ("death"); - player endon ("disconnect"); - player endon(endon_string); - - while(1) - { - player_velocity = player GetVelocity(); - - //Don't want jumping player to be pulled by conveyer - if (player IsOnGround()) - { - //Gives player momentum in the direction of the conveyer equal to a dvar I created earlier along with their own momentum - player SetVelocity(player_velocity + self._conveyer_vector); - } - - wait .05; - } -} - -getent_and_assert(ent_name) -{ - thing = GetEnt( ent_name, "targetname"); - AssertEx(IsDefined(thing), "Unable to find targetname " + ent_name); - - return thing; -} - -getstruct_and_assert(struct_name) -{ - thing = getstruct( struct_name, "targetname"); - AssertEx(IsDefined(thing), "Unable to find struct at " +struct_name); - - return thing; -} - -dropEverythingOnDoorsToGround() -{ - level endon("edge_check"); - - // keep dropping all to ground to keep the items in physics - // if you only do it once or twice they come back to rest to fast - // if there is a problem with this solution then we are going to need - // to do something for keeping the crates in physics while in contact - // with the doors. - while(1) - { - wait(0.1); - dropAllToGround( (0,0,128), 181, 100 ); - } -} - -destroyEquipment() -{ - level endon ( "edge_check" ); - - for ( ;; ) - { - wait( 2 ); - - grenades = GetEntArray( "grenade", "classname" ); - - for ( i = 0; i < grenades.size; i++ ) - { - item = grenades[i]; - - if ( !IsDefined( item.name ) ) - { - continue; - } - - if ( !IsDefined( item.owner ) ) - { - continue; - } - - if ( !IsWeaponEquipment( item.name ) ) - { - continue; - } - - if ( !item IsTouching( level._door1 ) && !item IsTouching( level._door2 ) ) - { - continue; - } - - watcher = item.owner getWatcherForWeapon( item.name ); - - if ( !IsDefined( watcher ) ) - { - continue; - } - - watcher thread maps\mp\gametypes\_weaponobjects::waitAndDetonate( item, 0.0, undefined ); - } - } -} - -getWatcherForWeapon( weapname ) -{ - if ( !IsDefined( self ) ) - { - return undefined; - } - - if ( !IsPlayer( self ) ) - { - return undefined; - } - - for ( i = 0; i < self.weaponObjectWatcherArray.size; i++ ) - { - if ( self.weaponObjectWatcherArray[i].weapon != weapname ) - { - continue; - } - - return ( self.weaponObjectWatcherArray[i] ); - } - - return undefined; -} - - //spawns triggers to stop players from placing turrets - addNoTurretTrigger( position, radius, height ) - { - while( !IsDefined( level.noTurretPlacementTriggers ) ) - wait( 0.1 ); - - trigger = Spawn( "trigger_radius", position, 0, radius, height ); - - level.noTurretPlacementTriggers[level.noTurretPlacementTriggers.size] = trigger; - } diff --git a/mods/patch_mp/maps/mp/mp_russianbase.gsc b/mods/patch_mp/maps/mp/mp_russianbase.gsc deleted file mode 100644 index 5052fec..0000000 --- a/mods/patch_mp/maps/mp/mp_russianbase.gsc +++ /dev/null @@ -1,139 +0,0 @@ -#include maps\mp\_utility; -main() -{ - //needs to be first for create fx - maps\mp\mp_russianbase_fx::main(); - - precachemodel("collision_geo_32x32x128"); - precachemodel("collision_wall_256x256x10"); - - maps\mp\_load::main(); - - maps\mp\mp_russianbase_amb::main(); - - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_russianbase_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_russianbase"); - } - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_winterspecops::level_init(); - - // Set up the default range of the compass - setdvar("compassmaxrange","2100"); - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - - //fog - //setExpFog(200, 6000, 0.7, 0.7, 0.73, 0); - - /# - level thread devgui_russianbase(); - execdevgui( "devgui_mp_russianbase" ); - #/ - - - // spawn collision for hole in wall between E2 and E3 - spawncollision("collision_wall_256x256x10","collider",(-1731, 960, 288), (0, 270, 0)); - - - // spawn collision for the new telephone pole - spawncollision("collision_geo_32x32x128","collider",(-120, 1828, 63), (0, 0, 0)); - - //spawn a new set of windows in front of the missing ones for PS3 - - window1 = Spawn("script_model", (-2116, 0, 504) ); - if ( IsDefined(window1) ) - { - window1.angles = (0,0,0); - window1 SetModel("p_rus_window_dark01"); - } - - window2 = Spawn("script_model", (-1878, 0, 504) ); - if ( IsDefined(window2) ) - { - window2.angles = (0,0,0); - window2 SetModel("p_rus_window_dark01"); - } - - //spawn a new telephone pole - - pole1 = Spawn("script_model", (-114.081, 1821.35, -10) ); - if ( IsDefined(pole1) ) - { - pole1.angles = (0, 15.2, 0); - pole1 SetModel("p_rus_electricpole"); - } - - - - level thread runTrain(); -} - -runTrain() -{ - level endon( "game_ended" ); - precacheModel("t5_veh_train_boxcar"); - precacheModel("t5_veh_train_fuelcar"); - precacheModel("t5_veh_train_engine"); - - // if you change moveTime of numOfCarts you need to change it in client script also - moveTime = 20; - numOfCarts = 40; - originalRation = ( moveTime / 80 ); - maxWaitBetweenTrains = getDvarIntDefault( #"scr_maxWaitBetweenTrains", 200 ); - trainTime = ( moveTime + ( numOfCarts * 4 * originalRation ) ); - - - /# - russian_base_train_dev(); - #/ - for(;;) - { - waitBetweenTrains = randomint( maxWaitBetweenTrains ); - if ( waitBetweenTrains > 0 ) - wait( waitBetweenTrains ); - level clientNotify("play_train"); - wait( trainTime ); - } -} - - - -/# -russian_base_train_dev() -{ - for ( ;; ) - { - level waittill( "run_train" ); - level clientNotify("play_train"); - } -} - -devgui_russianbase( cmd ) -{ - for ( ;; ) - { - wait( 0.5 ); - - devgui_string = GetDvar( #"devgui_notify" ); - - switch( devgui_string ) - { - case "": - break; - default: - level notify( devgui_string ); - break; - } - - SetDvar( "devgui_notify", "" ); - } -} -#/ diff --git a/mods/patch_mp/maps/mp/mp_silo.gsc b/mods/patch_mp/maps/mp/mp_silo.gsc deleted file mode 100644 index b0052da..0000000 --- a/mods/patch_mp/maps/mp/mp_silo.gsc +++ /dev/null @@ -1,107 +0,0 @@ -#include maps\mp\_utility; -#include common_scripts\utility; - - -//======================================================== -// main -//======================================================== -main() -{ - //needs to be first for create fx - maps\mp\mp_silo_fx::main(); - maps\mp\createart\mp_silo_art::main(); - - precachemodel("collision_wall_256x256x10"); - - maps\mp\_load::main(); - - // maps\mp\_compass::setupMiniMap("compass_map_mp_silo"); - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_silo_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_silo"); - } - - /# - execdevgui( "devgui_mp_silo" ); - #/ - - maps\mp\mp_silo_amb::main(); - - // If the team nationalites change in this file, you must also update the level's csc file, - // the level's csv file, and the share/raw/mp/mapsTable.csv - maps\mp\gametypes\_teamset_urbanspecops::level_init(); - - // Set up the default range of the compass - setdvar( "compassmaxrange","2100" ); - - // Set up some generic War Flag Names. - // Example from COD5: CALLSIGN_SEELOW_A is the name of the 1st flag in Selow whose string is "Cottage" - // The string must have MPUI_CALLSIGN_ and _A. Replace Mapname with the name of your map/bsp and in the - // actual string enter a keyword that names the location (Roundhouse, Missle Silo, Launchpad, Guard Tower, etc) - - game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; - game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; - game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; - game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; - game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; - - game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; - game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; - game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; - game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; - game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning( true ); - - level thread crane_container(); - - //spawning collision in wager match so players can't hide in the spawned plates - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 || isPregame() ) - { - spawncollision("collision_wall_256x256x10","collider",(1527, 71, 16), (0, 337, 0)); - } - -} - - -//======================================================== -// cargo_container -//======================================================== -crane_container() -{ - crane_container = GetEnt( "crane_container", "targetname" ); - - if( !IsDefined( crane_container ) ) - { - return; - } - - crane_container thread rotate_crane_container(); -} - - -//======================================================== -// rotate_crane_container -//======================================================== -rotate_crane_container() -{ - rotate_time = 8; - rotate_angle = 30; - - self RotateYaw( rotate_angle / 2, rotate_time / 2 ); - self waittill( "rotatedone" ); - - while( true ) - { - rotate_angle = rotate_angle * -1; - - self RotateYaw( rotate_angle, rotate_time, rotate_time / 2, rotate_time / 2 ); - self waittill( "rotatedone" ); - } - -} \ No newline at end of file diff --git a/mods/patch_mp/maps/mp/mp_villa.gsc b/mods/patch_mp/maps/mp/mp_villa.gsc deleted file mode 100644 index cefdae1..0000000 --- a/mods/patch_mp/maps/mp/mp_villa.gsc +++ /dev/null @@ -1,105 +0,0 @@ -#include maps\mp\_utility; -main() -{ - //needs to be first for create fx - maps\mp\mp_villa_fx::main(); - - precachemodel("collision_geo_64x64x256"); - precachemodel("collision_geo_32x32x128"); - precachemodel("collision_geo_32x32x32"); - - maps\mp\_load::main(); - - maps\mp\mp_villa_amb::main(); - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_villa_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_villa"); - } - - // If the team nationalites change in this file, - // you must update the team nationality in the level's csc file as well! - maps\mp\gametypes\_teamset_cubans::level_init(); - - // Set up the default range of the compass - setdvar("compassmaxrange","2100"); - - // Set up some generic War Flag Names. - // Example from COD5: CALLSIGN_SEELOW_A is the name of the 1st flag in Selow whose string is "Cottage" - // The string must have MPUI_CALLSIGN_ and _A. Replace Mapname with the name of your map/bsp and in the - // actual string enter a keyword that names the location (Roundhouse, Missle Silo, Launchpad, Guard Tower, etc) - - game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; - game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; - game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; - game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; - game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; - - game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; - game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; - game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; - game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; - game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; - - // collision keeping players from poking their heads into rock - spawncollision("collision_geo_64x64x256","collider",(4790, 1863, 388), (0, 30.8, 0)); - - // collision keeping players from poking their heads into another rock near the allies spawn - spawncollision("collision_geo_32x32x128","collider",(4329, 3735, 144), (0, 0, 0)); - - // collision keeping players from poking their heads into another rock near D2. - spawncollision("collision_geo_32x32x32","collider",(2512, 3818, 113), (0, 45, 0)); - - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - - level thread startLightning(); -} - - - -startLightning() -{ - while(1) - { - self thread trigger_lightning_exploder(); - wait( 30 + randomfloat(40) ); - //wait (4); - - } -} - - - -trigger_lightning_exploder() -{ - randomExploder = randomint( 4 ); - //randomExploder = 3; - switch( randomExploder ) - { - case 0: - exploder(1001); - playsoundatposition("amb_thunder_clap",( 259.2, -801, 1197 )); - //println ("sound exploder 1"); - break; - case 1: - exploder(1002); - playsoundatposition("amb_thunder_clap",( 2523, -17012, 1174 )); - //println ("sound exploder 2"); - break; - case 2: - exploder(1003); - playsoundatposition("amb_thunder_clap",(6457, -611, 1145)); - //println ("sound exploder 3"); - break; - case 3: - exploder(1004); - playsoundatposition("amb_thunder_clap",(4981, 1335, 890)); - //println ("sound exploder 4"); - break; - } -} diff --git a/mods/patch_mp/maps/mp/mp_zoo.gsc b/mods/patch_mp/maps/mp/mp_zoo.gsc deleted file mode 100644 index 42b0428..0000000 --- a/mods/patch_mp/maps/mp/mp_zoo.gsc +++ /dev/null @@ -1,88 +0,0 @@ -#include maps\mp\_utility; -main() -{ - //needs to be first for create fx - maps\mp\mp_zoo_fx::main(); - - precachemodel("collision_wall_256x256x10"); - precachemodel("collision_geo_32x32x128"); - precachemodel("collision_geo_128x128x10"); - precachemodel("collision_geo_64x64x64"); - - maps\mp\_load::main(); - - maps\mp\mp_zoo_amb::main(); - -// maps\mp\_compass::setupMiniMap("compass_map_mp_zoo"); - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 ) - { - maps\mp\_compass::setupMiniMap("compass_map_mp_zoo_wager"); - } - else - { - maps\mp\_compass::setupMiniMap("compass_map_mp_zoo"); - } - - - // If the team nationalites change in this file, you must also update the level's csc file, - // the level's csv file, and the share/raw/mp/mapsTable.csv - maps\mp\gametypes\_teamset_urbanspecops::level_init(); - - // Set up the default range of the compass - setdvar("compassmaxrange","2100"); - - // Set up some generic War Flag Names. - // Example from COD5: CALLSIGN_SEELOW_A is the name of the 1st flag in Selow whose string is "Cottage" - // The string must have MPUI_CALLSIGN_ and _A. Replace Mapname with the name of your map/bsp and in the - // actual string enter a keyword that names the location (Roundhouse, Missle Silo, Launchpad, Guard Tower, etc) - - game["strings"]["war_callsign_a"] = &"MPUI_CALLSIGN_MAPNAME_A"; - game["strings"]["war_callsign_b"] = &"MPUI_CALLSIGN_MAPNAME_B"; - game["strings"]["war_callsign_c"] = &"MPUI_CALLSIGN_MAPNAME_C"; - game["strings"]["war_callsign_d"] = &"MPUI_CALLSIGN_MAPNAME_D"; - game["strings"]["war_callsign_e"] = &"MPUI_CALLSIGN_MAPNAME_E"; - - game["strings_menu"]["war_callsign_a"] = "@MPUI_CALLSIGN_MAPNAME_A"; - game["strings_menu"]["war_callsign_b"] = "@MPUI_CALLSIGN_MAPNAME_B"; - game["strings_menu"]["war_callsign_c"] = "@MPUI_CALLSIGN_MAPNAME_C"; - game["strings_menu"]["war_callsign_d"] = "@MPUI_CALLSIGN_MAPNAME_D"; - game["strings_menu"]["war_callsign_e"] = "@MPUI_CALLSIGN_MAPNAME_E"; - - // enable new spawning system - maps\mp\gametypes\_spawning::level_use_unified_spawning(true); - - //spawn gates to explain rogue physics collision brush - - gate1 = Spawn("script_model", (1040, 1495, 56) ); - if ( IsDefined(gate1) ) - { - gate1.angles = (0, 270, 0); - gate1 SetModel("p_zoo_bend_gate_mid"); - } - gate2 = Spawn("script_model", (1104, 1495, 56) ); - if ( IsDefined(gate2) ) - { - gate2.angles = (0, 270, 0); - gate2 SetModel("p_zoo_bend_gate_mid"); - } - - // spawn collision for bit of collision above a light in B3 - spawncollision("collision_wall_256x256x10","collider",(876, 2034, 169), (0, 90, 0)); - - // spawn collision to stop players from hiding inside the may-pole. - spawncollision("collision_geo_32x32x128","collider",(49, 832, 66), (0, 0, 0)); - spawncollision("collision_geo_32x32x128","collider",(49, 832, 194), (0, 0, 0)); - - // spawn collision to stop players from hiding inside the may-pole base. - spawncollision("collision_geo_64x64x64","collider",(47, 833, -16), (0, 0, 0)); - spawncollision("collision_geo_64x64x64","collider",(47, 833, -16), (0, 315, 0)); - - // spawn collision to stop players from standing on collision in aviary. - spawncollision("collision_geo_128x128x10","collider",(934, 205, 74), (28.2, 340.6, -38.4)); - - if ( GetDvarInt( #"xblive_wagermatch" ) == 1 || isPregame() ) - { - spawncollision("collision_wall_256x256x10","collider",(-5, 821, 72), (0, 297, 0)); - } - -} diff --git a/mods/patch_mp/mod.csv b/mods/patch_mp/mod.csv deleted file mode 100644 index ab75049..0000000 --- a/mods/patch_mp/mod.csv +++ /dev/null @@ -1,80 +0,0 @@ -rawfile,maps/mp/_dogs.gsc -rawfile,maps/mp/_utility.gsc -rawfile,maps/mp/gametypes/_globallogic_player.gsc -rawfile,maps/mp/gametypes/_globallogic_score.gsc -rawfile,maps/mp/gametypes/_spawning.gsc -rawfile,maps/mp/gametypes/ctf.gsc -rawfile,maps/mp/gametypes/dem.gsc -rawfile,maps/mp/gametypes/dom.gsc -rawfile,maps/mp/gametypes/koth.gsc -rawfile,maps/mp/gametypes/sab.gsc -rawfile,maps/mp/mp_array.gsc -rawfile,maps/mp/mp_cairo.gsc -rawfile,maps/mp/mp_cosmodrome.gsc -rawfile,maps/mp/mp_crisis.gsc -rawfile,maps/mp/mp_duga.gsc -rawfile,maps/mp/mp_firingrange.gsc -rawfile,maps/mp/mp_mountain.gsc -rawfile,maps/mp/mp_nuked.gsc -rawfile,maps/mp/mp_radiation.gsc -rawfile,maps/mp/mp_russianbase.gsc -rawfile,maps/mp/mp_villa.gsc -rawfile,maps/mp/mp_zoo.gsc -rawfile,maps/mp/mp_golfcourse.gsc -rawfile,maps/mp/mp_silo.gsc - -rawfile,clientscripts/mp/_claymore.csc - -menufile,ui_mp/patch.txt -menufile,ui_mp/custom_settings_general.menu -menufile,ui_mp/fileshare_playercard.menu -menufile,ui_mp/after_action_report.menu -menufile,ui_mp/options_multi.menu -menufile,ui_mp/scriptmenus/callvote.menu -menufile,ui_mp/scriptmenus/changeclass.menu -menufile,ui_mp/scriptmenus/class.menu -menufile,ui_mp/hud_hardcore.menu -menufile,ui_mp/players.menu -menufile,ui_mp/hud_team.menu -menufile,ui_mp/hud_ffa.menu -menufile,ui_mp/playercards_clantag.menu -menufile,ui_mp/mods.menu -menufile,ui_mp/cac_custom.menu -menufile,ui_mp/cac_popups.menu -menufile,ui_mp/cac_weapon.menu -menufile,ui_mp/combat_record.menu -menufile,ui_mp/game_mode.menu -menufile,ui_mp/main.menu -menufile,ui_mp/pc_serversettings.menu -menufile,ui_mp/serverbrowser.menu -menufile,ui_mp/custom_game_create.menu -menufile,ui_mp/pc_basictraining.menu - -rawfile,rumble/shotgun_fire_h.rmb -rawfile,rumble/shotgun_fire_l.rmb -rawfile,rumble/silencer_fire_h.rmb -rawfile,rumble/silencer_fire_l.rmb -rawfile,rumble/heavygun_fire_h.rmb -rawfile,rumble/heavygun_fire_l.rmb -rawfile,rumble/smg_fire_h.rmb -rawfile,rumble/smg_fire_l.rmb -rawfile,rumble/assault_fire_h.rmb -rawfile,rumble/assault_fire_l.rmb -rawfile,rumble/flamethrower_h.rmb -rawfile,rumble/flamethrower_l.rmb -rawfile,rumble/damage_heavy_h.rmb -rawfile,rumble/damage_heavy_l.rmb - -menufile,ui/options_graphics_pc.menu -menufile,ui/error.menu - -stringtable,mp/gametypesTable.csv -stringtable,mp/mapsTable.csv -stringtable,mp/attachmentTable.csv - -rawfile,maps/mp/gametypes/_bot.gsc -rawfile,maps/mp/bots/_bot_loadout.gsc -rawfile,maps/mp/bots/_bot_script.gsc -rawfile,maps/mp/bots/_bot_utility.gsc - -menufile,ui_mp/playercards.menu diff --git a/mods/patch_mp/mp/attachmentTable.csv b/mods/patch_mp/mp/attachmentTable.csv deleted file mode 100644 index f6a53cb..0000000 --- a/mods/patch_mp/mp/attachmentTable.csv +++ /dev/null @@ -1,104 +0,0 @@ -a0,b1,c2,d3,e4,f5,g6,h7,i8,j9,k10,l11,m12,n13,o14 -"# Weapon Attachment Data [ DO NOT CHANGE FORMAT, NAME/REFERENCE ARE TO BE UNIQUE IN THE WHOLE TABLE ]",,,,,,,,,,,,,, -# index,# attach point,# group,# name,# reference,# count,# image,# description,# data - string,# data - int ,# data - int2 (binary mask),# data - string - compatible attachments - separated by a space ,# cost of this attachment,#unlock lvl,#unlock plevel -0,none,attachment,MPUI_NO_ATTACHMENT,none,,weapon_missing_image,MPUI_NO_ATTACHMENT_DESC,,0,,,,, -1,top,attachment,MPUI_REFLEX,reflex,,menu_mp_weapons_attach_aimpoint,MPUI_REFLEX_DESC,REFLEX,1,,dualclip extclip grip rf silencer,1000,, -2,top,attachment,MPUI_ELBIT,elbit,,menu_mp_weapons_attach_elbit,MPUI_ELBIT_DESC,ELBIT,2,,dualclip extclip grip rf silencer,1000,, -3,top,attachment,MPUI_ACOG,acog,,menu_mp_weapons_attach_acog,MPUI_ACOG_DESC,ACOG,3,,dualclip extclip grip rf silencer,1000,, -4,top,attachment,MPUI_LPS,lps,,menu_mp_weapons_attach_lps,MPUI_LPS_DESC,LPS,4,,,2000,, -5,top,attachment,MPUI_VZOOM,vzoom,,menu_mp_weapons_attach_vzoom,MPUI_VZOOM_DESC,VZOOM,5,,extclip silencer,2000,, -6,top,attachment,MPUI_IR,ir,,menu_mp_weapons_attach_ir,MPUI_IR_DESC,IR,6,,dualclip extclip grip silencer,2000,, -7,bottom,attachment,MPUI_GL,gl,,menu_mp_weapons_attach_grenade_launcher,MPUI_GL_DESC,GL,7,,,3000,, -8,bottom,attachment,MPUI_MK,mk,,menu_mp_weapons_attach_masterkey,MPUI_MK_DESC,MK,8,,,1000,, -9,muzzle,attachment,MPUI_SILENCER,silencer,,menu_mp_weapons_attach_silencer,MPUI_SILENCER_DESC,SILENCER,9,,acog dualclip elbit extclip grip ir reflex rf upgradesight vzoom,2000,, -10,bottom,attachment,MPUI_GRIP,grip,,menu_mp_weapons_attach_grip,MPUI_GRIP_DESC,GRIP,10,,acog dualclip elbit extclip ir reflex rf silencer,1000,, -11,trigger,attachment,MPUI_EXTCLIP,extclip,,menu_mp_weapons_attach_extend_clip,MPUI_EXTCLIP_DESC,EXTCLIP,11,,acog elbit grip ir reflex rf silencer upgradesight vzoom,1000,, -12,trigger,attachment,MPUI_DUALCLIP,dualclip,,menu_mp_weapons_attach_dual_clip,MPUI_DUALCLIP_DESC,DUALCLIP,12,,acog elbit grip ir reflex rf silencer,1000,, -13,trigger,attachment,MPUI_SADDLE,saddle,,weapon_missing_image,MPUI_SADDLE_DESC,SADDLE,13,,,,, -14,trigger,attachment,MPUI_FMJ,fmj,,weapon_missing_image,MPUI_FMJ_DESC,FMJ,14,,,,, -15,trigger,attachment,MPUI_HP,hp,,weapon_missing_image,MPUI_HP_DESC,HP,15,,,,, -16,trigger,attachment,MPUI_RF,rf,,menu_mp_weapons_attach_rof,MPUI_RF_DESC,RF,16,,acog dualclip elbit extclip grip reflex silencer,3000,, -17,bottom,attachment,MPUI_FT,ft,,menu_mp_weapons_attach_flamethrower,MPUI_FT_DESC,FT,17,,,1000,, -18,bottom,attachment,MPUI_BAYONET,bayonet,,weapon_missing_image,MPUI_BAYONET_DESC,BAYONET,18,,,,, -19,trigger,attachment,MPUI_AUTO,auto,,menu_mp_weapons_attach_auto,MPUI_AUTO_DESC,auto,19,,,2000,, -20,trigger,attachment,MPUI_SPEED,speed,,menu_mp_weapons_attach_reload,MPUI_SPEED_DESC,speed,20,,,1000,, -21,top,attachment,MPUI_UPGRADESIGHT,upgradesight,,menu_mp_weapons_attach_upgradesight,MPUI_UPGRADESIGHT_DESC,upgradesight,21,,,250,, -22,muzzle,attachment,MPUI_SNUB,snub,,menu_mp_weapons_attach_snub,MPUI_SNUB_DESC,snub,22,,,500,, -23,bottom,attachment,MPUI_DW,dw,,weapon_missing_image,MPUI_DW_DESC,dw,23,,,1000,, -0,camo,weaponoption,MPUI_NONE,camo_none,,weapon_missing_image,MPUI_NONE,,,,,,, -1,camo,weaponoption,MPUI_CAMO_DUSTY,camo_dusty,,menu_mp_weapons_camo_dusty,MPUI_CAMO_DUSTY,,,,,250,, -2,camo,weaponoption,MPUI_CAMO_ICE,camo_ice,,menu_mp_weapons_camo_icy,MPUI_CAMO_ICE,,,,,250,, -3,camo,weaponoption,MPUI_CAMO_RED,cammo_red,,menu_mp_weapons_camo_mass,MPUI_CAMO_RED,,,,,250,, -4,camo,weaponoption,MPUI_CAMO_OLIVE,camo_od,,menu_mp_weapons_camo_olive,MPUI_CAMO_OLIVE,,,,,250,, -5,camo,weaponoption,MPUI_CAMO_NEVADA,camo_desert_nevada,,menu_mp_weapons_camo_nevada,MPUI_CAMO_NEVADA,,,,,250,, -6,camo,weaponoption,MPUI_CAMO_SAHARA,camo_desert_sahara,,menu_mp_weapons_camo_sahara,MPUI_CAMO_SAHARA,,,,,250,, -7,camo,weaponoption,MPUI_CAMO_ERDL,camo_jungle_erdl,,menu_mp_weapons_camo_erdl,MPUI_CAMO_ERDL,,,,,250,, -8,camo,weaponoption,MPUI_CAMO_TIGER,camo_jungle_tiger,,menu_mp_weapons_camo_tiger,MPUI_CAMO_TIGER,,,,,250,, -9,camo,weaponoption,MPUI_CAMO_BERLIN,camo_urban_german,,menu_mp_weapons_camo_berlin,MPUI_CAMO_BERLIN,,,,,250,, -10,camo,weaponoption,MPUI_CAMO_WARSAW,camo_urban_warsaw,,menu_mp_weapons_camo_warsaw,MPUI_CAMO_WARSAW,,,,,250,, -11,camo,weaponoption,MPUI_CAMO_SIBERIA,camo_winter_siberia,,menu_mp_weapons_camo_siberia,MPUI_CAMO_SIBERIA,,,,,250,, -12,camo,weaponoption,MPUI_CAMO_YUKON,camo_winter_yukon,,menu_mp_weapons_camo_yukon,MPUI_CAMO_YUKON,,,,,250,, -13,camo,weaponoption,MPUI_CAMO_WOODLAND,camo_woodland,,menu_mp_weapons_camo_wood,MPUI_CAMO_WOODLAND,,,,,250,, -14,camo,weaponoption,MPUI_CAMO_FLORA,camo_woodland_flora,,menu_mp_weapons_camo_flora,MPUI_CAMO_FLORA,,,,,250,, -15,camo,weaponoption,MPUI_CAMO_GOLD,camo_gold,,menu_mp_weapons_camo_gold,MPUI_CAMO_GOLD,,,,,50000,,14 -16,lens,weaponoption,MPUI_LENS_DEFAULT,,,,,,,,,,, -17,lens,weaponoption,MPUI_LENS_RED,,,,,,,,,500,, -18,lens,weaponoption,MPUI_LENS_BLUE,,,,,,,,,500,, -19,lens,weaponoption,MPUI_LENS_GREEN,,,,,,,,,500,, -20,lens,weaponoption,MPUI_LENS_ORANGE,,,,,,,,,500,, -21,lens,weaponoption,MPUI_LENS_YELLOW,,,,,,,,,500,, -22,reticle,weaponoption,MPUI_RETICLE_DEFAULT,,,menu_mp_reticle_red_dot_main,,,,,,,, -23,reticle,weaponoption,MPUI_RETICLE_1,,,menu_mp_reticle_circle_split01,,,,,,500,, -24,reticle,weaponoption,MPUI_RETICLE_2,,,menu_mp_reticle_lines_dots01,,,,,,500,, -25,reticle,weaponoption,MPUI_RETICLE_3,,,menu_mp_reticle_circles05,,,,,,500,, -26,reticle,weaponoption,MPUI_RETICLE_4,,,menu_mp_reticle_happyface01,,,,,,500,, -27,reticle,weaponoption,MPUI_RETICLE_ARROWS02,,,menu_mp_reticle_arrows02,,,,,,500,, -28,reticle,weaponoption,MPUI_RETICLE_ARROWS01,,,menu_mp_reticle_arrows01,,,,,,500,, -29,reticle,weaponoption,MPUI_RETICLE_ARROWS03,,,menu_mp_reticle_arrows03,,,,,,500,, -30,reticle,weaponoption,MPUI_RETICLE_BONES,,,menu_mp_reticle_bones,,,,,,500,, -31,reticle,weaponoption,MPUI_RETICLE_BURST01,,,menu_mp_reticle_burst01,,,,,,500,, -32,reticle,weaponoption,MPUI_RETICLE_CIRCLES01,,,menu_mp_reticle_circles01,,,,,,500,, -33,reticle,weaponoption,MPUI_RETICLE_CIRCLES02,,,menu_mp_reticle_circles02,,,,,,500,, -34,reticle,weaponoption,MPUI_RETICLE_CIRCLES03,,,menu_mp_reticle_circles03,,,,,,500,, -35,reticle,weaponoption,MPUI_RETICLE_CIRCLES04,,,menu_mp_reticle_circles04,,,,,,500,, -36,reticle,weaponoption,MPUI_RETICLE_CIRCLES_LINES01,,,menu_mp_reticle_circles_lines01,,,,,,500,, -37,reticle,weaponoption,MPUI_RETICLE_CIRCLES_LINES02,,,menu_mp_reticle_circles_lines02,,,,,,500,, -38,reticle,weaponoption,MPUI_RETICLE_CIRCLES_LINES03,,,menu_mp_reticle_circles_lines03,,,,,,500,, -39,reticle,weaponoption,MPUI_RETICLE_CIRCLES_TRIANGLES01,,,menu_mp_reticle_circles_triangles01,,,,,,500,, -40,reticle,weaponoption,MPUI_RETICLE_CIRCLES_TRIANGLES02,,,menu_mp_reticle_circles_triangles02,,,,,,500,, -41,reticle,weaponoption,MPUI_RETICLE_CROSS01,,,menu_mp_reticle_cross01,,,,,,500,, -42,reticle,weaponoption,MPUI_RETICLE_CROSS02,,,menu_mp_reticle_cross02,,,,,,500,, -43,reticle,weaponoption,MPUI_RETICLE_CROSS03,,,menu_mp_reticle_cross03,,,,,,500,, -44,reticle,weaponoption,MPUI_RETICLE_CROSS04,,,menu_mp_reticle_cross04,,,,,,500,, -45,reticle,weaponoption,MPUI_RETICLE_CROSS05,,,menu_mp_reticle_cross05,,,,,,500,, -46,reticle,weaponoption,MPUI_RETICLE_DIAMOND01,,,menu_mp_reticle_diamond01,,,,,,500,, -47,reticle,weaponoption,MPUI_RETICLE_DIAMOND02,,,menu_mp_reticle_diamond02,,,,,,500,, -48,reticle,weaponoption,MPUI_RETICLE_HEART,,,menu_mp_reticle_heart,,,,,,500,, -49,reticle,weaponoption,MPUI_RETICLE_RADIATION,,,menu_mp_reticle_radiation,,,,,,500,, -50,reticle,weaponoption,MPUI_RETICLE_SKULL01,,,menu_mp_reticle_skull01,,,,,,500,, -51,reticle,weaponoption,MPUI_RETICLE_SQUARE01,,,menu_mp_reticle_square01,,,,,,500,, -52,reticle,weaponoption,MPUI_RETICLE_SQUARE02,,,menu_mp_reticle_square02,,,,,,500,, -53,reticle,weaponoption,MPUI_RETICLE_SQUARES_CROSS,,,menu_mp_reticle_squares_cross01,,,,,,500,, -54,reticle,weaponoption,MPUI_RETICLE_STAR01,,,menu_mp_reticle_star01,,,,,,500,, -55,reticle,weaponoption,MPUI_RETICLE_THREEDOTS01,,,menu_mp_reticle_three_dots,,,,,,500,, -56,reticle,weaponoption,MPUI_RETICLE_TREYARCH,,,menu_mp_reticle_treyarch,,,,,,500,, -57,reticle,weaponoption,MPUI_RETICLE_TRIANGLE01,,,menu_mp_reticle_triangle01,,,,,,500,, -58,reticle,weaponoption,MPUI_RETICLE_TRIANGLE02,,,menu_mp_reticle_triangle02,,,,,,500,, -59,reticle,weaponoption,MPUI_RETICLE_X01,,,menu_mp_reticle_x01,,,,,,500,, -60,reticle,weaponoption,MPUI_RETICLE_X02,,,menu_mp_reticle_x02,,,,,,500,, -61,reticle,weaponoption,MPUI_RETICLE_YINGYANG,,,menu_mp_reticle_yinyang,,,,,,500,, -62,tag,weaponoption,FEATURE_GUN_TAG,tag,,,,,,,,1000,, -63,emblem,weaponoption,FEATURE_GUN_EMBLEM,emblem,,,,,,,,1000,, -64,tag,weaponoption,FEATURE_SECOND_ATTACHMENT,2ndattach,,,,,,,,3000,, -65,reticle_color,weaponoption,MPUI_RETICLE_COLOR_1,,,,,,,,,,, -66,reticle_color,weaponoption,MPUI_RETICLE_COLOR_2,,,,,,,,,250,, -67,reticle_color,weaponoption,MPUI_RETICLE_COLOR_3,,,,,,,,,250,, -68,reticle_color,weaponoption,MPUI_RETICLE_COLOR_4,,,,,,,,,250,, -69,reticle_color,weaponoption,MPUI_RETICLE_COLOR_5,,,,,,,,,250,, -70,reticle_color,weaponoption,MPUI_RETICLE_COLOR_6,,,,,,,,,250,, -71,reticle_color,weaponoption,MPUI_RETICLE_COLOR_7,,,,,,,,,250,, -0,none,point,MPUI_NONE,none,,weapon_missing_image,MPUI_NO_ATTACHMENT_DESC,,,,,,, -1,none,point,MENU_ATTACH_POINT_TOP,top,,,MENU_ATTACH_POINT_TOP_DESC,,,,,,, -2,none,point,MENU_ATTACH_POINT_BOTTOM,bottom,,,MENU_ATTACH_POINT_BOTTOM_DESC,,,,,,, -3,none,point,MENU_ATTACH_POINT_TRIGGER,trigger,,,MENU_ATTACH_POINT_TRIGGER_DESC,,,,,,, -4,none,point,MENU_ATTACH_POINT_MUZZLE,muzzle,,,MENU_ATTACH_POINT_MUZZLE_DESC,,,,,,, diff --git a/mods/patch_mp/mp/gametypesTable.csv b/mods/patch_mp/mp/gametypesTable.csv deleted file mode 100644 index bae1af6..0000000 --- a/mods/patch_mp/mp/gametypesTable.csv +++ /dev/null @@ -1,63 +0,0 @@ -#Gametypes Table,,,,,, -a0,b1,c2,d3,e4,f5,g6 -maxnum_gametype,12,,,,, -total_filesharegametype,12,,,,, -#gametype reference,#gametype names,#gametype description,#image,#index,#splitscreen,#gametime names lowercase -tdm,MPUI_TEAM_DEATHMATCH_CAPS,MENU_KILL_PLAYERS_ON_THE_OPPOSING,playlist_tdm,0,YES,MPUI_TEAM_DEATHMATCH -dm,MPUI_DEATHMATCH_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_ffa,1,YES,MPUI_DEATHMATCH -sd,MPUI_SEARCH_AND_DESTROY_CAPS,MENU_TEAMS_TAKE_TURNS_DEFENDING_NO_SPAWN,playlist_search_destroy,2,YES,MPUI_SEARCH_AND_DESTROY_CLASSIC -dom,MPUI_DOMINATION_CAPS,MENU_CAPTURE_AND_HOLD_THE,playlist_domination,3,YES,MPUI_DOMINATION -koth,MPUI_HEADQUARTERS_CAPS,MENU_CAPTURE_THE_HEADQUARTERS,playlist_headquarters,4,YES,MPUI_HEADQUARTERS -dem,MPUI_DEMOLITION_CAPS,MENU_TEAMS_TAKE_TURNS_DEFENDING,playlist_demolition,5,YES,MPUI_DEMOLITION -ctf,MPUI_CAPTURE_THE_FLAG_CAPS,MENU_CTF_DESC,playlist_ctf,6,YES,MPUI_CAPTURE_THE_FLAG -sab,MPUI_SABOTAGE_CAPS,MENU_1_BOMB_IN_THE_CENTER,playlist_sabotage,7,YES,MPUI_SABOTAGE -hlnd,MPUI_HLND_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_ffa,8,YES,MPUI_HLND -oic,MPUI_OIC_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_ffa,9,YES,MPUI_OIC -gun,MPUI_GUN_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_gungame,10,YES,MPUI_GUN -shrp,MPUI_SHRP_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_sharpshooter,11,YES,MPUI_SHRP -,,,,,, -maxnum_basictraining_gametype,14,,,,, -#gametype reference,#gametype names,#gametype description,#image,#index,#splitscreen,#gametime names lowercase -tdm,MPUI_TEAM_DEATHMATCH_CAPS,MENU_KILL_PLAYERS_ON_THE_OPPOSING,playlist_tdm,bt0,YES,MPUI_TEAM_DEATHMATCH -hc_tdm,MPUI_TDM_HARDCORE_CAPS,MENU_HC_KILL_PLAYERS_ON_THE_OPPOSING,playlist_tdm,bt1,YES,MPUI_TEAM_DEATHMATCH -dm,MPUI_DEATHMATCH_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_ffa,bt2,YES,MPUI_DEATHMATCH -hc_dm,MPUI_DM_HARDCORE_CAPS,MENU_HC_KILL_EVERYONE_FIRST_PLAYER,playlist_ffa,bt3,YES,MPUI_DEATHMATCH -sd,MPUI_SEARCH_AND_DESTROY_CAPS,MENU_TEAMS_TAKE_TURNS_DEFENDING_NO_SPAWN,playlist_search_destroy,bt4,YES,MPUI_SEARCH_AND_DESTROY_CLASSIC -dom,MPUI_DOMINATION_CAPS,MENU_CAPTURE_AND_HOLD_THE,playlist_domination,bt5,YES,MPUI_DOMINATION -koth,MPUI_HEADQUARTERS_CAPS,MENU_CAPTURE_THE_HEADQUARTERS,playlist_headquarters,bt6,YES,MPUI_HEADQUARTERS -dem,MPUI_DEMOLITION_CAPS,MENU_TEAMS_TAKE_TURNS_DEFENDING,playlist_demolition,bt7,YES,MPUI_DEMOLITION -ctf,MPUI_CAPTURE_THE_FLAG_CAPS,MENU_CTF_DESC,playlist_ctf,bt8,YES,MPUI_CAPTURE_THE_FLAG -sab,MPUI_SABOTAGE_CAPS,MENU_1_BOMB_IN_THE_CENTER,playlist_sabotage,bt9,YES,MPUI_SABOTAGE -hlnd,MPUI_HLND_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_ffa,bt10,YES,MPUI_HLND -oic,MPUI_OIC_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_ffa,bt11,YES,MPUI_OIC -gun,MPUI_GUN_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_gungame,bt12,YES,MPUI_GUN -shrp,MPUI_SHRP_CAPS,MENU_KILL_EVERYONE_FIRST_PLAYER,playlist_sharpshooter,bt13,YES,MPUI_SHRP -,,,,,, -maxnum_lbtype,11,,,,, -#Leaderboard string names,,,,,, -#num,#lb_type ref,#lb gametype names,#gametype names,,#lb index, -0,tdm,MPUI_LB_TEAM_DEATHMATCH_CAPS,MPUI_TEAM_DEATHMATCH_CAPS,,0, -1,dm,MPUI_LB_FFA_CAPS,MPUI_DEATHMATCH_CAPS,,1, -2,sd,MPUI_LB_SEARCH_AND_DESTROY_CAPS,MPUI_SEARCH_AND_DESTROY_CAPS,,5, -3,dom,MPUI_LB_DOMINATION_CAPS,MPUI_DOMINATION_CAPS,,3, -4,koth,MPUI_LB_HEADQUARTERS_CAPS,MPUI_HEADQUARTERS_CAPS,,6, -5,dem,MPUI_LB_DEMOLITION_CAPS,MPUI_DEMOLITION_CAPS,,7, -6,ctf,MPUI_LB_CAPTURE_THE_FLAG_CAPS,MPUI_CAPTURE_THE_FLAG_CAPS,,2, -7,sab,MPUI_LB_SABOTAGE_CAPS,MPUI_SABOTAGE_CAPS,,4, -8,hctdm,MPUI_LB_TEAM_DEATHMATCH_HC_CAPS,MPUI_HCTDM_CAPS,,8, -9,hcdm,MPUI_LB_FFA_HC_CAPS,MPUI_HCDM_CAPS,,9, -10,hcsd,MPUI_LB_SEARCH_AND_DESTROY_HC_CAPS,MPUI_HCSD_CAPS,,13, -,,,,,, -,,,,,, -#Leaderboard reset period names,,,,,, -#lb_typeByResetPeriod ref,#resetperiod names,#index,,,, -all_time,MPUI_LB_ALL_TIME_CAPS,0,,,, -monthly,MPUI_LB_MONTHLY_CAPS,1,,,, -weekly,MPUI_LB_WEEKLY_CAPS,2,,,, -,,,,,, -,,,,,, -#Leaderboard filter names,,,,,, -#lb_filter ref,#filter names,#index,,,, -none,MPUI_LB_EVERYONE_CAPS,0,,,, -friends,MPUI_LB_FRIENDS_ONLY_CAPS,1,,,, -lobbymembers,MPUI_LB_PLAYERS_IN_LOBBY_CAPS,2,,,, diff --git a/mods/patch_mp/mp/mapsTable.csv b/mods/patch_mp/mp/mapsTable.csv deleted file mode 100644 index 74c8b55..0000000 --- a/mods/patch_mp/mp/mapsTable.csv +++ /dev/null @@ -1,31 +0,0 @@ -# Map Data Table,,,,,,,,,,,,,,, -a0,b1,c2,d3,e4,f5,g6,h7,i8,j9,k10,,,,, -maxnum_map,26,,,,,,,,,,,,,, -#mapname,#allies characters,#axis characters,#mapname,#mapimage,#index,#description,#mapoverlay,#map size description,#vehicles,#splitscreen,#dlc map,,,, -,,,,,,,,,,,,,,, -mp_array,winterspecops,winterspecops,MPUI_array,menu_mp_array_map_select_final,0,MPUI_DESC_MAP_array,compass_overlay_map_array,LARGE,NO,YES,0,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_cracked,junglemarines,junglemarines,MPUI_CRACKED,menu_mp_cracked_map_select_final,1,MPUI_DESC_MAP_CRACKED,compass_overlay_map_cracked,LARGE,NO,YES,0,MPUI_MARINE_SHORT,MPUI_NVA_SHORT,sog,nva -mp_crisis,cubans,cubans,MPUI_CRISIS,menu_mp_crisis_map_select_final,2,MPUI_DESC_MAP_CRISIS,compass_overlay_map_crisis,MEDIUM,NO,YES,0,MPUI_REBELS_SHORT,MPUI_TROPAS_SHORT,op40,tropas -mp_firingrange,cubans,cubans,MPUI_firingrange,menu_mp_firingrange_map_select_final,3,MPUI_DESC_MAP_firingrange,compass_overlay_map_firingrange,SMALL,NO,YES,0,MPUI_REBELS_SHORT,MPUI_TROPAS_SHORT,op40,tropas -mp_duga,winterspecops,winterspecops,MPUI_DUGA,menu_mp_duga_map_select_final,4,MPUI_DESC_MAP_DUGA,compass_overlay_map_duga,MEDIUM,NO,YES,0,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_hanoi,junglemarines,junglemarines,MPUI_HANOI,menu_mp_hanoi_map_select_final,5,MPUI_DESC_MAP_HANOI,compass_overlay_map_hanoi,MEDIUM,NO,YES,0,MPUI_MARINE_SHORT,MPUI_NVA_SHORT,sog,nva -mp_cairo,cubans,cubans,MPUI_CAIRO,menu_mp_cairo_map_select_final,6,MPUI_DESC_MAP_CAIRO,compass_overlay_map_cairo,MEDIUM,NO,YES,0,MPUI_REBELS_SHORT,MPUI_TROPAS_SHORT,op40,tropas -mp_havoc,junglemarines,junglemarines,MPUI_HAVOC,menu_mp_havoc_map_select_final,7,MPUI_DESC_MAP_HAVOC,compass_overlay_map_havoc,LARGE,NO,YES,0,MPUI_MARINE_SHORT,MPUI_NVA_SHORT,sog,nva -mp_cosmodrome,urbanspecops,urbanspecops,MPUI_COSMODROME,menu_mp_cosmodrome_map_select_final,8,MPUI_DESC_MAP_COSMODROME,compass_overlay_map_cosmodrome,MEDIUM,NO,YES,0,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_nuked,urbanspecops,urbanspecops,MPUI_NUKED,menu_mp_nuked_map_select_final,9,MPUI_DESC_MAP_NUKED,compass_overlay_map_nuked,SMALL,NO,YES,0,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_radiation,urbanspecops,urbanspecops,MPUI_RADIATION,menu_mp_radiation_map_select_final,10,MPUI_DESC_MAP_RADIATION,compass_overlay_map_radiation,MEDIUM,NO,YES,0,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_mountain,winterspecops,winterspecops,MPUI_MOUNTAIN,menu_mp_mountain_map_select_final,11,MPUI_DESC_MAP_MOUNTAIN,compass_overlay_map_mountain,MEDIUM,NO,YES,0,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_villa,cubans,cubans,MPUI_villa,menu_mp_villa_map_select_final,12,MPUI_DESC_MAP_villa,compass_overlay_map_villa,MEDIUM,NO,YES,0,MPUI_REBELS_SHORT,MPUI_TROPAS_SHORT,op40,tropas -mp_russianbase,winterspecops,winterspecops,MPUI_russianbase,menu_mp_russianbase_map_select_final,13,MPUI_DESC_MAP_russianbase,compass_overlay_map_russianbase,LARGE,NO,YES,0,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_berlinwall2,urbanspecops,urbanspecops,MPUI_BERLINWALL2,menu_mp_berlinwall2_map_select_final,14,MPUI_DESC_MAP_BERLINWALL2,compass_overlay_map_berlinwall2,MEDIUM,NO,YES,2,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_discovery,winterspecops,winterspecops,MPUI_DISCOVERY,menu_mp_discovery_map_select_final,15,MPUI_DESC_MAP_DISCOVERY,compass_overlay_map_discovery2,MEDIUM,NO,YES,2,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_kowloon,urbanspecops,urbanspecops,MPUI_KOWLOON,menu_mp_kowloon_map_select_final,16,MPUI_DESC_MAP_KOWLOON,compass_overlay_map_kowloon,MEDIUM,NO,YES,2,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_stadium,urbanspecops,urbanspecops,MPUI_STADIUM,menu_mp_stadium_map_select_final,17,MPUI_DESC_MAP_STADIUM,compass_overlay_map_stadium,MEDIUM,NO,YES,2,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_gridlock,urbanspecops,urbanspecops,MPUI_GRIDLOCK,menu_mp_gridlock_map_select_final,18,MPUI_DESC_MAP_GRIDLOCK,compass_overlay_map_convoy,MEDIUM,NO,YES,3,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_hotel,cubans,cubans,MPUI_HOTEL,menu_mp_hotel_map_select_final,19,MPUI_DESC_MAP_HOTEL,compass_overlay_map_hotel2,MEDIUM,NO,YES,3,MPUI_REBELS_SHORT,MPUI_TROPAS_SHORT,op40,tropas -mp_outskirts,winterspecops,winterspecops,MPUI_OUTSKIRTS,menu_mp_outskirts_map_select_final,20,MPUI_DESC_MAP_OUTSKIRTS,compass_overlay_map_stockpile,MEDIUM,NO,YES,3,MPUI_MARINE_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_zoo,urbanspecops,urbanspecops,MPUI_ZOO,menu_mp_zoo_map_select_final,21,MPUI_DESC_MAP_ZOO,compass_overlay_map_zoo,MEDIUM,NO,YES,3,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_silo,urbanspecops,urbanspecops,MPUI_SILO,menu_mp_silo_map_select_final,22,MPUI_DESC_MAP_SILO,compass_overlay_map_silo,MEDIUM,NO,YES,4,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_golfcourse,cubans,cubans,MPUI_GOLFCOURSE,menu_mp_golfcourse_map_select_final,23,MPUI_DESC_MAP_GOLFCOURSE,compass_overlay_map_golfcourse,MEDIUM,NO,YES,4,MPUI_REBELS_SHORT,MPUI_TROPAS_SHORT,op40,tropas -mp_drivein,urbanspecops,urbanspecops,MPUI_DRIVEIN,menu_mp_drivein_map_select_final,24,MPUI_DESC_MAP_DRIVEIN,compass_overlay_map_drivein,MEDIUM,NO,YES,4,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets -mp_area51,urbanspecops,urbanspecops,MPUI_AREA51,menu_mp_area51_map_select_final,25,MPUI_DESC_MAP_AREA51,compass_overlay_map_area51,MEDIUM,NO,YES,4,MPUI_SPECOPS_SHORT,MPUI_RUSSIAN_SHORT,ops,spets diff --git a/mods/patch_mp/rumble/assault_fire_h.rmb b/mods/patch_mp/rumble/assault_fire_h.rmb deleted file mode 100644 index 149c63a..0000000 --- a/mods/patch_mp/rumble/assault_fire_h.rmb +++ /dev/null @@ -1,10 +0,0 @@ -RUMBLEGRAPHFILE - -7 -0.0000 0.5259 -0.1303 0.4762 -0.2821 0.3148 -0.4742 0.1540 -0.6613 0.0590 -0.8340 0.0150 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/assault_fire_l.rmb b/mods/patch_mp/rumble/assault_fire_l.rmb deleted file mode 100644 index 678ba4f..0000000 --- a/mods/patch_mp/rumble/assault_fire_l.rmb +++ /dev/null @@ -1,7 +0,0 @@ -RUMBLEGRAPHFILE - -4 -0.0000 1.0000 -0.3991 1.0000 -0.4041 0.0000 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/damage_heavy_h.rmb b/mods/patch_mp/rumble/damage_heavy_h.rmb deleted file mode 100644 index ee2bed0..0000000 --- a/mods/patch_mp/rumble/damage_heavy_h.rmb +++ /dev/null @@ -1,6 +0,0 @@ -RUMBLEGRAPHFILE - -3 -0.0000 0.5000 -0.1050 0.3000 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/damage_heavy_l.rmb b/mods/patch_mp/rumble/damage_heavy_l.rmb deleted file mode 100644 index d4b6b80..0000000 --- a/mods/patch_mp/rumble/damage_heavy_l.rmb +++ /dev/null @@ -1,7 +0,0 @@ -RUMBLEGRAPHFILE - -4 -0.0000 1.0000 -0.1250 1.0000 -0.4300 0.0000 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/flamethrower_h.rmb b/mods/patch_mp/rumble/flamethrower_h.rmb deleted file mode 100644 index b681b7f..0000000 --- a/mods/patch_mp/rumble/flamethrower_h.rmb +++ /dev/null @@ -1,5 +0,0 @@ -RUMBLEGRAPHFILE - -2 -0.0000 0.2399 -1.0000 0.2397 diff --git a/mods/patch_mp/rumble/flamethrower_l.rmb b/mods/patch_mp/rumble/flamethrower_l.rmb deleted file mode 100644 index 87ab6ce..0000000 --- a/mods/patch_mp/rumble/flamethrower_l.rmb +++ /dev/null @@ -1,5 +0,0 @@ -RUMBLEGRAPHFILE - -2 -0.0000 0.0000 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/heavygun_fire_h.rmb b/mods/patch_mp/rumble/heavygun_fire_h.rmb deleted file mode 100644 index 8117833..0000000 --- a/mods/patch_mp/rumble/heavygun_fire_h.rmb +++ /dev/null @@ -1,10 +0,0 @@ -RUMBLEGRAPHFILE - -7 -0.0000 0.4109 -0.1192 0.3717 -0.2806 0.2431 -0.4579 0.1533 -0.6595 0.0449 -0.8328 0.0152 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/heavygun_fire_l.rmb b/mods/patch_mp/rumble/heavygun_fire_l.rmb deleted file mode 100644 index 608d6d9..0000000 --- a/mods/patch_mp/rumble/heavygun_fire_l.rmb +++ /dev/null @@ -1,7 +0,0 @@ -RUMBLEGRAPHFILE - -4 -0.0000 1.0000 -0.3200 1.0000 -0.3250 0.0000 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/shotgun_fire_h.rmb b/mods/patch_mp/rumble/shotgun_fire_h.rmb deleted file mode 100644 index 9ab95bd..0000000 --- a/mods/patch_mp/rumble/shotgun_fire_h.rmb +++ /dev/null @@ -1,7 +0,0 @@ -RUMBLEGRAPHFILE - -4 -0.0000 0.1641 -0.2265 0.1314 -0.6077 0.0270 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/shotgun_fire_l.rmb b/mods/patch_mp/rumble/shotgun_fire_l.rmb deleted file mode 100644 index 5aaa46b..0000000 --- a/mods/patch_mp/rumble/shotgun_fire_l.rmb +++ /dev/null @@ -1,7 +0,0 @@ -RUMBLEGRAPHFILE - -4 -0.0000 1.0000 -0.3851 1.0000 -0.5701 0.1200 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/silencer_fire_h.rmb b/mods/patch_mp/rumble/silencer_fire_h.rmb deleted file mode 100644 index c070a4a..0000000 --- a/mods/patch_mp/rumble/silencer_fire_h.rmb +++ /dev/null @@ -1,8 +0,0 @@ -RUMBLEGRAPHFILE - -5 -0.0000 0.5405 -0.2518 0.4860 -0.4920 0.1496 -0.7479 0.0328 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/silencer_fire_l.rmb b/mods/patch_mp/rumble/silencer_fire_l.rmb deleted file mode 100644 index db328d4..0000000 --- a/mods/patch_mp/rumble/silencer_fire_l.rmb +++ /dev/null @@ -1,7 +0,0 @@ -RUMBLEGRAPHFILE - -4 -0.0000 0.4000 -0.1196 0.3470 -0.1565 0.0058 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/smg_fire_h.rmb b/mods/patch_mp/rumble/smg_fire_h.rmb deleted file mode 100644 index 6a1764b..0000000 --- a/mods/patch_mp/rumble/smg_fire_h.rmb +++ /dev/null @@ -1,8 +0,0 @@ -RUMBLEGRAPHFILE - -5 -0.0000 0.4800 -0.2300 0.3600 -0.5460 0.0999 -0.8061 0.0064 -1.0000 0.0000 diff --git a/mods/patch_mp/rumble/smg_fire_l.rmb b/mods/patch_mp/rumble/smg_fire_l.rmb deleted file mode 100644 index 9f630d4..0000000 --- a/mods/patch_mp/rumble/smg_fire_l.rmb +++ /dev/null @@ -1,7 +0,0 @@ -RUMBLEGRAPHFILE - -4 -0.0000 0.4830 -0.1365 0.4703 -0.1447 0.0000 -1.0000 0.0000 diff --git a/mods/patch_mp/ui/error.menu b/mods/patch_mp/ui/error.menu deleted file mode 100644 index 460d5d6..0000000 --- a/mods/patch_mp/ui/error.menu +++ /dev/null @@ -1,907 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" - -#define CHOICE_X_START 0 -#define CHOICE_Y_START 34 - -#define CHOICE_GROUP "errors" - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" - -#include "ui_mp/popupstyle.inc" -#include "ui/choices_setup_popmenu.menu" - -#undef CHOICE_FOCUS_SOUND -#define CHOICE_FOCUS_SOUND "uin_navigation_over" - -#define OPEN_WAGER_FAIL_IF_NEEDED \ - if ( getDStat( "AfterActionReportStats", "wagerMatchFailed" ) == 1 ) \ - { \ - open error_wagerfail; \ - } - -#define ERROR_ONESC \ - uiScript clearError; \ - close self; \ - OPEN_WAGER_FAIL_IF_NEEDED \ - execNow if( !menuisopen( main ) ) openmenu main; - -#define ERROR_ACTION \ - play CHOICE_FOCUS_SOUND; \ - uiScript clearError; \ - ERROR_ONESC - -#define ERROR_CONTINUE \ - play CHOICE_FOCUS_SOUND; \ - uiScript clearError; \ - close self; \ - uiScript loadSaveGameMap; - - -{ - menuDef - { - name fullscreen_error - fullscreen 1 - rect 0 0 640 480 // Size and position of the menu - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( error_popmenu, setfocus error_popmenu_2, ERROR_ONESC, 1 ) - - onOpen - { - if( IN_MP_FRONTEND ) - { - activateBlur; - } - - if( dvarString("com_errorMessage") != "" ) - { - execnow setLocalVarString error_popmenuTitle (dvarString("com_errorTitle")); - execnow setLocalVarString error_popmenuMessage (dvarString("com_errorMessage")); - } - - if( IN_MP_FRONTEND ) - { - uiScript clearError; - } - } - - SYSTEM_POPUP_TITLE_VIS( localVarString( error_popmenuTitle ), 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( localVarString( error_popmenuMessage ), 1 ) - - //FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_CONTINUE", ERROR_CONTINUE, ( dvarString( "error_menu_info" ) == "MENU_SCRIPTS_OUT_OF_DATE" ), ; ) - //FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_EXIT", ERROR_ACTION, 1, name error_popmenu_2 ) - - SIMPLE_CHOICE_BUTTON_SOUND_VIS_EX( 0 (SYSTEM_POPUP_HEIGHT+4) 70 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - ;, - "@MENU_CONTINUE", ITEM_ALIGN_MIDDLE_CENTER, ERROR_CONTINUE, when( dvarString( "error_menu_info" ) == "MENU_SCRIPTS_OUT_OF_DATE" ), ; ) - SIMPLE_CHOICE_BUTTON_SOUND_VIS_EX( 0 (SYSTEM_POPUP_HEIGHT+4) 70 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp rect X( SYSTEM_POPUP_WIDTH - getTextWidth( locString( "@MENU_EXIT" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) - 8 ), - "@MENU_EXIT", ITEM_ALIGN_MIDDLE_CENTER, ERROR_ACTION, 1, name error_popmenu_2; ) - } - -#define SYSTEM_ERROR_POPUP( popupname ) \ - menuDef \ - { \ - SYSTEM_POPUP_SETUP_VIS( popupname, ;, focusFirst; uiScript clearError; close self;, 1 ) \ - onOpen \ - { \ - if( IN_MP_FRONTEND ) \ - { \ - activateBlur; \ - } \ - execnow setLocalVarString (popupname + "Title") (dvarString("com_errorTitle")); \ - execnow setLocalVarString (popupname + "Message") (dvarString("com_errorMessage")); \ - } \ - \ - SYSTEM_POPUP_TITLE_VIS( localVarString( (popupname + "Title") ), 1 ) \ - SYSTEM_POPUP_SUBTITLE_VIS( localVarString( (popupname + "Message") ), 1 ) \ - \ - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", uiScript clearError; close self; OPEN_WAGER_FAIL_IF_NEEDED, 1, ; ) \ - } - - menuDef - { - #define WAGERFAIL_ONFOCUS \ - execnow statwriteddl AfterActionReportStats wagerMatchFailed 0; - - #define WAGERFAIL_ONESC \ - close self; - - #define WAGERFAIL_ACTION \ - play CHOICE_FOCUS_SOUND; \ - WAGERFAIL_ONESC - - SYSTEM_POPUP_SETUP_VIS( error_wagerfail, WAGERFAIL_ONFOCUS, WAGERFAIL_ONESC, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_WAGER_FAIL_TITLE", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_WAGER_FAIL_DESC", 1 ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_EXIT", WAGERFAIL_ACTION, 1, ; ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( autojoinfriend_popmenu, setfocus autojoinfriend_popmenu_2, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( dvarString( "com_errorMessage" ), 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_AUTOJOIN_FRIEND", 1 ) - - #define FRIEND_AUTO_JOIN_ON \ - exec "party_autojoindevfriend 1"; \ - close autojoinfriend_popmenu; \ - setdvar com_errorMessage ""; \ - setdvar com_errorTitle ""; - - #define FRIEND_AUTO_JOIN_OFF \ - exec "party_autojoindevfriend 0"; \ - close autojoinfriend_popmenu; \ - setdvar com_errorMessage ""; \ - setdvar com_errorTitle ""; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_YES_CAPS", FRIEND_AUTO_JOIN_ON, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_NO_CAPS", FRIEND_AUTO_JOIN_OFF, 1, name autojoinfriend_popmenu_2 ) - } - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 1 - menuDef - { - SYSTEM_POPUP_SETUP_VIS( consolestatsalert_popmenu, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@EXE_CONSOLE_STATS_CHECK_ALERT_TITLE", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@EXE_CONSOLE_STATS_CHECK_ALERT_MESSAGE", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_OK", close consolestatsalert_popmenu;, 1, ; ) - } - -#ifdef PS3 - // PS3 controller removed warning - menuDef - { - SYSTEM_POPUP_SETUP_VIS( controllerremoved_popmenu, ;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( locString("@PLATFORM_CONTROLLER_DISCONNECTED") + (dvarString( "disconnected_ctrls" )), 1 ) - itemDef - { - type ITEM_TYPE_BUTTON_NO_TEXT - rect 0 0 0 0 0 0 - visible 1 - } - } - // I know, not an error, handy here - // profile lookup dialog - menuDef - { - SYSTEM_POPUP_SETUP_VIS( profile_lookup_popmenu, ;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@PLATFORM_PROFILE_LOOKUP", 1 ) - itemDef - { - type ITEM_TYPE_BUTTON_NO_TEXT - rect 0 0 0 0 0 0 - visible 1 - } - - SYSTEM_POPUP_SPINNER( 1 ) - } -#endif - - // save game data corrupted warning - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_connectingtodw, ;, ;, 1 ) - - onESC - { - if( IN_MP_FRONTEND ) - { - deactivateBlur; - } - CENTER_POPUP_ON_CLOSE - execNow ui_animate popup_connectingtodwhandler notification default 0; - close popup_connectingtodwhandler; - close self; - } - onClose - { - if( IN_MP_FRONTEND ) - { - deactivateBlur; - } - execNow ui_animate popup_connectingtodwhandler notification default 0; - close popup_connectingtodwhandler; - } - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_CONNECTING_TO_DW" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - - menuDef - { - name popup_connectingtodwhandler - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - visible 1 - backcolor 0 0 0 0 - style WINDOW_STYLE_FILLED - - onOpen - { - exec "initiateDemonWareConnect"; - if( dvarBool( live_banned ) ) - { - execNow ui_animate popup_connectingtodwhandler notification show 2000; - } - else - { - execNow ui_animate popup_connectingtodwhandler notification show 30000; - } - open popup_connectingtodw; - } - - itemDef - { - name "notification" - visible 0 - - state - { - name "show" - onEnter - { - if( dvarBool( live_banned ) ) - { - setdvar com_errorTitle "@MENU_NOTICE_CAPS"; - setdvar com_errorMessage "@PLATFORM_BANNED"; - open error_popmenu; - } - elseif( isDemonwareFetchingDone() == 0 ) - { - setdvar com_errorTitle "@MENU_NOTICE_CAPS"; - setdvar com_errorMessage "@EXE_DEMONWARE_DISCONNECT"; - open error_popmenu; - } - close popup_connectingtodw; - close popup_inliveconnectingtodw; - } - } - } - } - - - // Shown while connecting to DemonWare & getting all needed items for playing on - // LIVE while in the online (dvar) sections of the game, happens when another user - // signs in on another controller - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_inliveconnectingtodw, ;, ;, 1 ) - - onESC - { - if( IN_MP_FRONTEND ) - { - deactivateBlur; - } - CENTER_POPUP_ON_CLOSE - close self; - } - onClose - { - if( IN_MP_FRONTEND ) - { - deactivateBlur; - } - } - execKeyInt BUTTON_BACK {} - execKeyInt BUTTON_B {} - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_CONNECTING_TO_DW" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_gettingdata, ;, ;, 1 ) - onESC - { - if( IN_MP_FRONTEND ) - { - deactivateBlur; - } - close menu_xboxlive; - close findgame_category; - close popup_gettingdata; - close live_cac_popup; - close popup_gamesetup_private; - close private_cac_popup; - exec "onlinegame 0"; - exec "xstopprivateparty"; - exec "xstopparty"; - } - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_DOWNLOADING_GAME_SETTINGS_CAPS" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_downloadingfile, ;, execnow fileShareAbortOperation;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_DOWNLOAD_FILE" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_downloadinginfo, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_DOWNLOADING" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_downloadingCompressedStats, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_DOWNLOAD_OTHER_PLAYER_STATS" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_fetchstats, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_FETCH_STATS" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_uploadingfile, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_UPLOAD_FILE" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_gettingPlayercardInfo, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_GETTING_PLAYERCARD" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_getlclaninfofromxuid, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_GETTING_CLAN_INFO" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_gettingoffers, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_GETTING_STORE_DATA" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_connectingtolobby, ;, focusFirst;, 1 ) - onESC - { - if( IN_MP_FRONTEND ) - { - deactivateBlur; - } - close menu_xboxlive; - close popup_gettingdata; - close live_cac_popup; - close popup_gamesetup_private; - close private_cac_popup; - exec "onlinegame 0"; - exec "xstopprivateparty"; - exec "xstopparty"; - } - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_CONNECTING_TO_LOBBY" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_connecting_dw, ;, focusFirst;, 1 ) - onESC - { - if( IN_MP_FRONTEND ) - { - deactivateBlur; - } - close menu_xboxlive; - close popup_gettingdata; - close live_cac_popup; - close popup_gamesetup_private; - close private_cac_popup; - close main_online - exec "onlinegame 0"; - close self; - } - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_CONNECTING_DW" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_creating_account, ;, focusFirst;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_CREATING_PROFILE" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_deleting_account, ;, focusFirst;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_DELETING_PROFILE" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_error_deleting_account, ;, focusFirst;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MENU_ERROR_DELETING_PROFILE", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_error_creating_account, ;, focusFirst;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MENU_ERROR_CREATING_PROFILE", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_account_not_available, ;, focusFirst;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MENU_ACCOUNT_NOT_AVAILABLE", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_reconnectingtoparty, ;, close menu_xboxlive; close popup_gettingdata;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_RECONNECTING_TO_SQUAD" ), 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_error_contentserver_down, ;, focusFirst; uiScript clearError; close self;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MPUI_ERROR_CAPS", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_CONTENT_SERVER_DOWN", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", uiScript clearError; close self;, 1, ; ) - } -} - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( stats_notfound_error_popup, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MENU_STATERROR_TITLE", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_STATS_ERROR", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) - } - - SYSTEM_ERROR_POPUP( "error_dw_fetch_file" ) - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( save_corrupted, ;, close self; close blackout_3d_tv, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MENU_SAVE_CORRUPTED", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_SAVEDATA_CORRUPTED", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self; close blackout_3d_tv, 1, ; ) - } - - SYSTEM_ERROR_POPUP( "error_popmenu_party" ) - - SYSTEM_ERROR_POPUP( "error_popmenu_lobby" ) - - SYSTEM_ERROR_POPUP( "error_popmenu_keyboard" ) - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( startmatch_popup, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MPUI_ERROR_CAPS", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@PLATFORM_MIN_ONE_REMOTE", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self, 1, ; ) - } - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 2 - menuDef - { - SYSTEM_POPUP_SETUP_VIS( acceptinvite_warning, setFocus acceptinvite_warning_2, close self;, 1 ) - onOpen - { - close menu_joinsession; - } - - SYSTEM_POPUP_TITLE_VIS( "@MENU_ACCEPTINVITETITLE", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_LEAVEMPGAMEWARNINGSQUADHOST", when( privatepartyhost() && !aloneinparty() ); ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_LEAVESQUADWARNING", when( !privatepartyhost() && !inlobby() ); ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_LEAVEMPGAMEWARNING", when( !privatepartyhost() && inlobby() ); ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_RESUMEGAME", close menu_joinsession; close self;, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_ACCEPTINVITE", close self; exec "acceptInvite";, 1, name acceptinvite_warning_2 ) - } - - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X 180 -#undef CHOICE_Y_START -#define CHOICE_Y_START 230 - -#define TOAST_POPUP_Y_OFFSET -55 -#define TOAST_POPUP_HEIGHT 36 -#define TOAST_POPUP_ICON_HEIGHT 26 -#define TOAST_POPUP_ICON_WIDTH 26 -#define TOAST_BIG_DESC_WIDTH ( GetTextWidth( getToastPopupDescription(), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) ) -#define TOAST_SIDE_PAD_SIZE 10 -#define TOAST_MIDDLE_PAD_SIZE 5 - -#define TOAST_POPUP_BG_WIDTH( textWidth ) ( TOAST_SIDE_PAD_SIZE + TOAST_POPUP_ICON_WIDTH + TOAST_MIDDLE_PAD_SIZE + textWidth + TOAST_SIDE_PAD_SIZE ) -#define TOAST_POPUP_BG_X_START( textWidth ) ( -1 * ( TOAST_POPUP_BG_WIDTH( textWidth ) / 2 ) ) -#define TOAST_POPUP_ICON_X_START( textWidth ) ( TOAST_POPUP_BG_X_START( textWidth ) + TOAST_SIDE_PAD_SIZE ) -#define TOAST_POPUP_TEXT_X_START( textWidth ) ( TOAST_POPUP_ICON_X_START( textWidth ) + TOAST_POPUP_ICON_WIDTH + TOAST_MIDDLE_PAD_SIZE ) - -#define SHOW_NORMAL_TOAST_POPUP ( getToastPopupTitle() != "" ) - - menuDef - { - name menu_toast_popup - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_POPUP - openSlideSpeed 150 - closeSlideSpeed 700 - openSlideDirection MENU_SLIDE_DIRECTION_BOTTOM_TO_TOP - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - - // Title and description version - itemDef - { - rect 0 TOAST_POPUP_Y_OFFSET 0 TOAST_POPUP_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM - exp rect X( TOAST_POPUP_BG_X_START( getToastPopupWidth() ) ) - exp rect W( TOAST_POPUP_BG_WIDTH( getToastPopupWidth() ) ) - style WINDOW_STYLE_SHADER_FRAMED - frame 16 0.5 FRAME_SIDE_ALL - background "menu_mp_lobby_frame_circle" - forecolor 0 0 0 0.5 - visible when( SHOW_NORMAL_TOAST_POPUP ); - decoration - } - - PREPROC_SHADER_DRAW_ADV_VIS_EX( TOAST_POPUP_ICON_X_START( getToastPopupWidth() ), - (TOAST_POPUP_Y_OFFSET+5), - TOAST_POPUP_ICON_WIDTH, - TOAST_POPUP_ICON_HEIGHT, - HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM, - getToastPopupIcon(), 1 1 1 0.8, - when( SHOW_NORMAL_TOAST_POPUP );, ; ) - - PREPROC_TEXT_DRAW_ADV_VIS_EX( TOAST_POPUP_TEXT_X_START( getToastPopupWidth() ), - (TOAST_POPUP_Y_OFFSET+2), - ( getToastPopupWidth() ), - 15, - HORIZONTAL_ALIGN_CENTER, - VERTICAL_ALIGN_BOTTOM, - getToastPopupTitle(), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, - when( SHOW_NORMAL_TOAST_POPUP );, ; ) - - PREPROC_TEXT_DRAW_ADV_VIS_EX( TOAST_POPUP_TEXT_X_START( getToastPopupWidth() ), - (TOAST_POPUP_Y_OFFSET+18), - ( getToastPopupWidth() ), - 15, - HORIZONTAL_ALIGN_CENTER, - VERTICAL_ALIGN_BOTTOM, - getToastPopupDescription(), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, - when( SHOW_NORMAL_TOAST_POPUP );, ; ) - - // Description only version - itemDef - { - rect 0 TOAST_POPUP_Y_OFFSET 0 TOAST_POPUP_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM - exp rect X( TOAST_POPUP_BG_X_START( TOAST_BIG_DESC_WIDTH ) ) - exp rect W( TOAST_POPUP_BG_WIDTH( TOAST_BIG_DESC_WIDTH ) ) - style WINDOW_STYLE_SHADER_FRAMED - frame 16 0.5 FRAME_SIDE_ALL - background "menu_mp_lobby_frame_circle" - forecolor 0 0 0 0.5 - visible when( !SHOW_NORMAL_TOAST_POPUP ); - decoration - } - - - PREPROC_SHADER_DRAW_ADV_VIS_EX( TOAST_POPUP_ICON_X_START( TOAST_BIG_DESC_WIDTH ), - (TOAST_POPUP_Y_OFFSET+5), - TOAST_POPUP_ICON_WIDTH, - TOAST_POPUP_ICON_HEIGHT, - HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM, - getToastPopupIcon(), 1 1 1 0.8, - when( !SHOW_NORMAL_TOAST_POPUP );, ; ) - - - PREPROC_TEXT_DRAW_ADV_VIS_EX( TOAST_POPUP_TEXT_X_START( TOAST_BIG_DESC_WIDTH ), - (TOAST_POPUP_Y_OFFSET+5), - TOAST_BIG_DESC_WIDTH, - TOAST_POPUP_ICON_HEIGHT, - HORIZONTAL_ALIGN_CENTER, - VERTICAL_ALIGN_BOTTOM, - getToastPopupDescription(), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, - when( !SHOW_NORMAL_TOAST_POPUP );, ; ) - } - - #define VIS_PRESS_START 1 - - menuDef - { - name "pregame_loaderror" - rect 0 0 640 480 - fullScreen 1 - focusColor COLOR_FOCUSED - backcolor 1 1 1 0 - style WINDOW_STYLE_FILLED - onClose - { - uiScript clearError - } - onOpen - { - setdvar ui_SaveLoadVisible "0"; - } - onEsc - { - uiScript playerstart - } - - // background - itemDef - { - style WINDOW_STYLE_FILLED - type ITEM_TYPE_OWNERDRAW - rect FULLSCREEN_WIDE - backcolor 1 1 1 1 - visible 1 - background cinematic - decoration - } - - itemDef - { - name "profile" - type ITEM_TYPE_OWNERDRAW - visible 1 - rect 40 40 560 400 - ownerdraw UI_LOADPROFILING - decoration - } - - itemDef - { - name errorinfo - type ITEM_TYPE_TEXT - rect 120 142 400 255 - style WINDOW_STYLE_FILLED - textalign ITEM_ALIGN_TOP_CENTER - autowrapped - dvar "com_errorMessage" - textscale .8 - forecolor 1 .2 .2 1 - visible 1 - decoration - } - -#ifdef PS3 - itemDef - { - type ITEM_TYPE_TEXT - text "@PLATFORM_UI_PRESS_BUTTONSELECTCHOICE" - style WINDOW_STYLE_FILLED - textscale TEXTSIZE_SMALL - border 0 - bordercolor 1 1 1 1 - rect 0 388 640 45 - textalign ITEM_ALIGN_TOP_CENTER - textaligny 4 - forecolor 1 1 1 0.4 - backcolor 0 0 0 0 - visible when ( !dvarbool( ui_isSaving ) && VIS_PRESS_START ); - decoration - } -#endif - -#ifdef XENON - itemDef - { - type ITEM_TYPE_TEXT - text "@MENU_PRESS_START_TO_SKIP" - style WINDOW_STYLE_FILLED - textscale TEXTSIZE_SMALL - border 0 - bordercolor 1 1 1 1 - rect 0 388 640 45 - textalign ITEM_ALIGN_TOP_CENTER - textaligny 4 - forecolor 1 1 1 0.4 - backcolor 0 0 0 0 - visible when ( !dvarbool( ui_isSaving ) && VIS_PRESS_START ); - decoration - } -#endif - -#ifdef PC - itemDef - { - type ITEM_TYPE_TEXT - text "@MENU_CLICK_TO_START_THE_MISSION" - style WINDOW_STYLE_FILLED - textscale TEXTSIZE_SMALL - border 0 - bordercolor 1 1 1 1 - rect 0 388 640 45 - textalign ITEM_ALIGN_TOP_CENTER - textaligny 4 - forecolor 1 1 1 0.4 - backcolor 0 0 0 0 - visible when ( !dvarbool( ui_isSaving ) && VIS_PRESS_START ); - decoration - } -#endif // #ifdef PC - - itemDef - { - type ITEM_TYPE_BUTTON - rect -128 0 896 480 - style WINDOW_STYLE_EMPTY - visible 1 - forecolor 0 0 0 0 - backcolor 0 0 0 0 - action - { - uiScript playerstart - } - } - - #include "ui/safearea.menu" - } - - menuDef - { - name "pregame_loaderror_mp" - rect 0 0 640 480 - fullScreen 1 - focusColor COLOR_FOCUSED - backcolor 1 1 1 0 - style WINDOW_STYLE_FILLED - blurWorld 6.0 - onClose - { - uiScript clearError - } - onOpen - { - setdvar ui_SaveLoadVisible "0"; - } - - // background - itemDef - { - style WINDOW_STYLE_FILLED - rect FULLSCREEN_WIDE - backcolor 0.2 0.2 0.2 .5 - visible 1 - decoration - } - - - - itemDef - { - name "profile" - type ITEM_TYPE_OWNERDRAW - visible 1 - rect 40 40 560 400 - ownerdraw UI_LOADPROFILING - decoration - } - - itemDef - { - name errorinfo - type ITEM_TYPE_TEXT - rect 120 142 400 255 - style WINDOW_STYLE_FILLED - textalign ITEM_ALIGN_TOP_CENTER - autowrapped - dvar "com_errorMessage" - textscale .8 - forecolor 1 .2 .2 1 - visible 1 - decoration - } - - // the button - // Text message saying you should click to continue -#ifdef CONSOLE - itemDef - { - type ITEM_TYPE_TEXT - text "@MENU_PRESS_START" - style WINDOW_STYLE_FILLED - textscale TEXTSIZE_TITLE - rect 0 388 640 45 - textalign ITEM_ALIGN_TOP_CENTER - textaligny 4 - forecolor 1 1 1 1 - visible 1 - decoration - } -#endif // #ifdef CONSOLE - -#ifdef PC - itemDef - { - type ITEM_TYPE_TEXT - text "@MENU_CLICK_TO_START_THE_MISSION" - style WINDOW_STYLE_FILLED - textscale TEXTSIZE_TITLE - rect 0 388 640 45 - textalign ITEM_ALIGN_TOP_CENTER - textaligny 4 - forecolor 1 1 1 1 - visible 1 - decoration - } -#endif // #ifdef PC - - itemDef - { - type ITEM_TYPE_BUTTON - rect -128 0 896 480 - style WINDOW_STYLE_EMPTY - visible 1 - forecolor 0 0 0 0 - backcolor 0 0 0 0 - action - { - uiScript clearLoadErrorsSummary - } - } - - #include "ui/safearea.menu" - } - -} diff --git a/mods/patch_mp/ui/options_graphics_pc.menu b/mods/patch_mp/ui/options_graphics_pc.menu deleted file mode 100644 index d6c661f..0000000 --- a/mods/patch_mp/ui/options_graphics_pc.menu +++ /dev/null @@ -1,447 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#define OPTIONS_STYLE 1 -#define CHOICE_SEP_1 27 -#define CHOICE_SEP_2 30 -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui/framestyle.inc" -#include "ui/frame.inc" - -#undef CHOICE_ACTION_SOUND -#define CHOICE_ACTION_SOUND "uin_mouse_click_t" - -#undef CHOICE_BUTTON_NAME -#define CHOICE_BUTTON_NAME "options_graphics_" -#undef MENUDEF_NAME -#define MENUDEF_NAME options_graphics - -#undef OPTIONS_GRAPHICS_HEIGHT -#undef OPTIONS_GRAPHICS_WIDTH -#define OPTIONS_GRAPHICS_HEIGHT 332 -#define OPTIONS_GRAPHICS_WIDTH OPTIONS_GRAPHICS_HEIGHT * FRAME_ASPECT_RATIO - -{ - menuDef - { - name options_graphics - fullScreen 0 - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop "" - - onOpen - { - LOCAL_CLOSE_ALL_BUT( options_graphics ) - - setLocalVarBool ui_showApply 0; - setLocalVarBool ui_hideBack 1; - - // setfromdvar dst src - exec "exec ui/options_graphics.cfg"; - - if ( dvarInt( r_picmip_manual ) == 0 ) - { - exec "set ui_r_picmip -1"; - exec "set ui_r_picmip_bump -1"; - exec "set ui_r_picmip_spec -1"; - exec "set ui_r_picmip_manual 0"; - } - - setdvar g_reloading "0"; - - // round ai_corpsecount down to valid values. - if ( dvarInt( ai_corpsecount ) >= 32 ) - { -// KTouevsky: Bump this number when the RAGDOLL_MAX_SIMULATING in ragdoll.h is bumped to 32 too -// setDvar ai_corpseCount 32; - setDvar ai_corpseCount 16; - } - elseif ( dvarInt( ai_corpsecount ) >= 16 ) - { - setDvar ai_corpseCount 16; - } - elseif ( dvarInt( ai_corpsecount ) >= 10 ) - { - setDvar ai_corpseCount 10; - } - elseif ( dvarInt( ai_corpsecount ) >= 5 ) - { - setDvar ai_corpseCount 5; - } - elseif ( dvarInt( ai_corpsecount ) >= 3 ) - { - setDvar ai_corpseCount 3; - } - -// 2008-Aug-1 KTouevsky: loosk like COD4 have "Soften Smoke Edges" to be "Yes/No" only and linked to r_zfeather directly - //execOnDvarFloatValue r_zfeather 0 "set ui_zfeather 0"; // off - //execOnDvarFloatValue r_zfeather 1 "set ui_zfeather 1"; // world - //execOnDvarFloatValue r_depthPrepassModels 1 "set ui_zfeather 2"; // everything - - if (IsInGame()) - { - showMenu "pausedbkgnd"; - } - else - { - activateBlur; - } - } - onClose - { - setLocalVarBool ui_hideBack 0; - //execOnDvarIntValue ui_zfeather 0 "set r_zfeather 0;set r_depthPrepassModels 0"; // off - //execOnDvarIntValue ui_zfeather 1 "set r_zfeather 1;set r_depthPrepassModels 0"; // world - //execOnDvarIntValue ui_zfeather 2 "set r_zfeather 1;set r_depthPrepassModels 1"; // everything - - if (IsInGame()) - { - hideMenu "pausedbkgnd"; - } - else - { - deactivateBlur; - } - - // be sure brightness (r_gamma) is stored in the profile - exec updategamerprofile; - } - onESC - { - close self; - open options_new_pc; - } - PC_TAB_SWITCH_ACTIONS( options_new_pc, options_controls_new_pc, options_controls_new_pc ) - - #include "ui_mp/leftside_options.inc" - -#undef CHOICE_X_START -#undef CHOICE_Y_START -#undef CHOICE_HORIZONTAL_ALIGN -#undef CHOICE_VERTICAL_ALIGN -#undef CHOICE_DVAR_EXTRA_WIDTH -#undef CHOICE_TEXT_OFFSET_X - -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER -#define CHOICE_X_START ((-OPTIONS_GRAPHICS_WIDTH/2) - 75) -#define CHOICE_Y_START ((-OPTIONS_GRAPHICS_HEIGHT/2) + 32) -#define CHOICE_DVAR_EXTRA_WIDTH 120 -#define CHOICE_TEXT_OFFSET_X -10 - -#undef CHOICE_TEXTSTYLE -#undef CHOICE_TEXTSIZE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL -#define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT - -#undef CHOICE_TEXT_COLOR_NO_HL -#undef CHOICE_TEXT_COLOR_HL -#undef CHOICE_CAPTION_TEXT_COLOR_NO_HL -#undef CHOICE_CAPTION_TEXT_COLOR_HL - -#define CHOICE_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_TEXT_COLOR_HL 1 1 1 1 -#define CHOICE_CAPTION_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_CAPTION_TEXT_COLOR_HL 0 0 0 1 - -#define TEXTURE_QUALITY_ACTION \ - setLocalVarBool ui_showApply 1; \ - setDvar ui_r_picmip_bump dvarInt( ui_r_picmip ); \ - setDvar ui_r_picmip_spec dvarInt( ui_r_picmip ); \ - if ( dvarInt( ui_r_picmip ) == -1 ) \ - { \ - setDvar ui_r_picmip_manual 0; \ - } \ - else \ - { \ - setDVar ui_r_picmip_manual 1; \ - } - -#define MP_ZOMBIE_INGAME ( IsInGame() && ( dvarBool( ui_multiplayer ) || dvarBool( zombiemode ) ) ) - - FRAME_CHOICE_SECTION_TITLE( 21, "@MENU_GRAPHICS_CAPS" ) - - FRAME_CHOICE_DVARENUMLIST_VIS( 22, "@MENU_VIDEO_MODE_CAPS", ui_r_mode, r_mode, setLocalVarBool ui_showApply 1, !MP_ZOMBIE_INGAME ) - FRAME_CHOICE_DVARYESNO_VIS( 23, "@MENU_FULLSCREEN_CAPS", ui_r_fullscreen, setLocalVarBool ui_showApply 1, !MP_ZOMBIE_INGAME ) - FRAME_CHOICE_DVARFLOATLIST_VIS( 24, "@MENU_ANTIALIASING_CAPS", ui_r_aasamples, { "@MENU_OFF_CAPS" 1 "@MENU_2X_CAPS" 2 "@MENU_4X_CAPS" 4 "@MENU_8X_CAPS" 8 }, setLocalVarBool ui_showApply 1;, !MP_ZOMBIE_INGAME && !dvarbool(r_supports16xAA) ) - FRAME_CHOICE_DVARFLOATLIST_VIS( 24, "@MENU_ANTIALIASING_CAPS", ui_r_aasamples, { "@MENU_OFF_CAPS" 1 "@MENU_2X_CAPS" 2 "@MENU_4X_CAPS" 4 "@MENU_8X_CAPS" 8 "@MENU_16X_CAPS" 16 }, setLocalVarBool ui_showApply 1;, !MP_ZOMBIE_INGAME && dvarbool(r_supports16xAA) ) - FRAME_CHOICE_DVARSTRINGLIST_VIS( 25, "@MENU_ASPECT_RATIO_CAPS", ui_r_aspectratio, { "@MENU_AUTO_CAPS"; "auto"; "@MENU_STANDARD_4_3_CAPS"; "standard"; "@MENU_WIDE_16_10_CAPS"; "wide 16:10"; "@MENU_WIDE_16_9_CAPS"; "wide 16:9" }, setLocalVarBool ui_showApply 1, !MP_ZOMBIE_INGAME ) - FRAME_CHOICE_DVARENUMLIST_VIS( 26, "@MENU_SCREEN_REFRESH_RATE_CAPS", ui_r_displayRefresh, r_displayRefresh, setLocalVarBool ui_showApply 1;, !MP_ZOMBIE_INGAME ) - FRAME_CHOICE_DVARYESNO_VIS( 27, "@MENU_SYNC_EVERY_FRAME_CAPS", ui_r_vsync, setLocalVarBool ui_showApply 1, !MP_ZOMBIE_INGAME ) - - FRAME_CHOICE_DVARSTRINGLIST( 28, "@MENU_TEXTURE_MIPMAPS_CAPS", r_texFilterMipMode, { "@MENU_AUTOMATIC_CAPS"; "Unchanged"; "@MENU_BILINEAR_CAPS"; "Force Bilinear"; "@MENU_TRILINEAR_CAPS"; "Force Trilinear" }, ; ) - FRAME_DVARSLIDER( 29, "@MENU_TEXTURE_ANISOTROPY_CAPS", r_texFilterAnisoMin, 1, 1, 16, ; ) - FRAME_CHOICE_DVARFLOATLIST_VIS( 30, "@MENU_TEXTURE_QUALITY_CAPS", ui_r_picmip, { "@MENU_AUTOMATIC_CAPS" -1 "@PLATFORM_LOW_CAPS" 3 "@MENU_NORMAL_CAPS" 2 "@PLATFORM_HIGH_CAPS" 1 "@MENU_EXTRA_CAPS" 0 }, TEXTURE_QUALITY_ACTION, !MP_ZOMBIE_INGAME ) - - - FRAME_CHOICE_DVARYESNO_VIS( 31, "@PATCH_MENU_OPTION_SHADERWARMING_CAPS", r_shaderWarming, ;, 1 ) - FRAME_CHOICE_DVARYESNO_VIS( 32, "@MENU_SHADOWS_CAPS", sm_enable, ;, dvarbool( ui_showShadowOptions ) ) - FRAME_CHOICE_DVARYESNO_VIS( 33, "@MENU_OPTION_BULLET_IMPACTS_CAPS", fx_marks, ;, 1 ) -// KTouevsky: Add back insane when the RAGDOLL_MAX_SIMULATING in ragdoll.h is bumped to 32 too -// FRAME_CHOICE_DVARFLOATLIST_VIS( 34, "@MENU_NUMBER_OF_CORPSES_CAPS", ai_corpsecount, { "@MENU_TINY_CAPS" 3 "@MENU_SMALL_CAPS" 5 "@MENU_MEDIUM_CAPS" 10 "@MENU_LARGE_CAPS" 16 "@MENU_INSANE_CAPS" 32 }, ;, !dvarBool( ui_multiplayer ) ) - FRAME_CHOICE_DVARFLOATLIST_VIS( 34, "@MENU_NUMBER_OF_CORPSES_CAPS", ai_corpsecount, { "@MENU_TINY_CAPS" 3 "@MENU_SMALL_CAPS" 5 "@MENU_MEDIUM_CAPS" 10 "@MENU_LARGE_CAPS" 16 }, ;, !dvarBool( ui_multiplayer ) ) - FRAME_DVARSLIDER( 35, "@MENU_BRIGHTNESS_CAPS", r_gamma, 1, 0.5, 3, ; ) - FRAME_DVARSLIDER_VIS( 36, "@PLATFORM_FOV_CAPS", cg_fov_default, 1, 65, 80, ;, ( dvarint( ui_multiplayer ) ) ) - -#undef CHOICE_TEXTCOLOR -#define CHOICE_TEXTCOLOR 0.2 0.2 0.2 1 - // darker disabled color in-game - FRAME_CHOICE_DBUTTON_DARK_FOCUS_VIS_EX( 22, "@MENU_VIDEO_MODE_CAPS", ;, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_FOCUS_VIS_EX( 23, "@MENU_FULLSCREEN_CAPS", ;, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_FOCUS_VIS_EX( 24, "@MENU_ANTIALIASING_CAPS", ;, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_FOCUS_VIS_EX( 25, "@MENU_ASPECT_RATIO_CAPS", ;, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_FOCUS_VIS_EX( 26, "@MENU_SCREEN_REFRESH_RATE_CAPS", ;, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_FOCUS_VIS_EX( 27, "@MENU_SYNC_EVERY_FRAME_CAPS", ;, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_FOCUS_VIS_EX( 30, "@MENU_TEXTURE_QUALITY_CAPS", ;, ;, MP_ZOMBIE_INGAME, ; ) - - FRAME_CHOICE_DBUTTON_DARK_FOCUS_VIS_EX( 32, "@MENU_SHADOWS_CAPS", ;, ;, !dvarbool( ui_showShadowOptions ) && MP_ZOMBIE_INGAME, ; ) - -#undef CHOICE_TEXTCOLOR -#define CHOICE_TEXTCOLOR 0.4 0.4 0.4 1 - // lighter disabled color in the shell - FRAME_CHOICE_DBUTTON_DARK_FOCUS_VIS_EX( 32, "@MENU_SHADOWS_CAPS", ;, ;, !dvarbool( ui_showShadowOptions ), ; ) - -#undef CHOICE_TEXT_COLOR_NO_HL -#undef CHOICE_TEXT_COLOR_HL -#undef CHOICE_CAPTION_TEXT_COLOR_NO_HL -#undef CHOICE_CAPTION_TEXT_COLOR_HL - -#define CHOICE_TEXT_COLOR_NO_HL 1 1 1 1 -#define CHOICE_TEXT_COLOR_HL 0 0 0 1 -#define CHOICE_CAPTION_TEXT_COLOR_NO_HL 1 1 1 1 -#define CHOICE_CAPTION_TEXT_COLOR_HL 0 0 0 1 - - FRAME_BUTTON_PC_RIGHT_OFFSET( NEW_FRAME_DEFAULT_WIDTH, NEW_FRAME_DEFAULT_HEIGHT, 0, - "@MENU_APPLY", - open vid_restart_popmenu;, - when( ( localVarBool( ui_showApply ) && !dvarint( sv_running ) ) || dvarInt(ui_allow_graphic_change) ); ) - - FRAME_BUTTON_PC_RIGHT_OFFSET( NEW_FRAME_DEFAULT_WIDTH, NEW_FRAME_DEFAULT_HEIGHT, 0, - "@MENU_APPLY", - uiScript openMenuOnDvar g_reloading 0 vid_restart_popmenu_listen; - uiScript openMenuOnDvarNot g_reloading 0 vid_restart_popmenu_dead;, - when( localVarBool( ui_showApply ) && dvarint( sv_running ) && dvarInt( ui_allow_graphic_change ) == 0 ); ) - - //CHOICE_APPLY_VIS( "@MENU_APPLY", open vid_restart_popmenu, when( ( localVarBool( ui_showApply ) && !dvarint( sv_running ) ) || dvarInt(ui_allow_graphic_change) ); ) - //CHOICE_APPLY_VIS( "@MENU_APPLY", uiScript openMenuOnDvar g_reloading 0 vid_restart_popmenu_listen; uiScript openMenuOnDvarNot g_reloading 0 vid_restart_popmenu_dead;, when( localVarBool( ui_showApply ) && dvarint( sv_running ) && dvarInt( ui_allow_graphic_change ) == 0 ); ) - //CHOICE_BACK( "@MENU_BACK", close self ) - - -// These are last so I don't have to redefine everything. -#undef CHOICE_TEXTALIGN -#define CHOICE_TEXTALIGN ITEM_ALIGN_MIDDLE_LEFT -#undef CHOICE_TEXT_OFFSET_X -#define CHOICE_TEXT_OFFSET_X -5010 -#undef CHOICE_X_START -#define CHOICE_X_START ((-OPTIONS_GRAPHICS_WIDTH/2) - 125 + 5000) - -#undef CHOICE_TEXTCOLOR -#define CHOICE_TEXTCOLOR 0.2 0.2 0.2 1 - // darker disabled color in-game - FRAME_CHOICE_DBUTTON_DARK_VIS_EX( 41, dvarString( ui_r_mode ), ;, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_LIST_VIS_EX( 42, ui_r_fullscreen, ITEM_TYPE_MULTI, dvarFloatList { "@MENU_NO_CAPS" 0 "@MENU_YES_CAPS" 1 }, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_LIST_VIS_EX( 43, ui_r_aasamples, ITEM_TYPE_MULTI, dvarFloatList { "@MENU_OFF_CAPS" 1 "@MENU_2X_CAPS" 2 "@MENU_4X_CAPS" 4 "@MENU_8X_CAPS" 8 "@MENU_16X_CAPS" 16 }, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_LIST_VIS_EX( 44, ui_r_aspectratio, ITEM_TYPE_MULTI, dvarStrList { "@MENU_AUTO_CAPS"; "auto"; "@MENU_STANDARD_4_3_CAPS"; "standard"; "@MENU_WIDE_16_10_CAPS"; "wide 16:10"; "@MENU_WIDE_16_9_CAPS"; "wide 16:9" }, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_VIS_EX( 45, dvarString( ui_r_displayRefresh ), ;, ;, MP_ZOMBIE_INGAME, ; ) - FRAME_CHOICE_DBUTTON_DARK_LIST_VIS_EX( 46, ui_r_vsync, ITEM_TYPE_MULTI, dvarFloatList { "@MENU_NO_CAPS" 0 "@MENU_YES_CAPS" 1 }, ;, MP_ZOMBIE_INGAME, ; ) - -#undef CHOICE_Y_OFFSET -#define CHOICE_Y_OFFSET (CHOICE_SIZE_Y / 2) - FRAME_CHOICE_DBUTTON_DARK_LIST_VIS_EX( 49, ui_r_picmip, ITEM_TYPE_MULTI, dvarFloatList { "@MENU_AUTOMATIC_CAPS" -1 "@PLATFORM_LOW_CAPS" 3 "@MENU_NORMAL_CAPS" 2 "@PLATFORM_HIGH_CAPS" 1 "@MENU_EXTRA_CAPS" 0 }, ;, MP_ZOMBIE_INGAME, ; ) -#undef CHOICE_Y_OFFSET -#define CHOICE_Y_OFFSET 0 - - FRAME_CHOICE_DBUTTON_DARK_LIST_VIS_EX( 52, sm_enable, ITEM_TYPE_MULTI, dvarFloatList { "@MENU_NO_CAPS" 0 "@MENU_YES_CAPS" 1 }, ;, !dvarbool( ui_showShadowOptions ) && MP_ZOMBIE_INGAME, ; ) - -#undef CHOICE_TEXTCOLOR -#define CHOICE_TEXTCOLOR 0.4 0.4 0.4 1 - // lighter disabled color in the shell - FRAME_CHOICE_DBUTTON_DARK_LIST_VIS_EX( 52, sm_enable, ITEM_TYPE_MULTI, dvarFloatList { "@MENU_NO_CAPS" 0 "@MENU_YES_CAPS" 1 }, ;, !dvarbool( ui_showShadowOptions ), ; ) - - /* - itemDef - { - name graphic_warning - type ITEM_TYPE_BUTTON - text "@MENU_GRAPHICS_WARNING" - style WINDOW_STYLE_FILLED - textstyle ITEM_TEXTSTYLE_SHADOWED - rect 20 -116 240 240 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM - textfont UI_FONT_NORMAL - textalign ITEM_ALIGN_LEFT - textscale TEXTSIZE_SMALL - visible 1 - mouseEnter { play CHOICE_FOCUS_SOUND; } - decoration - autowrapped - } - */ - //CHOICE_FOOTNOTE( "@MENU_GRAPHICS_WARNING", 340, 340 ) - } - - // restoring button properties - - // --- - #undef TEXTSIZE_BUTTON_PC - #define TEXTSIZE_BUTTON_PC 0.4 - - #undef CHOICE_SIZE_X - #define CHOICE_SIZE_X 224 - - #undef SECTION_X_OFFSET - #define SECTION_X_OFFSET 0 - // --- - - #undef CHOICE_BUTTON_NAME - #define CHOICE_BUTTON_NAME "options_graphics_texture_" - #undef MENUDEF_NAME - #define MENUDEF_NAME options_graphics_texture - - menuDef - { - name options_graphics_texture - fullScreen 0 - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop "" - - onOpen - { - LOCAL_CLOSE_ALL_BUT( options_graphics_texture ) - - setLocalVarBool ui_hideBack 1; - setLocalVarBool ui_showApply 0; - - exec "setfromdvar ui_r_picmip r_picmip"; - exec "setfromdvar ui_r_picmip_bump r_picmip_bump"; - exec "setfromdvar ui_r_picmip_spec r_picmip_spec"; - exec "setfromdvar ui_r_picmip_manual r_picmip_manual"; - - if (IsInGame()) - { - showMenu "pausedbkgnd"; - } - else - { - activateBlur; - } - } - onClose - { - setLocalVarBool ui_hideBack 0; - - if (IsInGame()) - { - hideMenu "pausedbkgnd"; - } - else - { - deactivateBlur; - } - } - - onESC - { - close self; - open options_new_pc; - } - PC_TAB_SWITCH_ACTIONS( options_new_pc, options_controls_new_pc, options_controls_new_pc ) - - #include "ui_mp/leftside_options.inc" - -#undef CHOICE_X_START -#undef CHOICE_Y_START -#undef CHOICE_HORIZONTAL_ALIGN -#undef CHOICE_VERTICAL_ALIGN -#undef CHOICE_DVAR_EXTRA_WIDTH -#undef CHOICE_TEXT_OFFSET_X - -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER -#define CHOICE_X_START ((-OPTIONS_GRAPHICS_WIDTH/2) - 75) -#define CHOICE_Y_START ((-OPTIONS_GRAPHICS_HEIGHT/2) + 32) -#define CHOICE_DVAR_EXTRA_WIDTH 120 -#define CHOICE_TEXT_OFFSET_X -10 - -#undef CHOICE_TEXTSTYLE -#undef CHOICE_TEXTSIZE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL -#define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT - -#undef CHOICE_TEXT_COLOR_NO_HL -#undef CHOICE_TEXT_COLOR_HL -#undef CHOICE_CAPTION_TEXT_COLOR_NO_HL -#undef CHOICE_CAPTION_TEXT_COLOR_HL - -#define CHOICE_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_TEXT_COLOR_HL 1 1 1 1 -#define CHOICE_CAPTION_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_CAPTION_TEXT_COLOR_HL 0 0 0 1 - - FRAME_CHOICE_SECTION_TITLE( 21, "@MENU_TEXTURE_SETTINGS_CAPS" ) - - FRAME_CHOICE_DVARSTRINGLIST( 22, "@MENU_TEXTURE_MIPMAPS_CAPS", r_texFilterMipMode, { "@MENU_AUTOMATIC_CAPS"; "Unchanged"; "@MENU_BILINEAR_CAPS"; "Force Bilinear"; "@MENU_TRILINEAR_CAPS"; "Force Trilinear" }, setLocalVarBool ui_showApply 1 ) - FRAME_DVARSLIDER( 23, "@MENU_TEXTURE_ANISOTROPY_CAPS", r_texFilterAnisoMin, 1, 1, 16, setLocalVarBool ui_showApply 1 ) - FRAME_CHOICE_DVARFLOATLIST_VIS( 24, "@MENU_TEXTURE_QUALITY_CAPS", ui_r_picmip_manual, { "@MENU_AUTOMATIC_CAPS" 0 "@MENU_MANUAL_CAPS" 1 }, setLocalVarBool ui_showApply 1, 1 ) - FRAME_CHOICE_DVARFLOATLIST_VIS( 25, "@MENU_TEXTURE_RESOLUTION_CAPS", ui_r_picmip, { "@PLATFORM_LOW_CAPS" 3 "@MENU_NORMAL_CAPS" 2 "@PLATFORM_HIGH_CAPS" 1 "@MENU_EXTRA_CAPS" 0 }, setLocalVarBool ui_showApply 1, ( dvarint( ui_r_picmip_manual ) ) ) - FRAME_CHOICE_DVARFLOATLIST_VIS( 26, "@MENU_NORMAL_MAP_RESOLUTION_CAPS", ui_r_picmip_bump, { "@PLATFORM_LOW_CAPS" 3 "@MENU_NORMAL_CAPS" 2 "@PLATFORM_HIGH_CAPS" 1 "@MENU_EXTRA_CAPS" 0 }, setLocalVarBool ui_showApply 1, ( dvarint( ui_r_picmip_manual ) ) ) - FRAME_CHOICE_DVARFLOATLIST_VIS( 27, "@MENU_SPECULAR_MAP_RESOLUTION_CAPS", ui_r_picmip_spec, { "@PLATFORM_LOW_CAPS" 3 "@MENU_NORMAL_CAPS" 2 "@PLATFORM_HIGH_CAPS" 1 "@MENU_EXTRA_CAPS" 0 }, setLocalVarBool ui_showApply 1, ( dvarint( ui_r_picmip_manual ) ) ) - - FRAME_BUTTON_PC_RIGHT_OFFSET( NEW_FRAME_DEFAULT_WIDTH, NEW_FRAME_DEFAULT_HEIGHT, 0, - "@MENU_APPLY", - close self; - open apply_picmip_popmenu;, - when( localVarBool( ui_showApply ) ); ) - - //CHOICE_APPLY_VIS( "@MENU_APPLY", close self; open apply_picmip_popmenu, when( localVarBool( ui_showApply ) ) ) - - //CHOICE_BACK( "@MENU_BACK", close self; open options_graphics ) - - /* - itemDef - { - name graphic_warning - type ITEM_TYPE_BUTTON - text "@MENU_GRAPHICS_WARNING" - style WINDOW_STYLE_FILLED - textstyle ITEM_TEXTSTYLE_SHADOWED - rect 20 -116 240 240 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_BOTTOM - textfont UI_FONT_NORMAL - textalign ITEM_ALIGN_LEFT - textscale TEXTSIZE_SMALL - visible 1 - mouseEnter { play CHOICE_FOCUS_SOUND; } - decoration - autowrapped - } - */ - //CHOICE_FOOTNOTE( "@MENU_GRAPHICS_WARNING", 340, 340 ) - } - - menuDef - { - name apply_picmip_popmenu - fullScreen 0 - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop "" - onOpen - { - setLocalVarBool ui_showApply 0; - - execnow "setfromdvar r_picmip ui_r_picmip"; - execnow "setfromdvar r_picmip_bump ui_r_picmip_bump"; - execnow "setfromdvar r_picmip_spec ui_r_picmip_spec"; - execnow "setfromdvar r_picmip_manual ui_r_picmip_manual"; - exec "wait; wait; r_applyPicmip"; - close apply_picmip_popmenu; - open options_graphics_texture; - } - - // background black frame - PREPROC_SHADER_DRAW( 320 0 600 480, "white", 0.1 0.1 0.12 1 ) - - CHOICE_SECTION_TITLE( 1, "@MENU_APPLYING_CHANGES" ) - } -} diff --git a/mods/patch_mp/ui_mp/after_action_report.menu b/mods/patch_mp/ui_mp/after_action_report.menu deleted file mode 100644 index bad3bdb..0000000 --- a/mods/patch_mp/ui_mp/after_action_report.menu +++ /dev/null @@ -1,2127 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui_mp/stats_info.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui_mp/cac_viewer.inc" - -#define AAR_HEIGHT NEW_FRAME_DEFAULT_HEIGHT -#define AAR_WIDTH ( (AAR_HEIGHT * FRAME_ASPECT_RATIO) ) - -#undef HIGHLIGHT_COLOR -#define HIGHLIGHT_COLOR 0.3 0.35 0.55 0.25 - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/overlaybg.inc" -#include "ui_mp/popup_player_info.inc" -#include "ui_mp/fileshare.inc" -#include "ui_mp/tab_slider.inc" -#include "ui_mp/item_animate.inc" - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER - -#define AAR_AWARD_IMAGE_COLOR 0.8 0.68 0.47 0.6 -#define AAR_AWARD_IMAGE_COLOR_GREY 1 1 1 0.3 - -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#define AAR_BODY_X_START ( -AAR_WIDTH / 2 + 15 ) -#define AAR_BODY_Y_START ( -AAR_HEIGHT / 2 + 15 + NEW_FRAME_BG_Y_OFFSET( AAR_HEIGHT ) ) - -#define AAR_COLOR_YELLOW 0.98 0.83 0.25 1 - -#define CHOICE_TAB_TEXTSIZE TEXTSIZE_DEFAULT -#define TAB_1_TEXT ( locString( "@MPUI_SUMMARY_CAPS" ) ) -#define TAB_2_TEXT ( locString( "@MPUI_AWARDS_CAPS" ) ) -#define TAB_3_TEXT ( locString( "@MENU_SCOREBOARD_CAPS" ) ) - -#define WAGER_TAB_1_TEXT ( locString( "@MPUI_SUMMARY_CAPS" ) ) -#define WAGER_TAB_2_TEXT ( locString( "@MENU_SCOREBOARD_CAPS" ) ) - -#define TAB_BG_PAD 5 - -#define TAB_1_WIDTH ( getTextWidth( TAB_1_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_2_WIDTH ( getTextWidth( TAB_2_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_3_WIDTH ( getTextWidth( TAB_3_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) - -#define WAGER_TAB_1_WIDTH ( getTextWidth( WAGER_TAB_1_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define WAGER_TAB_2_WIDTH ( getTextWidth( WAGER_TAB_2_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) - -#define TAB_HEIGHT 15 - -#define AAR_TAB_1_X 4 -#define AAR_TAB_2_X ( AAR_TAB_1_X + TAB_1_WIDTH ) -#define AAR_TAB_3_X ( AAR_TAB_2_X + TAB_2_WIDTH ) - -#define AAR_WAGER_TAB_1_X AAR_TAB_1_X -#define AAR_WAGER_TAB_2_X ( AAR_WAGER_TAB_1_X + WAGER_TAB_1_WIDTH ) - -#define AAR_TAB_Y ( ( -AAR_HEIGHT / 2 ) + NEW_FRAME_HEADER_HEIGHT - TAB_HEIGHT ) - -#undef CHOICE_TEXTCOLOR -#define CHOICE_TEXTCOLOR NEW_FRAME_COMMON_TEXT_COLOR - -#ifdef CONSOLE -#define PREPROC_TEXT_DRAW_ADV_VIS_AAR( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, pvis, extraArgs, pageNumber, targetMenuNumber ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, pvis, extraArgs ) - -#define PREPROC_TEXT_DRAW_ADV_VIS_AAR_WAGER( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, pvis, extraArgs, pageNumber, targetMenuNumber ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, pvis, extraArgs ) -#else // #ifdef CONSOLE - -#define PREPROC_TEXT_DRAW_ADV_VIS_AAR( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, pvis, extraArgs, pageNumber, targetMenuNumber ) \ - PREPROC_TEXT_DRAW_ADV_ALL_AAR( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, CHOICE_TEXTFONT, CHOICE_TEXTSTYLE, pvis, extraArgs, pageNumber, targetMenuNumber ) - -#define PREPROC_TEXT_DRAW_ADV_ALL_AAR( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, pfont, pstyle, pvis, extraArgs, pageNumber, targetMenuNumber ) \ - itemDef \ - { \ - type ITEM_TYPE_BUTTON \ - rect 0 0 0 0 pHorizAlign pVertAlign \ - exp rect X( px ) \ - exp rect Y( py ) \ - exp rect W( pw ) \ - exp rect H( ph ) \ - textalign palign \ - textalignx palignx \ - textaligny paligny \ - textstyle pstyle \ - textfont pfont \ - textscale psize \ - forecolor pcolor \ - exp text( ptext ); \ - visible pvis \ - action \ - { \ - if( pageNumber == 1 ) \ - { \ - closeImmediate menu_aar_summary; \ - } \ - elseif( pageNumber == 2 ) \ - { \ - if( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_PERSONAL_BESTS ) \ - { closeImmediate menu_aar_awards_personal_bests; } \ - elseif ( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_STATS_MILESTONES ) \ - { closeImmediate menu_aar_awards_stats_milestones; } \ - elseif ( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_CONTRACTS ) \ - { closeImmediate menu_aar_awards_contracts; } \ - } \ - elseif( pageNumber == 3 ) \ - { \ - closeImmediate menu_aar_scoreboard; \ - } \ - if( targetMenuNumber == 1 ) \ - { \ - openImmediate menu_aar_summary; \ - } \ - elseif( targetMenuNumber == 2 ) \ - { \ - if( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_PERSONAL_BESTS ) \ - { openImmediate menu_aar_awards_personal_bests; } \ - elseif ( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_STATS_MILESTONES ) \ - { openImmediate menu_aar_awards_stats_milestones; } \ - elseif ( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_CONTRACTS ) \ - { openImmediate menu_aar_awards_contracts; } \ - } \ - elseif( targetMenuNumber == 3 ) \ - { \ - openImmediate menu_aar_scoreboard; \ - } \ - play CHOICE_FOCUS_SOUND; \ - } \ - mouseEnter \ - { \ - play CHOICE_FOCUS_SOUND; \ - } \ - extraArgs \ - } - -#define PREPROC_TEXT_DRAW_ADV_VIS_AAR_WAGER( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, pvis, extraArgs, pageNumber, targetMenuNumber ) \ - PREPROC_TEXT_DRAW_ADV_ALL_AAR_WAGER( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, CHOICE_TEXTFONT, CHOICE_TEXTSTYLE, pvis, extraArgs, pageNumber, targetMenuNumber ) - -#define PREPROC_TEXT_DRAW_ADV_ALL_AAR_WAGER( px, py, pw, ph, pHorizAlign, pVertAlign, ptext, psize, palignx, paligny, palign, pcolor, pfont, pstyle, pvis, extraArgs, pageNumber, targetMenuNumber ) \ - itemDef \ - { \ - type ITEM_TYPE_BUTTON \ - rect 0 0 0 0 pHorizAlign pVertAlign \ - exp rect X( px ) \ - exp rect Y( py ) \ - exp rect W( pw ) \ - exp rect H( ph ) \ - textalign palign \ - textalignx palignx \ - textaligny paligny \ - textstyle pstyle \ - textfont pfont \ - textscale psize \ - forecolor pcolor \ - exp text( ptext ); \ - visible pvis \ - action \ - { \ - if( pageNumber == 1 ) \ - { \ - closeImmediate menu_wager_aar_summary; \ - } \ - elseif( pageNumber == 2 ) \ - { \ - closeImmediate menu_aar_wager_scoreboard; \ - } \ - if( targetMenuNumber == 1 ) \ - { \ - openImmediate menu_wager_aar_summary; \ - } \ - elseif( targetMenuNumber == 2 ) \ - { \ - openImmediate menu_aar_wager_scoreboard; \ - } \ - play CHOICE_FOCUS_SOUND; \ - } \ - mouseEnter \ - { \ - play CHOICE_FOCUS_SOUND; \ - } \ - extraArgs \ - } - -#endif // #ifdef CONSOLE - -#define AAR_TAB_HEADERS( pageNumber ) \ - PREPROC_TEXT_DRAW_ADV_VIS_AAR( ( -AAR_WIDTH / 2 + AAR_TAB_1_X ), \ - AAR_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_1_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( pageNumber != 1 );, TAB_MOUSEOVER_HIGHLIGHT;, pageNumber, 1 ) \ - PREPROC_TEXT_DRAW_ADV_VIS_AAR( ( -AAR_WIDTH / 2 + AAR_TAB_1_X ), \ - AAR_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_1_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( pageNumber == 1 );, ;, pageNumber, 1 )\ - PREPROC_TEXT_DRAW_ADV_VIS_AAR( ( -AAR_WIDTH / 2 + AAR_TAB_2_X ), \ - AAR_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_2_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( pageNumber != 2 );, TAB_MOUSEOVER_HIGHLIGHT;, pageNumber, 2 ) \ - PREPROC_TEXT_DRAW_ADV_VIS_AAR( ( -AAR_WIDTH / 2 + AAR_TAB_2_X ), \ - AAR_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_2_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( pageNumber == 2 );, ;, pageNumber, 2 )\ - PREPROC_TEXT_DRAW_ADV_VIS_AAR( ( -AAR_WIDTH / 2 + AAR_TAB_3_X ), \ - AAR_TAB_Y, \ - TAB_3_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_3_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( pageNumber != 3 );, TAB_MOUSEOVER_HIGHLIGHT;, pageNumber, 3 ) \ - PREPROC_TEXT_DRAW_ADV_VIS_AAR( ( -AAR_WIDTH / 2 + AAR_TAB_3_X ), \ - AAR_TAB_Y, \ - TAB_3_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_3_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( pageNumber == 3 );, ;, pageNumber, 3 ) - -#define AAR_WAGER_TAB_HEADERS( pageNumber ) \ - PREPROC_TEXT_DRAW_ADV_VIS_AAR_WAGER( ( -AAR_WIDTH / 2 + AAR_WAGER_TAB_1_X ), \ - AAR_TAB_Y, \ - WAGER_TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - WAGER_TAB_1_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( pageNumber != 1 );, TAB_MOUSEOVER_HIGHLIGHT;, pageNumber, 1 ) \ - PREPROC_TEXT_DRAW_ADV_VIS_AAR_WAGER( ( -AAR_WIDTH / 2 + AAR_WAGER_TAB_1_X ), \ - AAR_TAB_Y, \ - WAGER_TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - WAGER_TAB_1_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( pageNumber == 1 );, ;, pageNumber, 1 ) \ - PREPROC_TEXT_DRAW_ADV_VIS_AAR_WAGER( ( -AAR_WIDTH / 2 + AAR_WAGER_TAB_2_X ), \ - AAR_TAB_Y, \ - WAGER_TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - WAGER_TAB_2_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( pageNumber != 2 );, TAB_MOUSEOVER_HIGHLIGHT;, pageNumber, 2 ) \ - PREPROC_TEXT_DRAW_ADV_VIS_AAR_WAGER( ( -AAR_WIDTH / 2 + AAR_WAGER_TAB_2_X ), \ - AAR_TAB_Y, \ - WAGER_TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - WAGER_TAB_2_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( pageNumber == 2 );, ;, pageNumber, 2 ) - -#define AAR_TAB_BG( px, pw, selected ) \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER_FRAMED \ - frame 16 0.2 FRAME_OPEN_BOTTOM \ - rect 0 AAR_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - exp rect X( ( -AAR_WIDTH / 2 + px ) ) \ - exp rect W( pw ) \ - background "menu_mp_tab_frame_inner" \ - forecolor 0.5 0.5 0.5 0.5 \ - visible when( selected ) \ - decoration \ - } \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER_FRAMED \ - frame 16 0.2 FRAME_OPEN_BOTTOM \ - rect 0 AAR_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - exp rect X( ( -AAR_WIDTH / 2 + px ) ) \ - exp rect W( pw ) \ - background "menu_mp_tab_frame_inner" \ - forecolor 1 1 1 1 \ - visible when( !selected ) \ - decoration \ - } - - -#define AAR_VIEW_AWARDS_PERSONAL_BESTS 0 -#define AAR_VIEW_AWARDS_STATS_MILESTONES 1 -#define AAR_VIEW_AWARDS_CONTRACTS 2 - -#define OPEN_PREVIOUS_MENU( currMenu, menu ) \ - if( currMenu == menu_aar_scoreboard ) \ - { \ - if( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_PERSONAL_BESTS ) \ - { openImmediate menu_aar_awards_personal_bests; } \ - elseif ( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_STATS_MILESTONES ) \ - { openImmediate menu_aar_awards_stats_milestones; } \ - elseif ( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_CONTRACTS ) \ - { openImmediate menu_aar_awards_contracts; } \ - } \ - else \ - { \ - openImmediate menu; \ - } - -#define OPEN_NEXT_MENU( currMenu, menu ) \ - if( currMenu == menu_aar_summary ) \ - { \ - if( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_PERSONAL_BESTS ) \ - { openImmediate menu_aar_awards_personal_bests; } \ - elseif ( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_STATS_MILESTONES ) \ - { openImmediate menu_aar_awards_stats_milestones; } \ - elseif ( dvarInt(ui_aar_current_view_num) == AAR_VIEW_AWARDS_CONTRACTS ) \ - { openImmediate menu_aar_awards_contracts; } \ - } \ - else \ - { \ - openImmediate menu; \ - } - -#define CHANGE_MENU_ACTION( currMenu, prevMenu, nextMenu ) \ - execKeyInt DPAD_LEFT { \ - closeImmediate currMenu; \ - OPEN_PREVIOUS_MENU( currMenu, prevMenu ) \ - } \ - execKeyInt DPAD_RIGHT { \ - closeImmediate currMenu; \ - OPEN_NEXT_MENU( currMenu, nextMenu ) \ - } \ - execKeyInt APAD_LEFT { \ - closeImmediate currMenu; \ - OPEN_PREVIOUS_MENU( currMenu, prevMenu ) \ - } \ - execKeyInt APAD_RIGHT { \ - closeImmediate currMenu; \ - OPEN_NEXT_MENU( currMenu, nextMenu ) \ - } \ - PC_TAB_SWITCH_ACTIONS( currMenu, prevMenu, nextMenu ) - -#define GET_AAR_STAT( statName ) \ - getDStat( "AfterActionReportStats", statName ) - -#define GET_AAR_STAT_WITH_INDEX( statName, statIndex ) \ - getDStat( "AfterActionReportStats", statName, statIndex ) - -#define SUMMARY_X_START ( -AAR_WIDTH / 2 + 25 ) -#define SUMMARY_DESC_Y_START (AAR_BODY_Y_START+20) - -#define SUMMARY_XP_BAR_Y_START (SUMMARY_DESC_Y_START+250) - -#define SUMMARY_XP_BAR_WIDTH (AAR_WIDTH - 160) - -#define PROGRESS_BAR_SPEED 1000 //milliseconds -#define CP_COUNTUP_SPEED 1000 //milliseconds - -#define BG_WIDTH 230 -#define BG_WIDTH_RIGHT_OFFSET (BG_WIDTH-67) - -#define RIGHT_BOX_WIDTH 250 -#define AWARDS_BOX_HEIGHT 120 -#define AWARD_SIZE 80 - -#define SUMMARY_RIGHT_X_START (SUMMARY_X_START+260) - -#define SUMMARY_RIGHT_DESC_Y_START (SUMMARY_DESC_Y_START+50) - -#define SUMMARY_RIGHT_DESC_WIDTH RIGHT_BOX_WIDTH - -#define NEMESIS_INFO_Y_START (SUMMARY_DESC_Y_START+145) - -#define NEMESIS_VIS_CONDITION ( GET_AAR_STAT( "NEMESISXUID" ) != 0 ) - -#define BAR_FIXED SUMMARY_XP_BAR_WIDTH*((getDStat( "PlayerStatsList", "RANKXP" )-int(tablelookup( "mp/ranktable.csv", 0, string(getDStat( "PlayerStatsList", "RANK" )), 2)))/int(tablelookup("mp/ranktable.csv",0,getDStat( "PlayerStatsList", "RANK" ),3))) -#define BAR_WIDTH BAR_FIXED*min( ((milliseconds()-dvarInt(ui_time_marker))/PROGRESS_BAR_SPEED), 1 ) -#define ANIMATE_BAR (dvarInt(ui_aar_xp_bar_width_multiplier) * BAR_WIDTH) - -#define REQUIRED_XP int(getDStat( "PlayerStatsList", "RANKXP" )-int(tablelookup( "mp/ranktable.csv", 0, string(getDStat( "PlayerStatsList", "RANK" )), 2))) -#define ANIMATE_NUM (dvarInt(ui_aar_xp_bar_width_multiplier)*int(min( REQUIRED_XP, REQUIRED_XP*((milliseconds()-dvarInt(ui_time_marker))/PROGRESS_BAR_SPEED) ))) - -#define XP_STRING string( dvarInt(ui_aar_xp_bar_width_multiplier) * int(min(GET_AAR_STAT( "XPEARNED" ), (GET_AAR_STAT( "XPEARNED" ) * ((milliseconds()-dvarInt(ui_time_marker))/PROGRESS_BAR_SPEED) ) )) ) -#define CP_INT ( dvarInt(ui_aar_cp_multiplier) * int(min(GET_AAR_STAT( "CPEARNED" ), (GET_AAR_STAT( "CPEARNED" ) * ((milliseconds()-dvarInt(ui_cp_time_marker))/CP_COUNTUP_SPEED) ) )) ) - -#define REQUIRED_XP_STRING (int(tablelookup( "mp/ranktable.csv", 0, string(getDStat( "PlayerStatsList", "RANK" )), 3 ))-ANIMATE_NUM) - -#define AAR_ESC_ACTION( menuName ) \ - deactivateblur; \ - if (IsInGame()) \ - { \ - hideMenu "pausedbkgnd"; \ - } \ - play uin_navigation_menu_lg_close; \ - execnow changemenucloseslidedirection menuName MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM; \ - close self; - -#ifdef CONSOLE -#define CLOSE_BUTTON( menuName ) \ - itemDef \ - { \ - type ITEM_TYPE_BUTTON \ - rect (AAR_WIDTH/2-8) ( AAR_HEIGHT / 2 + 18 ) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - text "@PLATFORM_CLOSE_AAR" \ - textfont UI_FONT_NORMAL \ - textscale TEXTSIZE_DEFAULT \ - textalign ITEM_ALIGN_BOTTOM_RIGHT \ - visible 1 \ - decoration \ - execkeyint BUTTON_A \ - { \ - AAR_ESC_ACTION( menuName ) \ - } \ - } -#else // #ifdef CONSOLE -#define CLOSE_BUTTON( menuName ) \ - NEW_FRAME_BUTTON_PC_LEFT_OFFSET( AAR_WIDTH, AAR_HEIGHT, 0, "@MENU_CLOSE", AAR_ESC_ACTION( menuName ), when(!dvarBool(ui_playercardOpen)) ) -#endif // #ifdef CONSOLE -{ - menuDef - { - name menu_aar_summary - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - control MENU_CONTROL_OPENER - onOpen - { - activateBlur; - if (IsInGame()) - { - showMenu "pausedbkgnd"; - } - if( dvarBool(ui_aar_animate_xp_bar) ) - { - setdvar ui_aar_cp_multiplier "0"; - setdvar ui_aar_xp_bar_width_multiplier "0"; - } - setdvar ui_hide_eog_menu "1"; - } - onFocus - { - if( dvarBool(ui_aar_animate_xp_bar) ) - { - ITEM_ANIMATE( menu_aar_summary, anim_controller, countUpNumbers, 50 ) - execNow set ui_aar_animate_xp_bar 0; - } - } - onClose - { - deactivateBlur; - setdvar ui_hide_eog_menu "0"; - } - onESC - { - AAR_ESC_ACTION( menu_aar_summary ) - } - - NEW_FRAME( AAR_WIDTH, AAR_HEIGHT ) - NEW_FRAME_TITLE( AAR_WIDTH, AAR_HEIGHT, "@MPUI_AFTER_ACTION_REPORT_CAPS", 1 ) - - AAR_TAB_BG( AAR_TAB_1_X, TAB_1_WIDTH, 1 ) - AAR_TAB_BG( AAR_TAB_2_X, TAB_2_WIDTH, 0 ) - AAR_TAB_BG( AAR_TAB_3_X, TAB_3_WIDTH, 0 ) - - AAR_TAB_HEADERS( 1 ) - - PLAYER_INFO_VIS( AAR_WIDTH, AAR_HEIGHT, 1 ) - - // This is a dummy itemDef that acts as the central hub for - // animation control - itemDef - { - name anim_controller - style WINDOW_STYLE_SHADER - rect 0 0 0 0 - visible 1 - decoration - - - state - { - name countUpNumbers - onEnter - { - if ( GET_AAR_STAT( "CPEARNED" ) > 0 ) - { - play uin_aar_cp_fill; - exec "setdvartotime ui_cp_time_marker"; - setdvar ui_aar_cp_multiplier "1"; - changeState animateXpBar CP_COUNTUP_SPEED; - } - else - { - changeState animateXpBar 0; - } - } - } - state - { - name animateXpBar - onEnter - { - if( BAR_FIXED > 0 ) - { - play uin_aar_xp_fill; - } - exec "setdvartotime ui_time_marker"; // animation start marker - exec set ui_aar_xp_bar_width_multiplier "1"; - } - } - } - - /* Label for "TOTAL CURRENCY EARNED" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CURRENCY_EARNED_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* TOTAL CURRENCY EARNED */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - locString( "@MENU_POINTS", CP_INT ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN_RGB 1, 1 ) - - /* Label for "TOTAL XP EARNED" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+20) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_TOTALXP_PRE_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* TOTAL XP EARNED */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START+20) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - "+"+XP_STRING, - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_YELLOW_RGB 1, 1 ) - - /* BG FOR SCORE */ - PREPROC_SHADER_DRAW( SUMMARY_X_START (SUMMARY_DESC_Y_START+40) BG_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - /* Label for "SCORE" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+45) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_MATCH_XP_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* SCORE */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START+45) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - GET_AAR_STAT( "SCORE" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "MATCH BONUS" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+65) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_MATCHBONUS_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* MATCH BONUS */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START+65) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - GET_AAR_STAT( "MATCHBONUS" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* BG FOR OTHER BONUSES */ - PREPROC_SHADER_DRAW( SUMMARY_X_START (SUMMARY_DESC_Y_START+80) BG_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - /* Label for "OTHER BONUSES" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+85) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_OTHER_BONUSES_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* OTHER BONUSES */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START+85) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - GET_AAR_STAT( "MISCBONUS" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - - /* Label for "AWARDS" */ - PREPROC_TEXT_DRAW_VIS( SUMMARY_RIGHT_X_START SUMMARY_DESC_Y_START 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_AWARDS_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - - /* BG FOR AWARDS */ - PREPROC_SHADER_DRAW( SUMMARY_RIGHT_X_START (SUMMARY_DESC_Y_START+15) RIGHT_BOX_WIDTH AWARDS_BOX_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - - /* AWARD IMAGES */ - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE/2-AWARD_SIZE) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_lobby_aar_award_best", AAR_AWARD_IMAGE_COLOR_GREY, when( GetAfterActionReportAwardsInfo( 0 ) <= 0 ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE/2) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_lobby_aar_award_challenge", AAR_AWARD_IMAGE_COLOR_GREY, when( GetAfterActionReportAwardsInfo( 1 ) <= 0 ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2+AWARD_SIZE/2) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_lobby_aar_award_ccontract", AAR_AWARD_IMAGE_COLOR_GREY, when( GetAfterActionReportAwardsInfo( 2 ) <= 0 && !dvarBool( "xblive_basictraining" ) ), ; ) - - /* AWARD IMAGES WHEN YOU ACTUALLY HAVE ONE OR MORE AWARD */ - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE/2-AWARD_SIZE) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_lobby_aar_award_best", AAR_AWARD_IMAGE_COLOR, when( GetAfterActionReportAwardsInfo( 0 ) > 0 ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE/2) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_lobby_aar_award_challenge", AAR_AWARD_IMAGE_COLOR, when( GetAfterActionReportAwardsInfo( 1 ) > 0 ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2+AWARD_SIZE/2) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_lobby_aar_award_ccontract", AAR_AWARD_IMAGE_COLOR, when( GetAfterActionReportAwardsInfo( 2 ) > 0 && !dvarBool( "xblive_basictraining" ) ), ; ) - - /* AWARD CAPTIONS */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE) (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+15-13) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_AAR_PERSONAL_BESTS_TITLE_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_BOTTOM_CENTER, CHOICE_TEXTCOLOR, 1 ) - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2) (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+15-13) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_AAR_CHALLENGES_TITLE_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_BOTTOM_CENTER, CHOICE_TEXTCOLOR, 1 ) - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2+AWARD_SIZE) (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+15-13) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_AAR_CONTRACTS_TITLE_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_BOTTOM_CENTER, CHOICE_TEXTCOLOR, when( !dvarBool( "xblive_basictraining" ) ) ) - - /* AWARD VALUES */ - PREPROC_TEXT_DRAW_ALL( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE) (SUMMARY_DESC_Y_START+25+AWARD_SIZE/2) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetAfterActionReportAwardsInfo( 0 ), - TEXTSIZE_LARGEST, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_ORANGE_RGB 1, UI_FONT_BIG, ITEM_TEXTSTYLE_NORMAL, when( GetAfterActionReportAwardsInfo( 0 ) > 0 ), ; ) - PREPROC_TEXT_DRAW_ALL( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2) (SUMMARY_DESC_Y_START+25+AWARD_SIZE/2) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetAfterActionReportAwardsInfo( 1 ), - TEXTSIZE_LARGEST, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_ORANGE_RGB 1, UI_FONT_BIG, ITEM_TEXTSTYLE_NORMAL, when( GetAfterActionReportAwardsInfo( 1 ) > 0 ), ; ) - PREPROC_TEXT_DRAW_ALL( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2+AWARD_SIZE) (SUMMARY_DESC_Y_START+25+AWARD_SIZE/2) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetAfterActionReportAwardsInfo( 2 ), - TEXTSIZE_LARGEST, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_ORANGE_RGB 1, UI_FONT_BIG, ITEM_TEXTSTYLE_NORMAL, when( GetAfterActionReportAwardsInfo( 2 ) > 0 && !dvarBool( "xblive_basictraining" ) ), ; ) - - PREPROC_TEXT_DRAW_ALL( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE) (SUMMARY_DESC_Y_START+25+AWARD_SIZE/2) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetAfterActionReportAwardsInfo( 0 ), - TEXTSIZE_LARGEST, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, UI_FONT_BIG, ITEM_TEXTSTYLE_NORMAL, when( GetAfterActionReportAwardsInfo( 0 ) <= 0 ), ; ) - PREPROC_TEXT_DRAW_ALL( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2) (SUMMARY_DESC_Y_START+25+AWARD_SIZE/2) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetAfterActionReportAwardsInfo( 1 ), - TEXTSIZE_LARGEST, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, UI_FONT_BIG, ITEM_TEXTSTYLE_NORMAL, when( GetAfterActionReportAwardsInfo( 1 ) <= 0 ), ; ) - PREPROC_TEXT_DRAW_ALL( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2+AWARD_SIZE) (SUMMARY_DESC_Y_START+25+AWARD_SIZE/2) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetAfterActionReportAwardsInfo( 2 ), - TEXTSIZE_LARGEST, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, UI_FONT_BIG, ITEM_TEXTSTYLE_NORMAL, when( GetAfterActionReportAwardsInfo( 2 ) <= 0 && !dvarBool( "xblive_basictraining" ) ), ; ) - - /* --------------------------------------------------------RIGHT SIDE SUMMARY START------------------------------------------------------------------- */ - - /* BG FOR KILLS/DEATHS RATIO */ - PREPROC_SHADER_DRAW( SUMMARY_X_START (SUMMARY_DESC_Y_START+120) BG_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - /* Label for "KILLS/DEATHS RATIO" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+125) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_KILL_DEATH_RATIO_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* KILLS/DEATHS RATIO */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START+125) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - getFloatAsFormattedString( ( GET_AAR_STAT( "KILLS" ) / max(GET_AAR_STAT( "DEATHS" ), 1) ), 2 ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "KILLS" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+145) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_KILLS_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* KILLS */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START+145) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - GET_AAR_STAT( "KILLS" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* BG FOR DEATHS */ - PREPROC_SHADER_DRAW( SUMMARY_X_START (SUMMARY_DESC_Y_START+160) BG_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - /* Label for "DEATHS" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+165) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_DEATHS_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* DEATHS */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START+165) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - GET_AAR_STAT( "DEATHS" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "BEST KILL STREAK" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+185) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_BEST_KILLSTREAK_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* BEST KILL STREAK */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START+185) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - GET_AAR_STAT( "BESTKILLSTREAK" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* BG FOR HEADSHOTS */ - PREPROC_SHADER_DRAW( SUMMARY_X_START (SUMMARY_DESC_Y_START+200) BG_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - /* Label for "HEADSHOTS" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+205) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_HEADSHOTS_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* HEADSHOTS */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+BG_WIDTH_RIGHT_OFFSET) (SUMMARY_DESC_Y_START+205) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - GET_AAR_STAT( "HEADSHOTS" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - - - /* Label for "NEMESIS" */ - PREPROC_TEXT_DRAW_VIS( SUMMARY_RIGHT_X_START (NEMESIS_INFO_Y_START+3) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_NEMESIS_TITLE_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* BG FOR NEMESIS */ - PREPROC_SHADER_DRAW( SUMMARY_RIGHT_X_START (NEMESIS_INFO_Y_START+15) SUMMARY_RIGHT_DESC_WIDTH 61 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - - /* EMBLEM FOR NEMESIS */ - itemDef - { - type ITEM_TYPE_OWNERDRAW - ownerdraw UI_PLAYER_EMBLEM - rect (SUMMARY_RIGHT_X_START+4) (NEMESIS_INFO_Y_START+19) 53 53 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - exp ownerdata( string( GET_AAR_STAT( "NEMESISXUID" ) ) ); - visible when( NEMESIS_VIS_CONDITION ) - decoration - } - - /* NEMESIS GAMERTAG */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+65) (NEMESIS_INFO_Y_START+19) 62 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_AAR_STAT( "NEMESISNAME" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( NEMESIS_VIS_CONDITION) ) - - #define NEMESIS_BUTTON_ACTION \ - if( NEMESIS_VIS_CONDITION ) \ - { \ - execNow set selectedPlayerXuid ( string( GET_AAR_STAT( "NEMESISXUID" ) ) ); \ - execnow set selectedFriendName ( GET_AAR_STAT( "NEMESISNAME" ) ); \ - execNow set ui_nemesisPlayercardOpen 1; \ - execNow set ui_friendsListOpen 0; \ - execNow set ui_playerListOpen 0; \ - execnow changemenucloseslidedirection menu_aar_summary MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - execnow changemenuopenslidedirection menu_aar_summary MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow changemenuopenslidedirection menu_playercard MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - close menu_aar_summary; \ - open menu_playercard; \ - } - - /* VIEW PLAYERCARD BUTTON */ - SIMPLE_CHOICE_BUTTON_ALL( "NemesisButton", (SUMMARY_RIGHT_X_START+65) (NEMESIS_INFO_Y_START+53) 62 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "@PLATFORM_VIEW_NEMESIS_PLAYERCARD", UI_FONT_NORMAL, TEXTSIZE_SMALL, ITEM_ALIGN_MIDDLE_CENTER, - when( NEMESIS_VIS_CONDITION ), - NEMESIS_BUTTON_ACTION ) - - - execkeyint BUTTON_Y - { - NEMESIS_BUTTON_ACTION - } - - - #define XP_TEXT_WIDTH 65 - #define NEXT_LEVEL ( tablelookup( "mp/ranktable.csv", 0, getDStat( "PlayerStatsList", "RANK" ) + 1, 14 ) ) - - /* NEMESIS RANK */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+XP_TEXT_WIDTH) (NEMESIS_INFO_Y_START+36) 62 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - (GET_AAR_STAT( "nemesisRank" )+1), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( NEMESIS_VIS_CONDITION ) ) - /* NEMESIS RANK ICON */ - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+XP_TEXT_WIDTH+20) (NEMESIS_INFO_Y_START+38) 16 16 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, tablelookup( "mp/rankIconTable.csv", 0, GET_AAR_STAT( "NEMESISRANK" ), GET_AAR_STAT( "NEMESISRANKICON" ) + 1 ), 1 1 1 1, when( NEMESIS_VIS_CONDITION && GET_AAR_STAT( "NEMESISRANK" ) > 0 ), ; ) - /* Label for "KILLS" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+160) (NEMESIS_INFO_Y_START+36) 62 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_KILLS_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, when( NEMESIS_VIS_CONDITION ) ) - /* NEMESIS KILLS */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+230) (NEMESIS_INFO_Y_START+36) 62 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_AAR_STAT( "nemesisKills" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( NEMESIS_VIS_CONDITION ) ) - /* Label for "KILLED BY" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+160) (NEMESIS_INFO_Y_START+53) 62 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_KILLED_BY_PRE_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, when( NEMESIS_VIS_CONDITION ) ) - /* KILLED BY */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+230) (NEMESIS_INFO_Y_START+53) 62 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_AAR_STAT( "nemesisKilledBy" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( NEMESIS_VIS_CONDITION ) ) - - /* BACKGROUND FOR XP BAR */ - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_X_START+XP_TEXT_WIDTH) SUMMARY_XP_BAR_Y_START SUMMARY_XP_BAR_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "white", BG_BACKCOLOR, - when( CAN_RANK_UP ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_X_START+XP_TEXT_WIDTH) SUMMARY_XP_BAR_Y_START SUMMARY_XP_BAR_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "menu_mp_bar_shadow", 1 1 1 0.2, - when( CAN_RANK_UP ), ; ) - /* XP BAR */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (SUMMARY_X_START+XP_TEXT_WIDTH), - SUMMARY_XP_BAR_Y_START, - (ANIMATE_BAR), - 20, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "menu_mp_combatrecord_bar", BAR_COLOR, - when( CAN_RANK_UP ), - name xp_bar; ) - /* Tiny arrow at xp bar end */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( -5 + (SUMMARY_X_START+XP_TEXT_WIDTH) + ANIMATE_BAR), - (SUMMARY_XP_BAR_Y_START+18), - 10, - 10, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "ui_arrow_right", BAR_COLOR, - when( CAN_RANK_UP );, - rotation -90; name xp_bar; ) - /* Label for "NEXT LEVEL" */ - PREPROC_TEXT_DRAW( SUMMARY_X_START SUMMARY_XP_BAR_Y_START SUMMARY_XP_BAR_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "@MPUI_NEXT_LEVEL_CAPS", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR ) - /* value for XP NEEDED to next level */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+XP_TEXT_WIDTH+10) SUMMARY_XP_BAR_Y_START SUMMARY_XP_BAR_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, locString( "MPUI_AAR_XP_NEEDED_CAPS", REQUIRED_XP_STRING ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP ) ) - /* next level */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+SUMMARY_XP_BAR_WIDTH+XP_TEXT_WIDTH+3) (SUMMARY_XP_BAR_Y_START+2) 15 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, int( NEXT_LEVEL ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP && PRESTIGE_NEXT==0 ) ) - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+SUMMARY_XP_BAR_WIDTH+XP_TEXT_WIDTH+3) (SUMMARY_XP_BAR_Y_START+2) 15 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "1", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP && PRESTIGE_NEXT ) ) - /* next level rank icon */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (SUMMARY_X_START+SUMMARY_XP_BAR_WIDTH+XP_TEXT_WIDTH+6+getTextWidth( NEXT_LEVEL, CHOICE_TEXTFONT, TEXTSIZE_DEFAULT )), - (SUMMARY_XP_BAR_Y_START+2), - 15, - 15, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - tablelookup( "mp/rankIconTable.csv", 0, getDStat( "PlayerStatsList", "RANK" )+1, getDStat( "PlayerStatsList", "PLEVEL" )+1 ), 1 1 1 1, - when( CAN_RANK_UP && PRESTIGE_NEXT==0 ), - ; ) - PREPROC_SHADER_DRAW_ADV_VIS_EX( (SUMMARY_XP_BAR_X_START+SUMMARY_XP_BAR_WIDTH+6+getTextWidth( "1", CHOICE_TEXTFONT, TEXTSIZE_DEFAULT )), - (SUMMARY_XP_BAR_Y_START+2), - 15, - 15, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - tablelookup( "mp/rankIconTable.csv", 0, 0, getDStat( "PlayerStatsList", "PLEVEL" )+2 ), 1 1 1 1, - when( CAN_RANK_UP && PRESTIGE_NEXT ), - ; ) - - CHANGE_MENU_ACTION( menu_aar_summary, menu_aar_scoreboard, menu_aar_awards_personal_bests ) - - /* PLACE IN FILE SHARE BUTTON */ - #define BUTTON_SPACING 20 - #define FILE_SHARE_BUTTON_OFFSET ( getTextWidth( locString( "@MENU_CLOSE" ), UI_FONT_NORMAL, TEXTSIZE_DEFAULT ) + 8 + BUTTON_SPACING ) - #define FILE_SHARE_BUTTON_ACTION \ - if ( getDStat( "AfterActionReportStats", "demoFileID" ) != "0" ) \ - { \ - execnow fileShareGetLastPlayedGame; \ - open menu_fileshare_aar_loading; \ - } - - //NEW_FRAME_BUTTON_PC_LEFT_OFFSET( AAR_WIDTH, AAR_HEIGHT, FILE_SHARE_BUTTON_OFFSET, "@PLATFORM_FILESHARE_PLACEGAMEINMYFILESHARE", - // FILE_SHARE_BUTTON_ACTION, - // when( getDStat( "AfterActionReportStats", "demoFileID" ) != "0" ) ) - -// execKeyInt BUTTON_X -// { -// FILE_SHARE_BUTTON_ACTION -// } - - CLOSE_BUTTON( menu_aar_summary ) - - #include "ui/safearea.menu" - } - - menuDef - { - name menu_aar_awards_personal_bests - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - control MENU_CONTROL_OPENER - onOpen - { - execNow set ui_aar_current_view_num AAR_VIEW_AWARDS_PERSONAL_BESTS; - setdvar ui_hide_eog_menu "1"; - } - onFocus { activateBlur; } - onClose - { - deactivateBlur; - setdvar ui_hide_eog_menu "0"; - } - onESC - { - AAR_ESC_ACTION( menu_aar_awards_personal_bests ) - } - - NEW_FRAME( AAR_WIDTH, AAR_HEIGHT ) - NEW_FRAME_TITLE( AAR_WIDTH, AAR_HEIGHT, "@MPUI_AFTER_ACTION_REPORT_CAPS", 1 ) - - AAR_TAB_BG( AAR_TAB_1_X, TAB_1_WIDTH, 0 ) - AAR_TAB_BG( AAR_TAB_2_X, TAB_2_WIDTH, 1 ) - AAR_TAB_BG( AAR_TAB_3_X, TAB_3_WIDTH, 0 ) - - AAR_TAB_HEADERS( 2 ) - - PLAYER_INFO_VIS( AAR_WIDTH, AAR_HEIGHT, 1 ) - -#ifdef CONSOLE - /* TITLE */ - PREPROC_TEXT_DRAW( (-AAR_WIDTH / 2) (AAR_BODY_Y_START-5) AAR_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@PLATFORM_TABBED_MENU_TITLE", "@MPUI_AAR_PERSONAL_BESTS_TITLE_CAPS" ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR ) -#else - SIMPLE_CHOICE_BUTTON_ARROWS_CENTERED( "aar_awards_personal_bests_title", 0, AAR_BODY_Y_START, 180, "@MPUI_AAR_PERSONAL_BESTS_TITLE_CAPS", - 1, execkeyhandler BUTTON_RSHLDR, execkeyhandler BUTTON_LSHLDR ) -#endif - -#define TOTAL_AAR_AWARDS_VIEWS 3 -#define CURRENT_AAR_AWARDS_VIEW 1 - - /* CURRENT VIEW NUMBER */ - PREPROC_TEXT_DRAW_VIS( (AAR_BODY_X_START+500) (AAR_BODY_Y_START+10) 280 28 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locstring( "MPUI_COMBAT_RECORD_VIEW_NUMBER", CURRENT_AAR_AWARDS_VIEW, TOTAL_AAR_AWARDS_VIEWS ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_LEFT, CHOICE_TEXTCOLOR, 1 ) - -#define AAR_PERSONAL_BESTS_X_START (AAR_BODY_X_START+5) -#define AAR_PERSONAL_BESTS_Y_START (AAR_BODY_Y_START+30) - -#define AAR_PERSONAL_BESTS_BG_WIDTH 170 -#define AAR_PERSONAL_BESTS_BG_HEIGHT 285 - -#define MAX_PERSONALBESTS_DISPLAYED 3 - -#define PERSONAL_BEST_INFO( index, visArg ) \ - /* IMAGE FOR PERSONAL BEST */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+13+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_WIDTH/11), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_lobby_aar_award_best", AAR_AWARD_IMAGE_COLOR_GREY, \ - when( GetPersonalBestDelta( index ) <= 0 && visArg );, \ - ; ) \ - /* IMAGE FOR PERSONAL BEST WHEN YOU HAVE BEATEN YOUR PERSONAL BEST */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+13+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_WIDTH/11), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_lobby_aar_award_best", AAR_AWARD_IMAGE_COLOR, \ - when( GetPersonalBestDelta( index ) > 0 && visArg );, \ - ; ) \ - /* NEW PERSONAL BEST VALUE, VISIBLE WHEN YOU HAVE BEATEN YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_ALL( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-100), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 1, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - GetPersonalBestValue( index ), \ - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_ORANGE_RGB 1, CHOICE_TEXTFONT, ITEM_TEXTSTYLE_NORMAL, \ - when( GetPersonalBestDelta( index ) > 0 && visArg );, \ - ; ) \ - /* NEW PERSONAL BEST NAME, VISIBLE WHEN YOU HAVE BEATEN YOUR PERSONAL BEST AND PREFIX IS NOT NULL */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 40, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - locString( "STATS_PERSONALBESTS_AAR_TEXT_WITH_PREFIX", "STATS_TYPE_"+GetPersonalBestPrefix( index ), "STATS_PERSONALBEST_"+GetPersonalBestName( index ) ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_CENTER, NEW_FRAME_ORANGE_RGB 1, \ - when( GetPersonalBestDelta( index ) > 0 && GetPersonalBestPrefix( index ) != "NULL" && visArg );, \ - autowrapped ) \ - /* NEW PERSONAL BEST NAME, VISIBLE WHEN YOU HAVE BEATEN YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 40, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - locString( "STATS_PERSONALBESTS_AAR_TEXT", "STATS_PERSONALBEST_"+GetPersonalBestName( index ) ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_CENTER, NEW_FRAME_ORANGE_RGB 1, \ - when( GetPersonalBestDelta( index ) > 0 && GetPersonalBestPrefix( index ) == "NULL" && visArg );, \ - autowrapped ) \ - /* LABEL FOR "NEW!", VISIBLE WHEN YOU HAVE BEATEN YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 1, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - "@STATS_NEW_CAPS", \ - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_TOP_CENTER, NEW_FRAME_ORANGE_RGB 1, \ - when( GetPersonalBestDelta( index ) > 0 && visArg );, \ - autowrapped ) \ - /* VALUE VISIBLE WHEN YOU HAVE TIED YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-100), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 1, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - GetPersonalBestValue( index ), \ - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_COMMON_TEXT_COLOR, \ - when( GetPersonalBestDelta( index ) == 0 && visArg );, \ - ; ) \ - /* NEW PERSONAL BEST NAME, VISIBLE WHEN YOU HAVE TIED YOUR PERSONAL BEST AND PREFIX IS NOT NULL*/ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 40, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - locString( "STATS_PERSONALBESTS_AAR_TEXT_WITH_PREFIX", "STATS_TYPE_"+GetPersonalBestPrefix( index ), "STATS_PERSONALBEST_"+GetPersonalBestName( index ) ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_CENTER, CHOICE_TEXTCOLOR, \ - when( GetPersonalBestDelta( index ) == 0 && GetPersonalBestPrefix( index ) != "NULL" && visArg );, \ - autowrapped ) \ - /* NEW PERSONAL BEST NAME, VISIBLE WHEN YOU HAVE TIED YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 40, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - locString( "STATS_PERSONALBESTS_AAR_TEXT", "STATS_PERSONALBEST_"+GetPersonalBestName( index ) ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_CENTER, CHOICE_TEXTCOLOR, \ - when( GetPersonalBestDelta( index ) == 0 && GetPersonalBestPrefix( index ) == "NULL" && visArg );, \ - autowrapped ) \ - /* LABEL FOR "TIED", VISIBLE WHEN YOU HAVE BEATEN YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 40, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - "@STATS_TIED_PERSONAL_BEST_CAPS", \ - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_COMMON_TEXT_COLOR, \ - when( GetPersonalBestDelta( index ) == 0 && visArg );, \ - autowrapped ) \ - /* LABEL FOR "CLOSE", VISIBLE WHEN YOU HAVE COME CLOSE TO BEATING YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 40, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - "@STATS_CLOSE_PERSONAL_BEST_CAPS", \ - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_COMMON_TEXT_COLOR, \ - when( GetPersonalBestDelta( index ) < 0 && visArg );, \ - autowrapped ) \ - /* VALUE FOR "GOT", VISIBLE WHEN YOU HAVE COME CLOSE TO BEATING YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-100), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 1, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - GetPersonalBestValue( index ), \ - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_COMMON_TEXT_COLOR, \ - when( GetPersonalBestDelta( index ) < 0 && visArg );, \ - ; ) \ - /* VALUE FOR "NEED", VISIBLE WHEN YOU HAVE COME CLOSE TO BEATING YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-60), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 20, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - locString("STATS_PERSONAL_BEST_NEEDED_VALUE_CAPS", ( GetPersonalBestValue( index ) - GetPersonalBestDelta( index ) ) ), \ - TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_LT_GREY_RGB 1, \ - when( GetPersonalBestDelta( index ) < 0 && visArg );, \ - ; ) \ - /* NEW PERSONAL BEST NAME, VISIBLE WHEN YOU HAVE COME CLOSE TO BEATING YOUR PERSONAL BEST AND PREFIX IS NOT NULL*/ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 40, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - locString( "STATS_PERSONALBESTS_AAR_TEXT_WITH_PREFIX", "STATS_TYPE_"+GetPersonalBestPrefix( index ), "STATS_PERSONALBEST_" + GetPersonalBestName( index ) ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_CENTER, CHOICE_TEXTCOLOR, \ - when( GetPersonalBestDelta( index ) < 0 && GetPersonalBestPrefix( index ) != "NULL" && visArg );, \ - autowrapped ) \ - /* NEW PERSONAL BEST NAME, VISIBLE WHEN YOU HAVE COME CLOSE TO BEATING YOUR PERSONAL BEST */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumPersonalBests(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 40, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - locString( "STATS_PERSONALBESTS_AAR_TEXT", "STATS_PERSONALBEST_"+GetPersonalBestName( index ) ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_CENTER, CHOICE_TEXTCOLOR, \ - when( GetPersonalBestDelta( index ) < 0 && GetPersonalBestPrefix( index ) == "NULL" && visArg );, \ - autowrapped ) - - PERSONAL_BEST_INFO( 0, ( GetNumPersonalBests() > 0 ) ) - PERSONAL_BEST_INFO( 1, ( GetNumPersonalBests() > 1 ) ) - PERSONAL_BEST_INFO( 2, ( GetNumPersonalBests() > 2 ) ) - - PREPROC_TEXT_DRAW_VIS( (-AAR_WIDTH / 2) 0 AAR_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_AAR_NO_NEW_PERSONAL_BESTS", TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, - CHOICE_TEXTCOLOR, when( GetNumPersonalBests() == 0 ) ) - - execKeyInt BUTTON_LSHLDR - { - closeImmediate self; - openImmediate menu_aar_awards_contracts; - } - execKeyInt BUTTON_RSHLDR - { - closeImmediate self; - openImmediate menu_aar_awards_stats_milestones; - } - - CHANGE_MENU_ACTION( menu_aar_awards_personal_bests, menu_aar_summary, menu_aar_scoreboard ) - - CLOSE_BUTTON( menu_aar_awards_personal_bests ) - - #include "ui/safearea.menu" - } - - menuDef - { - name menu_aar_awards_stats_milestones - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - control MENU_CONTROL_OPENER - onOpen - { - execNow set ui_aar_current_view_num AAR_VIEW_AWARDS_STATS_MILESTONES; - setdvar ui_hide_eog_menu "1"; - } - onFocus { activateBlur; } - onClose - { - deactivateBlur; - setdvar ui_hide_eog_menu "0"; - } - onESC - { - AAR_ESC_ACTION( menu_aar_awards_stats_milestones ) - } - - NEW_FRAME( AAR_WIDTH, AAR_HEIGHT ) - NEW_FRAME_TITLE( AAR_WIDTH, AAR_HEIGHT, "@MPUI_AFTER_ACTION_REPORT_CAPS", 1 ) - - AAR_TAB_BG( AAR_TAB_1_X, TAB_1_WIDTH, 0 ) - AAR_TAB_BG( AAR_TAB_2_X, TAB_2_WIDTH, 1 ) - AAR_TAB_BG( AAR_TAB_3_X, TAB_3_WIDTH, 0 ) - - AAR_TAB_HEADERS( 2 ) - - PLAYER_INFO_VIS( AAR_WIDTH, AAR_HEIGHT, 1 ) - -#ifdef CONSOLE - /* TITLE */ - PREPROC_TEXT_DRAW( (-AAR_WIDTH / 2) (AAR_BODY_Y_START-5) AAR_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@PLATFORM_TABBED_MENU_TITLE", "@MPUI_AAR_CHALLENGES_TITLE_CAPS" ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR ) -#else - SIMPLE_CHOICE_BUTTON_ARROWS_CENTERED( "aar_awards_stats_milestones_title", 0, AAR_BODY_Y_START, 180, "@MPUI_AAR_CHALLENGES_TITLE_CAPS", - 1, execkeyhandler BUTTON_RSHLDR, execkeyhandler BUTTON_LSHLDR ) -#endif - -#undef TOTAL_AAR_AWARDS_VIEWS -#define TOTAL_AAR_AWARDS_VIEWS 3 -#undef CURRENT_AAR_AWARDS_VIEW -#define CURRENT_AAR_AWARDS_VIEW 2 - - /* CURRENT VIEW NUMBER */ - PREPROC_TEXT_DRAW_VIS( (AAR_BODY_X_START+500) (AAR_BODY_Y_START+10) 280 28 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locstring( "MPUI_COMBAT_RECORD_VIEW_NUMBER", CURRENT_AAR_AWARDS_VIEW, TOTAL_AAR_AWARDS_VIEWS ), TEXTSIZE_SMALL, - 0, 0, ITEM_ALIGN_LEFT, CHOICE_TEXTCOLOR, 1 ) - - -#define STATS_MILESTONE_INFO( index, visArg ) \ - /* IMAGE FOR STATS MILESTONE */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+13+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumStatsMilestones(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_WIDTH/11), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_lobby_aar_award_challenge", AAR_AWARD_IMAGE_COLOR, \ - when( visArg ), \ - ; ) \ - /* LABEL FOR "NEW!", VISIBLE WHEN YOU HAVE A NEW STATS MILESTONE */ \ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumStatsMilestones(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 1, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - "@STATS_NEW_CAPS", \ - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_TOP_CENTER, NEW_FRAME_ORANGE_RGB 1, \ - when( visArg );, \ - autowrapped ) \ - /* NEW STATS MILESTONE VALUE */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumStatsMilestones(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-100), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 1, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - GetStatsMilestoneValue( index ), \ - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_ORANGE_RGB 1, \ - when( visArg );, \ - ; ) \ - /* NEW STATS MILESTONE NAME */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumStatsMilestones(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_HEIGHT-80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 20, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - GetStatsMilestoneName( index ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_CENTER, NEW_FRAME_ORANGE_RGB 1, \ - when( visArg );, \ - ; ) - - STATS_MILESTONE_INFO( 0, ( GetNumStatsMilestones() > 0 ) ) - STATS_MILESTONE_INFO( 1, ( GetNumStatsMilestones() > 1 ) ) - STATS_MILESTONE_INFO( 2, ( GetNumStatsMilestones() > 2 ) ) - - PREPROC_TEXT_DRAW_VIS( (-AAR_WIDTH / 2) 0 AAR_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "@MPUI_AAR_NO_NEW_STATS_MILESTONES", TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, when( GetNumStatsMilestones() == 0 || GET_AAR_STAT("PRIVATEMATCH") ) ) - - execKeyInt BUTTON_LSHLDR - { - closeImmediate self; - openImmediate menu_aar_awards_personal_bests; - } - execKeyInt BUTTON_RSHLDR - { - closeImmediate self; - openImmediate menu_aar_awards_contracts; - } - - CHANGE_MENU_ACTION( menu_aar_awards_stats_milestones, menu_aar_summary, menu_aar_scoreboard ) - - CLOSE_BUTTON( menu_aar_awards_stats_milestones ) - - #include "ui/safearea.menu" - } - -#define AAR_SCOREBOARD_COLUMN_SPACING 70 -#define AAR_SCOREBOARD_COLUMN_4_X 420 -#define AAR_SCOREBOARD_COLUMN_3_X ( AAR_SCOREBOARD_COLUMN_4_X - AAR_SCOREBOARD_COLUMN_SPACING ) -#define AAR_SCOREBOARD_COLUMN_2_X ( AAR_SCOREBOARD_COLUMN_3_X - AAR_SCOREBOARD_COLUMN_SPACING ) -#define AAR_SCOREBOARD_COLUMN_1_X ( AAR_SCOREBOARD_COLUMN_2_X - 50 ) -#define AAR_SCOREBOARD_COLUMN_SCORE_X ( AAR_SCOREBOARD_COLUMN_1_X - 50 ) - -#define AAR_DBLCLICK_ACTION( menuName ) \ - play CHOICE_FOCUS_SOUND; \ - execnow set selectedPlayerXuid ( getfeederdata( "xuid" ) ); \ - execnow set selectedFriendName ( getfeederdata( "name" ) ); \ - if( (getfeederdata( "xuid" ) != getXuid()) && (getfeederdata( "xuid" ) != 0) ) \ - { \ - hideMenu self; \ - if (IsInGame()) \ - { \ - showMenu "pausedbkgnd"; \ - } \ - execnow changemenuopenslidedirection menu_playercard MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - execNow openMenu menu_playercard; \ - } - -#define AAR_SCOREBOARD_LISTBOX( scoreboard_name, feederId, x, y, w, h, visArg, extraArgs, menuName ) \ - itemDef \ - { \ - name scoreboard_name \ - type ITEM_TYPE_LISTBOX \ - feeder feederId \ - rect x y w h HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - origin 0 0 \ - elementwidth 30 \ - elementheight 17 \ - elementtype LISTBOX_TEXT \ - textstyle ITEM_TEXTSTYLE_NORMAL \ - textfont UI_FONT_NORMAL \ - textscale TEXTSIZE_SMALL \ - forecolor 1 1 1 1 \ - focusColor 1 1 1 1 \ - disableColor 1 1 1 1 \ - elementHighlightColor 0 0 0 1 \ - noBlinkingHighlight \ - visible visArg \ - userarea 10 -1 0 (w-16) 19 24 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_NEMESIS_BG */ \ - -1 0 40 19 10 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_RANK_BG */ \ - 3 0 50 16 10 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_RANK */ \ - 16 1 16 16 32 ITEM_ALIGN_RIGHT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_RANK_ICON */ \ - 50 0 100 16 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_NAME */ \ - AAR_SCOREBOARD_COLUMN_SCORE_X 0 100 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_SCORE */ \ - AAR_SCOREBOARD_COLUMN_1_X 0 100 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_1 */ \ - AAR_SCOREBOARD_COLUMN_2_X 0 100 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_2 */ \ - AAR_SCOREBOARD_COLUMN_3_X 0 100 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_3 */ \ - AAR_SCOREBOARD_COLUMN_4_X 0 100 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_4 */ \ - \ - doubleclick \ - { \ - AAR_DBLCLICK_ACTION( menuName ) \ - } \ - \ - extraArgs \ - } - - menuDef - { - name menu_aar_awards_contracts - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - control MENU_CONTROL_OPENER - onOpen - { - execNow set ui_aar_current_view_num AAR_VIEW_AWARDS_CONTRACTS; - setdvar ui_hide_eog_menu "1"; - } - onFocus { activateBlur; } - onClose - { - deactivateBlur; - setdvar ui_hide_eog_menu "0"; - } - onESC - { - AAR_ESC_ACTION( menu_aar_awards_contracts ) - } - - NEW_FRAME( AAR_WIDTH, AAR_HEIGHT ) - NEW_FRAME_TITLE( AAR_WIDTH, AAR_HEIGHT, "@MPUI_AFTER_ACTION_REPORT_CAPS", 1 ) - - AAR_TAB_BG( AAR_TAB_1_X, TAB_1_WIDTH, 0 ) - AAR_TAB_BG( AAR_TAB_2_X, TAB_2_WIDTH, 1 ) - AAR_TAB_BG( AAR_TAB_3_X, TAB_3_WIDTH, 0 ) - - AAR_TAB_HEADERS( 2 ) - - PLAYER_INFO_VIS( AAR_WIDTH, AAR_HEIGHT, 1 ) - -#ifdef CONSOLE - /* TITLE */ - PREPROC_TEXT_DRAW( (-AAR_WIDTH / 2) (AAR_BODY_Y_START-5) AAR_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@PLATFORM_TABBED_MENU_TITLE", "@MPUI_AAR_CONTRACTS_TITLE_CAPS" ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR ) -#else - SIMPLE_CHOICE_BUTTON_ARROWS_CENTERED( "aar_awards_contracts_title", 0, AAR_BODY_Y_START, 180, "@MPUI_AAR_CONTRACTS_TITLE_CAPS", - 1, execkeyhandler BUTTON_RSHLDR, execkeyhandler BUTTON_LSHLDR ) -#endif - -#undef TOTAL_AAR_AWARDS_VIEWS -#define TOTAL_AAR_AWARDS_VIEWS 3 -#undef CURRENT_AAR_AWARDS_VIEW -#define CURRENT_AAR_AWARDS_VIEW 3 - - /* CURRENT VIEW NUMBER */ - PREPROC_TEXT_DRAW_VIS( (AAR_BODY_X_START+500) (AAR_BODY_Y_START+10) 280 28 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locstring( "MPUI_COMBAT_RECORD_VIEW_NUMBER", CURRENT_AAR_AWARDS_VIEW, TOTAL_AAR_AWARDS_VIEWS ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_LEFT, CHOICE_TEXTCOLOR, 1 ) - -#define CONTRACT_INFO( index, visArg ) \ - /* IMAGE FOR CONTRACT WHEN COMPLETE */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+13+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_WIDTH/11), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_lobby_aar_award_ccontract", AAR_AWARD_IMAGE_COLOR, \ - when( IsContractComplete( GetIndexForNthActiveContract( index+1 ) ) > 0 && visArg ), \ - ; ) \ - /* IMAGE FOR CONTRACT */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+13+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+AAR_PERSONAL_BESTS_BG_WIDTH/11), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - (AAR_PERSONAL_BESTS_BG_HEIGHT/2), \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_lobby_aar_award_ccontract", AAR_AWARD_IMAGE_COLOR_GREY, \ - when( !IsContractComplete( GetIndexForNthActiveContract( index+1 ) ) && visArg ), \ - ; ) \ - /* CONTRACT NAME */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 20, \ - CHOICE_HORIZONTAL_ALIGN, \ - CHOICE_VERTICAL_ALIGN, \ - GetContractName( GetIndexForNthActiveContract( index+1 ) ), \ - TEXTSIZE_DEFAULT, 0, 0, \ - ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_COMMON_TEXT_COLOR, when( visArg ); autowrapped, ; ) \ - /* CONTRACT REWARD TEXT */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+170), \ - AAR_PERSONAL_BESTS_BG_WIDTH, 20, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - GetContractRewardText( GetIndexForNthActiveContract( index+1 ), 1 ), \ - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_ORANGE_RGB 1, \ - when( IsContractComplete( GetIndexForNthActiveContract( index+1 ) ) > 0 && visArg ); autowrapped, ; ) \ - /* CONTRACT DESC */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+230), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 40, \ - CHOICE_HORIZONTAL_ALIGN, \ - CHOICE_VERTICAL_ALIGN, \ - GetContractDesc( GetIndexForNthActiveContract( index+1 ) ), \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_CENTER, NEW_FRAME_LT_GREY_RGB 1, when( visArg ); autowrapped, ; ) \ - /* CONTRACT PROGRESS TEXT ( TIME LEFT )*/ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+195), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 20, \ - CHOICE_HORIZONTAL_ALIGN, \ - CHOICE_VERTICAL_ALIGN, \ - secondsAsTime( GetContractCombatTimeLeft( GetIndexForNthActiveContract( index+1 ) ) ), \ - TEXTSIZE_DEFAULT, 0, 0, \ - ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_COMMON_TEXT_COLOR, \ - when( IsContractInProgress( GetIndexForNthActiveContract( index+1 ) ) > 0 && visArg ), ; ) \ - /* CONTRACT PROGRESS TEXT ( ACTUAL PROGRESS ) */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+170), AAR_PERSONAL_BESTS_BG_WIDTH, \ - 20, \ - CHOICE_HORIZONTAL_ALIGN, \ - CHOICE_VERTICAL_ALIGN, \ - locString("MPUI_CONTRACT_PROGRESS_SHORT", GetContractProgress( GetIndexForNthActiveContract( index+1 ) ), GetContractRequiredCount( GetIndexForNthActiveContract( index+1 ) ), int( ( GetContractProgress( GetIndexForNthActiveContract( index+1 ) ) ) * 100 / ( GetContractRequiredCount( GetIndexForNthActiveContract( index+1 ) ) ) ) ), \ - TEXTSIZE_SUBTITLE, 0, 0, \ - ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_COMMON_TEXT_COLOR, \ - when( IsContractInProgress( GetIndexForNthActiveContract( index+1 ) ) > 0 && visArg ), ; ) \ - /* CONTRACT STATUS WHEN IN PROGRESS */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 20, \ - CHOICE_HORIZONTAL_ALIGN, \ - CHOICE_VERTICAL_ALIGN, \ - "@MENU_IN_PROGRESS_CAPS", TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_COMMON_TEXT_COLOR, when( IsContractInProgress( GetIndexForNthActiveContract( index+1 ) ) && visArg ), ; ) \ - /* CONTRACT STATUS WHEN COMPLETED */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 20, \ - CHOICE_HORIZONTAL_ALIGN,\ - CHOICE_VERTICAL_ALIGN, \ - "@MPUI_AAR_CONTRACT_COMPLETE_CAPS", TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_ORANGE_RGB 1, when( IsContractComplete( GetIndexForNthActiveContract( index+1 ) ) > 0 && visArg ), ; ) \ - /* CONTRACT STATUS WHEN EXPIRED */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( (AAR_PERSONAL_BESTS_X_START+(AAR_PERSONAL_BESTS_BG_WIDTH+10)*( ( MAX_PERSONALBESTS_DISPLAYED - min( GetNumActiveContracts(), MAX_PERSONALBESTS_DISPLAYED ) ) / ( MAX_PERSONALBESTS_DISPLAYED - 1 ) ) + ( index * (AAR_PERSONAL_BESTS_BG_WIDTH+10) ) ) ), \ - (AAR_PERSONAL_BESTS_Y_START+80), \ - AAR_PERSONAL_BESTS_BG_WIDTH, \ - 20, \ - CHOICE_HORIZONTAL_ALIGN, \ - CHOICE_VERTICAL_ALIGN, \ - "@MPUI_CONTRACT_EXPIRED_CAPS", TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_COMMON_TEXT_COLOR, when( IsContractExpired( GetIndexForNthActiveContract( index+1 ) ) > 0 && visArg ), ; ) - - CONTRACT_INFO( 0, ( GetNumActiveContracts() > 0 && !dvarBool( "xblive_basictraining" ) ) ) - CONTRACT_INFO( 1, ( GetNumActiveContracts() > 1 && !dvarBool( "xblive_basictraining" ) ) ) - CONTRACT_INFO( 2, ( GetNumActiveContracts() > 2 && !dvarBool( "xblive_basictraining" ) ) ) - -#define NO_ACTIVE_CONTRACTS \ - (GetIndexForActiveContract(0) == -1 && GetIndexForActiveContract(1) == -1 && GetIndexForActiveContract(2) == -1) - - PREPROC_TEXT_DRAW_VIS( (-AAR_WIDTH / 2) 0 AAR_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_AAR_NO_NEW_CONTRACTS", TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, when( NO_ACTIVE_CONTRACTS && !dvarBool( "xblive_basictraining" ) ) ) - - /* Dont show contract info for basic training */ - PREPROC_TEXT_DRAW_VIS( (-AAR_WIDTH / 2) 0 AAR_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_NOT_APPLICABLE_IN_COMBAT_TRAINING", TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, when( dvarBool( "xblive_basictraining" ) ) ) - - - execKeyInt BUTTON_LSHLDR - { - closeImmediate self; - openImmediate menu_aar_awards_stats_milestones; - } - execKeyInt BUTTON_RSHLDR - { - closeImmediate self; - openImmediate menu_aar_awards_personal_bests; - } - - execkeyint BUTTON_A - { - AAR_ESC_ACTION( menu_aar_awards_contracts ) - } - - CHANGE_MENU_ACTION( menu_aar_awards_contracts, menu_aar_summary, menu_aar_scoreboard ) - - CLOSE_BUTTON( menu_aar_awards_contracts ) - - #include "ui/safearea.menu" - } - - menuDef - { - name menu_aar_scoreboard - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - control MENU_CONTROL_OPENER - #ifdef PC - onOpen - { - setdvar ui_hide_eog_menu "1"; - setdvar ui_aarScoreboardOpen "1"; - } - #endif - onFocus - { - activateBlur; - setFocus scoreboard_listbox; - } - onClose - { - deactivateBlur; - setdvar ui_hide_eog_menu "0"; - setdvar ui_aarScoreboardOpen "0"; - } - onESC - { - AAR_ESC_ACTION( menu_aar_scoreboard ) - } - - NEW_FRAME( AAR_WIDTH, AAR_HEIGHT ) - NEW_FRAME_TITLE( AAR_WIDTH, AAR_HEIGHT, "@MPUI_AFTER_ACTION_REPORT_CAPS", 1 ) - - AAR_TAB_BG( AAR_TAB_1_X, TAB_1_WIDTH, 0 ) - AAR_TAB_BG( AAR_TAB_2_X, TAB_2_WIDTH, 0 ) - AAR_TAB_BG( AAR_TAB_3_X, TAB_3_WIDTH, 1 ) - - AAR_TAB_HEADERS( 3 ) - - PLAYER_INFO_VIS( AAR_WIDTH, AAR_HEIGHT, 1 ) - - /* LABEL FOR COLUMN "SCORE" */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_SCORE_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_SCORE_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 1 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_1_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 0 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 2 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_2_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 1 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 3 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_3_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 2 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 4 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_4_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 3 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - - /* SCOREBOARD */ - AAR_SCOREBOARD_LISTBOX( scoreboard_listbox, FEEDER_AAR_SCOREBOARD, (AAR_BODY_X_START+5), (AAR_BODY_Y_START+5), (AAR_WIDTH-40+16), (AAR_HEIGHT-65), 1, ;, menu_aar_scoreboard ) - - CHANGE_MENU_ACTION( menu_aar_scoreboard, menu_aar_awards_personal_bests, menu_aar_summary ) - - CLOSE_BUTTON( menu_aar_scoreboard ) - - #include "ui/safearea.menu" - } - - menuDef - { - name menu_aar_wager_scoreboard - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - control MENU_CONTROL_OPENER - #ifdef PC - onOpen - { - setdvar ui_hide_eog_menu "1"; - setdvar ui_aarWagerScoreboardOpen "1"; - } - #endif - onFocus - { - activateBlur; - setFocus scoreboard_listbox; - } - onClose - { - deactivateBlur; - setdvar ui_hide_eog_menu "0"; - setdvar ui_aarWagerScoreboardOpen "0"; - } - onESC - { - AAR_ESC_ACTION( menu_aar_wager_scoreboard ) - } - - NEW_FRAME( AAR_WIDTH, AAR_HEIGHT ) - NEW_FRAME_TITLE( AAR_WIDTH, AAR_HEIGHT, "@MPUI_EARNINGS_REPORT_CAPS", 1 ) - - AAR_TAB_BG( AAR_WAGER_TAB_1_X, WAGER_TAB_1_WIDTH, 0 ) - AAR_TAB_BG( AAR_WAGER_TAB_2_X, WAGER_TAB_2_WIDTH, 1 ) - - AAR_WAGER_TAB_HEADERS( 2 ) - - PLAYER_INFO_VIS( AAR_WIDTH, AAR_HEIGHT, 1 ) - - /* LABEL FOR COLUMN "SCORE" */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_SCORE_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_SCORE_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 1 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_1_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 0 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 2 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_2_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 1 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 3 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_3_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 2 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 4 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+7+AAR_SCOREBOARD_COLUMN_4_X-16) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 3 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - - /* SCOREBOARD */ - AAR_SCOREBOARD_LISTBOX( scoreboard_listbox, FEEDER_AAR_SCOREBOARD, (AAR_BODY_X_START+5), (AAR_BODY_Y_START+5), (AAR_WIDTH-40+16), (AAR_HEIGHT-65), 1, ;, menu_aar_wager_scoreboard ) - - CHANGE_MENU_ACTION( menu_aar_wager_scoreboard, menu_wager_aar_summary, menu_wager_aar_summary ) - - CLOSE_BUTTON( menu_aar_wager_scoreboard ) - - #include "ui/safearea.menu" - } - - #undef SUMMARY_DESC_Y_START - #define SUMMARY_DESC_Y_START (AAR_BODY_Y_START+7) - - #define WEAPON_WIDTH 180 - #define WEAPON_HEIGHT 90 - #define YOUR_TOP_WEAPON_Y (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+25) - #define AWARD_TEXT_SIZE (AWARD_SIZE) - - #define WAGER_AWARD_IMAGES( itemArg, xArg, iconArg ) \ - PREPROC_SHADER_DRAW_VIS_EX( (xArg-(AWARD_SIZE*1.8)/2+4) (SUMMARY_DESC_Y_START+25+AWARD_SIZE/2-(AWARD_SIZE*1.8)/2) (AWARD_SIZE*1.8) (AWARD_SIZE*1.8) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_medal_burst_yellow", 1 1 1 0.7, when( GET_AAR_STAT_WITH_INDEX( "wagerAwards", itemArg-1 ) > 0 );, rotation 45; ) \ - PREPROC_SHADER_DRAW_VIS_EX( (xArg-AWARD_SIZE/2) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, iconArg, 1 1 1 0.1, when( GET_AAR_STAT_WITH_INDEX( "wagerAwards", itemArg-1 ) <= 0 );, ; ) \ - PREPROC_SHADER_DRAW_VIS_EX( (xArg-AWARD_SIZE/2) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, iconArg, AAR_AWARD_IMAGE_COLOR, when( GET_AAR_STAT_WITH_INDEX( "wagerAwards", itemArg-1 ) > 0 );, ; ) \ - PREPROC_TEXT_DRAW_ALL( (xArg-AWARD_SIZE/2) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, GET_AAR_STAT_WITH_INDEX( "wagerAwards", itemArg-1 ), TEXTSIZE_LARGEST, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 0.1, UI_FONT_BIG, ITEM_TEXTSTYLE_NORMAL, when( GET_AAR_STAT_WITH_INDEX( "wagerAwards", itemArg-1 ) <= 0 );, ; ) \ - PREPROC_TEXT_DRAW_ALL( (xArg-AWARD_SIZE/2) (SUMMARY_DESC_Y_START+25) AWARD_SIZE AWARD_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, GET_AAR_STAT_WITH_INDEX( "wagerAwards", itemArg-1 ), TEXTSIZE_LARGEST, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, UI_FONT_BIG, ITEM_TEXTSTYLE_NORMAL, when( GET_AAR_STAT_WITH_INDEX( "wagerAwards", itemArg-1 ) > 0 );, ; ) - - #define WAGER_AWARD_TEXT1( textArg, gametypeArg ) \ - PREPROC_TEXT_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE-AWARD_TEXT_SIZE/2) (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+15-40) AWARD_TEXT_SIZE 40 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - textArg, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 0.1, when( ( GetWagerGametypeNameFromEnum( GET_AAR_STAT("gametype") ) == gametypeArg ) && ( GET_AAR_STAT_WITH_INDEX( "wagerAwards", 0 ) <= 0 ) );, autowrapped; ) \ - PREPROC_TEXT_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE-AWARD_TEXT_SIZE/2) (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+15-40) AWARD_TEXT_SIZE 40 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - textArg, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, when( ( GetWagerGametypeNameFromEnum( GET_AAR_STAT("gametype") ) == gametypeArg ) && ( GET_AAR_STAT_WITH_INDEX( "wagerAwards", 0 ) > 0 ) );, autowrapped; ) - #define WAGER_AWARD_TEXT2( textArg, gametypeArg ) \ - PREPROC_TEXT_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_TEXT_SIZE/2) (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+15-40) AWARD_TEXT_SIZE 40 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - textArg, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 0.1, when( ( GetWagerGametypeNameFromEnum( GET_AAR_STAT("gametype") ) == gametypeArg ) && ( GET_AAR_STAT_WITH_INDEX( "wagerAwards", 1 ) <= 0 ) ), autowrapped; ) \ - PREPROC_TEXT_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_TEXT_SIZE/2) (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+15-40) AWARD_TEXT_SIZE 40 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - textArg, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, when( ( GetWagerGametypeNameFromEnum( GET_AAR_STAT("gametype") ) == gametypeArg ) && ( GET_AAR_STAT_WITH_INDEX( "wagerAwards", 1 ) > 0 ) ), autowrapped; ) - #define WAGER_AWARD_TEXT3( textArg, gametypeArg ) \ - PREPROC_TEXT_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2+AWARD_SIZE-AWARD_TEXT_SIZE/2) (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+15-40) AWARD_TEXT_SIZE 40 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - textArg, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 0.1, when( ( GetWagerGametypeNameFromEnum( GET_AAR_STAT("gametype") ) == gametypeArg ) && ( GET_AAR_STAT_WITH_INDEX( "wagerAwards", 2 ) <= 0 ) );, autowrapped; ) \ - PREPROC_TEXT_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2+AWARD_SIZE-AWARD_TEXT_SIZE/2) (SUMMARY_DESC_Y_START+AWARDS_BOX_HEIGHT+15-40) AWARD_TEXT_SIZE 40 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - textArg, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, when( ( GetWagerGametypeNameFromEnum( GET_AAR_STAT("gametype") ) == gametypeArg ) && ( GET_AAR_STAT_WITH_INDEX( "wagerAwards", 2 ) > 0 ) );, autowrapped; ) - - menuDef - { - name menu_wager_aar_summary - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - control MENU_CONTROL_OPENER - onOpen - { - activateBlur; - setdvar ui_hide_eog_menu "1"; - } - onFocus - { - } - onClose - { - deactivateBlur; - setdvar ui_hide_eog_menu "0"; - } - onESC - { - AAR_ESC_ACTION( menu_wager_aar_summary ) - } - - NEW_FRAME( AAR_WIDTH, AAR_HEIGHT ) - NEW_FRAME_TITLE( AAR_WIDTH, AAR_HEIGHT, "@MPUI_EARNINGS_REPORT_CAPS", 1 ) - - AAR_TAB_BG( AAR_WAGER_TAB_1_X, WAGER_TAB_1_WIDTH, 1 ) - AAR_TAB_BG( AAR_WAGER_TAB_2_X, WAGER_TAB_2_WIDTH, 0 ) - AAR_WAGER_TAB_HEADERS( 1 ) - - PLAYER_INFO_VIS( AAR_WIDTH, AAR_HEIGHT, 1 ) - - // This is a dummy itemDef that acts as the central hub for - // animation control - itemDef - { - name anim_controller - style WINDOW_STYLE_SHADER - rect 0 0 0 0 - visible 1 - decoration - } - - // Placement medals - #define PLACEMENT_MEDAL_SIZE 64 - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_X_START+85) (SUMMARY_DESC_Y_START+28) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_first", 1 1 1 1, when( GetWagerPlaceForMatchScoreboard( GetIndexIntoMatchScoreboard() ) == 1 ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_X_START+85) (SUMMARY_DESC_Y_START+28) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_second", 1 1 1 1, when( GetWagerPlaceForMatchScoreboard( GetIndexIntoMatchScoreboard() ) == 2 ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_X_START+85) (SUMMARY_DESC_Y_START+28) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_third", 1 1 1 1, when( GetWagerPlaceForMatchScoreboard( GetIndexIntoMatchScoreboard() ) == 3 ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_X_START+85) (SUMMARY_DESC_Y_START+28) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_fourth", 1 1 1 1, when( GetWagerPlaceForMatchScoreboard( GetIndexIntoMatchScoreboard() ) > 3 ), ; ) - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+85-0.5) (SUMMARY_DESC_Y_START+28) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetWagerPlaceForMatchScoreboard( GetIndexIntoMatchScoreboard() ), - TEXTSIZE_LARGEST, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 0.3, when( GetWagerPlaceForMatchScoreboard( GetIndexIntoMatchScoreboard() ) > 3 ); ) - - /* Label for "YOU PLACED XTH!" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+115) (SUMMARY_DESC_Y_START) 1 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@MPUI_YOU_PLACED_CAPS", "@MPUI_ORDINAL_CAPS_"+GetWagerPlaceForMatchScoreboard( GetIndexIntoMatchScoreboard() ) ), - TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_TOP_CENTER, CHOICE_TEXTCOLOR, 1 ) - - /* Label for "CURRENCY EARNED" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+108) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CURRENCY_EARNED_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* CURRENCY */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+220) (SUMMARY_DESC_Y_START+108) 1 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - locString( "@MENU_POINTS", GetWagerWinningsFromMatchScoreboard( GetIndexIntoMatchScoreboard() ) ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN_RGB 1, when( GetWagerWinningsFromMatchScoreboard( GetIndexIntoMatchScoreboard() ) > 0 ) ) - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+220) (SUMMARY_DESC_Y_START+108) 1 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - locString( "@MENU_POINTS", GetWagerWinningsFromMatchScoreboard( GetIndexIntoMatchScoreboard() ) ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREY_RGB 1, when( GetWagerWinningsFromMatchScoreboard( GetIndexIntoMatchScoreboard() ) <= 0 ) ) - /* Label for "CAREER WINNINGS" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+125) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CAREER_WINNINGS_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* CAREER WINNINGS */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+220) (SUMMARY_DESC_Y_START+125) 1 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - locString( "@MENU_POINTS", GetDStat( "PlayerStatsList", "LIFETIME_EARNINGS" ) ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN_RGB 1, when( GetDStat( "PlayerStatsList", "LIFETIME_EARNINGS" ) > 0 ) ) - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+220) (SUMMARY_DESC_Y_START+125) 1 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - locString( "@MENU_POINTS", GetDStat( "PlayerStatsList", "LIFETIME_EARNINGS" ) ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREY_RGB 1, when( GetDStat( "PlayerStatsList", "LIFETIME_EARNINGS" ) <= 0 ) ) - - itemDef - { - type ITEM_TYPE_LISTBOX - feeder FEEDER_AAR_SCOREBOARD_WAGER - rect SUMMARY_X_START (YOUR_TOP_WEAPON_Y+10) BG_WIDTH (AWARDS_BOX_HEIGHT+5) HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - elementwidth 30 - elementheight 20 - elementtype LISTBOX_TEXT - textstyle ITEM_TEXTSTYLE_NORMAL - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SMALL - textAligny -2 - forecolor 0 0 0 0.1 - focusColor NEW_FRAME_ORANGE_RGB 1 - disableColor 1 1 1 1 - noBlinkingHighlight - noscrollbars - visible 1 - decoration - userarea 9 0 2 230 20 24 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_NEMESIS_BG */ - 10 2 50 20 10 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* NOT USED: SCOREBOARD_COLUMN_RANK_BG */ - 10 2 50 20 10 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_RANK */ - 23 3 16 16 32 ITEM_ALIGN_RIGHT ITEM_ALIGN_TOP /* NOT USED: SCOREBOARD_COLUMN_RANK_ICON */ - 35 2 100 20 32 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_NAME */ - 120 2 100 20 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_SCORE */ - 320 0 100 20 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_TOP /* NOT USED: SCOREBOARD_COLUMN_KILLS */ - 370 0 100 20 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_TOP /* NOT USED: SCOREBOARD_COLUMN_ASSISTS */ - 420 0 100 20 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_TOP /* NOT USED: SCOREBOARD_COLUMN_DEATHS */ - } - - /* --------------------------------------------------------RIGHT SIDE SUMMARY START------------------------------------------------------------------- */ - - /* Label for "AWARDS" */ - PREPROC_TEXT_DRAW_VIS( SUMMARY_RIGHT_X_START SUMMARY_DESC_Y_START 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_AWARDS_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* BG FOR AWARDS */ - PREPROC_SHADER_DRAW( SUMMARY_RIGHT_X_START (SUMMARY_DESC_Y_START+15) RIGHT_BOX_WIDTH AWARDS_BOX_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - - /* AWARD IMAGES */ - WAGER_AWARD_IMAGES( 1, (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-AWARD_SIZE), "menu_mp_lobby_aar_wager01" ) - WAGER_AWARD_IMAGES( 2, (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2), "menu_mp_lobby_aar_wager02" ) - WAGER_AWARD_IMAGES( 3, (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2+AWARD_SIZE), "menu_mp_lobby_aar_wager03" ) - - /* ONE IN THE CHAMBER AWARD TEXT */ - WAGER_AWARD_TEXT1( "@MPUI_STABS_CAPS", "oic" ) - WAGER_AWARD_TEXT2( "@MPUI_LONGSHOTS_CAPS", "oic" ) - WAGER_AWARD_TEXT3( "@MPUI_KILL_STREAK_CAPS", "oic" ) - - /* STICKS AND STONES AWARD TEXT */ - WAGER_AWARD_TEXT1( "@MPUI_TOMAHAWKS_CAPS", "hlnd" ) - WAGER_AWARD_TEXT2( "@MPUI_STICKS_CAPS", "hlnd" ) - WAGER_AWARD_TEXT3( "@MPUI_KILL_STREAK_CAPS", "hlnd" ) - - /* GUN GAME AWARD TEXT */ - WAGER_AWARD_TEXT1( "@MPUI_STABS_CAPS", "gun" ) - WAGER_AWARD_TEXT2( "@MPUI_HEADSHOTS_CAPS", "gun" ) - WAGER_AWARD_TEXT3( "@MPUI_KILL_STREAK_CAPS", "gun" ) - - /* SHARPSHOOTER AWARD TEXT */ - WAGER_AWARD_TEXT1( "@MPUI_X2KILLS_CAPS", "shrp" ) - WAGER_AWARD_TEXT2( "@MPUI_HEADSHOTS_CAPS", "shrp" ) - WAGER_AWARD_TEXT3( "@MPUI_KILL_STREAK_CAPS", "shrp" ) - - /* Label for "YOUR TOP WEAPON" */ - PREPROC_TEXT_DRAW_VIS( SUMMARY_RIGHT_X_START YOUR_TOP_WEAPON_Y 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_YOUR_TOP_WEAPON_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* BG FOR "YOUR TOP WEAPON" */ - PREPROC_SHADER_DRAW( SUMMARY_RIGHT_X_START (YOUR_TOP_WEAPON_Y+15) RIGHT_BOX_WIDTH AWARDS_BOX_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - -#define TOP_WEAPON_ITEM_REF ( GetItemRef( GET_AAR_STAT( "topWeaponItemIndex" ) ) ) -#define IS_SPECIAL_TOP_WEAPON ( ( TOP_WEAPON_ITEM_REF == "killstreak_minigun" ) || \ - ( TOP_WEAPON_ITEM_REF == "killstreak_m202_flash" ) || \ - ( TOP_WEAPON_ITEM_REF == "hatchet" ) ) - /* YOUR TOP WEAPON */ - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-WEAPON_WIDTH*1.4/2) (YOUR_TOP_WEAPON_Y+15) (WEAPON_WIDTH*1.4) (WEAPON_HEIGHT*1.4) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_notification_medal_backing", NEW_FRAME_RED_RGB 0.3, when( IS_SPECIAL_TOP_WEAPON || ( GetItemImage( GET_AAR_STAT( "topWeaponItemIndex" ) ) != "" ) );, ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-WEAPON_WIDTH/2) (YOUR_TOP_WEAPON_Y+15+15) WEAPON_WIDTH WEAPON_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, GetItemImage( GET_AAR_STAT( "topWeaponItemIndex" ) ), 1 1 1 1, when( !IS_SPECIAL_TOP_WEAPON && ( GetItemImage( GET_AAR_STAT( "topWeaponItemIndex" ) ) != "" ) );, ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-WEAPON_HEIGHT/2) (YOUR_TOP_WEAPON_Y+15+15) WEAPON_HEIGHT WEAPON_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, GetItemImage( GET_AAR_STAT( "topWeaponItemIndex" ) ), 1 1 1 1, when( TOP_WEAPON_ITEM_REF == "hatchet" );, ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-WEAPON_WIDTH/2) (YOUR_TOP_WEAPON_Y+15+15) WEAPON_WIDTH WEAPON_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_weapons_minigun", 1 1 1 1, when( TOP_WEAPON_ITEM_REF == "killstreak_minigun" );, ; ) - PREPROC_SHADER_DRAW_VIS_EX( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2-WEAPON_WIDTH/2) (YOUR_TOP_WEAPON_Y+15+15) WEAPON_WIDTH WEAPON_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_weapons_grim_reaper", 1 1 1 1, when( TOP_WEAPON_ITEM_REF == "killstreak_m202_flash" );, ; ) - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2) (YOUR_TOP_WEAPON_Y+15+5) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - toUpper( locString( "@"+GetItemName( GET_AAR_STAT( "topWeaponItemIndex" ) ) ) ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_CENTER, CHOICE_TEXTCOLOR, 1 ) - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+RIGHT_BOX_WIDTH/2) (YOUR_TOP_WEAPON_Y+15+AWARDS_BOX_HEIGHT-7) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@MPUI_KILLS_CAPS" )+" "+GET_AAR_STAT( "topWeaponKills" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_BOTTOM_CENTER, CHOICE_TEXTCOLOR, 1 ) - - /* PLACE IN FILE SHARE BUTTON */ - #undef BUTTON_SPACING - #undef FILE_SHARE_BUTTON_OFFSET - #undef FILE_SHARE_BUTTON_ACTION - - #define BUTTON_SPACING 20 - #define FILE_SHARE_BUTTON_OFFSET ( getTextWidth( locString( "@MENU_CLOSE" ), UI_FONT_NORMAL, TEXTSIZE_DEFAULT ) + 8 + BUTTON_SPACING ) - #define FILE_SHARE_BUTTON_ACTION \ - if ( getDStat( "AfterActionReportStats", "demoFileID" ) != "0" ) \ - { \ - execnow fileShareGetLastPlayedGame; \ - open menu_fileshare_aar_wager_loading; \ - } - -// NEW_FRAME_BUTTON_PC_LEFT_OFFSET( AAR_WIDTH, AAR_HEIGHT, FILE_SHARE_BUTTON_OFFSET, "@PLATFORM_FILESHARE_PLACEGAMEINMYFILESHARE", -// FILE_SHARE_BUTTON_ACTION, -// when( getDStat( "AfterActionReportStats", "demoFileID" ) != "0" ) ) -// -// execKeyInt BUTTON_X -// { -// FILE_SHARE_BUTTON_ACTION -// } - - CHANGE_MENU_ACTION( menu_wager_aar_summary, menu_aar_wager_scoreboard, menu_aar_wager_scoreboard ) - - CLOSE_BUTTON( menu_wager_aar_summary ) - - #include "ui/safearea.menu" - } - -#include "ui_mp/popupstyle.inc" -#include "ui/choices_setup_popmenu.menu" - -#define AAR_CLOSE_ACTION_FOR_FILSHARE \ - execnow changemenucloseslidedirection menu_aar_summary MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - execnow changemenuopenslidedirection menu_aar_summary MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow changemenuopenslidedirection menu_fileshare_aar_transfer MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - close menu_aar_summary; \ - open menu_fileshare_aar_transfer; - -FILESHARE_LOADER( menu_fileshare_aar_loading, isTaskInProgress( "LiveFileShareGetMetaByID" ), getDStat( "AfterActionReportStats", "demoFileID" ) != "0", AAR_CLOSE_ACTION_FOR_FILSHARE, open menu_fileshare_aar_transfer_error; ) - -#define AAR_WAGER_CLOSE_ACTION_FOR_FILESHARE \ - execnow changemenucloseslidedirection menu_wager_aar_summary MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - execnow changemenuopenslidedirection menu_wager_aar_summary MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow changemenuopenslidedirection menu_fileshare_aar_wager_transfer MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - close menu_wager_aar_summary; \ - open menu_fileshare_aar_wager_transfer; - -FILESHARE_LOADER( menu_fileshare_aar_wager_loading, isTaskInProgress( "LiveFileShareGetMetaByID" ), getDStat( "AfterActionReportStats", "demoFileID" ) != "0", AAR_WAGER_CLOSE_ACTION_FOR_FILESHARE, open menu_fileshare_aar_transfer_error; ) - -#define AAR_FILESHARE_EXTRAARGS \ - openSlideSpeed DEFAULT_SLIDE_IN_SPEED \ - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED \ - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT \ - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - -FILESHARE_SLOT_SELECTOR_EX ( menu_fileshare_aar_transfer, execNow fileShareTransferLastUploaded ( getFeederData( "menu_fileshare_aar_transfer", "fileShareSlots", "slot" ) ); open menu_aar_summary;, ;, open menu_aar_summary;, AAR_FILESHARE_EXTRAARGS ) -FILESHARE_SLOT_SELECTOR_EX ( menu_fileshare_aar_wager_transfer, execNow fileShareTransferLastUploaded ( getFeederData( "menu_fileshare_aar_wager_transfer", "fileShareSlots", "slot" ) ); open menu_wager_aar_summary;, ;, open menu_wager_aar_summary;, AAR_FILESHARE_EXTRAARGS ) - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_aar_transfer_error, ;, ;, 1 ) - execkeyint BUTTON_START { } - onEsc { close self; } - - SYSTEM_POPUP_TITLE_VIS( "@MENU_ERROR", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_FILESHARE_FILENOTFOUND", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) -} - - - // Redefinitions for MEDIUM_POPUP_SETUP popups - #undef POPUP_WIDTH - #define POPUP_WIDTH MEDIUM_POPUP_WIDTH - #undef POPUP_HEIGHT - #define POPUP_HEIGHT MEDIUM_POPUP_HEIGHT - #undef CHOICE_SIZE_X - #define CHOICE_SIZE_X CONFIRM_PURCHASE_SIZE_X - #undef CHOICE_Y_START - #define CHOICE_Y_START POPUP_Y_START_TOP - #undef PLAYER_INFO_ALIGN - #define PLAYER_INFO_ALIGN // Purposely set to nothing. The popup setup macro sets the alignment. If items within it set their own aligment, they end up offset incorrectly. - #undef PLAYER_INFO_X_START - #define PLAYER_INFO_X_START( frameWidth ) ( frameWidth - PLAYER_INFO_WIDTH - PLAYER_INFO_PAD ) - #undef PLAYER_INFO_Y_START - #define PLAYER_INFO_Y_START( frameHeight ) ( PLAYER_INFO_PAD * 2 ) - #undef BG_BACKCOLOR - #define BG_BACKCOLOR POPUP_BACKCOLOR - // Redefinitions for MEDIUM_POPUP_SETUP popups - - - #undef ONOPEN_PC - #ifdef PC - // on PC the AAR opens from script, and the menu that is opened first is "menu_aar_unlocks_weapons" - #define ONOPEN_PC execnow CompareStatsVsStableBuffer; - #else - #define ONOPEN_PC - #endif - - #define UNLOCK_WEAPON_ONOPEN_ACTION \ - ONOPEN_PC \ - setLocalVarBool ui_centerPopup 1; \ - execNow set ui_aar_current_view_num AAR_VIEW_AWARDS_PERSONAL_BESTS; \ - execNow set ui_aar_animate_xp_bar 1; \ - if( GetNumWeaponUnlocks() < 1 ) \ - { \ - closeImmediate self; \ - if( GetNumFeatureUnlocks() > 0 ) \ - { \ - open menu_aar_unlocks_features; \ - } \ - } \ - else \ - { \ - execNow set ui_aar_num_weapon_unlocks (GetNumWeaponUnlocks()); \ - execNow set ui_aar_curr_unlocked_weapon 0; \ - execNow set ui_aar_curr_unlocked_weapon_index ( GetUnlockedWeaponItemIndex( (dvarInt(ui_aar_curr_unlocked_weapon)) ) ); \ - } - - #define UNLOCK_WEAPON_ONESC_ACTION \ - setLocalVarBool ui_centerPopup 0; \ - play uin_navigation_sys_close; \ - close self; \ - if( GetNumFeatureUnlocks() > 0 ) \ - { \ - open menu_aar_unlocks_features; \ - } - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "menu_aar_unlocks_weapons", UNLOCK_WEAPON_ONOPEN_ACTION, UNLOCK_WEAPON_ONESC_ACTION, POPUP_GLOW_RED, 1, 1 ) - priority MENU_PRI_ONTOP - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - control MENU_CONTROL_OPENER - - onFocus - { - if( dvarInt(ui_aar_num_weapon_unlocks) > 0 ) - { - play uin_aar_unlock; - } - } - onClose - { - if( IN_MP_FRONTEND ) - { - deactivateBlur; - } - CENTER_POPUP_ON_CLOSE - setLocalVarBool ui_centerPopup 0; - if( GetNumFeatureUnlocks() < 1 ) - { - if ( !dvarBool(xblive_wagermatch) ) - { - execnow changemenuopenslidedirection menu_aar_summary MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM; - open menu_aar_summary; - } - else - { - open menu_wager_aar_summary; - } - } - } - -#define BUTTON_A_ACT \ - execNow set ui_aar_num_weapon_unlocks (dvarInt(ui_aar_num_weapon_unlocks)-1); \ - if( dvarInt(ui_aar_num_weapon_unlocks) == 0 ) \ - { \ - close self; \ - if( GetNumFeatureUnlocks() > 0 ) \ - { \ - open menu_aar_unlocks_features; \ - } \ - } \ - else \ - { \ - play uin_aar_unlock; \ - execNow set ui_aar_curr_unlocked_weapon (dvarInt(ui_aar_curr_unlocked_weapon)+1); \ - execNow set ui_aar_curr_unlocked_weapon_index ( GetUnlockedWeaponItemIndex( (dvarInt(ui_aar_curr_unlocked_weapon)) ) ); \ - } - - execkeyInt BUTTON_A - { - BUTTON_A_ACT - } - execKeyInt BUTTON_B { ; } // Do nothing - - -// #ifdef PC -// FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self; execKeyHandler BUTTON_A;, 1, ; ) -// #endif - - MEDIUM_POPUP_TITLE_VIS( "@MPUI_NEW_WEAPON_UNLOCKED_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - - #define UNLOCK_WEAPON_WIDTH ( 200 ) - - /* WEAPON IMAGE */ - PREPROC_SHADER_DRAW( (MEDIUM_POPUP_WIDTH/4) CHOICE_Y( 2 ) UNLOCK_WEAPON_WIDTH ( UNLOCK_WEAPON_WIDTH / 2 ), getItemImage( GetUnlockedWeaponItemIndex( (dvarInt(ui_aar_curr_unlocked_weapon) ) ) ), 1 1 1 1 ) - - /* WEAPON NAME */ - PREPROC_TEXT_DRAW_VIS( POPUP_SIDE_PAD CHOICE_Y( 7 ) ( MEDIUM_POPUP_WIDTH - ( POPUP_SIDE_PAD * 2 ) ) CHOICE_SIZE_Y, 0 0, "@"+getItemName( GetUnlockedWeaponItemIndex( (dvarInt(ui_aar_curr_unlocked_weapon) ) ) ), TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 1, 1 ) - -#ifdef CONSOLE - // Button prompts - PREPROC_BUTTON_DRAW_VIS( 0 MEDIUM_POPUP_HEIGHT MEDIUM_POPUP_WIDTH CHOICE_SIZE_Y, 0 0, "@PLATFORM_AFTER_ACTION_REPORT_CAPS", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, when( ((dvarInt(ui_aar_curr_unlocked_weapon)+1) >= GetNumWeaponUnlocks()) && GetNumFeatureUnlocks() == 0 );, BUTTON_A_ACT ) - PREPROC_BUTTON_DRAW_VIS( 0 MEDIUM_POPUP_HEIGHT MEDIUM_POPUP_WIDTH CHOICE_SIZE_Y, 0 0, "@PLATFORM_NEXT_CAPS", TEXTSIZE_DEFAULT, 4, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, when( ((dvarInt(ui_aar_curr_unlocked_weapon)+1) < GetNumWeaponUnlocks()) || ( GetNumFeatureUnlocks() > 0 ) );, BUTTON_A_ACT ) -#else // #ifdef CONSOLE - GENERIC_POPUP_BUTTON_X( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 0, "@PLATFORM_AFTER_ACTION_REPORT_CAPS", - BUTTON_A_ACT, - when( ((dvarInt(ui_aar_curr_unlocked_weapon)+1) >= GetNumWeaponUnlocks()) && GetNumFeatureUnlocks() == 0 ); ) - - GENERIC_POPUP_BUTTON_X( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 0, "@PLATFORM_NEXT_CAPS", - BUTTON_A_ACT, - when( ((dvarInt(ui_aar_curr_unlocked_weapon)+1) < GetNumWeaponUnlocks()) || ( GetNumFeatureUnlocks() > 0 ) ); ) -#endif // #else // #ifdef CONSOLE - } - - - #define UNLOCK_FEATURE_ONOPEN_ACTION \ - setLocalVarBool ui_centerPopup 1; \ - execNow set ui_aar_num_feature_unlocks (GetNumFeatureUnlocks()); \ - execNow set ui_aar_curr_unlocked_feature 0; \ - play uin_navigation_sys_open; - - #define UNLOCK_FEATURE_ONESC_ACTION \ - setLocalVarBool ui_centerPopup 0; \ - play uin_navigation_sys_close; \ - close self; - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "menu_aar_unlocks_features", UNLOCK_FEATURE_ONOPEN_ACTION, UNLOCK_FEATURE_ONESC_ACTION, POPUP_GLOW_BLUE, 1, 1 ) - priority MENU_PRI_ONTOP - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - control MENU_CONTROL_OPENER - - onFocus - { - if( dvarInt(ui_aar_num_feature_unlocks) > 0 ) - { - play uin_aar_unlock; - } - } - onClose - { - if( IN_MP_FRONTEND ) - { - deactivateBlur; - } - CENTER_POPUP_ON_CLOSE - setLocalVarBool ui_centerPopup 0; - if ( !dvarBool(xblive_wagermatch) ) - { - execnow changemenuopenslidedirection menu_aar_summary MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM; - open menu_aar_summary; - } - else - { - open menu_wager_aar_summary; - } - } - -#undef BUTTON_A_ACT -#define BUTTON_A_ACT \ - execNow set ui_aar_num_feature_unlocks (dvarInt(ui_aar_num_feature_unlocks)-2); \ - if( dvarInt(ui_aar_num_feature_unlocks) <= 0 ) \ - { \ - close self; \ - } \ - else \ - { \ - play uin_aar_unlock; \ - execNow set ui_aar_curr_unlocked_feature (dvarInt(ui_aar_curr_unlocked_feature)+2); \ - } - - execkeyInt BUTTON_A - { - BUTTON_A_ACT - } - execKeyInt BUTTON_B { ; } // Do nothing - - -// #ifdef PC -// FRAME_CHOICE_BUTTON_VIS_EX( 8, "@MENU_OK", close self; execKeyHandler BUTTON_A;, 1, ; ) -// #endif - - MEDIUM_POPUP_TITLE_VIS( "@MPUI_NEW_FEATURE_UNLOCKED_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - - /* UNLOCKED FEATURE 1 */ - PREPROC_TEXT_DRAW_VIS( (MEDIUM_POPUP_WIDTH/7) 70 (MEDIUM_POPUP_WIDTH*5/7) 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@"+GetItemName(GetUnlockedFeatureItemIndex(dvarInt(ui_aar_curr_unlocked_feature))), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, - when( dvarInt(ui_aar_curr_unlocked_feature) < GetNumFeatureUnlocks() ) ) - - /* UNLOCKED FEATURE 1 DESCRIPTION */ - PREPROC_TEXT_DRAW_VIS_EX( (MEDIUM_POPUP_WIDTH/7) 92 (MEDIUM_POPUP_WIDTH*5/7) 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@"+GetItemDesc(GetUnlockedFeatureItemIndex(dvarInt(ui_aar_curr_unlocked_feature))), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, - when( dvarInt(ui_aar_curr_unlocked_feature) < GetNumFeatureUnlocks() ), autowrapped ) - - /* UNLOCKED FEATURE 2 */ - PREPROC_TEXT_DRAW_VIS( (MEDIUM_POPUP_WIDTH/7) 139 (MEDIUM_POPUP_WIDTH*5/7) 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@"+GetItemName(GetUnlockedFeatureItemIndex(dvarInt(ui_aar_curr_unlocked_feature)+1)), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, - when( (dvarInt(ui_aar_curr_unlocked_feature)+1) < GetNumFeatureUnlocks() ) ) - - /* UNLOCKED FEATURE 2 DESCRIPTION */ - PREPROC_TEXT_DRAW_VIS_EX( (MEDIUM_POPUP_WIDTH/7) 161 (MEDIUM_POPUP_WIDTH*5/7) 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@"+GetItemDesc(GetUnlockedFeatureItemIndex(dvarInt(ui_aar_curr_unlocked_feature)+1)), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, - when( (dvarInt(ui_aar_curr_unlocked_feature)+1) < GetNumFeatureUnlocks() ), autowrapped ) - -#ifdef CONSOLE - // Button prompts - PREPROC_BUTTON_DRAW_VIS( 0 MEDIUM_POPUP_HEIGHT MEDIUM_POPUP_WIDTH CHOICE_SIZE_Y, 0 0, "@PLATFORM_AFTER_ACTION_REPORT_CAPS", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, when( (dvarInt(ui_aar_curr_unlocked_feature)+2) >= GetNumFeatureUnlocks() ) ;, BUTTON_A_ACT ) - PREPROC_BUTTON_DRAW_VIS( 0 MEDIUM_POPUP_HEIGHT MEDIUM_POPUP_WIDTH CHOICE_SIZE_Y, 0 0, "@PLATFORM_NEXT_CAPS", TEXTSIZE_DEFAULT, 4, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, when( (dvarInt(ui_aar_curr_unlocked_feature)+2) < GetNumFeatureUnlocks() );, BUTTON_A_ACT ) -#else // #ifdef CONSOLE - GENERIC_POPUP_BUTTON_X( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 0, "@PLATFORM_AFTER_ACTION_REPORT_CAPS", - BUTTON_A_ACT, - when( (dvarInt(ui_aar_curr_unlocked_feature)+2) >= GetNumFeatureUnlocks() ); ) - - GENERIC_POPUP_BUTTON_X( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 0, "@PLATFORM_NEXT_CAPS", - BUTTON_A_ACT, - when( (dvarInt(ui_aar_curr_unlocked_feature)+2) < GetNumFeatureUnlocks() ); ) -#endif // #else // #ifdef CONSOLE - } -} diff --git a/mods/patch_mp/ui_mp/cac_custom.menu b/mods/patch_mp/ui_mp/cac_custom.menu deleted file mode 100644 index 1d21362..0000000 --- a/mods/patch_mp/ui_mp/cac_custom.menu +++ /dev/null @@ -1,32 +0,0 @@ -#include "ui/menudef.h" - -// ----------------- allocate stat for custom class settings ------------------- - -// custom class stats stat numbers -#include "ui_mp/cac_stats.inc" - -#define CAC_DEFAULT_PRIMARY_GRENADE GetDefaultClassSlot( dvarstring( ui_class ), "primarygrenade" ) -#define CAC_DEFAULT_PRIMARY GetDefaultClassSlot( dvarstring( ui_class ), "primary" ) -// no default primary attachments for now -#define CAC_DEFAULT_PRIMARY_ATTACHMENT 0 -#define CAC_DEFAULT_SECONDARY GetDefaultClassSlot( dvarstring( ui_class ), "secondary" ) -// no default secondary attachments for now -#define CAC_DEFAULT_SECONDARY_ATTACHMENT 0 -#define CAC_DEFAULT_SPECIALTY1 GetDefaultClassSlot( dvarstring( ui_class ), "specialty1" ) -#define CAC_DEFAULT_SPECIALTY2 GetDefaultClassSlot( dvarstring( ui_class ), "specialty2" ) -#define CAC_DEFAULT_SPECIAL_GRENADE GetDefaultClassSlot( dvarstring( ui_class ), "specialgrenade" ) -// no default camo for now -#define CAC_DEFAULT_CAMO 0 -#define CAC_DEFAULT_DEATHSTREAK GetDefaultClassSlot( dvarstring( ui_class ), "deathstreak" ) -#define CAC_DEFAULT_KILLSTREAK_TIER1 GetDefaultClassSlot( dvarstring( ui_class ), "killstreak1" ) -#define CAC_DEFAULT_KILLSTREAK_TIER2 GetDefaultClassSlot( dvarstring( ui_class ), "killstreak2" ) -#define CAC_DEFAULT_KILLSTREAK_TIER3 GetDefaultClassSlot( dvarstring( ui_class ), "killstreak3" ) - -// custom class name -#define CAC_MENU_NAME "menu_cac_custom" - -#include "ui_mp/common_macro.inc" - -{ - #include "ui_mp/cac.inc" -} \ No newline at end of file diff --git a/mods/patch_mp/ui_mp/cac_popups.menu b/mods/patch_mp/ui_mp/cac_popups.menu deleted file mode 100644 index 7153c3c..0000000 --- a/mods/patch_mp/ui_mp/cac_popups.menu +++ /dev/null @@ -1,813 +0,0 @@ - -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui_mp/popup_player_info.inc" - -#include "ui/framestyle.inc" -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/popupstyle.inc" -#include "ui_mp/cac_stats.inc" -#include "ui/choices_setup_popmenu.menu" - -#define IS_ONLINE_GAME ( dvarInt( splitscreen ) == 0 && dvarInt( systemlink ) == 0 ) -#define IS_BASICTRAINING_GAME ( dvarInt( xblive_basictraining ) > 0 ) - - // saving popup for CAC ONLY - for a lack of better place - #define LOCAL_SAVING \ - "wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait; wait;" - menuDef - { - SYSTEM_POPUP_SETUP_VIS( saving_popup, exec LOCAL_SAVING" "LOCAL_SAVING" closemenu saving_popup";, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_SAVING", 1 ) - SYSTEM_POPUP_SPINNER( 1 ) - } - - - #define LOCAL_ACCEPT_ACTION( pclass, pclass_s ) \ - if ( IS_ONLINE_GAME && !IS_BASICTRAINING_GAME ) \ - { \ - setDvarFromLocString( dvarString( ui_custom_name ), pclass ); \ - } \ - execNow "equipDefaultClass ( dvarString( ui_custom_name ) ) class_custom"pclass_s; \ - execNow "updategamerprofile"; \ - play CHOICE_FOCUS_SOUND; \ - close "popup_cac_defaultclasswarning"pclass_s; \ - close "popup_cac_template"; - - #define LOCAL_CANCEL_ACTION( pclass_s ) \ - play CHOICE_FOCUS_SOUND; \ - close "popup_cac_defaultclasswarning"pclass_s; - - - // reset to default class confirmation popup menu - #define RESET_WARNING_POPUP( pclass, pclass_s ) \ - menuDef \ - { \ - SYSTEM_POPUP_SETUP_VIS( "popup_cac_defaultclasswarning"pclass_s, setfocus "popup_cac_defaultclasswarning"pclass_s"_2", ;, 1 ) \ - \ - SYSTEM_POPUP_TITLE_VIS( "@MENU_RESET_TO_DEFAULT", 1 ) \ - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_CUSTOM_CLASS_RESET_WARNING", 1 ) \ - \ - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_YES", LOCAL_ACCEPT_ACTION( pclass, pclass_s ), 1, ; ) \ - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_NO", LOCAL_CANCEL_ACTION( pclass_s ), 1, name "popup_cac_defaultclasswarning"pclass_s"_2" ) \ - } - - RESET_WARNING_POPUP( "@CLASS_CLASS1", "_smg" ) - RESET_WARNING_POPUP( "@CLASS_CLASS2", "_cqb" ) - RESET_WARNING_POPUP( "@CLASS_CLASS3", "_assault" ) - RESET_WARNING_POPUP( "@CLASS_CLASS4", "_lmg" ) - RESET_WARNING_POPUP( "@CLASS_CLASS5", "_sniper" ) - - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( copyClassConfirmation, setfocus copyClassConfirmation_2;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( getCopyClassConfirmationText( dvarInt("ui_custom_class_highlighted"), dvarInt("ui_classToReplace") ), 1 ) - - #define COPY_CLASS_ACTION \ - execNow copyClass (dvarInt("ui_custom_class_highlighted")) (dvarInt("ui_classToReplace")); \ - close self; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_YES", COPY_CLASS_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CANCEL", close self;, 1, name copyClassConfirmation_2 ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( copyCustomGametypeClassConfirmation, setfocus copyCustomGametypeClassConfirmation_2;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( getCopyCustomGametypeClassConfirmationText( dvarInt("ui_custom_gametype_class_highlighted"), dvarInt("ui_customGametypeClassToReplace") ), 1 ) - - #define COPY_CUSTOM_CLASS_ACTION \ - execNow copyCustomGametypeClass (dvarInt("ui_custom_gametype_class_highlighted")) (dvarInt("ui_customGametypeClassToReplace")); \ - close self; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_YES", COPY_CUSTOM_CLASS_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CANCEL", close self;, 1, name copyCustomGametypeClassConfirmation_2 ) - } - -#ifdef XENON - #define SELECT_ICON "ui_button_xenon_3d_a_32x32" -#endif -#ifdef PS3 - #define SELECT_ICON "ui_button_ps3_x_32x32" -#endif - - #undef POPUP_BUTTON_COUNT - #define POPUP_BUTTON_COUNT 5 - // Copy Class Popup - menuDef - { - SYSTEM_POPUP_SETUP_VIS( copyClassPopup, ;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( GetCopyClassDialogTitle( dvarInt("ui_custom_class_highlighted") ), 1 ) - - itemDef - { - name custom_class_list - type ITEM_TYPE_LISTBOX - feeder FEEDER_CUSTOM_CLASSES - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X (CHOICE_SIZE_Y*6) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - elementwidth CHOICE_SIZE_X - elementheight CHOICE_SIZE_Y - elementtype LISTBOX_TEXT - textstyle ITEM_TEXTSTYLE_NORMAL - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - textalignx CHOICE_SIZE_Y - textaligny 0 - forecolor 1 1 1 1 - focusColor 1 1 1 1 - disableColor 1 1 1 1 - selectBorder 0.8 0.95 1 0 - outlinecolor 1 1 1 1 - elementBackgroundColor NEW_FRAME_BUTTON_BG_COLOR - selectIcon SELECT_ICON - elementHighlightColor NEW_FRAME_BUTTON_TEXT_HIGHLIGHT_COLOR -#ifdef PC - modal - usepaging -#else //#ifdef PC - noscrollbars -#endif //#ifdef PC - noBlinkingHighlight - visible 1 - onfocus - { - play CHOICE_FOCUS_SOUND; - } - onListboxSelectionChange - { - play CHOICE_FOCUS_SOUND; - } - doubleclick - { - execNow set ui_classToReplace (getFeederData("selection")); - open copyClassConfirmation; - close self; - } - } - - SYSTEM_POPUP_BACK_BUTTON - } - - - #undef POPUP_BUTTON_COUNT - #define POPUP_BUTTON_COUNT 5 - // Copy Custom Gametype Class Popup - menuDef - { - SYSTEM_POPUP_SETUP_VIS( copyCustomGametypeClassPopup, ;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( GetCopyCustomGametypeClassDialogTitle( dvarInt("ui_custom_gametype_class_highlighted") ), 1 ) - - itemDef - { - name custom_class_list - type ITEM_TYPE_LISTBOX - feeder FEEDER_CUSTOM_GAMETYPE_CLASSES - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X (CHOICE_SIZE_Y*6) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - elementwidth CHOICE_SIZE_X - elementheight CHOICE_SIZE_Y - elementtype LISTBOX_TEXT - textstyle ITEM_TEXTSTYLE_NORMAL - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - textalignx CHOICE_SIZE_Y - textaligny 0 - forecolor 1 1 1 1 - focusColor 1 1 1 1 - disableColor 1 1 1 1 - selectBorder 0.8 0.95 1 0 - outlinecolor 1 1 1 1 - elementBackgroundColor NEW_FRAME_BUTTON_BG_COLOR - selectIcon SELECT_ICON - elementHighlightColor NEW_FRAME_BUTTON_TEXT_HIGHLIGHT_COLOR -#ifdef PC - modal - usepaging -#else //#ifdef PC - noscrollbars -#endif //#ifdef PC - noBlinkingHighlight - visible 1 - onfocus - { - play CHOICE_FOCUS_SOUND; - } - onListboxSelectionChange - { - play CHOICE_FOCUS_SOUND; - } - doubleclick - { - execNow set ui_customGametypeClassToReplace (getFeederData("selection")); - open copyCustomGametypeClassConfirmation; - close self; - } - } - - SYSTEM_POPUP_BACK_BUTTON - } - - -#ifdef PC - #undef CHOICE_FOCUS_SOUND - #define CHOICE_FOCUS_SOUND "uin_navigation_over" - - #undef POPUP_BUTTON_COUNT - #define POPUP_BUTTON_COUNT 3 - - #define RENAME_ACTION \ - exec "setNewCustomName"; close self; - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( "pc_rename", exec "getOldCustomName"; setFocus nameEntry;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MPUI_RENAME_CLASS", 1 ) - - itemDef - { - name nameEntry - TYPE ITEM_TYPE_UPREDITFIELD - text "@MENU_NAME1" - dvar "ui_custom_newname" - rect CHOICE_RECT( 1 ) - textaligny 2 - maxchars 15 - maxpaintchars 15 - textalign ITEM_ALIGN_MIDDLE_LEFT - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - forecolor .9 .9 .9 1 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 .3 - visible 1 - mouseenter { show keyBindStatus; play CHOICE_FOCUS_SOUND; } - mouseexit { hide keyBindStatus; setfocus ok_button; } - accept { if ( dvarString( ui_custom_newname ) != "" ) { RENAME_ACTION } } - } - - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_OK", RENAME_ACTION, ( dvarString( ui_custom_newname ) != "" ), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 2, "@MENU_OK", ;, ;, ( dvarString( ui_custom_newname ) == "" ), ; ) - - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MENU_CANCEL", close self; setDvar ui_custom_newname "";, 1, ; ) - } -#endif - - - #undef POPUP_BUTTON_COUNT - #define POPUP_BUTTON_COUNT 2 - menuDef - { - SYSTEM_POPUP_SETUP_VIS( clearAttachmentNotification, focusFirst;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MPUI_CAC_ATTACHMENTS_CLEARED", 1 ) - -#define CLEAR_ATTACHMENTS_ACTION \ - execNow clearAllAttachmentsForItem (dvarString( ui_custom_name )) (STAT_CAC_PRIMARY); \ - if ( !dvarBool("buyingAndEquippingProItem") ) \ - { \ - execnow equipclasscurrentitem (dvarString( ui_custom_name )); \ - } \ - else \ - { \ - execnow equipclassitem (dvarString( ui_custom_name )) (GetCurrentItemIndex() + 1); \ - execnow buildItemListForSlotName (dvarString( selected_loadout_slot )); \ - } \ - setDvar buyingAndEquippingProItem "0"; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", CLEAR_ATTACHMENTS_ACTION; close self; execnow ui_animate menu_cac_custom * CloseDropDownList 0;, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_CANCEL", close self;, 1, ; ) - } - - // Redefinitions for MEDIUM_POPUP_SETUP popups - #undef POPUP_WIDTH - #define POPUP_WIDTH MEDIUM_POPUP_WIDTH - #undef POPUP_HEIGHT - #define POPUP_HEIGHT MEDIUM_POPUP_HEIGHT - #undef CHOICE_SIZE_X - #define CHOICE_SIZE_X CONFIRM_PURCHASE_SIZE_X - #undef CHOICE_Y_START - #define CHOICE_Y_START POPUP_Y_START_TOP - #undef PLAYER_INFO_ALIGN - #define PLAYER_INFO_ALIGN // Purposely set to nothing. The popup setup macro sets the alignment. If items within it set their own aligment, they end up offset incorrectly. - #undef PLAYER_INFO_X_START - #define PLAYER_INFO_X_START( frameWidth ) ( frameWidth - PLAYER_INFO_WIDTH - PLAYER_INFO_PAD ) - #undef PLAYER_INFO_Y_START - #define PLAYER_INFO_Y_START( frameHeight ) ( PLAYER_INFO_PAD * 2 ) - #undef BG_BACKCOLOR - #define BG_BACKCOLOR POPUP_BACKCOLOR - // Redefinitions for MEDIUM_POPUP_SETUP popups - - - #define PURCHASE_CONFIRMATION_RIGHT_X ( MEDIUM_POPUP_WIDTH / 2 ) - #define PURCHASE_INFO_WIDTH ( ( MEDIUM_POPUP_WIDTH / 2 ) - POPUP_SIDE_PAD ) - - #define CONFIRMATION_ITEM_INFO_VIS( itemName, itemCost, itemDesc, balanceHeader, balanceAfter, visArg ) \ - PREPROC_TEXT_DRAW_VIS_EX( (PURCHASE_CONFIRMATION_RIGHT_X) CHOICE_Y( 1 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, locString( "@MENU_POINTS", itemCost ), TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, NEW_FRAME_GREEN_RGB 1, visArg, ; ) \ /* Cost */ - PREPROC_TEXT_DRAW_VIS_EX( (PURCHASE_CONFIRMATION_RIGHT_X) CHOICE_Y( 2 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, "@" + itemName, TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, NEW_FRAME_GREEN_RGB 1, visArg, ; ) \ /* Name */ - PREPROC_TEXT_DRAW_VIS_EX( (PURCHASE_CONFIRMATION_RIGHT_X) CHOICE_Y( 4 ) PURCHASE_INFO_WIDTH 200, 0 0, "@" + itemDesc, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, MEDIUM_POPUP_GRAY, visArg, autowrapped; ) \ /* Description */ - PREPROC_TEXT_DRAW_VIS_EX( (PURCHASE_CONFIRMATION_RIGHT_X) CHOICE_Y( 7 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, "@MPUI_YOUR_BANK", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, MEDIUM_POPUP_GRAY, visArg, ; ) \ /* Currency Available Header */ - PREPROC_TEXT_DRAW_VIS_EX( (MEDIUM_POPUP_WIDTH-75) CHOICE_Y( 7 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, locString( "@MENU_POINTS", GetStatByName( "CODPOINTS" ) ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, visArg, ; ) \ /* Currency Available */ - PREPROC_TEXT_DRAW_VIS_EX( (PURCHASE_CONFIRMATION_RIGHT_X) CHOICE_Y( 8 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, balanceHeader, TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, MEDIUM_POPUP_GRAY, visArg, ; ) \ /* Balance After Purchase Header */ - PREPROC_TEXT_DRAW_VIS_EX( (MEDIUM_POPUP_WIDTH-75) CHOICE_Y( 8 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, balanceAfter, TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, visArg, ; ) /* Balance After Purchase */ - - #define PURCHASE_CONFIRMATION_ITEM_INFO( itemName, itemCost, itemDesc ) \ - CONFIRMATION_ITEM_INFO_VIS( itemName, itemCost, itemDesc, "@MPUI_BALANCE_AFTER_PURCHASE", locString( "@MENU_POINTS", GetStatByName( "CODPOINTS" ) - itemCost ), 1 ) - - #define PURCHASE_CONFIRMATION_ITEM_INFO_VIS( itemName, itemCost, itemDesc, visArg ) \ - CONFIRMATION_ITEM_INFO_VIS( itemName, itemCost, itemDesc, "@MPUI_BALANCE_AFTER_PURCHASE", locString( "@MENU_POINTS", GetStatByName( "CODPOINTS" ) - itemCost ), visArg ) - -#define IS_TWO_ATTACHMENT_PERK_EQUIPPED \ - ( ( STAT_CAC_SPECIALTY2 == getItemIndex( "PERKS_PROFESSIONAL" ) ) || ( STAT_CAC_SPECIALTY2 == getItemIndex( "PERKS_PROFESSIONAL_PRO" ) ) ) - -#define TWO_ATTACHMENTS_EQUIPPED \ - ( GetItemNumAttachmentsEquipped( dvarString( ui_custom_name ), STAT_CAC_PRIMARY ) > 1 || GetItemNumAttachmentsEquipped( dvarString( ui_custom_name ), STAT_CAC_SECONDARY ) > 1 ) - -#define TWO_ATTACHMENT_PERK_NOT_HIGHLIGHTED \ - ( GetCurrentItemIndex() != getItemIndex( "PERKS_PROFESSIONAL" ) && GetCurrentItemIndex() != getItemIndex( "PERKS_PROFESSIONAL_PRO" ) ) - -#define PERK_2_EQUIP_ACTION \ - if( TWO_ATTACHMENTS_EQUIPPED && IS_TWO_ATTACHMENT_PERK_EQUIPPED && TWO_ATTACHMENT_PERK_NOT_HIGHLIGHTED ) \ - { \ - setDvar buyingAndEquippingProItem "0"; \ - execNow openMenu clearAttachmentNotification; \ - execnow set ui_closeAfterPurchase 0; \ - } \ - else \ - { \ - execnow equipclasscurrentitem (dvarString( ui_custom_name )); \ - execnow set ui_closeAfterPurchase 1; \ - } - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseConfirmation", setfocus "PurchaseConfirmation_3";, ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( GetCurrentItemName(), GetCurrentItemCost(), GetItemDesc( GetCurrentItemIndex() ) ) - - #define BUY_ACTION \ - execnow purchasecurrentitem; \ - if ( dvarString( ui_inside_popup ) == "select_weapon" ) \ - { \ - execnow buildItemListForSlotNameAndGroup (dvarString(selected_loadout_slot)) (dvarString(selected_group)); \ - } \ - elseif ( dvarString( ui_inside_popup ) == "equipment_head" ) \ - { \ - execnow buildItemListForSlotName (dvarString( selected_loadout_slot )); \ - } \ - close self; - - #define BUY_AND_EQUIP_ACTION \ - execnow purchasecurrentitem; \ - if ( dvarString( ui_inside_popup ) == "specialties_2" ) \ - { \ - PERK_2_EQUIP_ACTION \ - } \ - else \ - { \ - execnow equipclasscurrentitem (dvarString( ui_custom_name )); \ - execnow set ui_closeAfterPurchase 1; \ - } \ - if ( dvarString( ui_inside_popup ) == "select_weapon" ) \ - { \ - execnow buildItemListForSlotNameAndGroup (dvarString(selected_loadout_slot)) (dvarString(selected_group)); \ - execnow set ui_closeAfterPurchase 1; \ - } \ - elseif ( dvarString( ui_inside_popup ) == "equipment_head" ) \ - { \ - execnow buildItemListForSlotName (dvarString( selected_loadout_slot )); \ - } \ - close self; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_EQUIP_CAPS", BUY_AND_EQUIP_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self, 1, name PurchaseConfirmation_3 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseKillstreakConfirmation", setfocus "PurchaseKillstreakConfirmation_3";, ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( GetCurrentItemName(), GetCurrentItemCost(), GetItemDesc( GetCurrentItemIndex() ) ) - - #define BUY_KILLSTREAK_ACTION \ - execnow purchasecurrentitem; \ - close self; - - #define BUY_AND_EQUIP_KILLSTREAK_ACTION \ - execnow purchasecurrentitem; \ - execnow equipGlobalItemInSlotSorted 3 killstreak 1; \ - execnow set ui_closeAfterPurchase 1; \ - close self; - - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_KILLSTREAK_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_EQUIP_CAPS", BUY_AND_EQUIP_KILLSTREAK_ACTION, ( GetNumSortedItemsEquipped() < 3 ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CANCEL_PURCHASE_CAPS", close self, ( GetNumSortedItemsEquipped() == 3 ), name PurchaseKillstreakConfirmation_3 ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self, ( GetNumSortedItemsEquipped() < 3 ), name PurchaseKillstreakConfirmation_3 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseProConfirmation", setfocus "PurchaseProConfirmation_3", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( GetItemName( GetCurrentItemIndex() + 1 ), GetItemCost( GetCurrentItemIndex() + 1 ), GetItemDesc( GetCurrentItemIndex() + 1 ) ) - - #define BUY_PRO_ACTION \ - execnow purchasecurrentproitem; \ - execnow buildItemListForSlotName (dvarString( selected_loadout_slot )); \ - close self; - - #define BUY_AND_EQUIP_PRO_ACTION \ - execnow purchasecurrentproitem; \ - if ( dvarString( ui_inside_popup ) == "specialties_2" && TWO_ATTACHMENTS_EQUIPPED && IS_TWO_ATTACHMENT_PERK_EQUIPPED && TWO_ATTACHMENT_PERK_NOT_HIGHLIGHTED ) \ - { \ - setDvar buyingAndEquippingProItem "1"; \ - execNow openMenu clearAttachmentNotification; \ - execnow set ui_closeAfterPurchase 0; \ - } \ - else \ - { \ - execnow equipclassitem (dvarString( ui_custom_name )) (GetCurrentItemIndex() + 1); \ - execnow set ui_closeAfterPurchase 1; \ - execnow buildItemListForSlotName (dvarString( selected_loadout_slot )); \ - } \ - close self; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_PRO_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_EQUIP_CAPS", BUY_AND_EQUIP_PRO_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self, 1, name PurchaseProConfirmation_3 ) - } - - -#define GET_SLOT_STAT \ - ( Select( dvarString( selected_loadout_slot ) == "primary", STAT_CAC_PRIMARY, STAT_CAC_SECONDARY ) ) - -#define SELECTING_PRIMARY \ - ( dvarString( selected_loadout_slot ) == "primary" ) - -#define CAN_EQUIP_TWO_ATTACHMENTS \ - ( ( SELECTING_PRIMARY ) && ( isItemEquipped( getitemindex("PERKS_PROFESSIONAL"), dvarString( ui_custom_name ) ) || isItemEquipped( getitemindex("PERKS_PROFESSIONAL_PRO"), dvarString( ui_custom_name ) ) ) ) - -#define NUM_EQUIPPED_ATTACHMENTS \ - GetItemNumAttachmentsEquipped( dvarString( ui_custom_name ), GET_SLOT_STAT ) - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseAttachmentConfirmation", setfocus "PurchaseAttachmentConfirmation_3", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( GetCurrentItemAttachmentName(), GetCurrentItemAttachmentCost(), GetAttachmentDesc( GetItemAttachment( GetCurrentItemIndex(), GetCurrentItemAttachmentNum() ) ) ) - - #define BUY_ATTACHMENT_ACTION \ - execnow purchasecurrentitemattachment; \ - close self; - - #define BUY_ATTACHMENT_AND_EQUIP_ACTION \ - execnow purchasecurrentitemattachment; \ - if( ( NUM_EQUIPPED_ATTACHMENTS < 1 ) || ( NUM_EQUIPPED_ATTACHMENTS == 1 && CAN_EQUIP_TWO_ATTACHMENTS ) ) \ - { \ - execnow equipclasscurrentattachment ( dvarString( ui_custom_name ) ); \ - } \ - close self; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_ATTACHMENT_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_EQUIP_CAPS", BUY_ATTACHMENT_AND_EQUIP_ACTION, ( ( NUM_EQUIPPED_ATTACHMENTS == 0 ) || ( NUM_EQUIPPED_ATTACHMENTS == 1 && CAN_EQUIP_TWO_ATTACHMENTS ) ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CANCEL_PURCHASE_CAPS", close self, ( NUM_EQUIPPED_ATTACHMENTS == 2 || ( ( NUM_EQUIPPED_ATTACHMENTS == 1 ) && !CAN_EQUIP_TWO_ATTACHMENTS ) ), name PurchaseAttachmentConfirmation_3 ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self, ( ( NUM_EQUIPPED_ATTACHMENTS == 0 ) || ( NUM_EQUIPPED_ATTACHMENTS == 1 && CAN_EQUIP_TWO_ATTACHMENTS ) ), name PurchaseAttachmentConfirmation_3 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseOptionConfirmation", setfocus "PurchaseOptionConfirmation_3", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( GetWeaponOptionName( GetCurrentItemOption() ), GetWeaponOptionCost( GetCurrentItemOption() ), GetWeaponOptionName( GetCurrentItemOption() ) ) - - #define BUY_OPTION_ACTION \ - execnow purchasecurrentitemoption; \ - close self; - - #define BUY_OPTION_AND_EQUIP_ACTION \ - execnow purchasecurrentitemoption; \ - execnow equipclasscurrentoption ( dvarString( ui_custom_name ) ) ( dvarString( ui_option_name ) ); \ - execnow set ui_closeAfterPurchase 1; \ - close self; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_OPTION_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_EQUIP_CAPS", BUY_OPTION_AND_EQUIP_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self;, 1, name PurchaseOptionConfirmation_3 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseContractConfirmation", setfocus "PurchaseContractConfirmation_2", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( GetContractName( GetCurrentContractIndex() ), GetContractCost( GetCurrentContractIndex() ), GetContractDesc( GetCurrentContractIndex() ) ) - - #define BUY_CONTRACT_ACTION \ - execnow activatecontract ( GetCurrentContractIndex() ) ( dvarint( ui_activeContract ) ); \ - close self; \ - execnow ui_animate menu_xboxlive_contracts anim_controller CloseDropDownList 0; - - #define DEACTIVATE_AND_BUY_CONTRACT_ACTION \ - execnow activatecontract ( GetCurrentContractIndex() ) ( dvarint( ui_activeContract ) ); \ - close self; \ - execnow ui_animate menu_xboxlive_contracts anim_controller CloseDropDownList 0; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_CONTRACT_ACTION, ( !IsContractInProgress( GetIndexForActiveContract( dvarInt( ui_activeContract ) ) ) ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_DEACTIVATE_AND_BUY_CAPS", DEACTIVATE_AND_BUY_CONTRACT_ACTION, ( IsContractInProgress( GetIndexForActiveContract( dvarInt( ui_activeContract ) ) ) ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CANCEL_PURCHASE_CAPS", close self;, 1, name PurchaseContractConfirmation_2 ) - PREPROC_TEXT_DRAW_VIS_EX( CHOICE_X( 3 ) CHOICE_Y( 3 ) CHOICE_SIZE_X CHOICE_SIZE_Y, 0 0, "@MPUI_REPLACE_CONTRACT_WARNING", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, NEW_FRAME_ORANGE_RGB 1, when( IsContractInProgress( GetIndexForActiveContract( dvarInt( ui_activeContract ) ) ) );, autowrapped ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseWeaponOptionConfirmation", setfocus "PurchaseWeaponOptionConfirmation_2", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO_VIS( GetItemName( dvarInt( weaponOptionIndex ) ), GetWeaponOptionCost( GetItemOptionByName( dvarString( weaponOptionRef ) ) ), GetItemDesc( dvarInt( weaponOptionIndex ) ), 1 ) - - #define BUY_WEAPON_OPTION_ACTION( optionRef ) \ - execnow PurchaseWeaponOption optionRef; \ - close self; - - #define BUY_AND_EQUIP_WEAPON_OPTION_ACTION( optionRef ) \ - execnow PurchaseWeaponOption optionRef; \ - close self; \ - execnow toggleWeaponOption (dvarString( ui_custom_name )) optionRef; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_WEAPON_OPTION_ACTION( ( dvarString( weaponOptionRef ) ) ), 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_EQUIP_CAPS", BUY_AND_EQUIP_WEAPON_OPTION_ACTION( ( dvarString( weaponOptionRef ) ) ), 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self, 1, name PurchaseWeaponOptionConfirmation_2 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseEmblemLayerConfirmation", setfocus "PurchaseEmblemLayerConfirmation_2", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( ( locString( "MENU_EMBLEM_LAYER_CAPS", emblemSelectedLayer() + 1 ) ) , emblemLayerCost( emblemSelectedLayer() ), "" ) - - #define BUY_EMBLEM_LAYER_ACTION \ - execnow emblempurchaselayer; \ - close self; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_EMBLEM_LAYER_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CANCEL_PURCHASE_CAPS", close self;, 1, name PurchaseEmblemLayerConfirmation_2 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseClanTagFeatureConfirmation", setfocus "PurchaseClanTagFeatureConfirmation_2", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( "MPUI_CLANTAG_" + GetClanTagFeatureName( GetCurrentClanTagFeature() ), GetClanTagFeatureCost( GetCurrentClanTagFeature() ), "MPUI_CLANTAG_" + GetClanTagFeatureName( GetCurrentClanTagFeature() ) + "_DESC" ) - - #define BUY_CLAN_TAG_FEATURE_ACTION \ - execnow PurchaseClanTagFeature ( GetCurrentClanTagFeature() ); \ - close self; - - #define BUY_AND_EQUIP_CLAN_TAG_FEATURE_ACTION \ - execnow PurchaseClanTagFeature ( GetCurrentClanTagFeature() ); \ - execNow statwriteddl clanTagStats selectedFeature ( GetCurrentClanTagFeature() ); \ - close self; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_CLAN_TAG_FEATURE_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_EQUIP_CAPS", BUY_AND_EQUIP_CLAN_TAG_FEATURE_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self;, 1, name PurchaseClanTagFeatureConfirmation_2 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseCurrentWeaponOptionConfirmation", setfocus "PurchaseCurrentWeaponOptionConfirmation_2", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( GetWeaponOptionName( GetCurrentItemOption() ), GetWeaponOptionCost( GetCurrentItemOption() ), GetWeaponOptionName( GetCurrentItemOption() ) ) - - #define BUY_CURRENT_WEAPON_OPTION_ACTION \ - execnow purchasecurrentitemoption; \ - close self; - - #define BUY_AND_EQUIP_CURRENT_WEAPON_OPTION_ACTION \ - execnow purchasecurrentitemoption; \ - execnow "equipclasscurrentoption ( dvarString( ui_custom_name ) ) ( dvarString( ui_optiongroup_name ) )"; \ - execnow set ui_closeAfterPurchase 1; \ - close self; - - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_CURRENT_WEAPON_OPTION_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_EQUIP_CAPS", BUY_AND_EQUIP_CURRENT_WEAPON_OPTION_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self;, 1, name PurchaseCurrentWeaponOptionConfirmation_2 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseEmblemIconConfirmation", setfocus "PurchaseEmblemIconConfirmation_3", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( emblemIconName( localvarint( emblem_selected_icon_id ) ), emblemIconCost( localvarint( emblem_selected_icon_id ) ), "" ) - - #define BUY_EMBLEM_ICON_ACTION \ - execnow emblempurchaseicon ( localvarint( emblem_selected_icon_id ) ); \ - close self; - - #define BUY_SELECT_EMBLEM_ICON_ACTION \ - execnow emblempurchaseicon ( localvarint( emblem_selected_icon_id ) ); \ - close self; \ - execNow emblemClear; \ - execNow emblemIcon ( localvarint( emblem_selected_icon_id ) ); \ - close emblem_icon_select; \ - openimmediate emblem_edit; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_EMBLEM_ICON_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_SELECT_CAPS", BUY_SELECT_EMBLEM_ICON_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self;, 1, name PurchaseEmblemIconConfirmation_3 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseEmblemBackgroundConfirmation", setfocus "PurchaseEmblemBackgroundConfirmation_3", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( emblemBackgroundName( localvarint( bg_hi_index ) ), emblemBackgroundCost( localvarint( bg_hi_index ) ), "" ) - PREPROC_SHADER_DRAW( (PURCHASE_CONFIRMATION_RIGHT_X) CHOICE_Y( 4 ) 185 40, emblemBackgroundMaterial( localvarint( bg_hi_index ) ), 1 1 1 1 ) - - #define BUY_EMBLEM_BACKGROUND_ACTION \ - execnow emblempurchasebackgroundbyindex ( localvarint( bg_hi_index ) ); \ - close self; - - #define BUY_SELECT_EMBLEM_BACKGROUND_ACTION \ - execnow emblempurchasebackgroundbyindex ( localvarint( bg_hi_index ) ); \ - execnow emblemselectbackground ( localvarint( bg_hi_index ) ); \ - close self; \ - close emblem_bg_select; \ - openimmediate emblem_edit; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_EMBLEM_BACKGROUND_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_BUY_AND_SELECT_CAPS", BUY_SELECT_EMBLEM_BACKGROUND_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CANCEL_PURCHASE_CAPS", close self;, 1, name PurchaseEmblemBackgroundConfirmation_3 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PurchaseAttachmentPointConfirmation", setfocus "PurchaseAttachmentPointConfirmation_2", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - - #define SELECTED_ATTACHMENT_POINT_NAME \ - tablelookup( "mp/attachmentTable.csv", 4, dvarString( "selected_attachment_point" ), 3 ) - - #define SELECTED_ATTACHMENT_POINT_COST \ - tablelookup( "mp/attachmentTable.csv", 4, dvarString( "selected_attachment_point" ), 12 ) - - #define SELECTED_ATTACHMENT_POINT_DESC \ - tablelookup( "mp/attachmentTable.csv", 4, dvarString( "selected_attachment_point" ), 7 ) - - PURCHASE_CONFIRMATION_ITEM_INFO( SELECTED_ATTACHMENT_POINT_NAME, SELECTED_ATTACHMENT_POINT_COST, SELECTED_ATTACHMENT_POINT_DESC ) - - #define IS_PRIMARY ( dvarString( "selected_loadout_slot" ) == "primary" ) - - #define PURCHASE_ATTACH_POINT_ACTION \ - execnow "purchaseitemattachmentpoint" (Select( IS_PRIMARY, STAT_CAC_PRIMARY, STAT_CAC_SECONDARY )) (dvarString( "selected_attachment_point" )); \ - close self; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", PURCHASE_ATTACH_POINT_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CANCEL_PURCHASE_CAPS", close self;, 1, name PurchaseAttachmentPointConfirmation_2 ) - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( "PrestigeLBPurchaseConfirmation", setfocus "PrestigeLBPurchaseConfirmation_2", ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@MENU_CONFIRM_PURCHASE_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( "MPUI_PRESTIGE_LEADERBOARDS_CAPS", GetItemCost(GetItemIndex("FEATURE_PRESTIGE_LB")), "" ) - - #define BUY_PRESTIGE_LB_ACTION \ - execNow purchaseItem (getItemIndex("FEATURE_PRESTIGE_LB")); \ - execnow "uploadstats"; \ - close self; \ - openImmediate menu_playercards_lb_prestige - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_BUY_CAPS", BUY_PRESTIGE_LB_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CANCEL_PURCHASE_CAPS", close self, 1, name PrestigeLBPurchaseConfirmation_2 ) - } - - - // Redefinitions for LARGE_POPUP_SETUP popups - #undef POPUP_WIDTH - #define POPUP_WIDTH LARGE_POPUP_WIDTH - #undef POPUP_HEIGHT - #define POPUP_HEIGHT LARGE_POPUP_HEIGHT - #undef CHOICE_SIZE_X - #define CHOICE_SIZE_X (LARGE_POPUP_WIDTH / 3) - // Redefinitions for LARGE_POPUP_SETUP popups - - - // ==================================================================================================== - // reset to default class selection =================================================================== - // ==================================================================================================== - #define RESET_DEFAULT_ACTION( ptype ) \ - play CHOICE_FOCUS_SOUND; \ - open "popup_cac_defaultclasswarning"ptype; - - #undef CHOICE_GROUP - #define CHOICE_GROUP "reset_class" - - // hackaround to work for PC's floating mouse unfocusing - #undef UI_FOCUSFIRST - #ifdef PC - #define UI_FOCUSFIRST "ui_class" - #else - #define UI_FOCUSFIRST "ui_fake_focus" - #endif - menuDef - { - #define IS_CUSTOM_CLASS_MODE dvarInt( ui_useCustomClassInfo ) == 1 - - LARGE_POPUP_SETUP_VIS( "popup_cac_template", execnow "set "UI_FOCUSFIRST" class_smg";, ;, POPUP_GLOW_WHITE, 0, 1 ) - - LARGE_POPUP_TITLE_VIS( dvarString( dvarString( ui_custom_name ) ), when( !IS_CUSTOM_CLASS_MODE && IS_ONLINE_GAME && !IS_BASICTRAINING_GAME ) ) - LARGE_POPUP_TITLE_VIS( dvarString( dvarString( offline_custom_name ) ), when( !IS_CUSTOM_CLASS_MODE && ( !IS_ONLINE_GAME || IS_BASICTRAINING_GAME ) ) ) - LARGE_POPUP_TITLE_VIS( dvarString( custom_class_name ), when( IS_CUSTOM_CLASS_MODE ) ) - - LARGE_POPUP_SUBTITLE_VIS( toUpper( dvarstring(ui_menu_selection_title) ), 1 ) - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 1, "@CLASS_CLASS1", RESET_DEFAULT_ACTION( "_smg" ), setdvar ui_class class_custom_smg; setDvarFromLocString( ui_default_name, "@CLASS_CLASS1" );, ;, 1, ; ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 2, "@CLASS_CLASS2", RESET_DEFAULT_ACTION( "_cqb" ), setdvar ui_class class_custom_cqb; setDvarFromLocString( ui_default_name, "@CLASS_CLASS2" );, ;, 1, ; ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 3, "@CLASS_CLASS3", RESET_DEFAULT_ACTION( "_assault" ), setdvar ui_class class_custom_assault; setDvarFromLocString( ui_default_name, "@CLASS_CLASS3" );, ;, 1, ; ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 4, "@CLASS_CLASS4", RESET_DEFAULT_ACTION( "_lmg" ), setdvar ui_class class_custom_lmg; setDvarFromLocString( ui_default_name, "@CLASS_CLASS4" );, ;, 1, ; ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 5, "@CLASS_CLASS5", RESET_DEFAULT_ACTION( "_sniper" ), setdvar ui_class class_custom_sniper; setDvarFromLocString( ui_default_name, "@CLASS_CLASS5" );, ;, 1, ; ) - - #undef CAC_WIDTH - #define CAC_WIDTH LARGE_POPUP_WIDTH - #undef CAC_HEIGHT - #define CAC_HEIGHT LARGE_POPUP_HEIGHT - - #define COMMON_ITEM_INFO_WIDTH 200 - #define COMMON_ITEM_INFO_X (CAC_WIDTH - COMMON_ITEM_INFO_WIDTH - POPUP_SIDE_PAD ) - #define COMMON_ITEM_INFO_Y (POPUP_SIDE_PAD*1.5) - - // Default class stats - #undef STAT_CAC_PRIMARY_GRENADE - #define STAT_CAC_PRIMARY_GRENADE GetDefaultClassSlot( dvarstring( ui_class ), "primarygrenade" ) - #undef STAT_CAC_PRIMARY - #define STAT_CAC_PRIMARY GetDefaultClassSlot( dvarstring( ui_class ), "primary" ) - // no default attachments or camo for now - #undef STAT_CAC_PRIMARY_ATTACHMENT - #define STAT_CAC_PRIMARY_ATTACHMENT 0 - #undef STAT_CAC_PRIMARY_CAMO - #define STAT_CAC_PRIMARY_CAMO 0 - #undef STAT_CAC_SECONDARY - #define STAT_CAC_SECONDARY GetDefaultClassSlot( dvarstring( ui_class ), "secondary" ) - // no default attachments or camo for now - #undef STAT_CAC_SECONDARY_ATTACHMENT - #define STAT_CAC_SECONDARY_ATTACHMENT 0 - #undef STAT_CAC_SECONDARY_CAMO - #define STAT_CAC_SECONDARY_CAMO 0 - #undef STAT_CAC_SPECIALTY1 - #define STAT_CAC_SPECIALTY1 GetDefaultClassSlot( dvarstring( ui_class ), "specialty1" ) - #undef STAT_CAC_SPECIALTY2 - #define STAT_CAC_SPECIALTY2 GetDefaultClassSlot( dvarstring( ui_class ), "specialty2" ) - #undef STAT_CAC_SPECIALTY3 - #define STAT_CAC_SPECIALTY3 GetDefaultClassSlot( dvarstring( ui_class ), "specialty3" ) - #undef STAT_CAC_EQUIPMENT - #define STAT_CAC_EQUIPMENT GetDefaultClassSlot( dvarstring( ui_class ), "equipment" ) - #undef STAT_CAC_SPECIAL_GRENADE - #define STAT_CAC_SPECIAL_GRENADE GetDefaultClassSlot( dvarstring( ui_class ), "specialgrenade" ) - #undef STAT_CAC_BODY - #define STAT_CAC_BODY GetDefaultClassSlot( dvarstring( ui_class ), "body" ) - #undef STAT_CAC_DEATHSTREAK - #define STAT_CAC_DEATHSTREAK GetDefaultClassSlot( dvarstring( ui_class ), "deathstreak" ) - #undef STAT_CAC_KILLSTREAK_TIER1 - #define STAT_CAC_KILLSTREAK_TIER1 GetDefaultClassSlot( dvarstring( ui_class ), "killstreak1" ) - #undef STAT_CAC_KILLSTREAK_TIER2 - #define STAT_CAC_KILLSTREAK_TIER2 GetDefaultClassSlot( dvarstring( ui_class ), "killstreak2" ) - #undef STAT_CAC_KILLSTREAK_TIER3 - #define STAT_CAC_KILLSTREAK_TIER3 GetDefaultClassSlot( dvarstring( ui_class ), "killstreak3" ) - #undef FIRST_ATTACHMENT_PRIMARY_WEAPON - #define FIRST_ATTACHMENT_PRIMARY_WEAPON -1 - #undef SECOND_ATTACHMENT_PRIMARY_WEAPON - #define SECOND_ATTACHMENT_PRIMARY_WEAPON -1 - - - #include "ui_mp/newframe.inc" - #include "ui_mp/cac_item_info.inc" - - LARGE_POPUP_BACK_BUTTON - } diff --git a/mods/patch_mp/ui_mp/cac_weapon.menu b/mods/patch_mp/ui_mp/cac_weapon.menu deleted file mode 100644 index 602a271..0000000 --- a/mods/patch_mp/ui_mp/cac_weapon.menu +++ /dev/null @@ -1,1618 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/cac_stats.inc" -#include "ui_mp/common_macro.inc" - -#undef ORIGIN_TITLE -#define ORIGIN_TITLE 0 0 - -#ifdef CONSOLE - #undef CHOICE_X_START - #define CHOICE_X_START 0 - - #undef CHOICE_Y_START - #define CHOICE_Y_START 50 - - #define RECT_ALIGN ; -#else - #undef CHOICE_X_START - #define CHOICE_X_START 30 - - #undef CHOICE_Y_START - #define CHOICE_Y_START 90 - - #define RECT_ALIGN HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN; -#endif - -#undef CHOICE_GROUP -#define CHOICE_GROUP "cac_weapon" - -#define BUTTON_BG_WIDTH 210 - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/cac_viewer.inc" - -#include "ui_mp/cac_loadout.inc" -#include "ui_mp/cac_player_model.inc" -#include "ui_mp/cac_weapon_anim_states.inc" -#include "ui_mp/grid_common.inc" -#include "ui_mp/overlaybg.inc" -#include "ui_mp/popup_player_info.inc" -#include "ui_mp/stats_info.inc" -#include "ui_mp/item_listbox.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X 200 - -#define TOP_Y_OFFSET_ON 10 -#define BOTTOM_Y_OFFSET_ON -110 -#define TOP_Y_OFFSET_OFF -20 -#define BOTTOM_Y_OFFSET_OFF -60 - -#define LEFT_X_OFFSET 0 -#define MIDDLE_X_OFFSET -100 -#define RIGHT_X_OFFSET -200 - -#define CLASS_BONUS_VALUE GetClassBonus( dvarString( ui_custom_name ) ) -#define CAN_GUN_HAVE_CUSTOM_RETICLE ( dvarInt( ui_canHaveCustomReticle ) == 1 ) -#define CUSTOMIZING_RETICLE ( localVarInt( "ui_disable_controls" ) == 0 && dvarString( ui_inside_popup ) == "select_reticle" ) -#define CUSTOMIZING_RETICLE_COLOR ( localVarInt( "ui_disable_controls" ) == 0 && dvarString( ui_inside_popup ) == "select_reticle_color" ) -#define CUSTOMIZING_LENS ( localVarInt( "ui_disable_controls" ) == 0 && dvarString( ui_inside_popup ) == "select_lens" ) - -#define WEAPON_GROUP_LIST_BUTTON_B_ACTION \ - if ( dvarString( selected_loadout_slot ) == "primary" ) \ - { \ - execnow setCurrentItemIndex ( STAT_CAC_PRIMARY ); \ - } \ - elseif ( dvarString( selected_loadout_slot ) == "secondary" ) \ - { \ - execnow setCurrentItemIndex ( STAT_CAC_SECONDARY ); \ - } - -#define WEAPON_LIST_BUTTON_B_ACTION \ - execnow set cac_weapon_current_list weapon_group_list; \ - execnow set cac_weapon_feeder_count ( GetFeederCount( weapon_group_list ) ); \ - execnow set ui_next_inside_popup select_weapon_group; \ - if ( dvarString( selected_loadout_slot ) == "primary" ) \ - { \ - execnow setCurrentItemIndex ( STAT_CAC_PRIMARY ); \ - } \ - elseif ( dvarString( selected_loadout_slot ) == "secondary" ) \ - { \ - execnow setCurrentItemIndex ( STAT_CAC_SECONDARY ); \ - } - -#define UPDATE_ATTACH_SLOT_TOP \ - if ( dvarString( selected_loadout_slot ) == "primary" ) \ - { \ - execnow set ui_att_slot_top ( CAC_PRI_ATTACHMENT_SLOT_TOP ); \ - } \ - elseif ( dvarString( selected_loadout_slot ) == "secondary" ) \ - { \ - execnow set ui_att_slot_top ( CAC_SEC_ATTACHMENT_SLOT_TOP ); \ - } \ - if ( IsAttachmentAllowedOnItemIndex( STAT_CAC_PRIMARY, "elbit" ) || IsAttachmentAllowedOnItemIndex( STAT_CAC_PRIMARY, "reflex" ) ) \ - { \ - setDvar ui_canHaveCustomReticle 1; \ - } \ - else \ - { \ - setDvar ui_canHaveCustomReticle 0; \ - } - -#undef ON_ESC -#define ON_ESC \ - if( dvarString( cac_weapon_current_list ) == "weapon_list" ) \ - { \ - execnow ui_animate cac_weapon anim_controller CloseDropDownList 0; \ - WEAPON_LIST_BUTTON_B_ACTION \ - } \ - elseif( dvarString( cac_weapon_current_list ) == "weapon_group_list" ) \ - { \ - execnow ui_animate cac_weapon anim_controller CloseDropDownList 0; \ - WEAPON_GROUP_LIST_BUTTON_B_ACTION \ - } \ - else \ - { \ - if ( dvarString( selected_loadout_slot ) == "primary" ) \ - { \ - execnow setCurrentItemIndex ( STAT_CAC_PRIMARY ); \ - } \ - elseif ( dvarString( selected_loadout_slot ) == "secondary" ) \ - { \ - execnow setCurrentItemIndex ( STAT_CAC_SECONDARY ); \ - } \ - \ - if ( dvarString( ui_inside_popup ) != "0" ) \ - { \ - execnow ui_animate cac_weapon anim_controller CloseDropDownList 0; \ - } \ - else \ - { \ - closeimmediate self; \ - execnow changemenuopenslidedirection menu_cac_custom MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - openimmediate menu_cac_custom; \ - } \ - } - -{ - - menuDef - { - name cac_weapon - rect 0 0 640 480 - style WINDOW_STYLE_EMPTY - control MENU_CONTROL_OPENER - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - popup - - onOpen - { - if ( dvarString( ui_faction ) == "" ) { setdvar ui_faction FIRST_FACTION; } - execnow set ui_cac_weapon_hint_text ""; - SHOW_VIEWER; - SET_VIEWER_MODE_PLAYER; - // set focus to first menu selection - setfocus NEW_FRAME_BUTTON_NAME"1"; - execnow set cac_weapon_feeder_count 0; - UPDATE_ATTACH_SLOT_TOP - execNow set ui_numBarPartitions 10; - setlocalVarBool ui_inside_dropdown 0; - } - - onFocus - { - setLocalVarInt ui_highlight -1; - execnow set ui_cac_weapon_hint_text ""; - setLocalVarString ui_choicegroup CHOICE_GROUP; - activateBlur; - - UPDATE_ATTACH_SLOT_TOP - if ( dvarBool( "ui_closeAfterPurchase" ) ) - { - execnow ui_animate cac_weapon anim_controller CloseDropDownList 0; - execnow set ui_closeAfterPurchase 0; - } - } - - onEsc - { - ON_ESC - } - - onClose - { - deactivateBlur; - HIDE_VIEWER; - } - - // Frame setup - #define CAC_HEIGHT NEW_FRAME_DEFAULT_HEIGHT - #define CAC_WIDTH ( CAC_HEIGHT * FRAME_ASPECT_RATIO ) - #define IS_CUSTOM_CLASS_MODE dvarInt( ui_useCustomClassInfo ) == 1 - #define IS_ONLINE_GAME ( dvarInt( splitscreen ) == 0 && dvarInt( systemlink ) == 0 ) - #define IS_BASICTRAINING_GAME ( dvarInt( xblive_basictraining ) > 0 ) - - NEW_FRAME( CAC_WIDTH, CAC_HEIGHT ) - NEW_FRAME_TITLE( CAC_WIDTH, CAC_HEIGHT, "@MPUI_CREATE_A_CLASS_CAPS", when( !IS_CUSTOM_CLASS_MODE ) ) - NEW_FRAME_TITLE( CAC_WIDTH, CAC_HEIGHT, "@CUSTOM_EDIT_CLASS_LOADOUT_CAPS", when( IS_CUSTOM_CLASS_MODE ) ) - NEW_FRAME_SUBTITLE( CAC_WIDTH, CAC_HEIGHT, dvarString( dvarString( ui_custom_name ) ) + " / " + locString("@MPUI_PRIMARY_WEAPON_CAPS"), when( dvarString( selected_loadout_slot ) == "primary" && !IS_CUSTOM_CLASS_MODE && ( IS_ONLINE_GAME && !IS_BASICTRAINING_GAME ) ) ) - NEW_FRAME_SUBTITLE( CAC_WIDTH, CAC_HEIGHT, dvarString( dvarString( ui_custom_name ) ) + " / " + locString("@MPUI_SECONDARY_WEAPON_CAPS"), when( dvarString( selected_loadout_slot ) == "secondary" && !IS_CUSTOM_CLASS_MODE && ( IS_ONLINE_GAME && !IS_BASICTRAINING_GAME ) ) ) - NEW_FRAME_SUBTITLE( CAC_WIDTH, CAC_HEIGHT, dvarString( dvarString( offline_custom_name ) ) + " / " + locString("@MPUI_PRIMARY_WEAPON_CAPS"), when( dvarString( selected_loadout_slot ) == "primary" && !IS_CUSTOM_CLASS_MODE && ( !IS_ONLINE_GAME || IS_BASICTRAINING_GAME ) ) ) - NEW_FRAME_SUBTITLE( CAC_WIDTH, CAC_HEIGHT, dvarString( dvarString( offline_custom_name ) ) + " / " + locString("@MPUI_SECONDARY_WEAPON_CAPS"), when( dvarString( selected_loadout_slot ) == "secondary" && !IS_CUSTOM_CLASS_MODE && ( !IS_ONLINE_GAME || IS_BASICTRAINING_GAME ) ) ) - NEW_FRAME_SUBTITLE( CAC_WIDTH, CAC_HEIGHT, dvarString( custom_class_name ) + " / " + locString("@MPUI_PRIMARY_WEAPON_CAPS"), when( dvarString( selected_loadout_slot ) == "primary" && IS_CUSTOM_CLASS_MODE ) ) - NEW_FRAME_SUBTITLE( CAC_WIDTH, CAC_HEIGHT, dvarString( custom_class_name ) + " / " + locString("@MPUI_SECONDARY_WEAPON_CAPS"), when( dvarString( selected_loadout_slot ) == "secondary" && IS_CUSTOM_CLASS_MODE ) ) - - PLAYER_INFO_VIS( CAC_WIDTH, CAC_HEIGHT, 1 ) - -#define DIRT_IMAGE_WIDTH 400 -#define DIRT_IMAGE_HEIGHT 128 -#define DIRT_IMAGE_X (-DIRT_IMAGE_WIDTH/2) -#define DIRT_IMAGE_Y 60 - -#ifndef PC_INGAME - /* dirt image */ - PREPROC_SHADER_DRAW( DIRT_IMAGE_X DIRT_IMAGE_Y DIRT_IMAGE_WIDTH DIRT_IMAGE_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "menu_mp_lobby_cac_dirt", 1 1 1 0.2 ) - - CAC_FACTION_MODEL - -#ifdef PC - CAC_ROTATE_ARROWS -#endif // #ifdef PC -#endif - // Button setup -#define FEEDER_MAX 10 -#define FEEDER_COUNT ( dvarInt( cac_weapon_feeder_count ) ) -//#define LIMITED_FEEDER_COUNT ( Select( ( FEEDER_COUNT > FEEDER_MAX ), FEEDER_MAX, FEEDER_COUNT ) ) -#define LIMITED_FEEDER_COUNT 1 -#define SCROLL_ARROWS_OFFSET ( Select( ( FEEDER_COUNT > FEEDER_MAX ), ( NEW_FRAME_BUTTON_SPACING ), 0 ) ) - -#undef BUTTON_BG_WIDTH -#define BUTTON_BG_WIDTH NEW_FRAME_BUTTON_WIDTH -#define WEAPON_BUTTON_HEIGHT NEW_FRAME_BUTTON_HEIGHT -#define WEAPON_BUTTON_WIDTH NEW_FRAME_BUTTON_WIDTH -#define LEFT_X NEW_FRAME_CHOICE_X_START -#define TOP_Y NEW_FRAME_CHOICE_Y_START -#define BOTTOM_Y ( CAC_HEIGHT / 2 - WEAPON_BUTTON_HEIGHT - 10 ) - -#define SELECT_WEAPON_INDEX 1 -#define SELECT_WEAPON_INDEX_STRING "1" -#define ATTACHMENTS_INDEX 2 -#define CAMO_INDEX 3 -#define CAMO_INDEX_STRING "3" -#define RETICLE_INDEX 4 -#define RETICLE_INDEX_STRING "4" -#define RETICLE_COLOR_INDEX 5 -#define RETICLE_COLOR_INDEX_STRING "5" -#define LENS_INDEX 6 -#define LENS_INDEX_STRING "6" -#define GUN_TAG_INDEX 7 -#define GUN_TAG_INDEX_STRING "7" -#define GUN_EMBLEM_INDEX 8 -#define GUN_EMBLEM_INDEX_STRING "8" -#define DUAL_WIELD_INDEX 9 -#define SECOND_ATTACHMENT_INDEX 10 -#define HINT_INDEX 11 - -#define SELECT_WEAPON_Y ( TOP_Y ) -#define ATTACHMENTS_Y ( SELECT_WEAPON_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_BUTTON_SPACING ) -#define CAMO_Y ( ATTACHMENTS_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_BUTTON_SPACING ) -#define RETICLE_Y ( CAMO_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_SEPARATED_BUTTON_SPACING ) -#define RETICLE_COLOR_Y ( RETICLE_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_BUTTON_SPACING ) -#define LENS_Y ( RETICLE_COLOR_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_BUTTON_SPACING ) -#define GUN_TAG_Y ( LENS_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_SEPARATED_BUTTON_SPACING ) -#define GUN_EMBLEM_Y ( GUN_TAG_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_BUTTON_SPACING ) -#define DUAL_WIELD_Y ( GUN_EMBLEM_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_BUTTON_SPACING ) -#define SECOND_ATTACHMENT_Y ( DUAL_WIELD_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_BUTTON_SPACING ) -#define HINT_Y ( SECOND_ATTACHMENT_Y + WEAPON_BUTTON_HEIGHT + NEW_FRAME_BUTTON_SPACING ) - -#define LAST_Y HINT_Y -#define ACCORDION_HEIGHT ( BOTTOM_Y - LAST_Y ) - - // Listbox setup -#define LIST_X_START LEFT_X -#define LIST_HEIGHT 0 -#define LIST_UNROLLED_HEIGHT ( FEEDER_MAX * 17 + 5 ) -#define LIST_WIDTH WEAPON_BUTTON_WIDTH -#define LIST_ELEM_HEIGHT 17 -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER - - // Animation states -#define BUTTONS_FADE_TIME 90 -#define ACCORDION_EXPAND_TIME 150 -#define ACCORDION_ROLLUP_TIME 150 -#define INTERIM_ANIM_TIME 15 - -#define GET_SLOT_STAT \ - ( Select( dvarString( selected_loadout_slot ) == "primary", STAT_CAC_PRIMARY, STAT_CAC_SECONDARY ) ) - -#define LISTBOX_STATES \ - state \ - { \ - name Unrolled \ - rect LIST_X_START LIST_Y_START LIST_WIDTH LIST_UNROLLED_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - } - - // This is a dummy itemDef to disable controls. - // Used when animating. - itemDef - { - name dummyButton - type ITEM_TYPE_BUTTON_NO_TEXT - rect 0 0 0 0 - visible when( localVarInt( "ui_disable_controls" ) == 1 ); - - execKeyInt BUTTON_B {} - execKeyInt APAD_UP {} - execKeyInt DPAD_UP {} - execKeyInt APAD_DOWN {} - execKeyInt DPAD_DOWN {} - execKeyInt APAD_LEFT {} - execKeyInt DPAD_LEFT {} - execKeyInt APAD_RIGHT {} - execKeyInt DPAD_RIGHT {} - } - - // Animation controller - itemDef - { - name anim_controller - style WINDOW_STYLE_SHADER - rect 0 0 0 0 - visible 1 - decoration - - // Open drop down list - state - { - name OpenDropDownList - onEnter - { - setLocalVarInt ui_disable_controls 1; - setFocus dummyButton; - execNow if ( localVarInt( ui_weaponButton ) < 8 ) ui_animate cac_weapon NEW_FRAME_BUTTON_NAME"8" Transparent BUTTONS_FADE_TIME; - execNow if ( localVarInt( ui_weaponButton ) < 7 ) ui_animate cac_weapon NEW_FRAME_BUTTON_NAME"7" Transparent BUTTONS_FADE_TIME; - execNow if ( localVarInt( ui_weaponButton ) < 6 ) ui_animate cac_weapon NEW_FRAME_BUTTON_NAME"6" Transparent BUTTONS_FADE_TIME; - execNow if ( localVarInt( ui_weaponButton ) < 5 ) ui_animate cac_weapon NEW_FRAME_BUTTON_NAME"5" Transparent BUTTONS_FADE_TIME; - execNow if ( localVarInt( ui_weaponButton ) < 4 ) ui_animate cac_weapon NEW_FRAME_BUTTON_NAME"4" Transparent BUTTONS_FADE_TIME; - execNow if ( localVarInt( ui_weaponButton ) < 3 ) ui_animate cac_weapon NEW_FRAME_BUTTON_NAME"3" Transparent BUTTONS_FADE_TIME; - execNow if ( localVarInt( ui_weaponButton ) < 2 ) ui_animate cac_weapon NEW_FRAME_BUTTON_NAME"2" Transparent BUTTONS_FADE_TIME; - execnow ui_animate cac_weapon menu_hint Transparent BUTTONS_FADE_TIME; - execnow ui_animate cac_weapon list_hint Transparent 0; - execnow ui_animate cac_weapon anim_controller OpenDropDownList2 ( BUTTONS_FADE_TIME + INTERIM_ANIM_TIME ); - } - } - state - { - name OpenDropDownList2 - onEnter - { - setLocalVarBool ui_inside_dropdown 1; - execnow ui_animate cac_weapon (dvarString( cac_weapon_current_list )) Unrolled ACCORDION_EXPAND_TIME; - execnow ui_animate cac_weapon list_hint Default ACCORDION_EXPAND_TIME; - play uin_navigation_menu_sm_open; - execnow ui_animate cac_weapon anim_controller OpenDropDownList3 ( ( LIMITED_FEEDER_COUNT * ACCORDION_EXPAND_TIME ) + INTERIM_ANIM_TIME ); - } - } - state - { - name OpenDropDownList3 - onEnter - { - execnow focusitem ( dvarString( cac_weapon_current_list ) ); - setLocalVarInt ui_disable_controls 0; - } - } - - // Close drop down list - state - { - name CloseDropDownList - onEnter - { - UPDATE_ATTACH_SLOT_TOP - setLocalVarInt ui_disable_controls 1; - setFocus dummyButton; - execnow ui_animate cac_weapon (dvarString( cac_weapon_current_list )) Default ( LIMITED_FEEDER_COUNT * ACCORDION_ROLLUP_TIME ); - execnow ui_animate cac_weapon list_hint Transparent ACCORDION_ROLLUP_TIME; - execnow ui_animate cac_weapon anim_controller CloseDropDownList2 ( ( LIMITED_FEEDER_COUNT * ACCORDION_ROLLUP_TIME ) + INTERIM_ANIM_TIME ); - execnow set cac_weapon_current_list ""; - execnow set cac_weapon_feeder_count 0; - play uin_navigation_menu_sm_close; - } - } - state - { - name CloseDropDownList2 - onEnter - { - setLocalVarInt ui_inside_dropdown 0; - if ( dvarString( cac_weapon_current_list ) != "" ) - { - execnow set ui_inside_popup (dvarString(ui_next_inside_popup)); - if( dvarString(ui_next_inside_popup) == "select_weapon_group" ) - { - execnow setCurrentItemIndex ( GET_SLOT_STAT ); - } - execnow ui_animate cac_weapon anim_controller OpenDropDownList 0; - } - else - { - execnow ui_animate cac_weapon * Default BUTTONS_FADE_TIME; - execnow ui_animate cac_weapon list_hint Transparent 0; - execnow ui_animate cac_weapon anim_controller CloseDropDownList3 ( BUTTONS_FADE_TIME + INTERIM_ANIM_TIME ); - } - } - } - state - { - name CloseDropDownList3 - onEnter - { - execnow focusitem (NEW_FRAME_BUTTON_NAME+localVarInt( ui_weaponButton )); - setLocalVarInt ui_disable_controls 0; - execnow set ui_inside_popup "0"; - } - } - } - -#define IS_PRI ( dvarString( selected_loadout_slot ) == "primary" ) -#define IS_SEC ( dvarString( selected_loadout_slot ) == "secondary" ) - - // Button actions -#define COMMON_BUTTON_ACTION \ - execnow ui_animate cac_weapon anim_controller OpenDropDownList 0; - -#define SELECT_WEAPON_ACTION \ - if ( dvarString( ui_inside_popup ) != "0" ) \ - { \ - ON_ESC \ - } \ - else \ - { \ - setDvar ui_inside_popup select_weapon_group; \ - execnow set cac_weapon_current_list weapon_group_list; \ - execnow set cac_weapon_feeder_count ( GetFeederCount( weapon_group_list ) );\ - setLocalVarInt ui_weaponButton SELECT_WEAPON_INDEX; \ - COMMON_BUTTON_ACTION \ - } - -#define SELECT_WEAPON_VIS \ - ( !localVarBool( ui_inside_dropdown ) || ( localVarInt( ui_weaponButton ) >= SELECT_WEAPON_INDEX ) ) - -#define ATTACHMENTS_ACTION \ - if ( dvarString( ui_inside_popup ) != "0" ) \ - { \ - ON_ESC \ - } \ - else \ - { \ - if ( dvarString( selected_loadout_slot ) == "primary" ) \ - { \ - execnow setCurrentItemIndex ( STAT_CAC_PRIMARY ); \ - } \ - elseif ( dvarString( selected_loadout_slot ) == "secondary" ) \ - { \ - execnow setCurrentItemIndex ( STAT_CAC_SECONDARY ); \ - } \ - setDvar ui_inside_popup attachments; \ - execnow set cac_weapon_current_list attachments_list; \ - execnow set cac_weapon_feeder_count ( GetFeederCount( attachments_list ) ); \ - setLocalVarInt ui_weaponButton ATTACHMENTS_INDEX; \ - COMMON_BUTTON_ACTION \ - } - -#define ATTACHMENTS_VIS \ - ( !localVarBool( ui_inside_dropdown ) || ( localVarInt( ui_weaponButton ) >= ATTACHMENTS_INDEX ) ) - -#define WEAPON_OPTION_ACTION( popupName, currentList, index, group ) \ - if ( dvarString( ui_inside_popup ) != "0" ) \ - { \ - ON_ESC \ - } \ - else \ - { \ - execNow set ui_currentWeaponOptionGroup group; \ - if ( dvarString( selected_loadout_slot ) == "primary" ) \ - { \ - execNow set selected_group GetItemGroup( STAT_CAC_PRIMARY ); \ - execnow setCurrentItemIndex ( STAT_CAC_PRIMARY ); \ - } \ - elseif ( dvarString( selected_loadout_slot ) == "secondary" ) \ - { \ - execNow set selected_group GetItemGroup( STAT_CAC_SECONDARY ); \ - execnow setCurrentItemIndex ( STAT_CAC_SECONDARY ); \ - } \ - setDvar ui_inside_popup popupName; \ - execnow set cac_weapon_current_list currentList; \ - execnow set cac_weapon_feeder_count ( GetFeederCount( currentList ) ); \ - setLocalVarInt ui_weaponButton index; \ - COMMON_BUTTON_ACTION \ - } - -#define CAMO_ACTION \ - WEAPON_OPTION_ACTION( select_camo, camo_list, CAMO_INDEX, 0 ) \ - -#define CAMO_VIS \ - ( !localVarBool( ui_inside_dropdown ) || ( localVarInt( ui_weaponButton ) >= CAMO_INDEX ) ) - -#define RETICLE_ACTION \ - WEAPON_OPTION_ACTION( select_reticle, reticle_list, RETICLE_INDEX, 1 ) \ - -#define RETICLE_VIS \ - ( !localVarBool( ui_inside_dropdown ) || ( localVarInt( ui_weaponButton ) >= RETICLE_INDEX ) ) - -#define RETICLE_COLOR_ACTION \ - WEAPON_OPTION_ACTION( select_reticle_color, reticle_color_list, RETICLE_COLOR_INDEX, 5 ) - -#define RETICLE_COLOR_VIS \ - ( !localVarBool( ui_inside_dropdown ) || ( localVarInt( ui_weaponButton ) >= RETICLE_COLOR_INDEX ) ) - -#define LENS_ACTION \ - WEAPON_OPTION_ACTION( select_lens, lens_list, LENS_INDEX, 2 ) \ - -#define LENS_VIS \ - ( !localVarBool( ui_inside_dropdown ) || ( localVarInt( ui_weaponButton ) >= LENS_INDEX ) ) - - // Conditions -#include "ui_mp/cac_attachment_conditions.inc" - -#define IS_NO_LIST_OPEN ( dvarString( "ui_inside_popup" ) == "0" ) -#define IS_WEAPON_LIST_OPEN ( dvarString( "ui_inside_popup" ) == "select_weapon_group" || dvarString( "ui_inside_popup" ) == "select_weapon" ) -#define IS_ATTACHMENT_LIST_OPEN ( dvarString( "ui_inside_popup" ) == "attachments" ) -#define ATTACHMENTS_AVAILABLE ( GetCurrentItemNumAttachments() > 1 ) // None counts as an attachment. -#define IS_CAMO_LIST_OPEN ( dvarString( "ui_inside_popup" ) == "select_camo" ) -#define IS_RETICLE_LIST_OPEN ( dvarString( "ui_inside_popup" ) == "select_reticle" ) -#define IS_LENS_LIST_OPEN ( dvarString( "ui_inside_popup" ) == "select_lens" || dvarString( "ui_inside_popup" ) == "select_lens_color" ) - -#define ACCORDION_BUTTON_RECT( yPos ) \ - LEFT_X yPos WEAPON_BUTTON_WIDTH WEAPON_BUTTON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - - // Accordion buttons - NEW_FRAME_BUTTON( 1, ACCORDION_BUTTON_RECT( SELECT_WEAPON_Y ), - "@MPUI_PRIMARY_WEAPON_CAPS", - SELECT_WEAPON_ACTION, - ;, - ;, - dvarString( selected_loadout_slot ) == "primary" && SELECT_WEAPON_VIS, ;, ; ) - NEW_FRAME_BUTTON( 1, ACCORDION_BUTTON_RECT( SELECT_WEAPON_Y ), - "@MPUI_SECONDARY_WEAPON_CAPS", - SELECT_WEAPON_ACTION, - ;, - ;, - dvarString( selected_loadout_slot ) == "secondary" && SELECT_WEAPON_VIS, ;, ; ) - NEW_FRAME_NEWICON_RECT_VIS( LEFT_X, SELECT_WEAPON_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( ANY_NEW_PRIMARIES && dvarString( selected_loadout_slot ) == "primary" && dvarString( "ui_inside_popup" ) == "0" ), - name NEW_FRAME_BUTTON_NAME SELECT_WEAPON_INDEX_STRING; ) - NEW_FRAME_NEWICON_RECT_VIS( LEFT_X, SELECT_WEAPON_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( ANY_NEW_SECONDARIES && dvarString( selected_loadout_slot ) == "secondary" && dvarString( "ui_inside_popup" ) == "0" ), - name NEW_FRAME_BUTTON_NAME SELECT_WEAPON_INDEX_STRING; ) - - - - NEW_FRAME_BUTTON( 2, ACCORDION_BUTTON_RECT( ATTACHMENTS_Y ), - "@MPUI_ATTACHMENTS_CAPS", - ATTACHMENTS_ACTION, - ;, - ;, - ATTACHMENTS_AVAILABLE && ATTACHMENTS_VIS, ;, ; ) - NEW_FRAME_BUTTON_COLOR( 2, ACCORDION_BUTTON_RECT( ATTACHMENTS_Y ), - "@MPUI_ATTACHMENTS_CAPS", MEDIUM_GRAY_RGB, MEDIUM_GRAY_ALPHA, MEDIUM_GRAY, - ;, - execnow set ui_cac_weapon_hint_text "@MPUI_GUN_HAS_NO_ATTACHMENTS";, - execnow set ui_cac_weapon_hint_text "";, - !ATTACHMENTS_AVAILABLE && ATTACHMENTS_VIS, ;, ; ) - - - - NEW_FRAME_BUTTON( 3, ACCORDION_BUTTON_RECT( CAMO_Y ), - "@MPUI_CAMO_CAPS", - CAMO_ACTION, - CLEAR_ITEM_NEW( FEATURE_CAMO ), - ;, - ( IS_PRI && !CAMO_LOCKED ) && CAMO_VIS, ;, ; ) - NEW_FRAME_BUTTON_COLOR( 3, ACCORDION_BUTTON_RECT( CAMO_Y ), - "@MPUI_CAMO_CAPS", MEDIUM_GRAY_RGB, MEDIUM_GRAY_ALPHA, MEDIUM_GRAY, - ;, - execnow set ui_cac_weapon_hint_text GET_UNLOCK_LEVEL_STRING( FEATURE_CAMO );, - execnow set ui_cac_weapon_hint_text "";, - ( IS_PRI && CAMO_LOCKED ) && CAMO_VIS, ;, ; ) - NEW_FRAME_NEWICON_RECT_VIS( LEFT_X, CAMO_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( IS_ITEM_NEW( FEATURE_CAMO ) && IS_PRI ), - name NEW_FRAME_BUTTON_NAME CAMO_INDEX_STRING; ) - NEW_FRAME_LOCKEDICON_RECT_VIS( LEFT_X, CAMO_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( IS_PRI && CAMO_LOCKED ), - name NEW_FRAME_BUTTON_NAME CAMO_INDEX_STRING; ) - - - - NEW_FRAME_BUTTON( 4, ACCORDION_BUTTON_RECT( RETICLE_Y ), - "@MPUI_RETICLE_CAPS", - RETICLE_ACTION, - CLEAR_ITEM_NEW( FEATURE_RETICLES ), - ;, - ( LENSESORRETICLES_AVAILABLE && IS_PRI && !RETICLES_LOCKED ) && RETICLE_VIS, ;, ; ) - NEW_FRAME_BUTTON_COLOR( 4, ACCORDION_BUTTON_RECT( RETICLE_Y ), - "@MPUI_RETICLE_CAPS", MEDIUM_GRAY_RGB, MEDIUM_GRAY_ALPHA, MEDIUM_GRAY, - ;, - execnow set ui_cac_weapon_hint_text "@MPUI_NEED_RETICLE_ATTACHMENT"; CLEAR_ITEM_NEW( FEATURE_RETICLES ), - execnow set ui_cac_weapon_hint_text "";, - ( !LENSESORRETICLES_AVAILABLE && !RETICLES_LOCKED && IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE ) && RETICLE_VIS, ;, ; ) - NEW_FRAME_BUTTON_COLOR( 4, ACCORDION_BUTTON_RECT( RETICLE_Y ), - "@MPUI_RETICLE_CAPS", MEDIUM_GRAY_RGB, MEDIUM_GRAY_ALPHA, MEDIUM_GRAY, - ;, - execnow set ui_cac_weapon_hint_text GET_UNLOCK_LEVEL_STRING( FEATURE_RETICLES );, - execnow set ui_cac_weapon_hint_text "";, - ( RETICLES_LOCKED && IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE ) && RETICLE_VIS, ;, ; ) - NEW_FRAME_NEWICON_RECT_VIS( LEFT_X, RETICLE_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( IS_ITEM_NEW( FEATURE_RETICLES ) && IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE ), - name NEW_FRAME_BUTTON_NAME RETICLE_INDEX_STRING; ) - NEW_FRAME_LOCKEDICON_RECT_VIS( LEFT_X, RETICLE_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE && RETICLES_LOCKED ), - name NEW_FRAME_BUTTON_NAME RETICLE_INDEX_STRING; ) - - - - NEW_FRAME_BUTTON( 5, ACCORDION_BUTTON_RECT( RETICLE_COLOR_Y ), - "@MPUI_RETICLE_COLOR_CAPS", - RETICLE_COLOR_ACTION, - CLEAR_ITEM_NEW( FEATURE_RETICLE_COLOR ), - ;, - ( LENSESORRETICLES_AVAILABLE && IS_PRI && !RETICLE_COLOR_LOCKED ) && RETICLE_COLOR_VIS, ;, ; ) - NEW_FRAME_BUTTON_COLOR( 5, ACCORDION_BUTTON_RECT( RETICLE_COLOR_Y ), - "@MPUI_RETICLE_COLOR_CAPS", MEDIUM_GRAY_RGB, MEDIUM_GRAY_ALPHA, MEDIUM_GRAY, - ;, - execnow set ui_cac_weapon_hint_text "@MPUI_NEED_RETICLE_COLOR_ATTACHMENT"; CLEAR_ITEM_NEW( FEATURE_RETICLE_COLOR ), - execnow set ui_cac_weapon_hint_text "";, - ( !LENSESORRETICLES_AVAILABLE && !RETICLE_COLOR_LOCKED && IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE ) && RETICLE_COLOR_VIS, ;, ; ) - NEW_FRAME_BUTTON_COLOR( 5, ACCORDION_BUTTON_RECT( RETICLE_COLOR_Y ), - "@MPUI_RETICLE_COLOR_CAPS", MEDIUM_GRAY_RGB, MEDIUM_GRAY_ALPHA, MEDIUM_GRAY, - ;, - execnow set ui_cac_weapon_hint_text GET_UNLOCK_LEVEL_STRING( FEATURE_RETICLES );, - execnow set ui_cac_weapon_hint_text "";, - ( RETICLE_COLOR_LOCKED && IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE ) && RETICLE_COLOR_VIS, ;, ; ) - NEW_FRAME_NEWICON_RECT_VIS( LEFT_X, RETICLE_COLOR_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( IS_ITEM_NEW( FEATURE_RETICLE_COLOR ) && IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE ), - name NEW_FRAME_BUTTON_NAME RETICLE_COLOR_INDEX_STRING; ) - NEW_FRAME_LOCKEDICON_RECT_VIS( LEFT_X, RETICLE_COLOR_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE && RETICLE_COLOR_LOCKED ), - name NEW_FRAME_BUTTON_NAME RETICLE_COLOR_INDEX_STRING; ) - - - - NEW_FRAME_BUTTON( 6, ACCORDION_BUTTON_RECT( LENS_Y ), - "@MPUI_LENS_CAPS", - LENS_ACTION, - CLEAR_ITEM_NEW( FEATURE_LENSES ), - ;, - ( LENSESORRETICLES_AVAILABLE && !LENSES_LOCKED && IS_PRI ) && LENS_VIS, ;, ; ) - NEW_FRAME_BUTTON_COLOR( 6, ACCORDION_BUTTON_RECT( LENS_Y ), - "@MPUI_LENS_CAPS", MEDIUM_GRAY_RGB, MEDIUM_GRAY_ALPHA, MEDIUM_GRAY, - ;, - execnow set ui_cac_weapon_hint_text "@MPUI_NEED_LENS_ATTACHMENT"; CLEAR_ITEM_NEW( FEATURE_LENSES ), - execnow set ui_cac_weapon_hint_text "";, - ( IS_PRI && !LENSESORRETICLES_AVAILABLE && !LENSES_LOCKED && CAN_GUN_HAVE_CUSTOM_RETICLE ) && LENS_VIS, ;, ; ) - NEW_FRAME_BUTTON_COLOR( 6, ACCORDION_BUTTON_RECT( LENS_Y ), - "@MPUI_LENS_CAPS", MEDIUM_GRAY_RGB, MEDIUM_GRAY_ALPHA, MEDIUM_GRAY, - ;, - execnow set ui_cac_weapon_hint_text GET_UNLOCK_LEVEL_STRING( FEATURE_LENSES ); , - execnow set ui_cac_weapon_hint_text "";, - ( IS_PRI && LENSES_LOCKED && CAN_GUN_HAVE_CUSTOM_RETICLE ) && LENS_VIS, ;, ; ) - NEW_FRAME_NEWICON_RECT_VIS( LEFT_X, LENS_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( IS_ITEM_NEW( FEATURE_LENSES ) && IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE ), - name NEW_FRAME_BUTTON_NAME LENS_INDEX_STRING; ) - NEW_FRAME_LOCKEDICON_RECT_VIS( LEFT_X, LENS_Y, WEAPON_BUTTON_WIDTH, WEAPON_BUTTON_HEIGHT, HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( IS_PRI && CAN_GUN_HAVE_CUSTOM_RETICLE && LENSES_LOCKED ), - name NEW_FRAME_BUTTON_NAME LENS_INDEX_STRING; ) - - // Fixed buttons - // --------------------------------------------------------------------------------------------------------------------- -#define IS_FIXED_BUTTON_ACTIVE ( dvarInt( ui_useCustomClassInfo ) == 0 && ( dvarString( "ui_inside_popup" ) == "0" ) ) - - // Gun Tag Button -#define HAVE_ENOUGH_FOR_GUN_TAG ( GetWeaponOptionCost( GetItemOptionByName( "tag" ) ) <= GetStatByName( "CODPOINTS" ) ) -#define CAN_NOT_AFFORD_GUN_TAG ( !GUN_TAG_LOCKED && !GUN_TAG_PURCHASED && !HAVE_ENOUGH_FOR_GUN_TAG ) -#define CAN_AFFORD_GUN_TAG ( !GUN_TAG_LOCKED && !GUN_TAG_PURCHASED && HAVE_ENOUGH_FOR_GUN_TAG ) -#define CAN_TOGGLE_GUN_TAG ( GUN_TAG_PURCHASED ) -#define IS_PRI_GUN_TAG_EQUIPPED ( IS_PRI && (STAT_CAC_PRIMARY_TAG) ) -#define IS_SEC_GUN_TAG_EQUIPPED ( IS_SEC && (STAT_CAC_SECONDARY_TAG) ) - -#define GUN_TAG_X LEFT_X -#define GUN_TAG_W WEAPON_BUTTON_WIDTH -#define GUN_TAG_H WEAPON_BUTTON_HEIGHT -#define GUN_TAG_ALIGN HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER -#define GUN_TAG_RECT GUN_TAG_X GUN_TAG_Y GUN_TAG_W GUN_TAG_H GUN_TAG_ALIGN -#define GUN_TAG_COST_W 50 -#define GUN_TAG_COST_RECT (GUN_TAG_X+GUN_TAG_W-GUN_TAG_COST_W-2) GUN_TAG_Y GUN_TAG_COST_W GUN_TAG_H GUN_TAG_ALIGN -#define GUN_TAG_EQUIP_W GUN_TAG_H -#define GUN_TAG_EQUIP_RECT (GUN_TAG_X+GUN_TAG_W-GUN_TAG_EQUIP_W-2) GUN_TAG_Y GUN_TAG_EQUIP_W GUN_TAG_EQUIP_W GUN_TAG_ALIGN - -#define PURCHASE_GUN_TAG_ACTION \ - execnow set weaponOptionIndex ( GetItemIndex( FEATURE_GUN_TAG ) ); \ - execnow set weaponOptionRef "tag"; \ - open PurchaseWeaponOptionConfirmation; - -#define TOGGLE_GUN_TAG_ACTION \ - execnow toggleWeaponOption (dvarString( ui_custom_name )) tag; - -#define GUN_TAG_VIS \ - ( !localVarBool( ui_inside_dropdown ) ) - -#define GUN_TAG_BUTTONS( xArg, yArg, wArg, hArg, alignArg, visArg ) \ - /* Buttons */ \ - NEW_FRAME_DBUTTON( 7, xArg yArg wArg hArg alignArg, "@MPUI_GUN_TAG_CAPS", \ - ;, \ - execnow set ui_cac_weapon_hint_text GET_UNLOCK_LEVEL_STRING( FEATURE_GUN_TAG );, \ - execnow set ui_cac_weapon_hint_text "";, \ - ( IS_PRI && GUN_TAG_LOCKED && dvarInt( ui_useCustomClassInfo ) == 0 && visArg ), ;, ; ) \ - NEW_FRAME_BUTTON_COLOR( 7, xArg yArg wArg hArg alignArg, "@MPUI_GUN_TAG_CAPS", NEW_FRAME_RED_RGB, NEW_FRAME_RED_ALPHA, NEW_FRAME_RED, \ - ;, \ - CLEAR_ITEM_NEW( FEATURE_GUN_TAG ), \ - ;, \ - ( IS_PRI && CAN_NOT_AFFORD_GUN_TAG && visArg ), ;, ; ) \ - NEW_FRAME_BUTTON_COLOR( 7, xArg yArg wArg hArg alignArg, "@MPUI_GUN_TAG_CAPS", NEW_FRAME_GREEN_RGB, NEW_FRAME_GREEN_ALPHA, NEW_FRAME_GREEN, \ - PURCHASE_GUN_TAG_ACTION, \ - CLEAR_ITEM_NEW( FEATURE_GUN_TAG ), \ - ;, \ - ( IS_PRI && CAN_AFFORD_GUN_TAG && visArg ), ;, ; ) \ - NEW_FRAME_BUTTON_COLOR( 7, xArg yArg wArg hArg alignArg, "@MPUI_GUN_TAG_CAPS", WHITE_RGB, WHITE_ALPHA, BLACK, \ - TOGGLE_GUN_TAG_ACTION, \ - CLEAR_ITEM_NEW( FEATURE_GUN_TAG ), \ - ;, \ - ( IS_PRI && CAN_TOGGLE_GUN_TAG && visArg ), ;, ; ) \ - /* New Icon */ \ - NEW_FRAME_NEWICON_RECT_VIS( xArg, yArg, wArg, hArg, alignArg, \ - ( IS_ITEM_NEW( FEATURE_GUN_TAG ) && IS_PRI && visArg ), \ - name NEW_FRAME_BUTTON_NAME GUN_TAG_INDEX_STRING; ) \ - /* Locked Icon */ \ - NEW_FRAME_LOCKEDICON_RECT_VIS( xArg, yArg, wArg, hArg, alignArg, \ - (IS_PRI && GUN_TAG_LOCKED && visArg), \ - name NEW_FRAME_BUTTON_NAME GUN_TAG_INDEX_STRING; ) \ - /* Cost */ \ - PREPROC_TEXT_DRAW_VIS_EX( (xArg+wArg-GUN_TAG_COST_W-10) yArg GUN_TAG_COST_W hArg alignArg, 0 0, \ - locString( "@MENU_POINTS", GetWeaponOptionCost( GetItemOptionByName( "tag" ) ) ), \ - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_RED, \ - when( IS_PRI && CAN_NOT_AFFORD_GUN_TAG && visArg );, \ - name NEW_FRAME_BUTTON_NAME GUN_TAG_INDEX_STRING; NEW_FRAME_TRANSPARENT_STATE( NEW_FRAME_RED_RGB ) ) \ - PREPROC_TEXT_DRAW_VIS_EX( (xArg+wArg-GUN_TAG_COST_W-10) yArg GUN_TAG_COST_W hArg alignArg, 0 0, \ - locString( "@MENU_POINTS", GetWeaponOptionCost( GetItemOptionByName( "tag" ) ) ), \ - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN, \ - when( IS_PRI && CAN_AFFORD_GUN_TAG && visArg );, \ - name NEW_FRAME_BUTTON_NAME GUN_TAG_INDEX_STRING; NEW_FRAME_TRANSPARENT_STATE( NEW_FRAME_GREEN_RGB ) ) \ - /* Equipped Icon */ \ - PREPROC_SHADER_DRAW_VIS_EX( (xArg+wArg-GUN_TAG_EQUIP_W-2) yArg GUN_TAG_EQUIP_W GUN_TAG_EQUIP_W alignArg, \ - "menu_mp_killstreak_select", 1 1 1 1, \ - when( IS_PRI && IS_PRI_GUN_TAG_EQUIPPED && visArg );, \ - name NEW_FRAME_BUTTON_NAME GUN_TAG_INDEX_STRING; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) \ - PREPROC_SHADER_DRAW_VIS_EX( (xArg+wArg-GUN_TAG_EQUIP_W-2) yArg GUN_TAG_EQUIP_W GUN_TAG_EQUIP_W alignArg, \ - "menu_mp_killstreak_select", 1 1 1 1, \ - when( IS_PRI && IS_SEC_GUN_TAG_EQUIPPED && visArg );, \ - name NEW_FRAME_BUTTON_NAME GUN_TAG_INDEX_STRING; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - - GUN_TAG_BUTTONS( GUN_TAG_X, GUN_TAG_Y, GUN_TAG_W, GUN_TAG_H, GUN_TAG_ALIGN, CAN_GUN_HAVE_CUSTOM_RETICLE && GUN_TAG_VIS ) - GUN_TAG_BUTTONS( GUN_TAG_X, RETICLE_Y, GUN_TAG_W, GUN_TAG_H, GUN_TAG_ALIGN, !CAN_GUN_HAVE_CUSTOM_RETICLE && GUN_TAG_VIS ) - - // Gun Emblem Button -#define HAVE_ENOUGH_FOR_GUN_EMBLEM ( GetWeaponOptionCost( GetItemOptionByName( "emblem" ) ) <= GetStatByName( "CODPOINTS" ) ) -#define CAN_NOT_AFFORD_GUN_EMBLEM ( !GUN_EMBLEM_LOCKED && !GUN_EMBLEM_PURCHASED && !HAVE_ENOUGH_FOR_GUN_EMBLEM ) -#define CAN_AFFORD_GUN_EMBLEM ( !GUN_EMBLEM_LOCKED && !GUN_EMBLEM_PURCHASED && HAVE_ENOUGH_FOR_GUN_EMBLEM ) -#define CAN_TOGGLE_GUN_EMBLEM ( GUN_EMBLEM_PURCHASED ) -#define IS_PRI_GUN_EMBLEM_EQUIPPED ( IS_PRI && (STAT_CAC_PRIMARY_EMBLEM) ) -#define IS_SEC_GUN_EMBLEM_EQUIPPED ( IS_SEC && (STAT_CAC_SECONDARY_EMBLEM) ) - -#define GUN_EMBLEM_X LEFT_X -#define GUN_EMBLEM_W WEAPON_BUTTON_WIDTH -#define GUN_EMBLEM_H WEAPON_BUTTON_HEIGHT -#define GUN_EMBLEM_ALIGN HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER -#define GUN_EMBLEM_RECT GUN_EMBLEM_X GUN_EMBLEM_Y GUN_EMBLEM_W GUN_EMBLEM_H GUN_EMBLEM_ALIGN -#define GUN_EMBLEM_COST_W 50 -#define GUN_EMBLEM_COST_RECT (GUN_EMBLEM_X+GUN_EMBLEM_W-GUN_EMBLEM_COST_W-2) GUN_EMBLEM_Y GUN_EMBLEM_COST_W GUN_EMBLEM_H GUN_EMBLEM_ALIGN -#define GUN_EMBLEM_EQUIP_W GUN_EMBLEM_H -#define GUN_EMBLEM_EQUIP_RECT (GUN_EMBLEM_X+GUN_EMBLEM_W-GUN_EMBLEM_EQUIP_W-2) GUN_EMBLEM_Y GUN_EMBLEM_EQUIP_W GUN_EMBLEM_EQUIP_W GUN_EMBLEM_ALIGN - -#define PURCHASE_GUN_EMBLEM_ACTION \ - execnow set weaponOptionIndex ( GetItemIndex( FEATURE_GUN_EMBLEM ) ); \ - execnow set weaponOptionRef "emblem"; \ - open PurchaseWeaponOptionConfirmation; - -#define TOGGLE_GUN_EMBLEM_ACTION \ - execnow toggleWeaponOption (dvarString( ui_custom_name )) emblem; - -#define GUN_EMBLEM_VIS \ - ( !localVarBool( ui_inside_dropdown ) ) - -#define GUN_EMBLEM_BUTTONS( xArg, yArg, wArg, hArg, alignArg, visArg ) \ - /* Buttons */ \ - NEW_FRAME_DBUTTON( 8, xArg yArg wArg hArg alignArg, "@MPUI_GUN_EMBLEM_CAPS", \ - ;, \ - execnow set ui_cac_weapon_hint_text GET_UNLOCK_LEVEL_STRING( FEATURE_GUN_EMBLEM );, \ - execnow set ui_cac_weapon_hint_text "";, \ - ( IS_PRI && GUN_EMBLEM_LOCKED && dvarInt( ui_useCustomClassInfo ) == 0 && visArg ), ;, ; ) \ - NEW_FRAME_BUTTON_COLOR( 8, xArg yArg wArg hArg alignArg, "@MPUI_GUN_EMBLEM_CAPS", NEW_FRAME_RED_RGB, NEW_FRAME_RED_ALPHA, NEW_FRAME_RED, \ - ;, \ - CLEAR_ITEM_NEW( FEATURE_GUN_EMBLEM ), \ - ;, \ - (IS_PRI && CAN_NOT_AFFORD_GUN_EMBLEM && visArg), ;, ; ) \ - NEW_FRAME_BUTTON_COLOR( 8, xArg yArg wArg hArg alignArg, "@MPUI_GUN_EMBLEM_CAPS", NEW_FRAME_GREEN_RGB, NEW_FRAME_GREEN_ALPHA, NEW_FRAME_GREEN, \ - PURCHASE_GUN_EMBLEM_ACTION, \ - CLEAR_ITEM_NEW( FEATURE_GUN_EMBLEM ), \ - ;, \ - (IS_PRI && CAN_AFFORD_GUN_EMBLEM && visArg), ;, ; ) \ - NEW_FRAME_BUTTON_COLOR( 8, xArg yArg wArg hArg alignArg, "@MPUI_GUN_EMBLEM_CAPS", WHITE_RGB, WHITE_ALPHA, BLACK, \ - TOGGLE_GUN_EMBLEM_ACTION, \ - CLEAR_ITEM_NEW( FEATURE_GUN_EMBLEM ), \ - ;, \ - (IS_PRI && CAN_TOGGLE_GUN_EMBLEM && visArg), ;, ; ) \ - /* New Icon */ \ - NEW_FRAME_NEWICON_RECT_VIS( xArg, yArg, wArg, hArg, alignArg, \ - ( IS_ITEM_NEW( FEATURE_GUN_EMBLEM ) && IS_PRI && visArg ), \ - name NEW_FRAME_BUTTON_NAME GUN_EMBLEM_INDEX_STRING; ) \ - /* Locked Icon */ \ - NEW_FRAME_LOCKEDICON_RECT_VIS( xArg, yArg, wArg, hArg, alignArg, \ - (IS_PRI && GUN_EMBLEM_LOCKED && visArg), \ - name NEW_FRAME_BUTTON_NAME GUN_EMBLEM_INDEX_STRING; ) \ - /* Cost */ \ - PREPROC_TEXT_DRAW_VIS_EX( (xArg+wArg-GUN_EMBLEM_COST_W-10) yArg GUN_TAG_COST_W hArg alignArg, 0 0, \ - locString( "@MENU_POINTS", GetWeaponOptionCost( GetItemOptionByName( "emblem" ) ) ), \ - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_RED, \ - when( IS_PRI && CAN_NOT_AFFORD_GUN_EMBLEM && visArg );, \ - name NEW_FRAME_BUTTON_NAME GUN_EMBLEM_INDEX_STRING; NEW_FRAME_TRANSPARENT_STATE( NEW_FRAME_RED_RGB ) ) \ - PREPROC_TEXT_DRAW_VIS_EX( (xArg+wArg-GUN_EMBLEM_COST_W-10) yArg GUN_TAG_COST_W hArg alignArg, 0 0, \ - locString( "@MENU_POINTS", GetWeaponOptionCost( GetItemOptionByName( "emblem" ) ) ), \ - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN, \ - when( IS_PRI && CAN_AFFORD_GUN_EMBLEM && visArg );, \ - name NEW_FRAME_BUTTON_NAME GUN_EMBLEM_INDEX_STRING; NEW_FRAME_TRANSPARENT_STATE( NEW_FRAME_GREEN_RGB ) ) \ - /* Equipped Icon */ \ - PREPROC_SHADER_DRAW_VIS_EX( (xArg+wArg-GUN_EMBLEM_EQUIP_W-2) yArg GUN_TAG_EQUIP_W GUN_TAG_EQUIP_W alignArg, \ - "menu_mp_killstreak_select", 1 1 1 1, \ - when( IS_PRI && IS_PRI_GUN_EMBLEM_EQUIPPED && visArg );, \ - name NEW_FRAME_BUTTON_NAME GUN_EMBLEM_INDEX_STRING; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) \ - PREPROC_SHADER_DRAW_VIS_EX( (xArg+wArg-GUN_EMBLEM_EQUIP_W-2) yArg GUN_TAG_EQUIP_W GUN_TAG_EQUIP_W alignArg, \ - "menu_mp_killstreak_select", 1 1 1 1, \ - when( IS_PRI && IS_SEC_GUN_EMBLEM_EQUIPPED && visArg );, \ - name NEW_FRAME_BUTTON_NAME GUN_EMBLEM_INDEX_STRING; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - - GUN_EMBLEM_BUTTONS( GUN_EMBLEM_X, GUN_EMBLEM_Y, GUN_EMBLEM_W, GUN_EMBLEM_H, GUN_EMBLEM_ALIGN, CAN_GUN_HAVE_CUSTOM_RETICLE && GUN_EMBLEM_VIS ) - GUN_EMBLEM_BUTTONS( GUN_EMBLEM_X, RETICLE_COLOR_Y, GUN_EMBLEM_W, GUN_EMBLEM_H, GUN_EMBLEM_ALIGN, !CAN_GUN_HAVE_CUSTOM_RETICLE && GUN_EMBLEM_VIS ) - - // Hint text - #define HINT_EX_ARGS( yArg, listArg ) \ - name list_hint; \ - NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) \ - exp rect Y( yArg + WEAPON_BUTTON_HEIGHT*2 + min( getFeederCount( listArg ), FEEDER_MAX ) * 17 ); - - // Weapon list hint - HINT_TEXT_ALL( 1, LEFT_X, 0, CHOICE_SIZE_X, dvarString( ui_cac_weapon_hint_text ), 1 1 1 1, ( ( dvarString( ui_cac_weapon_hint_text ) != "" ) && ( dvarString( "ui_inside_popup" ) == "select_weapon" ) ), HINT_EX_ARGS( SELECT_WEAPON_Y, weapon_list ) ) - // Menu-level without reticle customization hint - HINT_TEXT_ALL( 6, LEFT_X, 0, CHOICE_SIZE_X, dvarString( ui_cac_weapon_hint_text ), 1 1 1 1, ( ( dvarString( ui_cac_weapon_hint_text ) != "" ) && !CAN_GUN_HAVE_CUSTOM_RETICLE ), name menu_hint; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - // Menu-level with reticle customization hint - HINT_TEXT_ALL( 10, LEFT_X, 0, CHOICE_SIZE_X, dvarString( ui_cac_weapon_hint_text ), 1 1 1 1, ( ( dvarString( ui_cac_weapon_hint_text ) != "" ) && CAN_GUN_HAVE_CUSTOM_RETICLE ), name menu_hint; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - // camo list hint - HINT_TEXT_ALL( 1, LEFT_X, 0, CHOICE_SIZE_X, dvarString( ui_cac_weapon_hint_text ), 1 1 1 1, ( ( dvarString( ui_cac_weapon_hint_text ) != "" ) && ( dvarString( "ui_inside_popup" ) == "select_camo" ) ), HINT_EX_ARGS( CAMO_Y, camo_list ) ) - - -// Dual wield has been moved to attachments. -#if 0 - // Dual Wield Button -#define PRI_HAS_DW ( ItemHasDualWield( STAT_CAC_PRIMARY ) ) -#define SEC_HAS_DW ( ItemHasDualWield( STAT_CAC_SECONDARY ) ) -#define PRI_IS_DW ( ItemIsDualWield( STAT_CAC_PRIMARY ) ) -#define SEC_IS_DW ( ItemIsDualWield( STAT_CAC_SECONDARY ) ) -#define IS_PRI_DW_LOCKED ( IsItemDualWieldLocked( STAT_CAC_PRIMARY ) ) -#define IS_SEC_DW_LOCKED ( IsItemDualWieldLocked( STAT_CAC_SECONDARY ) ) -#define IS_PRI_DW_PURCHASED ( IsItemDualWieldPurchased( STAT_CAC_PRIMARY ) ) -#define IS_SEC_DW_PURCHASED ( IsItemDualWieldPurchased( STAT_CAC_SECONDARY ) ) -#define HAVE_ENOUGH_FOR_PRI_DW ( GetItemDualWieldCost( STAT_CAC_PRIMARY ) <= GetStatByName( "CODPOINTS" ) ) -#define HAVE_ENOUGH_FOR_SEC_DW ( GetItemDualWieldCost( STAT_CAC_SECONDARY ) <= GetStatByName( "CODPOINTS" ) ) - -#define IS_PRI_NA_OR_LOCKED ( IS_PRI && ( !PRI_HAS_DW || (PRI_HAS_DW && IS_PRI_DW_LOCKED) ) ) -#define IS_SEC_NA_OR_LOCKED ( IS_SEC && ( !SEC_HAS_DW || (SEC_HAS_DW && IS_SEC_DW_LOCKED) ) ) -#define CAN_NOT_AFFORD_PRI_DW ( IS_PRI && PRI_HAS_DW && !IS_PRI_DW_LOCKED && !IS_PRI_DW_PURCHASED && !HAVE_ENOUGH_FOR_PRI_DW ) -#define CAN_NOT_AFFORD_SEC_DW ( IS_SEC && SEC_HAS_DW && !IS_SEC_DW_LOCKED && !IS_SEC_DW_PURCHASED && !HAVE_ENOUGH_FOR_SEC_DW ) -#define CAN_AFFORD_PRI_DW ( IS_PRI && PRI_HAS_DW && !IS_PRI_DW_LOCKED && !IS_PRI_DW_PURCHASED && HAVE_ENOUGH_FOR_PRI_DW ) -#define CAN_AFFORD_SEC_DW ( IS_SEC && SEC_HAS_DW && !IS_SEC_DW_LOCKED && !IS_SEC_DW_PURCHASED && HAVE_ENOUGH_FOR_SEC_DW ) -#define CAN_TOGGLE_PRI_DW ( IS_PRI && ( (PRI_IS_DW) || (!PRI_IS_DW && PRI_HAS_DW && IS_PRI_DW_PURCHASED) ) ) -#define CAN_TOGGLE_SEC_DW ( IS_SEC && ( (SEC_IS_DW) || (!SEC_IS_DW && SEC_HAS_DW && IS_SEC_DW_PURCHASED) ) ) - -#define DW_RECT_X LEFT_X -#define DW_RECT_Y DUAL_WIELD_Y -#define DW_RECT_W WEAPON_BUTTON_WIDTH -#define DW_RECT_H WEAPON_BUTTON_HEIGHT -#define DW_RECT_ALIGN HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER -#define DW_RECT DW_RECT_X DW_RECT_Y DW_RECT_W DW_RECT_H DW_RECT_ALIGN -#define DW_COST_W 50 -#define DW_COST_RECT (DW_RECT_X+DW_RECT_W-DW_COST_W-2) DW_RECT_Y DW_COST_W DW_RECT_H DW_RECT_ALIGN -#define DW_EQUIP_W DW_RECT_H -#define DW_EQUIP_RECT (DW_RECT_X+DW_RECT_W-DW_EQUIP_W-2) DW_RECT_Y DW_EQUIP_W DW_EQUIP_W DW_RECT_ALIGN -#define DW_BUTTON_STATES WEAPON_BUTTON_STATES( DUAL_WIELD_INDEX, DUAL_WIELD_Y ) - -#define TOGGLE_PRI_DUAL_WIELD_ACTION \ - if( !PRI_IS_DW ) \ - { \ - execnow equipclassitem (dvarString( ui_custom_name )) ( GetItemDualWieldIndex( STAT_CAC_PRIMARY ) ); \ - } \ - else \ - { \ - execnow equipclassitem (dvarString( ui_custom_name )) ( GetItemDualWieldBaseIndex( STAT_CAC_PRIMARY ) ); \ - } - -#define TOGGLE_SEC_DUAL_WIELD_ACTION \ - if( !SEC_IS_DW ) \ - { \ - execnow equipclassitem (dvarString( ui_custom_name )) ( GetItemDualWieldIndex( STAT_CAC_SECONDARY ) ); \ - } \ - else \ - { \ - execnow equipclassitem (dvarString( ui_custom_name )) ( GetItemDualWieldBaseIndex( STAT_CAC_SECONDARY ) ); \ - } - - // Primary Weapon - NEW_FRAME_DBUTTON( 8, DW_RECT, "@MPUI_BUY_DUAL_WIELD_CAPS", ;, ;, ;, ( !IS_FIXED_BUTTON_ACTIVE && IS_PRI && !PRI_IS_DW && !IS_PRI_DW_PURCHASED ), ;, decoration; DW_BUTTON_STATES ) - NEW_FRAME_DBUTTON( 8, DW_RECT, "@MPUI_DUAL_WIELD_CAPS", ;, ;, ;, ( !IS_FIXED_BUTTON_ACTIVE && CAN_TOGGLE_PRI_DW ), ;, decoration; DW_BUTTON_STATES ) - NEW_FRAME_DBUTTON( 8, DW_RECT, "@MPUI_BUY_DUAL_WIELD_CAPS", ;, ;, ;, ( IS_FIXED_BUTTON_ACTIVE && IS_PRI && !PRI_IS_DW && IS_PRI_NA_OR_LOCKED ), ;, DW_BUTTON_STATES ) - NEW_FRAME_BUTTON_COLOR( 8, DW_RECT, "@MPUI_BUY_DUAL_WIELD_CAPS", NEW_FRAME_RED, NEW_FRAME_RED, ;, ;, ;, ( IS_FIXED_BUTTON_ACTIVE && !PRI_IS_DW && CAN_NOT_AFFORD_PRI_DW ), ;, DW_BUTTON_STATES ) - NEW_FRAME_BUTTON_COLOR( 8, DW_RECT, "@MPUI_BUY_DUAL_WIELD_CAPS", NEW_FRAME_GREEN, NEW_FRAME_GREEN, open PurchaseDualWieldConfirmation;, ;, ;, ( IS_FIXED_BUTTON_ACTIVE && !PRI_IS_DW && CAN_AFFORD_PRI_DW ), ;, DW_BUTTON_STATES ) - NEW_FRAME_BUTTON_COLOR( 8, DW_RECT, "@MPUI_DUAL_WIELD_CAPS", WHITE_RGB, WHITE_ALPHA, BLACK, TOGGLE_PRI_DUAL_WIELD_ACTION, ;, ;, ( IS_FIXED_BUTTON_ACTIVE && CAN_TOGGLE_PRI_DW ), ;, DW_BUTTON_STATES ) - - NEW_FRAME_LOCKEDICON_RECT_VIS( DW_RECT_X, DW_RECT_Y, DW_RECT_W, DW_RECT_H, DW_RECT_ALIGN, (IS_FIXED_BUTTON_ACTIVE && IS_PRI && !PRI_IS_DW && PRI_HAS_DW && IS_PRI_DW_LOCKED), DW_BUTTON_STATES ) - // Cost - PREPROC_TEXT_DRAW_VIS_EX( DW_COST_RECT, 0 0, - locString( "@MENU_POINTS", GetItemDualWieldCost( STAT_CAC_PRIMARY ) ), - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_RED, - when( IS_FIXED_BUTTON_ACTIVE && CAN_NOT_AFFORD_PRI_DW );, - DW_BUTTON_STATES; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - PREPROC_TEXT_DRAW_VIS_EX( DW_COST_RECT, 0 0, - locString( "@MENU_POINTS", GetItemDualWieldCost( STAT_CAC_PRIMARY ) ), - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN, - when( IS_FIXED_BUTTON_ACTIVE && CAN_AFFORD_PRI_DW );, - DW_BUTTON_STATES; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - // Equipped icon - PREPROC_SHADER_DRAW_VIS_EX( DW_EQUIP_RECT, - "menu_mp_killstreak_select", 1 1 1 1, - when( IS_FIXED_BUTTON_ACTIVE && IS_PRI && PRI_IS_DW );, - DW_BUTTON_STATES; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - - // Secondary Weapon - NEW_FRAME_DBUTTON( 8, DW_RECT, "@MPUI_BUY_DUAL_WIELD_CAPS", ;, ;, ;, ( !IS_FIXED_BUTTON_ACTIVE && IS_SEC && !SEC_IS_DW && !IS_SEC_DW_PURCHASED ), ;, decoration; DW_BUTTON_STATES ) - NEW_FRAME_DBUTTON( 8, DW_RECT, "@MPUI_DUAL_WIELD_CAPS", ;, ;, ;, ( !IS_FIXED_BUTTON_ACTIVE && CAN_TOGGLE_SEC_DW ), ;, decoration; DW_BUTTON_STATES ) - NEW_FRAME_DBUTTON( 8, DW_RECT, "@MPUI_BUY_DUAL_WIELD_CAPS", ;, ;, ;, ( IS_FIXED_BUTTON_ACTIVE && IS_SEC && !SEC_IS_DW && IS_SEC_NA_OR_LOCKED ), ;, DW_BUTTON_STATES ) - NEW_FRAME_BUTTON_COLOR( 8, DW_RECT, "@MPUI_BUY_DUAL_WIELD_CAPS", NEW_FRAME_RED, NEW_FRAME_RED, ;, ;, ;, ( IS_FIXED_BUTTON_ACTIVE && !SEC_IS_DW && CAN_NOT_AFFORD_SEC_DW ), ;, DW_BUTTON_STATES ) - NEW_FRAME_BUTTON_COLOR( 8, DW_RECT, "@MPUI_BUY_DUAL_WIELD_CAPS", NEW_FRAME_GREEN, NEW_FRAME_GREEN, open PurchaseDualWieldConfirmation;, ;, ;, ( IS_FIXED_BUTTON_ACTIVE && !SEC_IS_DW && CAN_AFFORD_SEC_DW ), ;, DW_BUTTON_STATES ) - NEW_FRAME_BUTTON_COLOR( 8, DW_RECT, "@MPUI_DUAL_WIELD_CAPS", WHITE_RGB, WHITE_ALPHA, BLACK, TOGGLE_SEC_DUAL_WIELD_ACTION, ;, ;, ( IS_FIXED_BUTTON_ACTIVE && CAN_TOGGLE_SEC_DW ), ;, DW_BUTTON_STATES ) - - NEW_FRAME_LOCKEDICON_RECT_VIS( DW_RECT_X, DW_RECT_Y, DW_RECT_W, DW_RECT_H, DW_RECT_ALIGN, (IS_FIXED_BUTTON_ACTIVE && IS_SEC && !SEC_IS_DW && SEC_HAS_DW && IS_SEC_DW_LOCKED), DW_BUTTON_STATES ) - // Cost - PREPROC_TEXT_DRAW_VIS_EX( DW_COST_RECT, 0 0, - locString( "@MENU_POINTS", GetItemDualWieldCost( STAT_CAC_SECONDARY ) ), - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_RED, - when( IS_FIXED_BUTTON_ACTIVE && CAN_NOT_AFFORD_SEC_DW );, - DW_BUTTON_STATES; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - PREPROC_TEXT_DRAW_VIS_EX( DW_COST_RECT, 0 0, - locString( "@MENU_POINTS", GetItemDualWieldCost( STAT_CAC_SECONDARY ) ), - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN, - when( IS_FIXED_BUTTON_ACTIVE && CAN_AFFORD_SEC_DW );, - DW_BUTTON_STATES; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - // Equipped icon - PREPROC_SHADER_DRAW_VIS_EX( DW_EQUIP_RECT, - "menu_mp_killstreak_select", 1 1 1 1, - when( IS_FIXED_BUTTON_ACTIVE && IS_SEC && SEC_IS_DW );, - DW_BUTTON_STATES; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - - // Second Attachment Button -#define SEC_ATTACH_AVAILABLE ( GetCurrentItemNumAttachments() > 2 ) // None counts as an attachment. Need at least 2 attachments. -#define HAVE_ENOUGH_FOR_SEC_ATTACH ( GetWeaponOptionCost( GetItemOptionByName( "2ndattach" ) ) <= GetStatByName( "CODPOINTS" ) ) -#define CAN_NOT_AFFORD_SEC_ATTACH ( SEC_ATTACH_AVAILABLE && !GUN_2NDATTACH_LOCKED && !GUN_2NDATTACH_PURCHASED && !HAVE_ENOUGH_FOR_SEC_ATTACH ) -#define CAN_AFFORD_SEC_ATTACH ( SEC_ATTACH_AVAILABLE && !GUN_2NDATTACH_LOCKED && !GUN_2NDATTACH_PURCHASED && HAVE_ENOUGH_FOR_SEC_ATTACH ) - -#define SEC_ATTACH_X LEFT_X -#define SEC_ATTACH_Y SECOND_ATTACHMENT_Y -#define SEC_ATTACH_W WEAPON_BUTTON_WIDTH -#define SEC_ATTACH_H WEAPON_BUTTON_HEIGHT -#define SEC_ATTACH_ALIGN HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER -#define SEC_ATTACH_RECT SEC_ATTACH_X SEC_ATTACH_Y SEC_ATTACH_W SEC_ATTACH_H SEC_ATTACH_ALIGN -#define SEC_ATTACH_COST_W 50 -#define SEC_ATTACH_COST_RECT (SEC_ATTACH_X+SEC_ATTACH_W-SEC_ATTACH_COST_W-2) SEC_ATTACH_Y SEC_ATTACH_COST_W SEC_ATTACH_H SEC_ATTACH_ALIGN -#define SEC_ATTACH_BUTTON_STATES WEAPON_BUTTON_STATES( SECOND_ATTACHMENT_INDEX, SECOND_ATTACHMENT_Y ) - -#define PURCHASE_2ND_ATTACH_ACTION \ - execnow set weaponOptionIndex ( GetItemIndex( FEATURE_SECOND_ATTACHMENT ) ); \ - execnow set weaponOptionRef "2ndAttach"; \ - open PurchaseWeaponOptionConfirmation; - - NEW_FRAME_DBUTTON( 9, SEC_ATTACH_RECT, "@MPUI_BUY_SECOND_ATTACHMENT_CAPS", ;, ;, ;, (!IS_FIXED_BUTTON_ACTIVE || GUN_2NDATTACH_PURCHASED || GUN_2NDATTACH_LOCKED || !SEC_ATTACH_AVAILABLE ), ;, SEC_ATTACH_BUTTON_STATES ) - NEW_FRAME_BUTTON_COLOR( 9, SEC_ATTACH_RECT, "@MPUI_BUY_SECOND_ATTACHMENT_CAPS", NEW_FRAME_RED_RGB, NEW_FRAME_RED_ALPHA, NEW_FRAME_RED, ;, ;, ;, (IS_FIXED_BUTTON_ACTIVE && CAN_NOT_AFFORD_SEC_ATTACH ), ;, SEC_ATTACH_BUTTON_STATES ) - NEW_FRAME_BUTTON_COLOR( 9, SEC_ATTACH_RECT, "@MPUI_BUY_SECOND_ATTACHMENT_CAPS", NEW_FRAME_GREEN_RGB, NEW_FRAME_GREEN_ALPHA, NEW_FRAME_GREEN, PURCHASE_2ND_ATTACH_ACTION, ;, ;, (IS_FIXED_BUTTON_ACTIVE && CAN_AFFORD_SEC_ATTACH ), ;, SEC_ATTACH_BUTTON_STATES ) - - NEW_FRAME_LOCKEDICON_RECT_VIS( SEC_ATTACH_X, SEC_ATTACH_Y, SEC_ATTACH_W, SEC_ATTACH_H, SEC_ATTACH_ALIGN, (IS_FIXED_BUTTON_ACTIVE && GUN_2NDATTACH_LOCKED), SEC_ATTACH_BUTTON_STATES ) - // Cost - PREPROC_TEXT_DRAW_VIS_EX( SEC_ATTACH_COST_RECT, 0 0, - locString( "@MENU_POINTS", GetWeaponOptionCost( GetItemOptionByName( "2ndAttach" ) ) ), - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_RED, - when( IS_FIXED_BUTTON_ACTIVE && CAN_NOT_AFFORD_SEC_ATTACH );, - SEC_ATTACH_BUTTON_STATES; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - PREPROC_TEXT_DRAW_VIS_EX( SEC_ATTACH_COST_RECT, 0 0, - locString( "@MENU_POINTS", GetWeaponOptionCost( GetItemOptionByName( "2ndAttach" ) ) ), - CHOICE_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN, - when( IS_FIXED_BUTTON_ACTIVE && CAN_AFFORD_SEC_ATTACH );, - SEC_ATTACH_BUTTON_STATES; NEW_FRAME_TRANSPARENT_STATE( 1 1 1 ) ) - -#endif - -#ifdef PC - #define COMMON_LIST_EX_PC \ - modal \ - usepaging -#else //#ifdef PC - #define COMMON_LIST_EX_PC -#endif //#ifdef PC - - // Listbox actions -#define COMMON_LIST_EX( buttonBActionArg ) \ - LISTBOX_STATES \ - execKeyInt BUTTON_B \ - { \ - play CHOICE_FOCUS_SOUND; \ - execnow ui_animate cac_weapon anim_controller CloseDropDownList 0; \ - buttonBActionArg \ - } \ - COMMON_LIST_EX_PC - -#define WEAPON_GROUP_LIST_ACTION \ - play CHOICE_ACTION_SOUND; \ - execnow ui_animate cac_weapon anim_controller CloseDropDownList 0; \ - execnow set cac_weapon_current_list weapon_list; \ - execnow buildItemListForSlotNameAndGroup (dvarString(selected_loadout_slot)) (dvarString(selected_group)); \ - execnow set cac_weapon_feeder_count ( GetFeederCount( weapon_list ) ); \ - execnow set ui_next_inside_popup select_weapon; - -#define WEAPON_LIST_ACTION \ - if ( IsCurrentItemPurchased() ) \ - { \ - play CHOICE_ACTION_SOUND; \ - execnow equipclasscurrentitem (dvarString( ui_custom_name )); \ - execnow ui_animate cac_weapon anim_controller CloseDropDownList 0; \ - } \ - elseif ( !IsItemLocked( GetCurrentItemIndex() ) && \ - ( GetCurrentItemCost() <= GetStatByName( "CODPOINTS" ) ) && \ - !IsCurrentItemClassified() ) \ - { \ - play CHOICE_ACTION_SOUND; \ - open "PurchaseConfirmation"; \ - } - -#define WEAPON_LIST_ONSELECTION \ - if ( IsCurrentItemClassified() ) \ - { \ - execnow set ui_cac_weapon_hint_text (GetCurrentItemClassifiedHintText()); \ - } \ - elseif ( IsItemLocked( GetCurrentItemIndex() ) ) \ - { \ - execnow set ui_cac_weapon_hint_text (GET_UNLOCK_LEVEL_STRING(GetItemName(GetCurrentItemIndex()))); \ - } \ - else \ - { \ - if( IsItemNew( GetCurrentItemIndex() ) ) \ - { \ - CLEAR_ITEM_NEW( ( GetItemName( GetCurrentItemIndex() ) ) ); \ - } \ - execnow set ui_cac_weapon_hint_text ""; \ - } - -#define CAN_EQUIP_TWO_ATTACHMENTS \ - ( ( IS_PRI ) && ( isItemEquipped( getitemindex("PERKS_PROFESSIONAL"), dvarString( ui_custom_name ) ) || isItemEquipped( getitemindex("PERKS_PROFESSIONAL_PRO"), dvarString( ui_custom_name ) ) ) ) - -#define NUM_EQUIPPED_ATTACHMENTS \ - GetItemNumAttachmentsEquipped( dvarString( ui_custom_name ), GET_SLOT_STAT ) - -#define IS_CURRENT_ATTACHMENT_EQUIPPED \ - ( getItemAttachment( getCurrentItemIndex(), getCurrentItemAttachmentNum() ) == GetItemEquippedAttachment( dvarString( ui_custom_name ), GET_SLOT_STAT, 0 ) || \ - getItemAttachment( getCurrentItemIndex(), getCurrentItemAttachmentNum() ) == GetItemEquippedAttachment( dvarString( ui_custom_name ), GET_SLOT_STAT, 1 ) ) - -#define ATTACHMENTS_LIST_ACTION \ - if ( isCurrentItemAttachmentPurchased() ) \ - { \ - if( IS_CURRENT_ATTACHMENT_EQUIPPED ) \ - { \ - execNow clearAttachmentForItemAtPoint (dvarString( ui_custom_name )) (GET_SLOT_STAT) (getCurrentItemAttachmentPoint()); \ - } \ - elseif( ( NUM_EQUIPPED_ATTACHMENTS < 1 ) || ( NUM_EQUIPPED_ATTACHMENTS == 1 && CAN_EQUIP_TWO_ATTACHMENTS ) ) \ - { \ - play CHOICE_ACTION_SOUND; \ - execnow equipclasscurrentattachment ( dvarString( ui_custom_name ) ); \ - } \ - } \ - elseif ( !isItemlocked( GetCurrentItemIndex() ) && ( getCurrentItemAttachmentCost() <= GetStatByName( "CODPOINTS" ) ) ) \ - { \ - open "PurchaseAttachmentConfirmation"; \ - } - -#define CLEAR_CAC_HINT \ - exec "set ui_cac_weapon_hint_text @NULL_EMPTY;" - -#define SET_OPTION_HINT \ - if ( GetWeaponOptionUnlockPLevel( GetCurrentItemOption() ) > PRESTIGE ) \ - { \ - exec set ui_cac_weapon_hint_text ( locString( CLASS_PRESTIGE_UNCLASSIFY_DESC, GetWeaponOptionUnlockPLevel( GetCurrentItemOption() ) ) ); \ - } \ - else \ - { \ - CLEAR_CAC_HINT \ - } - -#define OPTION_LIST_ACTION( optionGroup ) \ - if ( GetWeaponOptionUnlockPLevel( GetCurrentItemOption() ) <= PRESTIGE ) \ - { \ - if ( isCurrentItemOptionPurchased() ) \ - { \ - play CHOICE_ACTION_SOUND; \ - execnow "equipclasscurrentoption ( dvarString( ui_custom_name ) ) "optionGroup; \ - execnow ui_animate cac_weapon anim_controller CloseDropDownList 0; \ - } \ - elseif ( !isItemlocked( GetCurrentItemIndex() ) && ( GetWeaponOptionCost( GetCurrentItemOption() ) <= GetStatByName( "CODPOINTS" ) ) ) \ - { \ - setDvar ui_optiongroup_name optionGroup; \ - open "PurchaseCurrentWeaponOptionConfirmation"; \ - } \ - } - - // Listboxes -#undef LIST_Y_START -#define LIST_Y_START (SELECT_WEAPON_Y+WEAPON_BUTTON_HEIGHT) - ITEM_LISTBOX_EX( "weapon_group_list", FEEDER_WEAPON_GROUPS, WEAPON_GROUP_LIST_ACTION, CLEAR_CAC_HINT, ;, when( dvarString( "ui_inside_popup" ) == "select_weapon_group" ), COMMON_LIST_EX( WEAPON_GROUP_LIST_BUTTON_B_ACTION ) ) - ITEM_LISTBOX_EX( "weapon_list", FEEDER_ITEMSINSLOTANDGROUP, WEAPON_LIST_ACTION, WEAPON_LIST_ONSELECTION, WEAPON_LIST_ONSELECTION, when( dvarString( "ui_inside_popup" ) == "select_weapon" ), COMMON_LIST_EX( WEAPON_LIST_BUTTON_B_ACTION ) ) - -#undef LIST_X_START -#define LIST_X_START (LEFT_X-3) -#undef LIST_Y_START -#define LIST_Y_START (ATTACHMENTS_Y+WEAPON_BUTTON_HEIGHT) -#undef LIST_WIDTH -#define LIST_WIDTH (WEAPON_BUTTON_WIDTH+4) - ATTACHMENTS_LISTBOX_EX( "attachments_list", FEEDER_ATTACHMENTS, ATTACHMENTS_LIST_ACTION, ;, ;, when( dvarString( "ui_inside_popup" ) == "attachments" ), COMMON_LIST_EX( UPDATE_ATTACH_SLOT_TOP ) ) -#undef LIST_X_START -#define LIST_X_START LEFT_X - -#ifdef PC -#undef LIST_WIDTH -#define LIST_WIDTH (WEAPON_BUTTON_WIDTH+16) -#else //#ifdef PC -#undef LIST_WIDTH -#define LIST_WIDTH WEAPON_BUTTON_WIDTH -#endif //#ifdef PC - -#undef LIST_Y_START -#define LIST_Y_START (CAMO_Y+WEAPON_BUTTON_HEIGHT) - ITEM_LISTBOX_EX( "camo_list", FEEDER_WEAPONOPTIONS, OPTION_LIST_ACTION( "camo" ), SET_OPTION_HINT, SET_OPTION_HINT, when( dvarString( "ui_inside_popup" ) == "select_camo" ), COMMON_LIST_EX( ; ) ) - -#undef LIST_Y_START -#define LIST_Y_START (RETICLE_Y+WEAPON_BUTTON_HEIGHT) -#ifdef PC -#undef LIST_WIDTH -#define LIST_WIDTH (WEAPON_BUTTON_WIDTH+16) -#endif //#ifdef PC - ITEM_LISTBOX_EX( "reticle_list", FEEDER_WEAPONOPTIONS, OPTION_LIST_ACTION( "reticle" ), ;, ;, when( dvarString( "ui_inside_popup" ) == "select_reticle" ), COMMON_LIST_EX( ; ) ) - -#undef LIST_Y_START -#define LIST_Y_START (RETICLE_COLOR_Y+WEAPON_BUTTON_HEIGHT) - ITEM_LISTBOX_EX( "reticle_color_list", FEEDER_WEAPONOPTIONS, OPTION_LIST_ACTION( "reticlecolor" ), ;, ;, when( dvarString( "ui_inside_popup" ) == "select_reticle_color" ), COMMON_LIST_EX( ; ) ) - -#undef LIST_Y_START -#define LIST_Y_START (LENS_Y+WEAPON_BUTTON_HEIGHT) - ITEM_LISTBOX_EX( "lens_list", FEEDER_WEAPONOPTIONS, OPTION_LIST_ACTION( "lens" ), ;, ;, when( dvarString( "ui_inside_popup" ) == "select_lens" ), COMMON_LIST_EX( ; ) ) - -#define PLAYER_WEAPON_IMAGE_X 85 -#define PLAYER_WEAPON_IMAGE_Y -130 -#define PLAYER_WEAPON_CLASSIFIED_Y -180 -#define PLAYER_WEAPON_IMAGE_WIDTH 180 -#define PLAYER_WEAPON_IMAGE_HEIGHT 90 - - /* Camo */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (PLAYER_WEAPON_IMAGE_X-10), - (PLAYER_WEAPON_IMAGE_Y-5), - ( PLAYER_WEAPON_IMAGE_WIDTH+20 ), - (PLAYER_WEAPON_IMAGE_HEIGHT+10), - HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - getWeaponOptionImage( STAT_CAC_PRIMARY_CAMO ), 1 1 1 1, - when( IS_PRI && ( dvarString(ui_inside_popup ) != "select_camo" || localVarInt( "ui_disable_controls" ) != 0 ) && dvarString(ui_inside_popup ) != "select_weapon" && dvarString(ui_inside_popup ) != "select_weapon_group"), - ; ) - /* Camo when camo list open */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (PLAYER_WEAPON_IMAGE_X-10), - (PLAYER_WEAPON_IMAGE_Y-5), - ( PLAYER_WEAPON_IMAGE_WIDTH+20 ), - (PLAYER_WEAPON_IMAGE_HEIGHT+10), - HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - getWeaponOptionImage( GetCurrentItemOption() ), 1 1 1 1, - when ( ( IS_PRI && dvarString(ui_inside_popup ) == "select_camo" && dvarString(ui_inside_popup ) != "select_weapon" && dvarString(ui_inside_popup ) != "select_weapon_group" && localVarInt( "ui_disable_controls" ) == 0 ) && - ( GetWeaponOptionUnlockPLevel( GetCurrentItemOption() ) <= PRESTIGE ) ), ; ) - /* Weapon Image when not selecting weapon */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( PLAYER_WEAPON_IMAGE_X, - PLAYER_WEAPON_IMAGE_Y, - ( PLAYER_WEAPON_IMAGE_WIDTH ), - PLAYER_WEAPON_IMAGE_HEIGHT, - HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetItemImage( GET_SLOT_STAT ), 1 1 1 1, - when( dvarString(ui_inside_popup ) != "select_weapon" ), - ; ) - /* Weapon Image when inside weapon list */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( PLAYER_WEAPON_IMAGE_X, - PLAYER_WEAPON_IMAGE_Y, - ( PLAYER_WEAPON_IMAGE_WIDTH ), - PLAYER_WEAPON_IMAGE_HEIGHT, - HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetItemImage( GetCurrentItemIndex() ), 1 1 1 1, - when( !IsCurrentItemClassified() && dvarString(ui_inside_popup ) == "select_weapon" ), - ; ) - /* Dark Weapon Image when inside weapon list and weapon is classified */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( PLAYER_WEAPON_IMAGE_X, - PLAYER_WEAPON_IMAGE_Y, - ( PLAYER_WEAPON_IMAGE_WIDTH ), - PLAYER_WEAPON_IMAGE_HEIGHT, - HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetItemImage( GetCurrentItemIndex() ), 0 0 0 0.8, - when( !isCurrentItemPurchased() && IsCurrentItemClassified() && dvarString(ui_inside_popup ) == "select_weapon" ), - ; ) - /* classified image when inside weapon list and weapon is classified */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( PLAYER_WEAPON_IMAGE_X, - PLAYER_WEAPON_CLASSIFIED_Y, - PLAYER_WEAPON_IMAGE_WIDTH, - PLAYER_WEAPON_IMAGE_WIDTH, - HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "menu_mp_lobby_classified", 1 1 1 1, - when( !isCurrentItemPurchased() && IsCurrentItemClassified() && dvarString(ui_inside_popup ) == "select_weapon" ), - ; ) - -#define CURRENT_ATTACHMENT_VIS \ - (dvarString( ui_inside_popup ) == "attachments") - -#define HAS_X_ATTACHMENTS( minAttachments ) \ - ( GetItemNumAttachmentsEquipped( dvarString( ui_custom_name ), GET_SLOT_STAT ) >= minAttachments ) - -#define GET_ITEM_EQUIPPED_ATTACHMENT( index ) \ - ( GetItemEquippedAttachment( dvarString( ui_custom_name ), GET_SLOT_STAT, index ) ) - -#define LOADOUT_SUMMARY_VIS ( ( dvarString( ui_inside_popup ) != "select_weapon" ) && \ - ( dvarString( ui_inside_popup ) != "attachments" ) ) - -#define LOADOUT_SUMMARY_WIDTH PLAYER_WEAPON_IMAGE_WIDTH -#define LOADOUT_SUMMARY_ICON_WIDTH 32 -#define LOADOUT_SUMMARY_ICON_HEIGHT LOADOUT_SUMMARY_ICON_WIDTH -#define LOADOUT_SUMMARY_X PLAYER_WEAPON_IMAGE_X -#define LOADOUT_SUMMARY_Y (PLAYER_WEAPON_IMAGE_Y+PLAYER_WEAPON_IMAGE_HEIGHT-LOADOUT_SUMMARY_ICON_HEIGHT/2+2) -#define LOADOUT_ATTACHMENT1_X (LOADOUT_SUMMARY_X+16) -#define LOADOUT_ATTACHMENT2_X (LOADOUT_SUMMARY_X+LOADOUT_SUMMARY_WIDTH-16) -#define LOADOUT_LENS_ICON_WIDTH 29 -#define LOADOUT_LENS_ICON_HEIGHT LOADOUT_LENS_ICON_WIDTH -#define LOADOUT_RETICLE_ICON_WIDTH 20 -#define LOADOUT_RETICLE_ICON_HEIGHT LOADOUT_RETICLE_ICON_WIDTH -#define LOADOUT_SUMMARY_VERT_SPACING 7 -#define LOADOUT_SUMMARY_TEXT_X( imageX ) ( imageX+LOADOUT_SUMMARY_ICON_WIDTH+5 ) -#define LOADOUT_SUMMARY_TEXT_WIDTH (LOADOUT_SUMMARY_WIDTH-LOADOUT_SUMMARY_ICON_WIDTH-10) -#define WEAPON_NAME_X 90 -#define WEAPON_NAME_Y ( PLAYER_WEAPON_IMAGE_Y + PLAYER_WEAPON_IMAGE_HEIGHT + 15 ) -#define WEAPON_GROUP_NAME_Y ( WEAPON_NAME_Y + 20 ) - - /* Weapon Name */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_NAME_X WEAPON_NAME_Y 170 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - toUpper( locString( "@"+GetCurrentItemName() ) ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_COMMON_TEXT_COLOR, - when( !IsCurrentItemClassified() && LOADOUT_SUMMARY_VIS );, ; ) - - /* Underline Image */ - PREPROC_SHADER_DRAW_VIS_EX( PLAYER_WEAPON_IMAGE_X (WEAPON_NAME_Y-3) PLAYER_WEAPON_IMAGE_WIDTH 16 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "menu_mp_lobby_cac_line_2_prong", 1 1 1 1, - when( LOADOUT_SUMMARY_VIS && !LENSESORRETICLES_AVAILABLE );, ; ) - PREPROC_SHADER_DRAW_VIS_EX( PLAYER_WEAPON_IMAGE_X (WEAPON_NAME_Y-3) PLAYER_WEAPON_IMAGE_WIDTH 16 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "menu_mp_lobby_cac_line_2_prong_left", 1 1 1 1, - when( LOADOUT_SUMMARY_VIS && LENSESORRETICLES_AVAILABLE );, ; ) - - /* Attachment 1 Name */ - /*PREPROC_TEXT_DRAW_VIS_EX( (LOADOUT_SUMMARY_TEXT_X(LOADOUT_SUMMARY_X)) LOADOUT_SUMMARY_Y LOADOUT_SUMMARY_TEXT_WIDTH LOADOUT_SUMMARY_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@" + GetAttachmentName( GET_ITEM_EQUIPPED_ATTACHMENT( 0 ) ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, when( LOADOUT_SUMMARY_VIS && HAS_X_ATTACHMENTS( 1 ) );, autoWrapped; )*/ - /* Attachment 1 Image */ - PREPROC_SHADER_DRAW_VIS_EX( (LOADOUT_ATTACHMENT1_X-LOADOUT_SUMMARY_ICON_WIDTH/2) LOADOUT_SUMMARY_Y LOADOUT_SUMMARY_ICON_WIDTH LOADOUT_SUMMARY_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetAttachmentImage( GET_ITEM_EQUIPPED_ATTACHMENT( 0 ) ), 1 1 1 1, - when( LOADOUT_SUMMARY_VIS && HAS_X_ATTACHMENTS( 1 ) && GetAttachmentName( GET_ITEM_EQUIPPED_ATTACHMENT( 0 ) ) != MPUI_DW );, ; ) - /* Attachment 1 DW Images */ - PREPROC_SHADER_DRAW_VIS_EX( (LOADOUT_ATTACHMENT1_X-LOADOUT_SUMMARY_ICON_WIDTH/2+6) (LOADOUT_SUMMARY_Y+3) LOADOUT_SUMMARY_ICON_WIDTH (LOADOUT_SUMMARY_ICON_HEIGHT/2) HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetItemImage( GetCurrentItemIndex() ), 0.6 0.6 0.6 0.6, - when( LOADOUT_SUMMARY_VIS && HAS_X_ATTACHMENTS( 1 ) && GetAttachmentName( GET_ITEM_EQUIPPED_ATTACHMENT( 0 ) ) == MPUI_DW );, rotation 45; ) - PREPROC_SHADER_DRAW_VIS_EX( (LOADOUT_ATTACHMENT1_X-LOADOUT_SUMMARY_ICON_WIDTH/2) (LOADOUT_SUMMARY_Y+3) LOADOUT_SUMMARY_ICON_WIDTH (LOADOUT_SUMMARY_ICON_HEIGHT/2) HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetItemImage( GetCurrentItemIndex() ), 1 1 1 1, - when( LOADOUT_SUMMARY_VIS && HAS_X_ATTACHMENTS( 1 ) && GetAttachmentName( GET_ITEM_EQUIPPED_ATTACHMENT( 0 ) ) == MPUI_DW );, rotation 45; ) - - /* Lens Backing */ - PREPROC_SHADER_DRAW_VIS_EX( (LOADOUT_ATTACHMENT1_X-LOADOUT_LENS_ICON_WIDTH/2) (LOADOUT_SUMMARY_Y+LOADOUT_SUMMARY_ICON_HEIGHT+LOADOUT_SUMMARY_VERT_SPACING+LOADOUT_SUMMARY_ICON_HEIGHT/2-LOADOUT_LENS_ICON_HEIGHT/2) LOADOUT_LENS_ICON_WIDTH LOADOUT_LENS_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "menu_mp_weapons_attach_lens", 1 1 1 1, - when( LOADOUT_SUMMARY_VIS && LENSESORRETICLES_AVAILABLE );, ; ) - - /* Reticle Image For Summary */ - PREPROC_OWNERDRAW_ALL( (LOADOUT_ATTACHMENT1_X-LOADOUT_RETICLE_ICON_WIDTH/2) (LOADOUT_SUMMARY_Y+LOADOUT_SUMMARY_ICON_HEIGHT+LOADOUT_SUMMARY_VERT_SPACING+LOADOUT_SUMMARY_ICON_HEIGHT/2-LOADOUT_RETICLE_ICON_HEIGHT/2) LOADOUT_RETICLE_ICON_WIDTH LOADOUT_RETICLE_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - 1 1 1 1, UI_RETICLE_PREVIEW, when( LOADOUT_SUMMARY_VIS && LENSESORRETICLES_AVAILABLE && !CUSTOMIZING_RETICLE && !CUSTOMIZING_RETICLE_COLOR );, - exp ownerdata( GetWeaponOptionImage( GetWeaponOptionGroupIndex( STAT_CAC_PRIMARY_RETICLE, 1 ) ), STAT_CAC_PRIMARY_RETICLE_COLOR ); ) - /* Reticle Image While Customizing Reticle */ - PREPROC_OWNERDRAW_ALL( (LOADOUT_ATTACHMENT1_X-LOADOUT_RETICLE_ICON_WIDTH/2) (LOADOUT_SUMMARY_Y+LOADOUT_SUMMARY_ICON_HEIGHT+LOADOUT_SUMMARY_VERT_SPACING+LOADOUT_SUMMARY_ICON_HEIGHT/2-LOADOUT_RETICLE_ICON_HEIGHT/2) LOADOUT_RETICLE_ICON_WIDTH LOADOUT_RETICLE_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - 1 1 1 1, UI_RETICLE_PREVIEW, when( LOADOUT_SUMMARY_VIS && CUSTOMIZING_RETICLE );, - exp ownerdata( GetWeaponOptionImage( GetCurrentItemOption() ), STAT_CAC_PRIMARY_RETICLE_COLOR ); ) - /* Reticle Image While Customizing Reticle Color */ - PREPROC_OWNERDRAW_ALL( (LOADOUT_ATTACHMENT1_X-LOADOUT_RETICLE_ICON_WIDTH/2) (LOADOUT_SUMMARY_Y+LOADOUT_SUMMARY_ICON_HEIGHT+LOADOUT_SUMMARY_VERT_SPACING+LOADOUT_SUMMARY_ICON_HEIGHT/2-LOADOUT_RETICLE_ICON_HEIGHT/2) LOADOUT_RETICLE_ICON_WIDTH LOADOUT_RETICLE_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - 1 1 1 1, UI_RETICLE_PREVIEW, when( LOADOUT_SUMMARY_VIS && CUSTOMIZING_RETICLE_COLOR );, - exp ownerdata( GetWeaponOptionImage( GetWeaponOptionGroupIndex( STAT_CAC_PRIMARY_RETICLE, 1 ) ), GetCurrentItemOption() - GetWeaponOptionGroupIndex( 0, 5 ) ); ) - - /* Lens Image For Summary */ - PREPROC_OWNERDRAW_ALL( (LOADOUT_ATTACHMENT1_X-LOADOUT_LENS_ICON_WIDTH/2) (LOADOUT_SUMMARY_Y+LOADOUT_SUMMARY_ICON_HEIGHT+LOADOUT_SUMMARY_VERT_SPACING+LOADOUT_SUMMARY_ICON_HEIGHT/2-LOADOUT_LENS_ICON_HEIGHT/2) LOADOUT_LENS_ICON_WIDTH LOADOUT_LENS_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - 1 1 1 1, UI_LENS_PREVIEW, when( LOADOUT_SUMMARY_VIS && LENSESORRETICLES_AVAILABLE && !CUSTOMIZING_LENS );, - exp ownerdata( "menu_mp_weapons_color_lens", STAT_CAC_PRIMARY_LENS ); ) - /* Lens Image While Customizing Lens */ - PREPROC_OWNERDRAW_ALL( (LOADOUT_ATTACHMENT1_X-LOADOUT_LENS_ICON_WIDTH/2) (LOADOUT_SUMMARY_Y+LOADOUT_SUMMARY_ICON_HEIGHT+LOADOUT_SUMMARY_VERT_SPACING+LOADOUT_SUMMARY_ICON_HEIGHT/2-LOADOUT_LENS_ICON_HEIGHT/2) LOADOUT_LENS_ICON_WIDTH LOADOUT_LENS_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - 1 1 1 1, UI_LENS_PREVIEW, when( LOADOUT_SUMMARY_VIS && CAN_GUN_HAVE_CUSTOM_RETICLE && CUSTOMIZING_LENS );, - exp ownerdata( "menu_mp_weapons_color_lens", GetCurrentItemOption() - GetWeaponOptionGroupIndex( 0, 2 ) ); ) - /* Lens Highlight */ - PREPROC_SHADER_DRAW_VIS_EX( (LOADOUT_ATTACHMENT1_X-LOADOUT_LENS_ICON_WIDTH/2) (LOADOUT_SUMMARY_Y+LOADOUT_SUMMARY_ICON_HEIGHT+LOADOUT_SUMMARY_VERT_SPACING+LOADOUT_SUMMARY_ICON_HEIGHT/2-LOADOUT_LENS_ICON_HEIGHT/2) LOADOUT_LENS_ICON_WIDTH LOADOUT_LENS_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "menu_mp_weapons_lens_hilight", 1 1 1 1, - when( LOADOUT_SUMMARY_VIS && LENSESORRETICLES_AVAILABLE );, ; ) - - /* Attachment 2 Name */ - /*PREPROC_TEXT_DRAW_VIS_EX( (LOADOUT_SUMMARY_TEXT_X(LOADOUT_SUMMARY_X+LOADOUT_SUMMARY_WIDTH/2)) LOADOUT_SUMMARY_Y LOADOUT_SUMMARY_TEXT_WIDTH LOADOUT_SUMMARY_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@" + GetAttachmentName( GET_ITEM_EQUIPPED_ATTACHMENT( 1 ) ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, when( LOADOUT_SUMMARY_VIS && HAS_X_ATTACHMENTS( 2 ) );, autoWrapped; )*/ - /* Attachment 2 Image */ - PREPROC_SHADER_DRAW_VIS_EX( (LOADOUT_ATTACHMENT2_X-LOADOUT_SUMMARY_ICON_WIDTH/2) LOADOUT_SUMMARY_Y LOADOUT_SUMMARY_ICON_WIDTH LOADOUT_SUMMARY_ICON_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetAttachmentImage( GET_ITEM_EQUIPPED_ATTACHMENT( 1 ) ), 1 1 1 1, - when( LOADOUT_SUMMARY_VIS && HAS_X_ATTACHMENTS( 2 ) );, ; ) - -#define CURRENT_ATTACHMENT_NAME_X PLAYER_WEAPON_IMAGE_X -#define CURRENT_ATTACHMENT_NAME_Y (PLAYER_WEAPON_IMAGE_Y+PLAYER_WEAPON_IMAGE_HEIGHT+5) -#define CURRENT_ATTACHMENT_NAME_WIDTH PLAYER_WEAPON_IMAGE_WIDTH -#define CURRENT_ATTACHMENT_NAME_HEIGHT 32 - - /* Weapon Attachment Name */ - PREPROC_TEXT_DRAW_VIS_EX( CURRENT_ATTACHMENT_NAME_X CURRENT_ATTACHMENT_NAME_Y CURRENT_ATTACHMENT_NAME_WIDTH CURRENT_ATTACHMENT_NAME_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@" + GetCurrentItemAttachmentName() + "_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, NEW_FRAME_COMMON_TEXT_COLOR, - when( CURRENT_ATTACHMENT_VIS && !IsCurrentItemClassified() ), - autoWrapped; ) - -#define CURRENT_ATTACHMENT_IMAGE_WIDTH 50 -#define CURRENT_ATTACHMENT_IMAGE_HEIGHT 50 -#define CURRENT_ATTACHMENT_IMAGE_X (CURRENT_ATTACHMENT_NAME_X+CURRENT_ATTACHMENT_NAME_WIDTH/2 - CURRENT_ATTACHMENT_IMAGE_WIDTH/2 ) -#define CURRENT_ATTACHMENT_IMAGE_Y (CURRENT_ATTACHMENT_NAME_Y+25) - - /* Weapon Attachment Image */ - PREPROC_SHADER_DRAW_VIS_EX( CURRENT_ATTACHMENT_IMAGE_X CURRENT_ATTACHMENT_IMAGE_Y CURRENT_ATTACHMENT_IMAGE_WIDTH CURRENT_ATTACHMENT_IMAGE_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetAttachmentImage( GetItemAttachment( GetCurrentItemIndex(), GetCurrentItemAttachmentNum() ) ), 1 1 1 1, - when( CURRENT_ATTACHMENT_VIS && !IsCurrentItemClassified() && GetAttachmentName( GetItemAttachment( GetCurrentItemIndex(), GetCurrentItemAttachmentNum() ) ) != MPUI_DW ), ; ) - /* Weapon Attachment DW Images */ - PREPROC_SHADER_DRAW_VIS_EX( (CURRENT_ATTACHMENT_IMAGE_X+5) (CURRENT_ATTACHMENT_IMAGE_Y+10) CURRENT_ATTACHMENT_IMAGE_WIDTH (CURRENT_ATTACHMENT_IMAGE_HEIGHT/2) HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetItemImage( GetCurrentItemIndex() ), 0.6 0.6 0.6 0.6, - when( CURRENT_ATTACHMENT_VIS && !IsCurrentItemClassified() && GetAttachmentName( GetItemAttachment( GetCurrentItemIndex(), GetCurrentItemAttachmentNum() ) ) == MPUI_DW ), rotation 45 ) - PREPROC_SHADER_DRAW_VIS_EX( (CURRENT_ATTACHMENT_IMAGE_X-5) (CURRENT_ATTACHMENT_IMAGE_Y+10) CURRENT_ATTACHMENT_IMAGE_WIDTH (CURRENT_ATTACHMENT_IMAGE_HEIGHT/2) HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - GetItemImage( GetCurrentItemIndex() ), 1 1 1 1, - when( CURRENT_ATTACHMENT_VIS && !IsCurrentItemClassified() && GetAttachmentName( GetItemAttachment( GetCurrentItemIndex(), GetCurrentItemAttachmentNum() ) ) == MPUI_DW ), rotation 45 ) - -#define CURRENT_ATTACHMENT_DESC_X CURRENT_ATTACHMENT_NAME_X -#define CURRENT_ATTACHMENT_DESC_Y (CURRENT_ATTACHMENT_IMAGE_Y+CURRENT_ATTACHMENT_IMAGE_HEIGHT+5) -#define CURRENT_ATTACHMENT_DESC_WIDTH CURRENT_ATTACHMENT_NAME_WIDTH -#define CURRENT_ATTACHMENT_DESC_HEIGHT 20 - - PREPROC_TEXT_DRAW_VIS_EX( CURRENT_ATTACHMENT_DESC_X CURRENT_ATTACHMENT_DESC_Y CURRENT_ATTACHMENT_DESC_WIDTH CURRENT_ATTACHMENT_DESC_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@" + GetCurrentItemAttachmentDesc(), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_CENTER, CHOICE_TEXTCOLOR, - when( CURRENT_ATTACHMENT_VIS && !IsCurrentItemClassified() ), autoWrapped; ) - -#define WEAPON_STAT_NAMES_X 95 -#define WEAPON_STATS_X (WEAPON_STAT_NAMES_X+110) -#define WEAPON_DESC_WIDTH ( CAC_WIDTH/2 - 25 ) -#define WEAPON_STATS_Y 85 - -#define GET_WEAPON_STAT( statName ) \ - getDStat( "ItemStats", GetCurrentItemIndex(), "stats", statName, "statValue" ) - -#define WEAPON_KDRATIO \ - GET_WEAPON_STAT( "kills" ) / max( 1, GET_WEAPON_STAT( "deathsDuringUse" ) ) - -#define WEAPON_ACCURACY \ - ( ( GET_WEAPON_STAT( "hits" ) / max( 1, GET_WEAPON_STAT( "shots" ) ) ) * 100 ) - -#define WEAPON_STAT_SPACING 17 - -#define GUN_STATS_VIS when( dvarBool( ui_cac_gun_attributes_vis ) && !IsCurrentItemClassified() ) - - /* WEAPON STAT NAMES */ - /* Weapon kdratio */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STAT_NAMES_X WEAPON_STATS_Y 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_KILL_DEATH_RATIO_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, GUN_STATS_VIS, ; ) - /* Weapon accuracy */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STAT_NAMES_X (WEAPON_STATS_Y+WEAPON_STAT_SPACING) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_ACCURACY_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, GUN_STATS_VIS, ; ) - /* Weapon kills */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STAT_NAMES_X (WEAPON_STATS_Y+WEAPON_STAT_SPACING*2) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_KILLS_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, GUN_STATS_VIS, ; ) - /* Weapon deaths */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STAT_NAMES_X (WEAPON_STATS_Y+WEAPON_STAT_SPACING*3) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_DEATHS_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, GUN_STATS_VIS, ; ) - /* Weapon headshots */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STAT_NAMES_X (WEAPON_STATS_Y+WEAPON_STAT_SPACING*4) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_HEADSHOTS_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, GUN_STATS_VIS, ; ) - - /* WEAPON STATS */ - /* Weapon kdratio */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STATS_X WEAPON_STATS_Y 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, getFloatAsFormattedString( WEAPON_KDRATIO, 2 ) , TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_ORANGE_RGB 1, GUN_STATS_VIS, ; ) - /* Weapon accuracy */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STATS_X (WEAPON_STATS_Y+WEAPON_STAT_SPACING) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, getFloatAsFormattedString( WEAPON_ACCURACY, 2 ) + " %", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_ORANGE_RGB 1, GUN_STATS_VIS, ; ) - /* Weapon kills */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STATS_X (WEAPON_STATS_Y+WEAPON_STAT_SPACING*2) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, GET_WEAPON_STAT( "kills" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_ORANGE_RGB 1, GUN_STATS_VIS, ; ) - /* Weapon deaths */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STATS_X (WEAPON_STATS_Y+WEAPON_STAT_SPACING*3) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, GET_WEAPON_STAT( "deathsDuringUse" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_ORANGE_RGB 1, GUN_STATS_VIS, ; ) - /* Weapon headshots */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_STATS_X (WEAPON_STATS_Y+WEAPON_STAT_SPACING*4) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, GET_WEAPON_STAT( "headshots" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_ORANGE_RGB 1, GUN_STATS_VIS, ; ) - -#define GUN_ATTRIBUTES_VIS ( !dvarBool( ui_cac_gun_attributes_vis ) && !IsCurrentItemClassified() ) - -#define WEAPON_ATTRIBUTE_NAMES_X WEAPON_STAT_NAMES_X -#define WEAPON_ATTRIBUTE_BAR_X (WEAPON_ATTRIBUTE_NAMES_X+60) -#define WEAPON_ATTRIBUTE_BAR_HEIGHT 9 -#define WEAPON_ATTRIBUTE_BAR_WIDTH (WEAPON_ATTRIBUTE_BAR_HEIGHT*10) - -#define ATTRIBUTES_TABLE_COL_REF 1 -#define ATTRIBUTES_TABLE_COL_ACCURACY 2 -#define ATTRIBUTES_TABLE_COL_DAMAGE 3 -#define ATTRIBUTES_TABLE_COL_RANGE 4 -#define ATTRIBUTES_TABLE_COL_FIRE_RATE 5 -#define ATTRIBUTES_TABLE_COL_MOBILITY 6 -#define ATTRIBUTES_TABLE_COL_FIRE_TYPE 8 - - /* WEAPON ATTRIBUTES */ -#define DAMAGE_BAR_Y (WEAPON_STATS_Y+2) - /* Weapon damage label */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_ATTRIBUTE_NAMES_X (DAMAGE_BAR_Y-2) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_DAMAGE_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, when( GUN_ATTRIBUTES_VIS ), ; ) - /* Weapon damage bar */ - itemDef - { - name "damageBar" - type ITEM_TYPE_OWNERDRAW - rect WEAPON_ATTRIBUTE_BAR_X DAMAGE_BAR_Y WEAPON_ATTRIBUTE_BAR_WIDTH WEAPON_ATTRIBUTE_BAR_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - forecolor 1 1 1 1 - ownerdraw UI_DRAW_ATTRIBUTE_BAR - dvar ui_numBarPartitions - exp ownerdata( ATTRIBUTES_TABLE_COL_DAMAGE ); - visible when( GUN_ATTRIBUTES_VIS ) - decoration - } - -#define RANGE_BAR_Y (DAMAGE_BAR_Y+WEAPON_STAT_SPACING) - /* Weapon range label */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_ATTRIBUTE_NAMES_X (RANGE_BAR_Y-2) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_RANGE_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, when( GUN_ATTRIBUTES_VIS ), ; ) - /* Weapon damage bar */ - itemDef - { - name "rangeBar" - type ITEM_TYPE_OWNERDRAW - rect WEAPON_ATTRIBUTE_BAR_X RANGE_BAR_Y WEAPON_ATTRIBUTE_BAR_WIDTH WEAPON_ATTRIBUTE_BAR_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - forecolor 1 1 1 1 - ownerdraw UI_DRAW_ATTRIBUTE_BAR - dvar ui_numBarPartitions - exp ownerdata( ATTRIBUTES_TABLE_COL_RANGE ); - visible when( GUN_ATTRIBUTES_VIS ) - decoration - } - -#define ACCURACY_BAR_Y (RANGE_BAR_Y+WEAPON_STAT_SPACING) - /* Weapon accuracy label */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_ATTRIBUTE_NAMES_X (ACCURACY_BAR_Y-2) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_ACCURACY_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, when( GUN_ATTRIBUTES_VIS ), ; ) - /* Weapon accuracy bar */ - itemDef - { - name "accuracyBar" - type ITEM_TYPE_OWNERDRAW - rect WEAPON_ATTRIBUTE_BAR_X ACCURACY_BAR_Y WEAPON_ATTRIBUTE_BAR_WIDTH WEAPON_ATTRIBUTE_BAR_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - forecolor 1 1 1 1 - ownerdraw UI_DRAW_ATTRIBUTE_BAR - dvar ui_numBarPartitions - exp ownerdata( ATTRIBUTES_TABLE_COL_ACCURACY ); - visible when( GUN_ATTRIBUTES_VIS ) - decoration - } - -#define MOBILITY_BAR_Y (ACCURACY_BAR_Y+WEAPON_STAT_SPACING) - /* Weapon mobility label */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_ATTRIBUTE_NAMES_X (MOBILITY_BAR_Y-2) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_MOBILITY_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, when( GUN_ATTRIBUTES_VIS ), ; ) - /* Weapon mobility bar */ - itemDef - { - name "mobilityBar" - type ITEM_TYPE_OWNERDRAW - rect WEAPON_ATTRIBUTE_BAR_X MOBILITY_BAR_Y WEAPON_ATTRIBUTE_BAR_WIDTH WEAPON_ATTRIBUTE_BAR_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - forecolor 1 1 1 1 - ownerdraw UI_DRAW_ATTRIBUTE_BAR - dvar ui_numBarPartitions - exp ownerdata( ATTRIBUTES_TABLE_COL_MOBILITY ); - visible when( GUN_ATTRIBUTES_VIS ) - decoration - } - -#ifndef PC - // ROTATE ============================================================= - PREPROC_TEXT_DRAW( 95 (CAC_HEIGHT/2) 50 17 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@PLATFORM_ROTATE", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1 ) -#endif - -#define WEAPON_FIRE_TYPE \ - tablelookup( "mp/attributesTable.csv", ATTRIBUTES_TABLE_COL_REF, GetItemRef( GetCurrentItemIndex() ), ATTRIBUTES_TABLE_COL_FIRE_TYPE ) - -#define FULL_AUTO_ATTACHMENT \ - ( ( ( GetAttachmentName( GetItemAttachment( GetCurrentItemIndex(), GetCurrentItemAttachmentNum() ) ) == "MPUI_AUTO" ) && ( IS_ATTACHMENT_LIST_OPEN ) ) || ( ( GetAttachmentName( GetItemEquippedAttachment( dvarString( ui_custom_name ), GET_SLOT_STAT, 0 ) ) == "MPUI_AUTO" ) && ( IS_NO_LIST_OPEN ) ) ) - - -#define FIRE_RATE_Y (MOBILITY_BAR_Y+WEAPON_STAT_SPACING) - /* Weapon FIRE RATE */ - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_ATTRIBUTE_NAMES_X (FIRE_RATE_Y-2) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_FIRE_RATE_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_COMMON_TEXT_COLOR, when( GUN_ATTRIBUTES_VIS ), ; ) - /* Weapon fire rate bar shown only when weapon is full auto */ - itemDef - { - name "fireRateBar" - type ITEM_TYPE_OWNERDRAW - rect WEAPON_ATTRIBUTE_BAR_X FIRE_RATE_Y WEAPON_ATTRIBUTE_BAR_WIDTH WEAPON_ATTRIBUTE_BAR_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - forecolor 1 1 1 1 - ownerdraw UI_DRAW_ATTRIBUTE_BAR - dvar ui_numBarPartitions - exp ownerdata( ATTRIBUTES_TABLE_COL_FIRE_RATE ); - visible when( GUN_ATTRIBUTES_VIS && WEAPON_FIRE_TYPE == "MPUI_FULL_AUTO" ) - decoration - } - - - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_ATTRIBUTE_BAR_X (FIRE_RATE_Y-2) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@"+WEAPON_FIRE_TYPE, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_ORANGE_RGB 1, when( GUN_ATTRIBUTES_VIS && WEAPON_FIRE_TYPE != "MPUI_FULL_AUTO" && !FULL_AUTO_ATTACHMENT ), ; ) - PREPROC_TEXT_DRAW_VIS_EX( WEAPON_ATTRIBUTE_BAR_X (FIRE_RATE_Y-2) 10 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_FULL_AUTO", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_ORANGE_RGB 1, when( GUN_ATTRIBUTES_VIS && WEAPON_FIRE_TYPE != "MPUI_FULL_AUTO" && FULL_AUTO_ATTACHMENT ), ; ) - -#define TOGGLE_ATTRIBUTES_AND_STATS \ - if( dvarBool( ui_cac_gun_attributes_vis ) ) \ - { \ - setDvar ui_cac_gun_attributes_vis 0; } \ - else \ - { \ - setDvar ui_cac_gun_attributes_vis 1; \ - } - - // Gun Stats -#ifdef PC - #undef CHOICE_TEXTSIZE - #define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT - - #undef CHOICE_TEXTFONT - #define CHOICE_TEXTFONT UI_FONT_NORMAL - - #define BUTTON_SPACING 20 - #define GUN_STATS_BUTTON_OFFSET ( getTextWidth( locString( "@PLATFORM_BACK" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) + 8 + BUTTON_SPACING ) - - NEW_FRAME_BUTTON_PC_LEFT_OFFSET( CAC_WIDTH, CAC_HEIGHT, GUN_STATS_BUTTON_OFFSET, "@PLATFORM_GUN_STATS", TOGGLE_ATTRIBUTES_AND_STATS, when( !dvarBool( ui_cac_gun_attributes_vis ) ) ) -#else // #ifdef PC - itemDef - { - type ITEM_TYPE_BUTTON - rect 180 ( CAC_HEIGHT / 2 ) 50 17 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@PLATFORM_GUN_STATS" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_LEFT - execkeyint BUTTON_BACK { TOGGLE_ATTRIBUTES_AND_STATS } - visible when( !dvarBool( ui_cac_gun_attributes_vis ) ) - decoration - } -#endif // #ifdef PC - - // Gun Attributes -#ifdef PC - NEW_FRAME_BUTTON_PC_LEFT_OFFSET( CAC_WIDTH, CAC_HEIGHT, GUN_STATS_BUTTON_OFFSET, "@PLATFORM_GUN_ATTRIBUTES", TOGGLE_ATTRIBUTES_AND_STATS, when( dvarBool( ui_cac_gun_attributes_vis ) ) ) -#else // #ifdef PC - itemDef - { - type ITEM_TYPE_BUTTON - rect 180 ( CAC_HEIGHT / 2 ) 50 17 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@PLATFORM_GUN_ATTRIBUTES" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_LEFT - execkeyint BUTTON_BACK { TOGGLE_ATTRIBUTES_AND_STATS } - visible when( dvarBool( ui_cac_gun_attributes_vis ) ) - decoration - } -#endif // #ifdef PC - -#define ANY_ATTACHMENTS_EQUIPPED \ - ( ( GetItemNumAttachmentsEquipped( dvarString( ui_custom_name ), STAT_CAC_PRIMARY ) > 0 ) || ( GetItemNumAttachmentsEquipped( dvarString( ui_custom_name ), STAT_CAC_SECONDARY ) > 0 ) ) - -#define CLEAR_ATTACHMENTS_ACTION \ - play CHOICE_FOCUS_SOUND; \ - execnow clearAllAttachmentsForItem ( dvarString( ui_custom_name ) ) ( getCurrentItemIndex() ) ; - -#ifdef PC - NEW_FRAME_BUTTON_PC_RIGHT_OFFSET( CAC_WIDTH, CAC_HEIGHT, 0, "@PLATFORM_CLEAR_ATTACHMENTS", CLEAR_ATTACHMENTS_ACTION, when( dvarString( ui_inside_popup ) == "attachments" && ANY_ATTACHMENTS_EQUIPPED ) ) -#else // #ifdef PC - itemDef - { - type ITEM_TYPE_BUTTON - rect -165 ( CAC_HEIGHT / 2 ) 120 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@PLATFORM_CLEAR_ATTACHMENTS" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_LEFT - execKeyInt BUTTON_Y { play CHOICE_FOCUS_SOUND; CLEAR_ATTACHMENTS_ACTION } - visible when( dvarString( ui_inside_popup ) == "attachments" && ANY_ATTACHMENTS_EQUIPPED ) - decoration - } -#endif // #ifdef PC - -#ifdef PC - // back button - NEW_FRAME_BACK_BUTTON_ACTION( CAC_WIDTH, CAC_HEIGHT, ON_ESC ) -#else // #ifdef PC - NEW_FRAME_BACK_BUTTON( CAC_WIDTH, CAC_HEIGHT ) -#endif // #ifdef PC - - } -} - - diff --git a/mods/patch_mp/ui_mp/combat_record.menu b/mods/patch_mp/ui_mp/combat_record.menu deleted file mode 100644 index 0597c12..0000000 --- a/mods/patch_mp/ui_mp/combat_record.menu +++ /dev/null @@ -1,3283 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui/frame.inc" - -/* - Some Info regarding the combat record menu ( sometimes abbreviated as CR ) : - -- The combat record menu basically displays the players stats in a graphical way and allows the player to compare some of - his stats with other players. - -- Whenever a player accesses someones combat record, either his own or his friend's, the stats are downloaded into a buffer - from which we fetch the stats and display them in the combat record. - -- The combat record menu is divided into different tabs which have different views in them ( all are different menudefs themselves ). - -- There is a lot of item animation used in this menu for having different types of effects. - ( for eg. having a scrolling effect in the weapons view, even though we dont have any listbox in there. ) - Obviously, there is some sort of hackery involved while trying to make these effects happen. - There are a bunch of item animation states which trigger other states for acheiving these effects. - There are some instances where we want to lock the controls for split second to ensure the animation gets over properly. - -- For displaying the histograms, menus are opened on top of each other. - -*/ - -#define COMBAT_RECORD_HEIGHT NEW_FRAME_DEFAULT_HEIGHT -#define COMBAT_RECORD_WIDTH ( COMBAT_RECORD_HEIGHT * FRAME_ASPECT_RATIO ) - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/overlaybg.inc" -#include "ui_mp/item_animate.inc" -#include "ui_mp/cac_viewer.inc" -#include "ui_mp/cac_player_model.inc" -#include "ui_mp/item_listbox.inc" -#include "ui_mp/tab_slider.inc" -#include "ui_mp/stats_info.inc" -#include "ui_mp/popup_player_info.inc" -#include "ui/choices_setup_popmenu.menu" -#include "ui_mp/fileshare.inc" -#include "ui_mp/popupstyle.inc" - -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#undef CHOICE_TEXTCOLOR -#define CHOICE_TEXTCOLOR NEW_FRAME_COMMON_TEXT_COLOR - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER - -#define COMBAT_RECORD_BODY_X_START ( -COMBAT_RECORD_WIDTH / 2 + 15 ) -#define COMBAT_RECORD_BODY_Y_START ( -COMBAT_RECORD_HEIGHT / 2 + 15 + NEW_FRAME_BG_Y_OFFSET( COMBAT_RECORD_HEIGHT ) ) - - -#define COMBAT_RECORD_LIST_X_START (COMBAT_RECORD_BODY_X_START+20) -#define COMBAT_RECORD_LIST_Y_START (COMBAT_RECORD_BODY_Y_START+60) - -#define COMBAT_RECORD_COLOR_RED NEW_FRAME_RED_RGB 1.0 -#define COMBAT_RECORD_COLOR_GREEN NEW_FRAME_GREEN_RGB 1.0 - -#define CR_LINE_GRAPH_X_START (COMBAT_RECORD_BODY_X_START+60) -#define CR_LINE_GRAPH_Y_START (COMBAT_RECORD_BODY_Y_START+200) -#define CR_LINE_GRAPH_WIDTH 450 -#define CR_LINE_GRAPH_HEIGHT 90 -#define CR_LINE_GRAPH_MARGIN (CR_LINE_GRAPH_HEIGHT/2) -#define CR_LINE_GRAPH_GRID_LINE_COLOR 0.4 0.4 0.4 0.4 - -#ifdef CONSOLE -#define HISTOGRAM_X_START (COMBAT_RECORD_BODY_X_START+60) -#define HISTOGRAM_Y_START (COMBAT_RECORD_BODY_Y_START+50) -#define HISTOGRAM_LABELS_X_START (HISTOGRAM_X_START-50) -#define HISTOGRAM_LABELS_Y_START (HISTOGRAM_Y_START+5) -#else // #ifdef CONSOLE -#define HISTOGRAM_X_START (COMBAT_RECORD_BODY_X_START+60) -#define HISTOGRAM_Y_START (COMBAT_RECORD_BODY_Y_START+50) -#define HISTOGRAM_LABELS_X_START (HISTOGRAM_X_START-50) -#define HISTOGRAM_LABELS_Y_START (HISTOGRAM_Y_START+5) -#endif - -#define HISTOGRAM_WIDTH 500 -#define HISTOGRAM_HEIGHT 90 - -#undef SELECT_ICON -#ifdef XENON - #define SELECT_ICON "ui_button_xenon_3d_a_32x32" -#endif -#ifdef PS3 - #define SELECT_ICON "ui_button_ps3_x_32x32" -#endif - -#undef NEW_FRAME_TRANSPARENCY -#define NEW_FRAME_TRANSPARENCY 0 0 0 0.1 - -#define CHOICE_TAB_TEXTSIZE TEXTSIZE_DEFAULT -#define TAB_1_TEXT ( locString( "@MPUI_CAREER_CAPS" ) ) -#define TAB_2_TEXT ( locString( "@MPUI_WEAPONS_CAPS" ) ) -#define TAB_3_TEXT ( locString( "@MPUI_MATCHES_CAPS" ) ) -#define TAB_4_TEXT ( locString( "@MENU_KILLSTREAKS_CAPS" ) ) -#define TAB_5_TEXT ( locString( "@MENU_TAB_CONTRACTS_CAPS" ) ) - -#define TAB_BG_PAD 5 -#define TAB_1_WIDTH ( getTextWidth( TAB_1_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_2_WIDTH ( getTextWidth( TAB_2_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_3_WIDTH ( getTextWidth( TAB_3_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_4_WIDTH ( getTextWidth( TAB_4_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_5_WIDTH ( getTextWidth( TAB_5_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_HEIGHT 15 - -#define COMBAT_RECORD_TAB_1_X NEW_FRAME_CHOICE_X_START -#define COMBAT_RECORD_TAB_2_X ( COMBAT_RECORD_TAB_1_X + TAB_1_WIDTH ) -#define COMBAT_RECORD_TAB_3_X ( COMBAT_RECORD_TAB_2_X + TAB_2_WIDTH ) -#define COMBAT_RECORD_TAB_4_X ( COMBAT_RECORD_TAB_3_X + TAB_3_WIDTH ) -#define COMBAT_RECORD_TAB_5_X ( COMBAT_RECORD_TAB_4_X + TAB_4_WIDTH ) - -#define COMBAT_RECORD_TAB_Y ( ( -COMBAT_RECORD_HEIGHT / 2 ) + NEW_FRAME_HEADER_HEIGHT - TAB_HEIGHT ) - -#define CLOSE_EXTRA_MENUS \ - if( dvarInt("ui_combatCurrViewNum") == CR_VIEW_CAREER_RECENT_PERFORMANCE ) \ - { \ - close recent_performance_histogram; \ - } \ - elseif( dvarInt("ui_combatCurrViewNum") == CR_VIEW_MATCHES_PERFORMANCE ) \ - { \ - close match_performance_gametypes_list; \ - close match_performance_histogram; \ - } - -#undef PC_TAB_SWITCH_ACTIONS_PREV -#define PC_TAB_SWITCH_ACTIONS_PREV CLOSE_EXTRA_MENUS -#undef PC_TAB_SWITCH_ACTIONS_NEXT -#define PC_TAB_SWITCH_ACTIONS_NEXT CLOSE_EXTRA_MENUS - -#define COMBAT_RECORD_TAB_1_ACTION CLOSE_EXTRA_MENUS execNow closeMenuImmediate (dvarString("ui_combatCurrentViewMenuName")); execNow openMenuImmediate (dvarString("ui_combatCareerViewMenuName")); -#define COMBAT_RECORD_TAB_2_ACTION CLOSE_EXTRA_MENUS execNow closeMenuImmediate (dvarString("ui_combatCurrentViewMenuName")); execNow openMenuImmediate (dvarString("ui_combatWeaponsViewMenuName")); -#define COMBAT_RECORD_TAB_3_ACTION CLOSE_EXTRA_MENUS execNow closeMenuImmediate (dvarString("ui_combatCurrentViewMenuName")); execNow openMenuImmediate (dvarString("ui_combatMatchesViewMenuName")); -#define COMBAT_RECORD_TAB_4_ACTION CLOSE_EXTRA_MENUS execNow closeMenuImmediate (dvarString("ui_combatCurrentViewMenuName")); execNow openMenuImmediate (dvarString("ui_combatKillstreaksViewMenuName")); -#define COMBAT_RECORD_TAB_5_ACTION CLOSE_EXTRA_MENUS execNow closeMenuImmediate (dvarString("ui_combatCurrentViewMenuName")); execNow openMenuImmediate (dvarString("ui_combatContractsViewMenuName")); - -#define COMBAT_RECORD_TAB_HEADERS \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_1_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_1_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( dvarInt("ui_combatCurrTab") != CR_TAB_CAREER ), TAB_MOUSEOVER_HIGHLIGHT; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_1_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_1_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( dvarInt("ui_combatCurrTab") == CR_TAB_CAREER ), ; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_2_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_2_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( dvarInt("ui_combatCurrTab") != CR_TAB_WEAPONS ), TAB_MOUSEOVER_HIGHLIGHT; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_2_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_2_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( dvarInt("ui_combatCurrTab") == CR_TAB_WEAPONS ), ; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_3_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_3_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_3_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( dvarInt("ui_combatCurrTab") != CR_TAB_MATCHES ), TAB_MOUSEOVER_HIGHLIGHT; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_3_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_3_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_3_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( dvarInt("ui_combatCurrTab") == CR_TAB_MATCHES ), ; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_4_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_4_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_4_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( dvarInt("ui_combatCurrTab") != CR_TAB_KILLSTREAKS ), TAB_MOUSEOVER_HIGHLIGHT; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_4_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_4_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_4_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( dvarInt("ui_combatCurrTab") == CR_TAB_KILLSTREAKS ), ; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_5_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_5_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_5_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( dvarInt("ui_combatCurrTab") != CR_TAB_CONTRACTS ), TAB_MOUSEOVER_HIGHLIGHT; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( COMBAT_RECORD_TAB_5_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_5_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_5_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( dvarInt("ui_combatCurrTab") == CR_TAB_CONTRACTS ), ; ) - -#define COMBAT_RECORD_TAB_BUTTONS \ - /* Tab 1 */ \ - TAB_ACTION_BUTTON_ADV( COMBAT_RECORD_TAB_1_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - COMBAT_RECORD_TAB_1_ACTION , 1, ; ) \ - /* Tab 2 */ \ - TAB_ACTION_BUTTON_ADV( COMBAT_RECORD_TAB_2_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - COMBAT_RECORD_TAB_2_ACTION , 1, ; ) \ - /* Tab 3 */ \ - TAB_ACTION_BUTTON_ADV( COMBAT_RECORD_TAB_3_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_3_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - COMBAT_RECORD_TAB_3_ACTION , 1, ; ) \ - /* Tab 4 */ \ - TAB_ACTION_BUTTON_ADV( COMBAT_RECORD_TAB_4_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_4_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - COMBAT_RECORD_TAB_4_ACTION , 1, ; ) \ - /* Tab 5 */ \ - TAB_ACTION_BUTTON_ADV( COMBAT_RECORD_TAB_5_X, \ - COMBAT_RECORD_TAB_Y, \ - TAB_5_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - COMBAT_RECORD_TAB_5_ACTION , 1, ; ) - -#define COMBAT_RECORD_TAB_BG( px, pw, selected ) \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER_FRAMED \ - frame 16 0.2 FRAME_OPEN_BOTTOM \ - rect 0 COMBAT_RECORD_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - exp rect X( px ) \ - exp rect W( pw ) \ - background "menu_mp_tab_frame_inner" \ - forecolor 0.5 0.5 0.5 0.5 \ - visible when( selected ) \ - decoration \ - } \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER_FRAMED \ - frame 16 0.2 FRAME_OPEN_BOTTOM \ - rect 0 COMBAT_RECORD_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - exp rect X( px ) \ - exp rect W( pw ) \ - background "menu_mp_tab_frame_inner" \ - forecolor 1 1 1 1 \ - visible when( !selected ) \ - decoration \ - } - -#define COMBAT_RECORD_PLAYER_MODEL( right, top, size ) \ - itemDef \ - { \ - visible when( dvarint( uiViewer_loaded ) == 1 && dvarbool( uiViewer_show ) ) \ - rect right top size size CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - forecolor 1 1 1 1 \ - style WINDOW_STYLE_SHADER \ - background "ui_viewer" \ - decoration \ - } \ - itemDef \ - { \ - visible when( dvarint( uiViewer_showGrid ) == 1 ) \ - rect right top size size CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - forecolor 1 1 1 1 \ - style WINDOW_STYLE_SHADER \ - background "viewer_grid" \ - decoration \ - } - -#define COMBAT_RECORD_RANK_ICON( x_offset, y_offset, pshader ) \ - PREPROC_SHADER_DRAW( x_offset y_offset 32 32 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, pshader, 1 1 1 1, ) - -#define RANK_BACKGROUND_COLOR 0.32 0.36 0.29 0.0 - -#define SUMMARY_RANK_ICON( x_offset, y_offset, pshader, visArg ) \ - PREPROC_SHADER_DRAW_VIS_EX( (x_offset-45) (y_offset-44) 150 150 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "hud_notification_rank_backing", RANK_BACKGROUND_COLOR, \ - visArg, ; ) \ - PREPROC_SHADER_DRAW_VIS_EX( x_offset y_offset 100 100 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - ((pshader) + "_128"), 1 1 1 1, \ - visArg, ; ) - -#define SPEED 200 - -#define RESET_ALL_BARS_AFTER_MOVING_UP( menuName ) \ - execnow "set ui_slideUpDistance 0"; \ - ITEM_ANIMATE( menuName, "dummy", changePivotAfterMovingUp, 0 ) \ - -#define RESET_ALL_BARS_AFTER_MOVING_DOWN( menuName ) \ - execnow "set ui_slideUpDistance 0"; \ - ITEM_ANIMATE( menuName, "dummy", changePivotAfterMovingDown, 0 ) \ - -#define ADJUST_OTHER_PLAYER_INFO_BARS( menuName ) \ - if( dvarBool( "ui_combatComparisonModeOn" ) ) \ - { \ - ITEM_ANIMATE( menuName, "info_bar_1_otherPlayer", fadeIn, 0 ); \ - ITEM_ANIMATE( menuName, "info_bar_otherPlayer", fadeIn, 0 ); \ - ITEM_ANIMATE( menuName, "info_bar_5_otherPlayer", fadeIn, 0 ); \ - ITEM_ANIMATE( menuName, "otherPlayerName", fadeIn, 0 ); \ - } \ - else \ - { \ - ITEM_ANIMATE( menuName, "info_bar_1_otherPlayer", fadeOut, 0 ); \ - ITEM_ANIMATE( menuName, "info_bar_otherPlayer", fadeOut, 0 ); \ - ITEM_ANIMATE( menuName, "info_bar_5_otherPlayer", fadeOut, 0 ); \ - ITEM_ANIMATE( menuName, "otherPlayerName", fadeOut, 0 ); \ - } - -#define ANIM_STATES( forecolorArg ) \ - ITEM_STATE( slideAndFadeOut, forecolor forecolorArg 0; , changeState default 0; ) \ - ITEM_STATE( slideAndFadeIn, forecolor forecolorArg 1;, changeState default 0; ) \ - ITEM_STATE( slide, ;, changeState default 0; ) \ - ITEM_STATE( fadeIn, forecolor forecolorArg 1;, ; ) \ - ITEM_STATE( fadeOut, forecolor forecolorArg 0;, ;) \ - ITEM_STATE( fadeOutThenFadeInFast, forecolor forecolorArg 0;, changeState fadeIn 0; ) \ - ITEM_STATE( fadeOutThenFadeInSlow, forecolor forecolorArg 0;, changeState fadeIn SPEED; ) - -#define ANIM_STATES_FOR_BG( forecolorArg, alpha ) \ - ITEM_STATE( slideAndFadeOut, forecolor forecolorArg 0; , changeState default 0; ) \ - ITEM_STATE( slideAndFadeIn, forecolor forecolorArg alpha;, changeState default 0; ) \ - ITEM_STATE( slide, ;, changeState default 0; ) \ - ITEM_STATE( fadeIn, forecolor forecolorArg alpha;, ; ) \ - ITEM_STATE( fadeOut, forecolor forecolorArg 0;, ;) \ - -#define DUMMY_ITEM_FOR_ANIMATION( menuName, vis_condition ) \ - itemDef \ - { \ - name "dummy" \ - style WINDOW_STYLE_SHADER \ - rect COMBAT_RECORD_BODY_X_START (COMBAT_RECORD_BODY_Y_START+250) 1 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - forecolor 0 0 0 0 \ - background "white" \ - visible when( vis_condition ) \ - decoration \ - ITEM_STATE( lockScrolling, ;, setDvar ui_combatLockScrolling "0"; ) \ - ITEM_STATE( updateViewAfterDownloading, ;, \ - if( dvarBool("ui_combatOtherPlayerStatsAvailable") ) \ - { \ - ITEM_ANIMATE( menuName, "info_bar_1_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "otherPlayerName", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_1", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5", default, SPEED ); \ - execNow set ui_combatInfoBarWidth 0; \ - execNow set ui_combatCurrScrollBarPos 0; \ - execnow set ui_combatComparisonModeOn 1; \ - execnow "UpdateCombatRecordView"; \ - } \ - ) \ - ITEM_STATE( changePivotAfterMovingUp, ;, if( ChangeSortedStatsPivot( 1 ) ) { changeState lockScrolling 0; } ) \ - ITEM_STATE( moveUpAndChangePivot, ;, RESET_ALL_BARS_AFTER_MOVING_UP( menuName ) ) \ - ITEM_STATE( changePivotAfterMovingDown, ;, if( ChangeSortedStatsPivot( -1 ) ) { changeState lockScrolling 0; } ) \ - ITEM_STATE( moveDownAndChangePivot, ;, RESET_ALL_BARS_AFTER_MOVING_DOWN( menuName ) ) \ - } - -#define SCROLL_DOWN_ACTION( menuName ) \ - ITEM_ANIMATE( menuName, "dummy", moveUpAndChangePivot, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_1", slideAndFadeOut, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar", slide, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5", slide, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_6", slideAndFadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "scroll_bar", slide, SPEED ); \ - if( dvarbool( "ui_combatComparisonModeOn" ) )\ - { \ - ITEM_ANIMATE( menuName, "info_bar_1_otherPlayer", fadeOutThenFadeInFast, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_6_otherPlayer", slideAndFadeIn, SPEED ); \ - } \ - execnow set ui_slideUpDistance -INFO_BAR_SET_HEIGHT; \ - execnow set ui_combatCurrScrollBarPos (dvarInt("ui_combatCurrScrollBarPos")+1); \ - setDvar ui_combatLockScrolling "1"; - -#define SCROLL_UP_ACTION( menuName ) \ - ITEM_ANIMATE( menuName, "dummy", moveDownAndChangePivot, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_0", slideAndFadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_1", slide, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar", slide, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5", slideAndFadeOut, SPEED ); \ - ITEM_ANIMATE( menuName, "scroll_bar", slide, SPEED ); \ - if( dvarbool( "ui_combatComparisonModeOn" ) ) \ - { \ - ITEM_ANIMATE( menuName, "info_bar_0_otherPlayer", slideAndFadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_1_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5_otherPlayer", fadeOutThenFadeInFast, SPEED ); \ - } \ - execnow set ui_slideUpDistance INFO_BAR_SET_HEIGHT; \ - execnow set ui_combatCurrScrollBarPos (dvarInt("ui_combatCurrScrollBarPos")-1); \ - setDvar ui_combatLockScrolling "1"; - -#define CHANGE_MENU_ACTION( currMenu, prevMenu, nextMenu ) \ - execKeyInt DPAD_LEFT { \ - CLOSE_EXTRA_MENUS \ - execNow closeMenuImmediate (currMenu); \ - execNow openMenuImmediate (prevMenu); \ - } \ - execKeyInt DPAD_RIGHT { \ - CLOSE_EXTRA_MENUS \ - execNow closeMenuImmediate (currMenu); \ - execNow openMenuImmediate (nextMenu); \ - } \ - execKeyInt APAD_LEFT { \ - CLOSE_EXTRA_MENUS \ - execNow closeMenuImmediate (currMenu); \ - execNow openMenuImmediate (prevMenu); \ - } \ - execKeyInt APAD_RIGHT { \ - CLOSE_EXTRA_MENUS \ - execNow closeMenuImmediate (currMenu); \ - execNow openMenuImmediate (nextMenu); \ - } - -#define CAN_COMPARISON_MODE_BE_TURNED_ON \ - ( ( ( dvarInt("ui_combatCurrViewNum") >= CR_VIEW_WEAPONS_KDR && dvarInt("ui_combatCurrViewNum") <= CR_VIEW_WEAPONS_EQUIPMENT_USAGE ) ) || \ - ( ( dvarInt("ui_combatCurrViewNum") >= CR_VIEW_KILLSTREAKS_CALLED && dvarInt("ui_combatCurrViewNum") <= CR_VIEW_KILLSTREAKS_TIMES_KILLED_BY ) ) || \ - ( dvarString("ui_combatCurrTab") == CR_TAB_CONTRACTS ) || \ - ( dvarInt("ui_combatCurrViewNum") == CR_VIEW_CAREER_PERSONAL_BESTS ) ) - -#define DOES_MENU_HAVE_SCROLLING_ENABLED \ - ( ( ( dvarInt("ui_combatCurrViewNum") >= CR_VIEW_WEAPONS_KDR && dvarInt("ui_combatCurrViewNum") <= CR_VIEW_WEAPONS_EQUIPMENT_USAGE ) ) || \ - ( ( dvarInt("ui_combatCurrViewNum") >= CR_VIEW_KILLSTREAKS_CALLED && dvarInt("ui_combatCurrViewNum") <= CR_VIEW_KILLSTREAKS_TIMES_KILLED_BY ) ) ) - - -// TYPES OF GRAPHS -#define RECENT_PERFORMANCE_HISTOGRAM 0 -#define MATCH_PERFORMANCE_HISTOGRAM 1 -#define RECENT_EARNINGS_BAR_GRAPH 2 - -// TYPES OF PIE CHARTS -#define NON_WAGER_GAMETYPE_PIE_CHART 0 -#define WAGER_GAMETYPE_PIE_CHART 1 -#define FAVORITE_KILLSTREAKS_PIE_CHART 2 - -#define RETURN_MIN_SCORE 1 -#define RETURN_MAX_SCORE 0 - -// TABS IN COMBAT RECORD -#define CR_TAB_CAREER 1 -#define CR_TAB_WEAPONS 2 -#define CR_TAB_MATCHES 3 -#define CR_TAB_CONTRACTS 4 -#define CR_TAB_KILLSTREAKS 5 - -// VIEW COUNT -#define CR_CAREER_VIEW_COUNT 3 -#define CR_WEAPONS_VIEW_COUNT 11 -#define CR_MATCHES_VIEW_COUNT 3 -#define CR_KILLSTREAKS_VIEW_COUNT 3 -#define CR_CONTRACTS_VIEW_COUNT 1 - -// VIEWS IN COMBAT RECORD -#define CR_VIEW_CAREER_SUMMARY 0 -#define CR_VIEW_CAREER_RECENT_PERFORMANCE 1 -#define CR_VIEW_CAREER_PERSONAL_BESTS 2 -#define CR_VIEW_WEAPONS_FAV_WEAPON 3 -#define CR_VIEW_WEAPONS_HIT_LOCATION_HEATMAP 4 -#define CR_VIEW_WEAPONS_KDR 5 -#define CR_VIEW_WEAPONS_ACCURACY 6 -#define CR_VIEW_WEAPONS_KILLS 7 -#define CR_VIEW_WEAPONS_DEATHS 8 -#define CR_VIEW_WEAPONS_HEADSHOTS 9 -#define CR_VIEW_WEAPONS_TIMES_KILLED_BY 10 -#define CR_VIEW_WEAPONS_EQUIPMENT_KILLS 11 -#define CR_VIEW_WEAPONS_EQUIPMENT_TIMES_KILLED_BY 12 -#define CR_VIEW_WEAPONS_EQUIPMENT_USAGE 13 -#define CR_VIEW_MATCHES_PERFORMANCE 14 -#define CR_VIEW_MATCHES_HEAT_MAP 15 -#define CR_VIEW_MATCHES_RECENT_EARNINGS 16 -#define CR_VIEW_CONTRACTS_INFO 17 -#define CR_VIEW_KILLSTREAKS_FAVORITES 18 -#define CR_VIEW_KILLSTREAKS_CALLED 19 -#define CR_VIEW_KILLSTREAKS_KILLS 20 -#define CR_VIEW_KILLSTREAKS_TIMES_KILLED_BY 21 - -#define CR_RECENT_PERFORMANCE_INFO -1 - -#define RESET_SELECTED_PLAYER_XUID \ - if( dvarString(lastSelectedPlayerXuid) != 0 ) \ - { \ - execNow set selectedPlayerXuid (DvarString(lastSelectedPlayerXuid)); \ - execNow set selectedFriendName (DvarString(lastSelectedPlayerName)); \ - } \ - -#define LSHLDR_ACTION \ - if( dvarbool("ui_combatLockScrolling") == 0 ) \ - { \ - CLOSE_EXTRA_MENUS \ - execNow "closeMenuImmediate (dvarString(ui_combatCurrentViewMenuName))"; \ - if( dvarString("ui_combatCurrTab") == CR_TAB_CAREER ) \ - { \ - execNow set ui_combatCareerViewMenuName (dvarString(ui_combatPreviousViewMenuName)); \ - } \ - elseif( dvarString("ui_combatCurrTab") == CR_TAB_WEAPONS ) \ - { \ - execNow set ui_combatWeaponsViewMenuName (dvarString(ui_combatPreviousViewMenuName)); \ - } \ - elseif( dvarString("ui_combatCurrTab") == CR_TAB_MATCHES ) \ - { \ - execNow set ui_combatMatchesViewMenuName (dvarString(ui_combatPreviousViewMenuName)); \ - } \ - elseif( dvarString("ui_combatCurrTab") == CR_TAB_KILLSTREAKS ) \ - { \ - execNow set ui_combatKillstreaksViewMenuName (dvarString(ui_combatPreviousViewMenuName)); \ - } \ - execNow "openMenuImmediate (dvarString(ui_combatPreviousViewMenuName))"; \ - } - -#define RSHLDR_ACTION \ - if( dvarbool("ui_combatLockScrolling") == 0 ) \ - { \ - CLOSE_EXTRA_MENUS \ - execNow "closeMenuImmediate (dvarString(ui_combatCurrentViewMenuName))"; \ - if( dvarString("ui_combatCurrTab") == CR_TAB_CAREER ) \ - { \ - execNow set ui_combatCareerViewMenuName (dvarString(ui_combatNextViewMenuName)); \ - } \ - elseif( dvarString("ui_combatCurrTab") == CR_TAB_WEAPONS ) \ - { \ - execNow set ui_combatWeaponsViewMenuName (dvarString(ui_combatNextViewMenuName)); \ - } \ - elseif( dvarString("ui_combatCurrTab") == CR_TAB_MATCHES ) \ - { \ - execNow set ui_combatMatchesViewMenuName (dvarString(ui_combatNextViewMenuName)); \ - } \ - elseif( dvarString("ui_combatCurrTab") == CR_TAB_KILLSTREAKS ) \ - { \ - execNow set ui_combatKillstreaksViewMenuName (dvarString(ui_combatNextViewMenuName)); \ - } \ - execNow "openMenuImmediate (dvarString(ui_combatNextViewMenuName))"; \ - } \ - - -#define DOWN_ACTION( menuName ) \ - if( dvarbool("ui_combatLockScrolling") == 0 ) \ - { \ - if( canScrollUpOrDown( 0 ) && DOES_MENU_HAVE_SCROLLING_ENABLED ) \ - { \ - SCROLL_DOWN_ACTION( menuName ) \ - } \ - } - -#define UP_ACTION( menuName ) \ - if( dvarbool("ui_combatLockScrolling") == 0 ) \ - { \ - if( canScrollUpOrDown( 1 ) ) \ - { \ - SCROLL_UP_ACTION( menuName ) \ - } \ - } - -#define COMPARE_FRIENDS_ACTION \ - if( CAN_COMPARISON_MODE_BE_TURNED_ON && dvarbool("ui_combatLockScrolling") == 0 ) \ - { \ - if( !dvarbool( "ui_showFriendsCombatRecord" ) ) \ - { \ - BUTTON_X_ACTION_FOR_SELF_COMBAT_RECORD( menuName ) \ - } \ - else \ - { \ - if( !dvarbool( "ui_combatComparisonModeOn" ) ) \ - { \ - BUTTON_X_ACTION_COMP_MODE_ON( menuName ) \ - } \ - else \ - { \ - BUTTON_X_ACTION_COMP_MODE_OFF( menuName ) \ - } \ - execNow "toggle ui_combatComparisonModeOn 0 1"; \ - ADJUST_OTHER_PLAYER_INFO_BARS( (dvarString("ui_combatCurrentViewMenuName")) ) \ - } \ - } \ - -#ifdef PC - #define PC_ACTIONS( currMenu, prevMenu, nextMenu ) \ - execKeyInt K_LEFTARROW { \ - CLOSE_EXTRA_MENUS \ - execNow closeMenuImmediate (currMenu); \ - execNow openMenuImmediate (prevMenu); \ - } \ - execKeyInt K_RIGHTARROW { \ - CLOSE_EXTRA_MENUS \ - execNow closeMenuImmediate (currMenu); \ - execNow openMenuImmediate (nextMenu); \ - } -#else //#ifdef PC - #define PC_ACTIONS( currMenu, prevMenu, nextMenu ) -#endif //#ifdef PC - -#define ACTION_HANDLER( menuName ) \ - execKeyInt APAD_DOWN \ - { \ - DOWN_ACTION( menuName ) \ - } \ - execKeyInt APAD_UP \ - { \ - UP_ACTION( menuName ) \ - } \ - execKeyInt DPAD_DOWN \ - { \ - DOWN_ACTION( menuName ) \ - } \ - execKeyInt DPAD_UP \ - { \ - UP_ACTION( menuName ) \ - } \ - execKeyInt K_MWHEELDOWN \ - { \ - DOWN_ACTION( menuName ) \ - } \ - execKeyInt K_MWHEELUP \ - { \ - UP_ACTION( menuName ) \ - } \ - execKeyInt BUTTON_LSHLDR \ - { \ - LSHLDR_ACTION \ - } \ - execKeyInt BUTTON_RSHLDR \ - { \ - RSHLDR_ACTION \ - } \ - execKeyInt BUTTON_X \ - { \ - COMPARE_FRIENDS_ACTION \ - } \ - PC_ACTIONS( dvarString("ui_combatCurrentViewMenuName"), (dvarString("ui_combatPrevTabMenuName")), (dvarString("ui_combatNextTabMenuName")) ) \ - CHANGE_MENU_ACTION( dvarString("ui_combatCurrentViewMenuName"), (dvarString("ui_combatPrevTabMenuName")), (dvarString("ui_combatNextTabMenuName")) ) - -#define BUTTON_X_ACTION_FOR_SELF_COMBAT_RECORD( menuName ) \ - ITEM_ANIMATE( menuName, "info_bar_1", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_1_otherPlayer", fadeOut, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_otherPlayer", fadeOut, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5_otherPlayer", fadeOut, SPEED ); \ - ITEM_ANIMATE( menuName, "otherPlayerName", fadeOut, SPEED ); \ - execNow set ui_combatInfoBarWidth -1; \ - execNow set ui_combatComparisonModeOn 0; \ - execNow set ui_combatOtherPlayerStatsAvailable 1; \ - execNow "openMenu menu_cr_friends_selection"; - -#define BUTTON_X_ACTION_COMP_MODE_ON( menuName ) \ - ITEM_ANIMATE( menuName, "info_bar_1", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_1_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5_otherPlayer", fadeIn, SPEED ); \ - ITEM_ANIMATE( menuName, "otherPlayerName", fadeIn, SPEED ); - -#define BUTTON_X_ACTION_COMP_MODE_OFF( menuName ) \ - ITEM_ANIMATE( menuName, "info_bar_1", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5", default, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_1_otherPlayer", fadeOut, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_otherPlayer", fadeOut, SPEED ); \ - ITEM_ANIMATE( menuName, "info_bar_5_otherPlayer", fadeOut, SPEED ); \ - ITEM_ANIMATE( menuName, "otherPlayerName", fadeOut, SPEED ); - -#define INFO_BAR_Y_START (COMBAT_RECORD_BODY_Y_START+5) - -#define GET_SORTED_STAT( sortedItemIndex, isAbsoluteIndex, param ) \ - getSortedStatsForFriendOrSelf( dvarbool("ui_showFriendsCombatRecord"), sortedItemIndex, isAbsoluteIndex, param ) - -#define GET_SORTED_ITEM_INDEX( sortedItemIndex, isAbsoluteIndex ) \ - getSortedStatsForFriendOrSelf( dvarbool("ui_showFriendsCombatRecord"), sortedItemIndex, isAbsoluteIndex, 0 ) - -#define GET_STAT( statName ) \ - getStatForFriendOrSelf( dvarbool("ui_showFriendsCombatRecord"), "PlayerStatsList", statName ) - -#define GET_STAT_FOR_OTHER_PLAYER( statName ) \ - getStatForFriendOrSelf( !dvarbool("ui_showFriendsCombatRecord"), "PlayerStatsList", statName ) - -#define GET_ITEM_STAT( itemIndex, statName ) \ - getStatForFriendOrSelf( dvarbool("ui_showFriendsCombatRecord"), "ItemStats", itemIndex, "stats", statName, "statValue" ) - -#define GET_HIGHEST_STAT( statName ) \ - getStatForFriendOrSelf( dvarbool("ui_showFriendsCombatRecord"), "HighestStats", statName ) - -#define COMPARE_BUTTON( vis_condition ) \ - itemDef \ - { \ - type ITEM_TYPE_TEXT \ - rect -200 ( COMBAT_RECORD_HEIGHT / 2 + 18 ) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - text "@PLATFORM_COMPARE" \ - textfont UI_FONT_NORMAL \ - textscale TEXTSIZE_DEFAULT \ - textalign ITEM_ALIGN_BOTTOM_LEFT \ - visible when( !dvarbool( xblive_basictraining ) && dvarbool( "ui_showFriendsCombatRecord" ) && !dvarbool( "ui_combatComparisonModeOn" ) && vis_condition ) \ - decoration \ - } \ - -#define COMPARE_FRIENDS_BUTTON( vis_condition ) \ - itemDef \ - { \ - type ITEM_TYPE_TEXT \ - rect -200 ( COMBAT_RECORD_HEIGHT / 2 + 18 ) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - text "@PATCH_TOGGLE_COMPARE_FRIENDS" \ - textfont CHOICE_TEXTFONT \ - textscale TEXTSIZE_DEFAULT \ - textalign ITEM_ALIGN_BOTTOM_LEFT \ - visible when( !dvarbool( xblive_basictraining ) && !dvarbool( "ui_showFriendsCombatRecord" ) && vis_condition ) \ - decoration \ - } - -#define HIDE_COMPARISON_BUTTON( vis_condition ) \ - /*NEW_FRAME_BUTTON_PC_LEFT_OFFSET( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@PLATFORM_HIDE_COMPARISON", execNow set ui_combatComparisonModeOn 0;, dvarBool("ui_combatComparisonModeOn") && vis_condition )*/ - -#define INFO_BAR_COLOR NEW_FRAME_ORANGE_RGB - -#define INFO_BAR_COLOR_FOR_FRIEND NEW_FRAME_LT_GREY_RGB - -#define INFO_BAR_SET_HEIGHT 46 - -#define MAX_VARIABLEBAR_LENGTH 231 -#define VARIABLEBAR_TAGDISPLAY_LENGTH 150 - -#define INFO_BAR_STRUCTURE_X_START (COMBAT_RECORD_BODY_X_START+10) - -#ifdef CONSOLE - #define INFO_BAR_SCROLL_BUTTONS( vis_condition ) -#else - #define INFO_BAR_SCROLL_BUTTONS( vis_condition ) \ - /*Up Arrow*/ \ - itemDef \ - { \ - name "scroll_bar_up_arrow" \ - type ITEM_TYPE_BUTTON_NO_TEXT \ - rect (COMBAT_RECORD_WIDTH/2-33) (INFO_BAR_Y_START+33) 12 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - visible when( vis_condition ) \ - mouseEnter { play CHOICE_FOCUS_SOUND ; } \ - action { play CHOICE_FOCUS_SOUND ; execKeyHandler K_MWHEELUP } \ - } \ - /*Down Arrow*/ \ - itemDef \ - { \ - name "scroll_bar_down_arrow" \ - type ITEM_TYPE_BUTTON_NO_TEXT \ - rect (COMBAT_RECORD_WIDTH/2-33) (INFO_BAR_Y_START+33+240-10) 12 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - visible when( vis_condition ) \ - mouseEnter { play CHOICE_FOCUS_SOUND ; } \ - action { play CHOICE_FOCUS_SOUND ; execKeyHandler K_MWHEELDOWN } \ - } -#endif - -#ifdef CONSOLE - #define INFO_BAR_BOTTOM_BUTTON \ - /* scroll bar bottom arrow */ \ - PREPROC_SHADER_DRAW_VIS_EX( (COMBAT_RECORD_WIDTH/2-28) (INFO_BAR_Y_START+33+225) 14 14 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "ui_arrow_right", NEW_FRAME_ORANGE_RGB 1, \ - when( vis_condition && dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS );, rotation 90; ) - - #define SHOW_COMPARE_TEXT_CONSOLE COMPARE_BUTTON( vis_condition ) -#else // #ifdef CONSOLE - #define INFO_BAR_BOTTOM_BUTTON - #define SHOW_COMPARE_TEXT_CONSOLE -#endif // #ifdef CONSOLE - -#define INFO_BAR_STRUCTURE( vis_condition ) \ - INFO_BAR_TAGS( vis_condition ) \ - INFO_BARS( vis_condition ) \ - SHOW_COMPARE_TEXT_CONSOLE \ - /*COMPARE_FRIENDS_BUTTON( vis_condition )*/ \ - NEW_FRAME_COMPARE_FRIEND_BUTTON_ACTION( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@PATCH_TOGGLE_COMPARE_FRIENDS", COMPARE_FRIENDS_ACTION , vis_condition ) \ - HIDE_COMPARISON_BUTTON( vis_condition ) \ - RANK_AND_GAMERTAG_OF_COMPARED_PLAYER( (-155), vis_condition ) \ - /* scroll bar line */ \ - PREPROC_SHADER_DRAW_VIS_EX( (COMBAT_RECORD_WIDTH/2-33) (INFO_BAR_Y_START+33) 12 240 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_lobby_scrollbar_main", 1 1 1 1, \ - when( vis_condition && dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS );, ; ) \ - INFO_BAR_BOTTOM_BUTTON \ - /* scroll bar buttons */ \ - INFO_BAR_SCROLL_BUTTONS( vis_condition ) \ - /* scroll bar square */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (COMBAT_RECORD_WIDTH/2-33), \ - ( (INFO_BAR_Y_START+53) + GetCurrentScrollBarPosition( 193 ) ), \ - 12, \ - 15, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_lobby_scrollbar_block", 1 1 1 1, \ - when( vis_condition && dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS );, \ - name "scroll_bar"; ITEM_STATE( slide, ;, ; ); ) - -#define INFO_BAR( itemName, rank, alpha, vis_condition ) \ - /* INFO BAR */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH+1), \ - ( INFO_BAR_Y_START+3+(INFO_BAR_SET_HEIGHT*rank) + dvarInt( "ui_slideUpDistance" ) ), \ - ( GetCombatRecordInfoBarWidth( 0, MAX_VARIABLEBAR_LENGTH, rank ) ), \ - 13, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_combatrecord_bar", INFO_BAR_COLOR alpha, \ - when( vis_condition );, \ - name itemName; ANIM_STATES( INFO_BAR_COLOR ) ) \ - /* VALUE TEXT */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH+ 240 ), \ - ( INFO_BAR_Y_START+3+(INFO_BAR_SET_HEIGHT*rank) + dvarInt( "ui_slideUpDistance" ) ), \ - 100, \ - 13, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - GetCombatRecordInfoBarText( 0, rank ), \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, INFO_BAR_COLOR alpha, \ - when( vis_condition );, \ - name itemName; ANIM_STATES( INFO_BAR_COLOR ) ) \ - /* INFO BAR FOR FRIEND*/ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH+1), \ - ( INFO_BAR_Y_START+22+(INFO_BAR_SET_HEIGHT*rank) + dvarInt( "ui_slideUpDistance" ) ), \ - ( GetCombatRecordInfoBarWidth( 1, MAX_VARIABLEBAR_LENGTH, rank ) * ((dvarInt( "ui_combatInfoBarWidth" )+1)) ), \ - 13, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_combatrecord_bar", INFO_BAR_COLOR_FOR_FRIEND 0, \ - when( vis_condition );, \ - name itemName##"_otherPlayer"; ANIM_STATES( INFO_BAR_COLOR_FOR_FRIEND ) ) \ - /* VALUE TEXT FOR FRIEND */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH+ 240 ), \ - ( INFO_BAR_Y_START+22+(INFO_BAR_SET_HEIGHT*rank) + dvarInt( "ui_slideUpDistance" ) ), \ - 100, \ - 13, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - GetCombatRecordInfoBarText( 1, rank ), \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, INFO_BAR_COLOR_FOR_FRIEND 0, \ - when( vis_condition );, \ - name itemName##"_otherPlayer"; ANIM_STATES( INFO_BAR_COLOR_FOR_FRIEND ) ) \ - /* RANK ICON FOR FRIEND TO THE LEFT OF THE INFO BAR */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH-19 ), \ - ( INFO_BAR_Y_START+18+(INFO_BAR_SET_HEIGHT*rank) + dvarInt( "ui_slideUpDistance" ) ), \ - 16, \ - 16, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN;, \ - tablelookup( "mp/rankIconTable.csv", 0, GET_STAT_FOR_OTHER_PLAYER( "RANK" ), 1+GET_STAT_FOR_OTHER_PLAYER( "PLEVEL" ) ), 1 1 1 0, \ - when( vis_condition );, \ - name itemName##"_otherPlayer"; ANIM_STATES( 1 1 1 ) ) - -#define INFO_BAR_TAG( tagName, tagNum, alpha, vis_condition ) \ - /*BG FOR VARIABLE NAME*/ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( INFO_BAR_STRUCTURE_X_START, \ - ( (INFO_BAR_Y_START+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - VARIABLEBAR_TAGDISPLAY_LENGTH, \ - 38, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "white", 1 1 1 (alpha/10), \ - when( vis_condition );, \ - name tagName; ANIM_STATES_FOR_BG( 1 1 1, 0.1 ) ) \ - /*BG FOR TEXT */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH+ 236 ), \ - ( (INFO_BAR_Y_START+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - VARIABLEBAR_TAGDISPLAY_LENGTH-32, \ - 38, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "white", 0 0 0 (alpha*0.03), \ - when( vis_condition );, \ - name tagName; ANIM_STATES_FOR_BG( 0 0 0, 0.03 ) ) \ - /*BG FOR INFO BARS*/ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH+1), \ - ( (INFO_BAR_Y_START+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - (COMBAT_RECORD_WIDTH-VARIABLEBAR_TAGDISPLAY_LENGTH-184), \ - 19, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "white", 1 1 1 (alpha/10), \ - when( vis_condition ), \ - name tagName; ANIM_STATES_FOR_BG( 1 1 1, 0.1 ) ) \ - /*BG IMAGE FOR INFO BARS*/ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH+1), \ - ( (INFO_BAR_Y_START+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - (COMBAT_RECORD_WIDTH-VARIABLEBAR_TAGDISPLAY_LENGTH-184), \ - 19, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_bar_shadow", 0 0 0 (alpha*0.2), \ - when( vis_condition ), \ - name tagName; ANIM_STATES_FOR_BG( 0 0 0, 0.2 ) ) \ - /*BG FOR FRIEND INFO BARS*/ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH+1), \ - ( (INFO_BAR_Y_START+(INFO_BAR_SET_HEIGHT*tagNum))+ 19 + dvarInt( "ui_slideUpDistance" ) ), \ - (COMBAT_RECORD_WIDTH-VARIABLEBAR_TAGDISPLAY_LENGTH-184), \ - 19, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "white", 0 0 0 (alpha/10), \ - when( vis_condition ), \ - name tagName; ANIM_STATES_FOR_BG( 0 0 0, 0.1 ) ) \ - /*BG IMAGE FOR FRIEND INFO BARS*/ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (INFO_BAR_STRUCTURE_X_START+VARIABLEBAR_TAGDISPLAY_LENGTH+1), \ - ( (INFO_BAR_Y_START+(INFO_BAR_SET_HEIGHT*tagNum))+ 19 + dvarInt( "ui_slideUpDistance" ) ), \ - (COMBAT_RECORD_WIDTH-VARIABLEBAR_TAGDISPLAY_LENGTH-184), \ - 19, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "menu_mp_bar_shadow", 0 0 0 (alpha*0.2), \ - when( vis_condition ), \ - name tagName; ANIM_STATES_FOR_BG( 0 0 0, 0.2 ) ) \ - /* ITEM NAME*/ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( INFO_BAR_STRUCTURE_X_START, \ - ( (INFO_BAR_Y_START+3+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - (VARIABLEBAR_TAGDISPLAY_LENGTH-5), \ - 14, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - "@"+getCombatRecordInfoBarTagText( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ), \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_RIGHT, CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT alpha, \ - when( vis_condition && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS ) ), \ - name tagName; ANIM_STATES( CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT ) ) \ - /* ITEM NAME FOR PERSONAL BESTS */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( INFO_BAR_STRUCTURE_X_START, \ - ( (INFO_BAR_Y_START+10+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - (VARIABLEBAR_TAGDISPLAY_LENGTH-5), \ - 14, \ - CHOICE_HORIZONTAL_ALIGN, CHOICE_VERTICAL_ALIGN, \ - "@"+getCombatRecordInfoBarTagText( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT alpha, \ - when( vis_condition && ( dvarInt("ui_combatCurrViewNum") == CR_VIEW_CAREER_PERSONAL_BESTS ) ), \ - name tagName; ANIM_STATES( CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT ) ) \ - /* WEAPON ICON */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( INFO_BAR_STRUCTURE_X_START+5 ), \ - ( (INFO_BAR_Y_START+3+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - (-70 ), \ - 32, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - getItemImage( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ), 1 1 1 alpha, \ - when( GetImageWidth( getItemImage( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ) ) > 128 && vis_condition && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS ) && ( ( dvarString("ui_combatCurrTab") == CR_TAB_WEAPONS ) && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_WEAPONS_EQUIPMENT_KILLS ) && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_WEAPONS_EQUIPMENT_TIMES_KILLED_BY ) && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_WEAPONS_EQUIPMENT_USAGE ) ) ), \ - name tagName; ANIM_STATES( 1 1 1 ); ) \ - /* WEAPON ICON */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( INFO_BAR_STRUCTURE_X_START+5 ), \ - ( (INFO_BAR_Y_START+3+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - (-45 ), \ - 32, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - getItemImage( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ), 1 1 1 alpha, \ - when( GetImageWidth( getItemImage( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ) ) <= 128 && vis_condition && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS ) && ( ( dvarString("ui_combatCurrTab") == CR_TAB_WEAPONS ) && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_WEAPONS_EQUIPMENT_KILLS ) && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_WEAPONS_EQUIPMENT_TIMES_KILLED_BY ) && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_WEAPONS_EQUIPMENT_USAGE ) ) ), \ - name tagName; ANIM_STATES( 1 1 1 ); ) \ - /* KILLSTREAK AND EQUPIMENT ICON */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( INFO_BAR_STRUCTURE_X_START+10 ), \ - ( (INFO_BAR_Y_START+3+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - 32, \ - 32, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - getItemImage( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ), 1 1 1 alpha, \ - when( GetImageWidth( getItemImage( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ) ) <= 128 && vis_condition && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS ) && ( ( dvarString("ui_combatCurrTab") == CR_TAB_KILLSTREAKS ) || ( ( dvarString("ui_combatCurrTab") == CR_TAB_WEAPONS ) && ( dvarInt("ui_combatCurrViewNum") == CR_VIEW_WEAPONS_EQUIPMENT_KILLS || dvarInt("ui_combatCurrViewNum") == CR_VIEW_WEAPONS_EQUIPMENT_USAGE || dvarInt("ui_combatCurrViewNum") == CR_VIEW_WEAPONS_EQUIPMENT_TIMES_KILLED_BY ) ) ) ), \ - name tagName; ANIM_STATES( 1 1 1 ); ) \ - /* KILLSTREAK AND EQUPIMENT ICON */ \ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( INFO_BAR_STRUCTURE_X_START+10 ), \ - ( (INFO_BAR_Y_START+3+(INFO_BAR_SET_HEIGHT*tagNum)) + dvarInt( "ui_slideUpDistance" ) ), \ - (-70 ), \ - 32, \ - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - getItemImage( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ), 1 1 1 alpha, \ - when( GetImageWidth( getItemImage( GET_SORTED_ITEM_INDEX( tagNum, 0 ) ) ) > 128 && vis_condition && ( dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS ) && ( ( dvarString("ui_combatCurrTab") == CR_TAB_KILLSTREAKS ) || ( ( dvarString("ui_combatCurrTab") == CR_TAB_WEAPONS ) && ( dvarInt("ui_combatCurrViewNum") == CR_VIEW_WEAPONS_EQUIPMENT_KILLS || dvarInt("ui_combatCurrViewNum") == CR_VIEW_WEAPONS_EQUIPMENT_USAGE || dvarInt("ui_combatCurrViewNum") == CR_VIEW_WEAPONS_EQUIPMENT_TIMES_KILLED_BY ) ) ) ), \ - name tagName; ANIM_STATES( 1 1 1 ); ) - - -#define INFO_BAR_TAGS( vis_condition ) \ - INFO_BAR_TAG( "info_bar_0", 0, 0, ( vis_condition && dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS ) ) \ - INFO_BAR_TAG( "info_bar_1", 1, 1, vis_condition ) \ - INFO_BAR_TAG( "info_bar", 2, 1, vis_condition ) \ - INFO_BAR_TAG( "info_bar", 3, 1, vis_condition ) \ - INFO_BAR_TAG( "info_bar", 4, 1, vis_condition ) \ - INFO_BAR_TAG( "info_bar_5", 5, 1, vis_condition ) \ - INFO_BAR_TAG( "info_bar_6", 6, 0, ( vis_condition && dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS ) ) - -#define INFO_BARS( vis_condition ) \ - INFO_BAR( "info_bar_0", 0, 0, ( vis_condition && dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS ) ) \ - INFO_BAR( "info_bar_1", 1, 1, vis_condition ) \ - INFO_BAR( "info_bar", 2, 1, vis_condition ) \ - INFO_BAR( "info_bar", 3, 1, vis_condition ) \ - INFO_BAR( "info_bar", 4, 1, vis_condition ) \ - INFO_BAR( "info_bar_5", 5, 1, vis_condition ) \ - INFO_BAR( "info_bar_6", 6, 0, ( vis_condition && dvarInt("ui_combatCurrViewNum") != CR_VIEW_CAREER_PERSONAL_BESTS ) ) - -#define RANK_AND_GAMERTAG_OF_COMPARED_PLAYER( x_offset, vis_condition ) \ - /* Player name */ \ - PREPROC_TEXT_DRAW_VIS_EX( x_offset (COMBAT_RECORD_HEIGHT/2-20) 100 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - GetClanTagAndName(), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, INFO_BAR_COLOR_FOR_FRIEND 1, \ - when( dvarbool( "ui_showFriendsCombatRecord" ) && vis_condition );, \ - name "otherPlayerName"; ANIM_STATES( INFO_BAR_COLOR_FOR_FRIEND ) ) \ - /* Label for Comparing with : */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( (x_offset-(getTextWidth( locString( "@MPUI_CR_COMPARING_WITH" ), UI_FONT_NORMAL, TEXTSIZE_DEFAULT ))-25), (COMBAT_RECORD_HEIGHT/2-20), 100, 10, CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - "@MPUI_CR_COMPARING_WITH", \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, INFO_BAR_COLOR_FOR_FRIEND 0, \ - when( vis_condition );, \ - name "otherPlayerName"; ANIM_STATES( INFO_BAR_COLOR_FOR_FRIEND ) ) \ - /* Other Player name */ \ - PREPROC_TEXT_DRAW_VIS_EX( x_offset (COMBAT_RECORD_HEIGHT/2-20) 100 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - dvarString( "selectedFriendName" ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, INFO_BAR_COLOR_FOR_FRIEND 0, \ - when( !dvarbool( "ui_showFriendsCombatRecord" ) && vis_condition );, \ - name "otherPlayerName"; ANIM_STATES( INFO_BAR_COLOR_FOR_FRIEND ) ) \ - /* Other Player rank icon */ \ - PREPROC_SHADER_DRAW_VIS_EX( (x_offset-20) (COMBAT_RECORD_HEIGHT/2-25) 16 16 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN;, \ - tablelookup( "mp/rankIconTable.csv", 0, GET_STAT_FOR_OTHER_PLAYER( "RANK" ), 1+GET_STAT_FOR_OTHER_PLAYER( "PLEVEL" ) ), 1 1 1 0, \ - when( vis_condition );, \ - name "otherPlayerName"; ANIM_STATES( 1 1 1 ) ) - -#define COMBAT_RECORD_BUTTON_PROMPTS( vis_condition ) \ - itemDef { \ - type ITEM_TYPE_TEXT \ - rect (TAB_X_START-3) -10 0 0 CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_BOTTOM \ - text "@PLATFORM_DONE" \ - textfont UI_FONT_NORMAL \ - textscale TEXTSIZE_SMALL \ - textalign ITEM_ALIGN_BOTTOM_LEFT \ - visible vis_condition \ - decoration \ - } \ - -#define CR_LINE_GRAPH \ - /* top line */ \ - PREPROC_SHADER_DRAW( CR_LINE_GRAPH_X_START CR_LINE_GRAPH_Y_START CR_LINE_GRAPH_WIDTH 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", CR_LINE_GRAPH_GRID_LINE_COLOR ) \ - /* plus sign icon */ \ - PREPROC_SHADER_DRAW( (CR_LINE_GRAPH_X_START-CR_LINE_GRAPH_MARGIN/2-10) (CR_LINE_GRAPH_Y_START+1+CR_LINE_GRAPH_MARGIN/4) (CR_LINE_GRAPH_MARGIN/2) (CR_LINE_GRAPH_MARGIN/2) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "kd_chart_plus", 1 1 1 1 ) \ - /* minus sign icon */ \ - PREPROC_SHADER_DRAW( (CR_LINE_GRAPH_X_START-CR_LINE_GRAPH_MARGIN/2-10) (CR_LINE_GRAPH_Y_START+CR_LINE_GRAPH_MARGIN+1+CR_LINE_GRAPH_MARGIN/4) (CR_LINE_GRAPH_MARGIN/2) ((CR_LINE_GRAPH_MARGIN/2)-1) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "kd_chart_minus", 1 1 1 1 ) \ - /* middle line */ \ - PREPROC_SHADER_DRAW( CR_LINE_GRAPH_X_START (CR_LINE_GRAPH_Y_START+CR_LINE_GRAPH_HEIGHT/2) CR_LINE_GRAPH_WIDTH 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", CR_LINE_GRAPH_GRID_LINE_COLOR ) \ - /* bottom line */ \ - PREPROC_SHADER_DRAW( CR_LINE_GRAPH_X_START (CR_LINE_GRAPH_Y_START+CR_LINE_GRAPH_HEIGHT) CR_LINE_GRAPH_WIDTH 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", CR_LINE_GRAPH_GRID_LINE_COLOR ) \ - itemDef \ - { \ - type ITEM_TYPE_OWNERDRAW \ - rect CR_LINE_GRAPH_X_START CR_LINE_GRAPH_Y_START CR_LINE_GRAPH_WIDTH CR_LINE_GRAPH_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - ownerdraw UI_COMBAT_RECORD_LINE_GRAPH \ - dvar ui_combatCurrViewNum \ - visible 1 \ - decoration \ - } - -#define MAX_HISTOGRAM_COMPONENTS 10 -#define CR_MAX_RECENT_PERFORMANCE_GRAPH_VALUES 10 -#define CR_MAX_MATCH_PERFORMANCE_GRAPH_VALUES 10 - -#define HISTOGRAM_COMPONENT( component_number, width, currGametype, isDefaultComponent ) \ - itemDef \ - { \ - name histogram_component \ - type ITEM_TYPE_OWNERDRAW \ - rect (HISTOGRAM_X_START + component_number * HISTOGRAM_WIDTH / MAX_HISTOGRAM_COMPONENTS) HISTOGRAM_Y_START HISTOGRAM_WIDTH HISTOGRAM_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - /* Histogram samples are stored in 'ownerdata' and 'forecolor A' because those */ \ - /* are the only expressions available while still using the rect for placement */ \ - exp ownerdata ( GetCombatRecordHistogramHeight( component_number, currGametype ) ) \ - exp forecolor A( GetCombatRecordHistogramHeight( component_number+1, currGametype ) ) \ - ownerdraw UI_COMBAT_RECORD_HISTOGRAM \ - visible 1 \ - ITEM_STATE( change, ;, ; ) \ - decoration \ - } \ - PREPROC_SHADER_DRAW( (-1+(HISTOGRAM_X_START + component_number*width/MAX_HISTOGRAM_COMPONENTS)) HISTOGRAM_Y_START 1 HISTOGRAM_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.1 ) - -#define HISTOGRAM_HORIZONTAL_GRID_LINE( lineNum ) \ - PREPROC_SHADER_DRAW( (-1+HISTOGRAM_X_START) (HISTOGRAM_Y_START+(lineNum*(HISTOGRAM_HEIGHT)/2)) (HISTOGRAM_WIDTH-HISTOGRAM_WIDTH/10+1) 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.1 ) - -#define HISTOGRAM_MENU( menuName, parentMenuName, xPos, yPos, width, height, currGametype, visArg ) \ - menuDef \ - { \ - name menuName \ - rect xPos yPos width height CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - priority MENU_PRI_ONTOP \ - onOpen \ - { \ - setDvar ui_combatLockScrolling "1"; \ - ITEM_ANIMATE( menuName, "dummy", lockScrolling, 20 ); \ - } \ - onClose{ } \ - onEsc \ - { \ - close self; \ - if(dvarbool(ui_showFriendsCombatRecord)) \ - { \ - open menu_playercard; \ - } \ - else \ - { \ - if ( dvarInt( xblive_basictraining ) ) \ - { \ - open menu_playercard_self_basictraining; \ - } \ - else \ - { \ - open menu_playercard_self; \ - } \ - } \ - close parentMenuName; setdvar ui_combatResetViewDvars "0"; RESET_SELECTED_PLAYER_XUID; \ - } \ - visible visArg \ - HISTOGRAM_COMPONENT( 0, width, currGametype, 0 ) \ - HISTOGRAM_COMPONENT( 1, width, currGametype, 0 ) \ - HISTOGRAM_COMPONENT( 2, width, currGametype, 0 ) \ - HISTOGRAM_COMPONENT( 3, width, currGametype, 0 ) \ - HISTOGRAM_COMPONENT( 4, width, currGametype, 0 ) \ - HISTOGRAM_COMPONENT( 5, width, currGametype, 0 ) \ - HISTOGRAM_COMPONENT( 6, width, currGametype, 0 ) \ - HISTOGRAM_COMPONENT( 7, width, currGametype, 0 ) \ - HISTOGRAM_COMPONENT( 8, width, currGametype, 0 ) \ - /* Vertical Axis */ \ - PREPROC_SHADER_DRAW( -1 0 1 (HISTOGRAM_HEIGHT) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.1 ) \ - /* Vertical Axis Right*/ \ - PREPROC_SHADER_DRAW( (HISTOGRAM_WIDTH-HISTOGRAM_WIDTH/10) 0 1 (HISTOGRAM_HEIGHT) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.1 ) \ - /* Horizontal Axis */ \ - PREPROC_SHADER_DRAW( -1 HISTOGRAM_HEIGHT (HISTOGRAM_WIDTH-HISTOGRAM_WIDTH/10+1) 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.1 ) \ - HISTOGRAM_HORIZONTAL_GRID_LINE( 0 ) \ - HISTOGRAM_HORIZONTAL_GRID_LINE( 1 ) \ - ACTION_HANDLER( menuName ) \ - DUMMY_ITEM_FOR_ANIMATION( menuName, 1 ) \ - } - - -#define HISTOGRAM_INPLACE \ - HISTOGRAM_COMPONENT( 0, HISTOGRAM_WIDTH, (dvarInt("ui_combatHistogramCurrGametype")), 0 ) \ - HISTOGRAM_COMPONENT( 1, HISTOGRAM_WIDTH, (dvarInt("ui_combatHistogramCurrGametype")), 0 ) \ - HISTOGRAM_COMPONENT( 2, HISTOGRAM_WIDTH, (dvarInt("ui_combatHistogramCurrGametype")), 0 ) \ - HISTOGRAM_COMPONENT( 3, HISTOGRAM_WIDTH, (dvarInt("ui_combatHistogramCurrGametype")), 0 ) \ - HISTOGRAM_COMPONENT( 4, HISTOGRAM_WIDTH, (dvarInt("ui_combatHistogramCurrGametype")), 0 ) \ - HISTOGRAM_COMPONENT( 5, HISTOGRAM_WIDTH, (dvarInt("ui_combatHistogramCurrGametype")), 0 ) \ - HISTOGRAM_COMPONENT( 6, HISTOGRAM_WIDTH, (dvarInt("ui_combatHistogramCurrGametype")), 0 ) \ - HISTOGRAM_COMPONENT( 7, HISTOGRAM_WIDTH, (dvarInt("ui_combatHistogramCurrGametype")), 0 ) \ - HISTOGRAM_COMPONENT( 8, HISTOGRAM_WIDTH, (dvarInt("ui_combatHistogramCurrGametype")), 0 ) \ - /* Vertical Axis */ \ - PREPROC_SHADER_DRAW( (-1+HISTOGRAM_X_START) HISTOGRAM_Y_START 1 (HISTOGRAM_HEIGHT) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.1 ) \ - /* Vertical Axis Right*/ \ - PREPROC_SHADER_DRAW( (HISTOGRAM_X_START+HISTOGRAM_WIDTH-HISTOGRAM_WIDTH/10) HISTOGRAM_Y_START 1 (HISTOGRAM_HEIGHT) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.1 ) \ - /* Horizontal Axis */ \ - PREPROC_SHADER_DRAW( (-1+HISTOGRAM_X_START) (HISTOGRAM_Y_START+HISTOGRAM_HEIGHT) (HISTOGRAM_WIDTH-HISTOGRAM_WIDTH/10+1) 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.1 ) \ - HISTOGRAM_HORIZONTAL_GRID_LINE( 0 ) \ - HISTOGRAM_HORIZONTAL_GRID_LINE( 1 ) - -#define TAB_OPEN( menuName ) \ - execNow closemenuImmediate (dvarString("ui_combatCurrViewMenuName")); \ - execNow openMenuImmediate (menuName); \ - setdvar set ui_combatCurrScrollBarPos "0"; - -HISTOGRAM_MENU( recent_performance_histogram, menu_cr_career_recent_performance, HISTOGRAM_X_START, HISTOGRAM_Y_START, HISTOGRAM_WIDTH, HISTOGRAM_HEIGHT, CR_RECENT_PERFORMANCE_INFO, 1 ) - -#define CURRENT_VIEW_NUMBER \ - PREPROC_TEXT_DRAW_VIS( (COMBAT_RECORD_BODY_X_START+500) (COMBAT_RECORD_BODY_Y_START+10) 280 28 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - locstring( "MPUI_COMBAT_RECORD_VIEW_NUMBER", ( dvarInt("ui_combatCurrViewNum") - CR_VIEW_CAREER_SUMMARY ) + 1, CR_CAREER_VIEW_COUNT ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_LEFT, CHOICE_TEXTCOLOR, when( dvarInt("ui_combatCurrTab") == CR_TAB_CAREER ) ) \ - PREPROC_TEXT_DRAW_VIS( (COMBAT_RECORD_BODY_X_START+500) (COMBAT_RECORD_BODY_Y_START+10) 280 28 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - locstring( "MPUI_COMBAT_RECORD_VIEW_NUMBER", ( dvarInt("ui_combatCurrViewNum") - CR_VIEW_WEAPONS_FAV_WEAPON ) + 1, CR_WEAPONS_VIEW_COUNT ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_LEFT, CHOICE_TEXTCOLOR, when( dvarInt("ui_combatCurrTab") == CR_TAB_WEAPONS ) ) \ - PREPROC_TEXT_DRAW_VIS( (COMBAT_RECORD_BODY_X_START+500) (COMBAT_RECORD_BODY_Y_START+10) 280 28 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - locstring( "MPUI_COMBAT_RECORD_VIEW_NUMBER", ( dvarInt("ui_combatCurrViewNum") - CR_VIEW_MATCHES_PERFORMANCE ) + 1, CR_MATCHES_VIEW_COUNT ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_LEFT, CHOICE_TEXTCOLOR, when( dvarInt("ui_combatCurrTab") == CR_TAB_MATCHES ) ) \ - PREPROC_TEXT_DRAW_VIS( (COMBAT_RECORD_BODY_X_START+500) (COMBAT_RECORD_BODY_Y_START+10) 280 28 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - locstring( "MPUI_COMBAT_RECORD_VIEW_NUMBER", ( dvarInt("ui_combatCurrViewNum") - CR_VIEW_KILLSTREAKS_CALLED ) + 1, CR_KILLSTREAKS_VIEW_COUNT ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_LEFT, CHOICE_TEXTCOLOR, when( dvarInt("ui_combatCurrTab") == CR_TAB_KILLSTREAKS ) ) - -#define INIT_VIEW_DVARS \ - if( dvarString( "ui_combatCareerViewMenuName" ) == "" || dvarBool( ui_combatResetViewDvars ) == 0 ){ setDvar ui_combatCareerViewMenuName menu_cr_career_summary; } \ - if( dvarString( "ui_combatWeaponsViewMenuName" ) == "" || dvarBool( ui_combatResetViewDvars ) == 0 ){ setDvar ui_combatWeaponsViewMenuName menu_cr_weapons_favorite_weapon; } \ - if( dvarString( "ui_combatMatchesViewMenuName" ) == "" || dvarBool( ui_combatResetViewDvars ) == 0 ){ setDvar ui_combatMatchesViewMenuName menu_cr_matches_performance; } \ - if( dvarString( "ui_combatKillstreaksViewMenuName" ) == "" || dvarBool( ui_combatResetViewDvars ) == 0 ){ setDvar ui_combatKillstreaksViewMenuName menu_cr_killstreaks_called; } \ - if( dvarString( "ui_combatContractsViewMenuName" ) == "" || dvarBool( ui_combatResetViewDvars ) == 0 ){ setDvar ui_combatContractsViewMenuName menu_cr_contracts_info; } \ - if( dvarString( "ui_combatPrevTabMenuName" ) == "" || dvarBool( ui_combatResetViewDvars ) == 0 ){ setDvar ui_combatPrevTabMenuName menu_cr_contracts_info; } \ - if( dvarString( "ui_combatNextTabMenuName" ) == "" || dvarBool( ui_combatResetViewDvars ) == 0 ){ setDvar ui_combatNextTabMenuName menu_cr_weapons_favorite_weapon; } \ - setDvar ui_combatCurrTab CR_TAB_CAREER; \ - setDvar ui_combatCurrView CR_VIEW_CAREER_SUMMARY; \ - setDvar ui_combatCurrViewNum CR_VIEW_CAREER_SUMMARY; \ - if( dvarBool( ui_combatResetViewDvars ) == 0 ) \ - { setDvar ui_combatComparisonModeOn "0"; setDvar ui_combatStatsMilestonesVis "0"; \ - setdvar ui_combatFileshareTasksComplete "0"; \ - setdvar ui_combatUserHasRecentGames "0"; \ - setdvar ui_combatFileSummaryValid "0"; \ - execnow set selectedRecentGameIndex 0; \ - execnow fileShareClearResults; \ - if( dvarbool("ui_showFriendsCombatRecord") ) \ - { \ - execnow fileShareGetRecentGames ( dvarString( selectedPlayerXuid ) ); \ - } \ - else \ - { \ - execnow fileShareGetRecentGames; \ - } \ - } \ - setDvar ui_combatResetViewDvars "1"; - -#ifdef XENON - #define CR_VIEW_TITLE_AND_VIEW_NUMBER \ - /* Title */ \ - PREPROC_TEXT_DRAW( (-COMBAT_RECORD_WIDTH / 2) (COMBAT_RECORD_BODY_Y_START-5) COMBAT_RECORD_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - locString( "@PLATFORM_TABBED_MENU_TITLE", "@MPUI_" + dvarString( "ui_combatCurrView" ) ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR ) \ - /* Current View Number */ \ - CURRENT_VIEW_NUMBER -#endif //#ifdef XENON - -#ifdef PS3 - #define CR_VIEW_TITLE_AND_VIEW_NUMBER \ - /* Title */ \ - PREPROC_TEXT_DRAW_ALL( (-COMBAT_RECORD_WIDTH / 2) (COMBAT_RECORD_BODY_Y_START-5) COMBAT_RECORD_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - locString( "@PLATFORM_TABBED_MENU_TITLE", "@MPUI_" + dvarString( "ui_combatCurrView" ) ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, \ - UI_FONT_SMALL, ITEM_TEXTSTYLE_NORMAL, 1, ; ) \ - /* Current View Number */ \ - CURRENT_VIEW_NUMBER -#endif //#ifdef PS3 - -#ifdef PC - #define CR_VIEW_TITLE_AND_VIEW_NUMBER \ - /* Current View Number */ \ - CURRENT_VIEW_NUMBER \ - /* Left and right bumper buttons */ \ - SIMPLE_CHOICE_BUTTON_ARROWS_CENTERED( "combat_record_title", 0, COMBAT_RECORD_BODY_Y_START, 240, "@MPUI_" + dvarString( "ui_combatCurrView" ), \ - 1, execkeyhandler BUTTON_RSHLDR, execkeyhandler BUTTON_LSHLDR ) -#endif //#ifdef PC - -#define COMMON_INFO_BAR_ITEMS \ - INFO_BAR_STRUCTURE( 1 ) - -#define CR_CAREER_TAB_COMMON_ITEMS \ - NEW_FRAME( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT ) \ - NEW_FRAME_TITLE( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@MPUI_COMBAT_RECORD_CAPS", 1 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_1_X, TAB_1_WIDTH, 1 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_2_X, TAB_2_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_3_X, TAB_3_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_4_X, TAB_4_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_5_X, TAB_5_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_HEADERS \ - COMBAT_RECORD_TAB_BUTTONS \ - /* background */ \ - PREPROC_SHADER_DRAW( (COMBAT_RECORD_BODY_X_START-15) (COMBAT_RECORD_BODY_Y_START+20) (COMBAT_RECORD_WIDTH) 280 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_cr_bkg", 0 0 0 0.2 ) \ - FRIEND_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (dvarBool("ui_showFriendsCombatRecord")) ) \ - PLAYER_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (!dvarBool("ui_showFriendsCombatRecord")) ) \ - ACTION_HANDLER( (dvarString("ui_combatCurrentViewMenuName")) ) - -#define CR_WEAPONS_TAB_COMMMON_ITEMS \ - NEW_FRAME( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT ) \ - NEW_FRAME_TITLE( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@MPUI_COMBAT_RECORD_CAPS", 1 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_1_X, TAB_1_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_2_X, TAB_2_WIDTH, 1 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_3_X, TAB_3_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_4_X, TAB_4_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_5_X, TAB_5_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_HEADERS \ - COMBAT_RECORD_TAB_BUTTONS \ - /* background */ \ - PREPROC_SHADER_DRAW( (COMBAT_RECORD_BODY_X_START-15) (COMBAT_RECORD_BODY_Y_START+20) (COMBAT_RECORD_WIDTH) 280 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_cr_bkg", 0 0 0 0.2 ) \ - FRIEND_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (dvarBool("ui_showFriendsCombatRecord")) ) \ - PLAYER_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (!dvarBool("ui_showFriendsCombatRecord")) ) \ - ACTION_HANDLER( (dvarString("ui_combatCurrentViewMenuName")) ) - -#define CR_MATCHES_TAB_COMMMON_ITEMS \ - NEW_FRAME( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT ) \ - NEW_FRAME_TITLE( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@MPUI_COMBAT_RECORD_CAPS", 1 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_1_X, TAB_1_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_2_X, TAB_2_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_3_X, TAB_3_WIDTH, 1 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_4_X, TAB_4_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_5_X, TAB_5_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_HEADERS \ - COMBAT_RECORD_TAB_BUTTONS \ - /* background */ \ - PREPROC_SHADER_DRAW( (COMBAT_RECORD_BODY_X_START-15) (COMBAT_RECORD_BODY_Y_START+20) (COMBAT_RECORD_WIDTH) 280 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_cr_bkg", 0 0 0 0.2 ) \ - FRIEND_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (dvarBool("ui_showFriendsCombatRecord")) ) \ - PLAYER_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (!dvarBool("ui_showFriendsCombatRecord")) ) \ - ACTION_HANDLER( (dvarString("ui_combatCurrentViewMenuName")) ) - -#define CR_KILLSTREAKS_TAB_COMMMON_ITEMS \ - NEW_FRAME( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT ) \ - NEW_FRAME_TITLE( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@MPUI_COMBAT_RECORD_CAPS", 1 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_1_X, TAB_1_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_2_X, TAB_2_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_3_X, TAB_3_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_4_X, TAB_4_WIDTH, 1 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_5_X, TAB_5_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_HEADERS \ - COMBAT_RECORD_TAB_BUTTONS \ - /* background */ \ - PREPROC_SHADER_DRAW( (COMBAT_RECORD_BODY_X_START-15) (COMBAT_RECORD_BODY_Y_START+20) (COMBAT_RECORD_WIDTH) 280 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_cr_bkg", 0 0 0 0.2 ) \ - FRIEND_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (dvarBool("ui_showFriendsCombatRecord")) ) \ - PLAYER_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (!dvarBool("ui_showFriendsCombatRecord")) ) \ - ACTION_HANDLER( (dvarString("ui_combatCurrentViewMenuName")) ) - -#define CR_CONTRACTS_TAB_COMMMON_ITEMS \ - NEW_FRAME( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT ) \ - NEW_FRAME_TITLE( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@MPUI_COMBAT_RECORD_CAPS", 1 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_1_X, TAB_1_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_2_X, TAB_2_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_3_X, TAB_3_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_4_X, TAB_4_WIDTH, 0 ) \ - COMBAT_RECORD_TAB_BG( COMBAT_RECORD_TAB_5_X, TAB_5_WIDTH, 1 ) \ - COMBAT_RECORD_TAB_HEADERS \ - COMBAT_RECORD_TAB_BUTTONS \ - /* background */ \ - PREPROC_SHADER_DRAW( (COMBAT_RECORD_BODY_X_START-15) (COMBAT_RECORD_BODY_Y_START+20) (COMBAT_RECORD_WIDTH) 280 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_cr_bkg", 0 0 0 0.2 ) \ - FRIEND_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (dvarBool("ui_showFriendsCombatRecord")) ) \ - PLAYER_INFO_VIS( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, (!dvarBool("ui_showFriendsCombatRecord")) ) \ - ACTION_HANDLER( (dvarString("ui_combatCurrentViewMenuName")) ) - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - setdvar ui_combatResetViewDvars "0"; \ - RESET_SELECTED_PLAYER_XUID; \ - close self; \ - close match_performance_histogram; \ - close menu_cr_matches_performance; \ - close match_performance_gametypes_list; \ - if(dvarbool(ui_showFriendsCombatRecord)) \ - { \ - open menu_playercard; \ - }else \ - { \ - if ( dvarInt( xblive_basictraining ) ) \ - { \ - open menu_playercard_self_basictraining; \ - } \ - else \ - { \ - open menu_playercard_self; \ - } \ - } - -#define CR_VIEW_MENU_TEMPLATE( menuName, currViewNum, previousViewMenuName, nextViewMenuName, currTabNum, prevTabMenuName, nextTabMenuName, onOpenArg, onCloseArg ) \ - name menuName \ - rect SLIDER_RECT_ORIGIN 640 480 \ - focuscolor COLOR_FOCUSED \ - style WINDOW_STYLE_FILLED \ - priority MENU_PRI_ONTOP \ - control MENU_CONTROL_OPENER \ - soundloop MENU_MUSIC \ - openSlideSpeed DEFAULT_SLIDE_IN_SPEED \ - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED \ - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT \ - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT \ - onFocus \ - { \ - activateBlur; \ - } \ - onOpen \ - { \ - execNow set ui_combatRecordOpen "1"; \ - setDvar ui_combatLockScrolling "1"; \ - ITEM_ANIMATE( menuName, "dummy", lockScrolling, 20 ); \ - setdvar ui_combatCurrentViewMenuName menuName; \ - execNow set ui_combatPreviousViewMenuName previousViewMenuName; \ - execNow set ui_combatNextViewMenuName nextViewMenuName; \ - execNow set ui_combatCurrTab currTabNum; \ - execNow set ui_combatPrevTabMenuName prevTabMenuName; \ - execNow set ui_combatNextTabMenuName nextTabMenuName; \ - execNow set ui_combatCurrView currViewNum; \ - execNow "UpdateCombatRecordView"; \ - setdvar ui_combatCurrScrollBarPos "0"; \ - if( CAN_COMPARISON_MODE_BE_TURNED_ON ) \ - { \ - ADJUST_OTHER_PLAYER_INFO_BARS( menuName ) \ - } \ - onOpenArg; \ - } \ - onClose \ - { \ - onCloseArg; \ - execNow set ui_combatRecordOpen "0"; \ - deactivateBlur; \ - } \ - onEsc \ - { \ - ON_ESC_ACTION \ - } \ - /* dummy item for animation purposes */ \ - DUMMY_ITEM_FOR_ANIMATION( (dvarString("ui_combatCurrentViewMenuName")), 1 ) \ - NEW_FRAME_BACK_BUTTON_ACTION( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, ON_ESC_ACTION ) - - -#define CONTAINER_BOX_WIDTH 250 - -{ - -/* ----------------------------------Combat record tab "Career", view "Summary"------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_career_summary, CR_VIEW_CAREER_SUMMARY, menu_cr_career_personal_bests, menu_cr_career_recent_performance, CR_TAB_CAREER, (dvarString("ui_combatContractsViewMenuName")), (dvarString("ui_combatWeaponsViewMenuName")), execnow assertDWConnection; INIT_VIEW_DVARS, ; ) - - - CR_CAREER_TAB_COMMON_ITEMS - CR_VIEW_TITLE_AND_VIEW_NUMBER - -#define SUMMARY_X_START (COMBAT_RECORD_BODY_X_START+10) -#define SUMMARY_DESC_Y_START (COMBAT_RECORD_BODY_Y_START+122) - -#define SUMMARY_DESC_TEXT_BG_COLOR 0 0 0 0.1 - - /* Left container box 1 */ - PREPROC_SHADER_DRAW( SUMMARY_X_START (COMBAT_RECORD_BODY_Y_START+25) CONTAINER_BOX_WIDTH 233 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - /* Big rank icon */ - SUMMARY_RANK_ICON( (SUMMARY_X_START+(CONTAINER_BOX_WIDTH/2)-50), (COMBAT_RECORD_BODY_Y_START+30), tablelookup( "mp/rankIconTable.csv", 0, GET_STAT( "RANK" ), 1+GET_STAT( "PLEVEL" ) ), 1 ) - /* Rank name */ - PREPROC_TEXT_DRAW_VIS( SUMMARY_X_START (COMBAT_RECORD_BODY_Y_START+135) CONTAINER_BOX_WIDTH 17 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - "@"+tableLookup( "mp/rankTable.csv", 0, GET_STAT( "RANK" ), 5), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1 ) - /* BG for "Time Played" */ - PREPROC_SHADER_DRAW( SUMMARY_X_START (SUMMARY_DESC_Y_START+36) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Time Played" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+42) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_TIME_PLAYED_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Time Played */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+183) (SUMMARY_DESC_Y_START+42) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - secondsAsTime( GET_STAT( "TIME_PLAYED_TOTAL" )) , - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "Total Wins" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+62) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locstring( "MPUI_TOTAL_WINS_CAPS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Total Wins */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+183) (SUMMARY_DESC_Y_START+62) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT( "WINS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* BG for "Losses" */ - PREPROC_SHADER_DRAW( SUMMARY_X_START (SUMMARY_DESC_Y_START+76) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Losses" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+82) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locstring( "MPUI_TOTAL_LOSSES_CAPS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Losses */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+183) (SUMMARY_DESC_Y_START+82) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT( "LOSSES" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "Ratio" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+102) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locstring( "MPUI_RATIO_CAPS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Ratio */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+183) (SUMMARY_DESC_Y_START+102) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - getFloatAsFormattedString( ( GET_STAT( "WLRATIO" ) / 1000.0 ), 2 ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* BG for "Best Streak" */ - PREPROC_SHADER_DRAW( SUMMARY_X_START (SUMMARY_DESC_Y_START+116) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Best Streak" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+10) (SUMMARY_DESC_Y_START+122) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locstring( "MPUI_BEST_STREAK_CAPS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Best Streak */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_X_START+183) (SUMMARY_DESC_Y_START+122) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_HIGHEST_STAT( "WIN_STREAK" ) , - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - -#define SUMMARY_RIGHT_X_START (SUMMARY_X_START+CONTAINER_BOX_WIDTH+20) - - /* Right container box */ - PREPROC_SHADER_DRAW( (SUMMARY_RIGHT_X_START) (COMBAT_RECORD_BODY_Y_START+25) CONTAINER_BOX_WIDTH 233 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - /* Image for Stack of chips */ - PREPROC_SHADER_DRAW( (SUMMARY_RIGHT_X_START-3) (COMBAT_RECORD_BODY_Y_START+10) 256 256 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "playlist_wager_highroller_bw", 1 1 1 0.1 ) - /* BG for "Career Earnings" */ - PREPROC_SHADER_DRAW( (SUMMARY_RIGHT_X_START) (SUMMARY_DESC_Y_START+56) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Career Earnings" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+10) (SUMMARY_DESC_Y_START+62) 100 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_LIFETIME_EARNINGS_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Career Earnings */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+183) (SUMMARY_DESC_Y_START+62) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - locString( "@MENU_POINTS", ( GET_STAT( "CODPOINTS" ) + GET_STAT( "CURRENCYSPENT" ) ) ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN_RGB 1, 1 ) - /* Label for "Wager Earnings" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+10) (SUMMARY_DESC_Y_START+82) 100 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_WAGER_MATCH_EARNINGS_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Wager Earnings */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+183) (SUMMARY_DESC_Y_START+82) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN , 0 0, - locString( "@MENU_POINTS", GET_STAT( "LIFETIME_EARNINGS" ) ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, NEW_FRAME_GREEN_RGB 1, 1 ) - /* BG for "Single Events Played" */ - PREPROC_SHADER_DRAW( (SUMMARY_RIGHT_X_START) (SUMMARY_DESC_Y_START+96) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Single Events Played" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+10) (SUMMARY_DESC_Y_START+102) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_SINGLE_EVENTS_PLAYED_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Single Events Played */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+183) (SUMMARY_DESC_Y_START+102) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetNumWagerMatchesPlayed(), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "Single Events Won" */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+10) (SUMMARY_DESC_Y_START+122) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_SINGLE_EVENTS_WON_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Single Events Won */ - PREPROC_TEXT_DRAW_VIS( (SUMMARY_RIGHT_X_START+183) (SUMMARY_DESC_Y_START+122) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetNumWagerMatchesWon(), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - -#undef PRESTIGE_AVAIL -#define PRESTIGE_AVAIL (GET_STAT("PLEVEL") < MAX_PRESTIGE && GET_STAT("RANKXP") == int(tableLookup("mp/rankTable.csv",0,MAX_RANK,7))) -#undef PRESTIGE_NEXT -#define PRESTIGE_NEXT (GET_STAT("PLEVEL") < MAX_PRESTIGE && GET_STAT("RANK") == MAX_RANK) -#undef PRESTIGE_FINISH -#define PRESTIGE_FINISH (GET_STAT("PLEVEL") == MAX_PRESTIGE) - -#undef CAN_RANK_UP -#define CAN_RANK_UP (GET_STAT("RANK") < MAX_RANK || GET_STAT("PLEVEL") < MAX_PRESTIGE) - -#define RANKTABLE_COL_MINXP 2 -#define RANKTABLE_COL_XP_TO_NEXT 3 -#define RANKTABLE_COL_MAX_XP 7 - -#define XP_BAR_X ( -COMBAT_RECORD_WIDTH / 2 + 80 ) -#define XP_BAR_Y (FRAME_DEFAULT_HEIGHT/2-32) -#define XP_BAR_BG_WIDTH (FRAME_DEFAULT_WIDTH-135) -#define XP_BAR_HEIGHT 20 - -#define PLAYER_RANK GET_STAT( "RANK" ) -#define PLAYER_PRESTIGE GET_STAT( "PLEVEL" ) -#define PLAYER_RANKXP GET_STAT( "RANKXP" ) - -#define XP_TO_NEXT_RANK int( tableLookup( "mp/rankTable.csv", 0, PLAYER_RANK, RANKTABLE_COL_XP_TO_NEXT ) ) -#define MINXP_FOR_CURR_RANK int( tableLookup( "mp/rankTable.csv", 0, PLAYER_RANK, RANKTABLE_COL_MINXP ) ) -#define NEXT_LEVEL ( tablelookup( "mp/ranktable.csv", 0, GET_STAT( "RANK" ) + 1, 14 ) ) - -#define XP_BAR_WIDTH ( ( ( PLAYER_RANKXP - MINXP_FOR_CURR_RANK ) / XP_TO_NEXT_RANK ) * XP_BAR_BG_WIDTH ) - -#define XP_NEEDED_TO_LEVEL_UP \ - locString( "MPUI_AAR_XP_NEEDED_CAPS",int( tableLookup( "mp/rankTable.csv", 0, PLAYER_RANK, RANKTABLE_COL_MAX_XP ) - PLAYER_RANKXP ) ) - - /* BACKGROUND FOR XP BAR */ - PREPROC_SHADER_DRAW_VIS_EX( XP_BAR_X XP_BAR_Y XP_BAR_BG_WIDTH XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "white", BG_BACKCOLOR, - when( CAN_RANK_UP ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( XP_BAR_X XP_BAR_Y XP_BAR_BG_WIDTH XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "menu_mp_bar_shadow", 1 1 1 0.2, - when( CAN_RANK_UP ), ; ) - /* XP BAR */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( XP_BAR_X, - XP_BAR_Y, - ( XP_BAR_WIDTH ), - XP_BAR_HEIGHT, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "menu_mp_combatrecord_bar", BAR_COLOR, - when( CAN_RANK_UP ), - ; ) - /* Tiny arrow at xp bar end */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( XP_BAR_X + XP_BAR_WIDTH - 5 ), - (XP_BAR_Y+XP_BAR_HEIGHT), - 10, - 10, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "ui_arrow_right", BAR_COLOR, - when( CAN_RANK_UP ), - rotation -90; ) - /* Label for "NEXT LEVEL" */ - PREPROC_TEXT_DRAW( (XP_BAR_X-55) (XP_BAR_Y+4) 10 XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "@MPUI_NEXT_LEVEL_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, CHOICE_TEXTCOLOR ) - /* value for XP NEEDED to next level */ - PREPROC_TEXT_DRAW_VIS( (XP_BAR_X+5) (XP_BAR_Y+4) 10 XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, XP_NEEDED_TO_LEVEL_UP, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP ) ) - /* next level */ - PREPROC_TEXT_DRAW_VIS( (XP_BAR_X+XP_BAR_BG_WIDTH+3) (XP_BAR_Y+2) 17 17 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, int( NEXT_LEVEL ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP && PRESTIGE_NEXT==0 ) ) - PREPROC_TEXT_DRAW_VIS( (XP_BAR_X+XP_BAR_BG_WIDTH+3) (XP_BAR_Y+2) 17 17 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "1", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP && PRESTIGE_NEXT ) ) - /* next level rank icon */ - RANK_ICON_ADV( (XP_BAR_X+XP_BAR_BG_WIDTH+6+getTextWidth( NEXT_LEVEL, CHOICE_TEXTFONT, TEXTSIZE_DEFAULT )), (XP_BAR_Y+2), HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - tablelookup( "mp/rankIconTable.csv", 0, PLAYER_RANK+1, PLAYER_PRESTIGE+1 ), - when( CAN_RANK_UP && PRESTIGE_NEXT==0 ) ) - RANK_ICON_ADV( (XP_BAR_X+XP_BAR_BG_WIDTH+6+getTextWidth( "1", CHOICE_TEXTFONT, TEXTSIZE_DEFAULT )), (XP_BAR_Y+2), HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - tablelookup( "mp/rankIconTable.csv", 0, 0, PLAYER_PRESTIGE+2 ), - when( CAN_RANK_UP && PRESTIGE_NEXT ) ) - - #include "ui/safearea.menu" - } - -/* ----------------------------------Combat record tab "Career", view "Recent Performance"------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_career_recent_performance, CR_VIEW_CAREER_RECENT_PERFORMANCE, menu_cr_career_summary, menu_cr_career_personal_bests, - CR_TAB_CAREER, (dvarString("ui_combatContractsViewMenuName")), (dvarString("ui_combatWeaponsViewMenuName")), - setdvar ui_combatHistogramCurrGametype CR_RECENT_PERFORMANCE_INFO;, ; ) - - CR_CAREER_TAB_COMMON_ITEMS - CR_VIEW_TITLE_AND_VIEW_NUMBER - - /* Label for "SCORE" */ - PREPROC_TEXT_DRAW( (-COMBAT_RECORD_WIDTH / 2) (COMBAT_RECORD_BODY_Y_START+30) COMBAT_RECORD_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_SCORE_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR ) - - /* Maximum Score */ - PREPROC_TEXT_DRAW_VIS( (HISTOGRAM_LABELS_X_START-20) (HISTOGRAM_LABELS_Y_START) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetCombatRecordMinMaxScore( RECENT_PERFORMANCE_HISTOGRAM, RETURN_MAX_SCORE ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_RIGHT, CHOICE_TEXTCOLOR, 1 ) - - /* Minimum Score */ - PREPROC_TEXT_DRAW_VIS( (HISTOGRAM_LABELS_X_START-20) (HISTOGRAM_LABELS_Y_START+HISTOGRAM_HEIGHT) 60 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetCombatRecordMinMaxScore( RECENT_PERFORMANCE_HISTOGRAM, RETURN_MIN_SCORE ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_RIGHT, CHOICE_TEXTCOLOR, 1 ) - - /* Label for "kd ratio" */ - PREPROC_TEXT_DRAW( (-COMBAT_RECORD_WIDTH / 2) (CR_LINE_GRAPH_Y_START-20) COMBAT_RECORD_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_KILL_DEATH_RATIO_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR ) - - /* Display "Not Enough data" if user has not played atleast 2 matches */ - PREPROC_TEXT_DRAW_VIS_EX( (HISTOGRAM_X_START) (HISTOGRAM_Y_START+HISTOGRAM_HEIGHT+7) (HISTOGRAM_WIDTH-(HISTOGRAM_WIDTH/10)) HISTOGRAM_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_NOT_ENOUGH_DATA", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_CENTER, CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT 0.5, when( GET_SORTED_ITEM_INDEX( CR_MAX_RECENT_PERFORMANCE_GRAPH_VALUES, 1 ) < 2 ) , autowrapped; ) - - - CR_LINE_GRAPH - - itemDef - { - type ITEM_TYPE_OWNERDRAW_TEXT - rect (CR_LINE_GRAPH_X_START+5) (CR_LINE_GRAPH_Y_START-35) CR_LINE_GRAPH_WIDTH CR_LINE_GRAPH_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - textscale TEXTSIZE_DEFAULT - textfont CHOICE_TEXTFONT - forecolor CHOICE_TEXTCOLOR - ownerdraw UI_COMBAT_RECORD_LINE_GRAPH_GAMETYPES - visible 1 - decoration - } - - itemDef - { - type ITEM_TYPE_OWNERDRAW_TEXT - rect (CR_LINE_GRAPH_X_START+5) (CR_LINE_GRAPH_Y_START+CR_LINE_GRAPH_HEIGHT+20) CR_LINE_GRAPH_WIDTH CR_LINE_GRAPH_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - textscale TEXTSIZE_DEFAULT - textfont CHOICE_TEXTFONT - forecolor CHOICE_TEXTCOLOR - ownerdraw UI_COMBAT_RECORD_LINE_GRAPH_VALUES - visible 1 - decoration - } - - /* Display "Not Enough data" if user has not played atleast 2 matches */ - PREPROC_TEXT_DRAW_VIS_EX( (CR_LINE_GRAPH_X_START) (CR_LINE_GRAPH_Y_START-10) CR_LINE_GRAPH_WIDTH CR_LINE_GRAPH_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_NOT_ENOUGH_DATA", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT 0.5, when( GET_SORTED_ITEM_INDEX( CR_MAX_RECENT_PERFORMANCE_GRAPH_VALUES, 1 ) < 2 ) , autowrapped; ) - - HISTOGRAM_INPLACE - - #include "ui/safearea.menu" - } - -#define LOADOUT_FONT_SMALL 0.28 - -#define WEAPON_ALIGN CHOICE_VERTICAL_ALIGN CHOICE_HORIZONTAL_ALIGN - #define WEAPON_WIDTH 150 - #define GRID_LOADOUT_MAX_ITEMS 5 - - #define WEAPON_X_START -360 - #define WEAPON_Y_START 60 - - #define GRID_OFFSET_X 20 - #define GRID_OFFSET_Y 16 - - #define GRID_LOADOUT_HEIGHT (24+(GRID_OFFSET_Y*GRID_LOADOUT_MAX_ITEMS)) - #define DIAGONAL_LINE_H 32 - -#define LOADOUTSLOT_PRIMARY_WEAPON 0 -#define LOADOUTSLOT_SECONDARY_WEAPON 1 -#define LOADOUTSLOT_PRIMARY_GRENADE 2 -#define LOADOUTSLOT_SPECIAL_GRENADE 3 -#define LOADOUTSLOT_EQUIPMENT 4 -#define LOADOUTSLOT_FACEPAINT_PATTERN 5 -#define LOADOUTSLOT_BODY 6 -#define LOADOUTSLOT_SPECIALTY1 7 -#define LOADOUTSLOT_SPECIALTY2 8 - -#define CR_LOADOUT_GRID_VIS( visArg ) \ - /*weapons =============*/ \ - PREPROC_TEXT_DRAW_VIS( WEAPON_X_START WEAPON_Y_START WEAPON_WIDTH 10 WEAPON_ALIGN, 0 0, \ - ( locString("@MPUI_WEAPONS_CAPS") + " - " ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_RIGHT, MEDIUM_GRAY, \ - when( visArg ); ) \ - /* primary weapon */ \ - PREPROC_TEXT_DRAW_VIS_EX( (WEAPON_X_START+WEAPON_WIDTH+2) WEAPON_Y_START WEAPON_WIDTH 30 WEAPON_ALIGN, 0 0, \ - ( locString( GetItemName( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_PRIMARY_WEAPON, 1 ) ) ) ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, \ - when( visArg );, autowrapped ) \ - /* second weapon name */ \ - PREPROC_TEXT_DRAW_VIS( (WEAPON_X_START+WEAPON_WIDTH+2) (WEAPON_Y_START+40) WEAPON_WIDTH 30 WEAPON_ALIGN, 0 0, \ - ( locString( GetItemName( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_SECONDARY_WEAPON, 1 ) ) ) ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, \ - when( visArg ); ) \ - /*grenades =============*/ \ - PREPROC_TEXT_DRAW_VIS( WEAPON_X_START (WEAPON_Y_START+60) WEAPON_WIDTH 10 WEAPON_ALIGN, 0 0, \ - ( locString("@MPUI_GRENADES_CAPS") + " - " ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_RIGHT, MEDIUM_GRAY, \ - when( visArg ); ) \ - /* primary grenade name */ \ - PREPROC_TEXT_DRAW_VIS( (WEAPON_X_START+WEAPON_WIDTH+2) (WEAPON_Y_START+60) WEAPON_WIDTH 30 WEAPON_ALIGN, 0 0, \ - ( locString( GetItemName( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_PRIMARY_GRENADE, 1 ) ) ) ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, \ - when( visArg ); ) \ - /* special grenade name */ \ - PREPROC_TEXT_DRAW_VIS( (WEAPON_X_START+WEAPON_WIDTH+2) (WEAPON_Y_START+80) WEAPON_WIDTH 30 WEAPON_ALIGN, 0 0, \ - ( locString( GetItemName( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_SPECIAL_GRENADE, 1 ) ) ) ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, \ - when( visArg ); ) \ - /*equipment =============*/ \ - PREPROC_TEXT_DRAW_VIS( WEAPON_X_START (WEAPON_Y_START+100) WEAPON_WIDTH 10 WEAPON_ALIGN, 0 0, \ - ( locString("@MPUI_EQUIPMENT_CAPS") + " - " ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_RIGHT, MEDIUM_GRAY, \ - when( visArg ); ) \ - /* equipment name */ \ - PREPROC_TEXT_DRAW_VIS( (WEAPON_X_START+WEAPON_WIDTH+2) (WEAPON_Y_START+100) WEAPON_WIDTH 30 WEAPON_ALIGN, 0 0, \ - ( locString( GetItemName( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_EQUIPMENT, 1 ) ) ) ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, \ - when( visArg ); ) - - -#define APP_ALIGN CHOICE_VERTICAL_ALIGN CHOICE_HORIZONTAL_ALIGN -#define APP_WIDTH 100 - -#define APP_X_START 90 -#define APP_Y_START -80 - -#define CR_LOADOUT_APPEARANCE_VIS( visArg ) \ - /*head type =============*/ \ - PREPROC_TEXT_DRAW_VIS( APP_X_START APP_Y_START APP_WIDTH 10 APP_ALIGN, 0 0, \ - ( locString("@MPUI_HEAD_TYPE_CAPS") + " - " ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_RIGHT, MEDIUM_GRAY, \ - when( visArg ); ) \ - /* facepaint pattern */ \ - PREPROC_TEXT_DRAW_VIS( (APP_X_START+APP_WIDTH+2) APP_Y_START APP_WIDTH 30 APP_ALIGN, 0 0, \ - ( locString( GetItemName( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_FACEPAINT_PATTERN, 1 ) ) ) ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, \ - when( visArg ); ) \ - /*body type =============*/ \ - PREPROC_TEXT_DRAW_VIS( APP_X_START (APP_Y_START+20) APP_WIDTH 10 APP_ALIGN, 0 0, \ - ( locString("@MPUI_BODY_TYPE_CAPS") + " - " ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_RIGHT, MEDIUM_GRAY, \ - when( visArg ); ) \ - /* armor */ \ - PREPROC_TEXT_DRAW_VIS( (APP_X_START+APP_WIDTH+2) (APP_Y_START+20) APP_WIDTH 30 APP_ALIGN, 0 0, \ - ( locString( GetItemName( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_BODY, 1 ) ) ) ), \ - LOADOUT_FONT_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, \ - when( visArg ); ) - - -#define SPECIALTY_LOADOUT_ALIGN CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN -#define SPECIALTY_LOADOUT_WIDTH 100 - -#define SPECIALTY_IMAGE_X 130 -#define SPECIALTY_IMAGE_Y 30 -#define SPECIALTY_IMAGE_WIDTH 37 - -#define SPECIALTY_TITLE_X (SPECIALTY_IMAGE_X+SPECIALTY_IMAGE_WIDTH+10) -#define SPECIALTY_TITLE_Y SPECIALTY_IMAGE_Y - -#define SPECIALTY_DESC_X SPECIALTY_TITLE_X -#define SPECIALTY_DESC_Y (SPECIALTY_TITLE_Y+15) - -#define SPECIALTY_Y_OFFSET 80 - -#define SPECIALTY_DESC_TEXTSIZE 0.24 - -#define LOCAL_SPECIALTY( origin, ptext, visArg ) \ - PREPROC_TEXT_DRAW_ALL( origin SPECIALTY_LOADOUT_WIDTH 18 SPECIALTY_LOADOUT_ALIGN, 0 0, \ - ptext, 0.3, 0, 0, \ - ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, UI_FONT_BOLD,\ - ITEM_TEXTSTYLE_NORMAL, when( visArg );, ; ) - -#define CR_LOADOUT_SPECIALTIES_VIS( visArg ) \ - /* specialty 1 name ------------- */ \ - LOCAL_SPECIALTY( SPECIALTY_TITLE_X SPECIALTY_TITLE_Y, "@" + GetItemName( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_SPECIALTY1, 1 ) ), visArg ) \ - /* specialty 1 icon */ \ - PREPROC_SHADER_DRAW_VIS_EX( SPECIALTY_IMAGE_X SPECIALTY_IMAGE_Y SPECIALTY_IMAGE_WIDTH SPECIALTY_IMAGE_WIDTH SPECIALTY_LOADOUT_ALIGN, \ - GetItemImage( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_SPECIALTY1, 1 ) ), 1 1 1 0.75, \ - when( visArg ), ; ) \ - /* specialty 1 desc */ \ - PREPROC_TEXT_DRAW_ALL( SPECIALTY_DESC_X SPECIALTY_DESC_Y SPECIALTY_LOADOUT_WIDTH 16 SPECIALTY_LOADOUT_ALIGN, 0 0, \ - "@"+GetItemDesc( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_SPECIALTY1, 1 ) ), \ - SPECIALTY_DESC_TEXTSIZE, 0, -2, ITEM_ALIGN_MIDDLE_LEFT, MEDIUM_GRAY, UI_FONT_NORMAL, ITEM_TEXTSTYLE_NORMAL, \ - when( visArg ), autowrapped ) \ - /* specialty 2 name ------------- */ \ - LOCAL_SPECIALTY( SPECIALTY_TITLE_X (SPECIALTY_TITLE_Y+SPECIALTY_Y_OFFSET), "@"+GetItemName( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_SPECIALTY2, 1 ) ), visArg ) \ - /* specialty 2 icon */ \ - PREPROC_SHADER_DRAW_VIS_EX( SPECIALTY_IMAGE_X (SPECIALTY_IMAGE_Y+SPECIALTY_Y_OFFSET) SPECIALTY_IMAGE_WIDTH SPECIALTY_IMAGE_WIDTH SPECIALTY_LOADOUT_ALIGN, \ - GetItemImage( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_SPECIALTY2, 1 ) ), 1 1 1 0.75, \ - when( visArg ), ; ) \ - /* specialty 2 desc */ \ - PREPROC_TEXT_DRAW_ALL( SPECIALTY_DESC_X (SPECIALTY_DESC_Y+SPECIALTY_Y_OFFSET) SPECIALTY_LOADOUT_WIDTH 16 SPECIALTY_LOADOUT_ALIGN, 0 0, \ - "@"+GetItemDesc( GET_SORTED_ITEM_INDEX( LOADOUTSLOT_SPECIALTY2, 1 ) ), \ - SPECIALTY_DESC_TEXTSIZE, 0, -2, ITEM_ALIGN_MIDDLE_LEFT, MEDIUM_GRAY, UI_FONT_NORMAL, ITEM_TEXTSTYLE_NORMAL, \ - when( visArg ), autowrapped ) - -/* ----------------------------------Combat record tab "Career", view "Class Preferences"------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_career_class_preferences, CR_VIEW_CAREER_CLASS_PREFERENCES, menu_cr_career_recent_performance, menu_cr_career_personal_bests, - CR_TAB_CAREER, (dvarString("ui_combatContractsViewMenuName")), (dvarString("ui_combatWeaponsViewMenuName")), - if ( dvarString( ui_faction ) == "" ) - { setdvar ui_faction FIRST_FACTION; } - SET_VIEWER_MODE_COMBAT_RECORD; - VIEWER_SET_PLAYER( customclass3 ); - VIEWER_SET_EQUIP_WEAPON( primary ); - setDvar ui_cr_loadout_slot primary; - VIEWER_SET_PLAYER_CAMERA( player ); - execNow set uiViewer_show 1;, execNow set uiViewer_show 0; ) - - CR_CAREER_TAB_COMMON_ITEMS - CR_VIEW_TITLE_AND_VIEW_NUMBER - - // Circles, loudout titles and lines - #define CIRCLE_COLOR 1 1 1 0.2 - #define CIRCLE_SIZE 12 - #define TEXT_COLOR 1 1 1 0.1 - #define LINE_COLOR 1 1 1 0.05 - #define LINE_WIDTH 1.5 - - #define LOADOUT_CIRCLE_X -85 - #define LOADOUT_CIRCLE_Y 10 - PREPROC_DRAW_LINE( LOADOUT_CIRCLE_X, LOADOUT_CIRCLE_Y, -185, 50, HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, LINE_WIDTH, LINE_COLOR ) - PREPROC_SHADER_DRAW( (LOADOUT_CIRCLE_X-CIRCLE_SIZE/2) (LOADOUT_CIRCLE_Y-CIRCLE_SIZE/2) CIRCLE_SIZE CIRCLE_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, menu_mp_lobby_circle, CIRCLE_COLOR ) - PREPROC_TEXT_DRAW( (LOADOUT_CIRCLE_X+CIRCLE_SIZE/2-15) (LOADOUT_CIRCLE_Y-2) 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@MPUI_LOADOUT_CAPS", 0.28, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, TEXT_COLOR ) - - #define APPEARANCE_CIRCLE_X 65 - #define APPEARANCE_CIRCLE_Y -30 - PREPROC_DRAW_LINE( APPEARANCE_CIRCLE_X, APPEARANCE_CIRCLE_Y, 120, -60, HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, LINE_WIDTH, LINE_COLOR ) - PREPROC_SHADER_DRAW( (APPEARANCE_CIRCLE_X-CIRCLE_SIZE/2) (APPEARANCE_CIRCLE_Y-CIRCLE_SIZE/2) CIRCLE_SIZE CIRCLE_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, menu_mp_lobby_circle, CIRCLE_COLOR ) - PREPROC_TEXT_DRAW( (APPEARANCE_CIRCLE_X-CIRCLE_SIZE/2+15) (APPEARANCE_CIRCLE_Y+2) 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@MPUI_APPEARANCE_CAPS", 0.28, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, TEXT_COLOR ) - - #define PERKS_CIRCLE_X 65 - #define PERKS_CIRCLE_Y 40 - PREPROC_DRAW_LINE( PERKS_CIRCLE_X, PERKS_CIRCLE_Y, 120, 85, HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, LINE_WIDTH, LINE_COLOR ) - PREPROC_SHADER_DRAW( (PERKS_CIRCLE_X-CIRCLE_SIZE/2) (PERKS_CIRCLE_Y-CIRCLE_SIZE/2) CIRCLE_SIZE CIRCLE_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, menu_mp_lobby_circle, CIRCLE_COLOR ) - PREPROC_TEXT_DRAW( (PERKS_CIRCLE_X-CIRCLE_SIZE/2+15) (PERKS_CIRCLE_Y-2) 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@MPUI_PERKS_CAPS", 0.28, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, TEXT_COLOR ) - - CR_LOADOUT_GRID_VIS( 1 ) - CR_LOADOUT_APPEARANCE_VIS( 1 ) - CR_LOADOUT_SPECIALTIES_VIS( 1 ) - -#define PLAYER_MODEL_SIZE 340 - COMBAT_RECORD_PLAYER_MODEL( (-PLAYER_MODEL_SIZE/2), (COMBAT_RECORD_BODY_Y_START-40), PLAYER_MODEL_SIZE ) - - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Career", view "Personal Best"------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_career_personal_bests, CR_VIEW_CAREER_PERSONAL_BESTS, menu_cr_career_recent_performance, menu_cr_career_summary, CR_TAB_CAREER, (dvarString("ui_combatContractsViewMenuName")), (dvarString("ui_combatWeaponsViewMenuName")), ;, ; ) - - CR_CAREER_TAB_COMMON_ITEMS - - /* personal bests bg image */ - PREPROC_SHADER_DRAW( (-128) (COMBAT_RECORD_BODY_Y_START+25) 256 256 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_lobby_aar_award_best", 1 1 1 0.05 ) - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* ----------------------------------Combat record tab "Weapons", view "Combat Summary"-----------------------------------------------------------------------------*/ - menuDef - { - -#define COMBAT_SUMMARY_X_START (COMBAT_RECORD_BODY_X_START+10) -#define COMBAT_SUMMARY_Y_START (COMBAT_RECORD_BODY_Y_START-10) - -#undef CONTAINER_BOX_WIDTH -#define CONTAINER_BOX_WIDTH 250 - - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_favorite_weapon, CR_VIEW_WEAPONS_FAV_WEAPON, menu_cr_weapons_equipment_usage, menu_cr_weapons_hitlocHeatmap, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - /* Left container box */ - PREPROC_SHADER_DRAW( COMBAT_SUMMARY_X_START (COMBAT_SUMMARY_Y_START+35) CONTAINER_BOX_WIDTH 140 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - /* BG for "Kills" */ - PREPROC_SHADER_DRAW( (COMBAT_SUMMARY_X_START) (COMBAT_SUMMARY_Y_START+34) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Kills" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+40) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_KILLS_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Kills */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+40) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT( "KILLS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "Deaths" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+60) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_DEATHS_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Deaths */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+60) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT( "DEATHS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* BG for "Kills to deaths Ratio" */ - PREPROC_SHADER_DRAW( (COMBAT_SUMMARY_X_START) (COMBAT_SUMMARY_Y_START+74) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Kills to deaths Ratio" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+80) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_KILL_DEATH_RATIO_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Kills to deaths Ratio */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+80) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - getFloatAsFormattedString( (int(GET_STAT( "KDRATIO" ))/1000), 2 ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "Assists" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+100) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_ASSISTS_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Assists */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+100) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT( "ASSISTS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "Accuracy" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+120) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_ACCURACY_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* BG for "Accuracy" */ - PREPROC_SHADER_DRAW( (COMBAT_SUMMARY_X_START) (COMBAT_SUMMARY_Y_START+114) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Accuracy */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+120) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - getFloatAsFormattedString( (int(GET_STAT( "ACCURACY" ))/100), 2 ) + " %", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "Headshots" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+140) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_HEADSHOTS_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Headshots */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+140) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT( "HEADSHOTS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* BG for "Best Killstreak" */ - PREPROC_SHADER_DRAW( (COMBAT_SUMMARY_X_START) (COMBAT_SUMMARY_Y_START+154) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Best Killstreak" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+160) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_BEST_KILLSTREAK_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Best Killstreak */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_X_START+10) (COMBAT_SUMMARY_Y_START+160) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_HIGHEST_STAT( "KILL_STREAK" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - -#define COMBAT_SUMMARY_RIGHT_X_START (COMBAT_SUMMARY_X_START+CONTAINER_BOX_WIDTH+20) - - /* Right container box */ - PREPROC_SHADER_DRAW( COMBAT_SUMMARY_RIGHT_X_START (COMBAT_SUMMARY_Y_START+35) CONTAINER_BOX_WIDTH 140 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - /* Label for "Favorite Weapon" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_RIGHT_X_START+10) (COMBAT_SUMMARY_Y_START+40) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_FAVORITE_WEAPON_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1 ) - /* Favorite weapon icon */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (COMBAT_SUMMARY_X_START+CONTAINER_BOX_WIDTH+10+CONTAINER_BOX_WIDTH/2-75/2), - (COMBAT_SUMMARY_Y_START+70), - 75, - 32, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - getItemImage( GET_SORTED_ITEM_INDEX( 0, 1 ) ), 1 1 1 1, 1, ; ) - /* Favorite Weapon Name */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_RIGHT_X_START+10) (COMBAT_SUMMARY_Y_START+110) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@"+getItemName( GET_SORTED_ITEM_INDEX( 0, 1 ) ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1 ) - /* BG for "Kills" */ - PREPROC_SHADER_DRAW( (COMBAT_SUMMARY_RIGHT_X_START) (COMBAT_SUMMARY_Y_START+134) CONTAINER_BOX_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Kills" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_RIGHT_X_START+10) (COMBAT_SUMMARY_Y_START+140) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_KILLS_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Favorite weapon kills */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_RIGHT_X_START+10) (COMBAT_SUMMARY_Y_START+140) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_ITEM_STAT( GET_SORTED_ITEM_INDEX( 0, 1 ), "kills" ) + " " + locString( "MPUI_KILLS_PRE_CAPS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* Label for "Accuracy" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_RIGHT_X_START+10) (COMBAT_SUMMARY_Y_START+160) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_ACCURACY_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Favorite weapon Accuracy */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_SUMMARY_RIGHT_X_START+10) (COMBAT_SUMMARY_Y_START+160) (CONTAINER_BOX_WIDTH-20) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - getFloatAsFormattedString( float( GET_ITEM_STAT( GET_SORTED_ITEM_INDEX( 0, 1 ), "hits" ) * 10000 )/float( GET_ITEM_STAT( GET_SORTED_ITEM_INDEX( 0, 1 ), "shots" ) )/(100.0), 2 ) + " % ", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - -#undef CR_LINE_GRAPH_X_START -#define CR_LINE_GRAPH_X_START (COMBAT_SUMMARY_X_START+10) -#undef CR_LINE_GRAPH_Y_START -#define CR_LINE_GRAPH_Y_START (COMBAT_RECORD_BODY_Y_START+210) -#undef CR_LINE_GRAPH_WIDTH -#define CR_LINE_GRAPH_WIDTH (CONTAINER_BOX_WIDTH*2+10) -#undef CR_LINE_GRAPH_HEIGHT -#define CR_LINE_GRAPH_HEIGHT 70 - - /* Label for "K/D chart last 5 games" */ - PREPROC_TEXT_DRAW_VIS_EX( COMBAT_SUMMARY_X_START (CR_LINE_GRAPH_Y_START-20) CR_LINE_GRAPH_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_KD_LAST_FIVE_GAMES_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1, autowrapped ) - - CR_LINE_GRAPH - - itemDef - { - type ITEM_TYPE_OWNERDRAW_TEXT - rect CR_LINE_GRAPH_X_START (CR_LINE_GRAPH_Y_START+CR_LINE_GRAPH_HEIGHT+20) CR_LINE_GRAPH_WIDTH CR_LINE_GRAPH_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - textscale TEXTSIZE_DEFAULT - textfont CHOICE_TEXTFONT - forecolor CHOICE_TEXTCOLOR - ownerdraw UI_COMBAT_RECORD_LINE_GRAPH_VALUES - visible 1 - decoration - } - - /* Display "Not Enough data" if user has not played atleast 2 matches */ - PREPROC_TEXT_DRAW_VIS_EX( (CR_LINE_GRAPH_X_START) (CR_LINE_GRAPH_Y_START-10) CR_LINE_GRAPH_WIDTH CR_LINE_GRAPH_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_NOT_ENOUGH_DATA", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT 0.5, when( GET_SORTED_ITEM_INDEX( CR_MAX_RECENT_PERFORMANCE_GRAPH_VALUES, 1 ) < 2 ) , autowrapped; ) - - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Weapons", view "Hit Location Heatmap" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_hitlocHeatmap, CR_VIEW_WEAPONS_HIT_LOCATION_HEATMAP, menu_cr_weapons_favorite_weapon, menu_cr_weapons_kdr, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - -#define CR_HITLOC_HEATMAP_WIDTH 200 -#define CR_HITLOC_HEATMAP_HEIGHT 256 -#define CR_HITLOC_HEATMAP_X_START (-CR_HITLOC_HEATMAP_WIDTH/2) -#define CR_HITLOC_HEATMAP_Y_START ( COMBAT_RECORD_BODY_Y_START+30 ) - - /* Background for the hitloc heatmap */ - PREPROC_SHADER_DRAW( CR_HITLOC_HEATMAP_X_START CR_HITLOC_HEATMAP_Y_START CR_HITLOC_HEATMAP_WIDTH CR_HITLOC_HEATMAP_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_heatmap_figure", 1 1 1 1 ) - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect CR_HITLOC_HEATMAP_X_START CR_HITLOC_HEATMAP_Y_START CR_HITLOC_HEATMAP_WIDTH CR_HITLOC_HEATMAP_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - ownerdraw UI_COMBAT_RECORD_HITLOC_HEATMAP - visible 1 - decoration - } - - /* Display "Not Enough data" if user has not played atleast 2 matches */ - PREPROC_TEXT_DRAW_VIS_EX( CR_HITLOC_HEATMAP_X_START (CR_HITLOC_HEATMAP_Y_START+CR_HITLOC_HEATMAP_HEIGHT+2) CR_HITLOC_HEATMAP_WIDTH 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CR_HITLOC_HEATMAP_DESC", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1 , ; ) - - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - - -/* --------------------Combat record tab "Weapons", view "kdr" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_kdr, CR_VIEW_WEAPONS_KDR, menu_cr_weapons_hitlocHeatmap, menu_cr_weapons_accuracy, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Weapons", view "accuracy" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_accuracy, CR_VIEW_WEAPONS_ACCURACY, menu_cr_weapons_kdr, menu_cr_weapons_kills, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Weapons", view "kills" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_kills, CR_VIEW_WEAPONS_KILLS, menu_cr_weapons_accuracy, menu_cr_weapons_deaths, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - -// Disabling the stats milestones button for now -#if 0 - itemDef - { - type ITEM_TYPE_BUTTON - rect -50 ( COMBAT_RECORD_HEIGHT / 2 + 16.5 ) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - text "@PLATFORM_STATS_MILESTONES" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SMALL - textalign ITEM_ALIGN_BOTTOM_LEFT - visible when( !dvarbool( "ui_combatStatsMilestonesVis" ) ) - execKeyInt BUTTON_BACK{ execNow "toggle ui_combatStatsMilestonesVis 0 1" } - decoration - } - - itemDef - { - type ITEM_TYPE_BUTTON - rect -50 ( COMBAT_RECORD_HEIGHT / 2 + 16.5 ) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - text "@PLATFORM_HIDE_STATS_MILESTONES" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SMALL - textalign ITEM_ALIGN_BOTTOM_LEFT - visible when( dvarbool( "ui_combatStatsMilestonesVis" ) ) - execKeyInt BUTTON_BACK{ execNow "toggle ui_combatStatsMilestonesVis 0 1" } - decoration - } -#endif - - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Weapons", view "deaths" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_deaths, CR_VIEW_WEAPONS_DEATHS, menu_cr_weapons_kills, menu_cr_weapons_headshots, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Weapons", view "headshots" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_headshots, CR_VIEW_WEAPONS_HEADSHOTS, menu_cr_weapons_deaths, menu_cr_weapons_times_killed_by, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - -// Disabling the stats milestones button for now -#if 0 - itemDef - { - type ITEM_TYPE_BUTTON - rect -50 ( COMBAT_RECORD_HEIGHT / 2 + 16.5 ) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - text "@PLATFORM_STATS_MILESTONES" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SMALL - textalign ITEM_ALIGN_BOTTOM_LEFT - visible when( !dvarbool( "ui_combatStatsMilestonesVis" ) ) - execKeyInt BUTTON_BACK{ execNow "toggle ui_combatStatsMilestonesVis 0 1" } - decoration - } - - itemDef - { - type ITEM_TYPE_BUTTON - rect -50 ( COMBAT_RECORD_HEIGHT / 2 + 16.5 ) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - text "@PLATFORM_HIDE_STATS_MILESTONES" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SMALL - textalign ITEM_ALIGN_BOTTOM_LEFT - visible when( dvarbool( "ui_combatStatsMilestonesVis" ) ) - execKeyInt BUTTON_BACK{ execNow "toggle ui_combatStatsMilestonesVis 0 1" } - decoration - } -#endif - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Weapons", view "times killed by" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_times_killed_by, CR_VIEW_WEAPONS_TIMES_KILLED_BY, menu_cr_weapons_headshots, menu_cr_weapons_equipment_kills, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Weapons", view "equipment kills" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_equipment_kills, CR_VIEW_WEAPONS_EQUIPMENT_KILLS, menu_cr_weapons_times_killed_by, menu_cr_weapons_equipment_times_killed_by, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Weapons", view "equipment killed by" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_equipment_times_killed_by, CR_VIEW_WEAPONS_EQUIPMENT_TIMES_KILLED_BY, menu_cr_weapons_equipment_kills, menu_cr_weapons_equipment_usage, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Weapons", view "equipment usage" ------------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_weapons_equipment_usage, CR_VIEW_WEAPONS_EQUIPMENT_USAGE, menu_cr_weapons_equipment_times_killed_by, menu_cr_weapons_favorite_weapon, CR_TAB_WEAPONS, (dvarString("ui_combatCareerViewMenuName")), (dvarString("ui_combatMatchesViewMenuName")), ;, ; ) - - CR_WEAPONS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* ----------------------------------Combat record tab "Matches", view "Preferred Match Types"-----------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_matches_types, CR_VIEW_MATCHES_TYPES, menu_cr_matches_recent_earnings, menu_cr_matches_performance, CR_TAB_MATCHES, (dvarString("ui_combatWeaponsViewMenuName")), (dvarString("ui_combatKillstreaksViewMenuName")), - execNow set ui_combatXboxLivePieChart NON_WAGER_GAMETYPE_PIE_CHART; - execNow set ui_combatWagerPieChart WAGER_GAMETYPE_PIE_CHART;, ; ) - - CR_MATCHES_TAB_COMMMON_ITEMS - CR_VIEW_TITLE_AND_VIEW_NUMBER - -#undef CONTAINER_BOX_WIDTH -#define CONTAINER_BOX_WIDTH 260 - -#define PREFERRED_MATCH_TYPES_BODY_X_START (COMBAT_RECORD_BODY_X_START+10) - - /* Left Dark Gray container box */ - PREPROC_SHADER_DRAW( PREFERRED_MATCH_TYPES_BODY_X_START (COMBAT_RECORD_BODY_Y_START+30) CONTAINER_BOX_WIDTH 260 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - - /* Right dark gray container box */ - PREPROC_SHADER_DRAW( (PREFERRED_MATCH_TYPES_BODY_X_START+CONTAINER_BOX_WIDTH+5) (COMBAT_RECORD_BODY_Y_START+30) CONTAINER_BOX_WIDTH 260 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - - /* Label for "Xbox Live ( "Top 3" ) */ - PREPROC_TEXT_DRAW_VIS( PREFERRED_MATCH_TYPES_BODY_X_START (COMBAT_RECORD_BODY_Y_START+40) CONTAINER_BOX_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@XBOXLIVE_TOP_MATCHES_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1 ) - - /* Label for "Wagers ( "Top 3" ) */ - PREPROC_TEXT_DRAW_VIS( (PREFERRED_MATCH_TYPES_BODY_X_START+CONTAINER_BOX_WIDTH+5) (COMBAT_RECORD_BODY_Y_START+40) CONTAINER_BOX_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_TOP_WAGERS_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1 ) - -#define CR_PIE_CHART_X_START (COMBAT_RECORD_BODY_X_START+75) -#define CR_PIE_CHART_Y_START (COMBAT_RECORD_BODY_Y_START+60) -#define CR_PIE_CHART_WIDTH 128 -#define CR_PIE_CHART_HEIGHT 128 - -#define NON_WAGER_GAMETYPE 0 -#define WAGER_GAMETYPE 1 -#define TOP 0 -#define MIDDLE 1 -#define BOTTOM 2 - -#define PIE_CHART_TOP_TEXT_COLOR 0.58 0.58 0.58 1 // GRAY -#define PIE_CHART_MIDDLE_TEXT_COLOR 0.78 0.78 0.78 1 // LIGHT GRAY -#define PIE_CHART_BOTTOM_TEXT_COLOR 0.38 0.72 0.72 1 // BLUE - -#define PIE_CHART_TEXT( x, x_offset, gameType, visArg ) \ - PREPROC_TEXT_DRAW_VIS( (x+x_offset) (CR_PIE_CHART_Y_START+CR_PIE_CHART_HEIGHT+20) CONTAINER_BOX_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - GetCombatRecordPieChartText( gameType, TOP ), \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, PIE_CHART_TOP_TEXT_COLOR, visArg ) \ - PREPROC_TEXT_DRAW_VIS( (x+x_offset) (CR_PIE_CHART_Y_START+CR_PIE_CHART_HEIGHT+35) CONTAINER_BOX_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - GetCombatRecordPieChartText( gameType, MIDDLE ) , \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, PIE_CHART_MIDDLE_TEXT_COLOR, visArg ) \ - PREPROC_TEXT_DRAW_VIS( (x+x_offset) (CR_PIE_CHART_Y_START+CR_PIE_CHART_HEIGHT+50) CONTAINER_BOX_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - GetCombatRecordPieChartText( gameType, BOTTOM ) , \ - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, PIE_CHART_BOTTOM_TEXT_COLOR, visArg ) \ - -#define SEPARATION_BETWEEN_PIE_CHARTS CONTAINER_BOX_WIDTH - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect CR_PIE_CHART_X_START CR_PIE_CHART_Y_START CR_PIE_CHART_WIDTH CR_PIE_CHART_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - ownerdraw UI_COMBAT_RECORD_PIE_CHART - dvar ui_combatXboxLivePieChart - visible when( getTotalMatchesPlayed() > 1 ) - decoration - } - - PIE_CHART_TEXT( PREFERRED_MATCH_TYPES_BODY_X_START, 0, NON_WAGER_GAMETYPE_PIE_CHART, when( getTotalMatchesPlayed() > 1 ) ) - - /* Display "Not Enough data" if user has not played atleast 2 matches */ - PREPROC_TEXT_DRAW_VIS_EX( PREFERRED_MATCH_TYPES_BODY_X_START (COMBAT_RECORD_BODY_Y_START+30) CONTAINER_BOX_WIDTH 260 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_NOT_ENOUGH_DATA", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT 0.5, when( getTotalMatchesPlayed() < 2 ) , autowrapped; ) - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect (CR_PIE_CHART_X_START+SEPARATION_BETWEEN_PIE_CHARTS) CR_PIE_CHART_Y_START CR_PIE_CHART_WIDTH CR_PIE_CHART_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - ownerdraw UI_COMBAT_RECORD_PIE_CHART - dvar ui_combatWagerPieChart - visible when( GetNumWagerMatchesPlayed() > 1 ) - decoration - } - - PIE_CHART_TEXT( PREFERRED_MATCH_TYPES_BODY_X_START, SEPARATION_BETWEEN_PIE_CHARTS, WAGER_GAMETYPE_PIE_CHART, when( GetNumWagerMatchesPlayed() > 1 ) ) - - /* Display "Not Enough data" if user has not played atleast 2 matches */ - PREPROC_TEXT_DRAW_VIS_EX( (PREFERRED_MATCH_TYPES_BODY_X_START+CONTAINER_BOX_WIDTH+5) (COMBAT_RECORD_BODY_Y_START+30) CONTAINER_BOX_WIDTH 260 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_NOT_ENOUGH_DATA", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT 0.5, when( GetNumWagerMatchesPlayed() < 2 ) , autowrapped; ) - - #include "ui/safearea.menu" - } - -/* ----------------------------------Combat record tab "Matches", view "Match Performance"-----------------------------------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_matches_performance, CR_VIEW_MATCHES_PERFORMANCE, menu_cr_matches_recent_earnings, menu_cr_matches_heat_map, CR_TAB_MATCHES, (dvarString("ui_combatWeaponsViewMenuName")), (dvarString("ui_combatKillstreaksViewMenuName")), ;, ; ) - - CR_MATCHES_TAB_COMMMON_ITEMS - CR_VIEW_TITLE_AND_VIEW_NUMBER - -#undef HISTOGRAM_X_START -#undef HISTOGRAM_Y_START -#undef HISTOGRAM_WIDTH -#define HISTOGRAM_WIDTH 300 -#undef HISTOGRAM_HEIGHT -#define HISTOGRAM_HEIGHT 145 - -#undef HISTOGRAM_LABELS_X_START -#undef HISTOGRAM_LABELS_Y_START - -#ifdef CONSOLE -#define HISTOGRAM_X_START (COMBAT_RECORD_BODY_X_START+263) -#define HISTOGRAM_Y_START (COMBAT_RECORD_BODY_Y_START+80) -#define HISTOGRAM_LABELS_X_START (HISTOGRAM_X_START-50) -#define HISTOGRAM_LABELS_Y_START (HISTOGRAM_Y_START+5) -#else // #ifdef CONSOLE -#define HISTOGRAM_X_START (COMBAT_RECORD_BODY_X_START+250) -#define HISTOGRAM_Y_START (COMBAT_RECORD_BODY_Y_START+125) -#define HISTOGRAM_LABELS_X_START (HISTOGRAM_X_START-50) -#define HISTOGRAM_LABELS_Y_START (HISTOGRAM_Y_START+5) -#endif - -#undef CONTAINER_BOX_WIDTH -#define CONTAINER_BOX_WIDTH 330 - - /* Right container box */ - //PREPROC_SHADER_DRAW( (HISTOGRAM_X_START-40) (COMBAT_RECORD_BODY_Y_START+63) CONTAINER_BOX_WIDTH 197 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - - /* Label for "Score" */ - PREPROC_TEXT_DRAW_VIS( HISTOGRAM_X_START (HISTOGRAM_Y_START-15) (HISTOGRAM_WIDTH-HISTOGRAM_WIDTH/10) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@MPUI_CR_MATCH_PERFORMANCE_HISTOGRAM_TITLE", (tablelookup( "mp/gametypesTable.csv", 0, int(getFeederData( "menu_cr_matches_performance", "cr_listbox_matches", "selection")), 3 )) ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1 ) - /* Maximum Score */ - PREPROC_TEXT_DRAW_VIS( (HISTOGRAM_LABELS_X_START) (HISTOGRAM_LABELS_Y_START) 40 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetCombatRecordMinMaxScore( MATCH_PERFORMANCE_HISTOGRAM, RETURN_MAX_SCORE ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_RIGHT, CHOICE_TEXTCOLOR, 1 ) - - /* Minimum Score */ - PREPROC_TEXT_DRAW_VIS( (HISTOGRAM_LABELS_X_START) (HISTOGRAM_LABELS_Y_START+HISTOGRAM_HEIGHT) 40 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetCombatRecordMinMaxScore( MATCH_PERFORMANCE_HISTOGRAM, RETURN_MIN_SCORE ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_RIGHT, CHOICE_TEXTCOLOR, 1 ) - - /* Display "Not Enough data" if user has not played atleast 2 matches */ - PREPROC_TEXT_DRAW_VIS_EX( (HISTOGRAM_X_START) (HISTOGRAM_Y_START+HISTOGRAM_HEIGHT+7) (HISTOGRAM_WIDTH-(HISTOGRAM_WIDTH/10)) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_NOT_ENOUGH_DATA", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_CENTER, CHOICE_TEXTCOLOR_NO_ALPHA_COMPONENT 0.5, when( GET_SORTED_ITEM_INDEX( (dvarInt("ui_combatHistogramCurrGametype")) * CR_MAX_MATCH_PERFORMANCE_GRAPH_VALUES, 1 ) < 2 ) , autowrapped; ) - - HISTOGRAM_INPLACE - -#undef COMBAT_RECORD_LIST_X_START -#define COMBAT_RECORD_LIST_X_START (COMBAT_RECORD_BODY_X_START) -#undef COMBAT_RECORD_LIST_Y_START -#define COMBAT_RECORD_LIST_Y_START (COMBAT_RECORD_BODY_Y_START+60) -#undef LIST_WIDTH -#define LIST_WIDTH 200 -#undef LIST_HEIGHT -#define LIST_HEIGHT 200 - - COMBAT_RECORD_LISTBOX_EX( cr_listbox_matches, FEEDER_COMBAT_RECORD_GAMETYPES, ;, 1, ; ) - - #include "ui/safearea.menu" - } - - menuDef - { - name match_performance_gametypes_list - rect 0 150 640 230 // shrinking height so it doesn't interfere with clicking on the tabs or the back button or the tab bumpers - priority MENU_PRI_ONTOP - visible 1 - onOpen { setDvar ui_combatLockScrolling "1"; - ITEM_ANIMATE( menuName, "dummy", lockScrolling, 20 ); - setfocus cr_listbox_matches; } - onClose { } - - onESC { - close self; - close match_performance_histogram; - close menu_cr_matches_performance; - setdvar ui_combatResetViewDvars "0"; - if(dvarbool(ui_showFriendsCombatRecord)) - { - open menu_playercard; - } - else - { - if ( dvarInt( xblive_basictraining ) ) - { - open menu_playercard_self_basictraining; - } - else - { - open menu_playercard_self; - } - } - RESET_SELECTED_PLAYER_XUID; - } - -#undef COMBAT_RECORD_LIST_X_START -#define COMBAT_RECORD_LIST_X_START (COMBAT_RECORD_BODY_X_START+7) -#undef COMBAT_RECORD_LIST_Y_START -#define COMBAT_RECORD_LIST_Y_START (COMBAT_RECORD_BODY_Y_START+72-160) -#undef LIST_WIDTH -#define LIST_WIDTH 200 -#undef LIST_HEIGHT -#define LIST_HEIGHT 200 - - COMBAT_RECORD_LISTBOX_EX( cr_listbox_matches, FEEDER_COMBAT_RECORD_GAMETYPES, ;, 1, ; ) - - ACTION_HANDLER( "match_performance_gametypes_list" ) - DUMMY_ITEM_FOR_ANIMATION( match_performance_gametypes_list, 1 ) - } - - HISTOGRAM_MENU( match_performance_histogram, CR_TAB_MATCHES, HISTOGRAM_X_START, HISTOGRAM_Y_START, HISTOGRAM_WIDTH, HISTOGRAM_HEIGHT, (dvarInt("ui_combatHistogramCurrGametype")), when( dvarInt( "ui_combatCurrViewNum" ) == CR_VIEW_MATCHES_PERFORMANCE ); ) - -/* ----------------------------------Combat record tab "Matches", view "Heat Map"-----------------------------------------------------------------------------*/ - -#define FILESHARE_TASKS_COMPLETE \ - isTaskInProgress( "LiveFileShareSearch" ) != 1 && isTaskInProgress( "LiveFileGetShareSummary" ) != 1 - -#define FILESHARE_GET_RECENT_GAMES \ - if(dvarbool(ui_showFriendsCombatRecord)) \ - { \ - execnow fileShareGetRecentGames ( dvarString( selectedPlayerXuid ) );\ - } \ - else \ - { \ - execnow fileShareGetRecentGames; \ - } - - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_matches_heat_map, CR_VIEW_MATCHES_HEAT_MAP, menu_cr_matches_performance, menu_cr_matches_recent_earnings, CR_TAB_MATCHES, (dvarString("ui_combatWeaponsViewMenuName")), (dvarString("ui_combatKillstreaksViewMenuName")), FILESHARE_GET_RECENT_GAMES;, ; ) - - CR_MATCHES_TAB_COMMMON_ITEMS - CR_VIEW_TITLE_AND_VIEW_NUMBER - -#define HEAT_MAP_X_START (COMBAT_RECORD_BODY_X_START+270) - -#define HEAT_MAP_Y_START (COMBAT_RECORD_BODY_Y_START+30) - -#define HEAT_MAP_WIDTH 250 -#define HEAT_MAP_HEIGHT 250 - - itemDef - { - name fileShareRecentGames - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_SEARCHRESULTS - rect -265 -90 250 230 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - elementwidth 30 - elementheight 16 - elementtype LISTBOX_TEXT - textstyle ITEM_TEXTSTYLE_NORMAL - textfont UI_FONT_NORMAL - textscale CHOICE_TEXTSIZE - textalign HORIZONTAL_ALIGN_LEFT - textalignx 12 - forecolor CHOICE_TEXTCOLOR - focusColor CHOICE_TEXTCOLOR - disableColor CHOICE_TEXTCOLOR - #ifdef XENON - selectIcon "ui_button_xenon_3d_a_32x32" - #endif - #ifdef PS3 - selectIcon "ui_button_ps3_x_32x32" - #endif - outlinecolor 1 1 1 1 - elementHighlightColor 0 0 0 1 - elementBackgroundColor NEW_FRAME_TRANSPARENCY - noBlinkingHighlight - modal - usePaging - /* x y w h len horzAlign vertAlign*/ - userarea 1 10 -1 200 18 50 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP - visible 1 - - onListboxSelectionChange - { - if( getFeederData( "count" ) > 1 ) - { - play CHOICE_FOCUS_SOUND; - } - } - doubleclick - { - if( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) && getFeederData( fileID ) != 0 ) - { - execNow set selectedRecentGameIndex (getFeederData("selection") ); - execNow set fsSelectedRecentGameID ( getFeederData( fileID ) ); - execnow set fsSelectedFileName ( getFeederData( name ) ); - execnow set fsIsSelectedFileNameModified ( getFeederData( isModifiedName ) ); - execnow set fsSelectedFileDescription ( getFeederData( description ) ); - execnow set fsIsSelectedFileDescriptionModified ( getFeederData( isModifiedDescription ) ); - open menu_fileshare_myrecentgames_choose; - } - } - } - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect HEAT_MAP_X_START HEAT_MAP_Y_START HEAT_MAP_WIDTH HEAT_MAP_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - forecolor 1 1 1 1 - ownerdraw UI_DRAWHEATMAP - visible when( int( getFeederData( "fileShareRecentGames", "isSummaryLoaded" ) ) == 1 ) - decoration - } - - FILESHARE_PROGRESS_INDICATOR_SIZE( 130, 20, 64, 64, 0, ( int( getFeederData( "fileShareRecentGames", "isSummaryLoaded" ) ) == 0 ) ) - - FILESHARE_DETAILS_COMBATRECORD( 0, -50, HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, "menu_cr_matches_heat_map", "fileShareRecentGames", 1 ) - - -#define GAME_INFO_X_START (COMBAT_RECORD_BODY_X_START+10) - -#define GAME_INFO_VIS_CONDITION \ - int( getFeederData( "fileShareRecentGames", "isSummaryLoaded" ) ) == 1 - - /* Legend for the heatmap */ - - /* Red box for general deaths */ - PREPROC_SHADER_DRAW_VIS_EX( (GAME_INFO_X_START+15) (COMBAT_RECORD_BODY_Y_START+273) 5 5 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "white", 1 0 0 1, - when( GAME_INFO_VIS_CONDITION ), - name heatmap_info; ITEM_STATE( fadeIn, foreColor 1 0 0 1, ; ) ; ) - - /* Label for "DEATHS" */ - PREPROC_TEXT_DRAW_VIS( (GAME_INFO_X_START+30) (COMBAT_RECORD_BODY_Y_START+270) 100 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MENU_DEATHS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, - when( GAME_INFO_VIS_CONDITION ); - name heatmap_info; ITEM_STATE( fadeIn, foreColor CHOICE_TEXTCOLOR, ; ) ) - - /* Yellow box for player deaths only */ - PREPROC_SHADER_DRAW_VIS_EX( (GAME_INFO_X_START+15) (COMBAT_RECORD_BODY_Y_START+293) 5 5 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "white", 1 1 0 1, - when( GAME_INFO_VIS_CONDITION ), - name heatmap_info; ITEM_STATE( fadeIn, foreColor 1 1 0 1, ; ) ; ) - - /* Label for "YOUR DEATHS ONLY" */ - PREPROC_TEXT_DRAW_VIS( (GAME_INFO_X_START+30) (COMBAT_RECORD_BODY_Y_START+290) 190 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString("MPUI_CR_HEATMAPS_YOUR_DEATHS_ONLY"), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, - when( GAME_INFO_VIS_CONDITION && !dvarBool("ui_showFriendsCombatRecord") ); autoWrapped; - name heatmap_info; ITEM_STATE( fadeIn, foreColor CHOICE_TEXTCOLOR, ; ) ) - - /* Label for "FRIENDS DEATHS ONLY" */ - PREPROC_TEXT_DRAW_VIS( (GAME_INFO_X_START+30) (COMBAT_RECORD_BODY_Y_START+290) 190 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - dvarString("selectedFriendName") + locString("MENU_APOSTROPHE_S")+" "+locString("MPUI_CR_HEATMAPS_DEATHS_ONLY"), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, - when( GAME_INFO_VIS_CONDITION && dvarBool("ui_showFriendsCombatRecord") ); autoWrapped; - name heatmap_info; ITEM_STATE( fadeIn, foreColor CHOICE_TEXTCOLOR, ; ) ) - - itemDef - { - type ITEM_TYPE_TEXT - rect -175 ( COMBAT_RECORD_HEIGHT / 2 + 18 ) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - text "@PLATFORM_FILE_OPTIONS" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_LEFT - visible when( dvarbool("ui_combatFileSummaryValid") ) - decoration - } - - #define OPEN_FILE_OPTIONS \ - execnow set fsSelectedFileName (getFileshareGameMapName(dvarInt("selectedRecentGameIndex"))); \ - execNow set fsSelectedRecentGameID ( getFeederData( fileID ) ); \ - execnow set fsIsSelectedFileNameModified 0; \ - execnow set fsSelectedFileDescription (getFileshareGameTypeName(dvarInt("selectedRecentGameIndex"))); \ - execnow set fsIsSelectedFileDescriptionModified 0; \ - open menu_fileshare_myrecentgames_choose; - - - NEW_FRAME_PREVIOUS_MATCH_BUTTON_ACTION( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@PLATFORM_SELECT_A_PREVIOUS_MATCH", open menu_cr_matches_heat_map_recent_games; , when( dvarbool( "ui_combatUserHasRecentGames" ) ) ) - NEW_FRAME_FILE_OPTIONS_BUTTON_ACTION( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@PLATFORM_FILE_OPTIONS", OPEN_FILE_OPTIONS, when( dvarbool("ui_combatFileSummaryValid") ) ) - - PREPROC_TEXT_DRAW_VIS( (-COMBAT_RECORD_WIDTH / 2) 0 COMBAT_RECORD_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CR_HEATMAPS_NO_RECENT_MATCHES", TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, - CHOICE_TEXTCOLOR, when( dvarbool("ui_combatFileshareTasksComplete") && !dvarbool("ui_combatUserHasRecentGames") ) ) - - PREPROC_TEXT_DRAW_VIS( (-COMBAT_RECORD_WIDTH / 2) 0 COMBAT_RECORD_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CR_HEATMAPS_NO_HEATMAP_DATA", TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, - CHOICE_TEXTCOLOR, when( dvarbool("ui_combatFileshareTasksComplete") && !dvarbool("ui_combatFileSummaryValid") && dvarbool("ui_combatUserHasRecentGames") ) ) - - execKeyInt BUTTON_A - { - if( dvarbool("ui_combatFileSummaryValid") ) - { - OPEN_FILE_OPTIONS - } - } - - #include "ui/safearea.menu" - } - - // recent games list for heatmap menu ( in matches tab ) -#define SELECTION_LIST_MENU_X_START 16.5 -#define SELECTION_LIST_MENU_Y_START 0 -#define SELECTION_LIST_MENU_WIDTH (SMALL_CENTER_POPUP_WIDTH - 32) -#define SELECTION_LIST_MENU_HEIGHT SMALL_CENTER_POPUP_HEIGHT - -#undef ON_ESC_ACTION_POPUP -#define ON_ESC_ACTION_POPUP \ - deactivateBlur; \ - setLocalVarBool ui_centerPopup 0; \ - play uin_navigation_sys_close; \ - close self; - - menuDef - { - name menu_cr_matches_heat_map_recent_games - visible 1 - fullscreen 0 - rect (-SMALL_CENTER_POPUP_WIDTH/2) (-SMALL_CENTER_POPUP_HEIGHT/2) SMALL_CENTER_POPUP_WIDTH SMALL_CENTER_POPUP_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - backcolor 0.2 0.2 0.2 0.8 - style WINDOW_STYLE_FRAMED - frame 16 0.5 FRAME_SIDE_ALL - background "menu_mp_lobby_frame_circle" - focusColor COLOR_FOCUSED - priority MENU_PRI_POPUP - popup - onOpen - { - activateBlur; - setLocalVarBool ui_centerPopup 1; - play uin_navigation_sys_open; - } - onClose - { - deactivateBlur; - CENTER_POPUP_ON_CLOSE - setLocalVarBool ui_centerPopup 0; - } - onESC - { - ON_ESC_ACTION_POPUP - } - - /* title text for "SELECT A RECENTLY PLAYED MATCH" */ - PREPROC_TEXT_DRAW( 16.5 (SELECTION_LIST_MENU_Y_START+16.5) SMALL_CENTER_POPUP_WIDTH 10 HORIZONTAL_ALIGN_CENTER CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CR_SELECT_RECENT_MATCH", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR ) - - PREPROC_SHADER_DRAW_VIS_EX( 0 0 SMALL_CENTER_POPUP_WIDTH (SMALL_CENTER_POPUP_HEIGHT-POPUP_INNER_BG_PAD), "menu_mp_lobby_frame_fade", POPUP_GLOW_WHITE, 1, ; ) - - /* column title "Map" */ - PREPROC_TEXT_DRAW( 40 (SELECTION_LIST_MENU_Y_START+47) SMALL_CENTER_POPUP_WIDTH 10 HORIZONTAL_ALIGN_CENTER CHOICE_VERTICAL_ALIGN, 0 0, - "@MENU_MAP", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR ) - - /* column title "Game Mode" */ - PREPROC_TEXT_DRAW( 130 (SELECTION_LIST_MENU_Y_START+47) SMALL_CENTER_POPUP_WIDTH 10 HORIZONTAL_ALIGN_CENTER CHOICE_VERTICAL_ALIGN, 0 0, - "@MENU_GAME_MODE_PRE", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR ) - - /* column title "Date" */ - PREPROC_TEXT_DRAW( 300 (SELECTION_LIST_MENU_Y_START+47) SMALL_CENTER_POPUP_WIDTH 10 HORIZONTAL_ALIGN_CENTER CHOICE_VERTICAL_ALIGN, 0 0, - "@MENU_DATE", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR ) - -#ifdef PC - #define RECENT_GAMES_LIST_RECT_AND_SCROLL \ - rect SELECTION_LIST_MENU_X_START (SELECTION_LIST_MENU_Y_START+60) (SELECTION_LIST_MENU_WIDTH+16) (SELECTION_LIST_MENU_HEIGHT-75) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - usePaging \ - modal -#else // #ifdef PC - #define RECENT_GAMES_LIST_RECT_AND_SCROLL \ - rect SELECTION_LIST_MENU_X_START (SELECTION_LIST_MENU_Y_START+60) SELECTION_LIST_MENU_WIDTH (SELECTION_LIST_MENU_HEIGHT-75) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - noscrollbars -#endif // #else #ifdef PC - - // List - itemDef - { - name recent_games_list - type ITEM_TYPE_LISTBOX - feeder FEEDER_COMBAT_RECORD_RECENT_GAMES - RECENT_GAMES_LIST_RECT_AND_SCROLL - origin 0 0 - elementwidth 30 - elementheight 16 - elementtype LISTBOX_TEXT - textstyle ITEM_TEXTSTYLE_NORMAL - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SMALL - textalignx 12 - forecolor CHOICE_TEXTCOLOR - focusColor CHOICE_TEXTCOLOR - disableColor CHOICE_TEXTCOLOR -#ifdef XENON - selectIcon "ui_button_xenon_3d_a_32x32" -#endif -#ifdef PS3 - selectIcon "ui_button_ps3_x_32x32" -#endif - selectBorder 0.8 0.95 1 0 - outlinecolor 1 1 1 1 - elementBackgroundColor NEW_FRAME_LT_GREY_RGB 0.2 - elementHighlightColor 0 0 0 1 - noBlinkingHighlight - /* x y len Align */ - columns 3 10 30 32 ITEM_ALIGN_LEFT // MAP - 100 16 32 ITEM_ALIGN_LEFT // GAME MODE - 260 20 20 ITEM_ALIGN_RIGHT // DATE - - visible 1 - onfocus - { - play CHOICE_FOCUS_SOUND; - } - onListboxSelectionChange - { - play CHOICE_FOCUS_SOUND; - } - doubleclick - { - if ( !( FILESHARE_TASKSINPROGRESS ) ) - { - execNow set selectedRecentGameIndex (getFeederData("selection")); - play CHOICE_FOCUS_SOUND; - setdvar ui_combatFileshareTasksComplete "0"; - setdvar ui_combatUserHasRecentGames "0"; - setdvar ui_combatFileSummaryValid "0"; - close self; - } - } - } - - /* button prompts */ -#ifdef PC - SIMPLE_CHOICE_BUTTON_SOUND( NEW_FRAME_DEFAULT_TITLE_X_OFFSET (SMALL_CENTER_POPUP_HEIGHT+4) 70 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "@PLATFORM_BACK", ITEM_ALIGN_MIDDLE_CENTER, ON_ESC_ACTION_POPUP ) -#else // #ifdef PC - PREPROC_TEXT_DRAW_VIS( 0 (SELECTION_LIST_MENU_HEIGHT+16.5) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "@PLATFORM_BACK", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, 1 ) -#endif // #else #ifdef PC - } - -/* ----------------------------------Combat record tab "Matches", view "Recent Earnings"-----------------------------------------------------------------------------*/ - - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_matches_recent_earnings, CR_VIEW_MATCHES_RECENT_EARNINGS, menu_cr_matches_heat_map, menu_cr_matches_performance, CR_TAB_MATCHES, (dvarString("ui_combatWeaponsViewMenuName")), (dvarString("ui_combatKillstreaksViewMenuName")), ;, ; ) - - CR_MATCHES_TAB_COMMMON_ITEMS - CR_VIEW_TITLE_AND_VIEW_NUMBER - -#define CR_BAR_GRAPH_MAX_ITEMS 10 -#define CR_BAR_GRAPH_X_START (COMBAT_RECORD_BODY_X_START+80) -#define CR_BAR_GRAPH_Y_START (COMBAT_RECORD_BODY_Y_START+68) -#define CR_BAR_GRAPH_HEIGHT 180 -#define CR_BAR_GRAPH_WIDTH 320 - -#define CAREER_EARNINGS_GRAPH_WIDTH 53 -#define CAREER_EARNINGS_GRAPH_X_START (COMBAT_RECORD_BODY_X_START+420+5) - - /* bg image */ - PREPROC_SHADER_DRAW( (-128) (COMBAT_RECORD_BODY_Y_START+10) 256 256 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "playlist_wager_highroller_bw", 1 1 1 0.1 ) - - /* left container box for the bar graph */ - PREPROC_SHADER_DRAW( (COMBAT_RECORD_BODY_X_START+10) (CR_BAR_GRAPH_Y_START-30) 410 (CR_BAR_GRAPH_HEIGHT+60) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - - /* right container box for the bar graph */ - PREPROC_SHADER_DRAW( CAREER_EARNINGS_GRAPH_X_START (CR_BAR_GRAPH_Y_START-30) (CAREER_EARNINGS_GRAPH_WIDTH*2) (CR_BAR_GRAPH_HEIGHT+60) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", NEW_FRAME_TRANSPARENCY ) - - /* bar graph */ - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect CR_BAR_GRAPH_X_START CR_BAR_GRAPH_Y_START CR_BAR_GRAPH_WIDTH CR_BAR_GRAPH_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - ownerdraw UI_COMBAT_RECORD_BAR_GRAPH - visible 1 - decoration - } - - /* Label for "Winnings" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_RECORD_BODY_X_START+20) (CR_BAR_GRAPH_Y_START+CR_BAR_GRAPH_HEIGHT/2-3) 80 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_WINNINGS_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_LEFT, COMBAT_RECORD_COLOR_GREEN, 1 ) - - /* Label for "Buyins" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_RECORD_BODY_X_START+20) (CR_BAR_GRAPH_Y_START+CR_BAR_GRAPH_HEIGHT/2+20) 80 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_BUYINS_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_LEFT, COMBAT_RECORD_COLOR_RED, 1 ) - - /* horizontal axis line */ - PREPROC_SHADER_DRAW( (COMBAT_RECORD_BODY_X_START+10) (CR_BAR_GRAPH_Y_START+CR_BAR_GRAPH_HEIGHT/2) (CR_BAR_GRAPH_WIDTH+100) 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.8 ) - - /* Label for "last 10 matches" */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_RECORD_BODY_X_START+10) (CR_BAR_GRAPH_Y_START-30) 80 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_LAST_TEN_MATCHES_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_LEFT, CHOICE_TEXTCOLOR, 1 ) - - /* Label for "Career" */ - PREPROC_TEXT_DRAW_VIS( CAREER_EARNINGS_GRAPH_X_START (CR_BAR_GRAPH_Y_START-30) 95 (CR_BAR_GRAPH_HEIGHT+60) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CAREER_CAPS", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_LEFT, CHOICE_TEXTCOLOR, 1 ) - -#define CAREER_WINNINGS_BAR_HEIGHT ( ( GET_STAT( "LIFETIME_EARNINGS" ) / max( GET_STAT( "LIFETIME_EARNINGS" ), GET_STAT( "LIFETIME_BUYIN" ) ) ) * (CR_BAR_GRAPH_HEIGHT/2) ) -#define CAREER_BUYINS_BAR_HEIGHT ( ( GET_STAT( "LIFETIME_BUYIN" ) / max( GET_STAT( "LIFETIME_EARNINGS" ), GET_STAT( "LIFETIME_BUYIN" ) ) ) * (CR_BAR_GRAPH_HEIGHT/2) ) - - /* bar for lifetime winnings */ - PREPROC_SHADER_DRAW_ADV( (CAREER_EARNINGS_GRAPH_X_START+CAREER_EARNINGS_GRAPH_WIDTH/2), - ((CR_BAR_GRAPH_Y_START+((CR_BAR_GRAPH_HEIGHT/2)-CAREER_WINNINGS_BAR_HEIGHT))), - CAREER_EARNINGS_GRAPH_WIDTH, - (CAREER_WINNINGS_BAR_HEIGHT), - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "white", COMBAT_RECORD_COLOR_GREEN ) - - /* bar for lifetime buyins */ - PREPROC_SHADER_DRAW_ADV( (CAREER_EARNINGS_GRAPH_X_START+CAREER_EARNINGS_GRAPH_WIDTH/2), - ((CR_BAR_GRAPH_Y_START+(CR_BAR_GRAPH_HEIGHT/2))+1), - (CAREER_EARNINGS_GRAPH_WIDTH+1), - (CAREER_BUYINS_BAR_HEIGHT), - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "white", COMBAT_RECORD_COLOR_RED ) - - /* horizontal axis line on the right */ - PREPROC_SHADER_DRAW( CAREER_EARNINGS_GRAPH_X_START (CR_BAR_GRAPH_Y_START+CR_BAR_GRAPH_HEIGHT/2) (CAREER_EARNINGS_GRAPH_WIDTH*2) 1 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 1 1 1 0.8 ) - - /* Lifetime Winnings */ - PREPROC_TEXT_DRAW_VIS_EX( (CAREER_EARNINGS_GRAPH_X_START+CAREER_EARNINGS_GRAPH_WIDTH/2) (CR_BAR_GRAPH_Y_START) CAREER_EARNINGS_GRAPH_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - 0 0, locString( "@MENU_POINTS", GET_STAT("LIFETIME_EARNINGS") ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1, exp rect Y((CR_BAR_GRAPH_Y_START+((CR_BAR_GRAPH_HEIGHT/2)-CAREER_WINNINGS_BAR_HEIGHT))-15); ) - - /* Lifetime buyins */ - PREPROC_TEXT_DRAW_VIS_EX( (CAREER_EARNINGS_GRAPH_X_START+CAREER_EARNINGS_GRAPH_WIDTH/2) (CR_BAR_GRAPH_Y_START) CAREER_EARNINGS_GRAPH_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - 0 0, locString( "@MENU_POINTS", GET_STAT("LIFETIME_BUYIN") ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1, exp rect Y((CR_BAR_GRAPH_Y_START+(CR_BAR_GRAPH_HEIGHT/2))+8+CAREER_BUYINS_BAR_HEIGHT); ) - - /* Max Losses */ - PREPROC_TEXT_DRAW_VIS( (COMBAT_RECORD_BODY_X_START+15) (CR_BAR_GRAPH_Y_START+80) 95 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetCombatRecordMinMaxScore( RECENT_EARNINGS_BAR_GRAPH, RETURN_MIN_SCORE ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_RIGHT, CHOICE_TEXTCOLOR, 1 ) - - #include "ui/safearea.menu" - } - - -/* --------------------Combat record tab "Killstreaks", view "favorites"------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_killstreaks_favorites, CR_VIEW_KILLSTREAKS_FAVORITES, menu_cr_killstreaks_kills, menu_cr_killstreaks_called, CR_TAB_KILLSTREAKS, (dvarString("ui_combatMatchesViewMenuName")), (dvarString("ui_combatContractsViewMenuName")), - execNow set ui_combatKillStreaksPieChart FAVORITE_KILLSTREAKS_PIE_CHART;, ; ) - - CR_KILLSTREAKS_TAB_COMMMON_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - -#undef CONTAINER_BOX_WIDTH -#define CONTAINER_BOX_WIDTH 260 -#define FAVORITE_KILLSTREAKS_BODY_X_START (-CONTAINER_BOX_WIDTH/2) - - /* favorite killstreak bg image */ - PREPROC_SHADER_DRAW_VIS_EX( (FAVORITE_KILLSTREAKS_BODY_X_START+155) (COMBAT_RECORD_BODY_Y_START+25) 256 256 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, GetItemRef( GET_SORTED_ITEM_INDEX( 0, 1 ) )+"_lobby", 1 1 1 0.1, when( GET_SORTED_STAT( 0, 1, 1 ) != 0 ), ; ) - - PREPROC_TEXT_DRAW_VIS( (-COMBAT_RECORD_WIDTH / 2) 0 COMBAT_RECORD_WIDTH 15 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CR_KILLSTREAKS_NO_DATA", TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, - CHOICE_TEXTCOLOR, when( GET_SORTED_STAT( 0, 1, 1 ) == 0 ) ) - - PIE_CHART_TEXT( FAVORITE_KILLSTREAKS_BODY_X_START, 0, FAVORITE_KILLSTREAKS_PIE_CHART, 1 ) - -#undef CR_PIE_CHART_X_START -#define CR_PIE_CHART_X_START (FAVORITE_KILLSTREAKS_BODY_X_START+CR_PIE_CHART_WIDTH/2) - -#define IMAGE_OFFSET 17 - - PREPROC_SHADER_DRAW_VIS_EX( (CR_PIE_CHART_X_START-IMAGE_OFFSET) (CR_PIE_CHART_Y_START-IMAGE_OFFSET) (CR_PIE_CHART_WIDTH+IMAGE_OFFSET*2) (CR_PIE_CHART_HEIGHT+IMAGE_OFFSET*2) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_circle_shadow", 0 0 0 0.1, when( GET_SORTED_STAT( 0, 1, 1 ) != 0 ), ; ) - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect CR_PIE_CHART_X_START CR_PIE_CHART_Y_START CR_PIE_CHART_WIDTH CR_PIE_CHART_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - ownerdraw UI_COMBAT_RECORD_PIE_CHART - dvar ui_combatKillStreaksPieChart - visible when( GET_SORTED_STAT( 0, 1, 1 ) != 0 ) - decoration - } - - #include "ui/safearea.menu" - } - - /* --------------------Combat record tab "Killstreaks", view "killstreaks-called"------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_killstreaks_called, CR_VIEW_KILLSTREAKS_CALLED, menu_cr_killstreaks_times_killed_by, menu_cr_killstreaks_kills, CR_TAB_KILLSTREAKS, (dvarString("ui_combatMatchesViewMenuName")), (dvarString("ui_combatContractsViewMenuName")), ;, ; ) - - CR_KILLSTREAKS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - - /* --------------------Combat record tab "Killstreaks", view "killstreaks-kills"------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_killstreaks_kills, CR_VIEW_KILLSTREAKS_KILLS, menu_cr_killstreaks_called, menu_cr_killstreaks_times_killed_by, CR_TAB_KILLSTREAKS, (dvarString("ui_combatMatchesViewMenuName")), (dvarString("ui_combatContractsViewMenuName")), ;, ; ) - - CR_KILLSTREAKS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - - /* --------------------Combat record tab "Killstreaks", view "killstreaks-times killed by"------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_killstreaks_times_killed_by, CR_VIEW_KILLSTREAKS_TIMES_KILLED_BY, menu_cr_killstreaks_kills, menu_cr_killstreaks_called, CR_TAB_KILLSTREAKS, (dvarString("ui_combatMatchesViewMenuName")), (dvarString("ui_combatContractsViewMenuName")), ;, ; ) - - CR_KILLSTREAKS_TAB_COMMMON_ITEMS - - COMMON_INFO_BAR_ITEMS - - CR_VIEW_TITLE_AND_VIEW_NUMBER - #include "ui/safearea.menu" - } - -/* --------------------Combat record tab "Contracts"------------------------------------------------*/ - menuDef - { - CR_VIEW_MENU_TEMPLATE( menu_cr_contracts_info, CR_VIEW_CONTRACTS_INFO, menu_cr_contracts_info, menu_cr_contracts_info, CR_TAB_CONTRACTS, (dvarString("ui_combatKillstreaksViewMenuName")), (dvarString("ui_combatCareerViewMenuName")), ;, ; ) - - CR_CONTRACTS_TAB_COMMMON_ITEMS - -#define CONTRACTS_SUMMARY_BODY_Y_START (COMBAT_RECORD_BODY_Y_START+184) -#define CONTRACTS_SUMMARY_BODY_WIDTH (COMBAT_RECORD_WIDTH-170) -#define CONTRACTS_SUMMARY_BODY_X_START (-COMBAT_RECORD_WIDTH/2+85) - - /* container box */ - PREPROC_SHADER_DRAW( (CONTRACTS_SUMMARY_BODY_X_START-10) (COMBAT_RECORD_BODY_Y_START+25) (CONTRACTS_SUMMARY_BODY_WIDTH+20) 253 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", 0 0 0 0.1 ) - - /* contracts bg image */ - PREPROC_SHADER_DRAW( (-128) (COMBAT_RECORD_BODY_Y_START+10) 256 256 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "menu_mp_lobby_aar_award_ccontract", 1 1 1 0.1 ) - -#define CONTRACT_PAID_IMAGE_X (CONTRACTS_SUMMARY_BODY_X_START+25) -#define CONTRACT_PAID_IMAGE_Y (COMBAT_RECORD_BODY_Y_START+55) - -#define CONTRACT_EXPIRED_IMAGE_X (CONTRACTS_SUMMARY_BODY_WIDTH/2-180) -#define CONTRACT_EXPIRED_IMAGE_Y (COMBAT_RECORD_BODY_Y_START+50) - - /* image for "paid" */ - PREPROC_SHADER_DRAW( CONTRACT_PAID_IMAGE_X CONTRACT_PAID_IMAGE_Y 120 70 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "contract_completed", 1 1 1 0.4; rotation -15 ) - /* image for "expired" */ - PREPROC_SHADER_DRAW( CONTRACT_EXPIRED_IMAGE_X CONTRACT_EXPIRED_IMAGE_Y 160 93 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "contract_expired", 1 1 1 0.4; rotation -15 ) - - /* Paid contracts */ - PREPROC_TEXT_DRAW_VIS( (CONTRACT_PAID_IMAGE_X+5) (CONTRACT_PAID_IMAGE_Y-20) 110 110 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT( "CONTRACTS_COMPLETED" ), - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1 ) - /* Failed contracts */ - PREPROC_TEXT_DRAW_VIS( (CONTRACT_EXPIRED_IMAGE_X+10) (CONTRACT_EXPIRED_IMAGE_Y-15) 140 110 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GetCombatRecordFailedContracts() , - TEXTSIZE_SUBTITLE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, 1 ) - - /* BG for "Return on Investment" */ - PREPROC_SHADER_DRAW( (CONTRACTS_SUMMARY_BODY_X_START-10) (CONTRACTS_SUMMARY_BODY_Y_START-6) (CONTRACTS_SUMMARY_BODY_WIDTH+20) 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Return on Investment" */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START CONTRACTS_SUMMARY_BODY_Y_START CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "MPUI_RETURN_ON_INVESTMENT_CAPS" ) + ":", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - - /* CP Return on Investment if greater than 0 */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START CONTRACTS_SUMMARY_BODY_Y_START CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - int( int( GET_STAT( "CONTRACTS_CP_EARNED" ) ) / int( GET_STAT( "CONTRACTS_CP_SPENT" ) ) * 100 )+ " %", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, when( ( int( GET_STAT( "CONTRACTS_CP_SPENT" ) ) != 0 ) ) ) - - /* CP Return on Investment if 0 */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START CONTRACTS_SUMMARY_BODY_Y_START CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "0 %", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, when( ( int( GET_STAT( "CONTRACTS_CP_SPENT" ) ) == 0 ) ) ) - - /* Label for "Contracts Purchased" */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START (CONTRACTS_SUMMARY_BODY_Y_START+20) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "MPUI_CONTRACTS_PURCHASED_CAPS" ) + ":", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Contracts Purchased */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START (CONTRACTS_SUMMARY_BODY_Y_START+20) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT("CONTRACTS_PURCHASED"), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* BG for "Amount Spent" */ - PREPROC_SHADER_DRAW( (CONTRACTS_SUMMARY_BODY_X_START-10) (CONTRACTS_SUMMARY_BODY_Y_START+34) (CONTRACTS_SUMMARY_BODY_WIDTH+20) 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "Amount Spent" */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START (CONTRACTS_SUMMARY_BODY_Y_START+40) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "MPUI_AMOUNT_SPENT_CAPS" ) + ":", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* Amount Spent */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START (CONTRACTS_SUMMARY_BODY_Y_START+40) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@MENU_POINTS", GET_STAT("CONTRACTS_CP_SPENT") ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - - /* Label for "Amount Earned" */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START (CONTRACTS_SUMMARY_BODY_Y_START+60) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "MPUI_AMOUNT_EARNED_CAPS" ) + ":", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* CP Earned */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START (CONTRACTS_SUMMARY_BODY_Y_START+60) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@MENU_POINTS", GET_STAT("CONTRACTS_CP_EARNED") ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - /* BG for "XP Earned" */ - PREPROC_SHADER_DRAW( (CONTRACTS_SUMMARY_BODY_X_START-10) (CONTRACTS_SUMMARY_BODY_Y_START+74) (CONTRACTS_SUMMARY_BODY_WIDTH+20) 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", SUMMARY_DESC_TEXT_BG_COLOR ) - /* Label for "XP Award" */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START (CONTRACTS_SUMMARY_BODY_Y_START+80) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "MPUI_XP_AWARD_CAPS" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, 1 ) - /* XP Earned */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_BODY_X_START (CONTRACTS_SUMMARY_BODY_Y_START+80) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "MPUI_CONTRACT_REWARD_XP", GET_STAT("CONTRACTS_XP_EARNED") ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR, 1 ) - - - -#if 0 - -#undef CR_HORIZONTAL_BAR_GRAPH_HEIGHT -#define CR_HORIZONTAL_BAR_GRAPH_HEIGHT 60 -#undef CR_HORIZONTAL_BAR_GRAPH_WIDTH -#define CR_HORIZONTAL_BAR_GRAPH_WIDTH (COMBAT_RECORD_WIDTH-70) -#undef CR_HORIZONTAL_BAR_GRAPH_X_START -#define CR_HORIZONTAL_BAR_GRAPH_X_START (COMBAT_RECORD_BODY_X_START+20) -#undef CR_HORIZONTAL_BAR_GRAPH_Y_START -#define CR_HORIZONTAL_BAR_GRAPH_Y_START (COMBAT_RECORD_BODY_Y_START+175) - - /* horizontal bar graph */ - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect CR_HORIZONTAL_BAR_GRAPH_X_START CR_HORIZONTAL_BAR_GRAPH_Y_START CR_HORIZONTAL_BAR_GRAPH_WIDTH CR_HORIZONTAL_BAR_GRAPH_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - ownerdraw UI_COMBAT_RECORD_HORIZONTAL_BAR_GRAPH - dvar ui_combatCurrViewNum - visible when( !dvarBool("ui_combatComparisonModeOn") ) - decoration - } - /* vertical axis line */ - PREPROC_SHADER_DRAW_VIS_EX( (CR_HORIZONTAL_BAR_GRAPH_X_START+CR_HORIZONTAL_BAR_GRAPH_WIDTH/2) CR_HORIZONTAL_BAR_GRAPH_Y_START 1 CR_HORIZONTAL_BAR_GRAPH_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "white", 1 1 1 1, - when( !dvarBool("ui_combatComparisonModeOn") ), ; ) - - /* Label for "Failed" */ - PREPROC_TEXT_DRAW_VIS( (CR_HORIZONTAL_BAR_GRAPH_X_START) (CR_HORIZONTAL_BAR_GRAPH_Y_START+CR_HORIZONTAL_BAR_GRAPH_HEIGHT-10) (CR_HORIZONTAL_BAR_GRAPH_WIDTH/2) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_FAILED_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, when( !dvarBool("ui_combatComparisonModeOn") ) ) - - - /* Label for "Completed" */ - PREPROC_TEXT_DRAW_VIS( (CR_HORIZONTAL_BAR_GRAPH_X_START+CR_HORIZONTAL_BAR_GRAPH_WIDTH/2) (CR_HORIZONTAL_BAR_GRAPH_Y_START+CR_HORIZONTAL_BAR_GRAPH_HEIGHT-10) (CR_HORIZONTAL_BAR_GRAPH_WIDTH/2) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CONTRACT_COMPLETED_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, when( !dvarBool("ui_combatComparisonModeOn") ) ) - - /* Total Winnings */ - PREPROC_TEXT_DRAW_VIS( (CR_HORIZONTAL_BAR_GRAPH_X_START+CR_HORIZONTAL_BAR_GRAPH_WIDTH/2) (CR_HORIZONTAL_BAR_GRAPH_Y_START) (CR_HORIZONTAL_BAR_GRAPH_WIDTH/2) 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT( "CONTRACTS_COMPLETED" ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, when( !dvarBool("ui_combatComparisonModeOn") ) ) -#endif - -#define OTHER_PLAYER_CONTRACT_INFO_Y_OFFSET 20 - -#define CONTRACTS_SUMMARY_FRIEND_INFO_X (CONTRACTS_SUMMARY_BODY_X_START-120) - - /* CP Return on Investment for Other Player if greater than 0 */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_FRIEND_INFO_X (CONTRACTS_SUMMARY_BODY_Y_START+OTHER_PLAYER_CONTRACT_INFO_Y_OFFSET-20) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - int( int( GET_STAT_FOR_OTHER_PLAYER( "CONTRACTS_CP_EARNED" ) ) / int( GET_STAT_FOR_OTHER_PLAYER( "CONTRACTS_CP_SPENT" ) ) * 100 )+ " %", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, INFO_BAR_COLOR_FOR_FRIEND 1, when( dvarBool("ui_combatComparisonModeOn") && ( int( GET_STAT_FOR_OTHER_PLAYER( "CONTRACTS_CP_SPENT" ) ) != 0 ) ) ) - - /* CP Return on Investment for Other Player if 0 */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_FRIEND_INFO_X (CONTRACTS_SUMMARY_BODY_Y_START+OTHER_PLAYER_CONTRACT_INFO_Y_OFFSET-20) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "0 %", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, INFO_BAR_COLOR_FOR_FRIEND 1, when( dvarBool("ui_combatComparisonModeOn") && ( int( GET_STAT_FOR_OTHER_PLAYER( "CONTRACTS_CP_SPENT" ) ) == 0 ) ) ) - /* Contracts Purchased for Other Player */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_FRIEND_INFO_X (CONTRACTS_SUMMARY_BODY_Y_START+OTHER_PLAYER_CONTRACT_INFO_Y_OFFSET) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - GET_STAT_FOR_OTHER_PLAYER("CONTRACTS_PURCHASED"), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, INFO_BAR_COLOR_FOR_FRIEND 1, when( dvarBool("ui_combatComparisonModeOn") ) ) - /* Amount Spent for Other Player */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_FRIEND_INFO_X (CONTRACTS_SUMMARY_BODY_Y_START+20+OTHER_PLAYER_CONTRACT_INFO_Y_OFFSET) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@MENU_POINTS", GET_STAT_FOR_OTHER_PLAYER("CONTRACTS_CP_SPENT") ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, INFO_BAR_COLOR_FOR_FRIEND 1, when( dvarBool("ui_combatComparisonModeOn") ) ) - /* CP Earned for Other Player */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_FRIEND_INFO_X (CONTRACTS_SUMMARY_BODY_Y_START+40+OTHER_PLAYER_CONTRACT_INFO_Y_OFFSET) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "@MENU_POINTS", GET_STAT_FOR_OTHER_PLAYER("CONTRACTS_CP_EARNED") ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, INFO_BAR_COLOR_FOR_FRIEND 1, when( dvarBool("ui_combatComparisonModeOn") ) ) - /* XP Earned for Other Player */ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_SUMMARY_FRIEND_INFO_X (CONTRACTS_SUMMARY_BODY_Y_START+60+OTHER_PLAYER_CONTRACT_INFO_Y_OFFSET) CONTRACTS_SUMMARY_BODY_WIDTH 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - locString( "MPUI_CONTRACT_REWARD_XP", GET_STAT_FOR_OTHER_PLAYER("CONTRACTS_XP_EARNED") ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, INFO_BAR_COLOR_FOR_FRIEND 1, when( dvarBool("ui_combatComparisonModeOn") ) ) - - RANK_AND_GAMERTAG_OF_COMPARED_PLAYER( (-160), ( dvarBool("ui_combatComparisonModeOn") ) ) -#ifdef CONSOLE - COMPARE_BUTTON( 1 ) -#endif //#ifdef CONSOLE - // COMPARE_FRIENDS_BUTTON( 1 ) - NEW_FRAME_COMPARE_FRIEND_BUTTON_ACTION( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, "@PATCH_TOGGLE_COMPARE_FRIENDS", COMPARE_FRIENDS_ACTION , when( !dvarbool( "ui_showFriendsCombatRecord" ) ) ) - HIDE_COMPARISON_BUTTON( 1 ) - - -NEW_FRAME_BACK_BUTTON_ACTION( COMBAT_RECORD_WIDTH, COMBAT_RECORD_HEIGHT, ON_ESC_ACTION ) - /* Other Player rank icon */ - PREPROC_SHADER_DRAW_VIS_EX( (CONTRACTS_SUMMARY_BODY_X_START+265) (CONTRACTS_SUMMARY_BODY_Y_START+OTHER_PLAYER_CONTRACT_INFO_Y_OFFSET-45) 16 16 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN;, - tablelookup( "mp/rankIconTable.csv", 0, GET_STAT_FOR_OTHER_PLAYER( "RANK" ), 1+GET_STAT_FOR_OTHER_PLAYER( "PLEVEL" ) ), 1 1 1 0, - when( dvarBool("ui_combatComparisonModeOn") );, - name "otherPlayerName"; ANIM_STATES( 1 1 1 ) ) - - #include "ui/safearea.menu" - } - -#define DELAY_AFTER_DOWNLOADING 400 - -#undef SELECTION_LIST_MENU_X_START -#define SELECTION_LIST_MENU_X_START (SMALL_CENTER_POPUP_WIDTH/4) -#undef SELECTION_LIST_MENU_Y_START -#define SELECTION_LIST_MENU_Y_START (0) -#undef SELECTION_LIST_MENU_WIDTH -#define SELECTION_LIST_MENU_WIDTH (SMALL_CENTER_POPUP_WIDTH/2 + 10) -#undef SELECTION_LIST_MENU_HEIGHT -#define SELECTION_LIST_MENU_HEIGHT SMALL_CENTER_POPUP_HEIGHT - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - deactivateBlur; \ - execNow "set ui_combatComparisonModeOn 0"; \ - setLocalVarBool ui_centerPopup 0; \ - play uin_navigation_sys_close; \ - close self; \ - ADJUST_OTHER_PLAYER_INFO_BARS( (dvarString("ui_combatCurrentViewMenuName")) ) - - menuDef - { - name menu_cr_friends_selection - visible 1 - fullscreen 0 - rect (-SMALL_CENTER_POPUP_WIDTH/2) (-SMALL_CENTER_POPUP_HEIGHT/2) SMALL_CENTER_POPUP_WIDTH SMALL_CENTER_POPUP_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - backcolor 0.2 0.2 0.2 0.8 - style WINDOW_STYLE_FRAMED - frame 16 0.5 FRAME_SIDE_ALL - background "menu_mp_lobby_frame_circle" - focusColor COLOR_FOCUSED - priority MENU_PRI_POPUP - popup - onOpen - { - activateBlur; - setLocalVarBool ui_centerPopup 1; - setDvar ui_friendsSelectionBoxOpen "1"; - play uin_navigation_sys_open; - } - onClose - { - deactivateBlur; - setDvar ui_friendsSelectionBoxOpen "0"; - CENTER_POPUP_ON_CLOSE - setLocalVarBool ui_centerPopup 0; - } - onESC - { - ON_ESC_ACTION - } - - PREPROC_SHADER_DRAW_VIS_EX( 0 0 SMALL_CENTER_POPUP_WIDTH (SMALL_CENTER_POPUP_HEIGHT-POPUP_INNER_BG_PAD), "menu_mp_lobby_frame_fade", POPUP_GLOW_WHITE, 1, ; ) - /* title text for "Select friend to compare" */ - PREPROC_TEXT_DRAW( 16.5 (SELECTION_LIST_MENU_Y_START+16.5) SMALL_CENTER_POPUP_WIDTH 10 HORIZONTAL_ALIGN_CENTER CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CR_SELECT_FRIEND_TO_COMPARE", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR ) - - /* button prompts */ -#ifdef CONSOLE - itemDef - { - type ITEM_TYPE_TEXT - rect 0 (SELECTION_LIST_MENU_HEIGHT+16.5) 0 0 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - text "@PLATFORM_CANCEL_COMPARE" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SMALL - textalign ITEM_ALIGN_BOTTOM_LEFT - visible 1 - decoration - } - -#else //#ifdef CONSOLE - SIMPLE_CHOICE_BUTTON_SOUND( NEW_FRAME_DEFAULT_TITLE_X_OFFSET (SELECTION_LIST_MENU_HEIGHT+4) 70 20 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "@PLATFORM_CANCEL_COMPARE", ITEM_ALIGN_MIDDLE_CENTER, ON_ESC_ACTION ) -#endif //#ifdef CONSOLE - -#ifdef CONSOLE -#endif // #ifdef CONSOLE - - // List - itemDef - { - name combat_record_friends_list - type ITEM_TYPE_LISTBOX - feeder FEEDER_FRIENDS_STATS_COMPARE - rect (SELECTION_LIST_MENU_X_START+5) (SELECTION_LIST_MENU_Y_START+40) (SELECTION_LIST_MENU_WIDTH-10) (SELECTION_LIST_MENU_HEIGHT-65) CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - origin 0 0 - elementwidth 30 - elementheight 20 - elementtype LISTBOX_TEXT - textstyle ITEM_TEXTSTYLE_NORMAL - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SMALL - textalignx 12 - forecolor 1 1 1 1 - focusColor CHOICE_TEXTCOLOR - disableColor CHOICE_TEXTCOLOR - selectBorder 0.8 0.95 1 0 - outlinecolor 1 1 1 1 - elementBackgroundColor NEW_FRAME_LT_GREY_RGB 0.2 - selectIcon SELECT_ICON - elementHighlightColor 0 0 0 1 - noBlinkingHighlight - /* x y w h len horzAlign vertAlign*/ - userarea 2 23 2 16 16 32 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* Rank Icon */ - 31 -1 50 20 24 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* GamerTag */ - - visible 1 - onfocus - { - play CHOICE_FOCUS_SOUND; - exec "updateListboxPos menu_cr_friends_selection"; - } - onListboxSelectionChange - { - play CHOICE_FOCUS_SOUND; - } - doubleclick - { - play CHOICE_FOCUS_SOUND; - execNow set selectedPlayerXuid ( getfeederdata( "xuid" ) ); - execNow set selectedFriendName ( getfeederdata( "name" ) ); - if( dvarString( "selectedPlayerXuid" ) != 0 ) - { - execnow getServiceRecord ( dvarString( "selectedPlayerXuid" ) ); - close self; - ITEM_ANIMATE( (dvarString( "ui_combatCurrentViewMenuName" )), "dummy", updateViewAfterDownloading, DELAY_AFTER_DOWNLOADING ); - } - else - { - close self; - } - } - execKeyInt BUTTON_X - { - } - } - } -} diff --git a/mods/patch_mp/ui_mp/custom_game_create.menu b/mods/patch_mp/ui_mp/custom_game_create.menu deleted file mode 100644 index 75c5060..0000000 --- a/mods/patch_mp/ui_mp/custom_game_create.menu +++ /dev/null @@ -1,903 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui_mp/custom_mode.inc" - -#define CHOICE_SEP_1 2 -#define CHOICE_SEP_2 4 -#define CHOICE_SEP_3 13 - -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui_mp/common_game_options.inc" -#include "ui/choices_setup_common.menu" -#include "ui/choices_setup_popmenu.menu" - -#include "ui_mp/custom_mode_layout.inc" - -#undef NEW_FRAME_BUTTON_NAME -#define NEW_FRAME_BUTTON_NAME "custom_game_create_" - -#undef CHOICE_BUTTON_NAME -#define CHOICE_BUTTON_NAME NEW_FRAME_BUTTON_NAME - -#undef MENUDEF_NAME -#define MENUDEF_NAME custom_game_create - -#undef CHOICE_GROUP -#define CHOICE_GROUP "custom_game" - -#ifdef PC - #undef CHOICE_TEXTSIZE - #define CHOICE_TEXTSIZE TEXTSIZE_SMALL -#endif //PC - -#define CHOICE1_TEXT "@MPUI_RULES_TIME_LIMIT_CAPS" -#define CHOICE1_DESC "@CUSTOM_GAME_TIME_LIMIT_DESC" -#define CHOICE1_DVAR "custom_timelimit" -#define CHOICE1_DVARTEXT CHOICE1_DVAR"_text" -#define CHOICE1_SHOW 1 -#define CHOICE1_STR1 "@MPUI_RULES_UNLIMITED_CAPS" -#define CHOICE1_STR2 "@MPUI_RULES_2_5MINUTES_CAPS" -#define CHOICE1_STR3 "@MPUI_RULES_3MINUTES_CAPS" -#define CHOICE1_STR4 "@MPUI_RULES_5MINUTES_CAPS" -#define CHOICE1_STR5 "@MPUI_RULES_8MINUTES_CAPS" -#define CHOICE1_STR6 "@MPUI_RULES_10MINUTES_CAPS" -#define CHOICE1_STR7 "@MPUI_RULES_15MINUTES_CAPS" -#define CHOICE1_STR8 "@MPUI_RULES_20MINUTES_CAPS" -#define CHOICE1_STR9 "@MPUI_RULES_30MINUTES_CAPS" -#define CHOICE1_STR10 "" -#define CHOICE1_STR11 "" -#define CHOICE1_STR12 "" -#define CHOICE1_VAL1 0 -#define CHOICE1_VAL2 2.5 -#define CHOICE1_VAL3 3 -#define CHOICE1_VAL4 5 -#define CHOICE1_VAL5 8 -#define CHOICE1_VAL6 10 -#define CHOICE1_VAL7 15 -#define CHOICE1_VAL8 20 -#define CHOICE1_VAL9 30 -#define CHOICE1_VAL10 0 -#define CHOICE1_VAL11 0 -#define CHOICE1_VAL12 0 -#define CHOICE1_EXEC ; -#define CHOICE1_STRLIST { CHOICE1_STR1 CHOICE1_VAL1 CHOICE1_STR2 CHOICE1_VAL2 CHOICE1_STR3 CHOICE1_VAL3 CHOICE1_STR4 CHOICE1_VAL4 CHOICE1_STR5 CHOICE1_VAL5 CHOICE1_STR6 CHOICE1_VAL6 CHOICE1_STR7 CHOICE1_VAL7 CHOICE1_STR8 CHOICE1_VAL8 CHOICE1_STR9 CHOICE1_VAL9 CHOICE1_STR10 CHOICE1_VAL10 CHOICE1_STR11 CHOICE1_VAL11 CHOICE1_STR12 CHOICE1_VAL12 } -#define CHOICE1_NUMVALS 9 -#define CHOICE1_POPUP 1 - -#define CHOICE2_TEXT "@MPUI_RULES_SCORE_LIMIT_CAPS" -#define CHOICE2_DESC "@CUSTOM_GAME_SCORE_LIMIT_DESC" -#define CHOICE2_DVAR "custom_scorelimit" -#define CHOICE2_DVARTEXT CHOICE2_DVAR"_text" -#define CHOICE2_STR1 "@MPUI_RULES_UNLIMITED_CAPS" -#define CHOICE2_STR2 "@MPUI_RULES_30POINTS_CAPS" -#define CHOICE2_STR3 "@MPUI_RULES_50POINTS_CAPS" -#define CHOICE2_STR4 "@MPUI_RULES_70POINTS_CAPS" -#define CHOICE2_STR5 "@MPUI_RULES_100POINTS_CAPS" -#define CHOICE2_STR6 "@MPUI_RULES_200POINTS_CAPS" -#define CHOICE2_STR7 "@MPUI_RULES_250POINTS_CAPS" -#define CHOICE2_STR8 "@MPUI_RULES_300POINTS_CAPS" -#define CHOICE2_STR9 "@MPUI_RULES_500POINTS_CAPS" -#define CHOICE2_STR10 "@MPUI_RULES_700POINTS_CAPS" -#define CHOICE2_STR11 "@MPUI_RULES_750POINTS_CAPS" -#define CHOICE2_STR12 "@MPUI_RULES_1000POINTS_CAPS" -#define CHOICE2_VAL1 0 -#define CHOICE2_VAL2 30 -#define CHOICE2_VAL3 50 -#define CHOICE2_VAL4 70 -#define CHOICE2_VAL5 100 -#define CHOICE2_VAL6 200 -#define CHOICE2_VAL7 250 -#define CHOICE2_VAL8 300 -#define CHOICE2_VAL9 500 -#define CHOICE2_VAL10 700 -#define CHOICE2_VAL11 750 -#define CHOICE2_VAL12 1000 -#define CHOICE2_EXEC ; -#define CHOICE2_STRLIST { CHOICE2_STR1 CHOICE2_VAL1 CHOICE2_STR2 CHOICE2_VAL2 CHOICE2_STR3 CHOICE2_VAL3 CHOICE2_STR4 CHOICE2_VAL4 CHOICE2_STR5 CHOICE2_VAL5 CHOICE2_STR6 CHOICE2_VAL6 CHOICE2_STR7 CHOICE2_VAL7 CHOICE2_STR8 CHOICE2_VAL8 CHOICE2_STR9 CHOICE2_VAL9 CHOICE2_STR10 CHOICE2_VAL10 CHOICE2_STR11 CHOICE2_VAL11 CHOICE2_STR12 CHOICE2_VAL12 } -#define CHOICE2_NUMVALS 12 -#define CHOICE2_POPUP 1 -#define CHOICE2_VIS ( dvarString( ui_gametype ) == "dom" || dvarString( ui_gametype ) == "koth" ) - -#define CHOICE2_ALT_TEXT "@MPUI_RULES_SCORE_LIMIT_CAPS" -#define CHOICE2_ALT_DVAR "custom_scorelimit" -#define CHOICE2_ALT_DVARTEXT CHOICE2_ALT_DVAR"_text" -#define CHOICE2_ALT_STR1 "@MPUI_RULES_UNLIMITED_CAPS" -#define CHOICE2_ALT_STR2 "@MPUI_RULES_750POINTS_CAPS" -#define CHOICE2_ALT_STR3 "@MPUI_RULES_1000POINTS_CAPS" -#define CHOICE2_ALT_STR4 "@MPUI_RULES_1500POINTS_CAPS" -#define CHOICE2_ALT_STR5 "@MPUI_RULES_2500POINTS_CAPS" -#define CHOICE2_ALT_STR6 "@MPUI_RULES_3000POINTS_CAPS" -#define CHOICE2_ALT_STR7 "@MPUI_RULES_5000POINTS_CAPS" -#define CHOICE2_ALT_STR8 "@MPUI_RULES_7000POINTS_CAPS" -#define CHOICE2_ALT_STR9 "@MPUI_RULES_7500POINTS_CAPS" -#define CHOICE2_ALT_STR10 "@MPUI_RULES_10000POINTS_CAPS" -#define CHOICE2_ALT_STR11 "@MPUI_RULES_15000POINTS_CAPS" -#define CHOICE2_ALT_STR12 "@MPUI_RULES_30000POINTS_CAPS" -#define CHOICE2_ALT_VAL1 0 -#define CHOICE2_ALT_VAL2 750 -#define CHOICE2_ALT_VAL3 1000 -#define CHOICE2_ALT_VAL4 1500 -#define CHOICE2_ALT_VAL5 2500 -#define CHOICE2_ALT_VAL6 3000 -#define CHOICE2_ALT_VAL7 5000 -#define CHOICE2_ALT_VAL8 7000 -#define CHOICE2_ALT_VAL9 7500 -#define CHOICE2_ALT_VAL10 10000 -#define CHOICE2_ALT_VAL11 15000 -#define CHOICE2_ALT_VAL12 30000 -#define CHOICE2_ALT_EXEC ; -#define CHOICE2_ALT_STRLIST { CHOICE2_ALT_STR1 CHOICE2_ALT_VAL1 CHOICE2_ALT_STR2 CHOICE2_ALT_VAL2 CHOICE2_ALT_STR3 CHOICE2_ALT_VAL3 CHOICE2_ALT_STR4 CHOICE2_ALT_VAL4 CHOICE2_ALT_STR5 CHOICE2_ALT_VAL5 CHOICE2_ALT_STR6 CHOICE2_ALT_VAL6 CHOICE2_ALT_STR7 CHOICE2_ALT_VAL7 CHOICE2_ALT_STR8 CHOICE2_ALT_VAL8 CHOICE2_ALT_STR9 CHOICE2_ALT_VAL9 CHOICE2_ALT_STR10 CHOICE2_ALT_VAL10 CHOICE2_ALT_STR11 CHOICE2_ALT_VAL11 CHOICE2_ALT_STR12 CHOICE2_ALT_VAL12 } -#define CHOICE2_ALT_NUMVALS 12 -#define CHOICE2_ALT_POPUP 1 -#define CHOICE2_ALT_VIS ( dvarString( ui_gametype ) == "hc_tdm" || dvarString( ui_gametype ) == "tdm" ) - -#define IS_CHOICE2_VIS ( CHOICE2_VIS || CHOICE2_ALT_VIS ) - -#undef ON_ESC -#define ON_ESC \ - execNow checkIfCustomGametypeChanged; \ - close self; - -{ - menuDef - { - name custom_game_create - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - visible when( MenuHasFocus() || dvarBool( ui_custom_save_to_file_share ) ) - onOpen - { - execnow ui_animate custom_game_create * highlightOff 0; - activateBlur; - focusFirst; - execNow beginCustomGametypeChanges; - - if( IS_CHOICE2_VIS ) - { - setLocalVarInt custom_shift_options_up 0; - } - else - { - setLocalVarInt custom_shift_options_up 1; - } - } - onFocus - { - execNow checkIfCustomGametypeChanged; - } - onEsc - { - ON_ESC - } - onClose - { - deactivateBlur; - - execNow endCustomGametypeChanges; - if( dvarBool( "ui_custom_haschanged" ) ) - { - setdvar customGameMode 1; - execNow "xupdatepartystate"; - } - setLocalVarBool ui_choice_hideaccept 0; - } - - NEW_FRAME( CUSTOM_MODE_FRAME_WIDTH, CUSTOM_MODE_FRAME_HEIGHT ) - NEW_FRAME_TITLE( CUSTOM_MODE_FRAME_WIDTH, CUSTOM_MODE_FRAME_HEIGHT, "@CUSTOM_GAME_CREATE_CAPS", 1 ) - NEW_FRAME_SUBTITLE( CUSTOM_MODE_FRAME_WIDTH, CUSTOM_MODE_FRAME_HEIGHT, CUSTOM_GAMETYPE_NAME, 1 ) - - CUSTOM_MODE_BACKGROUND_WATERMARK - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 1, CHOICE1_TEXT, CHOICE1_DVAR, CHOICE1_STRLIST, exec checkIfCustomGametypeChanged; CHOICE1_EXEC, SET_CHOICE_DESC( "", CHOICE1_DESC, "" ) setLocalVarBool ui_choice_hideaccept 1;, CLEAR_CHOICE_DESC setLocalVarBool ui_choice_hideaccept 0;, 1 ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 2, CHOICE2_TEXT, CHOICE2_DVAR, CHOICE2_STRLIST, exec checkIfCustomGametypeChanged; CHOICE2_EXEC, SET_CHOICE_DESC( "", CHOICE2_DESC, "" ) setLocalVarBool ui_choice_hideaccept 1;, CLEAR_CHOICE_DESC setLocalVarBool ui_choice_hideaccept 0;, CHOICE2_VIS ) - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 2, CHOICE2_ALT_TEXT, CHOICE2_ALT_DVAR, CHOICE2_ALT_STRLIST, exec checkIfCustomGametypeChanged; CHOICE2_ALT_EXEC, SET_CHOICE_DESC( "", CHOICE2_DESC, "" ) setLocalVarBool ui_choice_hideaccept 1;, CLEAR_CHOICE_DESC setLocalVarBool ui_choice_hideaccept 0;, CHOICE2_ALT_VIS ) - - #define SHOULD_SHIFT_CHOICES_UP ( localVarInt( custom_shift_options_up ) > 0 ) - - #define GAME_MODE_RULES_ACTION \ - exec openMenu ( "custom_settings_" + dvarString( "ui_gametype" ) ); - - #define BUTTON_3( itemIndex, visArg ) \ - CUSTOM_BUTTON( itemIndex, "@CUSTOM_GAME_MODE_OPTIONS_CAPS", GAME_MODE_RULES_ACTION, "@CUSTOM_GAME_MODE_OPTIONS_DESC", "", visArg ) - - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 1 - #define CHOICE_SEP_2 3 - #include "ui/choices_sep_spacing.inc" - BUTTON_3( 2, SHOULD_SHIFT_CHOICES_UP ) - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 2 - #define CHOICE_SEP_2 4 - #include "ui/choices_sep_spacing.inc" - BUTTON_3( 3, !SHOULD_SHIFT_CHOICES_UP ) - - #define BUTTON_4( itemIndex, visArg ) \ - CUSTOM_BUTTON( itemIndex, "@CUSTOM_GENERAL_OPTIONS_CAPS", open "custom_settings_general", "@CUSTOM_GENERAL_OPTIONS_DESC", "", visArg ) - - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 1 - #define CHOICE_SEP_2 3 - #include "ui/choices_sep_spacing.inc" - BUTTON_4( 3, SHOULD_SHIFT_CHOICES_UP ) - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 2 - #define CHOICE_SEP_2 4 - #include "ui/choices_sep_spacing.inc" - BUTTON_4( 4, !SHOULD_SHIFT_CHOICES_UP ) - - #define CUSTOM_OPTION_HIDEACCEPT( dvarName, dvarValue ) \ - if( dvarInt( dvarName ) == dvarValue ) \ - { \ - setLocalVarBool ui_choice_hideaccept 0; \ - } \ - else \ - { \ - setLocalVarBool ui_choice_hideaccept 1; \ - } - - #define CUSTOM_OPTION_SHOW_DISABLED_TOOLTIP( dvarName, enabledValue, disabledString, enabledString ) \ - if( dvarInt( dvarName ) != enabledValue ) \ - { \ - execnow set ui_choice_desc ( disabledString ); \ - } \ - else \ - { \ - execnow set ui_choice_desc ( enabledString ); \ - } - - #define CUSTOM_OPTION_LEAVE_FOCUS \ - CLEAR_CHOICE_DESC \ - setLocalVarBool ui_choice_hideaccept 0; - - #define CUSTOM_OPTION_EXTRA( dvarName, dvarValue, menuName ) \ - execKeyInt BUTTON_A \ - { \ - if( dvarInt( dvarName ) == dvarValue ) \ - { \ - open menuName; \ - } \ - } - - #define CUSTOM_CLASS_ON_FOCUS \ - SET_CHOICE_DESC( "", "@CUSTOM_CLASS_EDITOR_DESC", "" ) \ - CUSTOM_OPTION_HIDEACCEPT( custom_class_mode, 1 ) \ - CUSTOM_OPTION_SHOW_DISABLED_TOOLTIP( custom_class_mode, 1, "@CUSTOM_CLASS_EDITOR_DISABLED_DESC", "@CUSTOM_CLASS_EDITOR_DESC" ) - - #define CUSTOM_CLASS_ACTION \ - CUSTOM_OPTION_SHOW_DISABLED_TOOLTIP( custom_class_mode, 1, "@CUSTOM_CLASS_EDITOR_DISABLED_DESC", "@CUSTOM_CLASS_EDITOR_DESC" ) \ - CUSTOM_OPTION_HIDEACCEPT( custom_class_mode, 1 ) \ - if( dvarInt( custom_class_mode ) == 1 ) \ - { \ - execNow reset scr_player_healthregentime; \ - } \ - exec checkIfCustomGametypeChanged; - - #define BUTTON_5( itemIndex, visArg ) \ - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS_EX(itemIndex, "@CUSTOM_CLASS_EDITOR_CAPS", custom_class_mode, \ - { "@CUSTOM_ALLOW_PLAYER_CLASSES_CAPS" 0 "@CUSTOM_CUSTOM_CLASSES_CAPS" 1 }, \ - CUSTOM_CLASS_ACTION, \ - CUSTOM_CLASS_ON_FOCUS, CUSTOM_OPTION_LEAVE_FOCUS, visArg, ;, \ - CUSTOM_OPTION_EXTRA( custom_class_mode, 1, "custom_classes" ); ) - - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 1 - #define CHOICE_SEP_2 3 - #include "ui/choices_sep_spacing.inc" - BUTTON_5( 4, SHOULD_SHIFT_CHOICES_UP ) -#ifdef PC - SIMPLE_CHOICE_RECT_OFFSET_BUTTON_SOUND( 4, 6, "@PLATFORM_EDIT", ITEM_ALIGN_MIDDLE_CENTER, open "custom_classes", when(dvarInt(custom_class_mode) == 1 && SHOULD_SHIFT_CHOICES_UP ), 20, CHOICE_SIZE_Y ) -#endif //PC - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 2 - #define CHOICE_SEP_2 4 - #include "ui/choices_sep_spacing.inc" - BUTTON_5( 5, !SHOULD_SHIFT_CHOICES_UP ) -#ifdef PC - SIMPLE_CHOICE_RECT_OFFSET_BUTTON_SOUND( 5, 6, "@PLATFORM_EDIT", ITEM_ALIGN_MIDDLE_CENTER, open "custom_classes", when(dvarInt(custom_class_mode) == 1 && !SHOULD_SHIFT_CHOICES_UP ), 20, CHOICE_SIZE_Y ) -#endif //PC - - #define CUSTOM_KILLSTREAK_ON_FOCUS \ - SET_CHOICE_DESC( "", "@CUSTOM_KILLSTREAK_EDITOR_DESC", "" ) \ - CUSTOM_OPTION_HIDEACCEPT( custom_killstreak_mode, 2 ) \ - CUSTOM_OPTION_SHOW_DISABLED_TOOLTIP( custom_killstreak_mode, 2, "@CUSTOM_KILLSTREAK_EDITOR_DISABLED_DESC", "@CUSTOM_KILLSTREAK_EDITOR_DESC" ) - - #define CUSTOM_KILLSTREAK_ACTION \ - CUSTOM_OPTION_SHOW_DISABLED_TOOLTIP( custom_killstreak_mode, 2, "@CUSTOM_KILLSTREAK_EDITOR_DISABLED_DESC", "@CUSTOM_KILLSTREAK_EDITOR_DESC" ) \ - CUSTOM_OPTION_HIDEACCEPT( custom_killstreak_mode, 2 ) \ - exec checkIfCustomGametypeChanged; - - #define BUTTON_6( itemIndex, visArg ) \ - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS_EX(itemIndex, "@CUSTOM_KILLSTREAK_EDITOR", custom_killstreak_mode, \ - { "@MPUI_ALLOW_PLAYER_KILLSTREAKS_CAPS" 0 "@MPUI_NO_KILLSTREAKS_CAPS" 1 "@MPUI_CUSTOM_KILLSTREAKS_CAPS" 2 }, \ - CUSTOM_KILLSTREAK_ACTION, \ - CUSTOM_KILLSTREAK_ON_FOCUS, CUSTOM_OPTION_LEAVE_FOCUS, visArg, ;, \ - CUSTOM_OPTION_EXTRA( custom_killstreak_mode, 2, "custom_killstreaks" ); ) - - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 1 - #define CHOICE_SEP_2 3 - #include "ui/choices_sep_spacing.inc" - BUTTON_6( 5, SHOULD_SHIFT_CHOICES_UP ) -#ifdef PC - SIMPLE_CHOICE_RECT_OFFSET_BUTTON_SOUND( 5, 6, "@PLATFORM_EDIT", ITEM_ALIGN_MIDDLE_CENTER, open "custom_killstreaks", when(dvarInt(custom_killstreak_mode) == 2 && SHOULD_SHIFT_CHOICES_UP ), 20, CHOICE_SIZE_Y ) -#endif //PC - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 2 - #define CHOICE_SEP_2 4 - #include "ui/choices_sep_spacing.inc" - BUTTON_6( 6, !SHOULD_SHIFT_CHOICES_UP ) -#ifdef PC - SIMPLE_CHOICE_RECT_OFFSET_BUTTON_SOUND( 6, 6, "@PLATFORM_EDIT", ITEM_ALIGN_MIDDLE_CENTER, open "custom_killstreaks", when(dvarInt(custom_killstreak_mode) == 2 && !SHOULD_SHIFT_CHOICES_UP ), 20, CHOICE_SIZE_Y ) -#endif //PC - - #define CUSTOM_PERK_ON_FOCUS \ - SET_CHOICE_DESC( "", "@CUSTOM_PERK_EDITOR_DESC", "" ) \ - CUSTOM_OPTION_HIDEACCEPT( scr_game_perks, 1 ) \ - CUSTOM_OPTION_SHOW_DISABLED_TOOLTIP( scr_game_perks, 1, "@CUSTOM_PERK_EDITOR_DISABLED_DESC", "@CUSTOM_PERK_EDITOR_DESC" ) - - #define CUSTOM_PERK_ACTION \ - CUSTOM_OPTION_SHOW_DISABLED_TOOLTIP( scr_game_perks, 1, "@CUSTOM_PERK_EDITOR_DISABLED_DESC", "@CUSTOM_PERK_EDITOR_DESC" ) \ - CUSTOM_OPTION_HIDEACCEPT( scr_game_perks, 1 ) \ - exec checkIfCustomGametypeChanged; - - #define BUTTON_7( itemIndex, visArg ) \ - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS_EX(itemIndex, "@CUSTOM_PERK_EDITOR_CAPS", scr_game_perks, \ - { "@CUSTOM_DISABLE_PERKS_CAPS" 0 "@CUSTOM_ENABLE_PERKS_CAPS" 1 }, \ - CUSTOM_PERK_ACTION, \ - CUSTOM_PERK_ON_FOCUS, CUSTOM_OPTION_LEAVE_FOCUS, visArg, ;, \ - CUSTOM_OPTION_EXTRA( scr_game_perks, 1, "custom_specialty_editor" ); ) - - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 1 - #define CHOICE_SEP_2 3 - #include "ui/choices_sep_spacing.inc" - BUTTON_7( 6, SHOULD_SHIFT_CHOICES_UP ) -#ifdef PC - SIMPLE_CHOICE_RECT_OFFSET_BUTTON_SOUND( 6, 6, "@PLATFORM_EDIT", ITEM_ALIGN_MIDDLE_CENTER, open "custom_specialty_editor", when(dvarInt(scr_game_perks) == 1 && SHOULD_SHIFT_CHOICES_UP ), 20, CHOICE_SIZE_Y ) -#endif //PC - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #define CHOICE_SEP_1 2 - #define CHOICE_SEP_2 4 - #include "ui/choices_sep_spacing.inc" - BUTTON_7( 7, !SHOULD_SHIFT_CHOICES_UP ) -#ifdef PC - SIMPLE_CHOICE_RECT_OFFSET_BUTTON_SOUND( 7, 6, "@PLATFORM_EDIT", ITEM_ALIGN_MIDDLE_CENTER, open "custom_specialty_editor", when(dvarInt(scr_game_perks) == 1 && !SHOULD_SHIFT_CHOICES_UP ), 20, CHOICE_SIZE_Y ) -#endif //PC - - // Game Recording Option (on/off) - #define BUTTON_8( itemIndex, visArg ) \ - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( itemIndex, "@CUSTOM_GAME_RECORDING_CAPS", demo_recordPrivateMatch, \ - { "@MENU_DISABLED_CAPS" 0 "@MENU_ENABLED_CAPS" 1 }, \ - play CHOICE_FOCUS_SOUND;, \ - SET_CHOICE_DESC( "", "@CUSTOM_GAME_RECORDING_DESC", "" ), \ - CLEAR_CHOICE_DESC, \ - visArg && ( dvarInt( xblive_privatematch ) ) ) - - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #undef CHOICE_SEP_3 - #define CHOICE_SEP_1 1 - #define CHOICE_SEP_2 3 - #define CHOICE_SEP_3 6 - #include "ui/choices_sep_spacing.inc" - BUTTON_8( 7, SHOULD_SHIFT_CHOICES_UP ) - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #undef CHOICE_SEP_3 - #define CHOICE_SEP_1 2 - #define CHOICE_SEP_2 4 - #define CHOICE_SEP_3 7 - #include "ui/choices_sep_spacing.inc" - BUTTON_8( 8, !SHOULD_SHIFT_CHOICES_UP ) - - PREPROC_TEXT_DRAW_VIS_EX( NEW_FRAME_CHOICE_X_START (NEW_FRAME_CHOICE_Y_START + 230) CHOICE_SIZE_X 60 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@CUSTOM_WARN_DEMO_SIZE", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_ORANGE_RGB 1, - when( dvarInt( xblive_privatematch ) && dvarBool( demo_recordPrivateMatch ) ), autowrapped ); - -#ifdef PC - // Pregame Enabled (yes/no) - #define BUTTON_9( itemIndex, visArg ) \ - FRAME_CHOICE_DVARYESNO_FOCUS_VIS_EX( itemIndex, "@PATCH_PREGAME_ENABLED_CAPS", g_pregame_enabled, \ - play CHOICE_FOCUS_SOUND;, \ - SET_CHOICE_DESC( "", "@PLATFORM_PREGAME_ENABLED_DESC", "" );, \ - CLEAR_CHOICE_DESC, \ - visArg, ; ) - - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #undef CHOICE_SEP_3 - #undef CHOICE_SEP_4 - #define CHOICE_SEP_1 1 - #define CHOICE_SEP_2 3 - #define CHOICE_SEP_3 6 - #define CHOICE_SEP_4 7 - #include "ui/choices_sep_spacing.inc" - BUTTON_9( 8, SHOULD_SHIFT_CHOICES_UP ) - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #undef CHOICE_SEP_3 - #undef CHOICE_SEP_4 - #define CHOICE_SEP_1 2 - #define CHOICE_SEP_2 4 - #define CHOICE_SEP_3 7 - #define CHOICE_SEP_4 8 - #include "ui/choices_sep_spacing.inc" - BUTTON_9( 9, !SHOULD_SHIFT_CHOICES_UP ) - - // Pregame Minplayers (edit) - #define BUTTON_10( itemIndex, visArg ) \ - FRAME_CHOICE_DVAREDIT_NUMERIC_FOCUS_VIS_EX( itemIndex, "@PATCH_PREGAME_MINPLAYERS_CAPS", party_minplayers, 3, \ - ;, \ - SET_CHOICE_DESC( "", "@PLATFORM_PREGAME_MINPLAYERS_DESC", "" );, \ - CLEAR_CHOICE_DESC, \ - visArg, ; ) - - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #undef CHOICE_SEP_3 - #undef CHOICE_SEP_4 - #define CHOICE_SEP_1 1 - #define CHOICE_SEP_2 3 - #define CHOICE_SEP_3 6 - #define CHOICE_SEP_4 7 - #include "ui/choices_sep_spacing.inc" - BUTTON_10( 9, SHOULD_SHIFT_CHOICES_UP ) - #undef CHOICE_SEP_1 - #undef CHOICE_SEP_2 - #undef CHOICE_SEP_3 - #undef CHOICE_SEP_4 - #define CHOICE_SEP_1 2 - #define CHOICE_SEP_2 4 - #define CHOICE_SEP_3 7 - #define CHOICE_SEP_4 8 - #include "ui/choices_sep_spacing.inc" - BUTTON_10( 10, !SHOULD_SHIFT_CHOICES_UP ) - - CUSTOM_BUTTON( 14, "@CUSTOM_REVERT_CHANGES_CAPS", open popup_custom_confirm_revert;, "@CUSTOM_REVERT_CHANGES_DESC", "", 1 ) -#endif //#ifdef PC - - CUSTOM_FRAME_HINT( ui_choice_desc ) - - -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( CUSTOM_MODE_FRAME_WIDTH, CUSTOM_MODE_FRAME_HEIGHT, ON_ESC ) - SAVE_TO_FILESHARE_BUTTON_NEW_FRAME_ACTION( CUSTOM_MODE_FRAME_WIDTH, CUSTOM_MODE_FRAME_HEIGHT ) -#else //#ifdef PC - NEW_FRAME_BACK_BUTTON( CUSTOM_MODE_FRAME_WIDTH, CUSTOM_MODE_FRAME_HEIGHT ) - SAVE_TO_FILESHARE_BUTTON_NEW_FRAME( CUSTOM_MODE_FRAME_WIDTH, CUSTOM_MODE_FRAME_HEIGHT ) -#endif //#ifdef PC - -#ifndef PC - itemDef - { - type ITEM_TYPE_BUTTON - rect ( 180 ) ( CUSTOM_MODE_FRAME_HEIGHT / 2 + 18 ) 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - text "@CUSTOM_BUTTON_REVERT_CHANGES" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_LEFT - execkeyint BUTTON_Y - { - open popup_custom_confirm_revert; - } - visible 1 - decoration - } - - CUSTOM_MODE_RESET_TO_DEFAULT_BUTTON( CUSTOM_MODE_FRAME_WIDTH, CUSTOM_MODE_FRAME_HEIGHT, -76, open popup_custom_confirm_revert;, dvarBool( ui_custom_haschanged ) || dvarBool( customGameMode ) ) - - execKeyInt BUTTON_X - { - close self; - UPLOAD_TO_FILESHARE - } -#endif - } - -#ifdef PC - #define SAVE_ORIGINAL_SETTINGS_PC \ - exec set orig_host_name ( dvarString( sv_hostname ) ); \ - exec set orig_min_ping ( dvarInt( sv_minping ) ); \ - exec set orig_max_ping ( dvarInt( sv_maxping ) ); \ - exec set orig_password ( dvarString( g_password ) ); \ - exec set orig_voice ( dvarInt( sv_voice ) ); \ - exec set orig_allow_vote ( dvarInt( g_allowVote ) ); \ - exec set orig_sv_vac ( dvarInt( sv_vac ) ); -#else - #define SAVE_ORIGINAL_SETTINGS_PC -#endif - - #define SAVE_ORIGINAL_SETTINGS \ - exec set orig_time ( dvarFloat( ( "scr_" + dvarString( ui_gametype ) + "_timelimit" ) ) ); \ - exec set orig_score ( dvarInt( ( "scr_" + dvarString( ui_gametype ) + "_scorelimit" ) ) ); \ - exec set temp_time ( dvarFloat( ( "scr_" + dvarString( ui_gametype ) + "_timelimit" ) ) ); \ - exec set temp_score ( dvarInt( ( "scr_" + dvarString( ui_gametype ) + "_scorelimit" ) ) ); \ - exec set orig_num_bots_friendly ( dvarInt( bot_friends ) ); \ - exec set orig_num_bots_enemy ( dvarInt( bot_enemies ) ); \ - exec set orig_bot_difficulty ( dvarString( bot_difficulty ) ); \ - exec set orig_bot_show_tips ( dvarInt( bot_tips ) ); \ - exec set orig_botUseFriendNames ( dvarInt( sv_botUseFriendNames ) ); \ - SAVE_ORIGINAL_SETTINGS_PC - - #define SAVE_TIME_AND_SCORE \ - exec set ( "scr_" + dvarString( ui_gametype ) + "_timelimit" ) ( dvarFloat( temp_time ) ); \ - exec set ( "scr_" + dvarString( ui_gametype ) + "_scorelimit" ) ( dvarInt( temp_score ) ); - -#ifdef PC - #define RESET_TO_ORIGINAL_SETTINGS_PC \ - exec set sv_hostname ( dvarString( orig_host_name ) ); \ - exec set sv_minping ( dvarInt( orig_min_ping ) ); \ - exec set sv_maxping ( dvarInt( orig_max_ping ) ); \ - exec set g_password ( dvarString( orig_password ) ); \ - exec set sv_voice ( dvarInt( orig_voice ) ); \ - exec set g_allowVote ( dvarInt( orig_allow_vote ) ); \ - exec set sv_vac ( dvarInt( orig_sv_vac ) ); -#else - #define RESET_TO_ORIGINAL_SETTINGS_PC -#endif - - #define RESET_TO_ORIGINAL_SETTINGS \ - exec set ( "scr_" + dvarString( ui_gametype ) + "_scorelimit" ) ( dvarInt( orig_score ) ); \ - exec set ( "scr_" + dvarString( ui_gametype ) + "_timelimit" ) ( dvarFloat( orig_time ) ); \ - exec set ( "scr_" + dvarString( ui_gametype ) + "_scorelimit" ) ( dvarInt( orig_score ) ); \ - exec set temp_time ( dvarFloat( orig_time ) ); \ - exec set temp_score ( dvarInt( orig_score ) ); \ - exec set bot_friends ( dvarInt( orig_num_bots_friendly ) ); \ - exec set bot_enemies ( dvarInt( orig_num_bots_enemy ) ); \ - exec set bot_difficulty ( dvarString( orig_bot_difficulty ) ); \ - exec set bot_tips ( dvarInt( orig_bot_show_tips ) ); \ - exec set sv_botUseFriendNames ( dvarInt( orig_botUseFriendNames ) ); \ - RESET_TO_ORIGINAL_SETTINGS_PC - -#undef CHOICE_SEP_1 -#undef CHOICE_SEP_2 -#include "ui/choices_sep_spacing.inc" - -#ifdef PC - #define BUTTON_SPACING 20 - #define REVERT_CHANGES_OFFSET ( getTextWidth( locString( "@PLATFORM_BACK" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) + 8 + BUTTON_SPACING ) - - #define BASIC_TRAINING_REVERT_CHANGES_BUTTON( FRAME_WIDTH, FRAME_HEIGHT, xArg, actionArg, visArg ) \ - NEW_FRAME_BUTTON_PC_LEFT_OFFSET( FRAME_WIDTH, FRAME_HEIGHT, REVERT_CHANGES_OFFSET, "@PLATFORM_REVERT_CHANGES", actionArg, visArg ) -#else // #ifdef PC - #define BASIC_TRAINING_REVERT_CHANGES_BUTTON( FRAME_WIDTH, FRAME_HEIGHT, xArg, actionArg, visArg ) \ - itemDef \ - { \ - type ITEM_TYPE_BUTTON \ - rect ( xArg ) ( FRAME_HEIGHT / 2 + 18 ) 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - origin 0 0 \ - text "@PLATFORM_REVERT_CHANGES" \ - textfont CHOICE_TEXTFONT \ - textscale TEXTSIZE_DEFAULT \ - textalign ITEM_ALIGN_BOTTOM_LEFT \ - execkeyint BUTTON_BACK \ - { \ - actionArg \ - } \ - visible when( visArg ) \ - decoration \ - } -#endif // #else // #ifdef PC - -#undef NEW_FRAME_BUTTON_NAME -#define NEW_FRAME_BUTTON_NAME "basictraining_settings_" -#undef CHOICE_BUTTON_NAME -#define CHOICE_BUTTON_NAME "basictraining_settings_" - -#ifdef PC - #undef CHOICE_TEXTSIZE - #define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT -#endif //PC - -#undef MENUDEF_NAME -#define MENUDEF_NAME basictraining_settings - menuDef - { - name basictraining_settings - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - - onOpen - { - execnow ui_animate basictraining_settings * highlightOff 0; - activateBlur; - focusFirst; - execnow "Updatedvarsfromprofile"; - SAVE_ORIGINAL_SETTINGS - - exec "set com_maxclients 30"; - exec "set sv_maxclients 30"; - exec "set party_maxplayers 30"; - exec "set sv_minping 0"; - exec "set sv_vac 0"; - exec "set bot_tips 0"; - } - onEsc - { - close self; - } - onClose - { - SAVE_TIME_AND_SCORE - exec "updategamerprofile"; - deactivateBlur; - } - - NEW_FRAME( NEW_FRAME_DEFAULT_WIDTH, NEW_FRAME_DEFAULT_HEIGHT ) - NEW_FRAME_TITLE( NEW_FRAME_DEFAULT_WIDTH, NEW_FRAME_DEFAULT_HEIGHT, "@MPUI_BASICTRAINING_SETTINGS_CAPS", 1 ) - - - #undef A_BUTTON_OFFSET_X - #define A_BUTTON_OFFSET_X 100000 - - #define IS_WAGER_GAME \ - ( dvarString( "ui_gametype" ) == "hlnd" || dvarString( "ui_gametype" ) == "oic" || dvarString( "ui_gametype" ) == "gun" || dvarString( "ui_gametype" ) == "shrp" ) - - #define IS_TEAM_GAME \ - ( dvarString( "ui_gametype" ) == "tdm" || dvarString( "ui_gametype" ) == "hc_tdm" || dvarString( "ui_gametype" ) == "sd" || dvarString( "ui_gametype" ) == "dom" || dvarString( "ui_gametype" ) == "koth" || dvarString( "ui_gametype" ) == "dem" || dvarString( "ui_gametype" ) == "ctf" || dvarString( "ui_gametype" ) == "sab" ) - - #define IS_FFA_GAME \ - ( dvarString( "ui_gametype" ) == "dm" || dvarString( "ui_gametype" ) == "hc_dm" ) - - #define BALANCE_TEAMS_FRIENDLY \ - if( dvarInt( bot_friends ) + dvarInt( bot_enemies ) > dvarInt( party_maxplayers ) ) \ - { \ - exec set bot_enemies ( dvarInt( party_maxplayers ) - dvarInt( bot_friends ) ); \ - } \ - - #define BALANCE_TEAMS_ENEMY \ - if( dvarInt( bot_enemies ) + dvarInt( bot_friends ) > dvarInt( party_maxplayers ) ) \ - { \ - exec set bot_friends ( dvarInt( party_maxplayers ) - dvarInt( bot_enemies ) ); \ - } \ - - // tdm & hardcore tdm - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 1, CHOICE1_TEXT, temp_time, CHOICE1_STRLIST, ;, SET_CHOICE_DESC( "", CHOICE1_DESC, "" ), CLEAR_CHOICE_DESC, IS_TEAM_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 2, CHOICE2_TEXT, temp_score, CHOICE2_STRLIST, exec checkIfCustomGametypeChanged; CHOICE2_EXEC, SET_CHOICE_DESC( "", CHOICE2_DESC, "" ) setLocalVarBool ui_choice_hideaccept 1;, CLEAR_CHOICE_DESC setLocalVarBool ui_choice_hideaccept 0;, CHOICE2_VIS && IS_TEAM_GAME ) - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 2, CHOICE2_ALT_TEXT, temp_score, CHOICE2_ALT_STRLIST, exec checkIfCustomGametypeChanged; CHOICE2_ALT_EXEC, SET_CHOICE_DESC( "", CHOICE2_DESC, "" ) setLocalVarBool ui_choice_hideaccept 1;, CLEAR_CHOICE_DESC setLocalVarBool ui_choice_hideaccept 0;, CHOICE2_ALT_VIS && IS_TEAM_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 3, "@MPUI_FRIENDLY_PRACTICE_DUMMIES_CAPS", - bot_friends, - { "@MPUI_1_BOTS" 1 "@MPUI_2_BOTS" 2 "@MPUI_3_BOTS" 3 "@MPUI_4_BOTS" 4 "@MPUI_5_BOTS" 5 "@MPUI_6_BOTS" 6 "@MPUI_7_BOTS" 7 "@MPUI_8_BOTS" 8 "@MPUI_9_BOTS" 9 "@MPUI_10_BOTS" 10 "@MPUI_11_BOTS" 11 }, - BALANCE_TEAMS_FRIENDLY;, - SET_CHOICE_DESC( "", "@MPUI_FRIENDLY_PRACTICE_DUMMIES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_TEAM_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 4, "@MPUI_FRIENDLY_PRACTICE_DUMMIES_CAPS", - bot_friends_extra, - { "0" 0 "1" 1 "2" 2 "3" 3 "4" 4 "5" 5 "6" 6 "7" 7 "8" 8 "9" 9 "10" 10 "11" 11 "12" 12 "13" 13 "14" 14 "15" 15 "16" 16 "17" 17 "18" 18 "19" 19 }, - ;, - SET_CHOICE_DESC( "", "@MPUI_FRIENDLY_PRACTICE_DUMMIES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_TEAM_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 5, "@MPUI_ENEMY_PRACTICE_DUMMIES_CAPS", - bot_enemies, - { "@MPUI_1_BOTS" 1 "@MPUI_2_BOTS" 2 "@MPUI_3_BOTS" 3 "@MPUI_4_BOTS" 4 "@MPUI_5_BOTS" 5 "@MPUI_6_BOTS" 6 "@MPUI_7_BOTS" 7 "@MPUI_8_BOTS" 8 "@MPUI_9_BOTS" 9 "@MPUI_10_BOTS" 10 "@MPUI_11_BOTS" 11 }, - BALANCE_TEAMS_ENEMY;, - SET_CHOICE_DESC( "", "@MPUI_ENEMY_PRACTICE_DUMMIES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_TEAM_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 6, "@MPUI_ENEMY_PRACTICE_DUMMIES_CAPS", - bot_enemies_extra, - { "-1" -1 "0" 0 "1" 1 "2" 2 "3" 3 "4" 4 "5" 5 "6" 6 "7" 7 "8" 8 "9" 9 "10" 10 "11" 11 "12" 12 "13" 13 "14" 14 "15" 15 "16" 16 "17" 17 "18" 18 }, - ;, - SET_CHOICE_DESC( "", "@MPUI_ENEMY_PRACTICE_DUMMIES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_TEAM_GAME ) - - FRAME_CHOICE_DVARSTRINGLIST_FOCUS_VIS( 7, "@MENU_BASICTRAINING_DIFFICULTY_CAPS", - bot_difficulty, - { "@MENU_BASICTRAINING_EASY_CAPS" easy "@MENU_BASICTRAINING_NORMAL_CAPS" normal "@MENU_BASICTRAINING_HARD_CAPS" hard "@MENU_BASICTRAINING_FU_CAPS" fu }, - ;, - SET_CHOICE_DESC( "", "@MPUI_BASICTRAINING_DIFFICULTY_DESC", "" ), - CLEAR_CHOICE_DESC, IS_TEAM_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 8, "@PLATFORM_BASICTRAINING_FRIEND_NAMES_CAPS", - sv_botUseFriendNames, - { "@MENU_DISABLED_CAPS" 0 "@MENU_ENABLED_CAPS" 1 }, - ;, - SET_CHOICE_DESC( "", "@MPUI_BASICTRAINING_FRIEND_NAMES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_TEAM_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 9, "REASONABLE SETUPS", - bot_reasonable, - { "DISABLED" 0 "ENABLED" 1 }, - ;, - SET_CHOICE_DESC( "", "Bots will only use weapons, perks and killstreaks that are 'good' and/or 'overpowered' for themselves.", "" ), - CLEAR_CHOICE_DESC, IS_TEAM_GAME ) - - // ffa & hardcore ffa - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 1, CHOICE1_TEXT, temp_time, CHOICE1_STRLIST, ;, SET_CHOICE_DESC( "", CHOICE1_DESC, "" ), CLEAR_CHOICE_DESC, IS_FFA_GAME ) - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 2, CHOICE2_ALT_TEXT, temp_score, CHOICE2_ALT_STRLIST, ;, SET_CHOICE_DESC( "", CHOICE2_DESC, "" ), CLEAR_CHOICE_DESC, IS_FFA_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 3, "@MPUI_ENEMY_PRACTICE_DUMMIES_CAPS", - bot_enemies, - { "@MPUI_1_BOTS" 1 "@MPUI_2_BOTS" 2 "@MPUI_3_BOTS" 3 "@MPUI_4_BOTS" 4 "@MPUI_5_BOTS" 5 "@MPUI_6_BOTS" 6 "@MPUI_7_BOTS" 7 "@MPUI_8_BOTS" 8 "@MPUI_9_BOTS" 9 "@MPUI_10_BOTS" 10 "@MPUI_11_BOTS" 11 }, - BALANCE_TEAMS_ENEMY;, - SET_CHOICE_DESC( "", "@MPUI_ENEMY_PRACTICE_DUMMIES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_FFA_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 4, "@MPUI_ENEMY_PRACTICE_DUMMIES_CAPS", - bot_enemies_extra, - { "-1" -1 "0" 0 "1" 1 "2" 2 "3" 3 "4" 4 "5" 5 "6" 6 "7" 7 "8" 8 "9" 9 "10" 10 "11" 11 "12" 12 "13" 13 "14" 14 "15" 15 "16" 16 "17" 17 "18" 18 }, - ;, - SET_CHOICE_DESC( "", "@MPUI_ENEMY_PRACTICE_DUMMIES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_FFA_GAME ) - - FRAME_CHOICE_DVARSTRINGLIST_FOCUS_VIS( 5, "@MENU_BASICTRAINING_DIFFICULTY_CAPS", - bot_difficulty, - { "@MENU_BASICTRAINING_EASY_CAPS" easy "@MENU_BASICTRAINING_NORMAL_CAPS" normal "@MENU_BASICTRAINING_HARD_CAPS" hard "@MENU_BASICTRAINING_FU_CAPS" fu }, - ;, - SET_CHOICE_DESC( "", "@MPUI_BASICTRAINING_DIFFICULTY_DESC", "" ), - CLEAR_CHOICE_DESC, IS_FFA_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 6, "@PLATFORM_BASICTRAINING_FRIEND_NAMES_CAPS", - sv_botUseFriendNames, - { "@MENU_DISABLED_CAPS" 0 "@MENU_ENABLED_CAPS" 1 }, - ;, - SET_CHOICE_DESC( "", "@MPUI_BASICTRAINING_FRIEND_NAMES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_FFA_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 7, "REASONABLE SETUPS", - bot_reasonable, - { "DISABLED" 0 "ENABLED" 1 }, - ;, - SET_CHOICE_DESC( "", "Bots will only use weapons, perks and killstreaks that are 'good' and/or 'overpowered' for themselves.", "" ), - CLEAR_CHOICE_DESC, IS_FFA_GAME ) - - // wager matches - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 1, "@MPUI_ENEMY_PRACTICE_DUMMIES_CAPS", - bot_enemies, - { "@MPUI_1_BOTS" 1 "@MPUI_2_BOTS" 2 "@MPUI_3_BOTS" 3 "@MPUI_4_BOTS" 4 "@MPUI_5_BOTS" 5 "@MPUI_6_BOTS" 6 "@MPUI_7_BOTS" 7 "@MPUI_8_BOTS" 8 "@MPUI_9_BOTS" 9 "@MPUI_10_BOTS" 10 "@MPUI_11_BOTS" 11 }, - BALANCE_TEAMS_ENEMY;, - SET_CHOICE_DESC( "", "@MPUI_ENEMY_PRACTICE_DUMMIES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_WAGER_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 2, "@MPUI_ENEMY_PRACTICE_DUMMIES_CAPS", - bot_enemies_extra, - { "-1" -1 "0" 0 "1" 1 "2" 2 "3" 3 "4" 4 "5" 5 "6" 6 "7" 7 "8" 8 "9" 9 "10" 10 "11" 11 "12" 12 "13" 13 "14" 14 "15" 15 "16" 16 "17" 17 "18" 18 }, - ;, - SET_CHOICE_DESC( "", "@MPUI_ENEMY_PRACTICE_DUMMIES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_WAGER_GAME ) - - FRAME_CHOICE_DVARSTRINGLIST_FOCUS_VIS( 3, "@MENU_BASICTRAINING_DIFFICULTY_CAPS", - bot_difficulty, - { "@MENU_BASICTRAINING_EASY_CAPS" easy "@MENU_BASICTRAINING_NORMAL_CAPS" normal "@MENU_BASICTRAINING_HARD_CAPS" hard "@MENU_BASICTRAINING_FU_CAPS" fu }, - ;, - SET_CHOICE_DESC( "", "@MPUI_BASICTRAINING_DIFFICULTY_DESC", "" ), - CLEAR_CHOICE_DESC, IS_WAGER_GAME ) - - FRAME_CHOICE_DVARFLOATLIST_FOCUS_VIS( 4, "@PLATFORM_BASICTRAINING_FRIEND_NAMES_CAPS", - sv_botUseFriendNames, - { "@MENU_DISABLED_CAPS" 0 "@MENU_ENABLED_CAPS" 1 }, - ;, - SET_CHOICE_DESC( "", "@MPUI_BASICTRAINING_FRIEND_NAMES_DESC", "" ), - CLEAR_CHOICE_DESC, IS_WAGER_GAME ) - - #undef CHOICE_DVAR_WIDTH_OFFSET - #define CHOICE_DVAR_WIDTH_OFFSET 60 - FRAME_CHOICE_DVAREDIT_FOCUS_VIS_EX( 10, "@PLATFORM_SERVER_NAME_CAPS", - "sv_hostname", 20, 20, - ;, - SET_CHOICE_DESC( "", "@PATCH_SERVER_NAME_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - FRAME_CHOICE_DVAREDIT_NUMERIC_FOCUS_VIS_EX( 11, "@PLATFORM_MAXIMUM_PING_CAPS", - "sv_maxping", 4, - ;, - SET_CHOICE_DESC( "", "@PATCH_MAXIMUM_PING_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - FRAME_CHOICE_DVAREDIT_FOCUS_VIS_EX( 12, "@PLATFORM_PASSWORD1_CAPS", - "g_password", 12, 12, - ;, - SET_CHOICE_DESC( "", "@PATCH_PASSWORD_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - FRAME_CHOICE_DVARYESNO_FOCUS_VIS_EX( 13, "@PLATFORM_VOICECHAT_CAPS", - "sv_voice", - ;, - SET_CHOICE_DESC( "", "@PATCH_VOICECHAT_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - #undef CHOICE_TEXT_COLOR - #define CHOICE_TEXT_COLOR 1 1 1 1 - - #undef A_BUTTON_OFFSET_X - #define A_BUTTON_OFFSET_X 0 - - CUSTOM_FRAME_HINT( ui_choice_desc ) - - BASIC_TRAINING_REVERT_CHANGES_BUTTON( NEW_FRAME_DEFAULT_WIDTH, NEW_FRAME_DEFAULT_HEIGHT, -76, open popup_basictraining_confirm_revert;, 1 ) -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( NEW_FRAME_DEFAULT_WIDTH, NEW_FRAME_DEFAULT_HEIGHT, close self; ) -#else //#ifdef PC - NEW_FRAME_BACK_BUTTON( NEW_FRAME_DEFAULT_WIDTH, NEW_FRAME_DEFAULT_HEIGHT ) -#endif //#ifdef PC - } - - #include "ui_mp/popupstyle.inc" - -// mekberg: No idea why the above include is not setting this. I've wasted a half hour trying to figure why. Instead I'm just going to hack this here. -#ifdef PC -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X (POPUP_WIDTH-(POPUP_SIDE_PAD*2)) -#endif // PC - - menuDef - { - #define CUSTOM_ERROR_ONESC \ - uiScript clearError; \ - close self; - - SYSTEM_POPUP_SETUP_VIS( popup_custom_game_error, ;, CUSTOM_ERROR_ONESC, 1 ) - SYSTEM_POPUP_TITLE_VIS( dvarString( "com_errorTitle" ), 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( dvarString( "com_errorMessage" ), 1 ) - - #define CUSTOM_ERROR_ACTION \ - play CHOICE_FOCUS_SOUND; \ - uiScript clearError; \ - close self; - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 1, "@MENU_EXIT", CUSTOM_ERROR_ACTION, play CHOICE_FOCUS_SOUND, ;, 1, ; ) - -#ifndef PC - SYSTEM_POPUP_BACK_BUTTON -#endif //#ifndef PC - } - - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( "popup_custom_confirm_revert", setfocus popup_custom_confirm_revert_2, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@CUSTOM_REVERT_CHANGES_CONFIRM_TITLE", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_YES_CAPS", execNow "revertCustomGametypeChanges"; exec "xupdatepartystate"; close self, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_NO_CAPS", close self, 1, name popup_custom_confirm_revert_2 ) - -#ifndef PC - SYSTEM_POPUP_BACK_BUTTON -#endif //#ifndef PC - } - - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( "popup_basictraining_confirm_revert", setfocus popup_basictraining_confirm_revert_2, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MPUI_REVERT_BASICTRAINING_CONFIRM_TITLE", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_YES", RESET_TO_ORIGINAL_SETTINGS close self, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_NO", close self, 1, name popup_basictraining_confirm_revert_2 ) - -#ifndef PC - SYSTEM_POPUP_BACK_BUTTON -#endif //#ifndef PC - } -} diff --git a/mods/patch_mp/ui_mp/custom_settings_general.menu b/mods/patch_mp/ui_mp/custom_settings_general.menu deleted file mode 100644 index 5e758c0..0000000 --- a/mods/patch_mp/ui_mp/custom_settings_general.menu +++ /dev/null @@ -1,423 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui_mp/custom_mode.inc" - -#define IS_TEAM_MODE \ - ( dvarString( "ui_gametype" ) != "dm" ) - -#define GAME_OPTIONS_MENU_NAME "custom_settings_general" -#define MENUDEF_NAME custom_settings_general -#define CUSTOM_GAME_OPTIONS_TITLE "@CUSTOM_GENERAL_OPTIONS_CAPS" - -#define CHOICE1_TEXT "@CUSTOM_OPT_HARDCORE" -#define CHOICE1_DESC "@CUSTOM_OPT_HARDCORE_DESC" -#define CHOICE1_DVAR "scr_hardcore" -#define CHOICE1_DVARTEXT CHOICE1_DVAR"_text" -#define CHOICE1_SHOW 1 -#define CHOICE1_EXEC1 execNowOnDvarIntValue scr_hardcore 0 "exec hardcore_disable.cfg"; -#define CHOICE1_EXEC2 execNowOnDvarIntValue scr_hardcore 1 "exec hardcore_settings.cfg"; -#define CHOICE1_STRLIST { "@MENU_DISABLED_CAPS" 0 "@MENU_ENABLED_CAPS" 1} -#define CHOICE1_EXEC play CHOICE_FOCUS_SOUND; CHOICE1_EXEC1 CHOICE1_EXEC2 -#define CHOICE1_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE1_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; - -#define CHOICE2_TEXT "@CUSTOM_OPT_KILLCAM" -#define CHOICE2_DESC "@CUSTOM_OPT_KILLCAM_DESC" -#define CHOICE2_DVAR "scr_game_allowkillcam" -#define CHOICE2_DVARTEXT CHOICE2_DVAR"_text" -#define CHOICE2_SHOW 1 -#define CHOICE2_STRLIST { "@MENU_DISABLED_CAPS" 0 "@MENU_ENABLED_CAPS" 1} -#define CHOICE2_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE2_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; - -#define CHOICE3_TEXT "@CUSTOM_OPT_HEADSHOTS_ONLY" -#define CHOICE3_DESC "@CUSTOM_OPT_HEADSHOT_ONLY_DESC" -#define CHOICE3_DVAR "scr_game_onlyheadshots" -#define CHOICE3_DVARTEXT CHOICE3_DVAR"_text" -#define CHOICE3_SHOW 1 -#define CHOICE3_STRLIST { "@MENU_DISABLED_CAPS" 0 "@MENU_ENABLED_CAPS" 1} -#define CHOICE3_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE3_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; - -#define CHOICE4_TEXT "@CUSTOM_OPT_ALLOW_SPRINT" -#define CHOICE4_DESC "@CUSTOM_OPT_ALLOW_SPRINT_DESC" -#define CHOICE4_DVAR "scr_player_sprintTime" -#define CHOICE4_DVARTEXT CHOICE4_DVAR"_text" -#define CHOICE4_SHOW 1 -#define CHOICE4_STRLIST { "@MENU_DISABLED_CAPS" 0 "@MENU_ENABLED_CAPS" 4} -#define CHOICE4_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE4_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; - -#define CHOICE_SEP_1 4 - -#define CHOICE_EXTRA \ - CUSTOM_BUTTON( 5, "@CUSTOM_RESPAWN_OPTIONS", execNow openMenu "popup_respawn_settings";, "@CUSTOM_RESPAWN_OPTIONS_DESC", "", 1 ) \ - CUSTOM_BUTTON( 6, "@CUSTOM_LIVES_AND_HEALTH_OPTIONS", execNow openMenu "popup_lives_and_health_settings";, "@CUSTOM_LIVES_AND_HEALTH_OPTIONS_DESC", "", 1 ) \ - CUSTOM_BUTTON( 7, "@CUSTOM_TEAM_OPTIONS", execNow openMenu "popup_team_settings";, "@CUSTOM_TEAM_OPTIONS_DESC", "", IS_TEAM_MODE ) \ - CUSTOM_BUTTON( 7, "@CUSTOM_FFA_SPECTATE_OPTIONS", execNow openMenu "popup_ffa_spectate_settings";, "@CUSTOM_FFA_SPECTATE_OPTIONS_DESC", "", !IS_TEAM_MODE ) \ - -{ - #include "ui_mp/custom_game_options.inc" -} - -#define CUSTOM_OPTION_POPUP_WIDTH 320 -#define CUSTOM_OPTION_POPUP_HEIGHT 195 - -#define CUSTOM_OPTION_POPUP_HINT_Y_OFFSET 70 - -#define CUSTOM_OPTION_POPUP_DVAR_OFFSET_X 110 - -//*********************************************************************************** -// Respawn Settings -//*********************************************************************************** -#undef MENUDEF_NAME -#define CUSTOM_OPTIONS_POPUP_MENU_NAME "popup_respawn_settings" -#define MENUDEF_NAME popup_respawn_settings -#define CUSTOM_OPTIONS_POPUP_TITLE "@CUSTOM_RESPAWN_OPTIONS" -#define CUSTOM_OPTIONS_POPUP_NUM_ITEMS 3 - -#define CHOICE1_TEXT "@CUSTOM_RESPAWN_DELAY" -#define CHOICE1_DESC "@CUSTOM_RESPAWN_DELAY_DESC" -#define CHOICE1_DVAR "custom_playerrespawndelay" -#define CHOICE1_DVARTEXT CHOICE1_DVAR"_text" -#define CHOICE1_SHOW 1 -#define CHOICE1_STR1 "@MPUI_RULES_NONE_CAPS" -#define CHOICE1_STR2 "@MPUI_RULES_2_5SECONDS_CAPS" -#define CHOICE1_STR3 "@MPUI_RULES_5SECONDS_CAPS" -#define CHOICE1_STR4 "@MPUI_RULES_7_5SECONDS_CAPS" -#define CHOICE1_STR5 "@MPUI_RULES_10SECONDS_CAPS" -#define CHOICE1_STR6 "@MPUI_RULES_15SECONDS_CAPS" -#define CHOICE1_STR7 "@MPUI_RULES_20SECONDS_CAPS" -#define CHOICE1_STR8 "@MPUI_RULES_30SECONDS_CAPS" -#define CHOICE1_STR9 "@MPUI_RULES_40SECONDS_CAPS" -#define CHOICE1_STR10 "@MPUI_RULES_50SECONDS_CAPS" -#define CHOICE1_STR11 "@MPUI_RULES_1MINUTE_CAPS" -#define CHOICE1_STR12 "@MPUI_RULES_1_5MINUTES_CAPS" -#define CHOICE1_VAL1 0 -#define CHOICE1_VAL2 2.5 -#define CHOICE1_VAL3 5 -#define CHOICE1_VAL4 7.5 -#define CHOICE1_VAL5 10 -#define CHOICE1_VAL6 15 -#define CHOICE1_VAL7 20 -#define CHOICE1_VAL8 30 -#define CHOICE1_VAL9 40 -#define CHOICE1_VAL10 50 -#define CHOICE1_VAL11 60 -#define CHOICE1_VAL12 90 -#define CHOICE1_EXEC ; -#define CHOICE1_STRLIST { CHOICE1_STR1 CHOICE1_VAL1 CHOICE1_STR2 CHOICE1_VAL2 CHOICE1_STR3 CHOICE1_VAL3 CHOICE1_STR4 CHOICE1_VAL4 CHOICE1_STR5 CHOICE1_VAL5 CHOICE1_STR6 CHOICE1_VAL6 CHOICE1_STR7 CHOICE1_VAL7 CHOICE1_STR8 CHOICE1_VAL8 CHOICE1_STR9 CHOICE1_VAL9 CHOICE1_STR10 CHOICE1_VAL10 CHOICE1_STR11 CHOICE1_VAL11 CHOICE1_STR12 CHOICE1_VAL12 } -#define CHOICE1_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE1_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; -#define CHOICE1_NUMVALS 12 - -#define CHOICE2_TEXT "@CUSTOM_RULES_FORCE_RESPAWN" -#define CHOICE2_DESC "@CUSTOM_FORCE_RESPAWN_DESC" -#define CHOICE2_DVAR "scr_player_forcerespawn" -#define CHOICE2_DVARTEXT CHOICE2_DVAR"_text" -#define CHOICE2_SHOW 1 -#define CHOICE2_STRLIST { "@MENU_DISABLED_CAPS" 0 "@MENU_ENABLED_CAPS" 1} -#define CHOICE2_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE2_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; -#define CHOICE2_VIS dvarFloat( custom_waverespawndelay ) == 0 -#define CHOICE2_DISABLED_DESC "@CUSTOM_FORCE_RESPAWN_DISABLED_DESC" -#define CHOICE2_DISABLE_ON_INVIS 1 - -#define CHOICE3_TEXT "@CUSTOM_WAVE_RESPAWN_DELAY" -#define CHOICE3_DESC "@CUSTOM_WAVE_RESPAWN_DELAY_DESC" -#define CHOICE3_DVAR custom_waverespawndelay -#define CHOICE3_DVARTEXT CHOICE3_DVAR"_text" -#define CHOICE3_SHOW 1 -#define CHOICE3_STR1 "@MPUI_RULES_NONE_CAPS" -#define CHOICE3_STR2 "@MPUI_RULES_5SECONDS_CAPS" -#define CHOICE3_STR3 "@MPUI_RULES_10SECONDS_CAPS" -#define CHOICE3_STR4 "@MPUI_RULES_15SECONDS_CAPS" -#define CHOICE3_STR5 "@MPUI_RULES_30SECONDS_CAPS" -#define CHOICE3_STR6 "" -#define CHOICE3_STR7 "" -#define CHOICE3_STR8 "" -#define CHOICE3_STR9 "" -#define CHOICE3_STR10 "" -#define CHOICE3_STR11 "" -#define CHOICE3_STR12 "" -#define CHOICE3_VAL1 0 -#define CHOICE3_VAL2 5 -#define CHOICE3_VAL3 10 -#define CHOICE3_VAL4 15 -#define CHOICE3_VAL5 30 -#define CHOICE3_VAL6 0 -#define CHOICE3_VAL7 0 -#define CHOICE3_VAL8 0 -#define CHOICE3_VAL9 0 -#define CHOICE3_VAL10 0 -#define CHOICE3_VAL11 0 -#define CHOICE3_VAL12 0 -#define CHOICE3_EXEC ; -#define CHOICE3_STRLIST { CHOICE3_STR1 CHOICE3_VAL1 CHOICE3_STR2 CHOICE3_VAL2 CHOICE3_STR3 CHOICE3_VAL3 CHOICE3_STR4 CHOICE3_VAL4 CHOICE3_STR5 CHOICE3_VAL5 CHOICE3_STR6 CHOICE3_VAL6 CHOICE3_STR7 CHOICE3_VAL7 CHOICE3_STR8 CHOICE3_VAL8 CHOICE3_STR9 CHOICE3_VAL9 CHOICE3_STR10 CHOICE3_VAL10 CHOICE3_STR11 CHOICE3_VAL11 CHOICE3_STR12 CHOICE3_VAL12 } -#define CHOICE3_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE3_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; -#define CHOICE3_NUMVALS 5 - -#define CUSTOM_RESET_TO_DEFAULT resetdvar CHOICE1_DVAR; resetdvar CHOICE2_DVAR; resetdvar CHOICE3_DVAR; - -{ - #include "ui_mp/custom_options_popup.inc" -} - -//*********************************************************************************** -// Lives & Health -//*********************************************************************************** -#define CUSTOM_OPTIONS_POPUP_MENU_NAME "popup_lives_and_health_settings" -#define MENUDEF_NAME popup_lives_and_health_settings -#define CUSTOM_OPTIONS_POPUP_TITLE "@CUSTOM_LIVES_AND_HEALTH_OPTIONS_CAPS" -#define CUSTOM_OPTIONS_POPUP_NUM_ITEMS 3 - -#define CHOICE1_TEXT "@CUSTOM_NUMBER_OF_LIVES" -#define CHOICE1_DESC "@CUSTOM_NUMBER_OF_LIVES_DESC" -#define CHOICE1_DVAR "custom_numlives" -#define CHOICE1_DVARTEXT CHOICE1_DVAR"_text" -#define CHOICE1_SHOW 1 -#define CHOICE1_STR1 "@MPUI_RULES_UNLIMITED_CAPS" -#define CHOICE1_STR2 "@MPUI_RULES_ITEM_LIFE_CAPS" -#define CHOICE1_STR3 "@MPUI_RULES_ITEM_2LIVES_CAPS" -#define CHOICE1_STR4 "@MPUI_RULES_ITEM_3LIVES_CAPS" -#define CHOICE1_STR5 "@MPUI_RULES_ITEM_5LIVES_CAPS" -#define CHOICE1_STR6 "@MPUI_RULES_ITEM_9LIVES_CAPS" -#define CHOICE1_STR7 "" -#define CHOICE1_STR8 "" -#define CHOICE1_STR9 "" -#define CHOICE1_STR10 "" -#define CHOICE1_STR11 "" -#define CHOICE1_STR12 "" -#define CHOICE1_VAL1 0 -#define CHOICE1_VAL2 1 -#define CHOICE1_VAL3 2 -#define CHOICE1_VAL4 3 -#define CHOICE1_VAL5 5 -#define CHOICE1_VAL6 9 -#define CHOICE1_VAL7 0 -#define CHOICE1_VAL8 0 -#define CHOICE1_VAL9 0 -#define CHOICE1_VAL10 0 -#define CHOICE1_VAL11 0 -#define CHOICE1_VAL12 0 -#define CHOICE1_EXEC ; -#define CHOICE1_STRLIST { CHOICE1_STR1 CHOICE1_VAL1 CHOICE1_STR2 CHOICE1_VAL2 CHOICE1_STR3 CHOICE1_VAL3 CHOICE1_STR4 CHOICE1_VAL4 CHOICE1_STR5 CHOICE1_VAL5 CHOICE1_STR6 CHOICE1_VAL6 CHOICE1_STR7 CHOICE1_VAL7 CHOICE1_STR8 CHOICE1_VAL8 CHOICE1_STR9 CHOICE1_VAL9 CHOICE1_STR10 CHOICE1_VAL10 CHOICE1_STR11 CHOICE1_VAL11 CHOICE1_STR12 CHOICE1_VAL12 } -#define CHOICE1_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE1_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; -#define CHOICE1_NUMVALS 6 - -#define CHOICE2_TEXT "@CUSTOM_MAX_HEALTH" -#define CHOICE2_DESC "@CUSTOM_MAX_HEALTH_DESC" -#define CHOICE2_DVAR "scr_player_maxhealth" -#define CHOICE2_DVARTEXT CHOICE2_DVAR"_text" -#define CHOICE2_SHOW 1 -#define CHOICE2_STR1 "@MPUI_RULES_MINISCULE_CAPS" -#define CHOICE2_STR2 "@MPUI_RULES_HALF_CAPS" -#define CHOICE2_STR3 "@MPUI_RULES_NORMAL_CAPS" -#define CHOICE2_STR4 "@MPUI_RULES_DOUBLE_CAPS" -#define CHOICE2_STR5 "" -#define CHOICE2_STR6 "" -#define CHOICE2_STR7 "" -#define CHOICE2_STR8 "" -#define CHOICE2_STR9 "" -#define CHOICE2_STR10 "" -#define CHOICE2_STR11 "" -#define CHOICE2_STR12 "" -#define CHOICE2_VAL1 30 -#define CHOICE2_VAL2 50 -#define CHOICE2_VAL3 100 -#define CHOICE2_VAL4 200 -#define CHOICE2_VAL5 0 -#define CHOICE2_VAL6 0 -#define CHOICE2_VAL7 0 -#define CHOICE2_VAL8 0 -#define CHOICE2_VAL9 0 -#define CHOICE2_VAL10 0 -#define CHOICE2_VAL11 0 -#define CHOICE2_VAL12 0 -#define CHOICE2_EXEC ; -#define CHOICE2_STRLIST { CHOICE2_STR1 CHOICE2_VAL1 CHOICE2_STR2 CHOICE2_VAL2 CHOICE2_STR3 CHOICE2_VAL3 CHOICE2_STR4 CHOICE2_VAL4 CHOICE2_STR5 CHOICE2_VAL5 CHOICE2_STR6 CHOICE2_VAL6 CHOICE2_STR7 CHOICE2_VAL7 CHOICE2_STR8 CHOICE2_VAL8 CHOICE2_STR9 CHOICE2_VAL9 CHOICE2_STR10 CHOICE2_VAL10 CHOICE2_STR11 CHOICE2_VAL11 CHOICE2_STR12 CHOICE2_VAL12 } -#define CHOICE2_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE2_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; -#define CHOICE2_NUMVALS 4 -#define CHOICE2_VIS dvarInt( "custom_class_mode" ) != 1 -#define CHOICE2_DISABLED_DESC "@CUSTOM_MAX_HEALTH_DISABLED_DESC" -#define CHOICE2_DISABLE_ON_INVIS 1 - -#define CHOICE3_TEXT "@CUSTOM_HEALTH_REGEN" -#define CHOICE3_DESC "@CUSTOM_HEALTH_REGEN_DESC" -#define CHOICE3_DVAR "scr_player_healthregentime" -#define CHOICE3_DVARTEXT CHOICE3_DVAR"_text" -#define CHOICE3_SHOW 1 -#define CHOICE3_STR1 "@MPUI_RULES_NONE_CAPS" -#define CHOICE3_STR2 "@MPUI_RULES_FAST_CAPS" -#define CHOICE3_STR3 "@MPUI_RULES_NORMAL_CAPS" -#define CHOICE3_STR4 "@MPUI_RULES_SLOW_CAPS" -#define CHOICE3_STR5 "" -#define CHOICE3_STR6 "" -#define CHOICE3_STR7 "" -#define CHOICE3_STR8 "" -#define CHOICE3_STR9 "" -#define CHOICE3_STR10 "" -#define CHOICE3_STR11 "" -#define CHOICE3_STR12 "" -#define CHOICE3_VAL1 0 -#define CHOICE3_VAL2 2 -#define CHOICE3_VAL3 5 -#define CHOICE3_VAL4 10 -#define CHOICE3_VAL5 0 -#define CHOICE3_VAL6 0 -#define CHOICE3_VAL7 0 -#define CHOICE3_VAL8 0 -#define CHOICE3_VAL9 0 -#define CHOICE3_VAL10 0 -#define CHOICE3_VAL11 0 -#define CHOICE3_VAL12 0 -#define CHOICE3_EXEC ; -#define CHOICE3_STRLIST { CHOICE3_STR1 CHOICE3_VAL1 CHOICE3_STR2 CHOICE3_VAL2 CHOICE3_STR3 CHOICE3_VAL3 CHOICE3_STR4 CHOICE3_VAL4 CHOICE3_STR5 CHOICE3_VAL5 CHOICE3_STR6 CHOICE3_VAL6 CHOICE3_STR7 CHOICE3_VAL7 CHOICE3_STR8 CHOICE3_VAL8 CHOICE3_STR9 CHOICE3_VAL9 CHOICE3_STR10 CHOICE3_VAL10 CHOICE3_STR11 CHOICE3_VAL11 CHOICE3_STR12 CHOICE3_VAL12 } -#define CHOICE3_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE3_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; -#define CHOICE3_NUMVALS 4 -#define CHOICE3_VIS dvarInt( "custom_class_mode" ) != 1 -#define CHOICE3_DISABLED_DESC "@CUSTOM_HEALTH_REGEN_DISABLED_DESC" -#define CHOICE3_DISABLE_ON_INVIS 1 - -#define CUSTOM_RESET_TO_DEFAULT resetdvar CHOICE1_DVAR; resetdvar CHOICE2_DVAR; resetdvar CHOICE3_DVAR; - -{ - #include "ui_mp/custom_options_popup.inc" -} - -//*********************************************************************************** -// Team Settings -//*********************************************************************************** -#define CUSTOM_OPTIONS_POPUP_MENU_NAME "popup_team_settings" -#define MENUDEF_NAME popup_team_settings -#define CUSTOM_OPTIONS_POPUP_TITLE "@CUSTOM_TEAM_OPTIONS" -#define CUSTOM_OPTIONS_POPUP_NUM_ITEMS 2 - -#define CHOICE1_TEXT "@CUSTOM_OPT_SPECTATE" -#define CHOICE1_DESC "@CUSTOM_OPT_SPECTATE_DESC" -#define CHOICE1_DVAR scr_game_spectatetype -#define CHOICE1_DVARTEXT CHOICE1_DVAR"_text" -#define CHOICE1_SHOW 1 -#define CHOICE1_STR1 "@MENU_DISABLED_CAPS" -#define CHOICE1_STR2 "@MPUI_RULES_TEAM_ONLY_CAPS" -#define CHOICE1_STR3 "@MPUI_RULES_FREE_CAPS" -#define CHOICE1_STR4 "" -#define CHOICE1_STR5 "" -#define CHOICE1_STR6 "" -#define CHOICE1_STR7 "" -#define CHOICE1_STR8 "" -#define CHOICE1_STR9 "" -#define CHOICE1_STR10 "" -#define CHOICE1_STR11 "" -#define CHOICE1_STR12 "" -#define CHOICE1_VAL1 0 -#define CHOICE1_VAL2 1 -#define CHOICE1_VAL3 2 -#define CHOICE1_VAL4 0 -#define CHOICE1_VAL5 0 -#define CHOICE1_VAL6 0 -#define CHOICE1_VAL7 0 -#define CHOICE1_VAL8 0 -#define CHOICE1_VAL9 0 -#define CHOICE1_VAL10 0 -#define CHOICE1_VAL11 0 -#define CHOICE1_VAL12 0 -#define CHOICE1_EXEC ; -#define CHOICE1_STRLIST { CHOICE1_STR1 CHOICE1_VAL1 CHOICE1_STR2 CHOICE1_VAL2 CHOICE1_STR3 CHOICE1_VAL3 CHOICE1_STR4 CHOICE1_VAL4 CHOICE1_STR5 CHOICE1_VAL5 CHOICE1_STR6 CHOICE1_VAL6 CHOICE1_STR7 CHOICE1_VAL7 CHOICE1_STR8 CHOICE1_VAL8 CHOICE1_STR9 CHOICE1_VAL9 CHOICE1_STR10 CHOICE1_VAL10 CHOICE1_STR11 CHOICE1_VAL11 CHOICE1_STR12 CHOICE1_VAL12 } -#define CHOICE1_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE1_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; -#define CHOICE1_NUMVALS 3 - -#define CHOICE2_TEXT "@CUSTOM_FRIENDLY_FIRE" -#define CHOICE2_DESC "@CUSTOM_FRIENDLY_FIRE_DESC" -#define CHOICE2_DVAR scr_team_fftype -#define CHOICE2_DVARTEXT CHOICE2_DVAR"_text" -#define CHOICE2_SHOW 1 -#define CHOICE2_STR1 "@MENU_DISABLED_CAPS" -#define CHOICE2_STR2 "@MENU_ENABLED_CAPS" -#define CHOICE2_STR3 "@MPUI_RULES_REFLECT_CAPS" -#define CHOICE2_STR4 "@MPUI_RULES_SHARED_CAPS" -#define CHOICE2_STR5 "" -#define CHOICE2_STR6 "" -#define CHOICE2_STR7 "" -#define CHOICE2_STR8 "" -#define CHOICE2_STR9 "" -#define CHOICE2_STR10 "" -#define CHOICE2_STR11 "" -#define CHOICE2_STR12 "" -#define CHOICE2_VAL1 0 -#define CHOICE2_VAL2 1 -#define CHOICE2_VAL3 2 -#define CHOICE2_VAL4 3 -#define CHOICE2_VAL5 0 -#define CHOICE2_VAL6 0 -#define CHOICE2_VAL7 0 -#define CHOICE2_VAL8 0 -#define CHOICE2_VAL9 0 -#define CHOICE2_VAL10 0 -#define CHOICE2_VAL11 0 -#define CHOICE2_VAL12 0 -#define CHOICE2_EXEC ; -#define CHOICE2_STRLIST { CHOICE2_STR1 CHOICE2_VAL1 CHOICE2_STR2 CHOICE2_VAL2 CHOICE2_STR3 CHOICE2_VAL3 CHOICE2_STR4 CHOICE2_VAL4 CHOICE2_STR5 CHOICE2_VAL5 CHOICE2_STR6 CHOICE2_VAL6 CHOICE2_STR7 CHOICE2_VAL7 CHOICE2_STR8 CHOICE2_VAL8 CHOICE2_STR9 CHOICE2_VAL9 CHOICE2_STR10 CHOICE2_VAL10 CHOICE2_STR11 CHOICE2_VAL11 CHOICE2_STR12 CHOICE2_VAL12 } -#define CHOICE2_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE2_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; -#define CHOICE2_NUMVALS 4 - -#define CUSTOM_RESET_TO_DEFAULT resetdvar CHOICE1_DVAR; resetdvar CHOICE2_DVAR; - -{ - #include "ui_mp/custom_options_popup.inc" -} - -//*********************************************************************************** -// Free for All specate settings -//*********************************************************************************** -#define CUSTOM_OPTIONS_POPUP_MENU_NAME "popup_ffa_spectate_settings" -#define MENUDEF_NAME popup_ffa_spectate_settings -#define CUSTOM_OPTIONS_POPUP_TITLE "@CUSTOM_FFA_SPECTATE_OPTIONS" -#define CUSTOM_OPTIONS_POPUP_NUM_ITEMS 1 - -#define CHOICE1_TEXT "@CUSTOM_OPT_SPECTATE" -#define CHOICE1_DESC "@CUSTOM_OPT_SPECTATE_DESC" -#define CHOICE1_DVAR scr_game_spectatetype -#define CHOICE1_DVARTEXT CHOICE1_DVAR"_text" -#define CHOICE1_SHOW 1 -#define CHOICE1_STR1 "@MENU_DISABLED_CAPS" -#define CHOICE1_STR2 "@MPUI_RULES_PLAYERS_ONLY_CAPS" -#define CHOICE1_STR3 "@MPUI_RULES_FREE_CAPS" -#define CHOICE1_STR4 "" -#define CHOICE1_STR5 "" -#define CHOICE1_STR6 "" -#define CHOICE1_STR7 "" -#define CHOICE1_STR8 "" -#define CHOICE1_STR9 "" -#define CHOICE1_STR10 "" -#define CHOICE1_STR11 "" -#define CHOICE1_STR12 "" -#define CHOICE1_VAL1 0 -#define CHOICE1_VAL2 1 -#define CHOICE1_VAL3 2 -#define CHOICE1_VAL4 0 -#define CHOICE1_VAL5 0 -#define CHOICE1_VAL6 0 -#define CHOICE1_VAL7 0 -#define CHOICE1_VAL8 0 -#define CHOICE1_VAL9 0 -#define CHOICE1_VAL10 0 -#define CHOICE1_VAL11 0 -#define CHOICE1_VAL12 0 -#define CHOICE1_EXEC open GAME_OPTIONS_MENU_NAME"_"CHOICE1_TEXT; play CHOICE_FOCUS_SOUND; -#define CHOICE1_STRLIST { CHOICE1_STR1 CHOICE1_VAL1 CHOICE1_STR2 CHOICE1_VAL2 CHOICE1_STR3 CHOICE1_VAL3 CHOICE1_STR4 CHOICE1_VAL4 CHOICE1_STR5 CHOICE1_VAL5 CHOICE1_STR6 CHOICE1_VAL6 CHOICE1_STR7 CHOICE1_VAL7 CHOICE1_STR8 CHOICE1_VAL8 CHOICE1_STR9 CHOICE1_VAL9 CHOICE1_STR10 CHOICE1_VAL10 CHOICE1_STR11 CHOICE1_VAL11 CHOICE1_STR12 CHOICE1_VAL12 } -#define CHOICE1_NUMVALS 3 -#define CHOICE1_ONFOCUS setLocalVarBool ui_choice_hideaccept 1; -#define CHOICE1_LEAVEFOCUS setLocalVarBool ui_choice_hideaccept 0; - -#define CUSTOM_RESET_TO_DEFAULT resetdvar CHOICE1_DVAR; - -{ - #include "ui_mp/custom_options_popup.inc" -} diff --git a/mods/patch_mp/ui_mp/fileshare_playercard.menu b/mods/patch_mp/ui_mp/fileshare_playercard.menu deleted file mode 100644 index fb17f54..0000000 --- a/mods/patch_mp/ui_mp/fileshare_playercard.menu +++ /dev/null @@ -1,4006 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui_mp/popup_player_info.inc" - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/overlaybg.inc" -#include "ui/choices_setup_popmenu.menu" -#include "ui_mp/item_listbox.inc" - -#include "ui_mp/fileshare.inc" - - -#undef CHOICE_SIZE_X -#ifdef PC -#define CHOICE_SIZE_X 240 -#else -#define CHOICE_SIZE_X 260 -#endif - -#undef CHOICE_X_START -#define CHOICE_X_START 0 - -#undef CHOICE_Y_START -#define CHOICE_Y_START 85 -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - - -#define CLIP_SELECTED( menuName, feederName ) \ - ( getFeederData( menuName, feederName, "fileType" ) == "clip" ) - - -#include "ui_mp/switch_lobbies.inc" - -#define IS_LOBBY_HOST ( gameHost() && inLobby() ) -#define IS_NOT_LOBBY_HOST ( !gameHost() || !inLobby() ) - -#define ACTION_GOTO_THEATER( isUserFile, menuName, feedername ) \ - if( menuisopen( "menu_cr_matches_heat_map" ) ) \ - { \ - execNow set ui_theater_mapname (GetFileshareGameMap(dvarInt("selectedRecentGameIndex"))); \ - execNow set ui_theater_gametype (GetFileshareGameType(dvarInt("selectedRecentGameIndex"))); \ - execNow set ui_theater_demoname (GetFileshareFileName(dvarInt("selectedRecentGameIndex"))); \ - execNow set ui_theater_fileid (GetFileshareFileId(dvarInt("selectedRecentGameIndex")); \ - execNow set ui_theater_filesize (GetFileshareFileSize(dvarInt("selectedRecentGameIndex"))); \ - setdvar ui_combatResetViewDvars "0"; \ - closeImmediate menu_cr_matches_heat_map; \ - } \ - else \ - { \ - execNow set ui_theater_mapname (getFeederData( menuName, feedername, "map" )); \ - execNow set ui_theater_gametype (getFeederData( menuName, feedername, "gametype" )); \ - execNow set ui_theater_demoname (getFeederData( menuName, feedername, "fileName" )); \ - execNow set ui_theater_fileid (getFeederData( menuName, feedername, "fileID" )); \ - execNow set ui_theater_filesize (getFeederData( menuName, feedername, "fileSize" )); \ - closeImmediate menuName; \ - } \ - if ( dvarInt( "xblive_theater" ) == 0 ) \ - { \ - if ( IS_LOBBY_HOST ) \ - { \ - execNow "xstopparty"; \ - execNow "xstopprivateparty"; \ - } \ - elseif ( PrivatePartyHost() ) \ - { \ - execNow "xstopprivateparty"; \ - } \ - START_ACTION_THEATER \ - execNow "setactivemenu theater"; \ - } \ - execNow set ui_mapname (dvarString( ui_theater_mapname )); \ - execNow set ui_gametype (dvarString( ui_theater_gametype )); \ - execNow set ui_demoname (dvarString( ui_theater_demoname )); \ - execNow xpartyupdatedemo ( isUserFile ) ( dvarString( ui_theater_fileid ) ) ( dvarString( ui_theater_filesize ) ) "Film.demo"; \ - execNow "xupdatepartystate"; \ - execnow set fsOtherUserSlotSelected 0; \ - close fileshare_recentfilms; \ - close fileshare_landingpage; \ - close menu_playercard; \ - close menu_playercard_self; \ - close menu_playercard_self_basictraining; \ - close menu_friends; \ - close self; - -#define ACTION_GOTO_CUSTOMGAME( isUserFile, menuName, feedername ) \ - execNow set ui_theater_custom_fileid (getFeederData( menuName, feedername, "fileID" )); \ - execNow set ui_theater_custom_filesize (getFeederData( menuName, feedername, "fileSize" )); \ - close menuName; \ - if ( dvarInt( "xblive_privatematch" ) == 0 ) \ - { \ - if ( IS_LOBBY_HOST ) \ - { \ - execNow "xstopparty"; \ - execNow "xstopprivateparty"; \ - } \ - START_ACTION_PRIVATEMATCH \ - execNow "setactivemenu private"; \ - } \ - execNow "xupdatepartystate"; \ - execNow downloadCustomGametype ( dvarString( ui_theater_custom_fileid ) ) ( dvarString( ui_theater_custom_filesize ) ); \ - execnow set fsOtherUserSlotSelected 0; \ - close fileshare_recentfilms; \ - close fileshare_landingpage; \ - close menu_playercard; \ - close menu_playercard_self; \ - close menu_playercard_self_basictraining; \ - close menu_friends; \ - close self; - -#define ACTION_VIEW_SCREENSHOT( menuName, feedername ) \ - if ( !( FILESHARE_TASKSINPROGRESS ) ) \ - { \ - execNow screenshotDownload ( getFeederData( menuName, feedername, "fileID" ) ) ( getFeederData( menuName, feedername, "fileSize" ) ); \ - open menu_screenshot; \ - } - -// ========================================================================================= -// MY FILE SHARE -// menu_fileshare_myshare -// Shows the user's file share slots with details on the right -// -// menu_fileshare_myshare_options -// Brings up options when a slot is selected -// -// menu_fileshare_myshare_remove -// Shows a file remove confirmation -// ========================================================================================= - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - deactivateBlur; \ - if ( dvarInt( ui_theater_shortcut ) != 1 && dvarInt( ui_theater_shortcut_pc ) != 1 ) { \ - if ( dvarInt( xblive_basictraining ) ) \ - { \ - open menu_playercard_self_basictraining; \ - } \ - else \ - { \ - open menu_playercard_self; \ - } \ - }; \ - close self; - -menuDef -{ - name menu_fileshare_myshare - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - control MENU_CONTROL_OPENER - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - - onOpen - { - activateBlur; - execnow readFileShare; - execnow ui_animate menu_fileshare_myshare FileUpdater SetFile 0; - } - onFocus - { - } - onClose - { - if ( dvarInt( ui_theater_shortcut ) == 1 ) - { - setdvar ui_theater_shortcut 0; - CHANGE_MENU_SLIDE_DIRECTION( menu_fileshare_myshare, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT ) - } - elseif ( dvarInt( ui_theater_shortcut_pc ) == 1 ) - { - setdvar ui_theater_shortcut_pc 0; - CHANGE_MENU_SLIDE_DIRECTION( menu_fileshare_myshare, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT ) - open main; - } - } - onESC - { - ON_ESC_ACTION - } - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_MYSHARE_CAPS", when( 1 ) ) - PLAYER_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - itemDef - { - name fileShareSlots - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_MYSLOTS - FILESHARE_COMMON_OPTIONS - origin 0 0 - elementwidth 70 - elementheight 67 - elementtype LISTBOX_TEXT - textalign ITEM_ALIGN_MIDDLE_CENTER - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SUBTITLE - forecolor CHOICE_TEXTCOLOR - modal - doubleclick - { - if ( getFeederData( "slotOccupied" ) && !( FILESHARE_TASKSINPROGRESS ) ) - { - play CHOICE_FOCUS_SOUND; - open menu_fileshare_myshare_options; - } - } - onListboxSelectionChange - { - play CHOICE_FOCUS_SOUND; - execnow set fsSelectedFileID ( getFeederData( "fileID" ) ); - } - - visible 1 - - FILESHARE_SLOTS_USERAREAS - } - FILESHARE_BOTTOM( fileShareSlots, 1 ) - - /* SLOT OCCUPIED */ -#define SLOT_OCCUPIED_CONDITION \ - getFeederData( "fileShareSlots", "slotOccupied" ) && getFeederData( "fileShareSlots", "count" ) > 0.0 - -#undef FILESHARE_SELECTOR_TOOLTIP_Y -#ifdef PC - #define FILESHARE_SELECTOR_TOOLTIP_Y FILESHARE_TOOLTIP_PC_Y -#else //#ifdef PC - #define FILESHARE_SELECTOR_TOOLTIP_Y 95 -#endif //#ifdef PC - - // Tooltip - Occupied Slot - PREPROC_TEXT_DRAW_VIS_EX( -255 FILESHARE_SELECTOR_TOOLTIP_Y 280 36 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "MENU_FILESHARE_SLOTDESC" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, when( SLOT_OCCUPIED_CONDITION ), autowrapped; ) - PREPROC_SHADER_DRAW_VIS_EX( -265 FILESHARE_SELECTOR_TOOLTIP_Y 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", COLOR_BODY_TEXT, when( SLOT_OCCUPIED_CONDITION ), ; ) - - // Tooltip - Empty Slot - PREPROC_TEXT_DRAW_VIS_EX( -255 FILESHARE_SELECTOR_TOOLTIP_Y 280 36 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "MENU_FILESHARE_EMPTYSLOTDESC" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, when( SLOT_EMPTY_CONDITION( "menu_fileshare_myshare", "fileShareSlots" ) ), autowrapped; ) - PREPROC_SHADER_DRAW_VIS_EX( -265 FILESHARE_SELECTOR_TOOLTIP_Y 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", COLOR_BODY_TEXT, when( SLOT_EMPTY_CONDITION( "menu_fileshare_myshare", "fileShareSlots" ) ), ; ) - - FILESHARE_SPINNER( 145, -45, when( isTaskInProgress( "LiveFileShareRemoveFile" ) == 1 ), 350 ) - - execKeyInt APAD_UP - { - execnow set fsSelectedFileID ( getFeederData( "fileShareSlots", "fileID" ) ); - execnow set fshSelectLastSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt DPAD_UP - { - execnow set fsSelectedFileID ( getFeederData( "fileShareSlots", "fileID" ) ); - execnow set fshSelectLastSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt APAD_DOWN - { - execnow set fsSelectedFileID ( getFeederData( "fileShareSlots", "fileID" ) ); - execnow set fshSelectFirstSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt DPAD_DOWN - { - execnow set fsSelectedFileID ( getFeederData( "fileShareSlots", "fileID" ) ); - execnow set fshSelectFirstSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt APAD_LEFT - { - play CHOICE_FOCUS_SOUND; - } - - execKeyInt DPAD_LEFT - { - play CHOICE_FOCUS_SOUND; - } - - execKeyInt APAD_RIGHT - { - play CHOICE_FOCUS_SOUND; - } - - execKeyInt DPAD_RIGHT - { - play CHOICE_FOCUS_SOUND; - } - - itemDef - { - name "FileUpdater" - type ITEM_TYPE_TEXT - rect 0 0 1 1 - visible 1 - decoration - text "" - - state - { - name "SetFile" - onEnter - { - execnow set fsSelectedFileID ( getFeederData( "fileShareSlots", "fileID" ) ); - changeState "Wait" 0; - } - } - - state - { - name "Wait" - onEnter - { - changeState "SetFile" 100; - } - } - } - -#ifdef CONSOLE - itemDef - { - type ITEM_TYPE_TEXT - rect -146 80 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( int( getFeederData( "fileShareSlots", "slot" ) ) ) - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_SMALL - visible 1 - decoration - } -#endif - -#ifndef PC - itemDef - { - type ITEM_TYPE_TEXT - rect -160 (FILESHARE_FRAME_HEIGHT/2) 50 17 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@PLATFORM_SELECT" - textfont CHOICE_TEXTFONT - - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_LEFT - visible when( getFeederData( "fileShareSlots", "slotOccupied" ) == 1 ) - decoration - } -#endif //#ifndef PC - - NEW_FRAME_BUTTON_NOICON( 1, 28 0 0 18 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "", execnow "updatemarketplace";, ;, ;, 1, ;, ; ) - //FILESHARE_LIVEBLURB( -271, 50, 290, 100, HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, !IsPremiumSubscriber(), ( localVarInt( ui_highlight ) == 1 ) ) - -#ifdef CONSOLE - #define SLOTNUMRECT rect -146 80 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - #define OFNUMRECT rect -142 80 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - - itemDef - { - type ITEM_TYPE_TEXT - SLOTNUMRECT - exp text( int( getFeederData( "fileShareSlots", "slot" ) ) ) - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_RIGHT - forecolor 1 1 1 1 - visible 1 - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - OFNUMRECT - text "@MENU_FILESHARE_OF18" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_LEFT - forecolor 1 1 1 1 - visible when( IsPremiumSubscriber() ) - } - - itemDef - { - type ITEM_TYPE_TEXT - OFNUMRECT - text "@MENU_FILESHARE_OF6" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_LEFT - forecolor 1 1 1 1 - visible when( !IsPremiumSubscriber() ) - } - - #define SLOTNUMARROWPOSITIONY 75 - - // Top Arrow - PREPROC_SHADER_DRAW_VIS_EX( -114 SLOTNUMARROWPOSITIONY 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_left", COLOR_BODY_TEXT, when( IsPremiumSubscriber() && getFeederData( "fileShareSlots", "slot" ) > 6 ), rotation 90; ) - - // Bottom Arrow 1 - PREPROC_SHADER_DRAW_VIS_EX( -107 SLOTNUMARROWPOSITIONY 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", COLOR_BODY_TEXT, when( IsPremiumSubscriber() && getFeederData( "fileShareSlots", "slot" ) > 6 && getFeederData( "fileShareSlots", "slot" ) < 13 ), rotation 90; ) - - // Bottom Arrow 2 - PREPROC_SHADER_DRAW_VIS_EX( -114 SLOTNUMARROWPOSITIONY 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", COLOR_BODY_TEXT, when( IsPremiumSubscriber() && getFeederData( "fileShareSlots", "slot" ) <= 6 ), rotation 90; ) -#endif //#ifdef CONSOLE - // Details - FILESHARE_DETAILS( 35, (NEW_FRAME_CHOICE_Y_START-1), HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, "menu_fileshare_myshare", "fileShareSlots", SLOT_OCCUPIED_CONDITION ) - - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, ON_ESC_ACTION ) - - #include "ui/safearea.menu" -} - - - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - deactivateBlur; \ - close self; - -menuDef -{ - name fileshare_mymovie - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - control MENU_CONTROL_OPENER - soundloop MENU_MUSIC - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - - // Title and Subtitle if we are through the playercard - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_MYMOVIE_CAPS", when( 1 ) ) - - onOpen - { - activateblur; - } - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - } - onFocus { } - onESC - { - ON_ESC_ACTION - } - - execKeyInt BUTTON_X - { - close self; - } - - execKeyInt BUTTON_B - { - if ( dvarInt( ui_theater_shortcut ) != 1 && dvarInt( ui_theater_shortcut_pc ) != 1 ) { - if ( dvarInt( xblive_basictraining ) ) - { - open menu_playercard_self_basictraining; - } - else - { - open menu_playercard_self; - } - }; - close self; - close menu_fileshare_myshare; - } - - PLAYER_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - FILESHARE_MOVIE( -271, -125, 290, 165, HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, getMySlotInfo( 20, "slotOccupied" ) == 1, ( localVarInt( ui_highlight ) == 3 ) ) - FILESHARE_NOMOVIE( -150, -100, 300, 200, HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, getMySlotInfo( 20, "slotOccupied" ) != 1, ( localVarInt( ui_highlight ) == 3 ) ) - -#define FILESHARE_MOVIE_ACTION \ - if ( getMySlotInfo( 20, "slotOccupied" ) == 1 ) \ - { \ - execnow set fsSelectedFileName ( getMySlotInfo( 20, "name" ) ); \ - execnow set fsIsSelectedFileNameModified ( getMySlotInfo( 20, "isModifiedName" ) ); \ - execnow set fsSelectedFileDescription ( getMySlotInfo( 20, "description" ) ); \ - execnow set fsIsSelectedFileDescriptionModified ( getMySlotInfo( 20, "isModifiedDescription" ) ); \ - open menu_fileshare_mymovie_options; \ - } - - FILESHARE_MOVIE_DETAILS( 35, -20, HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, getMySlotInfo( 20, "slotOccupied" ) == 1 ) - - itemDef - { - style WINDOW_STYLE_SPINNER - rect -271 -125 290 165 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - visible when( isTaskInProgress( "LiveFileShareRemoveFile" ) == 1 ) - decoration - } - - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, ON_ESC_ACTION ) - - itemDef - { - type ITEM_TYPE_TEXT - rect -210 206 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@PLATFORM_FILESHARE_MYFILESHARE" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_LEFT - visible 1 - decoration - } -} - - - - - -// ========================================================================================= -// FILE SHARE (OTHER PLAYER) -// menu_fileshare_share -// Shows the user's file share slots with details on the right -// -// menu_fileshare_share_options -// Brings up options when a slot is selected -// ========================================================================================= - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - deactivateBlur; \ - close self; \ - open menu_playercard; - -menuDef -{ - name menu_fileshare_share - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - - onOpen - { - activateBlur; - execnow readFileShare ( dvarString( selectedPlayerXuid ) ); - execnow ui_animate menu_fileshare_share FileUpdater SetFile 0; - } - onFocus - { - } - onClose - { - deactivateBlur; - } - onESC - { - ON_ESC_ACTION - } - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, dvarString("selectedFriendName") + locString("MENU_APOSTROPHE_S")+" "+locString("MENU_PLAYERCARD_CAPS"), 1 ) - NEW_FRAME_SUBTITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_CAPS", 1 ) - - FRIEND_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - itemDef - { - name fileShareSlots - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_SLOTS - FILESHARE_COMMON_OPTIONS - elementwidth 70 - elementheight 70 - elementtype LISTBOX_TEXT - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign HORIZONTAL_ALIGN_LEFT - textfont UI_FONT_NORMAL - forecolor CHOICE_TEXTCOLOR - modal - doubleclick - { - if ( getFeederData( "slotOccupied" ) ) - { - play CHOICE_FOCUS_SOUND; - execnow set fsSelectedFileName ( getFeederData( name ) ); - execnow set fsIsSelectedFileNameModified ( getFeederData( isModifiedName ) ); - execnow set fsSelectedFileDescription ( getFeederData( description ) ); - execnow set fsIsSelectedFileDescriptionModified ( getFeederData( isModifiedDescription ) ); - execnow set fsOtherUserSlotSelected ( getFeederData ( "menu_fileshare_share", "fileShareSlots", "slot" ) ); - open menu_fileshare_share_options; - } - } - onListboxSelectionChange - { - play CHOICE_FOCUS_SOUND; - } - - visible when( isTaskInProgress( "LiveFileShareGetListing" ) != 1 ) - - FILESHARE_SLOTS_USERAREAS - } - FILESHARE_BOTTOM( fileShareSlots, 0 ) - - // File details - FILESHARE_DETAILS( 35, (NEW_FRAME_CHOICE_Y_START-1), HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, - "menu_fileshare_share", "fileShareSlots", - getFeederData( "fileShareSlots", "slotOccupied" ) && getFeederData( "fileShareSlots", "count" ) > 0.0 ) - - FILESHARE_PROGRESS_INDICATOR_SIZE( 250, -120, 24, 24, 0, ( isTaskInProgress( "LiveFileShareSearch" ) == 1 || isTaskInProgress( "LiveFileShareTransfer" ) == 1 ) ) - -#ifdef CONSOLE - itemDef - { - type ITEM_TYPE_TEXT - rect -136 170 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( int( getFeederData( "fileShareSlots", "slot" ) ) ) - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_RIGHT - visible when( isTaskInProgress( "LiveFileShareGetListing" ) != 1 ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect -132 170 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_OF" ) + " " + dvarInt( fsMaxPrivateSlotRowsOther ) * 3 ) - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_LEFT - visible when( isTaskInProgress( "LiveFileShareGetListing" ) != 1 ) - decoration - } -#endif //#ifdef CONSOLE - - itemDef - { - name "FileUpdater" - type ITEM_TYPE_TEXT - rect 0 0 1 1 - visible 1 - decoration - text "" - - state - { - name "SetFile" - onEnter - { - execnow set fsOtherUserSlotSelected ( getFeederData( "fileShareSlots", "slot" ) ); - execnow set fsSelectedFileID ( getFeederData( "fileShareSlots", "fileID" ) ); - changeState "Wait" 0; - } - } - - state - { - name "Wait" - onEnter - { - changeState "SetFile" 100; - } - } - } - - execKeyInt APAD_LEFT - { - play CHOICE_FOCUS_SOUND; - } - - execKeyInt DPAD_LEFT - { - play CHOICE_FOCUS_SOUND; - } - - execKeyInt APAD_RIGHT - { - play CHOICE_FOCUS_SOUND; - } - - execKeyInt DPAD_RIGHT - { - play CHOICE_FOCUS_SOUND; - } - - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, ON_ESC_ACTION ) - - #include "ui/safearea.menu" -} -#include "ui_mp/popupstyle.inc" - -menuDef -{ - name menu_fileshare_share_transfer - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - onOpen - { - activateBlur; - READ_FILE_SHARE; - } - onFocus - { - play CHOICE_FOCUS_SOUND; - } - onClose - { - deactivateblur; - } - onESC - { - close self; - } - execKeyInt APAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt APAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_MYSHARE_CAPS", 1 ) - NEW_FRAME_SUBTITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_CHOOSESLOT", 1 ) - PLAYER_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - itemDef - { - name fileShareSlots - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_MYSLOTS - FILESHARE_COMMON_OPTIONS - elementwidth 70 - elementheight 70 - elementtype LISTBOX_TEXT - textalign HORIZONTAL_ALIGN_LEFT - textfont UI_FONT_NORMAL - forecolor CHOICE_TEXTCOLOR - modal - doubleclick - { - if ( !( FILESHARE_TASKSINPROGRESS ) ) - { - play CHOICE_FOCUS_SOUND; - if ( getFeederData( "slotOccupied" ) != 1 ) - { - open menu_fileshare_share_transfer_save; - } - else - { - open menu_fileshare_share_transfer_confirm; - } - } - } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - visible 1 - FILESHARE_SLOTS_USERAREAS - } - FILESHARE_BOTTOM( fileShareSlots, 1 ) - FILESHARE_DETAILS( 35, (NEW_FRAME_CHOICE_Y_START-1), HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, - "menu_fileshare_share_transfer", "fileShareSlots", - getFeederData( "fileShareSlots", "slotOccupied" ) && getFeederData( "fileShareSlots", "count" ) > 0.0 ) - -#ifdef CONSOLE - PREPROC_TEXT_DRAW_VIS( -144 158 30 15 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) + " " + locString( "@MENU_FILESHARE_OF6") ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, when( !IsPremiumSubscriber() ) ) - - PREPROC_TEXT_DRAW_VIS( -144 158 30 15 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) + " " + locString( "@MENU_FILESHARE_OF18") ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, when( IsPremiumSubscriber() ) ) - - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_left", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) > 6 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -107 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) > 6 && getFeederData( "fileShareSlots", "slot" ) < 13 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) <= 6 ), - rotation 90; ) -#endif //#ifdef CONSOLE -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, close self; ) -#else // #ifdef PC - NEW_FRAME_BACK_BUTTON( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) -#endif // #else // #ifdef PC -} - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_share_transfer_confirm, activateblur; execNow raiseFeederEvent Populate;, deactivateblur; close self;, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent Clear; - } - - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_REPLACECONFIRM", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 - menuItemsDef - { - maxRows 4 - DYNAMIC_MENU_COMMON_COLUMNS - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Yes - { - open menu_fileshare_share_transfer_save; - close self; - } - onEvent No { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate { - execNow addToFeeder Yes MENU_YES; - execNow addToFeeder No MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - - - - - - - - -// ========================================================================================= -// RECENT GAMES (MY) -// menu_fileshare_myrecentgames -// Shows the list of recent games -// -// menu_fileshare_myrecentgames_choose -// Options when one of those games are chosen -// -// menu_fileshare_myrecentgames_transfer -// If the recent game is chosen to be transferred to file share, this brings up -// the slot selection for tranfer -// ========================================================================================= - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - deactivateBlur; \ - if ( dvarInt( ui_theater_shortcut ) != 1 && dvarInt( ui_theater_shortcut_pc ) != 1 ) { \ - if ( dvarInt( xblive_basictraining ) ) \ - { \ - open menu_playercard_self_basictraining; \ - } \ - else \ - { \ - open menu_playercard_self; \ - } \ - }; \ - close self; - -#ifdef PC - #define MYRECENTGAMES_LISTBOX_PLATFORM_OPTIONS \ - usePaging -#else //#ifdef PC - #define MYRECENTGAMES_LISTBOX_PLATFORM_OPTIONS \ - noscrollbars -#endif //#ifdef PC - -menuDef -{ - name menu_fileshare_myrecentgames - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - control MENU_CONTROL_OPENER - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - - onOpen - { - activateBlur; - execnow fileShareGetRecentGames; - execnow fileShareSetPooledFileContext "self"; - //execnow fileShareExpireFileDetails; - execnow set fsSelectedFileID 0; - } - onFocus - { - } - onClose - { - deactivateBlur; - if ( dvarInt( ui_theater_shortcut ) == 1 ) - { - setdvar ui_theater_shortcut 0; - CHANGE_MENU_SLIDE_DIRECTION( menu_fileshare_myrecentgames, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT ) - } - elseif ( dvarInt( ui_theater_shortcut_pc ) == 1 ) - { - setdvar ui_theater_shortcut_pc 0; - CHANGE_MENU_SLIDE_DIRECTION( menu_fileshare_myrecentgames, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT ) - open main; - } - } - onESC - { - ON_ESC_ACTION - } - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - - // Title and Subtitle if we are through the playercard - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_MYRECENTGAMES_CAPS", when( 1 ) ) - PLAYER_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - itemDef - { - name fileShareRecentGames - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_SEARCHRESULTS - rect -265 -127 250 230 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - elementwidth 30 - elementheight 16 - elementtype LISTBOX_TEXT - textstyle ITEM_TEXTSTYLE_NORMAL - textfont UI_FONT_NORMAL - textscale CHOICE_TEXTSIZE - textalign HORIZONTAL_ALIGN_LEFT - textalignx 12 - forecolor CHOICE_TEXTCOLOR - focusColor CHOICE_TEXTCOLOR - disableColor CHOICE_TEXTCOLOR - #ifdef XENON - selectIcon "ui_button_xenon_3d_a_32x32" - #endif - #ifdef PS3 - selectIcon "ui_button_ps3_x_32x32" - #endif - outlinecolor 1 1 1 1 - elementHighlightColor 0 0 0 1 - elementBackgroundColor NEW_FRAME_TRANSPARENCY - noBlinkingHighlight - modal - MYRECENTGAMES_LISTBOX_PLATFORM_OPTIONS - /* x y w h len horzAlign vertAlign*/ - userarea 1 10 -1 200 18 50 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP - visible 1 - onListboxSelectionChange - { - if( getFeederData( "count" ) > 1 ) - { - play CHOICE_FOCUS_SOUND; - } - } - doubleclick - { - if( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) && getFeederData( fileID ) != 0 ) - { - execnow set fsSelectedFileName ( getFeederData( name ) ); - execNow set fsSelectedRecentGameID ( getFeederData( fileID ) ); - execnow set fsIsSelectedFileNameModified ( getFeederData( isModifiedName ) ); - execnow set fsSelectedFileDescription ( getFeederData( description ) ); - execnow set fsIsSelectedFileDescriptionModified ( getFeederData( isModifiedDescription ) ); - open menu_fileshare_myrecentgames_choose; - } - } - } - -#define FILESHARE_DETAILS_CONDITION \ - ( int( getFeederData( "fileShareRecentGames", "isSummaryLoaded" ) ) == 1 ) - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect 75 -130 150 150 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - forecolor 1 1 1 1 - ownerdraw UI_DRAWHEATMAP - visible when( FILESHARE_DETAILS_CONDITION ) - decoration - } - - FILESHARE_PROGRESS_INDICATOR_SIZE( 150, 0, 64, 64, 0, ( !FILESHARE_DETAILS_CONDITION && FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - - // File details - - itemDef - { - type ITEM_TYPE_TEXT - rect 0 0 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@MENU_FILESHARE_NORECENTGAME_MY" - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when ( !( FILESHARE_TASKSINPROGRESS ) && getFeederData( fileShareRecentGames, count ) < 1 ) - decoration - } - - itemDef - { - style WINDOW_STYLE_SHADER - rect FILESHARE_MATCHDETAILS_BGX FILESHARE_MATCHDETAILS_BGY FILESHARE_MATCHDETAILS_BGW 300 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - background "white" - forecolor 0 0 0 0.1 - visible when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) - decoration - } - - itemDef - { - style WINDOW_STYLE_SHADER - rect FILESHARE_MATCHDETAILS_BGX (FILESHARE_MATCHDETAILS_BGY + 220 ) FILESHARE_MATCHDETAILS_BGW 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - background "white" - forecolor 0 0 0 0.2 - visible when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) - decoration - } - - itemDef - { - style WINDOW_STYLE_SHADER - rect FILESHARE_MATCHDETAILS_BGX (FILESHARE_MATCHDETAILS_BGY + 260) FILESHARE_MATCHDETAILS_BGW 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - background "white" - forecolor 0 0 0 0.2 - visible when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) - decoration - } - - /* BACKGROUND TEAM ICON */ - PREPROC_SHADER_DRAW_VIS_EX( ( FILESHARE_MATCHDETAILS_BGX+ ( FILESHARE_MATCHDETAILS_W / 2 ) - 40 ) (FILESHARE_MATCHDETAILS_BGY + 220 ) 80 80 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( "menu_mp_lobby_" + getPooledFileDetails( "mapTeam" ) ), 0.9 0.9 0.9 0.2, - when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ), - ; ) - - /* BACKGROUND WAGER */ - PREPROC_SHADER_DRAW_VIS_EX( ( FILESHARE_MATCHDETAILS_BGX + ( FILESHARE_MATCHDETAILS_W / 2 ) - 80 ) (FILESHARE_MATCHDETAILS_BGY + 220 ) 160 80 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "menu_mp_lobby_chipstack", 0.3 0.3 0.3 0.2, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "isWager" ) == "1" ), ; ) - - /* BACKGROUND FREEFORALL */ - PREPROC_SHADER_DRAW_VIS_EX( ( FILESHARE_MATCHDETAILS_BGX + ( FILESHARE_MATCHDETAILS_W / 2 ) - 40 ) (FILESHARE_MATCHDETAILS_BGY + 220 ) 80 80 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "playlist_ffa", 0.3 0.3 0.3 0.2, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "isWager" ) == "0" ), ; ) - - - - /* TEXT KEY VALUES */ - FILESHARE_TEXTITEM_KEY( 1, text ( locString( "@MENU_FILESHARE_DATETIME" ) ), when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - FILESHARE_TEXTITEM_VALUE( 1, text ( getFeederData( "fileShareRecentGames", "datetime" ) ), when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - - FILESHARE_TEXTITEM_KEY( 2, text ( locString( "@MENU_FILESHARE_LENGTH" ) ), when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - FILESHARE_TEXTITEM_VALUE( 2, text ( getFeederData( "fileShareRecentGames", "length" ) ), when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - - FILESHARE_TEXTITEM_KEY( 3, text ( locString( "MENU_FILESHARE_KILLS" ) ), when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) ) - FILESHARE_TEXTITEM_VALUE( 3, text ( getPooledFileDetails( "mapKills" ) ), when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) ) - - FILESHARE_TEXTITEM_KEY( 4, text ( locString( "MENU_FILESHARE_DEATHS" ) ), when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) ) - FILESHARE_TEXTITEM_VALUE( 4, text ( getPooledFileDetails( "mapDeaths" ) ), when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) ) - - //////////////////////// - // TEAM BASED MATCHES - //////////////////////// - - /* TEAM ALLIES */ - itemDef - { - type ITEM_TYPE_TEXT - rect FILESHARE_MATCHDETAILS_X ( FILESHARE_MATCHDETAILS_Y + 35 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "mapAlliesScore" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect FILESHARE_MATCHDETAILS_X ( FILESHARE_MATCHDETAILS_Y - 23 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "mapAlliesName" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 4 ) - 20 ) ( FILESHARE_MATCHDETAILS_Y - 5 ) 40 40 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( getPooledFileDetails( "mapAlliesIcon" ) ), 1 1 1 0.8, - when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ), - ; ) - - - /* TEAM AXIS */ - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y + 35 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "mapAxisScore" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y - 23 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "mapAxisName" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + FILESHARE_MATCHDETAILS_W / 2 + ( FILESHARE_MATCHDETAILS_W / 4 ) - 20 ) ( FILESHARE_MATCHDETAILS_Y - 5 ) 40 40 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER , - ( getPooledFileDetails( "mapAxisIcon" ) ), 1 1 1 0.8, - when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ), - ; ) - - - /* VICTORY, DEFEAT OR DRAW */ - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_VICTORY" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor NEW_FRAME_GREEN_RGB 1 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "mapVictory" ) == "victory" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_DRAW" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor NEW_FRAME_BLUE_RGB 1 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "mapVictory" ) == "draw" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_DEFEAT" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor 1 0.3 0.3 0.8 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "mapVictory" ) == "defeat" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - //////////////////////// - // WAGER MATCHES - //////////////////////// - - // Placement medals - #define PLACEMENT_MEDAL_SIZE 40 - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_first", 1 1 1 1, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && getPooledFileDetails( "position" ) == "1" && getPooledFileDetails( "isValid" ) == "1" ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_second", 1 1 1 1, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && getPooledFileDetails( "position" ) == "2" && getPooledFileDetails( "isValid" ) == "1" ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_third", 1 1 1 1, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && getPooledFileDetails( "position" ) == "3" && getPooledFileDetails( "isValid" ) == "1" ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_fourth", 1 1 1 1, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && int( getPooledFileDetails( "position" ) ) >= 4 && getPooledFileDetails( "isValid" ) == "1" ), ; ) - - PREPROC_TEXT_DRAW_VIS( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) - 1 ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - getPooledFileDetails( "position" ), - TEXTSIZE_BIG, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 0.3, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && int( getPooledFileDetails( "position" ) ) >= 4 && getPooledFileDetails( "isValid" ) == "1" ); ) - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) + 2 ) ( FILESHARE_MATCHDETAILS_Y - 8 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "@MPUI_EARNINGS_CAPS" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isWager" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y +15 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "@MENU_POINTS", int( getPooledFileDetails( "wagerPayout" ) ) ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor NEW_FRAME_GREEN_RGB 1 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isWager" ) == "1" ) - decoration - } - - //////////////////////// - // FREE FOR ALL - //////////////////////// - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_VICTORY" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor NEW_FRAME_GREEN_RGB 1 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "0" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "position" ) == "1" ) - decoration - } - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_DEFEAT" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor 1 0.3 0.3 0.8 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "0" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "position" ) != "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y - 8 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "@MPUI_POSITION_CAPS" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "isWager" ) == "0" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y +15 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "position" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "isWager" ) == "0" ) - decoration - } - - - //////////////////////// - // FREE FOR ALL AND WAGER - //////////////////////// - itemDef - { - type ITEM_TYPE_TEXT - rect FILESHARE_MATCHDETAILS_X ( FILESHARE_MATCHDETAILS_Y - 8 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "@MPUI_SCORE_CAPS" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" ) - decoration - } - itemDef - { - type ITEM_TYPE_TEXT - rect FILESHARE_MATCHDETAILS_X ( FILESHARE_MATCHDETAILS_Y + 15 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "score" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" ) - decoration - } - - // Tooltip - Recent Game - PREPROC_TEXT_DRAW_VIS_EX( -255 115 230 36 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "MENU_FILESHARE_RECENTGAMESDESC" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ), autowrapped; ) - PREPROC_SHADER_DRAW_VIS_EX( -265 116 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", 1 1 1 1, when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ), ; ) - - - // Legend - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + 178 ) ( FILESHARE_MATCHDETAILS_Y - 157 ) 40 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_DEATHS" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_LEFT - textscale TEXTSIZE_SMALL - forecolor 0 0 0 0.8 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) - decoration - } - - PREPROC_SHADER_DRAW_VIS_EX( ( FILESHARE_MATCHDETAILS_X + 180 ) ( FILESHARE_MATCHDETAILS_Y - 140 ) 5 5 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER , - "white", 1 0 0 0.8, - when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ), - ; ) - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + 190 ) ( FILESHARE_MATCHDETAILS_Y - 142 ) 40 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "CUSTOM_ALL" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_LEFT - textscale TEXTSIZE_SMALL - forecolor 1 0.3 0.3 0.8 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) - decoration - } - - PREPROC_SHADER_DRAW_VIS_EX( ( FILESHARE_MATCHDETAILS_X + 180 ) ( FILESHARE_MATCHDETAILS_Y - 126 ) 4.5 4.5 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER , - "white", 1 1 0 0.8, - when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ), - ; ) - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + 190 ) ( FILESHARE_MATCHDETAILS_Y - 128 ) 40 10 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_YOURS_CAPS" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_LEFT - textscale TEXTSIZE_SMALL - forecolor 1 1 0.3 0.6 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) - decoration - autowrapped - } - - - - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, ON_ESC_ACTION ) - - - #include "ui/safearea.menu" -} - -menuDef -{ - name menu_fileshare_myrecentgames_transfer - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - onOpen - { - activateBlur; - READ_FILE_SHARE; - } - onFocus - { - play CHOICE_FOCUS_SOUND; - } - onClose - { - deactivateblur; - } - onESC - { - close self; - } - execKeyInt APAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt APAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_MYSHARE_CAPS", 1 ) - NEW_FRAME_SUBTITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_CHOOSESLOT", 1 ) - PLAYER_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - itemDef - { - name fileShareSlots - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_MYSLOTS - FILESHARE_COMMON_OPTIONS - elementwidth 70 - elementheight 70 - elementtype LISTBOX_TEXT - textalign HORIZONTAL_ALIGN_LEFT - textfont UI_FONT_NORMAL - forecolor CHOICE_TEXTCOLOR - modal - doubleclick - { - if ( !( FILESHARE_TASKSINPROGRESS ) ) - { - play CHOICE_FOCUS_SOUND; - if ( getFeederData( "slotOccupied" ) != 1 ) - { - open menu_fileshare_myrecentgames_transfer_save; - } - else - { - open menu_fileshare_myrecentgames_transfer_confirm; - } - } - } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - visible 1 - FILESHARE_SLOTS_USERAREAS - } - FILESHARE_BOTTOM( fileShareSlots, 1 ) - FILESHARE_DETAILS( 35, (NEW_FRAME_CHOICE_Y_START-1), HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, - "menu_fileshare_myrecentgames_transfer", "fileShareSlots", - getFeederData( "fileShareSlots", "slotOccupied" ) && getFeederData( "fileShareSlots", "count" ) > 0.0 ) - -#ifdef CONSOLE - PREPROC_TEXT_DRAW_VIS( -144 158 30 15 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) + " " + locString( "@MENU_FILESHARE_OF6") ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, when( !IsPremiumSubscriber() ) ) - - PREPROC_TEXT_DRAW_VIS( -144 158 30 15 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) + " " + locString( "@MENU_FILESHARE_OF18") ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, when( IsPremiumSubscriber() ) ) - - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_left", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) > 6 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -107 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) > 6 && getFeederData( "fileShareSlots", "slot" ) < 13 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) <= 6 ), - rotation 90; ) -#endif //#ifdef CONSOLE -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, close self; ) -#else // #ifdef PC - NEW_FRAME_BACK_BUTTON( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) -#endif // #else // #ifdef PC -} - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_myrecentgames_transfer_confirm, activateblur; execNow raiseFeederEvent Populate;, deactivateblur; close self;, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent Clear; - } - - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_REPLACECONFIRM", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 - menuItemsDef - { - maxRows 4 - DYNAMIC_MENU_COMMON_COLUMNS - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Yes - { - open menu_fileshare_myrecentgames_transfer_save; - close self; - } - onEvent No { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate { - execNow addToFeeder Yes MENU_YES; - execNow addToFeeder No MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - - - - - - - -// ========================================================================================= -// RECENT GAMES (OTHER PLAYER) -// menu_fileshare_recentgames -// Shows the list of recent games -// -// menu_fileshare_recentgames_choose -// Options when one of those games are chosen -// -// menu_fileshare_recentgames_transfer -// For transferring to the user's file share, this brings up a slot selection screen. -// -// menu_fileshare_recentgames_confirm -// If a slot is being overwritten, this shows a confirm dialogue -// ========================================================================================= - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - deactivateBlur; \ - close self; \ - open menu_playercard; - -menuDef -{ - name menu_fileshare_recentgames - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - - onOpen - { - activateBlur; - execnow set showHeatmapSpinner 0; - execnow fileShareSetPooledFileContext "friend"; - execnow fileShareGetRecentGames ( dvarString( selectedPlayerXuid ) ); - execnow ui_animate menu_fileshare_recentgames heatMap WaitForHeatmap 0; - execnow set fsSelectedFileID 0; - } - onFocus - { - } - onClose - { - deactivateBlur; - execnow ui_animate menu_fileshare_recentgames heatMap Hidden 0; - } - onESC - { - ON_ESC_ACTION - } - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, dvarString("selectedFriendName") + locString("MENU_APOSTROPHE_S")+" "+locString("MENU_PLAYERCARD_CAPS"), 1 ) - NEW_FRAME_SUBTITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_RECENTGAMES_CAPS", 1 ) - - FRIEND_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - itemDef - { - name fileShareRecentGames - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_SEARCHRESULTS - rect -265 -127 250 230 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - elementwidth 30 - elementheight 16 - elementtype LISTBOX_TEXT - textstyle ITEM_TEXTSTYLE_NORMAL - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - textalign HORIZONTAL_ALIGN_LEFT - textalignx 12 - forecolor CHOICE_TEXTCOLOR - focusColor CHOICE_TEXTCOLOR - disableColor CHOICE_TEXTCOLOR - #ifdef XENON - selectIcon "ui_button_xenon_3d_a_32x32" - #endif - #ifdef PS3 - selectIcon "ui_button_ps3_x_32x32" - #endif - outlinecolor 1 1 1 1 - elementHighlightColor 0 0 0 1 - elementBackgroundColor NEW_FRAME_TRANSPARENCY - noBlinkingHighlight - modal - noscrollbars - /* x y w h len horzAlign vertAlign*/ - userarea 1 10 -1 200 18 50 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP - visible 1 - onListboxSelectionChange - { - if( getFeederData( "count" ) > 1 ) - { - play CHOICE_FOCUS_SOUND; - execnow ui_animate menu_fileshare_recentgames heatMap RemoveStaleHeatmap 0; - } - } - doubleclick - { - if( getFeederData( "count" ) > 0.0 ) - { - execnow set fsSelectedFileName ( getFeederData( name ) ); - execnow set fsSelectedRecentGameID ( getFeederData( fileID ) ); - execnow set fsIsSelectedFileNameModified ( getFeederData( isModifiedName ) ); - execnow set fsSelectedFileDescription ( getFeederData( description ) ); - execnow set fsIsSelectedFileDescriptionModified ( getFeederData( isModifiedDescription ) ); - open menu_fileshare_recentgames_choose; - } - } - } - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect 75 -130 150 150 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - forecolor 1 1 1 1 - ownerdraw UI_DRAWHEATMAP - visible when( FILESHARE_DETAILS_CONDITION ) - decoration - } - - FILESHARE_PROGRESS_INDICATOR_SIZE( 150, 0, 64, 64, 0, ( !FILESHARE_DETAILS_CONDITION && FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - - // File details - itemDef - { - style WINDOW_STYLE_SHADER - rect FILESHARE_MATCHDETAILS_BGX FILESHARE_MATCHDETAILS_BGY FILESHARE_MATCHDETAILS_BGW 300 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - background "white" - forecolor 0 0 0 0.1 - visible when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) - decoration - } - - itemDef - { - style WINDOW_STYLE_SHADER - rect FILESHARE_MATCHDETAILS_BGX (FILESHARE_MATCHDETAILS_BGY + 220 ) FILESHARE_MATCHDETAILS_BGW 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - background "white" - forecolor 0 0 0 0.2 - visible when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) - decoration - } - - itemDef - { - style WINDOW_STYLE_SHADER - rect FILESHARE_MATCHDETAILS_BGX (FILESHARE_MATCHDETAILS_BGY + 260) FILESHARE_MATCHDETAILS_BGW 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - origin 0 0 - background "white" - forecolor 0 0 0 0.2 - visible when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) - decoration - } - - /* BACKGROUND TEAM ICON */ - PREPROC_SHADER_DRAW_VIS_EX( ( FILESHARE_MATCHDETAILS_BGX+ ( FILESHARE_MATCHDETAILS_W / 2 ) - 40 ) (FILESHARE_MATCHDETAILS_BGY + 220 ) 80 80 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( "menu_mp_lobby_" + getPooledFileDetails( "mapTeam" ) ), 0.9 0.9 0.9 0.2, - when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ), - ; ) - - /* BACKGROUND WAGER */ - PREPROC_SHADER_DRAW_VIS_EX( ( FILESHARE_MATCHDETAILS_BGX + ( FILESHARE_MATCHDETAILS_W / 2 ) - 80 ) (FILESHARE_MATCHDETAILS_BGY + 220 ) 160 80 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "menu_mp_lobby_chipstack", 0.3 0.3 0.3 0.2, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "isWager" ) == "1" ), ; ) - - /* BACKGROUND FREEFORALL */ - PREPROC_SHADER_DRAW_VIS_EX( ( FILESHARE_MATCHDETAILS_BGX + ( FILESHARE_MATCHDETAILS_W / 2 ) - 40 ) (FILESHARE_MATCHDETAILS_BGY + 220 ) 80 80 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "playlist_ffa", 0.3 0.3 0.3 0.2, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "isWager" ) == "0" ), ; ) - - /* TEXT KEY VALUES */ - FILESHARE_TEXTITEM_KEY( 1, text ( locString( "@MENU_FILESHARE_DATETIME" ) ), when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - FILESHARE_TEXTITEM_VALUE( 1, text ( getFeederData( "fileShareRecentGames", "datetime" ) ), when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - - FILESHARE_TEXTITEM_KEY( 2, text ( locString( "@MENU_FILESHARE_LENGTH" ) ), when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - FILESHARE_TEXTITEM_VALUE( 2, text ( getFeederData( "fileShareRecentGames", "length" ) ), when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ) ) - - FILESHARE_TEXTITEM_KEY( 3, text ( locString( "MENU_FILESHARE_KILLS" ) ), when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) ) - FILESHARE_TEXTITEM_VALUE( 3, text ( getPooledFileDetails( "mapKills" ) ), when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) ) - - FILESHARE_TEXTITEM_KEY( 4, text ( locString( "MENU_FILESHARE_DEATHS" ) ), when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) ) - FILESHARE_TEXTITEM_VALUE( 4, text ( getPooledFileDetails( "mapDeaths" ) ), when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) ) - - /* TEAM ALLIES */ - itemDef - { - type ITEM_TYPE_TEXT - rect FILESHARE_MATCHDETAILS_X ( FILESHARE_MATCHDETAILS_Y + 35 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "mapAlliesScore" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect FILESHARE_MATCHDETAILS_X ( FILESHARE_MATCHDETAILS_Y - 23 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "mapAlliesName" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 4 ) - 20 ) ( FILESHARE_MATCHDETAILS_Y - 5 ) 40 40 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - ( getPooledFileDetails( "mapAlliesIcon" ) ), 1 1 1 0.8, - when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ), - ; ) - - - /* TEAM AXIS */ - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y + 35 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "mapAxisScore" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y - 23 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "mapAxisName" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + FILESHARE_MATCHDETAILS_W / 2 + ( FILESHARE_MATCHDETAILS_W / 4 ) - 20 ) ( FILESHARE_MATCHDETAILS_Y - 5 ) 40 40 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER , - ( getPooledFileDetails( "mapAxisIcon" ) ), 1 1 1 0.8, - when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ), - ; ) - - - /* VICTORY, DEFEAT OR DRAW */ - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_VICTORY" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor NEW_FRAME_GREEN_RGB 1 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "mapVictory" ) == "victory" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_DRAW" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor NEW_FRAME_BLUE_RGB 1 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "mapVictory" ) == "draw" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_DEFEAT" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor 1 0.3 0.3 0.8 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "mapVictory" ) == "defeat" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "1" ) - decoration - } - - //////////////////////// - // WAGER MATCHES - //////////////////////// - - // Placement medals - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_first", 1 1 1 1, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && getPooledFileDetails( "position" ) == "1" && getPooledFileDetails( "isValid" ) == "1" ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_second", 1 1 1 1, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && getPooledFileDetails( "position" ) == "2" && getPooledFileDetails( "isValid" ) == "1" ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_third", 1 1 1 1, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && getPooledFileDetails( "position" ) == "3" && getPooledFileDetails( "isValid" ) == "1" ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "hud_icon_wager_fourth", 1 1 1 1, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && int( getPooledFileDetails( "position" ) ) >= 4 && getPooledFileDetails( "isValid" ) == "1" ), ; ) - - PREPROC_TEXT_DRAW_VIS( (FILESHARE_MATCHDETAILS_X + (FILESHARE_MATCHDETAILS_W/2) - (PLACEMENT_MEDAL_SIZE/2) - 1 ) ( FILESHARE_MATCHDETAILS_Y - 5) PLACEMENT_MEDAL_SIZE PLACEMENT_MEDAL_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - getPooledFileDetails( "position" ), - TEXTSIZE_BIG, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, 1 1 1 0.3, when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "1" && int( getPooledFileDetails( "position" ) ) >= 4 && getPooledFileDetails( "isValid" ) == "1" ); ) - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) + 2 ) ( FILESHARE_MATCHDETAILS_Y - 8 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "@MPUI_EARNINGS_CAPS" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isWager" ) == "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y +15 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "@MENU_POINTS", int( getPooledFileDetails( "wagerPayout" ) ) ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor NEW_FRAME_GREEN_RGB 1 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isWager" ) == "1" ) - decoration - } - - //////////////////////// - // FREE FOR ALL - //////////////////////// - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_VICTORY" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor NEW_FRAME_GREEN_RGB 1 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "0" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "position" ) == "1" ) - decoration - } - itemDef - { - type ITEM_TYPE_TEXT - rect (FILESHARE_MATCHDETAILS_X) ( FILESHARE_MATCHDETAILS_Y + 5 ) FILESHARE_MATCHDETAILS_W 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_DEFEAT" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor 1 0.3 0.3 0.8 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isWager" ) == "0" && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "position" ) != "1" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y - 8 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "@MPUI_POSITION_CAPS" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "isWager" ) == "0" ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + ( FILESHARE_MATCHDETAILS_W / 2 ) ) ( FILESHARE_MATCHDETAILS_Y +15 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "position" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" && getPooledFileDetails( "isWager" ) == "0" ) - decoration - } - - - //////////////////////// - // FREE FOR ALL AND WAGER - //////////////////////// - itemDef - { - type ITEM_TYPE_TEXT - rect FILESHARE_MATCHDETAILS_X ( FILESHARE_MATCHDETAILS_Y - 8 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "@MPUI_SCORE_CAPS" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" ) - decoration - } - itemDef - { - type ITEM_TYPE_TEXT - rect FILESHARE_MATCHDETAILS_X ( FILESHARE_MATCHDETAILS_Y + 15 ) ( FILESHARE_MATCHDETAILS_W / 2 ) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( getPooledFileDetails( "score" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_DEFAULT - forecolor LIGHT_GRAY - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" && getPooledFileDetails( "isTeamBased" ) == "0" ) - decoration - } - - - // Tooltip - Recent Game - PREPROC_TEXT_DRAW_VIS_EX( -255 115 230 36 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "MENU_FILESHARE_RECENTGAMESDESC" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ), autowrapped; ) - PREPROC_SHADER_DRAW_VIS_EX( -265 116 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", 1 1 1 1, when( FILESHARE_SEARCHPOPULATED( fileShareRecentGames ) ), ; ) - - - // Legend - PREPROC_SHADER_DRAW_VIS_EX( ( FILESHARE_MATCHDETAILS_X + 170 ) ( FILESHARE_MATCHDETAILS_Y - 155 ) 5 5 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER , - "white", 1 0 0 1, - when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ), - ; ) - - itemDef - { - type ITEM_TYPE_TEXT - rect ( FILESHARE_MATCHDETAILS_X + 180 ) ( FILESHARE_MATCHDETAILS_Y - 155 ) 5 5 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( locString( "MENU_FILESHARE_DEATHS" ) ) - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_LEFT - textscale TEXTSIZE_DEFAULT - forecolor 1 0.3 0.3 0.8 - visible when( FILESHARE_DETAILS_CONDITION && getPooledFileDetails( "isValid" ) == "1" ) - decoration - } - - - itemDef - { - type ITEM_TYPE_TEXT - rect 0 0 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@MENU_FILESHARE_NORECENTGAME_OTHER" - textfont CHOICE_TEXTFONT - textalign ITEM_ALIGN_MIDDLE_CENTER - textscale TEXTSIZE_SMALL - forecolor LIGHT_GRAY - visible when ( !( FILESHARE_TASKSINPROGRESS ) && getFeederData( fileShareRecentGames, count ) < 1 ) - decoration - } - - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, ON_ESC_ACTION ) - - #include "ui/safearea.menu" -} - -menuDef -{ - name menu_fileshare_recentgames_transfer - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - onOpen - { - activateBlur; - READ_FILE_SHARE; - } - onFocus - { - play CHOICE_FOCUS_SOUND; - } - onClose - { - deactivateblur; - } - onESC - { - close self; - } - execKeyInt APAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt APAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_MYSHARE_CAPS", 1 ) - NEW_FRAME_SUBTITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_CHOOSESLOT", 1 ) - PLAYER_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - itemDef - { - name fileShareSlots - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_MYSLOTS - FILESHARE_COMMON_OPTIONS - elementwidth 70 - elementheight 70 - elementtype LISTBOX_TEXT - textalign HORIZONTAL_ALIGN_LEFT - textfont UI_FONT_NORMAL - forecolor CHOICE_TEXTCOLOR - modal - doubleclick - { - if ( !( FILESHARE_TASKSINPROGRESS ) ) - { - play CHOICE_FOCUS_SOUND; - if ( getFeederData( "slotOccupied" ) != 1 ) - { - open menu_fileshare_recentgames_transfer_save; - } - else - { - open menu_fileshare_recentgames_transfer_confirm; - } - } - } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - visible 1 - FILESHARE_SLOTS_USERAREAS - } - FILESHARE_BOTTOM( fileShareSlots, 1 ) - FILESHARE_DETAILS( 35, (NEW_FRAME_CHOICE_Y_START-1), HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, - "menu_fileshare_recentgames_transfer", "fileShareSlots", - getFeederData( "fileShareSlots", "slotOccupied" ) && getFeederData( "fileShareSlots", "count" ) > 0.0 ) - -#ifdef CONSOLE - PREPROC_TEXT_DRAW_VIS( -144 158 30 15 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) + " " + locString( "@MENU_FILESHARE_OF6") ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, when( !IsPremiumSubscriber() ) ) - - PREPROC_TEXT_DRAW_VIS( -144 158 30 15 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) + " " + locString( "@MENU_FILESHARE_OF18") ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, when( IsPremiumSubscriber() ) ) - - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_left", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) > 6 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -107 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) > 6 && getFeederData( "fileShareSlots", "slot" ) < 13 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) <= 6 ), - rotation 90; ) -#endif //#ifdef CONSOLE -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, close self; ) -#else // #ifdef PC - NEW_FRAME_BACK_BUTTON( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) -#endif // #else // #ifdef PC -} - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_recentgames_transfer_confirm, activateblur; execNow raiseFeederEvent Populate;, deactivateblur; close self;, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent Clear; - } - - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_REPLACECONFIRM", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 - menuItemsDef - { - maxRows 4 - DYNAMIC_MENU_COMMON_COLUMNS - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Yes - { - open menu_fileshare_recentgames_transfer_save; - close self; - } - onEvent No { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate { - execNow addToFeeder Yes MENU_YES; - execNow addToFeeder No MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - - - - - - - - -// ========================================================================================= -// COMMUNITY -// menu_fileshare_community_choose -// On selecting an item from any search results, brings up choices on what to do with it -// -// menu_fileshare_community_transfer -// If transferring from the community search results to you file share, it shows -// your private slots to choose which one to transfer it to. -// -// fileshare_searchbox -// Shows a search box that allows filtering search results -// ========================================================================================= - -menuDef -{ - name menu_fileshare_community_transfer - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - onOpen - { - activateBlur; - READ_FILE_SHARE; - } - onFocus - { - play CHOICE_FOCUS_SOUND; - } - onClose - { - deactivateblur; - } - onESC - { - close self; - } - execKeyInt APAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt APAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_MYSHARE_CAPS", 1 ) - NEW_FRAME_SUBTITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@MENU_FILESHARE_CHOOSESLOT", 1 ) - PLAYER_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - itemDef - { - name fileShareSlots - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_MYSLOTS - FILESHARE_COMMON_OPTIONS - elementwidth 70 - elementheight 70 - elementtype LISTBOX_TEXT - textalign HORIZONTAL_ALIGN_LEFT - textfont UI_FONT_NORMAL - forecolor CHOICE_TEXTCOLOR - modal - doubleclick - { - if ( !( FILESHARE_TASKSINPROGRESS ) ) - { - play CHOICE_FOCUS_SOUND; - if ( getFeederData( "slotOccupied" ) != 1 ) - { - open menu_fileshare_community_transfer_save; - } - else - { - open menu_fileshare_community_transfer_confirm; - } - } - } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - visible 1 - FILESHARE_SLOTS_USERAREAS - } - FILESHARE_BOTTOM( fileShareSlots, 1 ) - FILESHARE_DETAILS( 35, (NEW_FRAME_CHOICE_Y_START-1), HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, - "menu_fileshare_community_transfer", "fileShareSlots", - getFeederData( "fileShareSlots", "slotOccupied" ) && getFeederData( "fileShareSlots", "count" ) > 0.0 ) - -#ifdef CONSOLE - PREPROC_TEXT_DRAW_VIS( -144 158 30 15 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) + " " + locString( "@MENU_FILESHARE_OF6") ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, when( !IsPremiumSubscriber() ) ) - - PREPROC_TEXT_DRAW_VIS( -144 158 30 15 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) + " " + locString( "@MENU_FILESHARE_OF18") ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, when( IsPremiumSubscriber() ) ) - - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_left", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) > 6 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -107 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) > 6 && getFeederData( "fileShareSlots", "slot" ) < 13 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( getFeederData( "fileShareSlots", "slot" ) <= 6 ), - rotation 90; ) -#endif //#ifdef CONSOLE -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, close self; ) -#else // #ifdef PC - NEW_FRAME_BACK_BUTTON( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) -#endif // #else // #ifdef PC -} - - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_community_transfer_confirm, activateblur; execNow raiseFeederEvent Populate;, deactivateblur; close self;, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent Clear; - } - - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_REPLACECONFIRM", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 - menuItemsDef - { - maxRows 4 - DYNAMIC_MENU_COMMON_COLUMNS - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Yes - { - open menu_fileshare_community_transfer_save; - close self; - } - onEvent No { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate { - execNow addToFeeder Yes MENU_YES; - execNow addToFeeder No MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - - - -#define SPINNERS_START_X 102 -#define SPINNERS_START_Y 40 - -#undef ON_APPLY_ACTION -#define ON_APPLY_ACTION \ - execnow set fshSearchBusy 1; \ - execnow ui_animate menu_fileshare_community StateChanger Wait 0; \ - execnow ui_animate menu_fileshare_community StateChanger Search 1500; \ - play CHOICE_FOCUS_SOUND; \ - close self; - -#undef ON_ESC -#define ON_ESC \ - execnow fileShareFilterRestore; \ - setdvar fsSearchRowValue1 dvarint(backup_fsSearchRowValue1); \ - setdvar fsSearchRowValue2 dvarint(backup_fsSearchRowValue2); \ - setdvar fsSearchRowValue3 dvarint(backup_fsSearchRowValue3); \ - setdvar fsSearchRowValue4 dvarint(backup_fsSearchRowValue4); \ - setdvar fsSearchRowValue5 dvarint(backup_fsSearchRowValue5); \ - setdvar fsSearchRowValue6 dvarint(backup_fsSearchRowValue6); \ - setdvar fsSearchRowText1 dvarstring(backup_fsSearchRowText1); \ - setdvar fsSearchRowText2 dvarstring(backup_fsSearchRowText2); \ - setdvar fsSearchRowText3 dvarstring(backup_fsSearchRowText3); \ - setdvar fsSearchRowText4 dvarstring(backup_fsSearchRowText4); \ - setdvar fsSearchRowText5 dvarstring(backup_fsSearchRowText5); \ - setdvar fsSearchRowText6 dvarstring(backup_fsSearchRowText6); \ - close self; - - -menuDef - -{ - SYSTEM_POPUP_SETUP_VIS( fileshare_searchbox, ;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_CHOOSEFILTER", 1 ) - - onOpen - { - activateblur; - execnow fileShareFilterBackup; - - setdvar backup_fsSearchRowValue1 dvarint(fsSearchRowValue1); - setdvar backup_fsSearchRowValue2 dvarint(fsSearchRowValue2); - setdvar backup_fsSearchRowValue3 dvarint(fsSearchRowValue3); - setdvar backup_fsSearchRowValue4 dvarint(fsSearchRowValue4); - setdvar backup_fsSearchRowValue5 dvarint(fsSearchRowValue5); - setdvar backup_fsSearchRowValue6 dvarint(fsSearchRowValue6); - - setdvar backup_fsSearchRowText1 dvarstring(fsSearchRowText1); - setdvar backup_fsSearchRowText2 dvarstring(fsSearchRowText2); - setdvar backup_fsSearchRowText3 dvarstring(fsSearchRowText3); - setdvar backup_fsSearchRowText4 dvarstring(fsSearchRowText4); - setdvar backup_fsSearchRowText5 dvarstring(fsSearchRowText5); - setdvar backup_fsSearchRowText6 dvarstring(fsSearchRowText6); - - if ( dvarInt( fsSearchFileType ) != FILESHARE_FILETYPE_CUSTOMGAME ) - { - setfocus fileShareSearchRow1; - } - else - { - setfocus fileShareSearchRow2; - } - } - onClose - { - deactivateblur; - } - onESC - { - ON_ESC - } - - SYSTEM_POPUP_BACK_BUTTON_EX( ON_ESC ); - SYSTEM_POPUP_BUTTON2( "@PLATFORM_APPLY_FILTER", ON_APPLY_ACTION, 1 ) - - SEARCH_SPINNER( "@MENU_FILESHARE_SORTING", 1, 2, 6, SPINNERS_START_X, ( SPINNERS_START_Y + 0 ), 251, setdvar fsSearchSelectedRow 1;, 1, 0 ) - SEARCH_SPINNER( "@MENU_FILESHARE_MAP", 2, 3, 1, SPINNERS_START_X, ( SPINNERS_START_Y + 20 ), 251, setdvar fsSearchSelectedRow 2;, 1, ( dvarInt( fsSearchRowValue1 ) != 0 || dvarInt( fsSearchFileType ) == FILESHARE_FILETYPE_CUSTOMGAME ) ) - SEARCH_SPINNER( "@MENU_FILESHARE_GAMETYPE", 3, 4, 2, SPINNERS_START_X, ( SPINNERS_START_Y + 40 ), 251, setdvar fsSearchSelectedRow 3;, 1, ( dvarInt( fsSearchRowValue1 ) != 0 ) ) - SEARCH_SPINNER( "@MENU_FILESHARE_AGE", 4, 5, 3, SPINNERS_START_X, ( SPINNERS_START_Y + 60 ), 251, setdvar fsSearchSelectedRow 4;, 1, ( dvarInt( fsSearchRowValue1 ) != 0 ) ) - SEARCH_SPINNER( "@MENU_FILESHARE_TAG", 5, 6, 4, SPINNERS_START_X, ( SPINNERS_START_Y + 80 ), 251, setdvar fsSearchSelectedRow 5;, 1, ( dvarInt( fsSearchRowValue1 ) != 0 ) ) - SEARCH_SPINNER( "@MENU_FILESHARE_PLAYERPREF",6, 1, 5, SPINNERS_START_X, ( SPINNERS_START_Y + 100 ), 251, setdvar fsSearchSelectedRow 6;, 1, ( dvarInt( fsSearchRowValue1 ) != 0 ) ) - - execKeyInt BUTTON_A - { - ON_APPLY_ACTION - } -} - - -// ========================================================================================= -// IN-GAME -// fileshare_slotselection_clip -// Selection screen when uploading a recorded clip -// -// fileshare_slotselection_scr -// Selection screen when uploading a screenshot -// ========================================================================================= -FILESHARE_INGAME_SLOTSELECTION( fileshare_slotselection_clip, "@PLATFORM_UPLOAD_CLIP", execnow demo_saveanduploadclip ( dvarInt( demo_cmdNum ) ) ( getFeederData( fileshare_slotselection_clip, fileShareSlots, ingameSlot ) );, open clip_save_screen; ) -FILESHARE_INGAME_SLOTSELECTION( fileshare_slotselection_scr, "@PLATFORM_UPLOAD_SCREENSHOT", execnow demo_savescreenshot 0 ( getFeederData( fileshare_slotselection_scr, fileShareSlots, ingameSlot ) );, open screenshot_save_screen ) - - - - -// ========================================================================================= -// SCREENSHOT -// menu_screenshot -// Renders a selected screenshot. -// ========================================================================================= -#define SCREENSHOT_VIEWER_BIAS 20 -#define SCREENSHOT_VIEWER_WIDTH 600 -#define SCREENSHOT_VIEWER_HEIGHT 360 -#define SCREENSHOT_EXPAND_MARGIN 10 -#define SCREENSHOT_VIEWER_X_EXPANDED (-SCREENSHOT_VIEWER_WIDTH/2) -#define SCREENSHOT_VIEWER_Y_EXPANDED (-SCREENSHOT_VIEWER_HEIGHT/2) -#define SCREENSHOT_SPINNER_SIZE 80 - -#define ALREADY_RATED ( GetUserFileRating( dvarString( fsSelectedFileID ) ) != 0 ) - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - if ( isTaskInProgress( "LiveFileShareReadFile" ) ) \ - { \ - execnow screenshotAbortDownload; \ - } \ - close self; - -menuDef -{ - name "menu_screenshot" - visible 1 - fullscreen 0 - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - backcolor 0 0 0 0 - style WINDOW_STYLE_FILLED - priority MENU_PRI_POPUP - popup - - onOpen - { - activateblur; - - if ( isTaskInProgress( "LiveFileShareReadFile" ) ) - { - execnow ui_animate menu_screenshot * Default 0; - } - else - { - execnow ui_animate menu_screenshot * Expand 0; - } - } - - onClose - { - deactivateblur; - } - - onEsc - { - ON_ESC_ACTION - } - - execKeyInt K_MWHEELDOWN - { - execNow screenshotZoom -0.1; - } - - execKeyInt K_MWHEELUP - { - execNow screenshotZoom 0.1; - } - - - itemDef - { - name "frame" - style WINDOW_STYLE_SHADER_FRAMED - type ITEM_TYPE_IMAGE - rect (-SCREENSHOT_SPINNER_SIZE/2) (-SCREENSHOT_SPINNER_SIZE/2) SCREENSHOT_SPINNER_SIZE SCREENSHOT_SPINNER_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - forecolor .2 .2 .2 1 - exp material( "menu_mp_lobby_frame_circle" ) - frame 16 0.5 FRAME_SIDE_ALL - visible 1 - decoration - - state - { - name "expand" - rect SCREENSHOT_VIEWER_X_EXPANDED SCREENSHOT_VIEWER_Y_EXPANDED SCREENSHOT_VIEWER_WIDTH SCREENSHOT_VIEWER_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - - onEnter - { - execNow ui_animate menu_screenshot screenshot display 300; - } - } - } - - itemDef - { - style WINDOW_STYLE_SPINNER - rect (-SCREENSHOT_SPINNER_SIZE/2) (-SCREENSHOT_SPINNER_SIZE/2) SCREENSHOT_SPINNER_SIZE SCREENSHOT_SPINNER_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - visible when( isTaskInProgress( "LiveFileShareReadFile" ) ) - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect 0 0 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SMALL - textalign ITEM_ALIGN_MIDDLE_CENTER - exp text ( getDownloadProgress() ) - visible when( isTaskInProgress( "LiveFileShareReadFile" ) ) - decoration - } - - itemDef - { - name "screenshot" - type ITEM_TYPE_OWNERDRAW - rect (-(SCREENSHOT_VIEWER_WIDTH-SCREENSHOT_VIEWER_BIAS)/2) (-(SCREENSHOT_VIEWER_HEIGHT-SCREENSHOT_VIEWER_BIAS)/2) (SCREENSHOT_VIEWER_WIDTH-SCREENSHOT_VIEWER_BIAS) (SCREENSHOT_VIEWER_HEIGHT-SCREENSHOT_VIEWER_BIAS) HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - ownerdraw UI_SCREENSHOT - visible 1 - forecolor 1 1 1 0 - decoration - - state - { - name "display" - forecolor 1 1 1 1 - } - } - - execKeyInt BUTTON_X - { - if ( !ALREADY_RATED ) - { - setdvar fileshare_rating_screenshot 1; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 0; - open fileshare_submitrating; - } - else - { - open fileshare_ratingsubmitted; - } - } - -#ifdef PC - NEW_FRAME_BUTTON_PC_LEFT_OFFSET( SCREENSHOT_VIEWER_WIDTH, SCREENSHOT_VIEWER_HEIGHT, 0, "@PLATFORM_BACK", ON_ESC_ACTION, when( getDownloadProgress() == 100 ); ) -#else // #ifdef PC - NEW_FRAME_BACK_BUTTON( (SCREENSHOT_VIEWER_WIDTH-(SCREENSHOT_VIEWER_BIAS*2)), SCREENSHOT_VIEWER_HEIGHT ) -#endif // #else // #ifdef PC - -#define RATE_SCREENSHOT_ACTION \ - setdvar fileshare_rating_screenshot 1; \ - setdvar fileshare_rating_film 0; \ - setdvar fileshare_rating_clip 0; \ - setdvar fileshare_rating_gametype 0; \ - open fileshare_submitrating; - -#define BUTTON_SPACING 20 -#define RATING_BUTTON_OFFSET ( getTextWidth( locString( "@PLATFORM_BACK" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) + 8 + BUTTON_SPACING ) - - // Rate Screenshot - NEW_FRAME_BUTTON_PC_LEFT_OFFSET( SCREENSHOT_VIEWER_WIDTH, SCREENSHOT_VIEWER_HEIGHT, RATING_BUTTON_OFFSET, - "@PLATFORM_DEMO_RATE_SCREENSHOT", - RATE_SCREENSHOT_ACTION, - when( getDownloadProgress() == 100 && GetUserFileRating( dvarString( fsSelectedFileID ) ) == 0 ) ) - - // See Rating - NEW_FRAME_BUTTON_PC_LEFT_OFFSET( SCREENSHOT_VIEWER_WIDTH, SCREENSHOT_VIEWER_HEIGHT, RATING_BUTTON_OFFSET, - "@PLATFORM_DEMO_SEERATING", - open fileshare_ratingsubmitted;, - when( getDownloadProgress() == 100 && GetUserFileRating( dvarString( fsSelectedFileID ) ) != 0 ) ) - -#define TEXT_SPACING 40 - -#define ZOOM_TEXT_X ( SCREENSHOT_VIEWER_WIDTH/2 - NEW_FRAME_DEFAULT_TITLE_X_OFFSET - getTextWidth( locString( "@PATCH_SCREENSHOT_ZOOM" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) ) - -#define PAN_TEXT_X ( ZOOM_TEXT_X - TEXT_SPACING - getTextWidth( locString( "@PATCH_SCREENSHOT_PAN" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) ) - - // Pan - itemDef - { - type ITEM_TYPE_TEXT - rect ((-SCREENSHOT_VIEWER_WIDTH/2)+220) (SCREENSHOT_VIEWER_HEIGHT/2+4) 0 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp rect X( PAN_TEXT_X ) - text "@PATCH_SCREENSHOT_PAN" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_LEFT - visible when( getDownloadProgress() == 100 ) - decoration - } - - // Zoom - itemDef - { - type ITEM_TYPE_TEXT - rect ((-SCREENSHOT_VIEWER_WIDTH/2)+420) (SCREENSHOT_VIEWER_HEIGHT/2+4) 0 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp rect X( ZOOM_TEXT_X ) - text "@PATCH_SCREENSHOT_ZOOM" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_LEFT - visible when( getDownloadProgress() == 100 ) - decoration - } -} - - - -// ========================================================================================= -// ERROR MENUS -// menu_fileshare_transfererror -// Any HTTP/Demonware error while transferring -// -// menu_fileshare_downloaderror -// Any HTTP/Demonware error while downloading -// -// menu_fileshare_uploaderror -// Any HTTP/Demonware error while uploading -// ========================================================================================= -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 1 - -FILESHARE_ERROR_MENU( menu_fileshare_transfererror, MENU_FILESHARE_TRANSFERERROR ) -FILESHARE_ERROR_MENU( menu_fileshare_downloaderror, MENU_FILESHARE_DOWNLOADERROR ) -FILESHARE_ERROR_MENU( menu_fileshare_uploaderror, MENU_FILESHARE_UPLOADERROR ) -FILESHARE_ERROR_MENU( menu_fileshare_maxlocalplayers, MENU_FILESHARE_MAX_LOCAL_PLAYERS ) - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 5 - -#ifdef PC -#define IS_PC 1 -#define RENDER 1 -#define SETUP_ACTION_PLAY_DEMO( isUserFile, menuName, feederName ) \ - close self; \ - if ( isTaskInProgress( "LiveFileShareReadFile" ) != 1 ) \ - { \ - if( menuisopen( "menu_cr_matches_heat_map" ) ) \ - { \ - execNow set ui_mapname (GetFileshareGameMap(dvarInt("selectedRecentGameIndex"))); \ - execNow set ui_gametype (GetFileshareGameType(dvarInt("selectedRecentGameIndex"))); \ - execNow set ui_demoname (GetFileshareFileName(dvarInt("selectedRecentGameIndex"))); \ - execNow set ui_theater_fileid (GetFileshareFileId(dvarInt("selectedRecentGameIndex"))); \ - execNow set ui_theater_filesize (GetFileshareFileSize(dvarInt("selectedRecentGameIndex"))); \ - } \ - else \ - { \ - execNow set ui_mapname (getFeederData( menuName, feedername, "map" )); \ - execNow set ui_gametype (getFeederData( menuName, feedername, "gametype" )); \ - execNow set ui_demoname (getFeederData( menuName, feedername, "fileName" )); \ - execNow set ui_theater_fileid (getFeederData( menuName, feederName, "fileID" )); \ - execNow set ui_theater_filesize (getFeederData( menuName, feederName, "fileSize" )); \ - } \ - open popup_downloadingfile; \ - setdvar ui_combatResetViewDvars "0"; \ - execNow downloaddemofile ( isUserFile ) ( dvarString( ui_theater_fileid ) ) ( dvarString( ui_theater_filesize ) ) ( dvarString( ui_demoname ) ) (!RENDER); \ - } -#define SETUP_ACTION_RENDER_DEMO( isUserFile, menuName, feederName ) \ - close self; \ - if ( isTaskInProgress( "LiveFileShareReadFile" ) != 1 ) \ - { \ - open popup_downloadingfile; \ - execNow set ui_mapname (getFeederData( menuName, feederName, "map" )); \ - execNow set ui_gametype (getFeederData( menuName, feederName, "gametype" )); \ - execNow set ui_demoname (getFeederData( menuName, feederName, "fileName" )); \ - execNow downloaddemofile ( isUserFile ) ( getFeederData( menuName, feederName, "fileID" )) (getFeederData( menuName, feederName, "fileSize" )) (getFeederData( menuName, feederName, "fileName" )) (RENDER); \ - } - -#else // #ifdef PC -#define IS_PC 0 -#endif // #else // #ifdef PC - -#define ON_OPEN_THEATER_BUTTON_TEXT \ - if ( dvarBool( xblive_theater ) == 0 ) \ - { \ - setlocalvarstring ui_theater_button_text MENU_FILESHARE_THEATER; \ - } \ - else \ - { \ - setlocalvarstring ui_theater_button_text MENU_FILESHARE_SELECT_FOR_PLAYBACK; \ - } - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_myshare_options, ON_OPEN_THEATER_BUTTON_TEXT; execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_FILE_ACTION", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 //HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_MIDDLE - - menuItemsDef - { - maxRows 6 - // THESE INCLUDE BACKGROUND, HIGHLIGHT AND SELECT BUTTON. DO NOT OMIT THESE. - DYNAMIC_MENU_COMMON_COLUMNS - - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - - onEvent Screenshot - { - ACTION_VIEW_SCREENSHOT( "menu_fileshare_myshare", "fileShareSlots" ) - } - - onEvent PlayPC - { - SETUP_ACTION_PLAY_DEMO( 1, "menu_fileshare_myshare", "fileShareSlots" ) - } - onEvent RenderPC - { - SETUP_ACTION_RENDER_DEMO( 1, "menu_fileshare_myshare", "fileShareSlots" ) - } - onEvent RatePC - { - if ( !(FILESHARE_TASKSINPROGRESS) ) - { - close self; - if ( !ALREADY_RATED ) - { - open fileshare_submitrating; - } - else - { - open fileshare_ratingsubmitted; - } - } - } - - onEvent Theatre - { - if ( IS_LOBBY_HOST || !dvarBool( "xblive_theater" ) ) - { - if ( !CanSwitchToLobby( dvarInt( party_maxplayers_theater ), dvarInt( party_maxlocalplayers_theater ) ) ) - { - open menu_fileshare_maxlocalplayers; - } - else - { - ACTION_GOTO_THEATER( 1, "menu_fileshare_myshare", "fileShareSlots" ) - } - } - } - - onEvent GoToCustom - { - ACTION_GOTO_CUSTOMGAME( 1, "menu_fileshare_myshare", "fileShareSlots" ) - } - - onEvent Remove - { - close self; - open menu_fileshare_myshare_remove; - } - - onEvent EditInfo - { - close self; - execNow set fsSelectedFileName ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "name" ) ); - execNow set fsIsSelectedFileNameModified ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "isModifiedName" ) ); - execNow set fsSelectedFileDescription ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "description" ) ); - execNow set fsIsSelectedFileDescriptionModified ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "isModifiedDescription" ) ); - execNow set fsSelectedFileTagIndex ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "userTagIndex" ) ); - open menu_fileshare_myshare_editinfo; - } - - onEvent Cancel { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate - { - if ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "fileType" ) == "screenshot" ) - { - //onFocus // Disable condition // text - execNow addToFeederExtended Screenshot noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_VIEW; - if( IS_PC ) - { - setdvar fileshare_rating_screenshot 1; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 0; - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATESCREENSHOT; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - } - elseif ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "fileType" ) != "customgamemode" ) - { - if ( IS_PC ) - { - setdvar fileshare_rating_screenshot 0; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 0; - - if ( CLIP_SELECTED( "menu_fileshare_myshare", "fileShareSlots" ) ) - { - setdvar fileshare_rating_clip 1; - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_CLIP; - execNow addToFeederExtended RenderPC noop (FILESHARE_TASKSINPROGRESS) MPUI_DEMO_RENDER_CLIP; - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATE_CLIP_ACTION; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - else - { - setdvar fileshare_rating_film 1; - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_FILM; - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATE_FILM_ACTION; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - } - else - { - if ( dvarBool( xblive_theater ) == 0 ) - { - execNow addToFeeder Theatre (localVarString( ui_theater_button_text )); - } - else - { - //onFocus // Disable condition // text - execNow addToFeederExtended Theatre noop (IS_NOT_LOBBY_HOST) (localVarString( ui_theater_button_text )); - } - } - } - elseif ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "fileType" ) == "customgamemode" ) - { - if( !IS_PC ) - { - execNow addToFeeder GoToCustom MPUI_START_CUSTOMGAME; - } - if( IS_PC ) - { - setdvar fileshare_rating_screenshot 0; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 1; - - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATE_CUSTOM_ACTION; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - } - - execNow addToFeeder EditInfo MENU_FILESHARE_EDITINFO; - - if ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "slotOccupied" ) ) - { - execNow addToFeeder Remove MENU_FILESHARE_REMOVE; - } - - execNow addToFeeder Cancel MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_mymovie_options, execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_FILE_ACTION", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START ( CHOICE_Y_START + 20 ) CHOICE_SIZE_X 400 //HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_MIDDLE - - menuItemsDef - { - maxRows 6 - // THESE INCLUDE BACKGROUND, HIGHLIGHT AND SELECT BUTTON. DO NOT OMIT THESE. - DYNAMIC_MENU_COMMON_COLUMNS - - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - - onEvent Cancel - { - close self; - } - - onEvent Remove - { - open menu_fileshare_mymovie_remove; - } - - onEvent EditInfo - { - close self; - execNow set fsSelectedFileName ( getMySlotInfo( 20, "name" ) ); - execNow set fsIsSelectedFileNameModified ( getMySlotInfo( 20, "isModifiedName" ) ); - execNow set fsSelectedFileDescription ( getMySlotInfo( 20, "description" ) ); - execNow set fsIsSelectedFileDescriptionModified ( getMySlotInfo( 20, "isModifiedDescription" ) ); - open menu_fileshare_mymovie_editinfo; - } - - onEvent Cancel { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate - { - execNow addToFeeder EditInfo MENU_FILESHARE_EDITINFO; - execNow addToFeeder Remove MENU_FILESHARE_REMOVE; - execNow addToFeeder Cancel MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 3 - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_myrecentgames_choose, ON_OPEN_THEATER_BUTTON_TEXT; execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_FILE_ACTION", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 - backgroundItemListbox "white" - - menuItemsDef - { - maxRows 4 - // THESE INCLUDE BACKGROUND, HIGHLIGHT AND SELECT BUTTON. DO NOT OMIT THESE. - DYNAMIC_MENU_COMMON_COLUMNS - - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent RenameAndPlace { ; } - onEvent PlaceInShare { - if ( !(FILESHARE_TASKSINPROGRESS) ) - { - open menu_fileshare_myrecentgames_transfer; - exec "wait; closeMenu menu_fileshare_myrecentgames_choose"; - } - } - onEvent PlayPC - { - SETUP_ACTION_PLAY_DEMO( 0, "menu_fileshare_myrecentgames", "fileShareRecentGames" ) - } - onEvent RenderPC - { - SETUP_ACTION_RENDER_DEMO( 0, "menu_fileshare_myrecentgames", "fileShareRecentGames" ) - } - onEvent Theatre - { - if ( IS_LOBBY_HOST || !dvarBool( "xblive_theater" ) ) - { - if ( !CanSwitchToLobby( dvarInt( party_maxplayers_theater ), dvarInt( party_maxlocalplayers_theater ) ) ) - { - open menu_fileshare_maxlocalplayers; - } - else - { - ACTION_GOTO_THEATER( 0, "menu_fileshare_myrecentgames", "fileShareRecentGames" ) - } - } - } - onEvent Cancel { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate - { - if ( IS_PC ) - { - if ( !menuisopen( menu_cr_matches_heat_map ) && CLIP_SELECTED( "menu_fileshare_myrecentgames", "fileShareRecentGames" ) ) - { - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_CLIP; - execNow addToFeederExtended RenderPC noop (FILESHARE_TASKSINPROGRESS) MPUI_DEMO_RENDER_CLIP; - } - else - { - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_FILM; - } - } - else - { - // Action 1 - Menu Item Text - if ( dvarBool( xblive_theater ) == 0 ) { execNow addToFeeder Theatre (localVarString( ui_theater_button_text )); } - if ( dvarBool( xblive_theater ) == 1 ) - { - //onFocus // Disable condition // text - execNow addToFeederExtended Theatre noop (IS_NOT_LOBBY_HOST) (localVarString( ui_theater_button_text )); - } - } - //onFocus // Disable condition // text - execNow addToFeederExtended PlaceInShare noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_PLACEINSHARE; - execNow addToFeeder Cancel MENU_CANCEL; - } - onfocus { DYNAMIC_MENU_INIT( menu_fileshare_myrecentgames_choose ) } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 2 - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_myshare_remove, execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_REMOVECONFIRM", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 //HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_MIDDLE - - menuItemsDef - { - maxRows 4 - // THESE INCLUDE BACKGROUND, HIGHLIGHT AND SELECT BUTTON. DO NOT OMIT THESE. - DYNAMIC_MENU_COMMON_COLUMNS - - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Yes - { - execNow fileShareRemove ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "slot" ) ); - close menu_fileshare_myshare_options; - close self; - } - onEvent No { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate { - // Action 1 - Menu Item Text - execNow addToFeeder Yes MENU_YES; - execNow addToFeeder No MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_mymovie_remove, execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_REMOVECONFIRM", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 //HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_MIDDLE - - menuItemsDef - { - maxRows 4 - // THESE INCLUDE BACKGROUND, HIGHLIGHT AND SELECT BUTTON. DO NOT OMIT THESE. - DYNAMIC_MENU_COMMON_COLUMNS - - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Yes - { - execNow fileShareRemove ( 20 ); - close menu_fileshare_mymovie_options; - close self; - } - onEvent No { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate { - // Action 1 - Menu Item Text - execNow addToFeeder Yes MENU_YES; - execNow addToFeeder No MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 4 - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_share_options, ON_OPEN_THEATER_BUTTON_TEXT; execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_FILE_ACTION", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 //HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_MIDDLE - - menuItemsDef - { - maxRows 5 - // THESE INCLUDE BACKGROUND, HIGHLIGHT AND SELECT BUTTON. DO NOT OMIT THESE. - DYNAMIC_MENU_COMMON_COLUMNS - - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Screenshot { ACTION_VIEW_SCREENSHOT( "menu_fileshare_share", "fileShareSlots" ) } - onEvent PlayPC - { - SETUP_ACTION_PLAY_DEMO( 1, "menu_fileshare_share", "fileShareSlots" ) - } - onEvent RenderPC - { - SETUP_ACTION_RENDER_DEMO( 1, "menu_fileshare_share", "fileShareSlots" ) - } - onEvent Theatre - { - if ( IS_LOBBY_HOST || !dvarBool( "xblive_theater" ) ) - { - if ( !CanSwitchToLobby( dvarInt( party_maxplayers_theater ), dvarInt( party_maxlocalplayers_theater ) ) ) - { - open menu_fileshare_maxlocalplayers; - } - else - { - ACTION_GOTO_THEATER( 1, "menu_fileshare_share", "fileShareSlots" ) - } - } - } - onEvent RatePC - { - if ( !(FILESHARE_TASKSINPROGRESS) ) - { - close self; - if ( !ALREADY_RATED ) - { - open fileshare_submitrating; - } - else - { - open fileshare_ratingsubmitted; - } - } - } - onEvent GoToCustom - { - ACTION_GOTO_CUSTOMGAME( 1, "menu_fileshare_share", "fileShareSlots" ) - } - onEvent Cancel { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Transfer - { - if ( !(FILESHARE_TASKSINPROGRESS) ) - { - close self; - open menu_fileshare_share_transfer; - } - } - onEvent Populate - { - if ( getFeederData( "menu_fileshare_share", "fileShareSlots", "fileType" ) == "screenshot" ) - { - //onFocus // Disable condition // text - execNow addToFeederExtended Screenshot noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_VIEW; - if( IS_PC ) - { - setdvar fileshare_rating_screenshot 1; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 0; - - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATESCREENSHOT; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - } - elseif ( getFeederData( "menu_fileshare_share", "fileShareSlots", "fileType" ) != "customgamemode" ) - { - if ( IS_PC ) - { - setdvar fileshare_rating_screenshot 0; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 0; - - if ( CLIP_SELECTED( "menu_fileshare_share", "fileShareSlots" ) ) - { - setdvar fileshare_rating_clip 1; - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_CLIP; - execNow addToFeederExtended RenderPC noop (FILESHARE_TASKSINPROGRESS) MPUI_DEMO_RENDER_CLIP; - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATE_CLIP_ACTION; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - else - { - setdvar fileshare_rating_film 1; - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_FILM; - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATE_FILM_ACTION; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - } - else - { - if ( dvarBool( xblive_theater ) == 0 ) - { - execNow addToFeeder Theatre (localVarString( ui_theater_button_text )); - } - else - { - //onFocus // Disable condition // text - execNow addToFeederExtended Theatre noop (IS_NOT_LOBBY_HOST) (localVarString( ui_theater_button_text )); - } - } - } - elseif ( getFeederData( "menu_fileshare_share", "fileShareSlots", "fileType" ) == "customgamemode" ) - { - if( !IS_PC ) - { - execNow addToFeeder GoToCustom MPUI_START_CUSTOMGAME; - } - if( IS_PC ) - { - setdvar fileshare_rating_screenshot 0; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 1; - - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATE_CUSTOM_ACTION; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - } - if ( getFeederData( "menu_fileshare_share", "fileShareSlots", "slotOccupied" ) ) - { - //onFocus // Disable condition // text - execNow addToFeederExtended Transfer noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_PLACEINSHARE; - } - execNow addToFeeder Cancel MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 3 - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_recentgames_choose, ON_OPEN_THEATER_BUTTON_TEXT; execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_FILE_ACTION", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 //HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_MIDDLE - - menuItemsDef - { - maxRows 4 - // THESE INCLUDE BACKGROUND, HIGHLIGHT AND SELECT BUTTON. DO NOT OMIT THESE. - DYNAMIC_MENU_COMMON_COLUMNS - - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent PlaceInShare - { - if ( !(FILESHARE_TASKSINPROGRESS) ) - { - close self; - open menu_fileshare_recentgames_transfer; - } - } - onEvent PlayPC - { - SETUP_ACTION_PLAY_DEMO( 0, "menu_fileshare_recentgames", "fileShareRecentGames" ) - } - onEvent RenderPC - { - SETUP_ACTION_RENDER_DEMO( 0, "menu_fileshare_recentgames", "fileShareRecentGames" ) - } - onEvent Theatre - { - if ( IS_LOBBY_HOST || !dvarBool( "xblive_theater" ) ) - { - if ( !CanSwitchToLobby( dvarInt( party_maxplayers_theater ), dvarInt( party_maxlocalplayers_theater ) ) ) - { - open menu_fileshare_maxlocalplayers; - } - else - { - ACTION_GOTO_THEATER( 0, "menu_fileshare_recentgames", "fileShareRecentGames" ) - } - } - } - onEvent Cancel { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate - { - if ( IS_PC ) - { - if ( CLIP_SELECTED( "menu_fileshare_myrecentgames", "fileShareRecentGames" ) ) - { - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_CLIP; - execNow addToFeederExtended RenderPC noop (FILESHARE_TASKSINPROGRESS) MPUI_DEMO_RENDER_CLIP; - } - else - { - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_FILM; - } - } - else - { - // Action 1 - Menu Item Text - if ( dvarBool( xblive_theater ) == 0 ) { execNow addToFeeder Theatre (localVarString( ui_theater_button_text )); } - if ( dvarBool( xblive_theater ) == 1 ) - { - //onFocus // Disable condition // text - execNow addToFeederExtended Theatre noop (IS_NOT_LOBBY_HOST) (localVarString( ui_theater_button_text )); - } - } - //onFocus // Disable condition // text - execNow addToFeederExtended PlaceInShare noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_PLACEINSHARE; - execNow addToFeeder Cancel MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 4 - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_community_choose, ON_OPEN_THEATER_BUTTON_TEXT; execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_FILE_ACTION", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 //HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_MIDDLE - - menuItemsDef - { - maxRows 5 - // THESE INCLUDE BACKGROUND, HIGHLIGHT AND SELECT BUTTON. DO NOT OMIT THESE. - DYNAMIC_MENU_COMMON_COLUMNS - - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent PlaceInShare - { - if ( !(FILESHARE_TASKSINPROGRESS) ) - { - open menu_fileshare_community_transfer; - exec "wait; closeMenu menu_fileshare_community_choose"; - } - } - onEvent Screenshot { close self; ACTION_VIEW_SCREENSHOT( "menu_fileshare_community", "fileShareCommunitySearch" ) } - onEvent Theatre - { - if ( IS_LOBBY_HOST || !dvarBool( "xblive_theater" ) ) - { - if ( !CanSwitchToLobby( dvarInt( party_maxplayers_theater ), dvarInt( party_maxlocalplayers_theater ) ) ) - { - open menu_fileshare_maxlocalplayers; - } - else - { - ACTION_GOTO_THEATER( 1, "menu_fileshare_community", "fileShareCommunitySearch" ) - } - } - } - onEvent Cancel { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent PlayPC - { - SETUP_ACTION_PLAY_DEMO( 1, "menu_fileshare_community", "fileShareCommunitySearch" ) - } - onEvent RenderPC - { - SETUP_ACTION_RENDER_DEMO( 1, "menu_fileshare_community", "fileShareCommunitySearch" ) - } - - onEvent GoToCustom - { - ACTION_GOTO_CUSTOMGAME( 1, "menu_fileshare_community", "fileShareCommunitySearch" ) - } - - onEvent RatePC - { - if ( !(FILESHARE_TASKSINPROGRESS) ) - { - close self; - if ( !ALREADY_RATED ) - { - open fileshare_submitrating; - } - else - { - open fileshare_ratingsubmitted; - } - } - } - onEvent Populate - { - if ( getFeederData( "menu_fileshare_community", "fileShareCommunitySearch", "fileType" ) == "screenshot" ) - { - //onFocus // Disable condition // text - execNow addToFeederExtended Screenshot noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_VIEW; - if( IS_PC ) - { - setdvar fileshare_rating_screenshot 1; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 0; - - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATESCREENSHOT; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - } - elseif ( getFeederData( "menu_fileshare_community", "fileShareCommunitySearch", "fileType" ) != "customgamemode" ) - { - if ( IS_PC ) - { - setdvar fileshare_rating_screenshot 0; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 0; - - if ( CLIP_SELECTED( "menu_fileshare_community", "fileShareCommunitySearch" ) ) - { - setdvar fileshare_rating_clip 1; - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_CLIP; - execNow addToFeederExtended RenderPC noop (FILESHARE_TASKSINPROGRESS) MPUI_DEMO_RENDER_CLIP; - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATE_CLIP_ACTION; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - else - { - setdvar fileshare_rating_film 1; - execNow addToFeederExtended PlayPC noop (FILESHARE_TASKSINPROGRESS) MPUI_START_FILM; - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATE_FILM_ACTION; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - } - else - { - if ( dvarBool( xblive_theater ) == 0 ) - { - execNow addToFeeder Theatre (localVarString( ui_theater_button_text )); - } - else - { - //onFocus // Disable condition // text - execNow addToFeederExtended Theatre noop (IS_NOT_LOBBY_HOST) (localVarString( ui_theater_button_text )); - } - } - } - elseif ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "fileType" ) == "customgamemode" ) - { - if( !IS_PC ) - { - execNow addToFeeder GoToCustom MPUI_START_CUSTOMGAME; - } - if( IS_PC ) - { - setdvar fileshare_rating_screenshot 0; - setdvar fileshare_rating_film 0; - setdvar fileshare_rating_clip 0; - setdvar fileshare_rating_gametype 1; - - if( !ALREADY_RATED ) - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_RATE_CUSTOM_ACTION; - } - else - { - execNow addToFeederExtended RatePC noop (FILESHARE_TASKSINPROGRESS) PLATFORM_DEMO_SEERATING; - } - } - } - //onFocus // Disable condition // text - execNow addToFeederExtended PlaceInShare noop (FILESHARE_TASKSINPROGRESS) MENU_FILESHARE_PLACEINSHARE; - execNow addToFeeder Cancel MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 2 - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( fileshare_slotselection_clip_confirm, execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_REPLACECONFIRM", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 - menuItemsDef - { - maxRows 4 - DYNAMIC_MENU_COMMON_COLUMNS - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Yes - { - execnow demo_saveanduploadclip ( dvarInt( demo_cmdNum ) ) ( getFeederData( fileshare_slotselection_clip, fileShareSlots, ingameSlot ) ); - close self; - } - onEvent No { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate { - execNow addToFeeder Yes MENU_YES; - execNow addToFeeder No MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 2 - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( fileshare_slotselection_scr_confirm, execNow raiseFeederEvent Populate;, execNow raiseFeederEvent Clear;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_REPLACECONFIRM", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 - menuItemsDef - { - maxRows 4 - DYNAMIC_MENU_COMMON_COLUMNS - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Yes - { - execnow demo_savescreenshot 0 ( getFeederData( fileshare_slotselection_scr, fileShareSlots, ingameSlot ) ); - close self; - } - onEvent No { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate { - execNow addToFeeder Yes MENU_YES; - execNow addToFeeder No MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - - -// Rating - -menuDef - { - SYSTEM_POPUP_SETUP_VIS( fileshare_submitrating, execnow fileShareResetRating;, FILESHARE_RATINGCLOSE_ACTION, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_RATESCREENSHOT", when( dvarBool( fileshare_rating_screenshot ) == 1 ) ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_RATE_FILM_ACTION", when( dvarBool( fileshare_rating_film ) == 1 ) ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_RATE_CLIP_ACTION", when( dvarBool( fileshare_rating_clip ) == 1 ) ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_RATE_CUSTOM_ACTION", when( dvarBool( fileshare_rating_gametype ) == 1 ) ) - - FILESHARE_RATING_MENU_BODY( fileshare_submitrating, execnow fileShareSubmitRating ( dvarString( fsSelectedFileID ) ) ) - } - -menuDef - { - SYSTEM_POPUP_SETUP_VIS( fileshare_ratingsubmitted, execnow fileShareResetRating;, close self;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_SEERATING", 1 ) - - FILESHARE_RATINGSUBMITTED_MENU_BODY( fileshare_ratingsubmitted ) - } - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_error, ;, ;, 1 ) - execkeyint BUTTON_START { } - onEsc { close self; } - - SYSTEM_POPUP_TITLE_VIS( "@MENU_ERROR", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_FILESHARE_FILENOTFOUND", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) - } - -// Redefinitions for MEDIUM_POPUP_SETUP popups - #undef POPUP_WIDTH - #define POPUP_WIDTH MEDIUM_POPUP_WIDTH - #undef POPUP_HEIGHT - #define POPUP_HEIGHT MEDIUM_POPUP_HEIGHT - #undef CHOICE_SIZE_X - #define CHOICE_SIZE_X (POPUP_WIDTH-(POPUP_SIDE_PAD*2)) - #undef CHOICE_Y_START - #define CHOICE_Y_START POPUP_HEADER_HEIGHT - #undef PLAYER_INFO_ALIGN - #define PLAYER_INFO_ALIGN // Purposely set to nothing. The popup setup macro sets the alignment. If items within it set their own aligment, they end up offset incorrectly. - #undef PLAYER_INFO_X_START - #define PLAYER_INFO_X_START( frameWidth ) ( frameWidth - PLAYER_INFO_WIDTH - PLAYER_INFO_PAD ) - #undef PLAYER_INFO_Y_START - #define PLAYER_INFO_Y_START( frameHeight ) ( PLAYER_INFO_PAD * 2 ) - #undef BG_BACKCOLOR - #define BG_BACKCOLOR POPUP_BACKCOLOR - // Redefinitions for MEDIUM_POPUP_SETUP popups - - - #define SHARE_TRANSFER_SAVE_ACTION \ - execNow fileShareTransferFromUser ( getFeederData( "menu_fileshare_share", "fileShareSlots", "fileID" ) ) ( getFeederData( "menu_fileshare_share_transfer", "fileShareSlots", "slot" ) ); - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( menu_fileshare_share_transfer_save, activateblur;, deactivateblur; close self;, POPUP_GLOW_WHITE, 0, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - } - MEDIUM_POPUP_TITLE_VIS( "@MENU_SAVE_INFORMATION_CAPS", 1 ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 1 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_TITLE" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 2, dvarString(fsSelectedFileName), execNow demo_keyboard fileshareFileName; ) - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 3 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_DESCRIPTION" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 4, dvarString(fsSelectedFileDescription), execNow demo_keyboard fileshareFileDescription; ) - FRAME_CHOICE_BUTTON( 6, "@MENU_CONTINUE", SHARE_TRANSFER_SAVE_ACTION; close self; close menu_fileshare_share_transfer; ) - MEDIUM_POPUP_BACK_BUTTON - } - - #define MY_RECENTGAMES_TRANSFER_ACTION \ - close menu_fileshare_myrecentgames_choose; \ - execNow fileShareTransferFromPooled ( dvarstring( fsSelectedRecentGameID ) ) ( getFeederData( "menu_fileshare_myrecentgames_transfer", "fileShareSlots", "slot" ) ); - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( menu_fileshare_myrecentgames_transfer_save, activateblur;, deactivateblur; close self;, POPUP_GLOW_WHITE, 0, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - } - MEDIUM_POPUP_TITLE_VIS( "@MENU_SAVE_INFORMATION_CAPS", 1 ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 1 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_TITLE" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 2, dvarString(fsSelectedFileName), execNow demo_keyboard fileshareFileName; ) - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 3 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_DESCRIPTION" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 4, dvarString(fsSelectedFileDescription), execNow demo_keyboard fileshareFileDescription; ) - FRAME_CHOICE_BUTTON( 6, "@MENU_CONTINUE", MY_RECENTGAMES_TRANSFER_ACTION; close self; close menu_fileshare_myrecentgames_transfer; ) - MEDIUM_POPUP_BACK_BUTTON - } - - - #define RECENTGAMES_TRANSFER_ACTION \ - execNow fileShareTransferFromPooled ( dvarstring( fsSelectedRecentGameID ) ) ( getFeederData( "menu_fileshare_recentgames_transfer", "fileShareSlots", "slot" ) ); - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( menu_fileshare_recentgames_transfer_save, activateblur;, deactivateblur; close self;, POPUP_GLOW_WHITE, 0, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - } - MEDIUM_POPUP_TITLE_VIS( "@MENU_SAVE_INFORMATION_CAPS", 1 ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 1 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_TITLE" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 2, dvarString(fsSelectedFileName), execNow demo_keyboard fileshareFileName; ) - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 3 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_DESCRIPTION" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 4, dvarString(fsSelectedFileDescription), execNow demo_keyboard fileshareFileDescription; ) - FRAME_CHOICE_BUTTON( 6, "@MENU_CONTINUE", RECENTGAMES_TRANSFER_ACTION; close self; close menu_fileshare_recentgames_transfer; ) - MEDIUM_POPUP_BACK_BUTTON - } - - #define COMMUNITY_TRANSFER_ACTION \ - execNow fileShareTransferFromCommunity ( getFeederData( "menu_fileshare_community", "fileShareCommunitySearch", "fileID" ) ) ( getFeederData( "menu_fileshare_community_transfer", "fileShareSlots", "slot" ) ); - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( menu_fileshare_community_transfer_save, activateblur;, deactivateblur; close self;, POPUP_GLOW_WHITE, 0, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - } - MEDIUM_POPUP_TITLE_VIS( "@MENU_SAVE_INFORMATION_CAPS", 1 ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 1 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_TITLE" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 2, dvarString(fsSelectedFileName), execNow demo_keyboard fileshareFileName; ) - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 3 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_DESCRIPTION" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 4, dvarString(fsSelectedFileDescription), execNow demo_keyboard fileshareFileDescription; ) - FRAME_CHOICE_BUTTON( 6, "@MENU_CONTINUE", COMMUNITY_TRANSFER_ACTION; close self; close menu_fileshare_community_transfer; ) - MEDIUM_POPUP_BACK_BUTTON - } - - #define FILESHARE_CHANGE_TAG_LEFT \ - if ( localVarInt( ui_highlight ) == 6 ) \ - { \ - execnow fileShareUserTagLeft; \ - } - - #define FILESHARE_CHANGE_TAG_RIGHT \ - if ( localVarInt( ui_highlight ) == 6 ) \ - { \ - execnow fileShareUserTagRight; \ - } - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( menu_fileshare_myshare_editinfo, activateblur;, deactivateblur; close self;, POPUP_GLOW_WHITE, 0, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - } - execKeyInt APAD_LEFT - { - FILESHARE_CHANGE_TAG_LEFT - } - execKeyInt DPAD_LEFT - { - FILESHARE_CHANGE_TAG_LEFT - } - execKeyInt APAD_RIGHT - { - FILESHARE_CHANGE_TAG_RIGHT - } - execKeyInt DPAD_RIGHT - { - FILESHARE_CHANGE_TAG_RIGHT - } - - MEDIUM_POPUP_TITLE_VIS( "@MENU_EDIT_INFORMATION", 1 ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 1 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_TITLE" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - - FRAME_CHOICE_BUTTON( 2, dvarString(fsSelectedFileName), execNow demo_keyboard fileshareFileName; ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 3 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_DESCRIPTION" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - - FRAME_CHOICE_BUTTON( 4, dvarString(fsSelectedFileDescription), execNow demo_keyboard fileshareFileDescription; ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 5 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MENU_FILESHARE_USERTAG" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - - #define FILESHARE_TAG_X_OFFSET 20 - #define FILESHARE_TAG_BUTTON_WIDTH 280 - #define FILESHARE_TAG_ARROW_SPACING 7 - - FRAME_CHOICE_BUTTON( 6, "", FILESHARE_CHANGE_TAG_RIGHT; ) - - FILESHARE_BUTTON_TAGS( CHOICE_X( 6 ), CHOICE_Y( 6 ), getUserTagFromIndex( dvarInt( fsSelectedFileTagIndex ) ), localVarInt( ui_highlight ) == 6 ) - - FRAME_CHOICE_BUTTON( 8, "@MENU_CONTINUE", execnow fileShareEditInfo ( getFeederData( "menu_fileshare_myshare", "fileShareSlots", "fileID" ) ); close self; close menu_fileshare_myshare_options; ) - MEDIUM_POPUP_BACK_BUTTON - } - - - menuDef - { - MEDIUM_POPUP_SETUP_VIS( menu_fileshare_mymovie_editinfo, activateblur;, deactivateblur; close self;, POPUP_GLOW_WHITE, 0, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - } - MEDIUM_POPUP_TITLE_VIS( "@MENU_EDIT_INFORMATION", 1 ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 1 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_TITLE" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - - FRAME_CHOICE_BUTTON( 2, dvarString(fsSelectedFileName), execNow demo_keyboard fileshareFileName; ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 3 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_DESCRIPTION" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - - FRAME_CHOICE_BUTTON( 4, dvarString(fsSelectedFileDescription), execNow demo_keyboard fileshareFileDescription; ) - - FRAME_CHOICE_BUTTON( 6, "@MENU_CONTINUE", execnow fileShareEditInfo ( getMySlotInfo( 20, fileID ) ); close self; close menu_fileshare_myshare_options; ) - - MEDIUM_POPUP_BACK_BUTTON - } - - diff --git a/mods/patch_mp/ui_mp/game_mode.menu b/mods/patch_mp/ui_mp/game_mode.menu deleted file mode 100644 index 0591900..0000000 --- a/mods/patch_mp/ui_mp/game_mode.menu +++ /dev/null @@ -1,887 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui_mp/custom_mode.inc" - -#define CHOICE_SEP_OFFSET_Y -2 -#define CHOICE_SIDEITEM_SPACING -310 - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui/choices_setup_popmenu.menu" -#include "ui_mp/stats_info.inc" -#include "ui_mp/overlaybg.inc" -#include "ui_mp/fileshare.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui/frame.inc" - -#include "ui_mp/popup_player_info.inc" - -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#undef CHOICE_GROUP -#define CHOICE_GROUP "menu_game_mode_upload" - -#define HINT_TEXT_WIDTH ( FRAME_DEFAULT_WIDTH - ( FRAME_TITLE_X_OFFSET * 2 ) ) - -menuDef -{ - name menu_game_mode_upload - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - control MENU_CONTROL_OPENER - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - onOpen - { - READ_FILE_SHARE; - setdvar ui_custom_save_to_file_share 1; - setDvar fsUnoccupiedHighlightGreen 1; - setLocalVarString ui_choicegroup CHOICE_GROUP; - } - onFocus - { - play CHOICE_FOCUS_SOUND; - activateBlur; - } - onClose - { - setdvar ui_custom_save_to_file_share 0; - deactivateblur; - } - onESC - { - close self; - } - execKeyInt APAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt APAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - - FRAME_DEFAULT - FRAME_TITLE_DEFAULT( "@MENU_FILESHARE_MYSHARE_CAPS", 1 ) - - PLAYER_INFO_VIS( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, 1 ) - - itemDef - { - name fileShareSlots - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_MYSLOTS - FILESHARE_COMMON_OPTIONS - elementwidth 70 - elementheight 70 - elementtype LISTBOX_TEXT - textalign HORIZONTAL_ALIGN_LEFT - textfont UI_FONT_NORMAL - forecolor CHOICE_TEXTCOLOR - modal - doubleclick - { - if ( getFeederData( "slot" ) <= 6 ) - { - if ( !( FILESHARE_TASKSINPROGRESS ) ) - { - play CHOICE_FOCUS_SOUND; - if ( getFeederData( "slotOccupied" ) != 1 ) - { - open menu_game_mode_upload_save; - } - else - { - open menu_game_mode_upload_confirm; - } - } - } - } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - visible 1 - FILESHARE_SLOTS_USERAREAS - } - FILESHARE_BOTTOM( fileShareSlots, 1 ) - FILESHARE_DETAILS( 35, (FRAME_CHOICE_Y_START-1), HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, - "menu_game_mode_upload", "fileShareSlots", - getFeederData( "fileShareSlots", "slotOccupied" ) && getFeederData( "fileShareSlots", "count" ) > 0.0 ) -#ifdef CONSOLE - PREPROC_TEXT_DRAW_VIS( -144 158 30 15 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) + " " + locString( "@MENU_FILESHARE_OF18") ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, when( IsPremiumSubscriber() ) ) - - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_left", COLOR_BODY_TEXT, - when( IsPremiumSubscriber() && getFeederData( "fileShareSlots", "slot" ) > 6 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -107 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( IsPremiumSubscriber() && getFeederData( "fileShareSlots", "slot" ) > 6 && getFeederData( "fileShareSlots", "slot" ) < 13 ), - rotation 90; ) - PREPROC_SHADER_DRAW_VIS_EX( -114 160 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( IsPremiumSubscriber() && getFeederData( "fileShareSlots", "slot" ) <= 6 ), - rotation 90; ) -#endif //#ifdef CONSOLE - - HINT_TEXT_ALL( 15, CHOICE_X_START, -8, CHOICE_SIZE_X, "@MENU_FILESHARE_CHOOSESLOT", 1 1 1 1, 1, ; ) - -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, close self; ) -#else //#ifdef PC - NEW_FRAME_BACK_BUTTON( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - - PREPROC_TEXT_DRAW_VIS( -160 (FRAME_DEFAULT_HEIGHT/2) 50 17 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@PLATFORM_SELECT", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, - when( getFeederData( menu_game_mode_upload, fileShareSlots, "slot" ) <= 6 ); ) -#endif // #else // #ifdef PC -} -#undef ON_ESC -#define ON_ESC \ - close self; - -menuDef -{ - name custom_select_from_fileshare - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - control MENU_CONTROL_OPENER - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - - onOpen - { -#ifdef PC - exec readfileshare -#endif - setDvar fsUnoccupiedHighlightGreen 2; - setLocalVarString ui_choicegroup CHOICE_GROUP; - } - onFocus - { - activateBlur; - } - onClose - { - deactivateBlur; - } - onESC - { - ON_ESC - } - execKeyInt APAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_LEFT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt DPAD_RIGHT { play CHOICE_FOCUS_SOUND; } - execKeyInt APAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_UP { execnow set fshSelectLastSlotRow 1; setfocus fileShareSlots; } - execKeyInt APAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - execKeyInt DPAD_DOWN { execnow set fshSelectFirstSlotRow 1; setfocus fileShareSlots; } - - FRAME_DEFAULT - - FRAME_TITLE_DEFAULT( "@CUSTOM_FILESHARE_SELECT_MODE_TITLE", 1 ) - FRAME_SUBTITLE_DEFAULT( "@CUSTOM_FILESHARE_SELECT_MODE_DESC", 1 ) - - PLAYER_INFO_VIS( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, 1 ) - - itemDef - { - name fileShareSlots - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_MYSLOTS - FILESHARE_COMMON_OPTIONS - origin 0 0 - elementwidth 70 - elementheight 67 - elementtype LISTBOX_TEXT - textalign ITEM_ALIGN_MIDDLE_CENTER - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SUBTITLE - forecolor CHOICE_TEXTCOLOR - modal - doubleclick - { - play CHOICE_FOCUS_SOUND; - if ( getFeederData( "slotOccupied" ) && !( FILESHARE_TASKSINPROGRESS ) ) - { - if( getFeederData( "fileType" ) == "customgamemode" ) - { - execNow downloadCustomGametype (getFeederData( "fileID" )) (getFeederData( "fileSize" )); - closeimmediate custom_select_from_fileshare; - closeimmediate select_game_mode; - } - } - } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - visible 1 - - FILESHARE_SLOTS_USERAREAS - } - FILESHARE_BOTTOM( fileShareSlots, 1 ) - - /* SLOT OCCUPIED */ -#define SLOT_OCCUPIED_CONDITION \ - ( getFeederData( "fileShareSlots", "slotOccupied" ) && getFeederData( "fileShareSlots", "count" ) > 0.0 ) - - #define SLOT_HAS_GAME_MODE \ - ( getFeederData( "fileShareSlots", "fileType" ) == "customgamemode" ) - -#undef FILESHARE_SELECTOR_TOOLTIP_Y -#ifdef PC - #define FILESHARE_SELECTOR_TOOLTIP_Y FILESHARE_TOOLTIP_PC_Y -#else //#ifdef PC - #define FILESHARE_SELECTOR_TOOLTIP_Y 95 -#endif //#ifdef PC - - // Tooltip - Occupied Slot with custom game mode - PREPROC_SHADER_DRAW_VIS_EX( (FRAME_CHOICE_X_START-2) FILESHARE_SELECTOR_TOOLTIP_Y 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( SLOT_OCCUPIED_CONDITION && SLOT_HAS_GAME_MODE ), ; ) - PREPROC_TEXT_DRAW_VIS_EX( (FRAME_CHOICE_X_START+8) FILESHARE_SELECTOR_TOOLTIP_Y 280 36 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "CUSTOM_FILESHARE_CGM_HIGHLIGHTED" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, - when( SLOT_OCCUPIED_CONDITION && SLOT_HAS_GAME_MODE ), autowrapped; ) - - // Tooltip - Occupied Slot that is not a custom game mode - PREPROC_SHADER_DRAW_VIS_EX( (FRAME_CHOICE_X_START-2) FILESHARE_SELECTOR_TOOLTIP_Y 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( SLOT_OCCUPIED_CONDITION && !SLOT_HAS_GAME_MODE ), ; ) - PREPROC_TEXT_DRAW_VIS_EX( (FRAME_CHOICE_X_START+8) FILESHARE_SELECTOR_TOOLTIP_Y 280 36 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "CUSTOM_FILESHARE_CANT_SELECT" ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, - when( SLOT_OCCUPIED_CONDITION && !SLOT_HAS_GAME_MODE ), autowrapped; ) - - FILESHARE_SPINNER( 145, -45, when( FILESHARE_TASKSINPROGRESS ), 350 ) - - execKeyInt APAD_UP - { - execnow set fshSelectLastSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt DPAD_UP - { - execnow set fshSelectLastSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt APAD_DOWN - { - execnow set fshSelectFirstSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt DPAD_DOWN - { - execnow set fshSelectFirstSlotRow 1; - setfocus fileShareSlots; - } - -#ifdef CONSOLE - PREPROC_TEXT_DRAW_VIS( -146 80 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - ( int( getFeederData( "fileShareSlots", "slot" ) ) ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, 1 1 1 1, - 1 ) - PREPROC_TEXT_DRAW_VIS( -142 80 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@MENU_FILESHARE_OF6", - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, 1 1 1 1, - when ( !IsPremiumSubscriber() ) ) - - // Top Arrow - PREPROC_SHADER_DRAW_VIS_EX( -114 75 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_left", COLOR_BODY_TEXT, - when( IsPremiumSubscriber() && getFeederData( "fileShareSlots", "slot" ) > 6 ), rotation 90; ) - - // Bottom Arrow 1 - PREPROC_SHADER_DRAW_VIS_EX( -107 75 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( IsPremiumSubscriber() && getFeederData( "fileShareSlots", "slot" ) > 6 && getFeederData( "fileShareSlots", "slot" ) < 13 ), rotation 90; ) - - // Bottom Arrow 2 - PREPROC_SHADER_DRAW_VIS_EX( -114 75 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - "ui_arrow_right", COLOR_BODY_TEXT, - when( IsPremiumSubscriber() && getFeederData( "fileShareSlots", "slot" ) <= 6 ), rotation 90; ) -#endif //#ifdef CONSOLE - // File details - FILESHARE_DETAILS( 35, (FRAME_CHOICE_Y_START-1), HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, - "custom_select_from_fileshare", "fileShareSlots", - SLOT_OCCUPIED_CONDITION ) - - FILESHARE_SPINNER( 145, -45, when( FILESHARE_TASKSINPROGRESS ), 350 ) - - // Button prompts - -#ifdef PC - FRAME_BACK_BUTTON_DEFAULT_ACTION( ON_ESC ) -#else //#ifdef PC - FRAME_BACK_BUTTON_DEFAULT - - PREPROC_TEXT_DRAW_VIS( -160 (FILESHARE_FRAME_HEIGHT/2) 50 17 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@PLATFORM_SELECT", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, - when( SLOT_OCCUPIED_CONDITION && SLOT_HAS_GAME_MODE ); ) -#endif //#ifdef PC - - #include "ui/safearea.menu" -} - -#define GAMEMODE_NAME_X 40 -#define GAMEMODE_NAME_Y ( FRAME_CHOICE_Y_START - 7 ) -#define GAMEMODE_NAME_HEIGHT 30 -#define GAMEMODE_NAME_SIZE GAMEMODE_IMAGE_WIDTH GAMEMODE_NAME_HEIGHT - -#define GAMEMODE_IMAGE_X GAMEMODE_NAME_X -#define GAMEMODE_IMAGE_Y (GAMEMODE_NAME_Y + GAMEMODE_NAME_HEIGHT + 15) -#define GAMEMODE_IMAGE_ASPECT_RATIO 1.0 -#define GAMEMODE_IMAGE_WIDTH 180 -#define GAMEMODE_IMAGE_HEIGHT (GAMEMODE_IMAGE_WIDTH * GAMEMODE_IMAGE_ASPECT_RATIO) -#define GAMEMODE_IMAGE_SIZE GAMEMODE_IMAGE_WIDTH GAMEMODE_IMAGE_HEIGHT - -#define GAMEMODE_DESC_X GAMEMODE_NAME_X -#define GAMEMODE_DESC_Y (GAMEMODE_IMAGE_Y + GAMEMODE_IMAGE_HEIGHT + 15) -#define GAMEMODE_DESC_SIZE GAMEMODE_IMAGE_WIDTH 60 - -#undef DEFAULT_SLIDE_IN_SPEED -#define DEFAULT_SLIDE_IN_SPEED 180 - -#undef DEFAULT_SLIDE_OUT_SPEED -#define DEFAULT_SLIDE_OUT_SPEED 180 - -#undef ON_ESC -#define ON_ESC \ - deactivateBlur; \ - play uin_navigation_menu_lg_close; \ - close self; - -menuDef -{ - name select_game_mode - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - - onOpen - { - activateBlur; - play uin_navigation_menu_lg_open; - setdvar invite_visible "0"; - setDvar ui_preview dvarString( ui_gametype ); - setFocus gamemode_selection; - execNow refreshFeederSelection gamemode_selection; - execNow movefeeder ( GetGamemodeIndexByName( gamemode_selection, tableLookup( "mp/gametypesTable.csv", 0, dvarString( ui_gametype ), 1 ) ) ) gamemode_selection; - } - onFocus { } - onClose - { - setdvar invite_visible "1"; - } - onESC - { - ON_ESC - } - - FRAME_DEFAULT - - FRAME_TITLE_DEFAULT( "@MPUI_CHANGE_GAME_MODE_CAPS", 1 ) - - #define GAME_HC_TDM_HACK ( dvarInt( "xblive_basictraining" ) && dvarString( ui_preview ) == "hc_tdm" ) - #define GAME_DESC_VIS_ARG ( dvarInt( "xblive_basictraining" ) || dvarBool( splitscreen ) || dvarBool( systemlink ) || getFeederData( "gamemode_selection", "selection" ) != 0 ) - #define GAMETYPE_IMAGE tableLookup( "mp/gametypesTable.csv", 0, dvarString( ui_preview ), 3 ) - #define GAMEMODE tableLookup( "mp/gametypesTable.csv", 0, dvarString( ui_preview ), 1 ) - #define GAMEMODE_DESC tableLookup( "mp/gametypesTable.csv", 0, dvarString( ui_preview ), 2 ) - - #define GAMEMODE_DESC_DISPLAY( titleText, imageMat, descText, visArg ) \ - PREPROC_TEXT_DRAW_ALL( GAMEMODE_NAME_X GAMEMODE_NAME_Y GAMEMODE_NAME_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, \ - titleText, \ - TEXTSIZE_TITLE, 0, 0, ITEM_ALIGN_TOP_CENTER, 1 1 1 1, UI_FONT_EXTRABIG, ITEM_TEXTSTYLE_NORMAL, \ - when( visArg );, ; ) \ - PREPROC_SHADER_DRAW_VIS_EX( GAMEMODE_IMAGE_X GAMEMODE_IMAGE_Y GAMEMODE_IMAGE_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, \ - imageMat, 1 1 1 1, \ - when( visArg );, \ - ; ) \ - PREPROC_TEXT_DRAW_VIS_EX( GAMEMODE_DESC_X GAMEMODE_DESC_Y GAMEMODE_DESC_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, \ - descText, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_CENTER, 1 1 1 1, \ - when( visArg );, autowrapped ) - - GAMEMODE_DESC_DISPLAY( "@" + GAMEMODE, GAMETYPE_IMAGE, "@" + GAMEMODE_DESC, GAME_DESC_VIS_ARG && !GAME_HC_TDM_HACK ) - GAMEMODE_DESC_DISPLAY( "@MPUI_BASIC_TRAINING_HC_TDM", GAMETYPE_IMAGE, "@" + GAMEMODE_DESC, GAME_HC_TDM_HACK ) - GAMEMODE_DESC_DISPLAY( "@CUSTOM_CUSTOM_GAME_MODE_CAPS", "playlist_custom", "@CUSTOM_SELECT_FROM_FILESHARE_DESC", !GAME_DESC_VIS_ARG && !GAME_HC_TDM_HACK ) - - #define RESET_CUSTOM_GAMEMODE_IF_CHANGED \ - if( dvarString( "ui_preview" ) != dvarString( "ui_gametype" ) ) \ - { \ - execNow "resetCustomGametype"; \ - } - - // gametype selection =========================================== - itemDef - { - name gamemode_selection - type ITEM_TYPE_LISTBOX - feeder FEEDER_GAMETYPES_BASE - rect (FRAME_CHOICE_X_START-1) ( FRAME_CHOICE_Y_START - 3 ) FRAME_BUTTON_WIDTH 308 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - elementwidth 30 - elementheight 19 - noscrollbars - noBlinkingHighlight - textfont CHOICE_TEXTFONT - textscale CHOICE_TEXTSIZE - forecolor CHOICE_TEXTCOLOR - focusColor COLOR_TITLE - disablecolor FRAME_GREY_RGB 1 - textstyle ITEM_TEXTSTYLE_NORMAL - modal - visible 1 - // x y w h len horzAlign vertAlign - userarea 4 0 0 (FRAME_BUTTON_WIDTH+1) 19 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* BACKGROUND */ - 17 0 FRAME_BUTTON_WIDTH 19 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* NAME */ - 0 1 17 18 16 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* A_BUTTON */ - (FRAME_BUTTON_WIDTH-18) 2 14 14 0 ITEM_ALIGN_CENTER ITEM_ALIGN_MIDDLE /* CUSTOMIZED ICON */ - onfocus - { - play CHOICE_FOCUS_SOUND; - } - doubleclick - { - if( !GAME_DESC_VIS_ARG ) - { - open "custom_select_from_fileshare"; - } - else - { - RESET_CUSTOM_GAMEMODE_IF_CHANGED - setDvar ui_gametype dvarString( ui_preview ); - play CHOICE_ACTION_SOUND; - execNow "xupdatepartystate"; - deactivateBlur; - close self; - } - } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - } - - CUSTOM_MODE_CUSTOMIZED_STAR( FRAME_CHOICE_X_START, ( FRAME_DEFAULT_HEIGHT/2 ) - 70, dvarInt( customGameMode ) ) - -#ifdef PC - #define BUTTON_SPACING 20 - #define RESET_BUTTON_OFFSET ( getTextWidth( locString( "@PLATFORM_BACK" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) + 8 + BUTTON_SPACING ) - - FRAME_BACK_BUTTON_DEFAULT_ACTION( ON_ESC ) - FRAME_BUTTON_PC_LEFT_OFFSET( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, RESET_BUTTON_OFFSET, "@PLATFORM_RESET_TO_DEFAULT", - open popup_custom_confirm_revert;, when( dvarBool( customGameMode ) ) ) -#else //PC - FRAME_BACK_BUTTON_DEFAULT - CUSTOM_MODE_RESET_TO_DEFAULT_BUTTON( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, -76, open popup_custom_confirm_revert;, dvarBool( customGameMode ) ) -#endif //PC - - #include "ui/safearea.menu" -} - -#define MAPSELECT_NAME_X 20 -#define MAPSELECT_NAME_Y (FRAME_CHOICE_Y_START-7) -#define MAPSELECT_NAME_HEIGHT 30 -#define MAPSELECT_NAME_SIZE MAPSELECT_IMAGE_WIDTH MAPSELECT_NAME_HEIGHT - -#define MAPSELECT_IMAGE_X MAPSELECT_NAME_X -#define MAPSELECT_IMAGE_Y (MAPSELECT_NAME_Y + MAPSELECT_NAME_HEIGHT + 5) -#define MAPSELECT_IMAGE_ASPECT_RATIO 0.675 -#define MAPSELECT_IMAGE_WIDTH 224 -#define MAPSELECT_IMAGE_HEIGHT (MAPSELECT_IMAGE_WIDTH * MAPSELECT_IMAGE_ASPECT_RATIO) -#define MAPSELECT_IMAGE_SIZE MAPSELECT_IMAGE_WIDTH MAPSELECT_IMAGE_HEIGHT - -#define MAPSELECT_DESC_TITLE_HEIGHT 15 -#define MAPSELECT_DESC_TITLE_SIZE MAPSELECT_IMAGE_WIDTH MAPSELECT_DESC_TITLE_HEIGHT -#define MAPSELECT_DESC_X MAPSELECT_NAME_X -#define MAPSELECT_DESC_Y (MAPSELECT_IMAGE_Y + MAPSELECT_IMAGE_HEIGHT + 10 ) -#define MAPSELECT_DESC_HEIGHT 50 -#define MAPSELECT_DESC_SIZE MAPSELECT_IMAGE_WIDTH MAPSELECT_DESC_HEIGHT - -#define MAPSELECT_SIZE_X MAPSELECT_NAME_X -#define MAPSELECT_SIZE_Y (MAPSELECT_DESC_Y+MAPSELECT_DESC_TITLE_HEIGHT+MAPSELECT_DESC_HEIGHT) -#define MAPSELECT_SIZE_SIZE MAPSELECT_IMAGE_WIDTH MAPSELECT_DESC_HEIGHT - -#define SWITCH_MAP_LIST_ACTION \ - if( dvarBool( "dlc2" ) || dvarBool( "dlc3" ) || dvarBool( "dlc4" ) ) \ - { \ - if( dvarBool( ui_showDLCMaps ) ) \ - { \ - setDvar ui_showDLCMaps 0; \ - execNow movefeeder 0 map_selection; \ - } \ - else \ - { \ - setDvar ui_showDLCMaps 1; \ - execNow movefeeder 0 map_selection; \ - } \ - } - -#define SWITCH_TO_MAPS_ACTION \ - setDvar ui_showDLCMaps 0; \ - execNow movefeeder 0 map_selection; - -#define SWITCH_TO_DLC_ACTION \ - setDvar ui_showDLCMaps 1; \ - execNow movefeeder 0 map_selection; - -#undef ON_ESC -#define ON_ESC \ - deactivateBlur; \ - play uin_navigation_menu_lg_close; \ - close self; \ - setDvar settings_map_selected 0; - -#define CHOICE_TAB_TEXTSIZE TEXTSIZE_SMALL -#define TAB_1_TEXT (locString( "@MPUI_MAPS_CAPS" )) -#define TAB_2_TEXT (locString( "@MPUI_DLC_MAPS_CAPS" )) - -#define TAB_BG_PAD 5 -#define TAB_1_WIDTH ( getTextWidth( TAB_1_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_2_WIDTH ( getTextWidth( TAB_2_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_HEIGHT 15 - -#define MAP_TAB_1_X NEW_FRAME_CHOICE_X_START -#define MAP_TAB_2_X ( MAP_TAB_1_X + TAB_1_WIDTH ) - -#define MAP_TAB_Y ( ( -NEW_FRAME_DEFAULT_HEIGHT / 2 ) + NEW_FRAME_HEADER_HEIGHT - TAB_HEIGHT ) - -#define MAP_TAB_HEADER( visArg ) \ - /* highlighted header */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( MAP_TAB_1_X, \ - MAP_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_1_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( visArg && dvarBool( ui_showDLCMaps ) == 0 ), ; ) \ - /* non highlighted header */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( MAP_TAB_1_X, \ - MAP_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_1_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( visArg && dvarBool( ui_showDLCMaps ) == 1 ), TAB_MOUSEOVER_HIGHLIGHT; ) - -#define DLC_TAB_HEADER( visArg ) \ - /* highlighted header */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( MAP_TAB_2_X, \ - MAP_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_2_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( visArg && dvarBool( ui_showDLCMaps ) == 1 ), ; ) \ - /* non highlighted header */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( MAP_TAB_2_X, \ - MAP_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_2_TEXT, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( visArg && dvarBool( ui_showDLCMaps ) == 0 ), TAB_MOUSEOVER_HIGHLIGHT; ) - -#define MAP_TAB_BG( px, pw, visArg ) \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER_FRAMED \ - frame 16 0.2 FRAME_OPEN_BOTTOM \ - rect 0 MAP_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - exp rect X( px ) \ - exp rect W( pw ) \ - background "menu_mp_tab_frame_inner" \ - forecolor 1 1 1 1 \ - visible when( visArg ) \ - decoration \ - } - -#define MAP_TAB_BUTTON( px, pw, actionArg, visArg ) \ - itemDef \ - { \ - type ITEM_TYPE_BUTTON_NO_TEXT \ - rect 0 MAP_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - exp rect X( px ) \ - exp rect W( pw ) \ - visible when( visArg ) \ - mouseenter { play CHOICE_FOCUS_SOUND; } \ - onFocus \ - { \ - play CHOICE_FOCUS_SOUND; \ - } \ - action \ - { \ - play CHOICE_ACTION_SOUND; \ - actionArg; \ - } \ - } - -menuDef -{ - name select_map - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - - onOpen - { - activateBlur; - play uin_navigation_menu_lg_open; - setdvar invite_visible "0"; - setDvar ui_preview dvarString( ui_mapname ); - setDvar settings_map_selected 1; - setFocus map_selection; - setDvar ui_showDLCMaps 0; - execNow movefeeder ( GetMapIndexByName( map_selection, tableLookup( "mp/mapsTable.csv", 0, dvarString( ui_mapname ) , 3 ) ) ) map_selection; - } - onFocus { } - onClose - { - deactivateBlur; - setdvar invite_visible "1"; - } - onESC - { - ON_ESC - } - execKeyInt K_LEFTARROW - { - SWITCH_MAP_LIST_ACTION - } - execKeyInt K_RIGHTARROW - { - SWITCH_MAP_LIST_ACTION - } - - FRAME_DEFAULT - - FRAME_TITLE_DEFAULT( "@MPUI_CHANGE_MAP_CAPS", 1 ) - - #define MAPS_TAB_VISIBLE ( 1 ) - #define DLC_TAB_VISIBLE ( dvarBool( "dlc2" ) || dvarBool( "dlc3" ) || dvarBool( "dlc4" ) ) - - MAP_TAB_BG( MAP_TAB_1_X, TAB_1_WIDTH, MAPS_TAB_VISIBLE ) - MAP_TAB_HEADER( MAPS_TAB_VISIBLE ) - MAP_TAB_BUTTON( MAP_TAB_1_X, TAB_1_WIDTH, SWITCH_TO_MAPS_ACTION, MAPS_TAB_VISIBLE ) - - MAP_TAB_BG( MAP_TAB_2_X, TAB_2_WIDTH, DLC_TAB_VISIBLE ) - DLC_TAB_HEADER( DLC_TAB_VISIBLE ) - MAP_TAB_BUTTON( MAP_TAB_2_X, TAB_2_WIDTH, SWITCH_TO_DLC_ACTION, DLC_TAB_VISIBLE ) - - #define MAP_IMAGE tableLookup( "mp/mapsTable.csv", 0, dvarString( ui_preview ) , 0 ) - #define MAP_NAME tableLookup( "mp/mapsTable.csv", 0, dvarString( ui_preview ) , 3 ) - #define MAP_SIZE tableLookup( "mp/mapsTable.csv", 0, dvarString( ui_preview ) , 8 ) - #define MAP_DESC tableLookup( "mp/mapsTable.csv", 0, dvarString( ui_preview ) , 6 ) - - #define MAP_SELECT_DISPLAY( mapName, mapImage, mapSize, mapDesc, visArg ) \ - PREPROC_TEXT_DRAW_ALL( MAPSELECT_NAME_X MAPSELECT_NAME_Y MAPSELECT_NAME_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, \ - mapName, \ - TEXTSIZE_TITLE, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, UI_FONT_EXTRABIG, ITEM_TEXTSTYLE_NORMAL, \ - when( visArg );, ; ) \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER_STREAMED \ - type ITEM_TYPE_IMAGE \ - rect MAPSELECT_IMAGE_X MAPSELECT_IMAGE_Y MAPSELECT_IMAGE_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - forecolor 1 1 1 1 \ - exp material( mapImage ) \ - visible when( visArg ) \ - decoration \ - } \ - PREPROC_TEXT_DRAW_VIS( MAPSELECT_DESC_X MAPSELECT_DESC_Y MAPSELECT_DESC_TITLE_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, \ - "@MPUI_DESCRIPTION_CAPS", \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 0 0 0 0.8, \ - when( visArg ); ) \ - PREPROC_TEXT_DRAW_VIS_EX( MAPSELECT_DESC_X (MAPSELECT_DESC_Y+15) MAPSELECT_DESC_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, \ - mapDesc, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, \ - when( visArg );, autowrapped ) \ - PREPROC_TEXT_DRAW_VIS( MAPSELECT_SIZE_X MAPSELECT_SIZE_Y MAPSELECT_DESC_TITLE_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, \ - "@MPUI_MAP_SIZE_CAPS", \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 0 0 0 0.8, \ - when( visArg ); ) \ - PREPROC_TEXT_DRAW_VIS( MAPSELECT_SIZE_X (MAPSELECT_SIZE_Y+15) MAPSELECT_SIZE_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, \ - mapSize, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, \ - when( visArg ); ) - - MAP_SELECT_DISPLAY( "@" + MAP_NAME + "_CAPS", "menu_" + dvarString( ui_preview ) + "_map_select_final", "@MPUI_MAPSIZE_" + MAP_SIZE, "@" + MAP_DESC, 1 ) - - // map selection =========================================== - itemDef - { - name map_selection - type ITEM_TYPE_LISTBOX - feeder FEEDER_MAPS - rect (FRAME_CHOICE_X_START-1) (FRAME_CHOICE_Y_START-3) FRAME_BUTTON_WIDTH 308 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - elementwidth 30 - elementheight 19 - noscrollbars - noBlinkingHighlight - textfont CHOICE_TEXTFONT - textscale CHOICE_TEXTSIZE - forecolor CHOICE_TEXTCOLOR - focusColor COLOR_TITLE - disablecolor FRAME_GREY_RGB 1 - textstyle ITEM_TEXTSTYLE_NORMAL - modal - visible when( dvarBool( settings_map_selected ) ) - /* x y w h len horzAlign vertAlign */ - userarea 3 0 0 (FRAME_BUTTON_WIDTH+1) 19 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* FEEDER_MAPSELECTION_COLUMN_BACKGROUND */ - 17 0 FRAME_BUTTON_WIDTH 19 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* FEEDER_MAPSELECTION_COLUMN_NAME */ - 0 1 17 18 16 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* FEEDER_MAPSELECTION_COLUMN_A_BUTTON */ - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick - { - setDvar ui_mapname dvarString( ui_preview ); - play CHOICE_ACTION_SOUND; - execNow "xupdatepartystate"; - deactivateBlur; - close self; - } - execKeyInt DPAD_LEFT - { - SWITCH_MAP_LIST_ACTION - } - execKeyInt DPAD_RIGHT - { - SWITCH_MAP_LIST_ACTION - } - execKeyInt APAD_LEFT - { - SWITCH_MAP_LIST_ACTION - } - execKeyInt APAD_RIGHT - { - SWITCH_MAP_LIST_ACTION - } - } - -#ifdef PC - FRAME_BACK_BUTTON_DEFAULT_ACTION( ON_ESC ) -#else //#ifdef PC - FRAME_BACK_BUTTON_DEFAULT -#endif //#ifdef PC - - #include "ui/safearea.menu" -} - -#include "ui_mp/popupstyle.inc" - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_game_mode_upload_confirm, activateblur; execNow raiseFeederEvent Populate;, deactivateblur; close self;, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent Clear; - } - - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_REPLACECONFIRM", 1 ) - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 400 - menuItemsDef - { - maxRows 4 - DYNAMIC_MENU_COMMON_COLUMNS - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 50 CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - onEvent Yes - { - open menu_game_mode_upload_save; - close self; - } - onEvent No { close self; } - onEvent Clear { execNow clearFeeder; } - onEvent Populate { - execNow addToFeeder Yes MENU_YES; - execNow addToFeeder No MENU_CANCEL; - } - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; } - } -} - -// Redefinitions for MEDIUM_POPUP_SETUP popups -#undef POPUP_WIDTH -#define POPUP_WIDTH MEDIUM_POPUP_WIDTH -#undef POPUP_HEIGHT -#define POPUP_HEIGHT MEDIUM_POPUP_HEIGHT -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X (POPUP_WIDTH-(POPUP_SIDE_PAD*2)) -#undef CHOICE_Y_START -#define CHOICE_Y_START POPUP_Y_START_TOP -#undef PLAYER_INFO_ALIGN -#define PLAYER_INFO_ALIGN // Purposely set to nothing. The popup setup macro sets the alignment. If items within it set their own aligment, they end up offset incorrectly. -#undef PLAYER_INFO_X_START -#define PLAYER_INFO_X_START( frameWidth ) ( frameWidth - PLAYER_INFO_WIDTH - PLAYER_INFO_PAD ) -#undef PLAYER_INFO_Y_START -#define PLAYER_INFO_Y_START( frameHeight ) ( PLAYER_INFO_PAD * 2 ) -#undef BG_BACKCOLOR -#define BG_BACKCOLOR POPUP_BACKCOLOR -// Redefinitions for MEDIUM_POPUP_SETUP popups - -#define GAME_MODE_FILESHARE_UPLOAD_ACTION \ - execNow uploadCustomGametype ( getFeederData( "menu_game_mode_upload", "fileShareSlots", "slot" ) ); \ - setdvar customGameMode 1; \ - execNow "xupdatepartystate"; - -menuDef -{ - MEDIUM_POPUP_SETUP_VIS( menu_game_mode_upload_save, activateblur;, deactivateblur; close self;, POPUP_GLOW_WHITE, 0, 1 ) - onClose - { - deactivateblur; - play CHOICE_FOCUS_SOUND; - } - MEDIUM_POPUP_TITLE_VIS( "@MENU_SAVE_INFORMATION_CAPS", 1 ) - - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 1 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_TITLE" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 2, dvarString(fsSelectedFileName), execNow demo_keyboard fileshareFileName; ) - PREPROC_TEXT_DRAW_VIS( CHOICE_ORIGIN( 3 ) CHOICE_SIZE_X CHOICE_SIZE_Y HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - locString( "@MPUI_DESCRIPTION" )+" :", - TEXTSIZE_SMALL, 0, 0, CHOICE_TEXTALIGN, 1 1 1 1, - 1 ) - FRAME_CHOICE_BUTTON( 4, dvarString(fsSelectedFileDescription), execNow demo_keyboard fileshareFileDescription; ) - FRAME_CHOICE_BUTTON( 6, "@MENU_CONTINUE", GAME_MODE_FILESHARE_UPLOAD_ACTION; close self; close menu_game_mode_upload; ) - MEDIUM_POPUP_BACK_BUTTON -} diff --git a/mods/patch_mp/ui_mp/hud_ffa.menu b/mods/patch_mp/ui_mp/hud_ffa.menu deleted file mode 100644 index 099dd8d..0000000 --- a/mods/patch_mp/ui_mp/hud_ffa.menu +++ /dev/null @@ -1,208 +0,0 @@ -// CONSOLE HUD - MP - -#include "ui/menudef.h" -#include "ui_mp/hud_gametypes.inc" -#include "ui_mp/choices_setup_teams.menu" - -#define BAR_START_X 42 -#define BAR_START_Y -42 -#define BAR_HEIGHT 39 -#define BAR_WIDTH 143 -#define BAR_HEIGHT_TOP 20 -#define BAR_HEIGHT_BOTTOM 16 - -#define BAR_PERCENT_PLAYER ( max( player( score ), 0 ) / dvarInt( "ui_scorelimit" ) ) -#define BAR_PRECENT_BEST_OTHER_PLAYER ( Select( player( score ) == scoreatrank( 1 ), (max( scoreatrank( 2 ), 0 ) / dvarInt( "ui_scorelimit" )), (max( scoreatrank( 1 ), 0 ) / dvarInt( "ui_scorelimit" )) ) ) - -#define BEST_OTHER_PLAYER_SCORE ( Select( player( score ) == scoreatrank( 1 ), scoreatrank( 2 ), scoreatrank( 1 ) ) ) - -#define FSM_VISIBILITY ( isVisibilityBitSet( BIT_SELECTING_LOCATION ) && !isVisibilityBitSet( BIT_SPECTATING_CLIENT ) && !isVisibilityBitSet( BIT_SCOREBOARD_OPEN ) ) - -{ - menuDef - { - name "scorebars_ffa_background" - rect BOTTOM_RECT_X BOTTOM_RECT_Y 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - exp rect Y( BOTTOM_RECT_Y - (ONLINEGAME * ONLINEGAME_OFFSET) ); - fullScreen 0 - visible when( !FSM_VISIBILITY ) - visibilityBits bits( BIT_HUD_VISIBLE HUD_VISIBILITY !BIT_IN_KILLCAM SHOULD_DISPLAY_SCOREBAR !BIT_UI_ACTIVE !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - - - #define BG_OFFSET_X (-15) - #define BG_OFFSET_Y (-5) - #define BG_START_X (BAR_START_X+BG_OFFSET_X) - #define BG_START_Y (BAR_START_Y+BG_OFFSET_Y) - - // score background - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect BG_START_X BG_START_Y 187 46 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp material( "hud_frame_faction_fade" ); - forecolor 1 1 1 0.5 - visible 1 - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect (BAR_START_X-69) (BG_START_Y-14) 240 59 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp material( "hud_frame_faction_lines" ); - forecolor 1 1 1 0.4 - visible 1 - decoration - } - - #define PROGRESS_OFFSET_X 47 - - // Player progress bar - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect BAR_START_X -42 70 BAR_HEIGHT_TOP HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect W( PROGRESS_OFFSET_X + (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PERCENT_PLAYER ); - exp material( "hud_score_progress" ); - forecolor 0.42 0.68 0.46 0.8 - visible when( dvarInt( "ui_scorelimit" ) != 0 && player( score ) > 0 ) - decoration - } - - // Other player progress bar - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect BAR_START_X -20 70 BAR_HEIGHT_BOTTOM HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect W( PROGRESS_OFFSET_X + (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PRECENT_BEST_OTHER_PLAYER ); - exp material( "hud_score_progress" ); - forecolor 0.73 0.29 0.19 0.8 - visible when( dvarInt( "ui_scorelimit" ) != 0 && BEST_OTHER_PLAYER_SCORE > 0 ) - decoration - } - - // FACTION ICONS - #define FACTION_ICON_WIDTH 64 - #define FACTION_ICON_HEIGHT FACTION_ICON_WIDTH - #define FACTION_BG_WIDTH 92 - #define FACTION_BG_HEIGHT FACTION_BG_WIDTH - #define FACTION_BG_X_START (BAR_START_X-(FACTION_BG_WIDTH/2)) - #define FACTION_BG_Y_START (BAR_START_Y-(FACTION_BG_HEIGHT/2)) - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect FACTION_BG_X_START FACTION_BG_Y_START FACTION_BG_WIDTH FACTION_BG_HEIGHT HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp material( "hud_faction_back_light" ); - forecolor 1 1 1 0.25 - visible 1 - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect FACTION_BG_X_START FACTION_BG_Y_START FACTION_BG_WIDTH FACTION_BG_HEIGHT HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp material( "hud_faction_backing" ); - forecolor 1 1 1 0.2 - visible 1 - decoration - } - - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect (FACTION_BG_X_START+9) (FACTION_BG_Y_START+20) FACTION_ICON_WIDTH FACTION_ICON_HEIGHT HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - origin 5 -5 - exp material( dvarString( "g_TeamIcon_Allies" ) ); - visible when( TEAM_IS_MARINES ); - forecolor 1 1 1 1 - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect (FACTION_BG_X_START+9) (FACTION_BG_Y_START+20) FACTION_ICON_WIDTH FACTION_ICON_HEIGHT HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - origin 5 -5 - exp material( dvarString( "g_TeamIcon_Axis" ) ); - visible when( TEAM_IS_OPFOR ); - forecolor 1 1 1 1 - decoration - } - - } - - #define SCORE_OFFSET_X (PROGRESS_OFFSET_X-12) - #define SCORE_START_X (BAR_START_X+SCORE_OFFSET_X) - #define SCORE_COLOR 1 1 1 - menuDef - { - name "scorebars_ffa_scores" - rect BOTTOM_RECT_X BOTTOM_RECT_Y 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - exp rect Y( BOTTOM_RECT_Y - (ONLINEGAME * ONLINEGAME_OFFSET) ); - fullScreen 0 - visible when( !FSM_VISIBILITY ) - visibilityBits bits( BIT_HUD_VISIBLE SHOULD_DISPLAY_SCOREBAR !BIT_IN_KILLCAM !BIT_UI_ACTIVE !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC BIT_TEAM_FREE !BIT_IN_VEHICLE ) - - // draws Player score - itemDef - { - type ITEM_TYPE_TEXT - rect SCORE_START_X -23 24 24 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect X( SCORE_START_X + ( (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PERCENT_PLAYER ) ); - exp text( player( score ) ); - textfont UI_FONT_EXTRABIG - textscale TEXTSIZE_LARGE - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - forecolor SCORE_COLOR 1 - visible 1 - decoration - } - // Top Arrow - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect SCORE_START_X -53 24 24 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect X( SCORE_START_X + ( (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PERCENT_PLAYER ) ); - exp material( "hud_frame_arrow" ); - forecolor 1 1 1 0.8 - visible 1 - decoration - } - #define OT_SCORE_START_X (SCORE_START_X+2) - // OTHER Player score - itemDef - { - type ITEM_TYPE_TEXT - rect (OT_SCORE_START_X-1) -7 20 20 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect X( OT_SCORE_START_X + ( (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PRECENT_BEST_OTHER_PLAYER ) ); - exp text( BEST_OTHER_PLAYER_SCORE ); - textfont UI_FONT_EXTRABIG - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - forecolor SCORE_COLOR 1 - visible 1 - decoration - } - // Bottom Arrow - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect OT_SCORE_START_X -16 20 (-20) HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect X( OT_SCORE_START_X + ( (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PRECENT_BEST_OTHER_PLAYER ) ); - exp material( "hud_frame_arrow" ); - forecolor 1 1 1 0.8 - visible 1 - decoration - } - } -} diff --git a/mods/patch_mp/ui_mp/hud_hardcore.menu b/mods/patch_mp/ui_mp/hud_hardcore.menu deleted file mode 100644 index d2ae272..0000000 --- a/mods/patch_mp/ui_mp/hud_hardcore.menu +++ /dev/null @@ -1,1316 +0,0 @@ -// CONSOLE HUD - MP - -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui_mp/hud_gametypes.inc" - -{ - #include "ui_mp/hud_dirt.inc" - - // Sticky grenade overlay - menuDef - { - name "sticky_grenade_overlay" - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - fullScreen 0 - visible 1 - visibilityBits bits( !BIT_DEMO_CAMERA_MODE_THIRDPERSON !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_DEMO_ALL_GAME_HUD_HIDDEN !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - - itemDef - { - name "overlay" - style WINDOW_STYLE_SHADER - rect 0 0 640 480 - background "overlay_low_health" - forecolor 1 1 1 0 - visible 1 - decoration - - state - { - name "pulse" - forecolor 1 1 1 0.6 - onEnter { changeState Default 100; } - } - } - } - - // Low health overlay - menuDef - { - name "Low Health" - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - fullScreen 0 - visible 1 - - itemDef - { - name "healthoverlay" - type ITEM_TYPE_OWNERDRAW - rect 0 0 640 480 - forecolor 1 1 1 1 - background "overlay_low_health_splat" - ownerdraw CG_PLAYER_LOW_HEALTH_OVERLAY - visible 1 - visibilityBits bits( !BIT_SPECTATING_CLIENT !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - decoration - } - } - - // Directional hit indicator - menuDef - { - name "Directional Hit Indicator" - rect 0 0 640 480 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - fullScreen 0 - visible 1 - - itemDef - { - name "directionalhitIndicator" - type ITEM_TYPE_OWNERDRAW - rect -16 -16 32 32 - forecolor 1 1 1 1 - background "directional_damage_feedback" - ownerdraw CG_PLAYER_DIRECTIONAL_HIT_INDICATOR - visibilityBits bits( !BIT_SPECTATING_CLIENT !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - decoration - } - } - - // Invalid cmd hint - menuDef - { - name "InvalidCmdHint" - rect 0 -130 0 0 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - fullScreen 0 - visible 1 - - itemDef - { - name "chRect" - type ITEM_TYPE_OWNERDRAW_TEXT - rect 0 0 0 0 - textscale TEXTSIZE_SMALL - textstyle ITEM_TEXTSTYLE_SHADOWED - ownerdraw CG_INVALID_CMD_HINT - textfont UI_FONT_NORMAL - visibilityBits bits( !BIT_SPECTATING_CLIENT !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_DEMO_CAMERA_MODE_THIRDPERSON ) - decoration - } - } - - // Cursor hints - menuDef - { - name "Cursorhints" - rect 0 70 40 40 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - fullScreen 0 - visible 1 - visibilityBits bits( !BIT_UI_ACTIVE !BIT_IS_DEMO_PLAYING !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - - itemDef - { - name "chRect" - type ITEM_TYPE_OWNERDRAW_TEXT - rect -20 0 40 40 // 64x64 - exp rect Y( 0 - (ONLINEGAME * ONLINEGAME_OFFSET) ); - textscale TEXTSIZE_SMALL - textstyle ITEM_TEXTSTYLE_SHADOWED - ownerdraw CG_CURSORHINT - visible 1 - visibilityBits bits( !BIT_SPECTATING_CLIENT ) - forecolor 1 1 1 HUD_ALPHA - decoration - } - } - - - //WRIST WATCH - menuDef - { - name "WristWatch" - fullScreen MENU_FALSE - visible 1 - ui3dWindowId 0 - rect 0 0 640 480 - itemDef - { - name "WristWatchFace" - type ITEM_TYPE_OWNERDRAW - rect 0 0 640 480 - forecolor 1.0 1.0 1.0 1.0 - ownerdraw CG_PLAYER_WRISTWATCH - visible when( !dvarInt( "hideUi3d" ) ); - decoration - } - } - - - #define MINIMAP_ORIGIN 2 2 - - // These are no longer used, they have been replaced by visibility bits. - //#define ALLIES_HAVE_RADAR ( isVisibilityBitSet( BIT_RADAR_ALLIES ) && team( name ) == "TEAM_ALLIES" ) - //#define AXIS_HAVE_RADAR ( isVisibilityBitSet( BIT_RADAR_AXIS ) && team( name ) == "TEAM_AXIS" ) - //#define CLIENT_HAS_RADAR ( isVisibilityBitSet( BIT_RADAR_CLIENT ) && team( name ) == "TEAM_FREE" ) - - #define RECT_COMPASS 8 8 COMPASS_SIZE_MP COMPASS_SIZE_MP HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_TOP - #define FRAME_OFFSET 1 - #define EXTRACAM_ON ( ( isExtraCamActive() || isExtraCamStatic() ) && !InVehicle() && !isDemoCameraEditMode() ) - #define EXTRACAM_SCALE 1.5 - #define EXTRACAM_FRAME_OFFSET 2 - #define REC_TEXT_VISIBILE ( !isDemoDollyCamera() ) - - menudef - { - name spike_cam - rect RECT_COMPASS - fullScreen 0 - visible when ( dvarString( createfx ) != "on" ); - visibilityBits bits( !BIT_SELECTING_LOCATION !BIT_IN_KILLCAM !BIT_IS_FLASH_BANGED !BIT_UI_ACTIVE !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC !BIT_IS_SCOPED BIT_EXTRACAM_ON !BIT_DEMO_ALL_GAME_HUD_HIDDEN ) - - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - exp material( "extracam2d" ); - forecolor 1 1 1 1 - visible 1 - visibilityBits bits( !BIT_EXTRACAM_STATIC ); - decoration - - state - { - name "spike_cam_on" - rect MINIMAP_X_MP MINIMAP_Y_MP (MINIMAP_W_MP*EXTRACAM_SCALE) (MINIMAP_H_MP*EXTRACAM_SCALE) - } - } - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - exp material( "compass_static" ); - forecolor 1 1 1 1 - visible 1 - visibilityBits bits( BIT_EXTRACAM_STATIC ); - - decoration - - state - { - name "spike_cam_on" - rect MINIMAP_X_MP MINIMAP_Y_MP (MINIMAP_W_MP*EXTRACAM_SCALE) (MINIMAP_H_MP*EXTRACAM_SCALE) - } - } - // frame - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect (MINIMAP_X_MP-FRAME_OFFSET) (MINIMAP_Y_MP-FRAME_OFFSET) (MINIMAP_W_MP+FRAME_OFFSET*2) (MINIMAP_H_MP+FRAME_OFFSET*2) - origin MINIMAP_ORIGIN - forecolor 1 1 1 1 - exp material( "compass_map_border" ); - visible 1 - decoration - - state - { - name "spike_cam_on" - rect (MINIMAP_X_MP-EXTRACAM_FRAME_OFFSET) (MINIMAP_Y_MP-EXTRACAM_FRAME_OFFSET) (MINIMAP_W_MP*EXTRACAM_SCALE+EXTRACAM_FRAME_OFFSET*2) (MINIMAP_H_MP*EXTRACAM_SCALE+EXTRACAM_FRAME_OFFSET*2) - } - } - // REC text - itemDef - { - type ITEM_TYPE_TEXT - rect (MINIMAP_X_MP+1) (MINIMAP_Y_MP+14) MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - textstyle ITEM_TEXTSTYLE_NORMAL - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.33 - forecolor EXTRACAM_RED_COLOR 1 - text "REC" - visible when( REC_TEXT_VISIBILE ) - visibilityBits bits( !BIT_EXTRACAM_STATIC ); - decoration - } - // Blinking REC light - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect (MINIMAP_X_MP+23) (MINIMAP_Y_MP+1.5) 9 9 - origin MINIMAP_ORIGIN - forecolor EXTRACAM_RED_COLOR 1 - exp material( "hud_dpad_eqip_count_backing" ); - visible when( REC_TEXT_VISIBILE ) - visibilityBits bits( !BIT_EXTRACAM_STATIC ); - decoration - - state - { - name "spike_cam_on" - onEnter - { - changeState spike_cam_on_wait 750; - } - } - state - { - name "spike_cam_on_wait" - onEnter - { - changeState spike_cam_off 0; - } - } - state - { - name "spike_cam_off" - forecolor EXTRACAM_RED_COLOR 0 - onEnter - { - changeState spike_cam_off_wait 750; - } - } - state - { - name "spike_cam_off_wait" - forecolor EXTRACAM_RED_COLOR 0 - onEnter - { - changeState spike_cam_on 0; - } - } - } - } - -// This condition is now replaced by a single bit BIT_COMPASS_VISIBLE which is set in code cl_scrn_mp.cpp in the function CL_UpdateUIVisibilityBits() -// ( !isVisibilityBitSet( BIT_HUD_HARDCORE ) || ALLIES_HAVE_RADAR || AXIS_HAVE_RADAR || CLIENT_HAS_RADAR || isVisibilityBitSet( BIT_G_COMPASS_SHOW_ENEMIES ) ) - -#define COMPASS_ALPHA 0.8 - - // Compass - menuDef - { - name "Compass_old" - rect RECT_COMPASS - fullScreen 0 - visible when ( (dvarString( createfx ) != "on") ); - visibilityBits bits( BIT_HUD_VISIBLE BIT_COMPASS_VISIBLE !BIT_DEMO_CAMERA_MODE_THIRDPERSON !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_DEMO_ALL_GAME_HUD_HIDDEN !BIT_SELECTING_LOCATION !BIT_IN_KILLCAM !BIT_IS_FLASH_BANGED !BIT_UI_ACTIVE !BIT_IS_SCOPED !BIT_EXTRACAM_ON ) - - itemDef - { - name "mini_map_background" - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 0 0 0 0.4 - exp material( "white" ); - visible 1 - decoration - } - - itemDef - { - name "mini_map" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - background "compass_map_default" - ownerdraw CG_PLAYER_COMPASS_MAP - visible 1 - decoration - } - - // Friendly Compass scrambler indicator - itemDef - { - name "compass_map_scrambler_friendlies" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_SCRAMBLER_FRIENDLY - visible 1 - } - - // Grid - itemDef - { - name "compass_map_grid" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - background "map_grid_square" - ownerdraw CG_PLAYER_COMPASS_GRID - visible 1 - decoration - } - itemDef - { - name "compass_grid_points" - type ITEM_TYPE_OWNERDRAW_TEXT - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 (COMPASS_ALPHA*0.7) - textalign ITEM_ALIGN_MIDDLE_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWED - textscale 0.26 - ownerdraw CG_PLAYER_COMPASS_GRID_POINTS - visible 1 - } - // frame - itemDef - { - name "compassframe" - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect (MINIMAP_X_MP-FRAME_OFFSET) (MINIMAP_Y_MP-FRAME_OFFSET) (MINIMAP_W_MP+FRAME_OFFSET) (MINIMAP_H_MP+FRAME_OFFSET) - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - exp material( "compass_map_border" ); - visible 1 - decoration - } - // tank pointers - itemDef - { - name "compasstanks" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_TANKS - visible 1 - } - // dog pointers - itemDef - { - name "compassdogs" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_DOGS - visible 1 - } - // turret pointers - itemDef - { - name "compassturrets" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_TURRETS - visible 1 - } - // guided missile pointers - itemDef - { - name "compassguidedmissiles" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_GUIDED_MISSILE - visible 1 - } - // Objective pointers - itemDef - { - name "compasspointers" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - background "objective_line" - ownerdraw CG_PLAYER_COMPASS_POINTERS - visible 1 - visibilityBits bits( BIT_HUD_SHOWOBJICONS ) - decoration - } - // Friendlies pointers - itemDef - { - name "compassfriendlies" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_FRIENDS - visible 1 - } - // Enemy pings - itemDef - { - name "compassenemies" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_ENEMIES - visible 1 - } - // Fake fire pings - itemDef - { - name "compassfakefire" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_FAKE_FIRE - visible 1 - } - // Helicopter pointers - itemDef - { - name "compasshelicopters" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_HELICOPTERS - visible 1 - } - // Plane pointers - itemDef - { - name "compassplanes" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_PLANES - visible 1 - } - // Player direction indicator - itemDef - { - name "compassplayer" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - background "compassping_player" - ownerdraw CG_PLAYER_COMPASS_PLAYER - visible 1 - } - // Artillery Icon - itemDef - { - name "compassartilleryicon" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_ARTILLERY_ICON - visible 1 - } - // Radar lines - itemDef - { - name "compassradareffects" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 COMPASS_ALPHA - ownerdraw CG_PLAYER_COMPASS_RADAR_EFFECTS - visible 1 - } - // Map flicker - itemDef - { - name "compassflicker" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - forecolor 1 1 1 1 - background "compass_map_flicker" - ownerdraw CG_PLAYER_COMPASS_FLICKER - visible 1 - decoration - } - itemDef - { - name "compass_map_static" - type ITEM_TYPE_OWNERDRAW - rect MINIMAP_X_MP MINIMAP_Y_MP MINIMAP_W_MP MINIMAP_H_MP - origin MINIMAP_ORIGIN - background "tow_filter_overlay_no_signal" - forecolor 1 1 1 1 - ownerdraw CG_PLAYER_COMPASS_STATIC - visible 1 - } - } - - - // Full Screen Map for location selection - #define FULL_SCREEN_MAP_WIDTH 375 - #define FULL_SCREEN_MAP_HEIGHT 375 - #define MAP_ALPHA 1 - #define MAP_TEXT_ALPHA 0.9 - - #define FSM_VISIBILITY_BITS BIT_SELECTING_LOCATION !BIT_SPECTATING_CLIENT !BIT_IS_DEMO_PLAYING !BIT_SCOREBOARD_OPEN - - menuDef - { - name "FullScreenMap" - rect -100 -100 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - fullScreen 0 - visible 1 -#ifdef CONSOLE - blurWorld 2.0 -#endif - visibilityBits bits( FSM_VISIBILITY_BITS ) - - itemDef - { - name "map_backdrop" - style WINDOW_STYLE_SHADER - rect -200 -200 (FULL_SCREEN_MAP_WIDTH+200) (FULL_SCREEN_MAP_HEIGHT+200) HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - forecolor 0.1 0.1 0.1 (0.7*MAP_ALPHA) - background "menu_black_box_faded" - visible 1 - decoration - } - - itemDef - { - name "map_top_black_bar" - style WINDOW_STYLE_SHADER - rect -98 -118 (FULL_SCREEN_MAP_WIDTH-4) 20 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - forecolor 0 0 0 (MAP_ALPHA+0.2) - background "white" - visible 1 - decoration - } - - itemDef - { - name "map_map" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - background "compass_map_default" - ownerdraw CG_PLAYER_FULLMAP_MAP - visible 1 - decoration - } - - itemDef - { - name "map_bottom_black_bar" - style WINDOW_STYLE_SHADER - rect -98 273 (FULL_SCREEN_MAP_WIDTH-4) 20 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - forecolor 0 0 0 (MAP_ALPHA+0.2) - background "white" - visible 1 - decoration - } - - // Friendly Compass scrambler indicator - itemDef - { - name "compass_map_scrambler_friendlies_locationSelector" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_SCRAMBLER_FRIENDLY - visible 1 - decoration - } - - // Static - itemDef - { - name "pause_map_static" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 1 - background "compass_static" - ownerdraw CG_PLAYER_FULLMAP_STATIC - visible 1 - decoration - } - - - // Grid - itemDef - { - name "map_grid" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 (MAP_ALPHA*0.75) - background "map_grid_square" - ownerdraw CG_PLAYER_FULLMAP_GRID - visible 1 - decoration - } - - itemDef - { - name "grid_points" - type ITEM_TYPE_OWNERDRAW_TEXT - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 (MAP_ALPHA*0.75) - textalign ITEM_ALIGN_MIDDLE_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWED - textscale 0.3 - ownerdraw CG_PLAYER_FULLMAP_GRID_POINTS - visible 1 - decoration - } - - // Vehicles - itemDef - { - name "mapvehicles" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_VEHICLES - visible 1 - } - - // Helicopter - itemDef - { - name "mapvehicles" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_HELICOPTER - visible 1 - } - - // Objective pointers - itemDef - { - name "mappointers" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - background "objective_line" - ownerdraw CG_PLAYER_FULLMAP_POINTERS - visible 1 - decoration - } - // Friendlies pointers - itemDef - { - name "mapfriendlies" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_FRIENDS - visible 1 - } - // Enemies pointers - itemDef - { - name "mapenemies" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_ENEMIES - visible 1 - } - - // Fake fire pointers - itemDef - { - name "mapfakefire" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_FAKE_FIRE - visible 1 - } - - // Static - itemDef - { - name "mapscrambler" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - background "compass_static" - ownerdraw CG_PLAYER_FULLMAP_SCRAMBLER - visible 1 - } - - itemDef - { - name "map_locator" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - background "compass_map_default" - ownerdraw CG_PLAYER_FULLMAP_LOCATION_SELECTOR - visible 1 - visibilityBits bits( BIT_SELECTING_LOCATIONAL_KILLSTREAK ) - decoration - } - - // Player direction indicator - itemDef - { - name "mapplayer" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - background "compassping_player" - ownerdraw CG_PLAYER_FULLMAP_PLAYER - visible 1 - } - - // Artillery Icon - itemDef - { - name "mapartilleryicon" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_ARTILLERY_ICON - visible 1 - } - - // Dogs - itemDef - { - name "mapdogs" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_DOGS - visible 1 - } - - // Turrets - itemDef - { - name "mapturrets" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_TURRETS - visible 1 - } - - //Guided Missiles - itemDef - { - name "mapguidedmissiles" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_GUIDED_MISSILE - visible 1 - } - - // Radar lines - itemDef - { - name "mapradareffects" - type ITEM_TYPE_OWNERDRAW - rect 0 0 FULL_SCREEN_MAP_WIDTH FULL_SCREEN_MAP_HEIGHT - forecolor 1 1 1 MAP_ALPHA - ownerdraw CG_PLAYER_FULLMAP_RADAR_EFFECTS - visible 1 - decoration - } - - // instruction - itemDef - { - name "airstrikeinstruction" - type ITEM_TYPE_TEXT - rect -90 290 20 20 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.3 - forecolor 1 1 1 MAP_TEXT_ALPHA - text "@PLATFORM_PRESS_TO_SET_AIRSTRIKE" - visible when( IsSelectingAirstrike() ); - decoration - } - - // instruction - itemDef - { - name "artilleryinstruction" - type ITEM_TYPE_TEXT - rect -90 290 20 20 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.3 - forecolor 1 1 1 MAP_TEXT_ALPHA - text "@PLATFORM_PRESS_TO_SET_ARTILLERY" - visible when( IsSelectingArtillery() ); - decoration - } - - // instruction - itemDef - { - name "napalminstruction" - type ITEM_TYPE_TEXT - rect -90 290 20 20 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.3 - forecolor 1 1 1 MAP_TEXT_ALPHA - text "@PLATFORM_PRESS_TO_SET_NAPALM" - visible when( IsSelectingNapalm() ); - decoration - } - // instruction - itemDef - { - name "comlinkinstruction" - type ITEM_TYPE_TEXT - rect -90 290 20 20 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.3 - forecolor 1 1 1 MAP_TEXT_ALPHA - text "@PLATFORM_PRESS_TO_SET_COMLINK" - visible when( IsSelectingComlink() ); - decoration - } - - // instruction - itemDef - { - name "mortarStrikesLeft" - type ITEM_TYPE_TEXT - rect -90 290 20 20 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.3 - forecolor 1 1 1 MAP_TEXT_ALPHA - exp text( locString( "@PLATFORM_PRESS_TO_SET_MORTAR", dvarint( mortarStrikesLeft ) ) ); - visible when( IsSelectingMortar() && dvarint( mortarStrikesLeft ) ); - decoration - } - - itemDef - { - name "squadback" - type ITEM_TYPE_TEXT - rect 245 290 20 20 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_RIGHT - textfont UI_FONT_NORMAL - textscale 0.3 - forecolor 1 1 1 MAP_TEXT_ALPHA - text "@PLATFORM_SQUAD_BACK" - visible 1 - decoration - } - - itemDef - { - name "MapName" - type ITEM_TYPE_TEXT - rect -90 -98 100 100 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.4 - forecolor 1 1 1 MAP_TEXT_ALPHA - exp text ( "@"+tablelookup("mp/mapsTable.csv",0,dvarString(mapname),3) ); - visible 1 - decoration - } - } - - #define KILLCAMBARS( BARSNAME, COLOR, VISIBLEWHEN, VISIBILITY_BITS ) \ - menuDef \ - { \ - name BARSNAME \ - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \ - fullScreen 0 \ - visible VISIBLEWHEN; \ - visibilityBits bits( VISIBILITY_BITS ) \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER \ - rect 0 0 640 112 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \ - background "white" \ - forecolor COLOR \ - visible 1 \ - decoration \ - } \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER \ - rect 0 112 640 22 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \ - background "white" \ - forecolor COLOR \ - visible when( dvarInt( xblive_basictraining ) ); \ - decoration \ - } \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER \ - rect 0 368 640 112 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \ - background "white" \ - forecolor COLOR \ - visible 1 \ - decoration \ - } \ - } - - KILLCAMBARS( "killcam", .49 .05 .03 0.5, 1, BIT_IN_KILLCAM !BIT_FINAL_KILLCAM !BIT_ROUND_END_KILLCAM ) - KILLCAMBARS( "killcam_final", 0 0 0 0.5, when ( isVisibilityBitSet( BIT_FINAL_KILLCAM ) || isVisibilityBitSet( BIT_ROUND_END_KILLCAM ) ), BIT_IN_KILLCAM ) - - #define KILLCAMTEXT( TEXTNAME, TEXTDISPLAY, VISIBILITY_BITS ) \ - menuDef \ - { \ - name TEXTNAME \ - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \ - fullScreen 0 \ - visible 1 \ - visibilityBits bits( VISIBILITY_BITS ) \ - itemDef \ - { \ - type ITEM_TYPE_TEXT \ - rect 0 55 1 1 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_TOP \ - origin 0 0 \ - exp text ( TEXTDISPLAY ); \ - forecolor 1 1 1 0.2 \ - textfont UI_FONT_EXTRABIG \ - textscale TEXTSIZE_LARGEST \ - textalign ITEM_ALIGN_CENTER \ - visible when( !USE_SMALLER_FONT ) \ - decoration \ - } \ - itemDef \ - { \ - type ITEM_TYPE_TEXT \ - rect 0 55 1 1 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_TOP \ - origin 0 0 \ - exp text ( TEXTDISPLAY ); \ - forecolor 1 1 1 0.2 \ - textfont UI_FONT_EXTRABIG \ - textscale ( TEXTSIZE_LARGEST * FOREIGN_LANGUAGE_MULTIPLIER ) \ - textalign ITEM_ALIGN_CENTER \ - visible when( USE_SMALLER_FONT ) \ - decoration \ - } \ - } - - KILLCAMTEXT( "killcam_text", "@MP_KILLCAM_CAPS", BIT_IN_KILLCAM !BIT_FINAL_KILLCAM !BIT_ROUND_END_KILLCAM !BIT_NEMESIS_KILLCAM ) - KILLCAMTEXT( "killcam_nemesis_text", "@MP_NEMESIS_KILLCAM_CAPS", BIT_IN_KILLCAM !BIT_FINAL_KILLCAM !BIT_ROUND_END_KILLCAM BIT_NEMESIS_KILLCAM ) - KILLCAMTEXT( "killcam_final_text", "@MP_FINAL_KILLCAM_CAPS", BIT_IN_KILLCAM BIT_FINAL_KILLCAM ) - KILLCAMTEXT( "killcam_end_round_text", "@MP_ROUND_END_KILLCAM", BIT_IN_KILLCAM BIT_ROUND_END_KILLCAM ) - - // Center obituary (you killed/were killed by) - menuDef - { - name "CenterObituary" - rect 0 170 0 0 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - fullScreen 0 - visible 1 - - itemDef - { - name "chRect" - type ITEM_TYPE_OWNERDRAW_TEXT - rect 0 0 0 0 - exp rect Y( 0 - (ONLINEGAME * ONLINEGAME_OFFSET) ); - textscale TEXTSIZE_DEFAULT - textstyle ITEM_TEXTSTYLE_SHADOWED - ownerdraw CG_CENTER_MESSAGE - forecolor 1 1 1 HUD_ALPHA - visible 1 - decoration - } - } - - // game messages - menuDef - { - name "gamemessages" - rect 6 -75 10 10 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - fullScreen 0 - visibilityBits bits( !BIT_DEMO_ALL_GAME_HUD_HIDDEN !BIT_IN_KILLCAM !BIT_SPECTATING_CLIENT !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC !BIT_IS_WAGER_MATCH ) - - itemDef - { - rect 0 0 0 0 - exp rect Y( 0 - (ONLINEGAME * ONLINEGAME_OFFSET) ); - type ITEM_TYPE_GAME_MESSAGE_WINDOW - gamemsgwindowindex 0 - gamemsgwindowmode MODE_BOTTOMUP_ALIGN_BOTTOM - textfont UI_FONT_DEFAULT - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textscale TEXTSIZE_SMALL - visible 1 - visibilityBits bits( !BIT_UI_ACTIVE BIT_HUD_OBITUARIES ) - } - } - - menuDef - { - name "boldgamemessages" - rect 0 -65 10 10 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - fullScreen 0 - visible 1 - visibilityBits bits( !BIT_DEMO_ALL_GAME_HUD_HIDDEN !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_IN_KILLCAM ) - - itemDef - { - origin 0 0 - type ITEM_TYPE_GAME_MESSAGE_WINDOW - gamemsgwindowindex 1 - gamemsgwindowmode MODE_BOTTOMUP_ALIGN_BOTTOM - textfont UI_FONT_NORMAL - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_CENTER - textscale TEXTSIZE_DEFAULT - visible 1 - visibilityBits bits( !BIT_UI_ACTIVE BIT_HUD_OBITUARIES ) - } - } - - // debug hit location - menuDef - { - name "hitloc" - rect 0 0 0 0 HORIZONTAL_ALIGN_USER_RIGHT VERTICAL_ALIGN_USER_BOTTOM - - fullScreen 0 - visible when( dvarint( "ui_hidehitlocs" ) == 0 ) - - #define HITLOCSINGLE( INDEX, YPOS ) \ - itemDef \ - { \ - type ITEM_TYPE_TEXT \ - rect 0 -50 1 1 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM \ - origin 0 YPOS \ - exp text ( dvarstring( "ui_hitloc_damage_" + INDEX ) ); \ - textfont UI_FONT_NORMAL \ - textscale 0.3 \ - textalign ITEM_ALIGN_RIGHT \ - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE \ - visible when ( dvarstring( "ui_hitloc_" + INDEX ) != "" ) \ - decoration \ - } \ - itemDef \ - { \ - type ITEM_TYPE_TEXT \ - rect -30 -50 1 1 HORIZONTAL_ALIGN_USER_RIGHT VERTICAL_ALIGN_USER_BOTTOM \ - origin 0 YPOS \ - exp text ( dvarstring( "ui_hitloc_" + INDEX ) ); \ - textfont UI_FONT_NORMAL \ - textscale 0.3 \ - textalign ITEM_ALIGN_RIGHT \ - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE \ - visible 1 \ - decoration \ - } - - HITLOCSINGLE( 0, 0 ) - HITLOCSINGLE( 1, -15 ) - HITLOCSINGLE( 2, -30 ) - HITLOCSINGLE( 3, -45 ) - HITLOCSINGLE( 4, -60 ) - HITLOCSINGLE( 5, -75 ) - } - - // Safe area - menuDef - { - name "safeareaa" - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - fullScreen 0 - visible 1 - - #include "ui/safearea.menu" - } - - menuDef - { - name "deadscreen" - fullScreen 0 - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop "" - visible 1 - - // Death quote - itemDef - { - name quote - type ITEM_TYPE_OWNERDRAW_TEXT - dvar "ui_deadquote" - textscale TEXTSIZE_DEFAULT - textstyle ITEM_TEXTSTYLE_SHADOWED - rect 80 200 480 20 - textalign ITEM_ALIGN_CENTER - textaligny 0 // point to center around - textalignx 0 // point to center around - ownerdraw CG_DEADQUOTE - forecolor 1 1 1 1 - visible 1 - decoration - } - - itemDef - { - name hud_grenadeicon - rect 315 300 60 60 - origin 0 0 - style WINDOW_STYLE_SHADER - background "hud_grenadeicon" - dvartest "ui_grenade_death" - showdvar { "1" } - visible 1 - decoration - } - - itemDef - { - name hud_grenadepointer - rect 320 270 50 25 - origin 0 0 - style WINDOW_STYLE_SHADER - background "hud_grenadepointer" - dvartest "ui_grenade_death" - showdvar { "1" } - visible 1 - decoration - } - } - - // Target highlights - menuDef - { - name "target_highlights" - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - fullScreen 0 - visible 1 - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect 0 0 640 480 - forecolor 1 1 1 1 - background "compassping_enemysatellite_diamond" - ownerdraw CG_PLAYER_TARGET_HIGHLIGHTS - visible 1 - visibilityBits bits( !BIT_DEMO_CAMERA_MODE_THIRDPERSON !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_SPECTATING_CLIENT !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - decoration - } - } - menuDef - { - name "target_highlights_friendly" - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - fullScreen 0 - visible 1 - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect 0 0 640 480 - forecolor 1 1 1 1 - background "compassping_yousatellite_diamond" - ownerdraw CG_PLAYER_TARGET_HIGHLIGHTS_FRIENDLY - visible 1 - visibilityBits bits( !BIT_DEMO_CAMERA_MODE_THIRDPERSON !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_SPECTATING_CLIENT !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - decoration - } - } - - menuDef - { - name "target_highlights_guided_missile" - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - fullScreen 0 - visible 1 - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect 0 0 640 480 - forecolor 1 1 1 1 - background "compassping_enemysatellite_diamond" - ownerdraw CG_PLAYER_TARGET_HIGHLIGHTS_GUIDED_MISSILE - visible 1 - visibilityBits bits( !BIT_DEMO_CAMERA_MODE_THIRDPERSON !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_SPECTATING_CLIENT BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - decoration - } - } - menuDef - { - name "target_highlights_friendly_guided_missile" - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - fullScreen 0 - visible 1 - - itemDef - { - type ITEM_TYPE_OWNERDRAW - rect 0 0 640 480 - forecolor 1 1 1 1 - background "compassping_yousatellite_diamond" - ownerdraw CG_PLAYER_TARGET_HIGHLIGHTS_FRIENDLY - visible 1 - visibilityBits bits( !BIT_DEMO_CAMERA_MODE_THIRDPERSON !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_SPECTATING_CLIENT BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - decoration - } - } - - // Guided Missile Fuel - menuDef - { - name "missile_fuel" - rect 182 -122 150 10 HORIZONTAL_ALIGN_USER_CENTER VERTICAL_ALIGN_USER_CENTER - fullScreen 0 - visible 1 - visibilityBits bits( !BIT_IN_KILLCAM !BIT_DEMO_CAMERA_MODE_THIRDPERSON !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_SPECTATING_CLIENT BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC ) - - itemDef - { - style WINDOW_STYLE_SHADER - rect 0 0 13 224 - //origin -76 169 - forecolor 0.4 0.4 0.4 0.5 - background "menu_white_line" - visible 1 - decoration - } - - itemDef - { - name "fuel_bar" - type ITEM_TYPE_OWNERDRAW - rect 0 0 13 224 - ownerdraw CG_PLAYER_GUIDED_MISSILE_FUEL - visible 1 - forecolor 1 1 1 1 - background "menu_white_line" - decoration - } - } -} diff --git a/mods/patch_mp/ui_mp/hud_team.menu b/mods/patch_mp/ui_mp/hud_team.menu deleted file mode 100644 index 4a3a677..0000000 --- a/mods/patch_mp/ui_mp/hud_team.menu +++ /dev/null @@ -1,315 +0,0 @@ -// CONSOLE HUD - MP - -#include "ui/menudef.h" -#include "ui/framestyle.inc" -#include "ui_mp/hud_gametypes.inc" - -#define BAR_START_X 42 -#define BAR_START_Y -42 -#define BAR_HEIGHT 39 -#define BAR_WIDTH 143 -#define BAR_HEIGHT_TOP 20 -#define BAR_HEIGHT_BOTTOM 16 - -#define BAR_PERCENT_TEAM ( max( team( score ), 0 ) / dvarInt( "ui_scorelimit" ) ) -#define BAR_PRECENT_OTHERTEAM ( max( otherteam( score ), 0 ) / dvarInt( "ui_scorelimit" ) ) - -#define FSM_VISIBILITY ( isVisibilityBitSet( BIT_SELECTING_LOCATION ) && !isVisibilityBitSet( BIT_SPECTATING_CLIENT ) && !isVisibilityBitSet( BIT_SCOREBOARD_OPEN ) ) - -{ - menuDef - { - name "scorebars_team_background" - rect BOTTOM_RECT_X BOTTOM_RECT_Y 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - exp rect Y( BOTTOM_RECT_Y - (ONLINEGAME * ONLINEGAME_OFFSET) ); - fullScreen 0 - visible when( !FSM_VISIBILITY ) - visibilityBits bits( BIT_HUD_VISIBLE !BIT_IN_KILLCAM !BIT_UI_ACTIVE HUD_VISIBILITY !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC SHOULD_DISPLAY_SCOREBAR ) - - #define BG_OFFSET_X (-15) - #define BG_OFFSET_Y (-5) - #define BG_START_X (BAR_START_X+BG_OFFSET_X) - #define BG_START_Y (BAR_START_Y+BG_OFFSET_Y) - - // score background - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect BG_START_X BG_START_Y 187 46 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp material( "hud_frame_faction_fade" ); - forecolor 1 1 1 0.5 - visible 1 - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect (BAR_START_X-69) (BG_START_Y-14) 240 59 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp material( "hud_frame_faction_lines" ); - forecolor 1 1 1 0.4 - visible 1 - decoration - } - - #define PROGRESS_OFFSET_X 47 - - // Player team progress bar - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect BAR_START_X -42 70 BAR_HEIGHT_TOP HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect W( PROGRESS_OFFSET_X + (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PERCENT_TEAM ); - exp material( "hud_score_progress" ); - forecolor 0.42 0.68 0.46 0.8 - visible when( dvarInt( "ui_scorelimit" ) != 0 && team( score ) > 0 ) - decoration - } - - // Other team progress bar - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect BAR_START_X -20 70 BAR_HEIGHT_BOTTOM HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect W( PROGRESS_OFFSET_X + (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PRECENT_OTHERTEAM ); - exp material( "hud_score_progress" ); - forecolor 0.73 0.29 0.19 0.8 - visible when( dvarInt( "ui_scorelimit" ) != 0 && otherteam( score ) > 0 ) - decoration - } - - // FACTION ICONS - #define FACTION_ICON_WIDTH 64 - #define FACTION_ICON_HEIGHT FACTION_ICON_WIDTH - #define FACTION_BG_WIDTH 92 - #define FACTION_BG_HEIGHT FACTION_BG_WIDTH - #define FACTION_BG_X_START (BAR_START_X-(FACTION_BG_WIDTH/2)) - #define FACTION_BG_Y_START (BAR_START_Y-(FACTION_BG_HEIGHT/2)) - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect FACTION_BG_X_START FACTION_BG_Y_START FACTION_BG_WIDTH FACTION_BG_HEIGHT HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp material( "hud_faction_back_light" ); - forecolor 1 1 1 0.25 - visible 1 - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect FACTION_BG_X_START FACTION_BG_Y_START FACTION_BG_WIDTH FACTION_BG_HEIGHT HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp material( "hud_faction_backing" ); - forecolor 1 1 1 0.2 - visible 1 - decoration - } - - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect (FACTION_BG_X_START+9) (FACTION_BG_Y_START+20) FACTION_ICON_WIDTH FACTION_ICON_HEIGHT HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - origin 5 -5 - exp material( dvarString( "g_TeamIcon_Allies" ) ); - visible when( team( name ) == "TEAM_ALLIES" ); - forecolor 1 1 1 1 - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect (FACTION_BG_X_START+9) (FACTION_BG_Y_START+20) FACTION_ICON_WIDTH FACTION_ICON_HEIGHT HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - origin 5 -5 - exp material( dvarString( "g_TeamIcon_Axis" ) ); - visible when( team( name ) == "TEAM_AXIS" ); - forecolor 1 1 1 1 - decoration - } - - } - - #define SCORE_OFFSET_X (PROGRESS_OFFSET_X-12) - #define SCORE_START_X (BAR_START_X+SCORE_OFFSET_X) - #define SCORE_COLOR 1 1 1 - menuDef - { - name "scorebars_team_scores" - rect BOTTOM_RECT_X BOTTOM_RECT_Y 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - exp rect Y( BOTTOM_RECT_Y - (ONLINEGAME * ONLINEGAME_OFFSET) ); - fullScreen 0 - visible when( !FSM_VISIBILITY && ( isVisibilityBitSet( BIT_TEAM_ALLIES ) || isVisibilityBitSet( BIT_TEAM_AXIS ) ) ); - visibilityBits bits( BIT_HUD_VISIBLE !BIT_IN_KILLCAM !BIT_UI_ACTIVE HUD_VISIBILITY !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC SHOULD_DISPLAY_SCOREBAR ) - - // draws TEAM score - itemDef - { - type ITEM_TYPE_TEXT - rect (SCORE_START_X-2) -23 24 24 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect X( SCORE_START_X + ( (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PERCENT_TEAM ) ); - exp text( team( score ) ); - textfont UI_FONT_EXTRABIG - textscale TEXTSIZE_LARGE - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - forecolor SCORE_COLOR 1 - visible 1 - decoration - } - // Top Arrow - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect SCORE_START_X -53 24 24 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect X( SCORE_START_X + ( (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PERCENT_TEAM ) ); - exp material( "hud_frame_arrow" ); - forecolor 1 1 1 0.8 - visible 1 - decoration - } - #define OT_SCORE_START_X (SCORE_START_X+2) - // OTHER TEAM score - itemDef - { - type ITEM_TYPE_TEXT - rect (OT_SCORE_START_X-2) -7 20 20 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect X( OT_SCORE_START_X + ( (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PRECENT_OTHERTEAM ) ); - exp text( otherteam( score ) ); - textfont UI_FONT_EXTRABIG - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - forecolor SCORE_COLOR 1 - visible 1 - decoration - } - // Bottom Arrow - itemDef - { - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect OT_SCORE_START_X -16 20 (-20) HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp rect X( OT_SCORE_START_X + ( (BAR_WIDTH-PROGRESS_OFFSET_X) * BAR_PRECENT_OTHERTEAM ) ); - exp material( "hud_frame_arrow" ); - forecolor 1 1 1 0.8 - visible 1 - decoration - } - } - - #define STATUS_TIME 5 - #define STATUS_TIME_MOD 30 - #define STATUS_FONT UI_FONT_EXTRABIG - #define STATUS_TEXT_SCALE TEXTSIZE_DEFAULT - #define STATUS_START_X (BAR_START_X+(FACTION_BG_WIDTH/2)-4) - #define STATUS_START_Y (BAR_START_Y-2) - // Score Bar - menuDef - { - name "scorebar_game_status" - rect BOTTOM_RECT_X BOTTOM_RECT_Y 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - exp rect Y( BOTTOM_RECT_Y - (ONLINEGAME * ONLINEGAME_OFFSET) ); - fullScreen 0 - visible when ( !FSM_VISIBILITY && ( (team( name ) == "TEAM_ALLIES" || team( name ) == "TEAM_AXIS") ) ); - visibilityBits bits( BIT_HUD_VISIBLE !BIT_UI_ACTIVE !BIT_BOMB_TIMER !BIT_BOMB_TIMER_A !BIT_BOMB_TIMER_B !BIT_DEMO_CAMERA_MODE_MOVIECAM !BIT_DEMO_ALL_GAME_HUD_HIDDEN !BIT_IN_KILLCAM HUD_VISIBILITY !BIT_IN_GUIDED_MISSILE !BIT_IN_GUIDED_MISSILE_STATIC !BIT_SCOREBOARD_OPEN ) - - #define IS_WINNING ( team( score ) > otherteam( score ) && ((timeLeft() / 1000) % STATUS_TIME_MOD > STATUS_TIME) ) - // winning highlight - //itemDef - //{ - // style WINDOW_STYLE_SHADER - // type ITEM_TYPE_IMAGE - // rect (STATUS_START_X-5) (BAR_START_Y-15) 16 16 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - // exp material( "hud_score_back" ); - // exp rect W( getTextWidth( locString( "@MENU_WINNING_CAPS" ), STATUS_FONT, STATUS_TEXT_SCALE )+10 ); - // forecolor 0.3 1 0.3 0.2 - // visible when( IS_WINNING ); - // decoration - //} - itemDef - { - type ITEM_TYPE_TEXT - rect STATUS_START_X STATUS_START_Y 1 1 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - text "@MENU_WINNING_CAPS" - textfont STATUS_FONT - textscale STATUS_TEXT_SCALE - textalign ITEM_ALIGN_LEFT - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - forecolor NEW_FRAME_GREEN_RGB 1 - visible when( IS_WINNING ); - decoration - } - #define IS_LOSING ( team( score ) < otherteam( score ) && ((timeLeft() / 1000) % STATUS_TIME_MOD > STATUS_TIME) ) - // losing highlight - //itemDef - //{ - // style WINDOW_STYLE_SHADER - // type ITEM_TYPE_IMAGE - // rect (STATUS_START_X-5) (BAR_START_Y-15) 16 16 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - // exp material( "hud_score_back" ); - // exp rect W( getTextWidth( locString( "@MENU_LOSING_CAPS" ), STATUS_FONT, STATUS_TEXT_SCALE )+10 ); - // forecolor 1 0.3 0.3 0.2 - // visible when( IS_LOSING ); - // decoration - //} - itemDef - { - type ITEM_TYPE_TEXT - rect STATUS_START_X STATUS_START_Y 1 1 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - text "@MENU_LOSING_CAPS" - textfont STATUS_FONT - textscale STATUS_TEXT_SCALE - textalign ITEM_ALIGN_LEFT - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - forecolor NEW_FRAME_RED_RGB 1 - visible when( IS_LOSING ) - decoration - } - #define IS_TIED ( team( score ) == otherteam( score ) && ((timeLeft() / 1000) % STATUS_TIME_MOD > STATUS_TIME) ) - // tied highlight - //itemDef - //{ - // style WINDOW_STYLE_SHADER - // type ITEM_TYPE_IMAGE - // rect (STATUS_START_X-3) (BAR_START_Y-15) 16 16 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - // exp material( "hud_score_back" ); - // exp rect W( getTextWidth( locString( "@MENU_TIED_CAPS" ), STATUS_FONT, STATUS_TEXT_SCALE )+8 ); - // forecolor 1 1 0.3 0.2 - // visible when( IS_TIED ); - // decoration - //} - itemDef - { - type ITEM_TYPE_TEXT - rect STATUS_START_X STATUS_START_Y 1 1 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - text "@MENU_TIED_CAPS" - textfont STATUS_FONT - textscale STATUS_TEXT_SCALE - textalign ITEM_ALIGN_LEFT - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - forecolor NEW_FRAME_YELLOW_RGB 1 - visible when( IS_TIED ) - decoration - } - #define SHOW_GAMETYPE ( ((timeLeft() / 1000) % STATUS_TIME_MOD <= STATUS_TIME ) ) - itemDef - { - type ITEM_TYPE_TEXT - rect STATUS_START_X STATUS_START_Y 1 1 HORIZONTAL_ALIGN_USER_LEFT VERTICAL_ALIGN_USER_BOTTOM - exp text( toUpper( gameTypeName() ) ); - textfont STATUS_FONT - textscale STATUS_TEXT_SCALE - textalign ITEM_ALIGN_LEFT - textstyle ITEM_TEXTSTYLE_SHADOWEDMORE - forecolor SCORE_COLOR 1 - visible when( SHOW_GAMETYPE ) - decoration - } - } -} diff --git a/mods/patch_mp/ui_mp/main.menu b/mods/patch_mp/ui_mp/main.menu deleted file mode 100644 index ea6ec90..0000000 --- a/mods/patch_mp/ui_mp/main.menu +++ /dev/null @@ -1,830 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" - -#define BUTTON_BG_WIDTH 180 -#define BUTTON_BG_Y_START 5 - -#define CHOICE_X_START -258 -#define CHOICE_Y_START BUTTON_BG_Y_START + 35 - -#define CHOICE_GROUP "main" - -#define FLYOUT_NONE 0 -#define FLYOUT_LIVE 1 -#define FLYOUT_OPERATIONS 2 -#define FLYOUT_THEATER 3 - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/friendslist.inc" -#include "ui_mp/stats_info.inc" - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X BUTTON_BG_WIDTH -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL -#undef CHOICE_Y_SPACING -#define CHOICE_Y_SPACING CHOICE_SIZE_Y - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - -#define FLYOUT_BG_COLOR 0 0 0 0.3 - -{ - assetGlobalDef - { - fadeClamp 1.0 // sets the fadeup alpha - fadeCycle 1 // how often fade happens in milliseconds - fadeAmount 0.1 // amount to adjust alpha per cycle - } - - menuDef - { - name "main" - fullScreen 1 - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop MENU_MUSIC - style WINDOW_STYLE_EMPTY - onOpen - { - uiScript stopRefresh; - open main_text; - } - onClose - { - } - onESC - { - } - } - -#define RESET_GAMEMODE_DVARS \ - setdvar xblive_basictraining 0; \ - setdvar xblive_privatematch 0; \ - setdvar xblive_wagermatch 0; \ - setdvar xblive_theater 0; \ - setdvar xblive_rankedmatch 0; - - menuDef - { - name "main_text" - fullScreen 1 - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop MENU_MUSIC - style WINDOW_STYLE_EMPTY - onOpen - { - setdvar ui_version_show "0"; - setLocalVarBool ui_centerPopup 0; - setdvar ui_bg_image ""; - RESET_GAMEMODE_DVARS - } - onFocus - { - setDvar ui_flyoutHasFocus FLYOUT_NONE; - } - - - itemDef - { - style WINDOW_STYLE_SHADER - rect FULLSCREEN_WIDE - background "menu_mp_background_main2" - forecolor 1 1 1 1 - visible 1 - decoration - } - - // lower corner glows - itemDef - { - style WINDOW_STYLE_SHADER - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN; - background "menu_mp_background_glow" - forecolor 0.384 0.725 0.725 0 - exp forecolor a ( ((sin(milliseconds()/1500) + 1) * 0.25) + 0.25 ) - visible 1 - decoration - } - itemDef - { - style WINDOW_STYLE_SHADER - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN; - background "menu_mp_background_glow" - forecolor 0.384 0.725 0.725 0 - exp forecolor a ( ((sin(milliseconds()/480) + 1) * 0.25) + 0.25 ) - visible 1 - decoration - } - - #undef THINFOG_SCROLL_TIME - #define THINFOG_SCROLL_TIME 50000 - itemDef - { - style WINDOW_STYLE_SHADER - rect -107 0 1708 480 - exp rect X((-961) + ((float(milliseconds() % THINFOG_SCROLL_TIME) / THINFOG_SCROLL_TIME) * (854))) - background "animbg_fogscrollthin" - forecolor 1 1 1 0.5 - visible 1 - decoration - } - #include "ui/bg.inc" - - - // cod:bo logo -#define LOGO_X_OFFSET 45 -#define LOGO_Y_OFFSET 70 - -#define LOGO_WIDTH 228 -#define LOGO_HEIGHT 107 - itemDef - { - visible 1 - rect (-LOGO_WIDTH - LOGO_X_OFFSET) (-LOGO_HEIGHT - LOGO_Y_OFFSET) LOGO_WIDTH LOGO_HEIGHT HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM - forecolor 1 1 1 1 - style WINDOW_STYLE_SHADER - background "menu_mp_background_logo" - decoration - } - -#define RESET_GAME_MODES \ - setdvar systemlink "0"; \ - setdvar splitscreen "0"; \ - setdvar onlinegame "1"; \ - setdvar xblive_privatematch "0"; \ - setdvar xblive_rankedmatch "0"; \ - setdvar xblive_wagermatch "0"; \ - setdvar xblive_clanmatch "0"; \ - setdvar xblive_theater "0"; \ - setdvar xblive_basictraining "0"; - -#define SIGN_IN_CMD exec "xsigninlive"; - -#define SETUP_SIGNIN \ - if( IsSignedInToLive() == 0 ) \ - { \ - SIGN_IN_CMD \ - open error_netconnect_popmenu; \ - } \ - elseif( isDemonwareFetchingDone() == 1 ) \ - { \ - execnow "setclientbeingused"; \ - if( !getDStat( "CacLoadouts", "resetWarningDislayed" ) ) \ - { \ - open customclassesreset; \ - } \ - else \ - { \ - open live_flyout; \ - execnow readFileShare; \ - } \ - } \ - else \ - { \ - open popup_connectingtodwhandler; \ - } - - - // ----------------- BEGIN Scroller -------------------------- - #include "ui/scroller.inc" - // ----------------- END Scroller ---------------------------- - -CHOICE_MENU_TITLE_CENTER_ALIGN_VIS( "@MENU_MULTIPLAYER_CAPS", ITEM_ALIGN_TOP_RIGHT, dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) -CHOICE_MENU_TITLE_CENTER_ALIGN_VIS( "@MENU_PLAY_CAPS", ITEM_ALIGN_TOP_RIGHT, dvarInt( ui_flyoutHasFocus ) == FLYOUT_LIVE ) -CHOICE_MENU_TITLE_CENTER_ALIGN_VIS( "@MENU_OPERATIONS_CAPS", ITEM_ALIGN_TOP_RIGHT, dvarInt( ui_flyoutHasFocus ) == FLYOUT_OPERATIONS ) -CHOICE_MENU_TITLE_CENTER_ALIGN_VIS( "@MPUI_THEATER_LOBBY_CAPS", ITEM_ALIGN_TOP_RIGHT, dvarInt( ui_flyoutHasFocus ) == FLYOUT_THEATER ) - - // ----------------- BEGIN Message of the day ------------------------ - // size version 1: 248 126 - - //#define INFO_TEXT dvarString( "motd" ) - //#define INFO_TITLE "@MPUI_MOTD" - - //#define MP_MOTD 1 - - //#include "ui_mp/info_box.inc" - // ----------------- END Message of the day -------------------------- - - // Menu items ------------------------------------------- - - // highlight when flyout is open - PREPROC_SHADER_DRAW_VIS_EX( CHOICE_ORIGIN( 1 ) (CHOICE_SIZE_X + 1) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", FLYOUT_BG_COLOR, when( dvarInt( ui_flyoutHasFocus ) == FLYOUT_LIVE );, ; ) - TEMP_CHOICE_BUTTON_VIS( 1, "@MENU_PLAY_CAPS", - SETUP_SIGNIN, - IsSignedInToLive() && ( dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE || dvarInt( ui_flyoutHasFocus ) == FLYOUT_LIVE ) ) - TEMP_CHOICE_BUTTON_VIS_DISABLED( 1, "@MENU_PLAY_CAPS", - SETUP_SIGNIN, - !IsSignedInToLive() && ( dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE || dvarInt( ui_flyoutHasFocus ) == FLYOUT_LIVE ) ) - // Gray text when flyout is open - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 1 ), 0 0, "@MENU_PLAY_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, NO_BG_DISABLED_COLOR, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE && dvarInt( ui_flyoutHasFocus ) != FLYOUT_LIVE ); ) - - -#define SETUP_OPERATIONS_FLYOUT \ - if( IsSignedInToLive() == 0 ) \ - { \ - SIGN_IN_CMD \ - open error_netconnect_popmenu; \ - } \ - elseif( isDemonwareFetchingDone() == 1 ) \ - { \ - execnow "setclientbeingused"; \ - open operations_flyout; \ - execnow readFileShare; \ - } \ - else \ - { \ - open popup_connectingtodwhandler; \ - } - - // highlight when flyout is open - PREPROC_SHADER_DRAW_VIS_EX( CHOICE_ORIGIN( 2 ) CHOICE_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", FLYOUT_BG_COLOR, when( dvarInt( ui_flyoutHasFocus ) == FLYOUT_OPERATIONS );, ; ) - TEMP_CHOICE_BUTTON_VIS( 2, "@MENU_OPERATIONS_CAPS", - SETUP_OPERATIONS_FLYOUT, - ( dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE || dvarInt( ui_flyoutHasFocus ) == FLYOUT_OPERATIONS ) ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 2 ), 0 0, "@MENU_OPERATIONS_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, NO_BG_DISABLED_COLOR, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE && dvarInt( ui_flyoutHasFocus ) != FLYOUT_OPERATIONS ); ) - -#define SETUP_THEATER_FLYOUT \ - if( IsSignedInToLive() == 0 ) \ - { \ - SIGN_IN_CMD \ - open error_netconnect_popmenu; \ - } \ - elseif( isDemonwareFetchingDone() == 1 ) \ - { \ - execnow "setclientbeingused"; \ - open theater_flyout; \ - execnow readFileShare; \ - } \ - else \ - { \ - open popup_connectingtodwhandler; \ - } - - // highlight when flyout is open - PREPROC_SHADER_DRAW_VIS_EX( CHOICE_ORIGIN( 3 ) CHOICE_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, "white", FLYOUT_BG_COLOR, when( dvarInt( ui_flyoutHasFocus ) == FLYOUT_THEATER );, ; ) - TEMP_CHOICE_BUTTON_VIS( 3, "@MPUI_THEATER_LOBBY_CAPS", - SETUP_THEATER_FLYOUT, - ( dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE || dvarInt( ui_flyoutHasFocus ) == FLYOUT_THEATER ) ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 3 ), 0 0, "@MPUI_THEATER_LOBBY_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, NO_BG_DISABLED_COLOR, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE && dvarInt( ui_flyoutHasFocus ) != FLYOUT_THEATER ); ) - - TEMP_CHOICE_BUTTON_VIS( 4, "@MENU_SETTINGS_CAPS", - open options_new_pc, - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 4 ), 0 0, "@MENU_SETTINGS_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, NO_BG_DISABLED_COLOR, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - - /*TEMP_CHOICE_BUTTON_VIS( 5, "@MENU_STORE_CAPS", - uiscript openurl "www.callofduty.com/game", - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 5 ), 0 0, "@MENU_STORE_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, NO_BG_DISABLED_COLOR, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); )*/ - - TEMP_CHOICE_BUTTON_VIS( 5, "@MENU_MODS_CAPS", - open select_mod, - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 5 ), 0 0, "@MENU_MODS_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, NO_BG_DISABLED_COLOR, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - - TEMP_CHOICE_BUTTON_VIS( 6, "@MENU_MAIN_MENU_CAPS", - open single_popmenu, - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 6 ), 0 0, "@MENU_MAIN_MENU_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, NO_BG_DISABLED_COLOR, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - - TEMP_CHOICE_BUTTON_VIS( 7, "@MENU_QUIT_CAPS", - open quit_popmenu, - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 7 ), 0 0, "@MENU_QUIT_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, NO_BG_DISABLED_COLOR, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - - FRIENDS_BUTTON - } - - #define FADE_STATE( isLast, colorArg, menuName, nextName ) \ - state \ - { \ - name "FadeIn" \ - forecolor colorArg \ - \ - onEnter \ - { \ - execNow if( isLast != 1 ) ui_animate menuName nextName FadeIn (FLYOUT_TIME/FLYOUT_BUTTON_COUNT); \ - execNow if( isLast == 1 ) set ui_flownOut 1; \ - } \ - } - - #define FLYOUT_ARGS( isLast, menuName, colorArg, myName, nextName ) \ - name myName \ - FADE_STATE( isLast, colorArg, menuName, nextName ) - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_TOP - -#undef CHOICE_TEXTALIGN -#define CHOICE_TEXTALIGN ITEM_ALIGN_MIDDLE_LEFT - -#undef CHOICE_GROUP -#define CHOICE_GROUP "flyout" - -#define FLYOUT_TIME 200 -#define FLYOUT_BG_X_START ( -258 + BUTTON_BG_WIDTH + 1 ) -#define FLYOUT_BG_WIDTH 180 - -#undef CHOICE_X_START -#define CHOICE_X_START FLYOUT_BG_X_START - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X FLYOUT_BG_WIDTH - -#undef CHOICE_FOCUS_SOUND -#define CHOICE_FOCUS_SOUND "uin_navigation_submenu_over" - -#undef FLYOUT_BUTTON_COUNT -#define FLYOUT_BUTTON_COUNT 5 -#undef FLYOUT_FIRST_CHOICE_Y -#define FLYOUT_FIRST_CHOICE_Y 1 - -#define SETUP_ACTION_LOBBY \ - execNow "exec "XBOXLIVE_MP_CFG; - -menuDef - { - name live_flyout - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop MENU_MUSIC - control MENU_CONTROL_NO_GUESTS - - onOpen - { - execNow ui_animate live_flyout ButtonBackground Fly FLYOUT_TIME; - execNow ui_animate live_flyout FirstFlyout FadeIn (FLYOUT_TIME/FLYOUT_BUTTON_COUNT); - execNow set ui_flownOut 0; - setDvar ui_flyoutHasFocus FLYOUT_LIVE; - } - onESC { close self; } - onClose - { - execNow ui_animate live_flyout ButtonBackground Default 0; - execNow ui_animate live_flyout FirstFlyout Default 0; - execNow ui_animate live_flyout SecondFlyout Default 0; - execNow ui_animate live_flyout ThirdFlyout Default 0; - execNow ui_animate live_flyout FourthFlyout Default 0; - execNow ui_animate live_flyout FifthFlyout Default 0; - execNow set ui_flownOut 0; - setDvar ui_flyoutHasFocus FLYOUT_NONE; - } - - /* exit flyout button */ - itemDef - { - name "ExitFlyoutButton" - type ITEM_TYPE_BUTTON - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - visible 1 - action { close self; } - } - - /* button background */ - itemDef - { - name "ButtonBackground" - style WINDOW_STYLE_SHADER - rect FLYOUT_BG_X_START CHOICE_Y( FLYOUT_FIRST_CHOICE_Y ) FLYOUT_BG_WIDTH CHOICE_Y_SPACING CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_TOP - forecolor FLYOUT_BG_COLOR - background "white" - visible 1 - decoration - - state - { - name "Fly" - rect FLYOUT_BG_X_START CHOICE_Y( FLYOUT_FIRST_CHOICE_Y ) FLYOUT_BG_WIDTH ( CHOICE_Y_SPACING * FLYOUT_BUTTON_COUNT ) CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_TOP - } - } - - HINT_TEXT_ALL( (FLYOUT_BUTTON_COUNT + 1), (FLYOUT_BG_X_START + 10), 5, (FLYOUT_BG_WIDTH - 20), (dvarString( ui_lobby_desc )), 1 1 1 1, ( dvarInt( ui_flownOut ) == 1 ), ; ) - - #define SETUP_ACTION_SERVER_BROWSER \ - RESET_GAME_MODES \ - SETUP_ACTION_LOBBY \ - close self; \ - open server_browser_main; - - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( FLYOUT_FIRST_CHOICE_Y, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 ) - TEMP_CHOICE_BUTTON_ALL( FLYOUT_FIRST_CHOICE_Y, "@MENU_SERVER_BROWSER_CAPS", - SETUP_ACTION_SERVER_BROWSER, - setDvar ui_lobby_desc "@MENU_SERVER_BROWSER_DESC";, - CLEARUIHINT, - 1 1 1 0, - dvarBool(ui_ethernetLinkActive), - FLYOUT_ARGS( 0, live_flyout, TEXT_COLOR_NO_HL, FirstFlyout, SecondFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( FLYOUT_FIRST_CHOICE_Y, "@MENU_SERVER_BROWSER_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 ) - - #define SETUP_ACTION_RANKEDMATCH \ - RESET_GAME_MODES \ - SETUP_ACTION_LOBBY \ - close self; \ - exec "quickmatch"; - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( 2, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 ) - TEMP_CHOICE_BUTTON_ALL( 2, "@MENU_RANKED_MATCH_CAPS", - SETUP_ACTION_RANKEDMATCH, - setDvar ui_lobby_desc "@MENU_RANKED_MATCH_DESC";, - CLEARUIHINT, - 1 1 1 0, - dvarBool(ui_ethernetLinkActive), - FLYOUT_ARGS( 0, live_flyout, TEXT_COLOR_NO_HL, SecondFlyout, ThirdFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 2, "@MENU_RANKED_MATCH_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 ) - - - #define SETUP_ACTION_WAGERMATCH \ - RESET_GAME_MODES \ - setDvar xblive_wagermatch "1"; \ - SETUP_ACTION_LOBBY \ - close self; \ - exec "wagermatch"; - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( 3, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 ) - TEMP_CHOICE_BUTTON_ALL( 3, "@MPUI_WAGER_MATCH_CAPS", - SETUP_ACTION_WAGERMATCH, - setDvar ui_lobby_desc "@MPUI_WAGER_MATCH_DESC";, - CLEARUIHINT, - 1 1 1 0, - dvarBool(ui_ethernetLinkActive) && dvarBool(ui_mpWagerMatchEnabled), - FLYOUT_ARGS( 0, live_flyout, TEXT_COLOR_NO_HL, ThirdFlyout, FourthFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 3, "@MPUI_WAGER_MATCH_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 && dvarBool(ui_mpWagerMatchEnabled) ) - - - #define SETUP_ACTION_BASIC_TRAINING \ - RESET_GAME_MODES \ - setDvar onlinegame "1"; \ - setDvar xblive_basictraining "1"; \ - SETUP_ACTION_LOBBY \ - execNow "exec dvar_defaults.cfg"; \ - setDvar ui_mapname "mp_mountain"; \ - setDvar ui_gametype "tdm"; \ - close self; \ - open menu_xboxlive_basictraining; - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( 4, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 ) - TEMP_CHOICE_BUTTON_ALL( 4, "@MPUI_BASICTRAINING_CAPS", - SETUP_ACTION_BASIC_TRAINING, - setDvar ui_lobby_desc "@MPUI_BASICTRAINING_DESC";, - CLEARUIHINT, - 1 1 1 0, - dvarBool(ui_ethernetLinkActive), - FLYOUT_ARGS( 0, live_flyout, TEXT_COLOR_NO_HL, FourthFlyout, FifthFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 4, "@MPUI_BASICTRAINING_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 ) - - #define SETUP_ACTION_PRIVATEMATCH \ - RESET_GAME_MODES \ - setDvar onlinegame "1"; \ - setDvar xblive_privatematch "1"; \ - SETUP_ACTION_LOBBY \ - setDvar ui_mapname "mp_mountain"; \ - setDvar ui_gametype "tdm"; \ - close self; \ - open menu_xboxlive_privatelobby; - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( 5, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 ) - TEMP_CHOICE_BUTTON_ALL( 5, "@MPUI_CUSTOM_MATCH_CAPS", - SETUP_ACTION_PRIVATEMATCH, - setDvar ui_lobby_desc "@MPUI_CUSTOM_MATCH_DESC";, - CLEARUIHINT, - 1 1 1 0, - dvarBool(ui_ethernetLinkActive), - FLYOUT_ARGS( 1, live_flyout, TEXT_COLOR_NO_HL, FifthFlyout, NoFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 5, "@MPUI_CUSTOM_MATCH_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 ) - -} // live_flyout - -#undef FLYOUT_BUTTON_COUNT -#define FLYOUT_BUTTON_COUNT 4 - -#undef FLYOUT_FIRST_CHOICE_Y -#define FLYOUT_FIRST_CHOICE_Y 2 -menuDef - { - name operations_flyout - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop MENU_MUSIC - control MENU_CONTROL_NO_GUESTS - - onOpen - { - execNow ui_animate operations_flyout ButtonBackground Fly FLYOUT_TIME; - execNow ui_animate operations_flyout FirstFlyout FadeIn (FLYOUT_TIME/FLYOUT_BUTTON_COUNT); - execNow set ui_flownOut 0; - setDvar ui_flyoutHasFocus FLYOUT_OPERATIONS; - } - onESC { close self; } - onClose - { - execNow ui_animate operations_flyout ButtonBackground Default 0; - execNow ui_animate operations_flyout FirstFlyout Default 0; - execNow ui_animate operations_flyout SecondFlyout Default 0; - execNow ui_animate operations_flyout ThirdFlyout Default 0; - execNow ui_animate operations_flyout FourthFlyout Default 0; - execNow set ui_flownOut 0; - setDvar ui_flyoutHasFocus FLYOUT_NONE; - } - - /* exit flyout button */ - itemDef - { - name "ExitFlyoutButton" - type ITEM_TYPE_BUTTON - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - visible 1 - action { close self; } - } - - /* button background */ - itemDef - { - name "ButtonBackground" - style WINDOW_STYLE_SHADER - rect FLYOUT_BG_X_START CHOICE_Y( FLYOUT_FIRST_CHOICE_Y ) FLYOUT_BG_WIDTH CHOICE_Y_SPACING CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_TOP - forecolor FLYOUT_BG_COLOR - background "white" - visible 1 - decoration - - state - { - name "Fly" - rect FLYOUT_BG_X_START CHOICE_Y( FLYOUT_FIRST_CHOICE_Y ) FLYOUT_BG_WIDTH ( CHOICE_Y_SPACING * FLYOUT_BUTTON_COUNT ) CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_TOP - } - } - - HINT_TEXT_ALL( (FLYOUT_BUTTON_COUNT + FLYOUT_FIRST_CHOICE_Y), (FLYOUT_BG_X_START + 10), 5, (FLYOUT_BG_WIDTH - 20), (dvarString( ui_lobby_desc )), 1 1 1 1, ( dvarInt( ui_flownOut ) == 1 ), ; ) - - #define SETUP_ACTION_CREATEACLASS \ - close self; \ - if ( IsSignedInToLive() && areStatsFetched() && !IsGuest() ) \ - { \ - exec "set ui_cac_ingame 0"; \ - setdvar invite_visible "0"; \ - open cac_main; \ - } - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( FLYOUT_FIRST_CHOICE_Y, BG_HL_COLOR, FLYOUT_BG_WIDTH, ( dvarInt( ui_flownOut ) == 1 && !IS_ITEM_LOCKED( "FEATURE_CREATE_A_CLASS" ) ) ) - TEMP_CHOICE_BUTTON_ALL( FLYOUT_FIRST_CHOICE_Y, "@MPUI_CREATE_A_CLASS_CAPS", - SETUP_ACTION_CREATEACLASS, - setDvar ui_lobby_desc "@MPUI_CAC_DESC";, - CLEARUIHINT, - 1 1 1 0, - !IS_ITEM_LOCKED( "FEATURE_CREATE_A_CLASS" ), - FLYOUT_ARGS( 0, operations_flyout, TEXT_COLOR_NO_HL, FirstFlyout, SecondFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( FLYOUT_FIRST_CHOICE_Y, "@MPUI_CREATE_A_CLASS_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 && !IS_ITEM_LOCKED( "FEATURE_CREATE_A_CLASS" ) ) - TEMP_CHOICE_BUTTON_ALL( FLYOUT_FIRST_CHOICE_Y, "@MPUI_CREATE_A_CLASS_CAPS", - /*NO-OP*/;, - exec set ui_lobby_desc GET_UNLOCK_LEVEL_STRING( FEATURE_CREATE_A_CLASS );, - CLEARUIHINT, - 1 1 1 0, - IS_ITEM_LOCKED( "FEATURE_CREATE_A_CLASS" ), - FLYOUT_ARGS( 0, operations_flyout, NO_BG_DISABLED_COLOR, FirstFlyout, SecondFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( FLYOUT_FIRST_CHOICE_Y, "@MPUI_CREATE_A_CLASS_CAPS", NO_BG_DISABLED_COLOR, dvarInt( ui_flownOut ) == 1 && IS_ITEM_LOCKED( "FEATURE_CREATE_A_CLASS" ) ) - CHOICE_LOCKEDICON_VIS( FLYOUT_FIRST_CHOICE_Y, "menu_mp_lobby_locked", when( dvarInt( ui_flownOut ) == 1 && IS_ITEM_LOCKED( "FEATURE_CREATE_A_CLASS" ) ) ) - - #define SETUP_ACTION_CONTRACTS \ - close self; \ - if ( IsSignedInToLive() && areStatsFetched() && !IsGuest() ) \ - { \ - open menu_xboxlive_contracts; \ - } - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( 3, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 && !IS_ITEM_LOCKED( FEATURE_CONTRACTS ) ) - TEMP_CHOICE_BUTTON_ALL( 3, "@MENU_CONTRACTS_CAPS", - SETUP_ACTION_CONTRACTS, - exec set ui_lobby_desc "@MPUI_CONTRACTS_DESC";, - CLEARUIHINT, - 1 1 1 0, - !IS_ITEM_LOCKED( FEATURE_CONTRACTS ), - FLYOUT_ARGS( 0, operations_flyout, TEXT_COLOR_NO_HL, SecondFlyout, ThirdFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 3, "@MENU_CONTRACTS_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 && !IS_ITEM_LOCKED( FEATURE_CONTRACTS ) ) - TEMP_CHOICE_BUTTON_ALL( 3, "@MENU_CONTRACTS_CAPS", - /*NO-OP*/;, - exec set ui_lobby_desc GET_UNLOCK_LEVEL_STRING( FEATURE_CONTRACTS );, - CLEARUIHINT, - 1 1 1 0, - IS_ITEM_LOCKED( FEATURE_CONTRACTS ), - FLYOUT_ARGS( 1, operations_flyout, NO_BG_DISABLED_COLOR, SecondFlyout, ThirdFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 3, "@MENU_CONTRACTS_CAPS", NO_BG_DISABLED_COLOR, dvarInt( ui_flownOut ) == 1 && IS_ITEM_LOCKED( FEATURE_CONTRACTS ) ) - CHOICE_LOCKEDICON_VIS( 3, "menu_mp_lobby_locked", when( dvarInt( ui_flownOut ) == 1 && IS_ITEM_LOCKED( FEATURE_CONTRACTS ) ) ) - - #define SETUP_ACTION_KILLSTREAKS \ - close self; \ - if ( IsSignedInToLive() && areStatsFetched() && !IsGuest() ) \ - { \ - open menu_xboxlive_killstreaks; \ - } - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( 4, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 && !IS_ITEM_LOCKED( FEATURE_KILLSTREAKS ) ) - TEMP_CHOICE_BUTTON_ALL( 4, "@MENU_KILLSTREAKS_CAPS", - SETUP_ACTION_KILLSTREAKS, - exec set ui_lobby_desc "@MPUI_KILLSTREAKS_DESC";, - CLEARUIHINT, - 1 1 1 0, - !IS_ITEM_LOCKED( FEATURE_KILLSTREAKS ), - FLYOUT_ARGS( 0, operations_flyout, TEXT_COLOR_NO_HL, ThirdFlyout, FourthFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 4, "@MENU_KILLSTREAKS_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 && !IS_ITEM_LOCKED( FEATURE_KILLSTREAKS ) ) - TEMP_CHOICE_BUTTON_ALL( 4, "@MENU_KILLSTREAKS_CAPS", - /*NO-OP*/;, - exec set ui_lobby_desc GET_UNLOCK_LEVEL_STRING( FEATURE_KILLSTREAKS );, - CLEARUIHINT, - 1 1 1 0, - IS_ITEM_LOCKED( FEATURE_KILLSTREAKS ), - FLYOUT_ARGS( 1, operations_flyout, NO_BG_DISABLED_COLOR, ThirdFlyout, FourthFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 4, "@MENU_KILLSTREAKS_CAPS", NO_BG_DISABLED_COLOR, dvarInt( ui_flownOut ) == 1 && IS_ITEM_LOCKED( FEATURE_KILLSTREAKS ) ) - CHOICE_LOCKEDICON_VIS( 4, "menu_mp_lobby_locked", when( dvarInt( ui_flownOut ) == 1 && IS_ITEM_LOCKED( FEATURE_KILLSTREAKS ) ) ) - - // #define SETUP_ACTION_PLAYERCARD \ defined in ui_mp\friendslist.inc - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( 5, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 ) - TEMP_CHOICE_BUTTON_ALL( 5, "@MENU_PLAYERCARD_CAPS", - close self; SETUP_ACTION_PLAYERCARD, - exec set ui_lobby_desc "@MPUI_PLAYERCARD_DESC";, - CLEARUIHINT, - 1 1 1 0, - 1, - FLYOUT_ARGS( 0, operations_flyout, TEXT_COLOR_NO_HL, FourthFlyout, NoFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 5, "@MENU_PLAYERCARD_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 ) - -} // operations_flyout - -#undef FLYOUT_BUTTON_COUNT -#define FLYOUT_BUTTON_COUNT 3 - -#undef FLYOUT_FIRST_CHOICE_Y -#define FLYOUT_FIRST_CHOICE_Y 3 -menuDef - { - name theater_flyout - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop MENU_MUSIC - control MENU_CONTROL_NO_GUESTS - - onOpen - { - execNow ui_animate theater_flyout ButtonBackground Fly FLYOUT_TIME; - execNow ui_animate theater_flyout FirstFlyout FadeIn (FLYOUT_TIME/FLYOUT_BUTTON_COUNT); - execNow set ui_flownOut 0; - setDvar ui_flyoutHasFocus FLYOUT_THEATER; - } - onESC { close self; } - onClose - { - execNow ui_animate theater_flyout ButtonBackground Default 0; - execNow ui_animate theater_flyout FirstFlyout Default 0; - execNow ui_animate theater_flyout SecondFlyout Default 0; - execNow ui_animate theater_flyout ThirdFlyout Default 0; - execNow set ui_flownOut 0; - setDvar ui_flyoutHasFocus FLYOUT_NONE; - } - - /* exit flyout button */ - itemDef - { - name "ExitFlyoutButton" - type ITEM_TYPE_BUTTON - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - visible 1 - action { close self; } - } - - /* button background */ - itemDef - { - name "ButtonBackground" - style WINDOW_STYLE_SHADER - rect FLYOUT_BG_X_START CHOICE_Y( FLYOUT_FIRST_CHOICE_Y ) FLYOUT_BG_WIDTH CHOICE_Y_SPACING CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_TOP - forecolor FLYOUT_BG_COLOR - background "white" - visible 1 - decoration - - state - { - name "Fly" - rect FLYOUT_BG_X_START CHOICE_Y( FLYOUT_FIRST_CHOICE_Y ) FLYOUT_BG_WIDTH ( CHOICE_Y_SPACING * FLYOUT_BUTTON_COUNT ) CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_TOP - } - } - - HINT_TEXT_ALL( (FLYOUT_BUTTON_COUNT + FLYOUT_FIRST_CHOICE_Y), (FLYOUT_BG_X_START + 10), 5, (FLYOUT_BG_WIDTH - 20), (dvarString( ui_lobby_desc )), 1 1 1 1, ( dvarInt( ui_flownOut ) == 1 ), ; ) - - #define SETUP_ACTION_FILESHARE \ - setdvar ui_theater_shortcut_pc 1; \ - close self; \ - open menu_fileshare_myshare; - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( FLYOUT_FIRST_CHOICE_Y, BG_HL_COLOR, FLYOUT_BG_WIDTH, ( dvarInt( ui_flownOut ) == 1 ) ) - TEMP_CHOICE_BUTTON_ALL( FLYOUT_FIRST_CHOICE_Y, "@MENU_FILESHARE_MYSHARE_CAPS", - SETUP_ACTION_FILESHARE, - setDvar ui_lobby_desc "@MPUI_FILE_SHARE_DESC";, - CLEARUIHINT, - 1 1 1 0, - 1, - FLYOUT_ARGS( 0, theater_flyout, TEXT_COLOR_NO_HL, FirstFlyout, SecondFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( FLYOUT_FIRST_CHOICE_Y, "@MENU_FILESHARE_MYSHARE_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 ) - - - #define SETUP_ACTION_RECENTGAMES \ - setdvar ui_theater_shortcut_pc 1; \ - close self; \ - open menu_fileshare_myrecentgames; - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( 4, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 ) - TEMP_CHOICE_BUTTON_ALL( 4, "@MENU_FILESHARE_MYRECENTGAMES_CAPS", - SETUP_ACTION_RECENTGAMES, - exec set ui_lobby_desc "@MPUI_MY_RECENT_GAMES_DESC";, - CLEARUIHINT, - 1 1 1 0, - 1, - FLYOUT_ARGS( 0, theater_flyout, TEXT_COLOR_NO_HL, SecondFlyout, ThirdFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 4, "@MENU_FILESHARE_MYRECENTGAMES_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 ) - - #define SETUP_ACTION_COMMUNITY \ - if ( canShowContentFromUser( 0 ) ) \ - { \ - setdvar ui_theater_shortcut_pc 1; \ - close self; \ - open menu_fileshare_community; \ - } \ - else \ - { \ - open menu_community_viewwarning; \ - } - - TEMP_CHOICE_HIGHLIGHT_SOLID_WIDTH( 5, BG_HL_COLOR, FLYOUT_BG_WIDTH, dvarInt( ui_flownOut ) == 1 ) - TEMP_CHOICE_BUTTON_ALL( 5, "@MENU_FILESHARE_COMMUNITY_CAPS", - SETUP_ACTION_COMMUNITY, - exec set ui_lobby_desc "@MPUI_COMMUNITY_DESC";, - CLEARUIHINT, - 1 1 1 0, - 1, - FLYOUT_ARGS( 1, theater_flyout, TEXT_COLOR_NO_HL, ThirdFlyout, NoFlyout ) ) - TEMP_CHOICE_BUTTON_HIGHLIGHT_TEXT( 5, "@MENU_FILESHARE_COMMUNITY_CAPS", TEXT_COLOR_HL, dvarInt( ui_flownOut ) == 1 ) - -} // theater_flyout - - #include "ui_mp/popupstyle.inc" - #include "ui/choices_setup_popmenu.menu" - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 1 - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( customclassesreset, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MENU_NOTICE", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_RESETCUSTOMCLASSES", 1 ) - - #define LOCAL_ACCEPT_RESET_CAC \ - execnow statWriteDDL cacloadouts resetWarningDislayed 1; \ - execnow uploadstats; \ - play CHOICE_FOCUS_SOUND; \ - close customclassesreset; \ - open live_flyout; - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_OK", LOCAL_ACCEPT_RESET_CAC, 1, ; ) - } - - // ====================== single player confirmation ========================= -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 1 - menuDef - { - SYSTEM_POPUP_SETUP_VIS( error_netconnect_popmenu, ;, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MENU_NOTICE", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@XBOXLIVE_NETCONNECTION", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_EXIT", close self;, 1, ; ) - } - - #define SETUP_SINGLE_PLAYER \ - execnow "set ui_skipMainLockout 0"; \ - setdvar ui_changed_exe 1; \ - exec "wait;wait;wait"; \ - uiScript startSingleplayer; - - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 2 - menuDef - { - SYSTEM_POPUP_SETUP_VIS( single_popmenu, setFocus single_popmenu_2, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MENU_SWITCH_TO_SOLO_COOP_MENU", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_YES", SETUP_SINGLE_PLAYER, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_NO", close self, 1, name single_popmenu_2 ) - } -} diff --git a/mods/patch_mp/ui_mp/mods.menu b/mods/patch_mp/ui_mp/mods.menu deleted file mode 100644 index c7845cf..0000000 --- a/mods/patch_mp/ui_mp/mods.menu +++ /dev/null @@ -1,162 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" - -#define CHOICE_GROUP "mods" - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui/framestyle.inc" -#include "ui/frame.inc" - -#define MOD_NAME_X 40 -#define MOD_NAME_Y ( FRAME_CHOICE_Y_START - 7 ) -#define MOD_NAME_HEIGHT 30 -#define MOD_NAME_SIZE MOD_IMAGE_WIDTH MOD_NAME_HEIGHT - -#define MOD_IMAGE_X MOD_NAME_X -#define MOD_IMAGE_Y (MOD_NAME_Y + MOD_NAME_HEIGHT + 15) -#define MOD_IMAGE_ASPECT_RATIO 1.0 -#define MOD_IMAGE_WIDTH 180 -#define MOD_IMAGE_HEIGHT (MOD_IMAGE_WIDTH * MOD_IMAGE_ASPECT_RATIO) -#define MOD_IMAGE_SIZE MOD_IMAGE_WIDTH MOD_IMAGE_HEIGHT - -#define MOD_DESC_X MOD_NAME_X -#define MOD_DESC_Y (MOD_IMAGE_Y + MOD_IMAGE_HEIGHT + 15) -#define MOD_DESC_SIZE MOD_IMAGE_WIDTH 60 - -#undef DEFAULT_SLIDE_IN_SPEED -#define DEFAULT_SLIDE_IN_SPEED 180 - -#undef DEFAULT_SLIDE_OUT_SPEED -#define DEFAULT_SLIDE_OUT_SPEED 180 - -#undef ON_ESC -#define ON_ESC \ - deactivateBlur; \ - play uin_navigation_menu_lg_close; \ - close self; - -#define MOD_DESC_DISPLAY( titleText, imageMat, descText, visArg ) \ - PREPROC_TEXT_DRAW_ALL( MOD_NAME_X MOD_NAME_Y MOD_NAME_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, \ - titleText, \ - TEXTSIZE_TITLE, 0, 0, ITEM_ALIGN_TOP_CENTER, 1 1 1 1, UI_FONT_EXTRABIG, ITEM_TEXTSTYLE_NORMAL, \ - when( visArg );, ; ) \ - PREPROC_SHADER_DRAW_VIS_EX( MOD_IMAGE_X MOD_IMAGE_Y MOD_IMAGE_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, \ - imageMat, 1 1 1 1, \ - when( visArg );, \ - ; ) \ - PREPROC_TEXT_DRAW_VIS_EX( MOD_DESC_X MOD_DESC_Y MOD_DESC_SIZE HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, \ - descText, \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_CENTER, 1 1 1 1, \ - when( visArg );, autowrapped ) - -menuDef -{ - name select_mod - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - - onOpen - { - activateBlur; - play uin_navigation_menu_lg_open; - setdvar invite_visible "0"; - setFocus mod_selection; - } - onFocus { } - onClose - { - deactivateBlur; - setdvar invite_visible "1"; - } - onESC - { - ON_ESC - } - - FRAME_DEFAULT - - FRAME_TITLE_DEFAULT( "@MENU_MODS_CAPS", 1 ) - FRAME_SUBTITLE_DEFAULT( "^3" + (locString( "@MENU_MODS_LOADED_CAPS" ) + dvarString( fs_game ) ) + "^7", when(dvarString( fs_game ) != "") ) - - #define MOD_IMAGE "playlist_custom" - #define MOD_NAME dvarString( ui_mod_name ) - #define MOD_DESC dvarString( ui_mod_desc ) - - MOD_DESC_DISPLAY( MOD_NAME, MOD_IMAGE, MOD_DESC, 1 ) - - // gametype selection =========================================== - itemDef - { - name mod_selection - type ITEM_TYPE_LISTBOX - feeder FEEDER_MODS - rect (FRAME_CHOICE_X_START-1) ( FRAME_CHOICE_Y_START - 3 ) (FRAME_BUTTON_WIDTH+18) 308 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - elementwidth 30 - elementheight 19 - noBlinkingHighlight - textfont CHOICE_TEXTFONT - textscale CHOICE_TEXTSIZE - forecolor CHOICE_TEXTCOLOR - focusColor COLOR_TITLE - disablecolor FRAME_GREY_RGB 1 - textstyle ITEM_TEXTSTYLE_NORMAL - modal - usePaging - visible 1 - // x y w h len horzAlign vertAlign - userarea 2 0 0 (FRAME_BUTTON_WIDTH+1) 19 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* BACKGROUND */ - 17 0 FRAME_BUTTON_WIDTH 19 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* NAME */ - - onfocus { play CHOICE_FOCUS_SOUND; } - onListboxSelectionChange - { - play CHOICE_FOCUS_SOUND; - execnow set ui_mod_name ( getmodinfo( "modName" ) ); - execnow set ui_mod_desc ( getmodinfo( "modDescr" ) ); - } - doubleclick - { - play CHOICE_ACTION_SOUND; - open load_mod_confirm_popmenu - } - } - - #undef BUTTON_SPACING - #define BUTTON_SPACING 20 - #define RESET_BUTTON_OFFSET ( getTextWidth( locString( "@PLATFORM_BACK" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) + 8 + BUTTON_SPACING ) - -#ifdef PC - FRAME_BACK_BUTTON_DEFAULT_ACTION( ON_ESC ) -#else //#ifdef PC - FRAME_BACK_BUTTON_DEFAULT -#endif //#ifdef PC - - #include "ui/safearea.menu" -} - -// POPUPS -#include "ui_mp/popupstyle.inc" -#include "ui/choices_setup_popmenu.menu" - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 2 - -{ - menuDef - { - SYSTEM_POPUP_SETUP_VIS( load_mod_confirm_popmenu, setFocus loadmod_confirm_popmenu2, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MENU_MOD_CONFIRM", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( dvarString( "ui_mod_name" ), 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_YES", close self; uiScript RunMod;, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_NO", close self, 1, name loadmod_confirm_popmenu_2 ) - } -} \ No newline at end of file diff --git a/mods/patch_mp/ui_mp/options_multi.menu b/mods/patch_mp/ui_mp/options_multi.menu deleted file mode 100644 index 06e43b5..0000000 --- a/mods/patch_mp/ui_mp/options_multi.menu +++ /dev/null @@ -1,701 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#define OPTIONS_STYLE 1 -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui/framestyle.inc" -#include "ui/frame.inc" - -#undef CHOICE_BUTTON_NAME -#define CHOICE_BUTTON_NAME "options_multi_" -#undef MENUDEF_NAME -#define MENUDEF_NAME options_multi - -#undef OPTIONS_MULTI_HEIGHT -#undef OPTIONS_MULTI_WIDTH -#define OPTIONS_MULTI_HEIGHT 332 -#define OPTIONS_MULTI_WIDTH OPTIONS_MULTI_HEIGHT * FRAME_ASPECT_RATIO - -{ - menuDef - { - name "options_multi" - fullScreen 0 - rect 0 0 640 480 - focusColor COLOR_FOCUSED - soundloop "" - - onOpen - { - exec "setfromdvar ui_name name"; - - LOCAL_CLOSE_ALL_BUT( options_multi ) - - setLocalVarBool ui_hideBack 1; - - if (IsInGame()) - { - showMenu "pausedbkgnd"; - } - else - { - activateBlur; - } - } - onClose - { - if (IsInGame()) - { - hideMenu "pausedbkgnd"; - } - else - { - deactivateBlur; - } - - setLocalVarBool ui_hideBack 0; - exec "setfromdvar name ui_name"; - uiScript "updateClanInProfile" - } - - onESC - { - close self; - open options_new_pc; - } - PC_TAB_SWITCH_ACTIONS( options_new_pc, options_controls_new_pc, options_controls_new_pc ) - - #include "ui_mp/leftside_options.inc" - -#undef CHOICE_X_START -#undef CHOICE_Y_START -#undef CHOICE_HORIZONTAL_ALIGN -#undef CHOICE_VERTICAL_ALIGN -#undef CHOICE_DVAR_EXTRA_WIDTH -#undef CHOICE_TEXT_OFFSET_X - -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER -#define CHOICE_X_START ((-OPTIONS_MULTI_WIDTH/2) - 75) -#define CHOICE_Y_START ((-OPTIONS_MULTI_HEIGHT/2) + 32) -#define CHOICE_DVAR_EXTRA_WIDTH 120 -#define CHOICE_TEXT_OFFSET_X -10 - -#undef CHOICE_TEXTSTYLE -#undef CHOICE_TEXTSIZE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL -#define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT - -#undef CHOICE_TEXT_COLOR_NO_HL -#undef CHOICE_TEXT_COLOR_HL -#undef CHOICE_CAPTION_TEXT_COLOR_NO_HL -#undef CHOICE_CAPTION_TEXT_COLOR_HL - -#define CHOICE_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_TEXT_COLOR_HL 1 1 1 1 -#define CHOICE_CAPTION_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_CAPTION_TEXT_COLOR_HL 0 0 0 1 - - FRAME_CHOICE_SECTION_TITLE_VIS( 21, "@MENU_MULTIPLAYER_CAPS", ( dvarint( ui_multiplayer ) ) ) - FRAME_CHOICE_SECTION_TITLE_VIS( 21, "@MENU_COOPERATIVE_OPTIONS_CAPS", ( !dvarint( ui_multiplayer ) ) ) - - FRAME_CHOICE_DVARFLOATLIST_VIS( 22, "@MENU_TEAM_INDICATOR_CAPS", team_indicator, { "@MENU_INDICATOR_FULL_CAPS" 0 "@MENU_INDICATOR_ABBREVIATED_CAPS" 1 "@MENU_INDICATOR_ICON_CAPS" 2 "@MENU_INDICATOR_ALTERNATE_CAPS" 3 }, ;, 1 ) - FRAME_CHOICE_DVARYESNO_VIS( 23, "@MENU_ALLOW_DOWNLOAD_CAPS", cl_allowdownload, ;,( dvarint( ui_multiplayer ) ) ) - FRAME_CHOICE_DVARYESNO_VIS( 24, "@PATCH_OPTIONS_COLOR_FRIENDS_CAPS", cg_drawFriendInColor, ;,( dvarint( ui_multiplayer ) ) ) - FRAME_CHOICE_DVARYESNO_VIS( 25, "@PLATFORM_OPTIONS_RESTRICT_EMBLEMS_CAPS", live_restrictEmblems, ;,( dvarint( ui_multiplayer ) ) ) - - //FRAME_CHOICE_SEPARATOR( CHOICE_SEP_1 ) - - } -} - - -/* -{ -menuDef -{ - name options_multi - fullScreen 0 - rect 0 0 370 480 // Size and position of the menu - focusColor COLOR_FOCUSED // Menu focus color for text and items - soundloop "" - onOpen - { - exec "setfromdvar ui_name name" - setdvar ui_background_gradient_show "1"; - } - onClose - { - exec "setfromdvar name ui_name" - } - onESC - { - close options_multi; - } - itemDef - { - type ITEM_TYPE_TEXT - origin ORIGIN_TITLE - forecolor 1 1 1 1 - text "@MENU_MULTIPLAYER" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_TITLE - visible 1 - decoration - } - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_VOICE_CHAT_BUTTON" - rect 0 0 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_VOTE_YES" - rect 0 15 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_VOTE_NO" - rect 0 30 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_CHAT" - rect 0 45 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_TEAM_CHAT" - rect 0 60 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_QUICK_CHAT" - rect 0 75 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_ALLOW_DOWNLOAD" - rect 0 90 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_DRAW_HUD" - rect 0 105 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_CONNECTION" - rect 0 120 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MENU_WEAPON_MENU" - rect 0 135 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - } - - itemDef - { - name player_name - type ITEM_TYPE_BUTTON - text "@MENU_PLAYER_NAME" - rect 0 150 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - - } - - - itemDef - { - name misc - type ITEM_TYPE_BUTTON - text "@MPUI_PUNKBUSTER" - rect 0 165 1 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - decoration - - } - - - itemDef - { - name misc - type ITEM_TYPE_BIND - text " " - dvar "+talk" - rect 0 0 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - mouseEnter - { - play "mouse_over"; - show keyBindStatus - } - mouseexit { hide keyBindStatus } - action { play CHOICE_ACTION_SOUND; } - } - - itemDef - { - name misc - type ITEM_TYPE_BIND - text " " - dvar "vote yes" - rect 0 15 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - mouseEnter - { - play "mouse_over"; - show keyBindStatus - } - mouseexit { hide keyBindStatus } - action { play CHOICE_ACTION_SOUND; } - } - - itemDef - { - name misc - type ITEM_TYPE_BIND - text " " - dvar "vote no" - rect 0 30 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - mouseEnter - { - play "mouse_over"; - show keyBindStatus - } - mouseexit { hide keyBindStatus } - action { play CHOICE_ACTION_SOUND; } - } - itemDef - { - name misc - type ITEM_TYPE_BIND - text " " - dvar "chatmodepublic" - rect 0 45 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - mouseEnter - { - play "mouse_over"; - show keyBindStatus - } - mouseexit { hide keyBindStatus } - action { play CHOICE_ACTION_SOUND; } - } - itemDef - { - name misc - type ITEM_TYPE_BIND - text " " - dvar "chatmodeteam" - rect 0 60 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - mouseEnter - { - play "mouse_over"; - show keyBindStatus - } - mouseexit { hide keyBindStatus } - action { play CHOICE_ACTION_SOUND; } - } - itemDef - { - name misc - type ITEM_TYPE_BIND - text " " - dvar "mp_QuickMessage" - rect 0 75 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - mouseEnter - { - play "mouse_over"; - show keyBindStatus - } - mouseexit { hide keyBindStatus } - action { play CHOICE_ACTION_SOUND; } - } - - itemDef - { - name misc - type ITEM_TYPE_YESNO - text " " - dvar "cl_allowdownload" - rect 0 90 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - action { play CHOICE_ACTION_SOUND; } - mouseEnter - { - play "mouse_over"; - } - } - itemDef - { - name misc - type ITEM_TYPE_YESNO - text " " - dvar "hud_enable" - rect 0 105 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - action { play CHOICE_ACTION_SOUND; } - mouseEnter - { - play "mouse_over"; - } - } - - - itemDef - { - name misc - type ITEM_TYPE_MULTI - text " " - dvar "rate" - dvarFloatList { "@MENU_ISDN" 5000 "@MENU_LAN_CABLE_XDSL" 25000 } - rect 0 120 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - action { play CHOICE_ACTION_SOUND; } - mouseEnter - { - play "mouse_over"; - } - } - itemDef - { - name misc - type ITEM_TYPE_BIND - text " " - dvar "openscriptmenu ingame changeweapon" - rect 0 135 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - action { play CHOICE_ACTION_SOUND; } - mouseEnter - { - play "mouse_over"; - } - } - itemDef - { - name player_name - type ITEM_TYPE_EDITFIELD - text " " - dvar "ui_name" - rect 0 150 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - maxChars 31 - maxpaintchars 18 - mouseEnter - { - play "mouse_over"; - } - } - - itemDef - { - name misc - type ITEM_TYPE_YESNO - text " " - dvar "cl_punkbuster" - rect 0 165 320 13 - origin 50 120 - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textalignx 170 - textaligny 11 - textscale 0.25 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - visible 1 - action { play CHOICE_ACTION_SOUND; } - mouseEnter - { - play "mouse_over"; - } - } - -/////////////////////////////////////////////////////////// - itemDef - { - name cdkeybt - text "@MENU_ENTER_KEY_CODE" - type ITEM_TYPE_BUTTON - style WINDOW_STYLE_FILLED - textstyle ITEM_TEXTSTYLE_SHADOWED - rect 102 330 150 20 - textalign ITEM_ALIGN_CENTER - textscale .3 - textaligny 14 - forecolor .9 .9 .95 1 - visible 1 - textfont UI_FONT_NORMAL - mouseEnter - { - play "mouse_over"; - } - action - { - play CHOICE_ACTION_SOUND; - open cdkey_menu; - } - } - - itemDef - { - name keyBindStatus - rect 0 350 360 15 - ownerdraw UI_KEYBINDSTATUS - text " " - style WINDOW_STYLE_FILLED - backcolor 0 0 0 0 - forecolor .9 .9 .9 1 - textscale .20 - textalignx -12 - textalign ITEM_ALIGN_CENTER - textaligny 12 - visible 0 - decoration - } - -} - -}// -*/ diff --git a/mods/patch_mp/ui_mp/patch.txt b/mods/patch_mp/ui_mp/patch.txt deleted file mode 100644 index 53b23c0..0000000 --- a/mods/patch_mp/ui_mp/patch.txt +++ /dev/null @@ -1,7 +0,0 @@ -// MP patch menu defs -// -{ -// loadMenu { "ui/patch.menu" } -// loadMenu { "ui/patch_popups.menu" } - loadMenu { "ui_mp/mods.menu" } -} diff --git a/mods/patch_mp/ui_mp/pc_basictraining.menu b/mods/patch_mp/ui_mp/pc_basictraining.menu deleted file mode 100644 index 73774c2..0000000 --- a/mods/patch_mp/ui_mp/pc_basictraining.menu +++ /dev/null @@ -1,538 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/newframe.inc" - -#define CHOICE_X_START -258 -#define CHOICE_Y_START 35 -#define BUTTON_BG_WIDTH 180 - -#define CHOICE_SEP_OFFSET_X 20 -#define CHOICE_SEP_OFFSET_Y -2 -#define CHOICE_SEP_1 1 -#define CHOICE_SEP_2 4 -#define CHOICE_GROUP "xboxlive_basictraining" - -#define FLYOUT_NONE 0 -#define FLYOUT_TRAINING 3 - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/stats_info.inc" -#include "ui_mp/friendslist.inc" - -#define MENU_FONT_SIZE TEXTSIZE_DEFAULT -#define HIGHLIGHT_SIZE 142 22 -#define MENU_FONT_COLOR 1 1 1 0.5 -#define MENU_FONT_COLOR2 1 1 1 0.5 -#define MENU_LOCKED_COLOR 0.25 0.25 0.25 1 - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X BUTTON_BG_WIDTH -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER -#undef CHOICE_Y_SPACING -#define CHOICE_Y_SPACING CHOICE_SIZE_Y - -#define FLYOUT_BG_COLOR 0 0 0 0.3 - -#define SELECTION_IMAGE_BIG( materialArg ) ( "menu_" + materialArg + "_map_select_big" ) - -#define BOT_DVAR_CHECK \ - execNow if ( dvarInt( bot_friends ) > 11 ) set bot_friends 11; exec "updategamerprofile"; \ - execNow if ( dvarInt( bot_enemies ) > 11 ) set bot_enemies 11; exec "updategamerprofile"; -#include "ui_mp/common_macro.inc" - -#undef ON_ESC -#define ON_ESC \ - setdvar xblive_basictraining "0"; \ - setDvar xblive_privatematch "0" \ - setDvar leaveImmediately "0"; \ - close self; \ - open main_text; - -{ - menuDef - { - name menu_xboxlive_basictraining - fullscreen 1 - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - border 0 - soundloop MENU_MUSIC - control MENU_CONTROL_USED - allowSignIn - - onOpen - { - execnow "validatePrivateMatchGametype"; - exec "exec dvar_defaults.cfg"; - setDvar onlinegame "1"; - setdvar xblive_rankedmatch "0"; - setdvar xblive_basictraining "1"; - setdvar ui_inviteonly "0"; - setdvar invite_visible "1"; - setdvar ui_selectlobby "0"; - setdvar popup_open "0"; - - execNow set scr_hc_tdm_scorelimit ( dvarString( scr_tdm_scorelimit ) ); - execNow set scr_hc_dm_scorelimit ( dvarString( scr_dm_scorelimit ) ); - execNow set scr_hc_tdm_timelimit ( dvarString( scr_tdm_timelimit ) ); - execNow set scr_hc_dm_timelimit ( dvarString( scr_dm_timelimit ) ); - - execNow if ( !dvarbool( "xblive_basictraining_popup" ) ) openmenu "basictraining_msg"; - - exec set ui_bg_image SELECTION_IMAGE_BIG( dvarString( ui_mapname ) ); - - exec set show_list_player_info 0; - CLEARUIHINT - if ( dvarInt( scr_hardcore ) == 1 ) - { - if ( dvarString( ui_gametype ) == "dm" ) - { - execNow set ui_gametype( "hc_dm" ); - } - - if ( dvarString( ui_gametype ) == "tdm" ) - { - execNow set ui_gametype( "hc_tdm" ); - } - } - } - onFocus - { - if ( dvarString( ui_gametype ) != dm && dvarString( ui_gametype ) != hc_dm ) - { - //BOT_DVAR_CHECK; - } - - setDvar ui_flyoutHasFocus FLYOUT_NONE; - exec set ui_bg_image SELECTION_IMAGE_BIG( dvarString( ui_mapname ) ); - } - onClose - { - play "uin_navigation_backout"; - setdvar popup_open "1"; - setfocus popup_hide; - hide selection_right; - setdvar ui_bg_image ""; - } - onEsc - { - ON_ESC - } - - // ------------------ statics ------------------------ - #include "ui_mp/blurredbg.inc" - - // ----------------- Scroller -------------------------- - #include "ui/scroller.inc" - - // ----------------- title -------------------------- - CHOICE_MENU_TITLE_CENTER_ALIGN_VIS( "@MPUI_BASICTRAINING_LOBBY_CAPS", ITEM_ALIGN_TOP_RIGHT, 1 ) - - // ---------------------------- map ------------------------------------ - #define GAMEINFO_ORIENTATION 1 - #define GAMEINFO_X CHOICE_X_START - #define GAMEINFO_Y 235 - #define GAMEINFO_ORIGIN GAMEINFO_X GAMEINFO_Y - #define GAMEINFO_WIDTH BUTTON_BG_WIDTH - #define GAMEINFO_WIDTH2 GAMEINFO_WIDTH - #define GAMEINFO_HEIGHT 80 - - #include "ui_mp/game_info.inc" - #define MAPIMAGE SELECTION_IMAGE_FINAL( dvarString( ui_mapname ) ) - #define MAPNAME locString( tableLookup( "mp/mapstable.csv", 0, dvarString( ui_mapname ), 3 ) ) - #define GAMETYPENAME locString( tableLookup( "mp/gametypesTable.csv", 0, dvarString( ui_gametype ), 1 ) ) - - #define VOTE_BG_SIZE 20 - - #define SELECTION_IMAGE_FINAL( materialArg ) \ - ( "menu_" + materialArg + "_map_select_final" ) - - #define MAP_SELECTION_INFO( xPos, yPos, widthArg, heightArg, mapName, gametypeName, visArg ) \ - PREPROC_TEXT_DRAW_ALL( (xPos+widthArg-96-8) (yPos+heightArg-VOTE_BG_SIZE+1-18) 96 24 CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_BOTTOM, \ - 0 0, toUpper( mapName ), TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_TOP_RIGHT, 1 1 1 1, UI_FONT_EXTRABIG, ITEM_TEXTSTYLE_NORMAL, \ - visArg, ; ) \ - PREPROC_TEXT_DRAW_VIS( (xPos+widthArg-96-8) (yPos+heightArg-VOTE_BG_SIZE+1) 96 20 CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_BOTTOM, \ - 0 0, gametypeName, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_RIGHT, 1 1 1 1, \ - visArg ) - - #define MAP_X_START (-MAP_WIDTH-112) - #define MAP_Y_START (-MAP_HEIGHT-25) - #define MAP_WIDTH 183 - #define MAP_ASPECT_RATIO (203/275) - #define MAP_HEIGHT (MAP_WIDTH*MAP_ASPECT_RATIO) - - PREPROC_SHADER_DRAW_VIS_EX( MAP_X_START MAP_Y_START MAP_WIDTH MAP_HEIGHT CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_BOTTOM, - MAPIMAGE, 1 1 1 1, - 1, ; ) - - MAP_SELECTION_INFO( MAP_X_START, MAP_Y_START, MAP_WIDTH, MAP_HEIGHT, MAPNAME, GAMETYPENAME, 1 ) - - // ---------------------- locked hint ------------------------- - #define HINT_X_START ( CHOICE_X_START - 13 ) - HINT_TEXT_ALL( 9, HINT_X_START, 7, CHOICE_SIZE_X, dvarString( ui_hint_text ), 1 1 1 1, dvarBool( ui_show_arrow ), ; ) - - - // ---------------------- party status description ------------------------- - #define STATUS_START_X 145 - #define STATUS_START_Y -48 - #define STATUS_RECT STATUS_START_X STATUS_START_Y 150 25 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM - - PREPROC_TEXT_DRAW_VIS( STATUS_RECT, 0 0, "@MENU_STATUS_OPEN_DESC_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_RIGHT, MEDIUM_GRAY, when( dvarint( "party_privacyStatus" ) == 0 && !dvarbool( "xblive_basictraining" ) ) ) - PREPROC_TEXT_DRAW_VIS( STATUS_RECT, 0 0, "@MENU_STATUS_OPEN_FRIENDS_DESC_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_RIGHT, MEDIUM_GRAY, when( dvarint( "party_privacyStatus" ) == 1 && !dvarbool( "xblive_basictraining" ) ) ) - PREPROC_TEXT_DRAW_VIS( STATUS_RECT, 0 0, "@MENU_STATUS_INVITE_ONLY_DESC_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_RIGHT, MEDIUM_GRAY, when( dvarint( "party_privacyStatus" ) == 2 && !dvarbool( "xblive_basictraining" ) ) ) - PREPROC_TEXT_DRAW_VIS( STATUS_RECT, 0 0, "@MENU_STATUS_CLOSE_DESC_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_RIGHT, MEDIUM_GRAY, when( dvarint( "party_privacyStatus" ) == 3 && !dvarbool( "xblive_basictraining" ) ) ) - - - //========================================================= - //================= MENU SELECTION ACTIONS ================ - //========================================================= - #define SETUP_GAME_MODE \ - resetdvar scr_hardcore; \ - resetdvar scr_team_fftype; \ - resetdvar scr_player_healthregentime; \ - resetdvar scr_player_maxhealth; \ - resetdvar scr_tdm_waverespawndelay; \ - resetdvar scr_game_allowkillcam; \ - resetdvar scr_allowbattlechatter; \ - resetdvar scr_team_kickteamkillers; \ - resetdvar scr_game_suicidepointloss; \ - resetdvar scr_team_teamkillpointloss; \ - resetdvar scr_dog_health; \ - resetdvar scr_dm_playerrespawndelay; \ - resetdvar scr_disable_tacinsert; \ - if ( dvarString( ui_gametype ) == "hc_tdm" )\ - { \ - execNow set scr_tdm_scorelimit ( dvarFloat( scr_hc_tdm_scorelimit ) ); \ - execNow set scr_tdm_timelimit ( dvarFloat( scr_hc_tdm_timelimit ) ); \ - execNow set g_gametype "tdm"; \ - execNow set ui_gametype "tdm"; \ - execNow set scr_hardcore 1; \ - execNow set scr_team_fftype 1; \ - execNow set scr_player_healthregentime 0; \ - execNow set scr_player_maxhealth 30; \ - execNow set scr_tdm_waverespawndelay 15; \ - execNow set scr_game_allowkillcam 0; \ - execNow set scr_allowbattlechatter 0; \ - execNow set scr_team_kickteamkillers 1; \ - execNow set scr_game_suicidepointloss -100; \ - execNow set scr_team_teamkillpointloss -100; \ - execNow set scr_dog_health 30; \ - } \ - if ( dvarString( ui_gametype ) == "hc_dm" )\ - { \ - execNow set scr_dm_scorelimit ( dvarFloat( scr_hc_dm_scorelimit ) ); \ - execNow set scr_dm_timelimit ( dvarFloat( scr_hc_dm_timelimit ) ); \ - execNow set g_gametype "dm"; \ - execNow set ui_gametype "dm"; \ - execNow set scr_hardcore 1; \ - execNow set scr_player_healthregentime 0; \ - execNow set scr_player_maxhealth 30; \ - execNow set scr_game_allowkillcam 0; \ - execNow set scr_allowbattlechatter 0; \ - execNow set scr_dm_playerrespawndelay 7; \ - execNow set scr_game_suicidepointloss -50; \ - execNow set scr_dog_health 30; \ - execNow set scr_disable_tacinsert 1; \ - } \ - if ( dvarString( ui_gametype ) == "shrp" || dvarString( ui_gametype ) == "gun" || dvarString( ui_gametype ) == "oic" || dvarString( ui_gametype ) == "hlnd" ) \ - { \ - execNow set bot_wager "1"; \ - } \ - else \ - { \ - execNow set bot_wager "0"; \ - } \ - execNow set scr_hlnd_timelimit ""; \ - execNow set scr_hlnd_scorelimit ""; \ - execNow set scr_oic_timelimit ""; \ - execNow set scr_oic_scorelimit ""; \ - execNow set scr_gun_timelimit ""; \ - execNow set scr_gun_scorelimit ""; \ - execNow set scr_shrp_timelimit ""; \ - execNow set scr_shrp_scorelimit ""; - - - #define SETUP_ACTION_STARTMATCH \ - SETUP_GAME_MODE \ - exec "selectStringTableEntryInDvar mp/didyouknow.csv 0 didyouknow"; \ - uiscript StartListenServer; - - #define SETUP_ACTION_GAMESETUP \ - open basictraining_settings; - - #define SETUP_ACTION_CREATEACLASS \ - execnow "set ui_cac_ingame 0"; \ - setdvar invite_visible "0"; \ - /*exec "uploadstats";*/ \ - open cac_main; - - #define SETUP_ACTION_CONTRACTS \ - exec "endsplitscreensignin"; \ - open menu_xboxlive_contracts; - - #define SETUP_ACTION_KILLSTREAKS \ - exec "endsplitscreensignin"; \ - open menu_xboxlive_killstreaks; - - - //========================================================= - //===================== MENU SELECTION ==================== - //========================================================= - #define ANY_NEW_TRAINING_PLAYERCARD_FEATURE \ - ( ANY_NEW_CHALLENGES || IS_ITEM_NEW( FEATURE_COMBAT_RECORD ) ) - - #define IS_LOBBY_HOST 1 - #define IS_NOT_LOBBY_HOST 0 - - // HOST BUTTONS - TEMP_CHOICE_BUTTON_FOCUS_VIS( 1, "@MPUI_START_MATCH_CAPS", - SETUP_ACTION_STARTMATCH, - SET_HINT_TEXT( "@MPUI_START_MATCH_DESC" ), - CLEARUIHINT, - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 1 ), 0 0, "@MPUI_START_MATCH_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, MEDIUM_GRAY, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - - - TEMP_CHOICE_BUTTON_FOCUS_VIS( 2, "@MPUI_CHANGE_MAP_CAPS", - open select_map, - SET_HINT_TEXT( "@MPUI_CHANGE_MAP_DESC" ), - CLEARUIHINT, - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 2 ), 0 0, "@MPUI_CHANGE_MAP_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, MEDIUM_GRAY, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - - - TEMP_CHOICE_BUTTON_FOCUS_VIS( 3, "@MPUI_CHANGE_GAME_MODE_CAPS", - open select_game_mode, - SET_HINT_TEXT( "@MPUI_CHANGE_GAME_MODE_DESC" ), - CLEARUIHINT, - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 3 ), 0 0, "@MPUI_CHANGE_GAME_MODE_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, MEDIUM_GRAY, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - - TEMP_CHOICE_BUTTON_FOCUS_VIS( 4, "@MPUI_EDIT_GAME_OPTIONS_CAPS", - SETUP_ACTION_GAMESETUP, - SET_HINT_TEXT( "@MPUI_EDIT_GAME_OPTIONS_DESC" ), - CLEARUIHINT, - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 4 ), 0 0, "@MPUI_EDIT_GAME_OPTIONS_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, MEDIUM_GRAY, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - - TEMP_CHOICE_BUTTON_FOCUS_VIS( 5, "@MPUI_CREATE_A_CLASS_CAPS", - SETUP_ACTION_CREATEACLASS, - SET_HINT_TEXT( "@MPUI_CAC_DESC" ) CLEAR_ITEM_NEW( FEATURE_CREATE_A_CLASS ), - CLEARUIHINT, - !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) && dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - TEMP_CHOICE_DBUTTON_FOCUS_VIS_EX( 5, "@MPUI_CREATE_A_CLASS_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_CREATE_A_CLASS ) ), - CLEARUIHINT, - IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) && dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE, ; ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 5 ), 0 0, "@MPUI_CREATE_A_CLASS_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, MEDIUM_GRAY, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - CHOICE_NEWICON_VIS( 5, "menu_mp_lobby_new", when( ANY_NEW_CAC && dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) ) - CHOICE_LOCKEDICON_VIS( 5, "menu_mp_lobby_locked", when( IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) && dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) ) - - - TEMP_CHOICE_BUTTON_FOCUS_VIS( 6, "@MENU_KILLSTREAKS_CAPS", - SETUP_ACTION_KILLSTREAKS, - SET_HINT_TEXT( "@MPUI_KILLSTREAKS_DESC" ) CLEAR_ITEM_NEW( FEATURE_KILLSTREAKS ), - CLEARUIHINT, - !IS_ITEM_LOCKED( FEATURE_KILLSTREAKS ) && dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - TEMP_CHOICE_DBUTTON_FOCUS_VIS_EX( 6, "@MENU_KILLSTREAKS_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_KILLSTREAKS ) ), - CLEARUIHINT, - IS_ITEM_LOCKED( FEATURE_KILLSTREAKS ) && dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE, ; ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 6 ), 0 0, "@MENU_KILLSTREAKS_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, MEDIUM_GRAY, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - CHOICE_NEWICON_VIS( 6, "menu_mp_lobby_new", when( IS_ITEM_NEW( FEATURE_KILLSTREAKS ) && dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) ) - CHOICE_LOCKEDICON_VIS( 6, "menu_mp_lobby_locked", when( IS_ITEM_LOCKED( FEATURE_KILLSTREAKS ) && dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) ) - - - TEMP_CHOICE_BUTTON_FOCUS_VIS( 8, "@MENU_PLAYERCARD_CAPS", - SETUP_ACTION_PLAYERCARD, - SET_HINT_TEXT( "@MPUI_PLAYERCARD_DESC" ), - CLEARUIHINT, - dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) - PREPROC_TEXT_DRAW_VIS( CHOICE_RECT( 8 ), 0 0, "@MENU_PLAYERCARD_CAPS", CHOICE_TEXTSIZE, CHOICE_TEXT_OFFSET_X, 0, CHOICE_TEXTALIGN, MEDIUM_GRAY, when( dvarInt( ui_flyoutHasFocus ) != FLYOUT_NONE ); ) - CHOICE_NEWICON_VIS( 8, "menu_mp_lobby_new", when( ANY_NEW_TRAINING_PLAYERCARD_FEATURE && IS_LOBBY_HOST && dvarInt( ui_flyoutHasFocus ) == FLYOUT_NONE ) ) - - #undef CHOICE_TEXTSIZE - #define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT - - #undef CHOICE_TEXTFONT - #define CHOICE_TEXTFONT UI_FONT_NORMAL - - // Friends button - FRIENDS_BUTTON - - // back button - NEW_FRAME_BACK_BUTTON_ACTION_PC( ON_ESC ) - - #include "ui/safearea.menu" - } - - - #include "ui/framestyle.inc" - #include "ui/frame.inc" - - #undef CHOICE_GROUP - #define CHOICE_GROUP "basictraining_difficulty" - - #undef CHOICE_X_START - #define CHOICE_X_START (-FRAME_DEFAULT_WIDTH/2+15) - - #undef CHOICE_Y_START - #define CHOICE_Y_START ( -FRAME_DEFAULT_HEIGHT / 2 + 15 + NEW_FRAME_BG_Y_OFFSET( FRAME_DEFAULT_HEIGHT ) ) - - #define DIFFICULTY_NAME_X 0 - #define DIFFICULTY_NAME_Y CHOICE_Y_START - - #define ITEM_IMAGE_X DIFFICULTY_NAME_X - #define ITEM_IMAGE_Y (CHOICE_Y_START-5) - #define ITEM_IMAGE_ASPECT_RATIO 1 - #define ITEM_IMAGE_WIDTH (ITEM_IMAGE_HEIGHT * ITEM_IMAGE_ASPECT_RATIO) - #define ITEM_IMAGE_HEIGHT 240 - #define ITEM_IMAGE_SIZE ITEM_IMAGE_WIDTH ITEM_IMAGE_HEIGHT - - #define DIFFICULTY_NAME_SIZE ITEM_IMAGE_WIDTH 30 - - #define DIFFICULTY_DESC_X (ITEM_IMAGE_X + 20) - #define DIFFICULTY_DESC_Y (ITEM_IMAGE_Y + ITEM_IMAGE_HEIGHT - 20) - #define DIFFICULTY_DESC_SIZE 200 75 - - #define DIFFICULTY_INFO \ - /* Name */ \ - PREPROC_TEXT_DRAW( DIFFICULTY_NAME_X DIFFICULTY_NAME_Y DIFFICULTY_NAME_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - localVarString( ui_info_name ), \ - TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_TOP_CENTER, 1 1 1 1 ) \ - /* Image */ \ - PREPROC_SHADER_DRAW( ITEM_IMAGE_X ITEM_IMAGE_Y ITEM_IMAGE_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - localVarString( ui_diff_pic ), 1 1 1 0.9 ) \ - /* Description */ \ - PREPROC_TEXT_DRAW_VIS_EX( DIFFICULTY_DESC_X DIFFICULTY_DESC_Y DIFFICULTY_DESC_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, \ - localVarString( ui_info ), \ - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_CENTER, FRAME_LT_GREY_RGB 1, \ - 1, autowrapped ) - - #define DIFFICULTY_ONFOCUS( descArg, nameArg, imageArg )\ - setLocalVarString ui_info descArg; \ - setLocalVarString ui_info_name nameArg; \ - setLocalVarString ui_diff_pic imageArg - - #define SET_DIFFICULTY( difficulty ) \ - exec set bot_difficulty difficulty; \ - close self; - -#undef CHOICE_SEP_SPACING -#define CHOICE_SEP_SPACING 0 - - menuDef - { - name basictraining_difficulty - rect 0 0 640 480 - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - - onOpen - { - activateBlur; - focusFirst; - play uin_navigation_menu_lg_open; - } - onFocus { } - onClose - { - deactivateBlur; - execNow "updategamerprofile"; - } - onESC - { - close self; - } - execKeyInt BUTTON_B { } - - FRAME_DEFAULT - FRAME_TITLE_DEFAULT( "@MENU_SELECT_DIFFICULTY_CAPS", 1 ) - - //FRAME_SUBTITLE_DEFAULT( "@MENU_SELECT_DIFF_DESC", 1 ) This was commented out in the main basictraining/difficulty menus on all platforms in cl#702108, so there doesn't seem to be a good reason to have it here any longer - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 1, "@MENU_RECRUIT_CAPS", - SET_DIFFICULTY( "easy" ), - DIFFICULTY_ONFOCUS( "@MENU_DIFF_RECRUIT_DESC", "@MENU_RECRUIT_CAPS", "playlist_sp_recr" ), - ;, 1, ; ) - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 2, "@MENU_REGULAR_CAPS", - SET_DIFFICULTY( "normal" ), - DIFFICULTY_ONFOCUS( "@MENU_DIFF_REGULAR_DESC", "@MENU_REGULAR_CAPS", "playlist_sp_reg" ), - ;, 1, ; ) - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 3, "@MENU_HARDENED_CAPS", - SET_DIFFICULTY( "hard" ), - DIFFICULTY_ONFOCUS( "@MENU_DIFF_HARDENED_DESC", "@MENU_HARDENED_CAPS", "playlist_sp_hard" ), - ;, 1, ; ) - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 4, "@MENU_VETERAN_CAPS", - SET_DIFFICULTY( "fu" ), - DIFFICULTY_ONFOCUS( "@MENU_DIFF_VETERAN_DESC", "@MENU_VETERAN_CAPS", "playlist_sp_vet" ), - ;, 1, ; ) - - DIFFICULTY_INFO - } - - - #undef CHOICE_FOCUS_SOUND - #define CHOICE_FOCUS_SOUND "uin_navigation_over" - - #undef CHOICE_Y_SPACING - #define CHOICE_Y_SPACING (CHOICE_SIZE_Y + 2) - - #include "ui_mp/popupstyle.inc" - #include "ui/choices_setup_popmenu.menu" - - #undef POPUP_WIDTH - #define POPUP_WIDTH MEDIUM_POPUP_WIDTH - #undef POPUP_HEIGHT - #define POPUP_HEIGHT MEDIUM_POPUP_HEIGHT - #undef MEDIUM_POPUP_TITLE_X_START - #define MEDIUM_POPUP_TITLE_X_START POPUP_SIDE_PAD - #undef MEDIUM_POPUP_TITLE_Y_START - #define MEDIUM_POPUP_TITLE_Y_START POPUP_SIDE_PAD - #undef CHOICE_SIZE_X - #define CHOICE_SIZE_X ( (MEDIUM_POPUP_WIDTH - (POPUP_SIDE_PAD * 2) ) / 2 ) - - #undef POPUP_BUTTON_COUNT - #define POPUP_BUTTON_COUNT 1 - #undef CHOICE_Y_START - #define CHOICE_Y_START POPUP_Y_START_BOTTOM - menuDef - { - MEDIUM_POPUP_SETUP_VIS( basictraining_msg, ;, close self;, POPUP_GLOW_WHITE, 0, 1 ) - onClose - { - setDvar xblive_basictraining_popup "1"; - open basictraining_difficulty; - } - execkeyint BUTTON_START {} - execKeyInt APAD_UP {} - execKeyInt DPAD_UP {} - execKeyInt APAD_DOWN {} - execKeyInt DPAD_DOWN {} - execKeyInt APAD_LEFT {} - execKeyInt DPAD_LEFT {} - execKeyInt APAD_RIGHT {} - execKeyInt DPAD_RIGHT {} - - PREPROC_TEXT_DRAW_VIS_EX( MEDIUM_POPUP_TITLE_X_START MEDIUM_POPUP_TITLE_Y_START (MEDIUM_POPUP_WIDTH-30) MEDIUM_POPUP_TITLE_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@MPUI_BASICTRAINING_LOBBY_CAPS", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, 1, autowrapped ) - - PREPROC_TEXT_DRAW_VIS_EX( MEDIUM_POPUP_TITLE_X_START (MEDIUM_POPUP_TITLE_Y_START+MEDIUM_POPUP_TITLE_HEIGHT+10) (MEDIUM_POPUP_WIDTH-30) 100 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, - "@MPUI_BASICTRAINING_POPUP_DESC", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, 1, autowrapped ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_CONTINUE", close self;, 1, ; ) - } -} diff --git a/mods/patch_mp/ui_mp/pc_serversettings.menu b/mods/patch_mp/ui_mp/pc_serversettings.menu deleted file mode 100644 index 41353e0..0000000 --- a/mods/patch_mp/ui_mp/pc_serversettings.menu +++ /dev/null @@ -1,190 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/custom_mode_layout.inc" -#include "ui_mp/custom_mode.inc" - -#undef CHOICE_Y_START -#define CHOICE_Y_START -150 - -#undef CHOICE_X_START -#define CHOICE_X_START -200 - -#ifdef PC -#undef CHOICE_TEXTSIZE -#define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT -#endif //#ifdef PC - -#define SERVERSETTINGS_NAME_X 40 -#define SERVERSETTINGS_NAME_Y (80) -#define SERVERSETTINGS_NAME_SIZE SERVERSETTINGS_IMAGE_WIDTH 30 - -#define SERVERSETTINGS_IMAGE_X SERVERSETTINGS_NAME_X -#define SERVERSETTINGS_IMAGE_Y (CHOICE_Y_START - 170) -#define SERVERSETTINGS_IMAGE_ASPECT_RATIO 1.0 -#define SERVERSETTINGS_IMAGE_WIDTH 180 -#define SERVERSETTINGS_IMAGE_HEIGHT (SERVERSETTINGS_IMAGE_WIDTH * SERVERSETTINGS_IMAGE_ASPECT_RATIO) -#define SERVERSETTINGS_IMAGE_SIZE SERVERSETTINGS_IMAGE_WIDTH SERVERSETTINGS_IMAGE_HEIGHT - -#define SERVERSETTINGS_DESC_X 0 -#define SERVERSETTINGS_DESC_Y (CHOICE_Y_START + 20) -#define SERVERSETTINGS_DESC_SIZE 244 60 - -#undef DEFAULT_SLIDE_IN_SPEED -#define DEFAULT_SLIDE_IN_SPEED 180 - -#undef DEFAULT_SLIDE_OUT_SPEED -#define DEFAULT_SLIDE_OUT_SPEED 180 - -#define CHOICE_BUTTON_NAME "SERVERSETTINGS_" -#define MENUDEF_NAME server_settings - -#define SERVERSETTINGS_FRAME_WIDTH NEW_FRAME_DEFAULT_WIDTH -#define SERVERSETTINGS_FRAME_HEIGHT NEW_FRAME_DEFAULT_HEIGHT - -#undef ON_ESC -#define ON_ESC \ - play uin_navigation_menu_lg_close; \ - close self; - -menuDef -{ - name MENUDEF_NAME - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - - onOpen - { - activateBlur; - play uin_navigation_menu_lg_open; - setdvar invite_visible "0"; - } - onFocus { } - onClose - { - deactivateBlur; - setdvar invite_visible "1"; - } - onESC - { - ON_ESC - } - - NEW_FRAME( SERVERSETTINGS_FRAME_WIDTH, SERVERSETTINGS_FRAME_HEIGHT ) - NEW_FRAME_TITLE( SERVERSETTINGS_FRAME_WIDTH, SERVERSETTINGS_FRAME_HEIGHT, "@MENU_SERVER_SETTINGS_CAPS", 1 ) - - // Server Name - FRAME_CHOICE_DVAREDIT_FOCUS_VIS_EX( 2, "@PATCH_SERVER_NAME_CAPS", - "sv_hostname", 20, 20, - ;, - SET_CHOICE_DESC( "", "@PATCH_SERVER_NAME_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Minimum Ping - FRAME_CHOICE_DVAREDIT_NUMERIC_FOCUS_VIS_EX( 4, "@PATCH_MINIMUM_PING_CAPS", - "sv_minping", 4, - ;, - SET_CHOICE_DESC( "", "@PATCH_MINIMUM_PING_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Maximum Ping - FRAME_CHOICE_DVAREDIT_NUMERIC_FOCUS_VIS_EX( 5, "@PATCH_MAXIMUM_PING_CAPS", - "sv_maxping", 4, - ;, - SET_CHOICE_DESC( "", "@PATCH_MAXIMUM_PING_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Password - FRAME_CHOICE_DVAREDIT_FOCUS_VIS_EX( 6, "@PATCH_PASSWORD1_CAPS", - "g_password", 12, 12, - ;, - SET_CHOICE_DESC( "", "@PATCH_PASSWORD_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Voice Chat Enabled - FRAME_CHOICE_DVARYESNO_FOCUS_VIS_EX( 7, "@MENU_VOICECHAT_CAPS", - "sv_voice", - ;, - SET_CHOICE_DESC( "", "@PATCH_VOICECHAT_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Team Change Enabled - FRAME_CHOICE_DVARYESNO_FOCUS_VIS_EX( 8, "@PATCH_MP_TEAMCHANGE_ALLOW_CAPS", - "g_allow_teamchange", - ;, - SET_CHOICE_DESC( "", "@PATCH_MP_TEAMCHANGE_ALLOW_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - - // Team Change Keep Balanced - FRAME_CHOICE_DVARYESNO_FOCUS_VIS_EX( 9, "@PATCH_MP_TEAMCHANGE_KEEPBALANCED_CAPS", - "g_teamchange_keepbalanced", - ;, - SET_CHOICE_DESC( "", "@PATCH_MP_TEAMCHANGE_KEEPBALANCED_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Team Change Grace Period - FRAME_CHOICE_DVAREDIT_NUMERIC_FOCUS_VIS_EX( 10, "@PATCH_MP_TEAMCHANGE_GRACEPERIOD_CAPS", - "g_teamchange_graceperiod", 4, - ;, - SET_CHOICE_DESC( "", "@PATCH_MP_TEAMCHANGE_GRACEPERIOD_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Auto-Balance Enabled - FRAME_CHOICE_DVARYESNO_FOCUS_VIS_EX( 11, "@PATCH_AUTOBALANCE_TEAMS_CAPS", - "scr_teambalance", - ;, - SET_CHOICE_DESC( "", "@PATCH_AUTO_BALANCE_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - - // Voting Enabled - FRAME_CHOICE_DVARYESNO_FOCUS_VIS_EX( 12, "@PATCH_ALLOW_VOTING_CAPS", - "g_allowvote", - ;, - SET_CHOICE_DESC( "", "@PATCH_ALLOW_VOTING_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Pre-game enabled - FRAME_CHOICE_DVARYESNO_FOCUS_VIS_EX( 13, "@PATCH_PREGAME_ENABLED_CAPS", - "g_pregame_enabled", - ;, - SET_CHOICE_DESC( "", "@PATCH_PRE_MATCH_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Pre-game min players - FRAME_CHOICE_DVAREDIT_NUMERIC_FOCUS_VIS_EX( 14, "@PATCH_PREGAME_MINPLAYERS_CAPS", - "party_minplayers", 3, - ;, - SET_CHOICE_DESC( "", "@PATCH_MINIMUM_PLAYERS_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // Maximum Players - FRAME_CHOICE_DVAREDIT_NUMERIC_FOCUS_VIS_EX( 15, "@PATCH_MAXIMUM_PLAYERS_CAPS", - "sv_maxclients", 3, - ;, - SET_CHOICE_DESC( "", "@PATCH_MAXIMUM_PLAYERS_DESC", "" ), - CLEAR_CHOICE_DESC, 1, ; ) - - // VAC - FRAME_CHOICE_DVARYESNO_FOCUS_VIS_EX( 16, "@PLATFORM_VAC_CAPS", - "sv_vac", - ;, - SET_CHOICE_DESC( "", "@PATCH_VALVE_ANTI_CHEAT_DESC", "" ), - CLEAR_CHIOCE_DESC, 1, ; ) - - HINT_TEXT_ALL_RECT( CHOICE_X_START, ( (SERVERSETTINGS_FRAME_HEIGHT / 2) - 30 ), ( CHOICE_SIZE_X ), dvarString( ui_choice_desc ), 1 1 1 1, ( MenuHasFocus() && dvarString( ui_choice_desc ) != "" ), ; ) - - NEW_FRAME_BACK_BUTTON_ACTION( SERVERSETTINGS_FRAME_WIDTH, SERVERSETTINGS_FRAME_HEIGHT, ON_ESC ) - - #include "ui/safearea.menu" -} - diff --git a/mods/patch_mp/ui_mp/playercards.menu b/mods/patch_mp/ui_mp/playercards.menu deleted file mode 100644 index dbb7bc8..0000000 --- a/mods/patch_mp/ui_mp/playercards.menu +++ /dev/null @@ -1,1352 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui/frame.inc" - -#undef CHOICE_X_START -#define CHOICE_X_START FRAME_CHOICE_X_START -#undef CHOICE_Y_START -#define CHOICE_Y_START FRAME_CHOICE_Y_START -#define BUTTON_BG_WIDTH FRAME_BUTTON_WIDTH - -#define CHOICE_SEP_OFFSET_X 20 -#define CHOICE_SEP_OFFSET_Y -2 - -#define CHOICE_GROUP "playercard" - -#ifdef XENON - #define SELECT_ICON "ui_button_xenon_3d_a_32x32" -#endif -#ifdef PS3 - #define SELECT_ICON "ui_button_ps3_x_32x32" -#endif - -#include "ui_mp/menustyle.inc" -#include "ui_mp/overlaybg.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/popup_player_info.inc" -#include "ui_mp/stats_info.inc" - -#ifndef BASE_LB_TYPES_COUNT -#define BASE_LB_TYPES_COUNT int(tableLookup( "mp/gameTypesTable.csv", 0, "maxnum_gametype", 1 )) -#endif - -#undef CHOICE_TEXTCOLOR -#define CHOICE_TEXTCOLOR NEW_FRAME_COMMON_TEXT_COLOR - -#define PLAYER_EMBLEM_BG_SIZE (190) -#define PLAYER_EMBLEM_SIZE (PLAYER_EMBLEM_BG_SIZE - 20) -#define PLAYER_EMBLEM_X_START 70 -#define PLAYER_EMBLEM_Y_START (CHOICE_Y_START+20) - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X BUTTON_BG_WIDTH -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER - -#define PLAYER_RANK getDStat( "PlayerStatsList", "RANK" ) -#define PLAYER_PRESTIGE getDStat( "PlayerStatsList", "PLEVEL" ) -#define PLAYER_RANKXP getDStat( "PlayerStatsList", "RANKXP" ) - -#define PLAYER_CARD_COMMON_ITEMS \ \ - /* PLAYER NAME */ \ - PLAYER_CLAN_TAG_AND_NAME( PLAYER_EMBLEM_X_START, (PLAYER_EMBLEM_Y_START-18), 1 ) \ - /* BACKGROUND FOR EMBLEM */ \ - PREPROC_SHADER_DRAW_VIS_EX( PLAYER_EMBLEM_X_START PLAYER_EMBLEM_Y_START PLAYER_EMBLEM_BG_SIZE PLAYER_EMBLEM_BG_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "white", 0 0 0 0.4, \ - 1, ; ) \ - /* PLAYER EMBLEM */ \ - PLAYER_EMBLEM_ALL( (PLAYER_EMBLEM_X_START+10), (PLAYER_EMBLEM_Y_START+10), PLAYER_EMBLEM_SIZE, PLAYER_EMBLEM_SIZE, 1 ) - -#define FRIENDS_PLAYER_CARD_COMMON_ITEMS \ - /* PLAYER NAME */ \ - FRIEND_NAME( PLAYER_EMBLEM_X_START, (PLAYER_EMBLEM_Y_START-18), 1 ) \ - /* BACKGROUND FOR EMBLEM */ \ - PREPROC_SHADER_DRAW_VIS_EX( PLAYER_EMBLEM_X_START PLAYER_EMBLEM_Y_START PLAYER_EMBLEM_BG_SIZE PLAYER_EMBLEM_BG_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, \ - "white", 0 0 0 0.4, \ - 1, ; ) \ - /* PLAYER EMBLEM */ \ - FRIEND_EMBLEM_ALL( (PLAYER_EMBLEM_X_START+10), (PLAYER_EMBLEM_Y_START+10), PLAYER_EMBLEM_SIZE, PLAYER_EMBLEM_SIZE, 1 ) - - -#undef CLOSE_CARD_DROPDOWN_CLANTAG -#define CLOSE_CARD_DROPDOWN_CLANTAG \ - play CHOICE_FOCUS_SOUND; \ - setLocalVarBool ui_show_clan_edit 0; \ - execnow ui_animate menu_playercard_self * CloseDropDownList 0; \ - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - if( dvarstring( "ui_in_player_card_popup" ) == "clantag" ) \ - { \ - CLOSE_CARD_DROPDOWN_CLANTAG \ - } \ - else \ - { \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self, MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM, MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM ) ; \ - CLEARUIHINT; \ - deactivateBlur; \ - play uin_navigation_menu_lg_close; \ - if( dvarInt( ui_leaderboardOpen ) == 1 ) \ - { \ - execnow changemenucloseslidedirection menu_playercard_self MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - close self; \ - execnow openmenu (dvarString("leaderboard_menu_name")); \ - } \ - else \ - { \ - close self; \ - setdvar ui_playercard_self_open 0; \ - } \ - } - -#define PLAYER_CARD_DROPDOWN_LIST_NAME "player_card_dropdown_list_" -#define PLAYER_CARD_BUTTON_NAME "playercard_button_" - -#undef NEW_FRAME_BUTTON_NAME -#define NEW_FRAME_BUTTON_NAME "playercard_button_" -#define PLAYER_CARD_SELECTION_FADE_TIME 80 -#define PLAYER_CARD_SELECTION_SLIDE_TIME 80 -#define PLAYER_CARD_SELECTION_UNROLL_TIME 120 - -#define PLAYER_CARD_LISTBOX_RECT (CHOICE_X_START-3) (CHOICE_Y_START+NEW_FRAME_BUTTON_HEIGHT+2) (CHOICE_SIZE_X+4) 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER -#define PLAYER_CARD_LISTBOX_UNROLLED_RECT (CHOICE_X_START-3) (CHOICE_Y_START+NEW_FRAME_BUTTON_HEIGHT+2) (CHOICE_SIZE_X+4) 250 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - -#define CHALLENGES_LOCKED ( IS_ITEM_LOCKED( FEATURE_CHALLENGES ) ) - -{ - menuDef - { - name menu_playercard_self - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - control MENU_CONTROL_OPENER - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - onOpen - { - activateBlur; - setLocalVarBool ui_show_clan_edit 0; - play uin_navigation_menu_lg_open; - } - onFocus { - - } - onClose - {deactivateBlur; } - onESC - { - ON_ESC_ACTION - } - - FRAME_DEFAULT - FRAME_TITLE_DEFAULT( "@MENU_MY_PLAYERCARD_CAPS", when( dvarString( ui_in_player_card_popup ) != "clantag" ) ) - FRAME_TITLE_DEFAULT( "@MPUI_CLAN_TAG_CAPS", when( dvarString( ui_in_player_card_popup ) == "clantag" ) ) - - PLAYER_INFO_VIS( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, 1 ) - - // This is a dummy itemDef to disable controls. - // Used when animating. - itemDef - { - name dummyButton - type ITEM_TYPE_BUTTON_NO_TEXT - rect 0 0 0 0 - visible when( localVarString( "ui_disable_controls" ) == 1 ); - - execKeyInt APAD_UP {} - execKeyInt DPAD_UP {} - execKeyInt APAD_DOWN {} - execKeyInt DPAD_DOWN {} - execKeyInt APAD_LEFT {} - execKeyInt DPAD_LEFT {} - execKeyInt APAD_RIGHT {} - execKeyInt DPAD_RIGHT {} - } - - // This is a dummy itemDef that acts as the central hub for - // animation control in the new playercard - itemDef - { - name anim_controller - style WINDOW_STYLE_SHADER - rect 0 0 0 0 - visible 1 - decoration - - // Open dropdown - state - { - name OpenDropDownList - onEnter - { - execnow ui_animate menu_playercard_self * Transparent PLAYER_CARD_SELECTION_FADE_TIME; - execnow ui_animate menu_playercard_self (PLAYER_CARD_BUTTON_NAME+localVarInt(ui_playercardButton)) Default 0; - execnow ui_animate menu_playercard_self anim_controller OpenDropDownList2 PLAYER_CARD_SELECTION_FADE_TIME; - } - } - state - { - name OpenDropDownList2 - onEnter - { - execnow ui_animate menu_playercard_self (PLAYER_CARD_BUTTON_NAME+localVarInt(ui_playercardButton)) Top PLAYER_CARD_SELECTION_SLIDE_TIME; - execnow ui_animate menu_playercard_self anim_controller OpenDropDownList3 PLAYER_CARD_SELECTION_SLIDE_TIME; - } - } - state - { - name OpenDropDownList3 - onEnter - { - execnow ui_animate menu_playercard_self (PLAYER_CARD_DROPDOWN_LIST_NAME+localVarInt(ui_playercardButton)) Unrolled PLAYER_CARD_SELECTION_UNROLL_TIME; - play uin_navigation_menu_sm_open; - exec updateListboxPos menu_playercard_self; - } - } - - // Close dropdown - state - { - name CloseDropDownList - onEnter - { - setLocalVarInt ui_disable_controls 1; - setFocus dummyButton; - if ( localVarString( ui_playercardListboxCloseOverride ) != "" ) - { - execnow ui_animate menu_playercard_self (anim_controller) (localVarString( ui_playercardListboxCloseOverride )) 0; - } - else - { - execnow ui_animate menu_playercard_self (PLAYER_CARD_DROPDOWN_LIST_NAME+localVarInt(ui_playercardButton)) Default PLAYER_CARD_SELECTION_UNROLL_TIME; - execnow ui_animate menu_playercard_self anim_controller CloseDropDownList2 (PLAYER_CARD_SELECTION_UNROLL_TIME+30); - play uin_navigation_menu_sm_close; - } - } - } - state - { - name CloseDropDownList2 - onEnter - { - execnow "set ui_in_player_card_popup 0"; - execnow ui_animate menu_playercard_self (PLAYER_CARD_BUTTON_NAME+localVarInt(ui_playercardButton)) Default PLAYER_CARD_SELECTION_SLIDE_TIME; - execnow ui_animate menu_playercard_self anim_controller CloseDropDownList3 (PLAYER_CARD_SELECTION_SLIDE_TIME+30); - } - } - state - { - name CloseDropDownList3 - onEnter - { - execnow focusItem (PLAYER_CARD_BUTTON_NAME+localVarInt(ui_playercardButton)); - setLocalVarInt ui_disable_controls 0; - execnow ui_animate menu_playercard_self * Default PLAYER_CARD_SELECTION_FADE_TIME; - } - } - } - - #define PLAYER_CARD_RECT_STATE( nameArg, rectArg ) \ - state \ - { \ - name nameArg \ - rect rectArg \ - } - - #define EMBLEM_EDITOR_BUTTON_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - execnow assertDWConnection; \ - execNow "emblemgetprofile"; \ - execNow emblemSelect 0; \ - open emblem_edit; - - // EMBLEM EDITOR BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 1, "@MENU_EMBLEM_EDITOR_CAPS", - EMBLEM_EDITOR_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_EMBLEM_EDITOR_DESC" ) CLEAR_ITEM_NEW( FEATURE_EMBLEM ), - CLEARUIHINT, - !IS_ITEM_LOCKED( FEATURE_EMBLEM ), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 1, "@MENU_EMBLEM_EDITOR_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_EMBLEM ) ), - CLEARUIHINT, - IS_ITEM_LOCKED( FEATURE_EMBLEM ), ; ) - CHOICE_NEWICON_VIS( 1, "menu_mp_lobby_new", when( IS_ITEM_NEW( FEATURE_EMBLEM ) ) ) - CHOICE_LOCKEDICON_VIS( 1, "menu_mp_lobby_locked", when( IS_ITEM_LOCKED( FEATURE_EMBLEM ) ) ) - - #define PLAYER_CARD_CLANTAG_BUTTON_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - execnow statsetbyname hasclantag 1; \ - execnow changemenuopenslidedirection menu_playercards_clantag MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - open menu_playercards_clantag; - - // CLAN TAG BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 2, "@MPUI_CLAN_TAG_CAPS", - setdvar lb_prestige 0; PLAYER_CARD_CLANTAG_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_CLAN_TAG_DESC" ) CLEAR_ITEM_NEW( FEATURE_CLAN_TAG ), - CLEARUIHINT, - !IS_ITEM_LOCKED( FEATURE_CLAN_TAG ), PLAYER_CARD_RECT_STATE( Top, CHOICE_RECT( 1 ) ) ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 2, "@MPUI_CLAN_TAG_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_CLAN_TAG ) ), - CLEARUIHINT, - IS_ITEM_LOCKED( FEATURE_CLAN_TAG ), ; ) - CHOICE_NEWICON_VIS( 2, "menu_mp_lobby_new", when( IS_ITEM_NEW( FEATURE_CLAN_TAG ) ) ) - CHOICE_LOCKEDICON_VIS( 2, "menu_mp_lobby_locked", when( IS_ITEM_LOCKED( FEATURE_CLAN_TAG ) ) ) - - #define CHALLENGES_BUTTON_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - open menu_playercard_challenges; - - // CHALLENGES BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 4, "@MENU_CHALLENGES_CAPS", - CHALLENGES_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_CHALLENGES_DESC" ) CLEAR_ITEM_NEW( FEATURE_CHALLENGES ), - CLEARUIHINT, - !CHALLENGES_LOCKED, ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 4, "@MENU_CHALLENGES_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_CHALLENGES ) ), - CLEARUIHINT, - CHALLENGES_LOCKED, ; ) - CHOICE_NEWICON_VIS( 4, "menu_mp_lobby_new", when( ANY_NEW_CHALLENGES ) ) - CHOICE_LOCKEDICON_VIS( 4, "menu_mp_lobby_locked", when( CHALLENGES_LOCKED ) ) - - #define COMBAT_RECORD_BUTTON_ACTION \ - setdvar ui_showFriendsCombatRecord 0; \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - open menu_cr_career_summary; - - // COMBAT RECORD BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 5, "@MENU_COMBAT_RECORD_CAPS", - COMBAT_RECORD_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_COMBAT_RECORD_DESC" ) CLEAR_ITEM_NEW( FEATURE_COMBAT_RECORD ), - CLEARUIHINT, - !IS_ITEM_LOCKED( FEATURE_COMBAT_RECORD ), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 5, "@MENU_COMBAT_RECORD_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_COMBAT_RECORD ) ), - CLEARUIHINT, - IS_ITEM_LOCKED( FEATURE_COMBAT_RECORD ), ; ) - CHOICE_NEWICON_VIS( 5, "menu_mp_lobby_new", when( IS_ITEM_NEW( FEATURE_COMBAT_RECORD ) ) ) - CHOICE_LOCKEDICON_VIS( 5, "menu_mp_lobby_locked", when( IS_ITEM_LOCKED( FEATURE_COMBAT_RECORD ) ) ) - - #define LEADERBOARDS_BUTTON_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - setdvar lb_prestige 0; \ - execnow changemenuopenslidedirection menu_playercards_lb MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - open menu_playercards_lb; - - // LEADERBOARDS BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 6, "@MPUI_LEADERBOARDS_CAPS", - LEADERBOARDS_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_LEADERBOARDS_DESC" ), - CLEARUIHINT, - 1, ; ) - - #define FILE_SHARE_BUTTON_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - open menu_fileshare_myshare; - - // FILE SHARE BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 8, "@MENU_FILESHARE_MYSHARE_CAPS", - FILE_SHARE_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_FILE_SHARE_DESC" ), - CLEARUIHINT, - 1, ; ) - - #define RECENT_FILMS_BUTTON_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - open menu_fileshare_myrecentgames; - - // RECENT FILMS BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 9, "@MENU_FILESHARE_MYRECENTGAMES_CAPS", - RECENT_FILMS_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_MY_RECENT_GAMES_DESC" ), - CLEARUIHINT, - 1, ; ) - - #define COMMUNITY_ACTION \ - if ( canShowContentFromUser( 0 ) ) \ - { \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ) ; \ - close self; \ - open menu_fileshare_community; \ - } \ - else \ - { \ - open menu_community_viewwarning; \ - } - - // COMMUNITY BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 10, "@MENU_FILESHARE_COMMUNITY_CAPS", - COMMUNITY_ACTION, - SET_HINT_TEXT( "@MPUI_COMMUNITY_DESC" ), - CLEARUIHINT, - 1, ; ) - - // PRESTIGE BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 12, "@MPUI_PRESTIGE_MODE_CAPS", - open prestige_reset1;, - SET_HINT_TEXT( "@MPUI_PRESTIGE_MODE_DESC" ), - exec "statsetbyname hasprestiged 1"; CLEARUIHINT, - PRESTIGE_AVAIL, ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 12, "@MPUI_PRESTIGE_MODE_CAPS", - SET_HINT_TEXT( "@MPUI_DESC_PRESTIGE2" ), - CLEARUIHINT, - PRESTIGE_AVAIL==0 && PRESTIGE_FINISH==0, ; ) - CHOICE_NEWICON_VIS( 12, "menu_mp_lobby_new", when( PRESTIGE_AVAIL && GetStatByName( "HASPRESTIGED" ) == 0 ) ) - CHOICE_LOCKEDICON_VIS( 12, "menu_mp_lobby_locked", when( PRESTIGE_AVAIL == 0 && PRESTIGE_FINISH == 0 ) ) - - PLAYER_CARD_COMMON_ITEMS - -#define RANKTABLE_COL_MINXP 2 -#define RANKTABLE_COL_XP_TO_NEXT 3 -#define RANKTABLE_COL_MAX_XP 7 - -#define XP_BAR_X (CHOICE_X_START+55) -#define XP_BAR_Y (FRAME_DEFAULT_HEIGHT/2-32) -#define XP_BAR_BG_WIDTH (FRAME_DEFAULT_WIDTH-135) -#define XP_BAR_HEIGHT 20 - -#define XP_TO_NEXT_RANK int( tableLookup( "mp/rankTable.csv", 0, PLAYER_RANK, RANKTABLE_COL_XP_TO_NEXT ) ) -#define MINXP_FOR_CURR_RANK int( tableLookup( "mp/rankTable.csv", 0, PLAYER_RANK, RANKTABLE_COL_MINXP ) ) -#define NEXT_LEVEL ( tablelookup( "mp/ranktable.csv", 0, getDStat( "PlayerStatsList", "RANK" ) + 1, 14 ) ) - -#define XP_BAR_WIDTH ( ( ( PLAYER_RANKXP - MINXP_FOR_CURR_RANK ) / XP_TO_NEXT_RANK ) * XP_BAR_BG_WIDTH ) - -#define XP_NEEDED_TO_LEVEL_UP \ - locString( "MPUI_AAR_XP_NEEDED_CAPS",int( tableLookup( "mp/rankTable.csv", 0, PLAYER_RANK, RANKTABLE_COL_MAX_XP ) - PLAYER_RANKXP ) ) - - /* BACKGROUND FOR XP BAR */ - PREPROC_SHADER_DRAW_VIS_EX( XP_BAR_X XP_BAR_Y XP_BAR_BG_WIDTH XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "white", BG_BACKCOLOR, - when( CAN_RANK_UP ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( XP_BAR_X XP_BAR_Y XP_BAR_BG_WIDTH XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "menu_mp_bar_shadow", 1 1 1 0.2, - when( CAN_RANK_UP ), ; ) - /* XP BAR */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( XP_BAR_X, - XP_BAR_Y, - ( XP_BAR_WIDTH ), - XP_BAR_HEIGHT, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "menu_mp_combatrecord_bar", BAR_COLOR, - when( CAN_RANK_UP ), - ; ) - /* Tiny arrow at xp bar end */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( XP_BAR_X + XP_BAR_WIDTH - 5 ), - (XP_BAR_Y+XP_BAR_HEIGHT), - 10, - 10, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "ui_arrow_right", BAR_COLOR, - when( CAN_RANK_UP ), - rotation -90; ) - /* Label for "NEXT LEVEL" */ - PREPROC_TEXT_DRAW( (XP_BAR_X-55) (XP_BAR_Y+4) 10 XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "@MPUI_NEXT_LEVEL_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, CHOICE_TEXTCOLOR ) - /* value for XP NEEDED to next level */ - PREPROC_TEXT_DRAW_VIS( (XP_BAR_X+5) (XP_BAR_Y+4) 10 XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, XP_NEEDED_TO_LEVEL_UP, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP ) ) - /* next level */ - PREPROC_TEXT_DRAW_VIS( (XP_BAR_X+XP_BAR_BG_WIDTH+3) (XP_BAR_Y+2) 17 17 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, int( NEXT_LEVEL ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP && PRESTIGE_NEXT==0 ) ) - PREPROC_TEXT_DRAW_VIS( (XP_BAR_X+XP_BAR_BG_WIDTH+3) (XP_BAR_Y+2) 17 17 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "1", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP && PRESTIGE_NEXT ) ) - /* next level rank icon */ - RANK_ICON_ADV( (XP_BAR_X+XP_BAR_BG_WIDTH+6+getTextWidth( NEXT_LEVEL, CHOICE_TEXTFONT, TEXTSIZE_DEFAULT )), (XP_BAR_Y+2), HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - tablelookup( "mp/rankIconTable.csv", 0, PLAYER_RANK+1, PLAYER_PRESTIGE+1 ), - when( CAN_RANK_UP && PRESTIGE_NEXT==0 ) ) - RANK_ICON_ADV( (XP_BAR_X+XP_BAR_BG_WIDTH+6+getTextWidth( "1", CHOICE_TEXTFONT, TEXTSIZE_DEFAULT )), (XP_BAR_Y+2), HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - tablelookup( "mp/rankIconTable.csv", 0, 0, PLAYER_PRESTIGE+2 ), - when( CAN_RANK_UP && PRESTIGE_NEXT ) ) - - HINT_TEXT_ALL( 13, CHOICE_X_START, 8, CHOICE_SIZE_X, dvarString( ui_hint_text ), 1 1 1 1, dvarBool( ui_show_arrow ), ; ) - -#ifdef CONSOLE - NEW_FRAME_BACK_BUTTON_ACTION( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, ON_ESC_ACTION ; ) -#else - NEW_FRAME_BACK_BUTTON_ACTION( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, ON_ESC_ACTION ; ) -#endif - - #include "ui/safearea.menu" - } - - menuDef - { - name menu_playercard_self_basictraining - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - control MENU_CONTROL_OPENER - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - onOpen - { - if( dvarbool(ui_selectlobby) ) - { - activateBlur; - } - play uin_navigation_menu_lg_open; - if( !dvarBool( ui_playercard_self_basictraining_open ) ) - { activateBlur; setdvar ui_playercard_self_basictraining_open "1"; } - } - onFocus { - if( !dvarbool(ui_selectlobby) ) - { - activateBlur; - } - } - onClose - {} - - #undef ON_ESC_ACTION - #define ON_ESC_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self_basictraining, MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM, MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM ) ; \ - CLEARUIHINT; \ - deactivateBlur; \ - play uin_navigation_menu_lg_close; \ - close self; \ - setdvar ui_playercard_self_basictraining_open 0; - - onESC - { - ON_ESC_ACTION - } - - FRAME_DEFAULT - FRAME_TITLE_DEFAULT( "@MENU_MY_PLAYERCARD_CAPS", 1 ) - - PLAYER_INFO_VIS( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, 1 ) - - // This is a dummy itemDef to disable controls. - // Used when animating. - itemDef - { - name dummyButton - type ITEM_TYPE_BUTTON_NO_TEXT - rect 0 0 0 0 - visible when( localVarString( "ui_disable_controls" ) == 1 ); - - execKeyInt APAD_UP {} - execKeyInt DPAD_UP {} - execKeyInt APAD_DOWN {} - execKeyInt DPAD_DOWN {} - execKeyInt APAD_LEFT {} - execKeyInt DPAD_LEFT {} - execKeyInt APAD_RIGHT {} - execKeyInt DPAD_RIGHT {} - } - - // This is a dummy itemDef that acts as the central hub for - // animation control in the new playercard - itemDef - { - name anim_controller - style WINDOW_STYLE_SHADER - rect 0 0 0 0 - visible 1 - decoration - - // Open dropdown - state - { - name OpenDropDownList - onEnter - { - execnow ui_animate menu_playercard_self_basictraining * Transparent PLAYER_CARD_SELECTION_FADE_TIME; - execnow ui_animate menu_playercard_self_basictraining (PLAYER_CARD_BUTTON_NAME+localVarInt(ui_playercardButton)) Default 0; - execnow ui_animate menu_playercard_self_basictraining anim_controller OpenDropDownList2 PLAYER_CARD_SELECTION_FADE_TIME; - } - } - state - { - name OpenDropDownList2 - onEnter - { - execnow ui_animate menu_playercard_self_basictraining (PLAYER_CARD_BUTTON_NAME+localVarInt(ui_playercardButton)) Top PLAYER_CARD_SELECTION_SLIDE_TIME; - execnow ui_animate menu_playercard_self_basictraining anim_controller OpenDropDownList3 PLAYER_CARD_SELECTION_SLIDE_TIME; - } - } - state - { - name OpenDropDownList3 - onEnter - { - execnow ui_animate menu_playercard_self_basictraining (PLAYER_CARD_DROPDOWN_LIST_NAME+localVarInt(ui_playercardButton)) Unrolled PLAYER_CARD_SELECTION_UNROLL_TIME; - play uin_navigation_menu_sm_open; - exec updateListboxPos menu_playercard_self_basictraining; - } - } - - // Close dropdown - state - { - name CloseDropDownList - onEnter - { - setLocalVarInt ui_disable_controls 1; - setFocus dummyButton; - if ( localVarString( ui_playercardListboxCloseOverride ) != "" ) - { - execnow ui_animate menu_playercard_self_basictraining (anim_controller) (localVarString( ui_playercardListboxCloseOverride )) 0; - } - else - { - execnow ui_animate menu_playercard_self_basictraining (PLAYER_CARD_DROPDOWN_LIST_NAME+localVarInt(ui_playercardButton)) Default PLAYER_CARD_SELECTION_UNROLL_TIME; - execnow ui_animate menu_playercard_self_basictraining anim_controller CloseDropDownList2 (PLAYER_CARD_SELECTION_UNROLL_TIME+30); - play uin_navigation_menu_sm_close; - } - } - } - state - { - name CloseDropDownList2 - onEnter - { - execnow "set ui_in_player_card_popup 0"; - execnow ui_animate menu_playercard_self_basictraining (PLAYER_CARD_BUTTON_NAME+localVarInt(ui_playercardButton)) Default PLAYER_CARD_SELECTION_SLIDE_TIME; - execnow ui_animate menu_playercard_self_basictraining anim_controller CloseDropDownList3 (PLAYER_CARD_SELECTION_SLIDE_TIME+30); - } - } - state - { - name CloseDropDownList3 - onEnter - { - execnow focusItem (PLAYER_CARD_BUTTON_NAME+localVarInt(ui_playercardButton)); - setLocalVarInt ui_disable_controls 0; - execnow ui_animate menu_playercard_self_basictraining * Default PLAYER_CARD_SELECTION_FADE_TIME; - } - } - } - - // EMBLEM EDITOR BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 1, "@MENU_EMBLEM_EDITOR_CAPS", - EMBLEM_EDITOR_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_EMBLEM_EDITOR_DESC" ) CLEAR_ITEM_NEW( FEATURE_EMBLEM ), - CLEARUIHINT, - !IS_ITEM_LOCKED( FEATURE_EMBLEM ), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 1, "@MENU_EMBLEM_EDITOR_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_EMBLEM ) ), - CLEARUIHINT, - IS_ITEM_LOCKED( FEATURE_EMBLEM ), ; ) - CHOICE_NEWICON_VIS( 1, "menu_mp_lobby_new", when( IS_ITEM_NEW( FEATURE_EMBLEM ) ) ) - CHOICE_LOCKEDICON_VIS( 1, "menu_mp_lobby_locked", when( IS_ITEM_LOCKED( FEATURE_EMBLEM ) ) ) - - // CLAN TAG BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 2, "@MPUI_CLAN_TAG_CAPS", - setdvar lb_prestige 0; PLAYER_CARD_CLANTAG_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_CLAN_TAG_DESC" ) CLEAR_ITEM_NEW( FEATURE_CLAN_TAG ), - CLEARUIHINT, - !IS_ITEM_LOCKED( FEATURE_CLAN_TAG ), PLAYER_CARD_RECT_STATE( Top, CHOICE_RECT( 1 ) ) ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 2, "@MPUI_CLAN_TAG_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_CLAN_TAG ) ), - CLEARUIHINT, - IS_ITEM_LOCKED( FEATURE_CLAN_TAG ), ; ) - CHOICE_NEWICON_VIS( 2, "menu_mp_lobby_new", when( IS_ITEM_NEW( FEATURE_CLAN_TAG ) ) ) - CHOICE_LOCKEDICON_VIS( 2, "menu_mp_lobby_locked", when( IS_ITEM_LOCKED( FEATURE_CLAN_TAG ) ) ) - -#undef CHALLENGES_BUTTON_ACTION -#define CHALLENGES_BUTTON_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self_basictraining, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - open menu_playercard_challenges; - - // CHALLENGES BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 4, "@MENU_CHALLENGES_CAPS", - CHALLENGES_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_CHALLENGES_DESC" ) CLEAR_ITEM_NEW( FEATURE_CHALLENGES ), - CLEARUIHINT, - !CHALLENGES_LOCKED, ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 4, "@MENU_CHALLENGES_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_CHALLENGES ) ), - CLEARUIHINT, - CHALLENGES_LOCKED, ; ) - CHOICE_NEWICON_VIS( 4, "menu_mp_lobby_new", when( ANY_NEW_CHALLENGES ) ) - CHOICE_LOCKEDICON_VIS( 4, "menu_mp_lobby_locked", when( CHALLENGES_LOCKED ) ) - -#undef COMBAT_RECORD_BUTTON_ACTION -#define COMBAT_RECORD_BUTTON_ACTION \ - setdvar ui_showFriendsCombatRecord 0; \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self_basictraining, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - open menu_cr_career_summary; - - // COMBAT RECORD BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 5, "@MENU_COMBAT_RECORD_CAPS", - COMBAT_RECORD_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_COMBAT_RECORD_DESC" ) CLEAR_ITEM_NEW( FEATURE_COMBAT_RECORD ), - CLEARUIHINT, - !IS_ITEM_LOCKED( FEATURE_COMBAT_RECORD ), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 5, "@MENU_COMBAT_RECORD_CAPS", - SET_HINT_TEXT( GET_UNLOCK_LEVEL_STRING( FEATURE_COMBAT_RECORD ) ), - CLEARUIHINT, - IS_ITEM_LOCKED( FEATURE_COMBAT_RECORD ), ; ) - CHOICE_NEWICON_VIS( 5, "menu_mp_lobby_new", when( IS_ITEM_NEW( FEATURE_COMBAT_RECORD ) ) ) - CHOICE_LOCKEDICON_VIS( 5, "menu_mp_lobby_locked", when( IS_ITEM_LOCKED( FEATURE_COMBAT_RECORD ) ) ) - - - // LEADERBOARDS BUTTON - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 6, "@MPUI_LEADERBOARDS_CAPS", - SET_HINT_TEXT( "@MPUI_NOT_APPLICABLE_IN_COMBAT_TRAINING" ), - CLEARUIHINT, - 1, ; ) - CHOICE_LOCKEDICON_VIS( 6, "menu_mp_lobby_locked", 1 ) - -#undef FILE_SHARE_BUTTON_ACTION -#define FILE_SHARE_BUTTON_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self_basictraining, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - open menu_fileshare_myshare; - - // FILE SHARE BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 8, "@MENU_FILESHARE_MYSHARE_CAPS", - FILE_SHARE_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_FILE_SHARE_DESC" ), - CLEARUIHINT, - 1, ; ) - -#undef RECENT_FILMS_BUTTON_ACTION -#define RECENT_FILMS_BUTTON_ACTION \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self_basictraining, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ); \ - close self; \ - open menu_fileshare_myrecentgames; - - // RECENT FILMS BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 9, "@MENU_FILESHARE_MYRECENTGAMES_CAPS", - RECENT_FILMS_BUTTON_ACTION, - SET_HINT_TEXT( "@MPUI_MY_RECENT_GAMES_DESC" ), - CLEARUIHINT, - 1, ; ) -#undef COMMUNITY_ACTION -#define COMMUNITY_ACTION \ - if ( canShowContentFromUser( 0 ) ) \ - { \ - CHANGE_MENU_SLIDE_DIRECTION( menu_playercard_self_basictraining, MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT, MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT ) ; \ - close self; \ - open menu_fileshare_community; \ - } \ - else \ - { \ - open menu_community_viewwarning; \ - } - - // COMMUNITY BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 10, "@MENU_FILESHARE_COMMUNITY_CAPS", - COMMUNITY_ACTION, - SET_HINT_TEXT( "@MPUI_COMMUNITY_DESC" ), - CLEARUIHINT, - 1, ; ) - // PRESTIGE BUTTON - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 12, "@MPUI_PRESTIGE_MODE_CAPS", - open prestige_reset1;, - SET_HINT_TEXT( "@MPUI_PRESTIGE_MODE_DESC" ), - exec "statsetbyname hasprestiged 1"; CLEARUIHINT, - PRESTIGE_AVAIL, ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 12, "@MPUI_PRESTIGE_MODE_CAPS", - SET_HINT_TEXT( "@MPUI_DESC_PRESTIGE2" ), - CLEARUIHINT, - PRESTIGE_AVAIL==0 && PRESTIGE_FINISH==0, ; ) - CHOICE_NEWICON_VIS( 12, "menu_mp_lobby_new", when( PRESTIGE_AVAIL && GetStatByName( "HASPRESTIGED" ) == 0 ) ) - CHOICE_LOCKEDICON_VIS( 12, "menu_mp_lobby_locked", when( PRESTIGE_AVAIL == 0 && PRESTIGE_FINISH == 0 ) ) - - PLAYER_CARD_COMMON_ITEMS - - /* BACKGROUND FOR XP BAR */ - PREPROC_SHADER_DRAW_VIS_EX( XP_BAR_X XP_BAR_Y XP_BAR_BG_WIDTH XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "white", BG_BACKCOLOR, - when( CAN_RANK_UP ), ; ) - PREPROC_SHADER_DRAW_VIS_EX( XP_BAR_X XP_BAR_Y XP_BAR_BG_WIDTH XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "menu_mp_bar_shadow", 1 1 1 0.2, - when( CAN_RANK_UP ), ; ) - /* XP BAR */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( XP_BAR_X, - XP_BAR_Y, - ( XP_BAR_WIDTH ), - XP_BAR_HEIGHT, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "menu_mp_combatrecord_bar", BAR_COLOR, - when( CAN_RANK_UP ), - ; ) - /* Tiny arrow at xp bar end */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( XP_BAR_X + XP_BAR_WIDTH - 5 ), - (XP_BAR_Y+XP_BAR_HEIGHT), - 10, - 10, - CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, - "ui_arrow_right", BAR_COLOR, - 1, - rotation -90; ) - /* Label for "NEXT LEVEL" */ - PREPROC_TEXT_DRAW( (XP_BAR_X-55) (XP_BAR_Y+4) 10 XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "@MPUI_NEXT_LEVEL_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, CHOICE_TEXTCOLOR ) - /* value for XP NEEDED to next level */ - PREPROC_TEXT_DRAW_VIS( (XP_BAR_X+5) (XP_BAR_Y+4) 10 XP_BAR_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, XP_NEEDED_TO_LEVEL_UP, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP ) ) - /* next level */ - PREPROC_TEXT_DRAW_VIS( (XP_BAR_X+XP_BAR_BG_WIDTH+3) (XP_BAR_Y+2) 17 17 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, int( NEXT_LEVEL ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP && PRESTIGE_NEXT==0 ) ) - PREPROC_TEXT_DRAW_VIS( (XP_BAR_X+XP_BAR_BG_WIDTH+3) (XP_BAR_Y+2) 17 17 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, "1", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, when( CAN_RANK_UP && PRESTIGE_NEXT ) ) - /* next level rank icon */ - RANK_ICON_ADV( (XP_BAR_X+XP_BAR_BG_WIDTH+6+getTextWidth( NEXT_LEVEL, CHOICE_TEXTFONT, TEXTSIZE_DEFAULT )), (XP_BAR_Y+2), HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - tablelookup( "mp/rankIconTable.csv", 0, PLAYER_RANK+1, PLAYER_PRESTIGE+1 ), - when( CAN_RANK_UP && PRESTIGE_NEXT==0 ) ) - RANK_ICON_ADV( (XP_BAR_X+XP_BAR_BG_WIDTH+6+getTextWidth( "1", CHOICE_TEXTFONT, TEXTSIZE_DEFAULT )), (XP_BAR_Y+2), HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, - tablelookup( "mp/rankIconTable.csv", 0, 0, PLAYER_PRESTIGE+2 ), - when( CAN_RANK_UP && PRESTIGE_NEXT ) ) - - - HINT_TEXT_ALL( 13, CHOICE_X_START, 8, CHOICE_SIZE_X, dvarString( ui_hint_text ), 1 1 1 1, dvarBool( ui_show_arrow ), ; ) - -#ifdef CONSOLE - NEW_FRAME_BACK_BUTTON( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT ) -#else - NEW_FRAME_BACK_BUTTON_ACTION( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, ON_ESC_ACTION ) -#endif - - #include "ui/safearea.menu" - } - - -#define CAN_JOIN_SESSION \ - ( FRIEND_JOINABLE == IsPlayerJoinable( dvarString( "selectedPlayerXuid" ) ) ) - -#define CAN_AUTOJOIN_SESSION \ - ( FRIEND_AUTOJOINABLE == IsPlayerJoinable( dvarString( "selectedPlayerXuid" ) ) ) - -#define CAN_INVITE_TO_GAME \ - ( IsPlayerInvitable( dvarString( "selectedPlayerXuid" ) ) && ( inLobby() || inPrivateParty() ) ) - -#define CAN_SEND_FRIEND_REQUEST \ - ( getxuid() != dvarstring( "selectedPlayerXuid" ) && !isfriendfromxuid() ) - -#define CAN_MUTE_PLAYER \ - ( getMutedStatus(dvarString( "selectedPlayerXuid" ) ) == 0 ) - -#define COMBAT_RECORD_LOCKED \ - ( GetDisplayLevelByXuid( dvarString( "selectedPlayerXuid" ) ) <= GetItemUnlockLevel( GetItemIndex( FEATURE_COMBAT_RECORD ) ) ) - -#define CAN_KICK_PLAYER \ - ( ( ( !InLobby() && !IsInGame() ) || \ - dvarBool( xblive_privatematch ) || dvarBool( xblive_theater ) || dvarBool( xblive_basictraining ) ) \ - && ( dvarBool( party_host ) || issuperuser() ) && !dvarBool( party_iamhost ) ) - -#define IS_IN_GAME \ - ( IsInGame() ) - -#undef ON_ESC_ACTION -#define ON_ESC_ACTION \ - if( dvarBool(ui_friendsListOpen) ) \ - { \ - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow showmenu menu_friends; \ - } \ - elseif( dvarBool(ui_playerListOpen) ) \ - { \ - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow showmenu menu_players; \ - } \ - elseif( dvarBool(ui_xboxLivePartyListOpen) ) \ - { \ - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow openmenu menu_xboxLiveParty; \ - } \ - elseif( dvarBool(ui_leaderboardOpen) ) \ - { \ - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow openmenu (dvarString("leaderboard_menu_name")); \ - } \ - elseif( dvarBool(ui_ingamePlayersOpen) ) \ - { \ - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow showmenu players; \ - } \ - elseif( dvarBool(ui_aarScoreboardOpen) ) \ - { \ - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow showmenu menu_aar_scoreboard; \ - } \ - elseif( dvarBool(ui_aarWagerScoreboardOpen) ) \ - { \ - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow showmenu menu_aar_wager_scoreboard; \ - } \ - elseif( dvarBool(ui_nemesisPlayercardOpen) ) \ - { \ - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - execnow openmenu menu_aar_summary; \ - execNow set ui_nemesisPlayercardOpen 0; \ - } \ - else \ - { \ - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM; \ - execnow changemenuopenslidedirection menu_playercard MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM; \ - deactivateBlur; \ - } \ - setDvar ui_clearFeederWithoutReset "0"; \ - play uin_navigation_menu_lg_close; \ - close menu_playercard; \ - CLEARUIHINT; - -#undef CHOICE_SIZE_Y -#define CHOICE_SIZE_Y (NEW_FRAME_BUTTON_HEIGHT+2) -#undef CHOICE_X_START -#define CHOICE_X_START (FRAME_CHOICE_X_START-1) -#undef CHOICE_Y_START -#define CHOICE_Y_START (FRAME_CHOICE_Y_START-4) - - menuDef - { - name menu_playercard - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - control MENU_CONTROL_OPENER - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - onOpen - { - if( dvarbool(ui_selectlobby) ) - { - activateBlur; - } - CLEARUIHINT; - play uin_navigation_menu_lg_open; - execNow set ui_playercardOpen 1; - execnow readFileShare; - // This tests if we have to reset the cursor position ( ie. button focus on menu open ) - if( dvarBool( "ui_clearFeederWithoutReset" ) ) - { - execNow raiseFeederEvent ClearWithoutReset; - } - else - { - execNow raiseFeederEvent Clear; - setDvar ui_clearFeederWithoutReset "1"; - } - execNow raiseFeederEvent Populate; - } - onClose - { - play CHOICE_FOCUS_SOUND; - execNow set ui_playercardOpen 0; - } - onFocus { - if( !dvarbool(ui_selectlobby) ) - { - activateBlur; - } - } - onESC - { - ON_ESC_ACTION - } - - FRAME_DEFAULT - FRAME_TITLE_DEFAULT( GetPlayerCardTitle( dvarString("selectedFriendName") ), 1 ) - - FRIEND_INFO_VIS( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, 1 ) - - HINT_TEXT_ALL( 13, CHOICE_X_START, 8, CHOICE_SIZE_X, dvarString( ui_hint_text ), 1 1 1 1, dvarBool( ui_show_arrow ), ; ) - -#ifdef PC - #undef CHOICE_TEXTSIZE - #define CHOICE_TEXTSIZE TEXTSIZE_SMALL - #undef CHOICE_TEXTFONT - #define CHOICE_TEXTFONT UI_FONT_NORMAL - #undef CHOICE_TEXTSTYLE - #define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL -#endif //#ifdef PC - - itemDef - { - DYNAMIC_MENU_COMMON_FIELDS - backgroundItemListbox "white" // omit this if you don't want button background transparency - rect CHOICE_X_START CHOICE_Y_START CHOICE_SIZE_X 275 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - - menuItemsDef - { - maxRows 15 - - // THESE INCLUDE BACKGROUND, HIGHLIGHT AND SELECT BUTTON. DO NOT OMIT THESE ( THE BUTTONS MAY NOT DISPLAY PROPERLY BECAUSE OF COLUMN MISMATCH ). - DYNAMIC_MENU_COMMON_COLUMNS - - menuColDef - { - type MENU_ITEM_TYPE_LOC_TEXT - rect 0 0 CHOICE_SIZE_X CHOICE_SIZE_Y ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - maxChars 50 - } - } - - onEvent InviteToGame { - if( CAN_INVITE_TO_GAME ) - { - if( dvarBool( ui_friendsListOpen ) ) - { - execNow sendInvite ( dvarstring( selectedPlayerXuid ) ) 0; - } - elseif( dvarBool( ui_playerListOpen ) || dvarBool( ui_ingamePlayersOpen ) ) - { - execNow sendInvite ( dvarstring( selectedPlayerXuid ) ) 1; - } - else - { - execNow sendInvite ( dvarstring( selectedPlayerXuid ) ) 0; - } - } - - } - onEvent SendFriendRequest { if( CAN_SEND_FRIEND_REQUEST ) - { - execNow xaddfriend ( dvarstring( selectedPlayerXuid ) ); - } - } - onEvent CombatRecord { - if( !COMBAT_RECORD_LOCKED ) - { - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; - execnow changemenuopenslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; - if( getxuid() == dvarstring( selectedPlayerXuid ) ) - { - close self; - setdvar ui_showFriendsCombatRecord "0"; - open menu_cr_career_summary; - } - else - { - setdvar ui_showFriendsCombatRecord "1"; - execnow getServiceRecord ( dvarstring( selectedPlayerXuid ) ); - } - } - } - onEvent JoinSessionPlayers { if( CAN_JOIN_SESSION ) - { - if( IsInGame() ) - { - setDvar ui_keep_friends_bg_up "0"; - execnow set ui_show_friends_list_bg 0; - execnow ui_animate class friends_list_bg default 20; - } - exec JoinsessionInProgress ( dvarString( selectedPlayerXuid ) ); - showmenu menu_players; - close self; - setDvar ui_playerListOpen "0"; - setdvar invite_visible "1"; - exec set menu_xboxlive_buttons_visible 1; - close menu_players; - } - } - onEvent JoinSessionFriends { - if ( CAN_AUTOJOIN_SESSION ) - { - execNow joinSessionInProgress ( dvarString( selectedPlayerXuid ) ); - } - elseif ( CAN_JOIN_SESSION ) - { - if( IsInGame() ) - { - setDvar ui_keep_friends_bg_up "0"; - execnow set ui_show_friends_list_bg 0; - execnow ui_animate class friends_list_bg default 20; - } - execNow JoinsessionInProgress ( dvarstring( selectedPlayerXuid ) ); - showmenu menu_friends; - closeImmediate self; - setDvar ui_friendsListOpen "0"; - setdvar invite_visible "1"; - exec set menu_xboxlive_buttons_visible 1; - close menu_friends; - } - } - onEvent ToggleMute { exec mp_toggleMute( dvarString( selectedPlayerXuid ) ) } - onEvent KickPlayer { close menu_playercard_lobby; getKickPlayerQuestion; } - onEvent ChangeCombatRecordHint { - if( !COMBAT_RECORD_LOCKED ) - { - SET_HINT_TEXT( "@MPUI_COMBAT_RECORD_DESC" ) - } - else - { - SET_HINT_TEXT( ( GetCombatRecordLockedString(dvarString("selectedFriendName")) ) ) - } - } - onEvent RecentGames { - if( canShowContentFromUser( dvarstring( "selectedPlayerXuid" ) ) ) - { - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; - execnow changemenuopenslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; - close self; - open menu_fileshare_recentgames; - } - else - { - open menu_recentgames_viewwarning; - } - } - onEvent ReportUser { - execnow openmenu menu_reportuser; - } - onEvent FileShare - { - if( canShowContentFromUser( dvarstring( "selectedPlayerXuid" ) ) ) - { - execnow changemenucloseslidedirection menu_playercard MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; - execnow changemenuopenslidedirection menu_playercard MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; - close self; - open menu_fileshare_share; - } - else - { - open menu_fileshare_viewwarning; - } - } - onEvent ClearHint { - CLEARUIHINT; - } - onEvent Clear { execNow clearFeeder; } - onEvent ClearWithoutReset { execNow clearFeederWithoutResetCursor; } - // Adding buttons to the menu according to the conditions specified. - onEvent Populate - { - if( isInGame() ) /* playercard in-game */ - { - if( dvarBool( ui_friendsListOpen ) ) - { //onAction event //onFocus Event //disable Button Condition //Text on button - execNow addToFeederExtended InviteToGame ClearHint (!CAN_INVITE_TO_GAME) MENU_INVITE_TO_GAME_CAPS; - execNow addToFeederExtended JoinSessionFriends ClearHint (!CAN_JOIN_SESSION) MENU_JOIN_IN_PROGRESS_CAPS; - } - elseif( dvarBool( ui_playerListOpen )) - { - execNow addToFeederExtended InviteToGame ClearHint (!CAN_INVITE_TO_GAME) MENU_INVITE_TO_GAME_CAPS; - execNow addToFeederExtended JoinSessionPlayers ClearHint (!CAN_JOIN_SESSION) MENU_JOIN_IN_PROGRESS_CAPS; - } - elseif( dvarBool( ui_ingamePlayersOpen ) || dvarBool(ui_aarScoreboardOpen) || dvarBool(ui_aarWagerScoreboardOpen) ) - { - execNow addToFeederExtended SendFriendRequest ClearHint (!CAN_SEND_FRIEND_REQUEST) MENU_SEND_FRIEND_REQUEST_CAPS; - execNow if ( CAN_MUTE_PLAYER ) addToFeederExtended ToggleMute ClearHint 0 MENU_MUTE_CAPS; - execNow if ( !CAN_MUTE_PLAYER ) addToFeederExtended ToggleMute ClearHint 0 MENU_UNMUTE_CAPS; - execNow if ( CAN_KICK_PLAYER ) addToFeederExtended KickPlayer ClearHint 0 MENU_KICK_PLAYER_CAPS; -#ifndef PC - execNow addToFeeder noop ""; -#endif //#ifndef PC - execNow addToFeederExtended ReportUser ClearHint 0 MENU_REPORT_USER_CAPS; - } - else - { - execNow addToFeederExtended SendFriendRequest ClearHint (!CAN_SEND_FRIEND_REQUEST) MENU_SEND_FRIEND_REQUEST_CAPS; - } - } - elseif( dvarBool( ui_playerListOpen ) || dvarBool( ui_xboxLivePartyListOpen ) ) /* playercard for anyone selected in the recently met player list */ - { - execNow addToFeederExtended SendFriendRequest ClearHint (!CAN_SEND_FRIEND_REQUEST) MENU_SEND_FRIEND_REQUEST_CAPS; - execNow addToFeederExtended InviteToGame ClearHint (!CAN_INVITE_TO_GAME) MENU_INVITE_TO_GAME_CAPS; -#ifndef PC - execNow addToFeeder noop ""; -#endif //#ifndef PC - execNow addToFeederExtended CombatRecord ChangeCombatRecordHint COMBAT_RECORD_LOCKED MENU_COMBAT_RECORD_CAPS; - execNow addToFeederExtended FileShare ClearHint 0 MENU_FILESHARE_CAPS; - execNow addToFeederExtended RecentGames ClearHint 0 MENU_FILESHARE_RECENTGAMES_CAPS; -#ifndef PC - execNow addToFeeder noop ""; -#endif //#ifndef PC - execNow addToFeederExtended ReportUser ClearHint 0 MENU_REPORT_USER_CAPS; - } - elseif( dvarBool( ui_friendsListOpen ) ) /* playercard for anyone selected in the friends list */ - { - execNow addToFeederExtended InviteToGame ClearHint (!CAN_INVITE_TO_GAME) MENU_INVITE_TO_GAME_CAPS; - - if ( CAN_AUTOJOIN_SESSION ) - { - execNow addToFeederExtended JoinSessionFriends ClearHint (!CAN_AUTOJOIN_SESSION) MENU_AUTOJOIN_CAPS; - } - else - { - execNow addToFeederExtended JoinSessionFriends ClearHint (!CAN_JOIN_SESSION) MENU_JOIN_IN_PROGRESS_CAPS; - } - -#ifndef PC - execNow addToFeeder noop ""; -#endif //#ifndef PC - execNow addToFeederExtended CombatRecord ChangeCombatRecordHint COMBAT_RECORD_LOCKED MENU_COMBAT_RECORD_CAPS; - execNow addToFeederExtended FileShare ClearHint 0 MENU_FILESHARE_CAPS; - execNow addToFeederExtended RecentGames ClearHint 0 MENU_FILESHARE_RECENTGAMES_CAPS; -#ifndef PC - execNow addToFeeder noop ""; -#endif //#ifndef PC - execNow addToFeederExtended ReportUser ClearHint 0 MENU_REPORT_USER_CAPS; - } - elseif( dvarBool( ui_leaderboardOpen ) || dvarbool( ui_nemesisPlayercardOpen ) ) /* playercard for anyone selected in the leaderboards or nemesis in the after action report */ - { - execNow addToFeederExtended SendFriendRequest ClearHint (!CAN_SEND_FRIEND_REQUEST) MENU_SEND_FRIEND_REQUEST_CAPS; - execNow addToFeederExtended InviteToGame ClearHint (!CAN_INVITE_TO_GAME) MENU_INVITE_TO_GAME_CAPS; -#ifndef PC - execNow addToFeeder noop ""; -#endif //#ifndef PC - execNow addToFeederExtended CombatRecord ChangeCombatRecordHint COMBAT_RECORD_LOCKED MENU_COMBAT_RECORD_CAPS; - execNow addToFeederExtended FileShare ClearHint 0 MENU_FILESHARE_CAPS; - execNow addToFeederExtended RecentGames ClearHint 0 MENU_FILESHARE_RECENTGAMES_CAPS; -#ifndef PC - execNow addToFeeder noop ""; -#endif //#ifndef PC - execNow addToFeederExtended ReportUser ClearHint 0 MENU_REPORT_USER_CAPS; - } - else /* playercard for anyone selected in lobby players list */ - { - execNow addToFeederExtended SendFriendRequest ClearHint (!CAN_SEND_FRIEND_REQUEST) MENU_SEND_FRIEND_REQUEST_CAPS; -#ifndef PC - execNow addToFeeder noop ""; -#endif //#ifndef PC - execNow addToFeederExtended CombatRecord ChangeCombatRecordHint COMBAT_RECORD_LOCKED MENU_COMBAT_RECORD_CAPS; - execNow addToFeederExtended FileShare ClearHint 0 MENU_FILESHARE_CAPS; - execNow addToFeederExtended RecentGames ClearHint 0 MENU_FILESHARE_RECENTGAMES_CAPS; -#ifndef PC - execNow addToFeeder noop ""; -#endif //#ifndef PC - execNow addToFeederExtended ReportUser ClearHint 0 MENU_REPORT_USER_CAPS; - - execNow if ( CAN_MUTE_PLAYER ) addToFeederExtended ToggleMute ClearHint 0 MENU_MUTE_CAPS; - execNow if ( !CAN_MUTE_PLAYER ) addToFeederExtended ToggleMute ClearHint 0 MENU_UNMUTE_CAPS; - execNow if ( CAN_KICK_PLAYER ) addToFeederExtended KickPlayer ClearHint 0 MENU_KICK_PLAYER_CAPS; - } - } - onfocus { play CHOICE_FOCUS_SOUND; DYNAMIC_MENU_INIT( menu_playercard ) } - onListboxSelectionChange { play CHOICE_FOCUS_SOUND; } - doubleclick { play CHOICE_FOCUS_SOUND; - execNow raiseFeederEvent; - - } - } - - FRIENDS_PLAYER_CARD_COMMON_ITEMS - -#ifdef CONSOLE - NEW_FRAME_BACK_BUTTON_ACTION( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, ON_ESC_ACTION ) -#else - NEW_FRAME_BACK_BUTTON_ACTION(FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, ON_ESC_ACTION ) -#endif - - #include "ui/safearea.menu" - } -} - -#include "ui_mp/popupstyle.inc" -#include "ui/choices_setup_popmenu.menu" - - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( unmute_error_popup_live, setFocus unmute_error_popup_live2;, ;, 1 ) - priority MENU_PRI_ONTOP - - SYSTEM_POPUP_TITLE_VIS( "@MENU_UNMUTE_ERROR", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_UNMUTE_ERROR_FROM_LIVE", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_CANCEL", close self, 1, name unmute_error_popup_live_2 ) -} - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 1 - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( unmute_error_popup_friends_only, ;, ;, 1 ) - priority MENU_PRI_ONTOP - - SYSTEM_POPUP_TITLE_VIS( "@MENU_UNMUTE_ERROR", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_UNMUTE_ERROR_FRIENDS_ONLY", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) -} - - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( unmute_error_popup_nobody, ;, ;, 1 ) - priority MENU_PRI_ONTOP - - SYSTEM_POPUP_TITLE_VIS( "@MENU_UNMUTE_ERROR", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@MENU_UNMUTE_ERROR_NOBODY", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) -} - - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_fileshare_viewwarning, ;, ;, 1 ) - priority MENU_PRI_ONTOP - - SYSTEM_POPUP_TITLE_VIS( "@MENU_FILESHARE_ACCESSERROR", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@PLATFORM_FILESHARE_ACCESSERROR_MSG", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) -} - - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_community_viewwarning, ;, ;, 1 ) - priority MENU_PRI_ONTOP - - SYSTEM_POPUP_TITLE_VIS( "@MENU_COMMUNITY_ACCESSERROR", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@PLATFORM_FILESHARE_ACCESSERROR_MSG", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) -} - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( menu_recentgames_viewwarning, ;, ;, 1 ) - priority MENU_PRI_ONTOP - - SYSTEM_POPUP_TITLE_VIS( "@MENU_RECENTGAMES_ACCESSERROR", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( "@PLATFORM_FILESHARE_ACCESSERROR_MSG", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", close self;, 1, ; ) -} - - - - -#undef POPUP_BUTTON_COUNT -#define POPUP_BUTTON_COUNT 5 - -//Report User Dialog -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( "menu_reportuser", ;, close self;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( locString( "@MENU_REPORT_USER_CAPS" ) + ":", 1 ) - SYSTEM_POPUP_SUBTITLE_VIS( dvarString( "selectedFriendName" ), 1 ) - - #define REPORT_USER( offence ) \ - execNow reportUser (dvarString("selectedPlayerXuid")) offence 1; \ - close self; - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 1, "@MENU_REPORT_USER_OFFENSIVE_CAPS", REPORT_USER( "offensive" ), setLocalVarString ui_info "@MENU_REPORT_USER_OFFENSIVE_MSG";, ;, 1, ; ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 2, "@MENU_REPORT_USER_OFFENSIVE_EMBLEM_CAPS", REPORT_USER( "offensive_emblem" ), setLocalVarString ui_info "@MENU_REPORT_USER_OFFENSIVE_EMBLEM_MSG";, ;, 1, ; ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 3, "@MENU_REPORT_USER_CHEATER_CAPS", REPORT_USER( "cheater" ), setLocalVarString ui_info "@MENU_REPORT_USER_CHEATER_MSG";, ;, 1, ; ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 4, "@MENU_REPORT_USER_BOOSTER_CAPS", REPORT_USER( "booster" ), setLocalVarString ui_info "@MENU_REPORT_USER_BOOSTER_MSG";, ;, 1, ; ) - - HINT_TEXT_ALL( 5, CHOICE_X_START, 0, CHOICE_SIZE_X, localVarString( ui_info ), 1 1 1 1, 1, ; ) - - SYSTEM_POPUP_BACK_BUTTON -} - diff --git a/mods/patch_mp/ui_mp/playercards_clantag.menu b/mods/patch_mp/ui_mp/playercards_clantag.menu deleted file mode 100644 index 7cd0804..0000000 --- a/mods/patch_mp/ui_mp/playercards_clantag.menu +++ /dev/null @@ -1,355 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui/frame.inc" -#include "ui_mp/menustyle.inc" -#include "ui_mp/overlaybg.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/popup_player_info.inc" -#include "ui_mp/stats_info.inc" - -#ifdef PC - #include "ui_mp/popupstyle.inc" - #include "ui/choices_setup_popmenu.menu" - - #undef POPUP_BUTTON_COUNT - #define POPUP_BUTTON_COUNT 3 - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( "pc_editclantag", setdvar ui_clantag_new dvarString( clanName ); setFocus nameEntry;, ;, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MPUI_EDIT_CLAN_TAG_CAPS", 1 ) - - itemDef - { - name nameEntry - TYPE ITEM_TYPE_ALPHANUMERICFIELD - text "@MENU_NAME1" - dvar "ui_clantag_new" - rect CHOICE_RECT( 1 ) - textaligny 2 - maxchars 4 - maxpaintchars 4 - textalign ITEM_ALIGN_MIDDLE_LEFT - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - forecolor .9 .9 .9 1 - style WINDOW_STYLE_FILLED - backcolor 0 0 0 .3 - visible 1 - mouseenter { show keyBindStatus; play CHOICE_FOCUS_SOUND; } - mouseexit { hide keyBindStatus; setfocus ok_button; } - accept { } - } - - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_OK", execnow setclanname; close self;, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MENU_CANCEL", close self;, 1, ; ) - } -#endif - -#define PLAYER_CARD_CLAN_TAG_MENU_HEIGHT NEW_FRAME_DEFAULT_HEIGHT -#define PLAYER_CARD_CLAN_TAG_MENU_WIDTH ( PLAYER_CARD_CLAN_TAG_MENU_HEIGHT * FRAME_ASPECT_RATIO ) -#undef CHOICE_X_START -#define CHOICE_X_START ( -PLAYER_CARD_CLAN_TAG_MENU_WIDTH / 2 + 15 ) -#undef CHOICE_Y_START -#define CHOICE_Y_START ( -PLAYER_CARD_CLAN_TAG_MENU_HEIGHT / 2 + 15 + NEW_FRAME_BG_Y_OFFSET( PLAYER_CARD_CLAN_TAG_MENU_HEIGHT ) ) - -#undef CHOICE_GROUP -#define CHOICE_GROUP "playercard" - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X NEW_FRAME_BUTTON_WIDTH -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL -#undef CHOICE_TEXTCOLOR -#define CHOICE_TEXTCOLOR NEW_FRAME_COMMON_TEXT_COLOR - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER - -#ifdef XENON - #define SELECT_ICON "ui_button_xenon_3d_a_32x32" -#endif -#ifdef PS3 - #define SELECT_ICON "ui_button_ps3_x_32x32" -#endif - -#define SET_CLANTAG_HINT \ - if ( isclantagfeaturelocked( GetCurrentClanTagFeature() ) ) \ - { \ - SET_HINT_TEXT( (locString( CLASS_PRESTIGE_UNLOCK_DESC, GetClanTagFeaturePlevel( GetCurrentClanTagFeature() ) )) ) \ - } \ - else \ - { \ - CLEARUIHINT \ - } -#ifdef PC - #define PLAYER_CARD_LISTBOX_RECT_EDIT (CHOICE_X_START-3) (CHOICE_Y_START+NEW_FRAME_BUTTON_HEIGHT+2) (CHOICE_SIZE_X+3) 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - #define PLAYER_CARD_LISTBOX_RECT (CHOICE_X_START-3) (CHOICE_Y_START+NEW_FRAME_BUTTON_HEIGHT*4+2) (CHOICE_SIZE_X+3) 150 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER -#else //#ifdef PC - #define PLAYER_CARD_LISTBOX_RECT_EDIT (CHOICE_X_START-3) (CHOICE_Y_START+NEW_FRAME_BUTTON_HEIGHT+2) (CHOICE_SIZE_X+3) 250 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - #define PLAYER_CARD_LISTBOX_RECT (CHOICE_X_START-3) (CHOICE_Y_START+NEW_FRAME_BUTTON_HEIGHT*4+2) (CHOICE_SIZE_X+3) 250 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER -#endif //#ifdef PC - -#undef LIST_X_START -#define LIST_X_START ( -PLAYER_CARD_CLAN_TAG_MENU_WIDTH / 2 + 15 ) -#undef LIST_Y_START -#define LIST_Y_START ( -PLAYER_CARD_CLAN_TAG_MENU_HEIGHT / 2 + 15 + NEW_FRAME_BG_Y_OFFSET( PLAYER_CARD_CLAN_TAG_MENU_HEIGHT ) ) -#undef LIST_HEIGHT -#define LIST_HEIGHT (PLAYER_CARD_CLAN_TAG_MENU_HEIGHT-120) -#undef LIST_WIDTH -#define LIST_WIDTH (PLAYER_CARD_CLAN_TAG_MENU_WIDTH/2-40) - -#define PLAYER_EMBLEM_BG_SIZE (190) -#define PLAYER_EMBLEM_SIZE (PLAYER_EMBLEM_BG_SIZE - 20) -#define PLAYER_EMBLEM_X_START 70 -#define PLAYER_EMBLEM_Y_START (CHOICE_Y_START+20) - -#define PLAYER_CARD_COMMON_ITEMS \ \ - /* PLAYER NAME */ \ - PLAYER_CLAN_TAG_AND_NAME( PLAYER_EMBLEM_X_START, (PLAYER_EMBLEM_Y_START-18), 1 ) \ - /* BACKGROUND FOR EMBLEM */ \ - itemDef \ - { \ - rect PLAYER_EMBLEM_X_START PLAYER_EMBLEM_Y_START PLAYER_EMBLEM_BG_SIZE PLAYER_EMBLEM_BG_SIZE CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \ - style WINDOW_STYLE_SHADER_FRAMED \ - frame 16 0.5 FRAME_SIDE_ALL \ - background "menu_mp_lobby_frame_circle" \ - forecolor 0 0 0 0.4 \ - visible 1 \ - decoration \ - } \ - /* PLAYER EMBLEM */ \ - PLAYER_EMBLEM_ALL( (PLAYER_EMBLEM_X_START+10), (PLAYER_EMBLEM_Y_START+10), PLAYER_EMBLEM_SIZE, PLAYER_EMBLEM_SIZE, 1 ) - -#ifdef CONSOLE -#define CLAN_TAG_SPECIAL_ESC( actionArg ) \ - execKeyInt KEY_ESCAPE \ - { \ - play CHOICE_FOCUS_SOUND; \ - actionArg; \ - } -#else // #ifdef CONSOLE -#define CLAN_TAG_SPECIAL_ESC( actionArg ) -#endif //#ifdef CONSOLE - -#ifdef PC - #define CLAN_TAG_LIST_PC_ACTIONS \ - mouseenter \ - { \ - setfocus "clan_tag_list" \ - } -#else //#ifdef PC - #define CLAN_TAG_LIST_PC_ACTIONS -#endif //#ifdef PC - -#define CLAN_TAG_LIST( feederType, rectArg, execCommand, onActionArg, selectionChangeArgs, visArg, extraArgs ) \ - itemDef\ - { \ - name "clan_tag_list" \ - type ITEM_TYPE_LISTBOX \ - feeder feederType \ - rect rectArg \ - origin 0 0 \ - elementwidth 30 \ - elementheight 19 \ - elementtype LISTBOX_TEXT \ - textstyle ITEM_TEXTSTYLE_NORMAL \ - textfont UI_FONT_NORMAL \ - textscale TEXTSIZE_DEFAULT \ - textalignx 12 \ \ - textaligny 0 \ - forecolor CHOICE_TEXTCOLOR \ - focusColor CHOICE_TEXTCOLOR \ - disableColor CHOICE_TEXTCOLOR \ - noscrollbars \ - selectIcon SELECT_ICON \ - outlineColor 1 1 1 1 \ - elementHighlightColor 0 0 0 1 \ - elementBackgroundColor NEW_FRAME_TRANSPARENCY \ - modal \ - noBlinkingHighlight \ - visible visArg \ - userarea 4 0 0 CHOICE_SIZE_X 17 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* Name */ \ - 20 1 15 15 16 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* Image */ \ - (CHOICE_SIZE_X-60) 0 50 17 24 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* Cost */ \ - (CHOICE_SIZE_X+2) (17/2-LOCK_SIZE/2) LOCK_SIZE LOCK_SIZE 24 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* Lock */ \ - onfocus \ - { \ - play CHOICE_FOCUS_SOUND; \ - SET_CLANTAG_HINT \ - } \ - onListboxSelectionChange \ - { \ - play CHOICE_FOCUS_SOUND; \ - selectionChangeArgs \ - SET_CLANTAG_HINT \ - } \ - doubleclick \ - { \ - if( IsClanTagFeaturePurchased( GetCurrentClanTagFeature() ) ) \ - { \ - execNow setClanTag ( GetCurrentClanTagFeature() ); \ - } \ - elseif( !IsClanTagFeatureLocked( GetCurrentClanTagFeature() ) && ( GetClanTagFeatureCost( GetCurrentClanTagFeature() ) <= GetStatByName( "CODPOINTS" ) ) ) \ - { \ - open PurchaseClanTagFeatureConfirmation; \ - } \ - } \ - execKeyInt BUTTON_X \ - { \ - } \ - CLAN_TAG_SPECIAL_ESC( onActionArg ) \ - CLAN_TAG_LIST_PC_ACTIONS \ - extraArgs \ - } - -#ifdef PC - #define EDIT_CLAN_TAG_ACTION \ - doubleclick \ - { \ - open pc_editclantag; \ - } -#else //#ifdef PC - #define EDIT_CLAN_TAG_ACTION \ - doubleclick \ - { \ - execNow editclanname; \ - } -#endif //#ifdef PC - -#ifdef PC - #define CLAN_TAG_LIST_EDIT_PC_ACTIONS \ - mouseenter \ - { \ - setfocus "clan_tag_list_edit" \ - } -#else //#ifdef PC - #define CLAN_TAG_LIST_EDIT_PC_ACTIONS -#endif //#ifdef PC - -#define CLAN_TAG_LIST_EDIT( feederType, rectArg, execCommand, onActionArg, selectionChangeArgs, visArg, extraArgs ) \ - itemDef\ - { \ - name "clan_tag_list_edit" \ - type ITEM_TYPE_LISTBOX \ - feeder feederType \ - rect rectArg \ - origin 0 0 \ - elementwidth 30 \ - elementheight 19 \ - elementtype LISTBOX_TEXT \ - textstyle ITEM_TEXTSTYLE_NORMAL \ - textfont UI_FONT_NORMAL \ - textscale TEXTSIZE_DEFAULT \ - textalignx 22 \ - textaligny 0 \ - forecolor CHOICE_TEXTCOLOR \ - focusColor CHOICE_TEXTCOLOR \ - disableColor CHOICE_TEXTCOLOR \ - noscrollbars \ - selectIcon SELECT_ICON \ - outlineColor 1 1 1 1 \ - elementHighlightColor 0 0 0 1 \ - elementBackgroundColor NEW_FRAME_TRANSPARENCY \ - modal \ - noBlinkingHighlight \ - visible visArg \ - onfocus \ - { \ - play CHOICE_FOCUS_SOUND; \ - setdvar ui_show_arrow "0"; \ - } \ - onListboxSelectionChange \ - { \ - play CHOICE_FOCUS_SOUND; \ - selectionChangeArgs \ - setdvar ui_show_arrow "0"; \ - } \ - EDIT_CLAN_TAG_ACTION \ - execKeyInt BUTTON_X \ - { \ - } \ - CLAN_TAG_SPECIAL_ESC( onActionArg ) \ - CLAN_TAG_LIST_EDIT_PC_ACTIONS \ - extraArgs \ - } - -#undef ON_ESC -#define ON_ESC \ - execnow "uploadstats"; \ - execnow changemenucloseslidedirection menu_playercards_clantag MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT; \ - close self; \ - open menu_playercard_self; - - menuDef - { - name menu_playercards_clantag - rect 0 0 640 480 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - control MENU_CONTROL_OPENER - priority MENU_PRI_ONTOP - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - popup - onOpen - { - setLocalVarString ui_choicegroup CHOICE_GROUP; - focusFirst; - } - onEsc - { - ON_ESC - } - onFocus - { - setLocalVarString ui_choicegroup CHOICE_GROUP; - activateBlur; - } - onClose - { - deactivateBlur; - } - - NEW_FRAME( PLAYER_CARD_CLAN_TAG_MENU_WIDTH, PLAYER_CARD_CLAN_TAG_MENU_HEIGHT ) - - // Title - NEW_FRAME_TITLE( PLAYER_CARD_CLAN_TAG_MENU_WIDTH, PLAYER_CARD_CLAN_TAG_MENU_HEIGHT, "@MPUI_CLAN_TAG_CAPS", 1 ) - PLAYER_INFO_VIS( PLAYER_CARD_CLAN_TAG_MENU_WIDTH, PLAYER_CARD_CLAN_TAG_MENU_HEIGHT, 1 ) - - /* Label for "Edit clan tag" */ - PREPROC_TEXT_DRAW( CHOICE_X_START (CHOICE_Y_START+2) 100 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_EDIT_CLAN_TAG_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_LT_GREY_RGB 1 ) - - // CLAN TAG BUTTON - CLAN_TAG_LIST_EDIT( FEEDER_CLANTAG_FEATURES_EDIT, PLAYER_CARD_LISTBOX_RECT_EDIT, ( dvarString( ui_execString ) );, ;, ;, 1, ; ) - - /* Label for "Clan Tag color" */ - PREPROC_TEXT_DRAW( CHOICE_X_START (CHOICE_Y_START+NEW_FRAME_BUTTON_HEIGHT*3+2) 100 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_CLAN_TAG_COLOR_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, NEW_FRAME_LT_GREY_RGB 1 ) - - // CLAN TAG LIST - CLAN_TAG_LIST( FEEDER_CLANTAG_FEATURES, PLAYER_CARD_LISTBOX_RECT, ( dvarString( ui_execString ) );, ;, ;, 1, ; ) - - PLAYER_CARD_COMMON_ITEMS - - HINT_TEXT( 13, CHOICE_X_START, dvarString( ui_hint_text ), dvarBool( ui_show_arrow ) ) - -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( FRAME_DEFAULT_WIDTH, FRAME_DEFAULT_HEIGHT, ON_ESC; ) -#else //#ifdef PC - NEW_FRAME_BACK_BUTTON( PLAYER_CARD_CLAN_TAG_MENU_WIDTH, PLAYER_CARD_CLAN_TAG_MENU_HEIGHT ) -#endif //#ifdef PC - - #include "ui/safearea.menu" -} diff --git a/mods/patch_mp/ui_mp/players.menu b/mods/patch_mp/ui_mp/players.menu deleted file mode 100644 index be7c771..0000000 --- a/mods/patch_mp/ui_mp/players.menu +++ /dev/null @@ -1,166 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" - -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" - -#define LIST_ELEM_HEIGHT 18 -#define MAX_PLAYERS 32 - -#define PLAYERLIST_HEIGHT ((MAX_PLAYERS/2)*LIST_ELEM_HEIGHT) -#define PLAYERLIST_WIDTH 235 -#define PLAYERLIST_SPACING 56 - -#define PLAYERLIST_A_X_START (-PLAYERLIST_WIDTH-(PLAYERLIST_SPACING/2)) -#define PLAYERLIST_B_X_START (PLAYERLIST_SPACING/2) -#define PLAYERLIST_Y_START (-PLAYERLIST_HEIGHT/2) - -#define PLAYERLIST_A_RECT PLAYERLIST_A_X_START PLAYERLIST_Y_START PLAYERLIST_WIDTH PLAYERLIST_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER -#define PLAYERLIST_B_RECT PLAYERLIST_B_X_START PLAYERLIST_Y_START PLAYERLIST_WIDTH PLAYERLIST_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - -#define RANK_BG_WIDTH 33 -#define COLUMN_SCORE_WIDTH 34 -#define MUTE_ICON_WIDTH LIST_ELEM_HEIGHT -#define FRIEND_ICON_WIDTH LIST_ELEM_HEIGHT -#define FRIEND_ICON_START_X ( PLAYERLIST_WIDTH - FRIEND_ICON_WIDTH - 4 ) -#define MUTE_ICON_START_X ( FRIEND_ICON_START_X - MUTE_ICON_WIDTH - 4 ) -#define COLUMN_NAME_START_X 34 -#define COLUMN_NAME_WIDTH ( FRIEND_ICON_START_X - COLUMN_NAME_START_X ) - -#define IN_PREGAME ( dvarbool( ui_pregame ) ) - -#include "ui_mp/menustyle.inc" -#include "ui_mp/choices_setup_teams.menu" - -#undef ON_ESC -#define ON_ESC \ - close self; \ - open class; - -#define AAR_HEIGHT NEW_FRAME_DEFAULT_HEIGHT -#define AAR_WIDTH ( AAR_HEIGHT * FRAME_ASPECT_RATIO ) - -#define AAR_AWARD_IMAGE_COLOR 0.8 0.68 0.47 0.6 -#define AAR_AWARD_IMAGE_COLOR_GREY 1 1 1 0.3 - -#define AAR_BODY_X_START ( -AAR_WIDTH / 2 + 15 ) -#define AAR_BODY_Y_START ( -AAR_HEIGHT / 2 + 15 + NEW_FRAME_BG_Y_OFFSET( AAR_HEIGHT ) ) - -#define AAR_SCOREBOARD_COLUMN_SPACING 70 -#define AAR_SCOREBOARD_COLUMN_4_X 420 -#define AAR_SCOREBOARD_COLUMN_3_X ( AAR_SCOREBOARD_COLUMN_4_X - AAR_SCOREBOARD_COLUMN_SPACING ) -#define AAR_SCOREBOARD_COLUMN_2_X ( AAR_SCOREBOARD_COLUMN_3_X - AAR_SCOREBOARD_COLUMN_SPACING ) -#define AAR_SCOREBOARD_COLUMN_1_X ( AAR_SCOREBOARD_COLUMN_2_X - 50 ) -#define AAR_SCOREBOARD_COLUMN_SCORE_X ( AAR_SCOREBOARD_COLUMN_1_X - 50 ) - -#define AAR_DBLCLICK_ACTION( menuName ) \ - play CHOICE_FOCUS_SOUND; \ - execnow set selectedPlayerXuid ( getfeederdata( "xuid" ) ); \ - execnow set selectedFriendName ( getfeederdata( "name" ) ); \ - if( (getfeederdata( "xuid" ) != getXuid()) && (getfeederdata( "xuid" ) != 0) ) \ - { \ - hideMenu self; \ - if (IsInGame()) \ - { \ - showMenu "pausedbkgnd"; \ - } \ - execnow changemenuopenslidedirection menu_playercard MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT; \ - execNow openMenu menu_playercard; \ - } - - -#define AAR_SCOREBOARD_LISTBOX( scoreboard_name, feederId, x, y, w, h, visArg, extraArgs, menuName ) \ - itemDef \ - { \ - name scoreboard_name \ - type ITEM_TYPE_LISTBOX \ - feeder feederId \ - rect x y w h HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - origin 0 0 \ - elementwidth 30 \ - elementheight 17 \ - elementtype LISTBOX_TEXT \ - textstyle ITEM_TEXTSTYLE_NORMAL \ - textfont UI_FONT_NORMAL \ - textscale TEXTSIZE_SMALL \ - forecolor 1 1 1 1 \ - focusColor 1 1 1 1 \ - disableColor 1 1 1 1 \ - elementHighlightColor 0 0 0 1 \ - noBlinkingHighlight \ - visible visArg \ - userarea 10 -1 0 (w-16) 19 24 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_NEMESIS_BG */ \ - -1 0 40 19 10 ITEM_ALIGN_LEFT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_RANK_BG */ \ - 3 0 50 16 10 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_RANK */ \ - 16 1 16 16 32 ITEM_ALIGN_RIGHT ITEM_ALIGN_TOP /* SCOREBOARD_COLUMN_RANK_ICON */ \ - 50 0 100 16 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_NAME */ \ - AAR_SCOREBOARD_COLUMN_SCORE_X 0 100 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_SCORE */ \ - AAR_SCOREBOARD_COLUMN_1_X 0 100 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_1 */ \ - AAR_SCOREBOARD_COLUMN_2_X 0 100 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_2 */ \ - (AAR_SCOREBOARD_COLUMN_3_X+85) 0 16 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_3 */ \ - (AAR_SCOREBOARD_COLUMN_4_X+70) 0 16 16 10 ITEM_ALIGN_RIGHT ITEM_ALIGN_MIDDLE /* SCOREBOARD_COLUMN_4 */ \ - \ - doubleclick \ - { \ - AAR_DBLCLICK_ACTION( menuName ) \ - } \ - \ - extraArgs \ - } - -{ - menuDef - { - name "players" - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_EMPTY - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - - onEsc - { - ON_ESC - } - onOpen - { - if (IsInGame()) - { - showMenu "pausedbkgnd"; - } - setdvar ui_friendsListOpen "0"; - setdvar ui_ingamePlayersOpen "1"; - - // TODO: Set Focus to something? - } - onClose - { - if (IsInGame()) - { - hideMenu "pausedbkgnd"; - } - setdvar ui_ingamePlayersOpen "0"; - } - - // ------------------ TREE TITLE ------------------ - CHOICE_MENU_TITLE_ALIGN_VIS( "@MENU_PLAYERS_CAPS", HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP, ITEM_ALIGN_MIDDLE_LEFT, 1 ) - - /* LABEL FOR COLUMN "SCORE" */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+12+AAR_SCOREBOARD_COLUMN_SCORE_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, "@MPUI_SCORE_CAPS", TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 1 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+12+AAR_SCOREBOARD_COLUMN_1_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 0 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 2 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+12+AAR_SCOREBOARD_COLUMN_2_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "@"+getScoreboardColumnHeader( 1 )+"_CAPS" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 3 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+12+AAR_SCOREBOARD_COLUMN_3_X) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "MENU_FRIEND" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - /* LABEL FOR COLUMN 4 */ - PREPROC_TEXT_DRAW( (AAR_BODY_X_START+12+AAR_SCOREBOARD_COLUMN_4_X-16) (AAR_BODY_Y_START-15) 100 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "MP_MUTED" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_RIGHT, CHOICE_TEXTCOLOR ) - - /* SCOREBOARD */ - AAR_SCOREBOARD_LISTBOX( scoreboard_listbox, FEEDER_AAR_SCOREBOARD, (AAR_BODY_X_START+10), (AAR_BODY_Y_START+5), (AAR_WIDTH-40), (AAR_HEIGHT-65), 1, ;, menu_aar_scoreboard ) - - - // Back button -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION_PC_VIS( ON_ESC, when( MenuHasFocus() ); ) -#endif - } -} \ No newline at end of file diff --git a/mods/patch_mp/ui_mp/scriptmenus/callvote.menu b/mods/patch_mp/ui_mp/scriptmenus/callvote.menu deleted file mode 100644 index 8360797..0000000 --- a/mods/patch_mp/ui_mp/scriptmenus/callvote.menu +++ /dev/null @@ -1,844 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/newframe.inc" -#include "ui_mp/common_macro.inc" -#include "ui_mp/menustyle.inc" -#include "ui_mp/choices_setup_teams.menu" - -#define PC_INGAME 1 -#include "ui_mp/overlaybg.inc" - -#define GAME_DESC_VIS_ARG ( dvarInt( "xblive_basictraining" ) || dvarBool( splitscreen ) || dvarBool( systemlink ) || (dvarString("ui_gametype_idx") != "0") ) - -menuDef -{ - name "pausedbkgnd_callvote" - fullScreen 0 - rect 0 0 640 480 - focusColor COLOR_FOCUSED - blurWorld 4.8 - visible 1 - - #define SINGLE_PLAYER 1 - #include "ui_mp/ingamebg.inc" -} - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X 170 - -#define BACKGROUND_COLOR_GRAY_RGB 0.62 0.70 0.70 - -#ifdef PC - #undef CHOICE_X_START - #define CHOICE_X_START 30 - #undef CHOICE_Y_START - #define CHOICE_Y_START -120 - #define CHOICE_SEP_1 5 -#else - #undef CHOICE_X_START - #define CHOICE_X_START 30 - #undef CHOICE_Y_START - #define CHOICE_Y_START -30 - #define CHOICE_SEP_1 3 -#endif - -#undef CHOICE_GROUP -#define CHOICE_GROUP "callvote" - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_LEFT - -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER - -#undef BUTTON_BG_X_START -#define BUTTON_BG_X_START 30 -#undef BUTTON_BG_Y_START -#define BUTTON_BG_Y_START 42 - -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#undef CHOICE_TEXTSIZE -#define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT - -{ - menuDef - { - name callvote - fullScreen 0 - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN // Size and position of the menu - focusColor COLOR_FOCUSED // Menu focus color for text and items -#ifdef CONSOLE - blurWorld 7.0 -#endif - onOpen - { - showMenu "pausedbkgnd_callvote"; - } - - onClose - { - hideMenu "pausedbkgnd_callvote"; - } - - onEsc - { - close self; - open "class"; - } - - #define CALLVOTE_SUBTITLE "" - #include "ui_mp/scriptmenus/callvote_buttons.inc" - - NEW_FRAME_BACK_BUTTON_ACTION_PC_VIS( close self;, 1 ) - } - - menuDef - { - name changegametype - fullScreen 0 - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN // Size and position of the menu - focusColor COLOR_FOCUSED // Menu focus color for text and items -#ifdef CONSOLE - blurWorld 7.0 -#endif - onEsc - { - showMenu callvote; - close self; - } - - onOpen - { - setdvar invite_visible "0"; - - setDvar ui_mapname "mp_array"; - setDvar ui_gametype "tdm"; - setdvar ui_gametype_idx "1"; - - setDvar ui_preview dvarString( "ui_mapname" ); - setdvar ui_preview_gt dvarString( "ui_gametype" ); - setdvar ui_preview_gt_idx dvarString( "ui_gametype_idx" ); - setDvar settings_map_selected 1; - execNow movefeeder top gamemode_selection; - execNow movefeeder top maplist; - } - - onClose - { - } - - #undef CALLVOTE_SUBTITLE - #define CALLVOTE_SUBTITLE "@MPUI_CHANGE_GAME_TYPEMAP" - #include "ui_mp/scriptmenus/callvote_buttons.inc" - - #define GAMEMODE_X 210 - #define MAPSELECT_X 430 - #define MAPSELECT_Y 255 - #define GAMEMODE_Y 255 - #define THUMBNAIL_Y 18 - - itemDef - { - name gamemode_image - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect GAMEMODE_X THUMBNAIL_Y 170 135 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - border 0 - bordercolor .5 .5 .5 .5 - origin 0 0 - exp material( tableLookup( "mp/gametypesTable.csv", 0, dvarString( ui_gametype ), 3 ) ); // ui_preview_gt - visible when(GAME_DESC_VIS_ARG); - decoration - } - - itemDef - { - name gamemode_custom_image - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect GAMEMODE_X THUMBNAIL_Y 170 135 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - border 0 - bordercolor .5 .5 .5 .5 - origin 0 0 - exp material( "playlist_infantry" ); - visible when(!GAME_DESC_VIS_ARG); - decoration - } - - itemDef - { - name gamemode_name - type ITEM_TYPE_TEXT - rect GAMEMODE_X 175 170 20 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.4 - forecolor 1 1 1 1 - exp text "@" + tableLookup( "mp/gametypesTable.csv", 0, dvarString( ui_gametype ), 1 ); // ui_preview_gt - visible when(GAME_DESC_VIS_ARG) - decoration - } - - itemDef - { - name gamemode_custom_name - type ITEM_TYPE_TEXT - rect GAMEMODE_X 175 170 20 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.4 - forecolor 1 1 1 1 - text "@CUSTOM_CUSTOM_GAME_MODE_CAPS" - visible when(!GAME_DESC_VIS_ARG) - decoration - } - - itemDef - { - name gamemode_desc - type ITEM_TYPE_TEXT - rect GAMEMODE_X 195 170 35 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_SMALL - textscale 0.3 - forecolor 1 1 1 1 - exp text "@" + tableLookup( "mp/gametypesTable.csv", 0, dvarString( ui_gametype ), 2 ); // ui_preview_gt - visible when(GAME_DESC_VIS_ARG); - autowrapped - decoration - } - - itemDef - { - name gamemode_custom_desc - type ITEM_TYPE_TEXT - rect GAMEMODE_X 195 170 35 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_SMALL - textscale 0.3 - forecolor 1 1 1 1 - text "@CUSTOM_SELECT_FROM_FILESHARE_DESC" - visible when(!GAME_DESC_VIS_ARG); - autowrapped - decoration - } - -#ifdef PC - #define LIST_PARAMS( listName ) \ - usePaging \ - mouseEnter \ - { \ - setFocus listName; \ - } -#else // #ifdef PC - #define LIST_PARAMS( listName ) -#endif // #else // #ifdef PC - - itemDef - { - name gamemode_selection - type ITEM_TYPE_LISTBOX - noBlinkingHighlight - rect GAMEMODE_X GAMEMODE_Y 170 170 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - style WINDOW_STYLE_FILLED - textscale CHOICE_TEXTSIZE - textstyle ITEM_TEXTSTYLE_SHADOWED - textfont UI_FONT_NORMAL - elementtype LISTBOX_TEXT - elementwidth 120 - elementheight 18 - textalignx 6 - textaligny 0 - backcolor 0 0 0 0.2 - border 1 - bordersize 1 - bordercolor 1 1 1 0.15 - outlinecolor 1 1 1 0 - forecolor CHOICE_TEXTCOLOR - focusColor 1 1 1 1 - disableColor 1 1 1 1 - feeder FEEDER_GAMETYPES_INGAME - LIST_PARAMS( gamemode_selection ) - visible 1 - userarea 2 -1 0 155 20 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - 6 0 155 20 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - doubleclick - { - setDvar ui_gametype_idx dvarString( "ui_preview_gt_idx" ); - if( !GAME_DESC_VIS_ARG ) - { - open "custom_select_from_fileshare_1"; - } - else - { - if( dvarString( "ui_preview_gt" ) != dvarString( "ui_gametype" ) ) - { - execNow "resetCustomGametype"; - } - - play CHOICE_ACTION_SOUND; - } - setDvar ui_gametype dvarString( ui_preview_gt ); - } - action - { - setDvar ui_gametype_idx dvarString( "ui_preview_gt_idx" ); - if( !GAME_DESC_VIS_ARG ) - { - open "custom_select_from_fileshare_1"; - } - else - { - if( dvarString( "ui_preview_gt" ) != dvarString( "ui_gametype" ) ) - { - execNow "resetCustomGametype"; - } - - play CHOICE_ACTION_SOUND; - } - setDvar ui_gametype dvarString( ui_preview_gt ); - } - } - - itemDef - { - name mappreview - style WINDOW_STYLE_SHADER - type ITEM_TYPE_IMAGE - rect MAPSELECT_X THUMBNAIL_Y 170 135 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - border 0 - bordercolor .5 .5 .5 .5 - origin 0 0 - exp material( tablelookup("mp/mapsTable.csv",0,dvarString(ui_mapname),4) ); // ui_preview - visible 1 - decoration - } - - itemDef - { - name map_name - type ITEM_TYPE_TEXT - rect MAPSELECT_X 175 170 20 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_NORMAL - textscale 0.4 - forecolor 1 1 1 1 - exp text "@" + tableLookup( "mp/mapsTable.csv", 0, dvarString( ui_mapname ) , 3 ); // ui_preview - visible 1 - decoration - } - - itemDef - { - name map_desc - type ITEM_TYPE_TEXT - rect MAPSELECT_X 195 170 35 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - textstyle ITEM_TEXTSTYLE_SHADOWED - textalign ITEM_ALIGN_LEFT - textfont UI_FONT_SMALL - textscale 0.3 - forecolor 1 1 1 1 - exp text "@" + tableLookup( "mp/mapsTable.csv", 0, dvarString( ui_mapname ) , 6 ); // ui_preview - visible 1 - autowrapped - decoration - } - - itemDef - { - name maplist - rect MAPSELECT_X MAPSELECT_Y 170 170 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - type ITEM_TYPE_LISTBOX - noBlinkingHighlight - style WINDOW_STYLE_FILLED - textscale CHOICE_TEXTSIZE - textstyle ITEM_TEXTSTYLE_SHADOWED - textfont UI_FONT_NORMAL - elementtype LISTBOX_TEXT - elementwidth 120 - elementheight 18 - textalignx 6 - textaligny 0 - backcolor 0 0 0 0.2 - border 1 - bordersize 1 - bordercolor 1 1 1 0.15 - outlinecolor 1 1 1 0 - forecolor CHOICE_TEXTCOLOR - focusColor 1 1 1 1 - disableColor 1 1 1 1 - feeder FEEDER_MAPS - LIST_PARAMS( maplist ) - visible 1 - userarea 2 -1 0 155 20 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* FEEDER_MAPSELECTION_COLUMN_BACKGROUND */ - 6 0 155 20 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE /* FEEDER_MAPSELECTION_COLUMN_NAME */ - - doubleclick { setDvar ui_mapname dvarString( ui_preview ); } - action { setDvar ui_mapname dvarString( ui_preview ); } - } - - itemDef - { - name vote - type ITEM_TYPE_BUTTON - rect MAPSELECT_X (MAPSELECT_Y+170+4) 40 20 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - exp rect W( getTextWidth(locString("@MPUI_VOTE"),UI_FONT_NORMAL,TEXTSIZE_DEFAULT)+8 ) - text "@MPUI_VOTE" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWED - style WINDOW_STYLE_FILLED - visible 1 - forecolor 1 1 1 1 - backcolor 1 1 1 0 - border 1 - bordersize 1 - bordercolor CHOICE_BUTTON_BORDER_COLOR_UNSELECTED_RGBA - mouseEnter { setcolor bordercolor CHOICE_BUTTON_BORDER_COLOR_SELECTED_RGBA; play CHOICE_FOCUS_SOUND; } - mouseexit { setcolor bordercolor CHOICE_BUTTON_BORDER_COLOR_UNSELECTED_RGBA; } - action - { - play CHOICE_FOCUS_SOUND; -#ifdef CONSOLE - setDvar ui_gametype dvarString( ui_preview_gt ); - setDvar ui_mapname dvarString( ui_preview ); - uiScript voteTypeMapDVar ui_preview_gt ui_preview; -#else //#ifdef CONSOLE - uiScript voteTypeMapDVar ui_gametype ui_mapname; -#endif //#ifdef CONSOLE - close self; - } - } - - -#define TAB_1_TEXT (locString( "@MPUI_MAPS_CAPS" )) -#define TAB_2_TEXT (locString( "@MPUI_DLC_MAPS_CAPS" )) - -#define TAB_BG_PAD 5 -#define TAB_1_WIDTH ( getTextWidth( TAB_1_TEXT, UI_FONT_NORMAL, TEXTSIZE_DEFAULT ) + (TAB_BG_PAD*2) ) -#define TAB_2_WIDTH ( getTextWidth( TAB_2_TEXT, UI_FONT_NORMAL, TEXTSIZE_DEFAULT ) + (TAB_BG_PAD*2) ) -#define TAB_HEIGHT 15 - -#define MAP_TAB_1_X MAPSELECT_X -#define MAP_TAB_2_X ( MAP_TAB_1_X + TAB_1_WIDTH ) - -#define MAP_TAB_Y ( MAPSELECT_Y - TAB_HEIGHT ) -#define MAPS_TAB_VISIBLE ( 1 ) -#define DLC_TAB_VISIBLE ( dvarBool( "dlc2" ) || dvarBool( "dlc3" ) || dvarBool( "dlc4" ) ) - - itemDef - { - name switch_to_original_maps - type ITEM_TYPE_BUTTON - rect MAP_TAB_1_X MAP_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - exp rect W( TAB_1_WIDTH ) - text "@MPUI_MAPS_CAPS" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWED - style WINDOW_STYLE_FILLED - visible when( DLC_TAB_VISIBLE ) - forecolor 1 1 1 1 - backcolor 1 1 1 0 - border 1 - bordersize 1 - bordercolor CHOICE_BUTTON_BORDER_COLOR_UNSELECTED_RGBA - mouseEnter { setcolor bordercolor CHOICE_BUTTON_BORDER_COLOR_SELECTED_RGBA; play CHOICE_FOCUS_SOUND; } - mouseexit { setcolor bordercolor CHOICE_BUTTON_BORDER_COLOR_UNSELECTED_RGBA; } - action - { - setDvar ui_showDLCMaps 0; - } - } - - itemDef - { - name switch_to_dlc_maps - type ITEM_TYPE_BUTTON - rect 0 MAP_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - exp rect W( TAB_2_WIDTH ) - exp rect X( MAP_TAB_2_X ) - text "@MPUI_DLC_MAPS_CAPS" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWED - style WINDOW_STYLE_FILLED - visible when( DLC_TAB_VISIBLE ) - forecolor 1 1 1 1 - backcolor 1 1 1 0 - border 1 - bordersize 1 - bordercolor CHOICE_BUTTON_BORDER_COLOR_UNSELECTED_RGBA - mouseEnter { setcolor bordercolor CHOICE_BUTTON_BORDER_COLOR_SELECTED_RGBA; play CHOICE_FOCUS_SOUND; } - mouseexit { setcolor bordercolor CHOICE_BUTTON_BORDER_COLOR_UNSELECTED_RGBA; } - action - { - setDvar ui_showDLCMaps 1; - } - } - - NEW_FRAME_BACK_BUTTON_ACTION_PC_VIS( exec "wait"; close self;, 1 ) - } - - - menuDef - { - name kickplayer - fullScreen 0 - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN // Size and position of the menu - focusColor COLOR_FOCUSED // Menu focus color for text and items -#ifdef CONSOLE - blurWorld 7.0 -#endif - onEsc - { - showMenu callvote; - close self; - } - - onClose - { - } - - #undef CALLVOTE_SUBTITLE - #define CALLVOTE_SUBTITLE "@MPUI_KICK_PLAYER" - #include "ui_mp/scriptmenus/callvote_buttons.inc" - - itemDef - { - name playerlist - type ITEM_TYPE_LISTBOX - noBlinkingHighlight - visible 1 - rect GAMEMODE_X 90 260 330 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - style WINDOW_STYLE_FILLED - textscale CHOICE_TEXTSIZE - textstyle ITEM_TEXTSTYLE_SHADOWED - textfont UI_FONT_NORMAL - elementtype LISTBOX_TEXT - elementwidth 120 - elementheight 18 - textalignx 6 - textaligny 0 - backcolor 0 0 0 0.2 - border 1 - bordersize 1 - bordercolor 1 1 1 0.15 - outlinecolor 1 1 1 0 - forecolor CHOICE_TEXTCOLOR - focusColor 1 1 1 1 - disableColor 1 1 1 1 - feeder FEEDER_PLAYER_LIST - LIST_PARAMS( playerlist ) - userarea 2 -1 0 244 20 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - 6 0 244 20 32 ITEM_ALIGN_LEFT ITEM_ALIGN_MIDDLE - } - - itemDef - { - name vote - type ITEM_TYPE_BUTTON - rect GAMEMODE_X (90+330+4) 40 20 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP - exp rect W( getTextWidth(locString("@MPUI_VOTE"),UI_FONT_NORMAL,TEXTSIZE_DEFAULT)+8 ) - text "@MPUI_VOTE" - textfont UI_FONT_NORMAL - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_MIDDLE_CENTER - textstyle ITEM_TEXTSTYLE_SHADOWED - style WINDOW_STYLE_FILLED - visible 1 - forecolor 1 1 1 1 - backcolor 1 1 1 0 - border 1 - bordersize 1 - bordercolor CHOICE_BUTTON_BORDER_COLOR_UNSELECTED_RGBA - mouseEnter { setcolor bordercolor CHOICE_BUTTON_BORDER_COLOR_SELECTED_RGBA; play CHOICE_FOCUS_SOUND; } - mouseexit { setcolor bordercolor CHOICE_BUTTON_BORDER_COLOR_UNSELECTED_RGBA; } - action - { - play CHOICE_FOCUS_SOUND; - uiScript voteTempBan; - close self; - } - } - - NEW_FRAME_BACK_BUTTON_ACTION_PC_VIS( close self;, 1 ) - } -} - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X 150 - -#undef CHOICE_X_START -#define CHOICE_X_START 0 -#undef CHOICE_Y_START -#define CHOICE_Y_START 65 - -#undef CHOICE_SEP_OFFSET_Y -#define CHOICE_SEP_OFFSET_Y -2 -#undef CHOICE_SIDEITEM_SPACING -#define CHOICE_SIDEITEM_SPACING -310 - -#undef CHOICE_DVAR_OFFSET_X -#define CHOICE_DVAR_OFFSET_X (CHOICE_SIZE_X+20) -#undef CHOICE_DVAR_TEXTALIGN -#define CHOICE_DVAR_TEXTALIGN ITEM_ALIGN_MIDDLE_LEFT - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_popmenu.menu" -#include "ui_mp/stats_info.inc" -#include "ui_mp/fileshare.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" - -#include "ui_mp/popup_player_info.inc" - - -#define GAME_MODE_FILESHARE_UPLOAD_ACTION \ - execNow uploadCustomGametype ( getFeederData( "menu_game_mode_upload_1", "fileShareSlots", "slot" ) ); \ - execNow "set customGameMode 1"; \ - execNow "xupdatepartystate"; \ - if( dvarInt( ui_custom_gobackonupload ) ) \ - { \ - closeimmediate custom_game_create; \ - closeimmediate select_game_mode; \ - } - -#include "ui_mp/popupstyle.inc" - -FILESHARE_SLOT_SELECTOR_EX ( menu_game_mode_upload_1, GAME_MODE_FILESHARE_UPLOAD_ACTION, ;, open custom_game_create;, ; ) - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X 260 - -#undef CHOICE_X_START -#define CHOICE_X_START 0 - -#undef CHOICE_Y_START -#define CHOICE_Y_START 85 -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#undef ON_ESC -#define ON_ESC \ - close self; - -menuDef -{ - name custom_select_from_fileshare_1 - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - control MENU_CONTROL_OPENER - soundloop MENU_MUSIC - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED - openSlideDirection MENU_SLIDE_DIRECTION_RIGHT_TO_LEFT - closeSlideDirection MENU_SLIDE_DIRECTION_LEFT_TO_RIGHT - - onOpen - { -#ifdef PC -// exec readfileshare -#endif - } - onFocus - { - activateBlur; - } - onClose - { - deactivateBlur; - } - onESC - { - ON_ESC - } - - NEW_FRAME( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) - - NEW_FRAME_TITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@CUSTOM_FILESHARE_SELECT_MODE_TITLE", 1 ) - NEW_FRAME_SUBTITLE( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, "@CUSTOM_FILESHARE_SELECT_MODE_DESC", 1 ) - - PLAYER_INFO_VIS( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, 1 ) - - itemDef - { - name fileShareSlots - type ITEM_TYPE_LISTBOX - feeder FEEDER_FILESHARE_MYSLOTS - FILESHARE_COMMON_OPTIONS - origin 0 0 - elementwidth 70 - elementheight 67 - elementtype LISTBOX_TEXT - textalign ITEM_ALIGN_MIDDLE_CENTER - textfont UI_FONT_NORMAL - textscale TEXTSIZE_SUBTITLE - forecolor CHOICE_TEXTCOLOR - modal - doubleclick - { - if ( getFeederData( "slotOccupied" ) && !( FILESHARE_TASKSINPROGRESS ) ) - { - if( getFeederData( "fileType" ) == "customgamemode" ) - { - execNow downloadCustomGametype (getFeederData( "fileID" )) (getFeederData( "fileSize" )); - closeimmediate custom_select_from_fileshare_1; - closeimmediate select_game_mode; - } - } - } - - visible 1 - - FILESHARE_SLOTS_USERAREAS - } - FILESHARE_BOTTOM( fileShareSlots, 1 ) - - /* SLOT OCCUPIED */ -#define SLOT_OCCUPIED_CONDITION \ - ( getFeederData( "fileShareSlots", "slotOccupied" ) && getFeederData( "fileShareSlots", "count" ) > 0.0 ) - -#define SLOT_HAS_GAME_MODE \ - ( getFeederData( "fileShareSlots", "fileType" ) == "customgamemode" ) - -#undef FILESHARE_SELECTOR_TOOLTIP_Y -#ifdef PC - #define FILESHARE_SELECTOR_TOOLTIP_Y FILESHARE_TOOLTIP_PC_Y -#else //#ifdef PC - #define FILESHARE_SELECTOR_TOOLTIP_Y 95 -#endif //#ifdef PC - - - // Tooltip - Occupied Slot with custom game mode - PREPROC_TEXT_DRAW_VIS_EX( -255 FILESHARE_SELECTOR_TOOLTIP_Y 280 36 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "CUSTOM_FILESHARE_CGM_HIGHLIGHTED" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, when( SLOT_OCCUPIED_CONDITION && SLOT_HAS_GAME_MODE ), autowrapped; ) - PREPROC_SHADER_DRAW_VIS_EX( -265 FILESHARE_SELECTOR_TOOLTIP_Y 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", COLOR_BODY_TEXT, when( SLOT_OCCUPIED_CONDITION && SLOT_HAS_GAME_MODE ), ; ) - - // Tooltip - Occupied Slot that is not a custom game mode - PREPROC_TEXT_DRAW_VIS_EX( -255 FILESHARE_SELECTOR_TOOLTIP_Y 280 36 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, locString( "CUSTOM_FILESHARE_CANT_SELECT" ), TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, when( SLOT_OCCUPIED_CONDITION && !SLOT_HAS_GAME_MODE ), autowrapped; ) - PREPROC_SHADER_DRAW_VIS_EX( -265 FILESHARE_SELECTOR_TOOLTIP_Y 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", COLOR_BODY_TEXT, when( SLOT_OCCUPIED_CONDITION && !SLOT_HAS_GAME_MODE ), ; ) - - FILESHARE_SPINNER( 145, -45, when( FILESHARE_TASKSINPROGRESS ), 350 ) - - execKeyInt APAD_UP - { - execnow set fshSelectLastSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt DPAD_UP - { - execnow set fshSelectLastSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt APAD_DOWN - { - execnow set fshSelectFirstSlotRow 1; - setfocus fileShareSlots; - } - - execKeyInt DPAD_DOWN - { - execnow set fshSelectFirstSlotRow 1; - setfocus fileShareSlots; - } - /* - execKeyInt BUTTON_X - { - open fileshare_mymovie; - } - -#ifdef CONSOLE - itemDef - { - type ITEM_TYPE_TEXT - rect -210 206 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@PLATFORM_FILESHARE_MYMOVIE" - textfont CHOICE_TEXTFONT - - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_LEFT - visible 1 - decoration - } -#endif - */ - -#ifndef PC - itemDef - { - type ITEM_TYPE_TEXT - rect -210 206 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@PLATFORM_SELECT" - textfont CHOICE_TEXTFONT - - textscale TEXTSIZE_DEFAULT - textalign ITEM_ALIGN_BOTTOM_LEFT - visible when( getFeederData( "fileShareSlots", "slotOccupied" ) == 1 ) - decoration - } -#endif - - NEW_FRAME_BUTTON_NOICON( 1, 28 0 0 18 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "", execnow "updatemarketplace";, ;, ;, 1, ;, ; ) - //FILESHARE_LIVEBLURB( -271, 50, 290, 100, HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, !IsPremiumSubscriber(), ( localVarInt( ui_highlight ) == 1 ) ) - -#ifdef CONSOLE - itemDef - { - type ITEM_TYPE_TEXT - rect -146 80 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - exp text( int( getFeederData( "fileShareSlots", "slot" ) ) ) - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_SMALL - textalign ITEM_ALIGN_MIDDLE_RIGHT - forecolor 1 1 1 1 - visible 1 - decoration - } - - itemDef - { - type ITEM_TYPE_TEXT - rect -142 80 0 0 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - text "@MENU_FILESHARE_OF18" - textfont CHOICE_TEXTFONT - textscale TEXTSIZE_SMALL - textalign ITEM_ALIGN_MIDDLE_LEFT - forecolor 1 1 1 1 - visible 1 - } - // Top Arrow - PREPROC_SHADER_DRAW_VIS_EX( -114 75 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_left", COLOR_BODY_TEXT, when( getFeederData( "fileShareSlots", "slot" ) > 6 ), rotation 90; ) - - // Bottom Arrow 1 - PREPROC_SHADER_DRAW_VIS_EX( -107 75 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", COLOR_BODY_TEXT, when( getFeederData( "fileShareSlots", "slot" ) > 6 && getFeederData( "fileShareSlots", "slot" ) < 13 ), rotation 90; ) - - // Bottom Arrow 2 - PREPROC_SHADER_DRAW_VIS_EX( -114 75 11 11 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, "ui_arrow_right", COLOR_BODY_TEXT, when( getFeederData( "fileShareSlots", "slot" ) <= 6 ), rotation 90; ) -#endif //#ifdef CONSOLE - // File details - FILESHARE_DETAILS( 35, (NEW_FRAME_CHOICE_Y_START-1), HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, "custom_select_from_fileshare_1", "fileShareSlots", SLOT_OCCUPIED_CONDITION ) - - FILESHARE_SPINNER( 145, -45, when( FILESHARE_TASKSINPROGRESS ), 350 ) - - -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT, ON_ESC ) -#else //#ifdef PC - NEW_FRAME_BACK_BUTTON( FILESHARE_FRAME_WIDTH, FILESHARE_FRAME_HEIGHT ) -#endif //#ifdef PC - - #include "ui/safearea.menu" -} diff --git a/mods/patch_mp/ui_mp/scriptmenus/changeclass.menu b/mods/patch_mp/ui_mp/scriptmenus/changeclass.menu deleted file mode 100644 index a32c524..0000000 --- a/mods/patch_mp/ui_mp/scriptmenus/changeclass.menu +++ /dev/null @@ -1,365 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui_mp/stats_info.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" - - -#undef CHOICE_X_START -#define CHOICE_X_START 30 -#undef CHOICE_Y_START -#define CHOICE_Y_START -105 - -#ifdef PC - #define PC_INGAME //for background in overlaybg.inc -#endif - -#define CHOICE_SEP_OFFSET_Y -2 -#define CHOICE_SEP_1 5 - -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/overlaybg.inc" - -#define HIGH_BOUND "1000" - -#undef BUTTON_BG_X_START -#define BUTTON_BG_X_START 30 -#undef BUTTON_BG_Y_START -#define BUTTON_BG_Y_START 42 - -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X 200 - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_LEFT - -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER - -// ------ - -#undef ON_ESC -#define ON_ESC scriptMenuResponse "back"; - -{ - menuDef - { - name "changeclass" - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_EMPTY -#ifdef CONSOLE - blurWorld 7.0 -#endif - onOpen - { - if ( IsSplitscreen() ) - { - close self; - if ( IsViewportLarge() ) - { - open "changeclass_splitscreen"; - } - else - { - open "changeclass_splitscreen_small"; - } - } - else - { - // update player's XP - execNow "statGetByNameInDvar RANKXP ui_stat_rankxp"; - - if ( dvarString( ui_custom_name ) == "" ) - { - execnow set ui_custom_name customclass1; - } - - if( dvarString( ui_class ) == "" ) - { - execnow set ui_class class_smg; - } - /*set ui_multi_s "HIGH_BOUND"; set ui_multi_dt 0";*/ - - setfocusbydvar "ui_customclass_selected"; - //focusFirst - } - if (IsInGame()) - { - showMenu "pausedbkgnd"; - } - -#ifdef PC - setLocalVarBool ui_hide_cac_item_info_highlights 1; -#endif // #ifdef PC - } - onClose - { - if (IsInGame()) - { - hideMenu "pausedbkgnd"; - } - -#ifdef PC - setLocalVarBool ui_hide_cac_item_info_highlights 0; -#endif // #ifdef PC - } - onEsc - { - ON_ESC - } - - execkeyint BUTTON_START - { - close self; - } - - -#ifndef PC // background overlay - #include "ui_mp/ingamebg.inc" -#endif // background overlay - - // ------------------ TREE TITLE ------------------ - - CHOICE_MENU_TITLE_ALIGN_VIS( "@MPUI_CHOOSE_CLASS_CAPS", HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP, ITEM_ALIGN_MIDDLE_LEFT, 1 ) - - //========================================================================= - //================ MENU SELECTION FOR ONLINE/OFFLINE GAME ================= - //========================================================================= - - #define IS_ONLINE_GAME ( dvarInt( splitscreen ) == 0 && dvarInt( systemlink ) == 0 ) - #define IS_BASICTRAINING_GAME ( dvarInt( xblive_basictraining ) > 0 ) - - #define FOCUS_CHECK( pnum ) \ - dvartest "ui_customclass_selected" focusdvar { pnum } - - #define ACTION_COMMON( pnum ) \ - setDvar ui_customclass_selected pnum; - - #define SHOW_ONLINE_CLASS_NAME ( IS_ONLINE_GAME && !IS_BASICTRAINING_GAME ) - #define CUSTOM_CLASS_TEXT( online, offline ) \ - Select( SHOW_ONLINE_CLASS_NAME, dvarString( online ), dvarString( offline ) ) - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 1, CUSTOM_CLASS_TEXT( customclass1, offline_customclass1 ), - scriptMenuResponse "custom1,0"; ACTION_COMMON( 6 ), - exec "set ui_custom_name customclass1; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND;, - ;, - !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), FOCUS_CHECK( 6 ) ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 1, CUSTOM_CLASS_TEXT( customclass1, offline_customclass1 ), - ;, - ;, - IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), decoration ) - - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 2, CUSTOM_CLASS_TEXT( customclass2, offline_customclass2 ), - scriptMenuResponse "custom2,0"; ACTION_COMMON( 7 ), - exec "set ui_custom_name customclass2; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND;, - ;, - !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), FOCUS_CHECK( 7 ) ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 2, CUSTOM_CLASS_TEXT( customclass2, offline_customclass2 ), - ;, - ;, - IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), decoration ) - - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 3, CUSTOM_CLASS_TEXT( customclass3, offline_customclass3 ), - scriptMenuResponse "custom3,0"; ACTION_COMMON( 8 ), - exec "set ui_custom_name customclass3; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND;, - ;, - !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), FOCUS_CHECK( 8 ) ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 3, CUSTOM_CLASS_TEXT( customclass3, offline_customclass3 ), - ;, - ;, - IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), decoration ) - - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 4, CUSTOM_CLASS_TEXT( customclass4, offline_customclass4 ), - scriptMenuResponse "custom4,0"; ACTION_COMMON( 9 ), - exec "set ui_custom_name customclass4; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND;, - ;, - !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), FOCUS_CHECK( 9 ) ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 4, CUSTOM_CLASS_TEXT( customclass4, offline_customclass4 ), - ;, - ;, - IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), decoration ) - - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 5, CUSTOM_CLASS_TEXT( customclass5, offline_customclass5 ), - scriptMenuResponse "custom5,0"; ACTION_COMMON( 10 ), - exec "set ui_custom_name customclass5; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND;, - ;, - !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), FOCUS_CHECK( 10 ) ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 5, CUSTOM_CLASS_TEXT( customclass5, offline_customclass5 ), - ;, - ;, - IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ), decoration ) - - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 6, "@CLASS_CLASS1", - scriptMenuResponse "smg_mp,0"; ACTION_COMMON( 1 ), - exec "set ui_class class_smg; set ui_multi_s "HIGH_BOUND"; set ui_multi_dt 0";, - ;, - ( IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) || IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_1 ) || !IS_ONLINE_GAME ), FOCUS_CHECK( 1 ) ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 6, dvarString( prestigeclass1 ), - scriptMenuResponse "prestige1,0"; ACTION_COMMON( 11 ), - exec "set ui_custom_name prestigeclass1; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND;, - ;, - ( !IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_1 ) && ( !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) ) && IS_ONLINE_GAME ), FOCUS_CHECK( 1 ) ) - - - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 7, "@CLASS_CLASS2", - scriptMenuResponse "cqb_mp,0"; ACTION_COMMON( 2 ), - exec" set ui_class class_cqb; set ui_multi_s "HIGH_BOUND"; set ui_multi_dt 0";, - ;, - ( IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) || IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_2 ) || !IS_ONLINE_GAME ), FOCUS_CHECK( 2 ) ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 7, dvarString( prestigeclass2 ), - scriptMenuResponse "prestige2,0"; ACTION_COMMON( 12 ), - exec "set ui_custom_name prestigeclass2; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND;, - ;, - ( !IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_2 ) && ( !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) ) && IS_ONLINE_GAME ), FOCUS_CHECK( 2 ) ) - - - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 8, "@CLASS_CLASS3", - scriptMenuResponse "assault_mp,0"; ACTION_COMMON( 3 ), - exec "set ui_class class_assault; set ui_multi_s "HIGH_BOUND"; set ui_multi_dt 0";, - ;, - ( IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) || IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_3 ) || !IS_ONLINE_GAME ), FOCUS_CHECK( 3 ) ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 8, dvarString( prestigeclass3 ), - scriptMenuResponse "prestige3,0"; ACTION_COMMON( 13 ), - exec "set ui_custom_name prestigeclass3; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND;, - ;, - ( !IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_3 ) && ( !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) ) && IS_ONLINE_GAME ), FOCUS_CHECK( 3 ) ) - - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 9, "@CLASS_CLASS4", - scriptMenuResponse "lmg_mp,0"; ACTION_COMMON( 4 ), - exec "set ui_class class_lmg; set ui_multi_s "HIGH_BOUND"; set ui_multi_dt 0"; CLEAR_ITEM_NEW( FEATURE_CLOSEASSAULT ), - ;, - ( ( !IS_ITEM_LOCKED( FEATURE_CLOSEASSAULT ) && ( IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_4 ) || ( IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) && !IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_4 ) ) ) ) || !IS_ONLINE_GAME ), FOCUS_CHECK( 4 ) ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 9, dvarString( prestigeclass4 ), - scriptMenuResponse "prestige4,0";ACTION_COMMON( 14 ), - exec "set ui_custom_name prestigeclass4; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND; CLEAR_ITEM_NEW( FEATURE_CLOSEASSAULT ), - ;, - ( !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) && !IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_4 ) && IS_ONLINE_GAME ), FOCUS_CHECK( 4 ) ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 9, "@CLASS_CLASS4", - ;, - ;, - ( IS_ITEM_LOCKED( FEATURE_CLOSEASSAULT ) && IS_ONLINE_GAME ), decoration FOCUS_CHECK( 4 ) ) - CHOICE_NEWICON_VIS( 9, "menu_mp_lobby_new", when( ( IS_ITEM_NEW( FEATURE_CLOSEASSAULT ) ) && IS_ONLINE_GAME ) ) - - - - - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 10, "@CLASS_CLASS5", - scriptMenuResponse "sniper_mp,0"; ACTION_COMMON( 5 ), - exec" set ui_class class_sniper; set ui_multi_s "HIGH_BOUND"; set ui_multi_dt 0"; CLEAR_ITEM_NEW( FEATURE_SNIPER ), - ;, - ( ( !IS_ITEM_LOCKED( FEATURE_SNIPER ) && ( IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_5 ) || ( IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) && !IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_5 ) ) ) ) || !IS_ONLINE_GAME ), FOCUS_CHECK( 5 ) ) - FRAME_CHOICE_BUTTON_FOCUS_VIS_EX( 10, dvarString( prestigeclass5 ), - scriptMenuResponse "prestige5,0"; ACTION_COMMON( 15 ), - exec "set ui_custom_name prestigeclass5; set ui_multi_s 0; set ui_multi_dt "HIGH_BOUND; CLEAR_ITEM_NEW( FEATURE_SNIPER ), - ;, - ( !IS_ITEM_LOCKED( FEATURE_CREATE_A_CLASS ) && !IS_ITEM_LOCKED( FEATURE_PRESTIGE_CLASS_5 ) && IS_ONLINE_GAME ), FOCUS_CHECK( 5 ) ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 10, "@CLASS_CLASS5", - ;, - ;, - ( IS_ITEM_LOCKED( FEATURE_SNIPER ) && IS_ONLINE_GAME ), decoration FOCUS_CHECK( 5 ) ) - CHOICE_NEWICON_VIS( 10, "menu_mp_lobby_new", when( ( IS_ITEM_NEW( FEATURE_SNIPER ) ) && IS_ONLINE_GAME ) ) - - - #define DATA_TABLE_PRIMARY_GRENADE GetDefaultClassSlot( dvarstring( ui_class ), "primarygrenade" ) - #define DATA_TABLE_PRIMARY GetDefaultClassSlot( dvarstring( ui_class ), "primary" ) - // no default attachments or camo for now - #define DATA_TABLE_PRIMARY_ATTACHMENT 0 - #define DATA_TABLE_PRIMARY_CAMO 0 - #define DATA_TABLE_SECONDARY GetDefaultClassSlot( dvarstring( ui_class ), "secondary" ) - // no default attachments or camo for now - #define DATA_TABLE_SECONDARY_ATTACHMENT 0 - #define DATA_TABLE_SECONDARY_CAMO 0 - #define DATA_TABLE_SPECIALTY1 GetDefaultClassSlot( dvarstring( ui_class ), "specialty1" ) - #define DATA_TABLE_SPECIALTY2 GetDefaultClassSlot( dvarstring( ui_class ), "specialty2" ) - #define DATA_TABLE_SPECIALTY3 GetDefaultClassSlot( dvarstring( ui_class ), "specialty3" ) - #define DATA_TABLE_EQUIPMENT GetDefaultClassSlot( dvarstring( ui_class ), "equipment" ) - #define DATA_TABLE_SPECIAL_GRENADE GetDefaultClassSlot( dvarstring( ui_class ), "specialgrenade" ) - #define DATA_TABLE_BODY GetDefaultClassSlot( dvarstring( ui_class ), "body" ) - #define DATA_TABLE_DEATHSTREAK GetDefaultClassSlot( dvarstring( ui_class ), "deathstreak" ) - #define DATA_TABLE_KILLSTREAK_TIER1 GetDefaultClassSlot( dvarstring( ui_class ), "killstreak1" ) - #define DATA_TABLE_KILLSTREAK_TIER2 GetDefaultClassSlot( dvarstring( ui_class ), "killstreak2" ) - #define DATA_TABLE_KILLSTREAK_TIER3 GetDefaultClassSlot( dvarstring( ui_class ), "killstreak3" ) - - /* ==================================== custom classes ============================================= */ - - #define STATS_PRIMARY getCACItemIndex( ( dvarString( ui_custom_name ) ), "primary" ) - #define STATS_PRIMARY_ATTACHMENT getCACItemIndex( ( dvarString( ui_custom_name ) ), "primaryattachment" ) - #define STATS_PRIMARY_CAMO getCACItemIndex( ( dvarString( ui_custom_name ) ), "primarycamo" ) - #define STATS_SECONDARY getCACItemIndex( ( dvarString( ui_custom_name ) ), "secondary" ) - #define STATS_SECONDARY_ATTACHMENT getCACItemIndex( ( dvarString( ui_custom_name ) ), "secondaryattachment" ) - #define STATS_SECONDARY_CAMO getCACItemIndex( ( dvarString( ui_custom_name ) ), "secondarycamo" ) - #define STATS_PRIMARY_GRENADE getCACItemIndex( ( dvarString( ui_custom_name ) ), "primarygrenade" ) - #define STATS_SPECIALTY1 getCACItemIndex( ( dvarString( ui_custom_name ) ), "specialty1" ) - #define STATS_SPECIALTY2 getCACItemIndex( ( dvarString( ui_custom_name ) ), "specialty2" ) - #define STATS_SPECIALTY3 getCACItemIndex( ( dvarString( ui_custom_name ) ), "specialty3" ) - #define STATS_EQUIPMENT getCACItemIndex( ( dvarString( ui_custom_name ) ), "equipment" ) - #define STATS_SPECIAL_GRENADE getCACItemIndex( ( dvarString( ui_custom_name ) ), "specialgrenade" ) - #define STATS_BODY getCACItemIndex( ( dvarString( ui_custom_name ) ), "body" ) - #define STATS_DEATHSTREAK getCACItemIndex( "cacLoadouts", "deathstreak" ) - #define STATS_KILLSTREAK_TIER1 getCACItemIndex( "cacLoadouts", "killstreak1" ) - #define STATS_KILLSTREAK_TIER2 getCACItemIndex( "cacLoadouts", "killstreak2" ) - #define STATS_KILLSTREAK_TIER3 getCACItemIndex( "cacLoadouts", "killstreak3" ) - - #include "ui/safearea.menu" - - /* ================================================================================= */ - /* ================================ LOADOUT DISPLAY ================================ */ - /* ================================================================================= */ - - - #define STAT_CAC_PRIMARY_GRENADE int(min( STATS_PRIMARY_GRENADE + dvarInt(ui_multi_s), DATA_TABLE_PRIMARY_GRENADE + dvarInt(ui_multi_dt) )) - #define STAT_CAC_PRIMARY int(min( STATS_PRIMARY + dvarInt(ui_multi_s), DATA_TABLE_PRIMARY + dvarInt(ui_multi_dt) )) - #define STAT_CAC_PRIMARY_ATTACHMENT int(min( STATS_PRIMARY_ATTACHMENT + dvarInt(ui_multi_s), DATA_TABLE_PRIMARY_ATTACHMENT + dvarInt(ui_multi_dt) )) - #define STAT_CAC_PRIMARY_CAMO int(min( STATS_PRIMARY_CAMO + dvarInt(ui_multi_s), DATA_TABLE_PRIMARY_CAMO + dvarInt(ui_multi_dt) )) - #define STAT_CAC_SECONDARY int(min( STATS_SECONDARY + dvarInt(ui_multi_s), DATA_TABLE_SECONDARY + dvarInt(ui_multi_dt) )) - #define STAT_CAC_SECONDARY_ATTACHMENT int(min( STATS_SECONDARY_ATTACHMENT + dvarInt(ui_multi_s), DATA_TABLE_SECONDARY_ATTACHMENT + dvarInt(ui_multi_dt) )) - #define STAT_CAC_SECONDARY_CAMO int(min( STATS_SECONDARY_CAMO + dvarInt(ui_multi_s), DATA_TABLE_SECONDARY_CAMO + dvarInt(ui_multi_dt) )) - #define STAT_CAC_SPECIALTY1 int(min( STATS_SPECIALTY1 + dvarInt(ui_multi_s), DATA_TABLE_SPECIALTY1 + dvarInt(ui_multi_dt) )) - #define STAT_CAC_SPECIALTY2 int(min( STATS_SPECIALTY2 + dvarInt(ui_multi_s), DATA_TABLE_SPECIALTY2 + dvarInt(ui_multi_dt) )) - #define STAT_CAC_SPECIALTY3 int(min( STATS_SPECIALTY3 + dvarInt(ui_multi_s), DATA_TABLE_SPECIALTY3 + dvarInt(ui_multi_dt) )) - #define STAT_CAC_EQUIPMENT int(min( STATS_EQUIPMENT + dvarInt(ui_multi_s), DATA_TABLE_EQUIPMENT + dvarInt(ui_multi_dt) )) - #define STAT_CAC_SPECIAL_GRENADE int(min( STATS_SPECIAL_GRENADE + dvarInt(ui_multi_s), DATA_TABLE_SPECIAL_GRENADE + dvarInt(ui_multi_dt) )) - #define STAT_CAC_BODY int(min( STATS_BODY + dvarInt(ui_multi_s), DATA_TABLE_BODY + dvarInt(ui_multi_dt) )) - #define STAT_CAC_DEATHSTREAK int(min( STATS_DEATHSTREAK + dvarInt(ui_multi_s), DATA_TABLE_DEATHSTREAK + dvarInt(ui_multi_dt) )) - #define STAT_CAC_KILLSTREAK_TIER1 STATS_KILLSTREAK_TIER1 - #define STAT_CAC_KILLSTREAK_TIER2 STATS_KILLSTREAK_TIER2 - #define STAT_CAC_KILLSTREAK_TIER3 STATS_KILLSTREAK_TIER3 - #define FIRST_ATTACHMENT_PRIMARY_WEAPON \ - Select( dvarInt( ui_multi_s ) == 0, GetItemEquippedAttachment( dvarString( ui_custom_name ), STAT_CAC_PRIMARY, 0 ), -1 ) - #define SECOND_ATTACHMENT_PRIMARY_WEAPON \ - Select( dvarInt( ui_multi_s ) == 0, GetItemEquippedAttachment( dvarString( ui_custom_name ), STAT_CAC_PRIMARY, 1 ), -1 ) - #define FIRST_ATTACHMENT_SECONDARY_WEAPON \ - Select( dvarInt( ui_multi_s ) == 0, GetItemEquippedAttachment( dvarString( ui_custom_name ), STAT_CAC_SECONDARY, 0 ), -1 ) - #define SECOND_ATTACHMENT_SECONDARY_WEAPON \ - Select( dvarInt( ui_multi_s ) == 0, GetItemEquippedAttachment( dvarString( ui_custom_name ), STAT_CAC_SECONDARY, 1 ), -1 ) - - // Frame setup - #define CAC_HEIGHT NEW_FRAME_DEFAULT_HEIGHT - #define CAC_WIDTH ( CAC_HEIGHT * FRAME_ASPECT_RATIO ) - #define COMMON_ITEM_INFO_X ( -(NEW_FRAME_BUTTON_WIDTH+20) - 30 ) - #define COMMON_ITEM_INFO_Y ( -CAC_HEIGHT/2 + NEW_FRAME_BG_Y_OFFSET( CAC_HEIGHT ) ) - #define COMMON_ITEM_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_RIGHT - - #include "ui_mp/cac_item_info.inc" - - // Back button -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION( 640, 480, ON_ESC ) -#else //#ifdef PC - PREPROC_TEXT_DRAW_VIS( CHOICE_X_START -17 50 17 CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_BOTTOM, 0 0, "@PLATFORM_BACK", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, 1 ) -#endif //#ifdef PC - } -} diff --git a/mods/patch_mp/ui_mp/scriptmenus/class.menu b/mods/patch_mp/ui_mp/scriptmenus/class.menu deleted file mode 100644 index 7e25a1f..0000000 --- a/mods/patch_mp/ui_mp/scriptmenus/class.menu +++ /dev/null @@ -1,620 +0,0 @@ -#include "ui/menudef.h" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui_mp/common_macro.inc" -#include "ui_mp/friendslist.inc" - -// Pause menu background... separate menu so that it can draw behind the objective menu -menuDef -{ - name "pausedbkgnd" - fullScreen 0 - rect 0 0 640 480 - focusColor COLOR_FOCUSED - blurWorld 4.8 - visible 1 - - #define SINGLE_PLAYER 1 - #include "ui_mp/ingamebg.inc" -} - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X 200 - -#define BACKGROUND_COLOR_GRAY_RGB 0.62 0.70 0.70 - -#ifdef PC - #undef CHOICE_X_START - #define CHOICE_X_START 30 - #undef CHOICE_Y_START - #define CHOICE_Y_START -60 - #define CHOICE_SEP_1 5 -#else - #undef CHOICE_X_START - #define CHOICE_X_START 30 - #undef CHOICE_Y_START - #define CHOICE_Y_START -30 - #define CHOICE_SEP_1 3 -#endif - -#ifdef CONSOLE - #define CUSTOM_MATCH ( dvarbool( systemlink ) || dvarbool( xblive_privatematch ) ) - #define NOT_CUSTOM_MATCH ( !dvarbool( systemlink ) && !dvarbool( xblive_privatematch ) ) - #define RANKEDGAME (dvarBool( onlinegame ) && !dvarBool( xblive_privatematch )) - #define ISHOST (dvarBool( sv_running )) - #define TEAMGAME ( team( name ) != "TEAM_FREE") - #define NOTTEAMGAME ( team( name ) == "TEAM_FREE" ) - #define ALLOW_VOTE ( !dvarbool( xblive_basictraining ) && !dvarbool( xblive_wagermatch ) && dvarbool( ui_allowvote ) ) - #define IN_PREGAME ( dvarbool( ui_pregame ) ) -#else - #define CUSTOM_MATCH ( dvarbool( systemlink ) || dvarbool( xblive_privatematch ) ) - #define NOT_CUSTOM_MATCH ( !dvarbool( systemlink ) && !dvarbool( xblive_privatematch ) ) - #define RANKEDGAME ( dvarbool( ui_ranked ) ) - #define ISHOST ( dvarBool( sv_running ) ) - #define TEAMGAME ( team( name ) != "TEAM_FREE") - #define NOTTEAMGAME ( team( name ) == "TEAM_FREE" ) - #define ALLOW_VOTE ( !dvarbool( xblive_basictraining ) && !dvarbool( xblive_wagermatch ) && dvarbool( ui_allowvote ) ) - #define IN_PREGAME ( dvarbool( ui_pregame ) ) -#endif - -// ------------------ preprocessing function definitions ------------------ -#define PAD_LEFT \ - execKeyInt DPAD_LEFT \ - { \ - focusFirst; \ - show selection_left; \ - hide selection_right; \ - } \ - execKeyInt APAD_LEFT \ - { \ - focusFirst; \ - show selection_left; \ - hide selection_right; \ - } - -#include "ui_mp/menustyle.inc" -#include "ui_mp/choices_setup_teams.menu" - -#undef CHOICE_FOCUS_SOUND -#define CHOICE_FOCUS_SOUND "uin_navigation_over" - -#undef CHOICE_GROUP -#define CHOICE_GROUP "class" - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_LEFT - -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER - -#undef BUTTON_BG_X_START -#define BUTTON_BG_X_START 30 -#undef BUTTON_BG_Y_START -#define BUTTON_BG_Y_START 42 - -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#define MAP_BACKGROUND_WIDTH 229 -#define MAP_BACKGROUND_HEIGHT 228 - -#ifdef CONSOLE -#define MAP_BG_Y_START -110 -#else // #ifdef CONSOLE -#define MAP_BG_Y_START -120 -#endif // #else #ifdef CONSOLE - -#define MAP_BG_X_START (-MAP_BACKGROUND_WIDTH - 30) - - -/* Grey color box which serve as the background for the map image and the contracts menu */ -#define MAP_BACKGROUND \ - PREPROC_SHADER_DRAW( MAP_BG_X_START MAP_BG_Y_START MAP_BACKGROUND_WIDTH MAP_BACKGROUND_HEIGHT HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_CENTER, "white", BG_BACKCOLOR ) - -#define CHOICE_TAB_TEXTSIZE TEXTSIZE_DEFAULT -#define TAB_1_TEXT (locString( "@MENU_TAB_MAP_CAPS" )) -#define TAB_2_TEXT (locString( "@MENU_TAB_CONTRACTS_CAPS" )) - -#define TAB_BG_PAD 5 -#define TAB_1_WIDTH ( getTextWidth( TAB_1_TEXT, CHOICE_TEXTFONT, CHOICE_TAB_TEXTSIZE ) + (TAB_BG_PAD*2) ) -#define TAB_2_WIDTH ( getTextWidth( TAB_2_TEXT, CHOICE_TEXTFONT, CHOICE_TAB_TEXTSIZE ) + (TAB_BG_PAD*2) ) -#define TAB_HEIGHT 18 - -#define MAP_LIST_TAB_1_X ( MAP_BG_X_START + TAB_BG_PAD ) -#define MAP_LIST_TAB_2_X ( MAP_LIST_TAB_1_X + TAB_1_WIDTH ) - -#define MAP_LIST_TAB_Y ( MAP_BG_Y_START - TAB_HEIGHT ) - -#define MAP_HEADERSTEXT \ - /* highlighted header */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( MAP_LIST_TAB_1_X, \ - MAP_LIST_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_RIGHT, VERTICAL_ALIGN_CENTER, \ - TAB_1_TEXT, CHOICE_TAB_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - 1 1 1 1, \ - when( dvarInt( showMap ) == 1 );, ; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( MAP_LIST_TAB_1_X, \ - MAP_LIST_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_RIGHT, VERTICAL_ALIGN_CENTER, \ - TAB_1_TEXT, CHOICE_TAB_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - BACKGROUND_COLOR_GRAY_RGB .25, \ - when( dvarInt( showMap ) == 0 );, ; ) \ - /* non highlighted header */ \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( MAP_LIST_TAB_2_X, \ - MAP_LIST_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_RIGHT, VERTICAL_ALIGN_CENTER, \ - TAB_2_TEXT, CHOICE_TAB_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - 1 1 1 1, \ - when( dvarInt( showMap ) == 0 && RANKEDGAME );, ; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( MAP_LIST_TAB_2_X, \ - MAP_LIST_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_RIGHT, VERTICAL_ALIGN_CENTER, \ - TAB_2_TEXT, CHOICE_TAB_TEXTSIZE, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - BACKGROUND_COLOR_GRAY_RGB .25, \ - when( dvarInt( showMap ) == 1 && RANKEDGAME );, ; ) - -#define MAP_LIST_TAB_1_ACTION \ - if( RANKEDGAME ) \ - { \ - setDvar showMap 1; \ - } - -#define MAP_LIST_TAB_2_ACTION \ - if( RANKEDGAME ) \ - { \ - setDvar showMap 0; \ - } - -#define MAP_HEADERSBUTTONS \ - TAB_ACTION_BUTTON_ADV( MAP_LIST_TAB_1_X, \ - MAP_LIST_TAB_Y, \ - TAB_1_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_RIGHT, VERTICAL_ALIGN_CENTER, \ - MAP_LIST_TAB_1_ACTION, when( dvarInt( showMap ) == 0 && RANKEDGAME );, ; ) \ - TAB_ACTION_BUTTON_ADV( MAP_LIST_TAB_2_X, \ - MAP_LIST_TAB_Y, \ - TAB_2_WIDTH, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_RIGHT, VERTICAL_ALIGN_CENTER, \ - MAP_LIST_TAB_2_ACTION, when( dvarInt( showMap ) == 1 && RANKEDGAME );, ; ) \ - -/* Tab for Map */ -#define MAP_TAB_1_BG \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER_FRAMED \ - frame 5 0.5 FRAME_OPEN_BOTTOM \ - rect 0 MAP_LIST_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_CENTER \ - exp rect X( MAP_LIST_TAB_1_X ) \ - exp rect W( TAB_1_WIDTH ) \ - background "menu_mp_lobby_frame_circle" \ - forecolor BG_BACKCOLOR \ - visible when( dvarInt(showMap) == 1 ); \ - decoration \ - } - -/* Tab for contracts */ -#define MAP_TAB_2_BG \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER_FRAMED \ - frame 5 0.5 FRAME_OPEN_BOTTOM \ - rect 0 MAP_LIST_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_CENTER \ - exp rect X( MAP_LIST_TAB_2_X ) \ - exp rect W( TAB_2_WIDTH ) \ - background "menu_mp_lobby_frame_circle" \ - forecolor BG_BACKCOLOR \ - visible when( dvarInt(showMap) == 0 && RANKEDGAME ); \ - decoration \ - } - - menuDef - { - name "class" - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_EMPTY -#ifdef CONSOLE - rect 0 0 640 480 - blurWorld 7.0 -#else - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN -#endif - - -#define ON_ESC scriptMenuResponse "back"; - onOpen - { - if ( IsSplitscreen() ) - { - close self; - open "class_splitscreen"; - } - else - { - focusFirst; - hide selection_right; - setDvar showMap 1; - } - showMenu "pausedbkgnd" - } - onClose - { - hideMenu "pausedbkgnd" - } - onFocus - { - focusFirst; - } - onEsc - { - ON_ESC - } - - #ifndef PC - execkeyint BUTTON_START - { - ON_ESC - } - #endif - - execkeyint BUTTON_X - { - if( RANKEDGAME ) - { - if( dvarInt(showMap) == 0 ) - { - setDvar showMap 1; - } - else - { - setDvar showMap 0; - } - } - } - - PAD_LEFT - MAP_BACKGROUND - MAP_TAB_1_BG - MAP_TAB_2_BG - -#ifdef CONSOLE - #include "ui_mp/ingamebg.inc" -#endif - - // -------- GAME TYPE NAME AND DESCRIPTION -------- - #define MAPNAME tableLookup( "mp/mapstable.csv", 0, dvarString( mapname ), 3 ) - - CHOICE_MENU_TITLE_ALIGN_VIS( ( "@" + MAPNAME + "_CAPS" ), HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP, ITEM_ALIGN_MIDDLE_LEFT, 1 ) - - #undef BUTTON_BG_Y_START - #define BUTTON_BG_Y_START 70 - - CHOICE_MENU_TITLE_ALIGN_VIS( toUpper( gametypename() ), HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP, ITEM_ALIGN_MIDDLE_LEFT, 1 ) - - PREPROC_TEXT_DRAW_VIS_EX( BUTTON_BG_X_START (BUTTON_BG_Y_START+35) 230 60 HORIZONTAL_ALIGN_LEFT VERTICAL_ALIGN_TOP, 0 0, - ( gametypedescription() ), - TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, - 1, autowrapped ) - // Team icon - #define ICON_SIZE 92 - #define ICON_X_START ( MAP_BG_X_START + MAP_BACKGROUND_WIDTH - ICON_SIZE ) - #define ICON_RECT ICON_X_START 20 ICON_SIZE ICON_SIZE HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_TOP - PREPROC_SHADER_DRAW_VIS_EX( ICON_RECT, ( dvarString( "g_TeamIcon_Allies" ) ), 1 1 1 1, when( TEAM_IS_MARINES );, ; ) - PREPROC_SHADER_DRAW_VIS_EX( ICON_RECT, ( dvarString( "g_TeamIcon_Axis" ) ), 1 1 1 1, when( TEAM_IS_OPFOR );, ; ) - - //========================================================= - //===================== MENU SELECTION ==================== - //========================================================= - - #define IS_WAGER_MODE ( dvarInt( "xblive_wagermatch" ) == 1 ) - #define IS_CUSTOM_MODE ( dvarInt( "custom_class_mode" ) == 1 ) - #define IS_BAREBONES_MODE ( dvarInt( "barebones_class_mode" ) == 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_CHOOSE_CLASS_BUTTON_CAPS", scriptMenuResponse "changeclass_barebones", ( IS_BAREBONES_MODE ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_CHOOSE_CLASS_BUTTON_CAPS", scriptMenuResponse "changeclass_custom", ( IS_CUSTOM_MODE ), ; ) - -#ifdef CONSOLE - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_CHOOSE_CLASS_BUTTON_CAPS", scriptMenuResponse "changeclass_wager", ( IS_WAGER_MODE && MAY_CHOOSE_CLASS && !IS_CUSTOM_MODE ), ; ) -#endif // CONSOLE - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_CHOOSE_CLASS_BUTTON_CAPS", scriptMenuResponse "changeclass_marines", ( TEAM_IS_MARINES && MAY_CHOOSE_CLASS && !IS_WAGER_MODE && !IS_CUSTOM_MODE && !IS_BAREBONES_MODE ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_CHOOSE_CLASS_BUTTON_CAPS", scriptMenuResponse "changeclass_opfor", ( TEAM_IS_OPFOR && MAY_CHOOSE_CLASS && !IS_WAGER_MODE && !IS_CUSTOM_MODE && !IS_BAREBONES_MODE ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MPUI_CHOOSE_CLASS_BUTTON_CAPS", scriptMenuResponse "changeclass_opfor", ( dvarInt( scr_oldschool ) == 1 && !IS_WAGER_MODE && !IS_CUSTOM_MODE && !IS_BAREBONES_MODE ), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 1, "@MPUI_CHOOSE_CLASS_BUTTON_CAPS", ;, ;, ( dvarInt( scr_oldschool ) == 1 ), ; ) - -#ifdef CONSOLE - - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CHANGE_TEAM_BUTTON_CAPS", scriptMenuResponse "changeteam", ( MAY_CHOOSE_TEAM ), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 2, "@MPUI_CHANGE_TEAM_BUTTON_CAPS", ;, ;, ( MAY_NOT_CHOOSE_TEAM ), ; ) - - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MENU_OPTIONS_CAPS", close self; open ingameoptions, 1, ; ) - -#define CAN_LEAVE_GAME ( !isVisibilityBitSet( BIT_ROUND_END_KILLCAM ) && !isVisibilityBitSet( BIT_FINAL_KILLCAM ) ) - -#ifdef PUBLIC_BETA - FRAME_CHOICE_BUTTON_VIS_EX( 4, "@MENU_END_GAME_CAPS", open popup_endgame, ( RANKEDGAME == 0 && ISHOST && CAN_LEAVE_GAME ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 4, "@MENU_LEAVE_GAME_CAPS", open popup_leavegameandparty, ( RANKEDGAME == 0 && (ISHOST == 0) && (InPrivateParty() && !PrivatePartyHost() && PrivatePartyHostInLobby()) && CAN_LEAVE_GAME ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 4, "@MENU_LEAVE_GAME_CAPS", open popup_leavegame, ( RANKEDGAME == 0 && (ISHOST == 0) && (!InPrivateParty() || PrivatePartyHost() || !PrivatePartyHostInLobby()) && CAN_LEAVE_GAME ), ; ) - - FRAME_CHOICE_BUTTON_VIS_EX( 4, "@MENU_LEAVE_GAME_CAPS", open popup_endgame_ranked, ( RANKEDGAME && ISHOST && CAN_LEAVE_GAME && ( !HostMigrationWaitingForPlayers() ) ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 4, "@MENU_LEAVE_GAME_CAPS", open popup_leavegameandparty_ranked, ( RANKEDGAME && ISHOST == 0 && (InPrivateParty() && !PrivatePartyHost() && PrivatePartyHostInLobby()) && CAN_LEAVE_GAME ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 4, "@MENU_LEAVE_GAME_CAPS", open popup_leavegame_ranked, ( RANKEDGAME && ISHOST == 0 && (!InPrivateParty() || PrivatePartyHost() || !PrivatePartyHostInLobby()) && CAN_LEAVE_GAME ), ; ) -#else // #ifdef PUBLIC_BETA - //.............................................. - // Dev only. Remove me prior to shipping - //FRAME_CHOICE_BUTTON_VIS_EX( 4, "@MENU_BADSPAWN_CAPS", open popup_badspawn, 1, ; ) - //.............................................. - - FRAME_CHOICE_BUTTON_VIS_EX( 5, "@MENU_END_GAME_CAPS", open popup_endgame, ( RANKEDGAME == 0 && ISHOST && CAN_LEAVE_GAME ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 5, "@MENU_LEAVE_GAME_CAPS", open popup_leavegameandparty, ( RANKEDGAME == 0 && (ISHOST == 0) && (InPrivateParty() && !PrivatePartyHost() && PrivatePartyHostInLobby()) && CAN_LEAVE_GAME ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 5, "@MENU_LEAVE_GAME_CAPS", open popup_leavegame, ( RANKEDGAME == 0 && (ISHOST == 0) && (!InPrivateParty() || PrivatePartyHost() || !PrivatePartyHostInLobby()) && CAN_LEAVE_GAME ), ; ) - - FRAME_CHOICE_BUTTON_VIS_EX( 5, "@MENU_LEAVE_GAME_CAPS", open popup_endgame_ranked, ( RANKEDGAME && ISHOST && CAN_LEAVE_GAME && ( !HostMigrationWaitingForPlayers() ) ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 5, "@MENU_LEAVE_GAME_CAPS", open popup_leavegameandparty_ranked, ( RANKEDGAME && ISHOST == 0 && (InPrivateParty() && !PrivatePartyHost() && PrivatePartyHostInLobby()) && CAN_LEAVE_GAME ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 5, "@MENU_LEAVE_GAME_CAPS", open popup_leavegame_ranked, ( RANKEDGAME && ISHOST == 0 && (!InPrivateParty() || PrivatePartyHost() || !PrivatePartyHostInLobby()) && CAN_LEAVE_GAME ), ; ) -#endif // #else #ifdef PUBLIC_BETA - -#endif // #ifdef CONSOLE -#ifdef PC - #define SQUAD_CAP 12 - #define INVITE_MEMBER 1 - #define KICK_MEMBER 2 - #define SQUAD_BUTTON_START_X -439 - #define SQUAD_BUTTON_START_Y -65 - - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MPUI_CHANGE_TEAM_CAPS", scriptMenuResponse "changeteam", (dvarBool( ui_allow_teamchange )), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 2, "@MPUI_CHANGE_TEAM_BUTTON_CAPS", ;, ;, ( !dvarBool( ui_allow_teamchange ) ), ; ) - - FRAME_CHOICE_BUTTON_VIS_EX( 3, "@MPUI_CALL_VOTE_CAPS", open callvote; close self;, ( ALLOW_VOTE ), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 3, "@MPUI_CALL_VOTE_CAPS", ;, ;, ( !ALLOW_VOTE ), ; ) - - // FRAME_CHOICE_BUTTON_VIS_EX( 4, "@MPUI_MUTE_PLAYERS_CAPS", open muteplayer_menu; close self;, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 4, "@MENU_PLAYERS_CAPS", close self; open players;, 1, ; ) - - FRAME_CHOICE_BUTTON_VIS_EX( 5, "@MENU_FRIENDS_CAPS", SETUP_ACTION_INVITE, 1, ; ) - CHOICE_NEWICON_VIS( 5, "menu_mp_lobby_new", when( hasinvites() || haspendingfriends() ); ) - - FRAME_CHOICE_BUTTON_VIS_EX( 6, "@MENU_SETTINGS_CAPS", close self; open options_new_pc; execnow "set ui_allow_graphic_change 0";, 1, ; ) - - FRAME_CHOICE_BUTTON_VIS_EX( 7, "@MENU_ADD_TO_FAVORITES_CAPS", uiscript createFavoriteIngame; open fav_message_popmenu;, ( ISHOST == 0 ), ; ) - FRAME_CHOICE_DBUTTON_FOCUS_VIS_EX( 7, "@MENU_ADD_TO_FAVORITES_CAPS", ;, ;, ( ISHOST ), ; ) - - FRAME_CHOICE_BUTTON_VIS_EX( 8, "@MENU_LEAVE_GAME_CAPS", open popup_endgame, ( ( !RANKEDGAME || IN_PREGAME ) && ISHOST && CAN_LEAVE_GAME ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 8, "@MENU_LEAVE_GAME_CAPS", open popup_leavegame, ( ( !RANKEDGAME || IN_PREGAME ) && !ISHOST ), ; ) - - FRAME_CHOICE_BUTTON_VIS_EX( 8, "@MENU_LEAVE_GAME_CAPS", open popup_endgame_ranked, ( RANKEDGAME && !IN_PREGAME && ISHOST && CAN_LEAVE_GAME ), ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 8, "@MENU_LEAVE_GAME_CAPS", open popup_leavegame_ranked, ( RANKEDGAME && !IN_PREGAME && !ISHOST && CAN_LEAVE_GAME ), ; ) - -#endif // #ifdef PC - -//Showing the ingame Xp bar. -#include "ui_mp/popup_player_info.inc" - -#define SHOW_XP_BAR ( RANKEDGAME || dvarInt( xblive_basictraining ) ) -#define XP_BAR_WIDTH ( Select( dvarInt( widescreen ), 592, 407 ) ) -#define XP_TEXT_WIDTH 65 -#define X_START (-XP_BAR_WIDTH - XP_TEXT_WIDTH - 100) -#define XP_BAR_Y_START 115 - -#define REQUIRED_XP int(getDStat( "PlayerStatsList", "RANKXP" )-int(tablelookup( "mp/ranktable.csv", 0, string(getDStat( "PlayerStatsList", "RANK" )), 2))) -#define REQUIRED_XP_STRING (int(tablelookup( "mp/ranktable.csv", 0, string(getDStat( "PlayerStatsList", "RANK" )), 3 ))-REQUIRED_XP) -#define NEXT_LEVEL ( tablelookup( "mp/ranktable.csv", 0, getDStat( "PlayerStatsList", "RANK" ) + 1, 14 ) ) -#define BAR_FILLED XP_BAR_WIDTH*((getDStat( "PlayerStatsList", "RANKXP" )-int(tablelookup( "mp/ranktable.csv", 0, string(getDStat( "PlayerStatsList", "RANK" )), 2)))/int(tablelookup("mp/ranktable.csv",0,getDStat( "PlayerStatsList", "RANK" ),3))) - - /* BACKGROUND FOR XP BAR */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (X_START+XP_TEXT_WIDTH), - XP_BAR_Y_START, - XP_BAR_WIDTH, - 20, - HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, - "white", BG_BACKCOLOR, - when( CAN_RANK_UP && SHOW_XP_BAR ), ; ) - PREPROC_SHADER_DRAW_ADV_VIS_EX( (X_START+XP_TEXT_WIDTH), - XP_BAR_Y_START, - XP_BAR_WIDTH, - 20, - HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, - "menu_mp_bar_shadow", 1 1 1 0.2, - when( CAN_RANK_UP && SHOW_XP_BAR ), ; ) - /* XP BAR */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( (X_START+XP_TEXT_WIDTH), - XP_BAR_Y_START, - (BAR_FILLED), - 20, - HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, - "menu_mp_combatrecord_bar", BAR_COLOR, - when( CAN_RANK_UP && SHOW_XP_BAR ), - ; ) - /* Tiny arrow at xp bar end */ - PREPROC_SHADER_DRAW_ADV_VIS_EX( ( -5 + (X_START+XP_TEXT_WIDTH) + BAR_FILLED), - (XP_BAR_Y_START+18), - 10, - 10, - HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, - "ui_arrow_right", BAR_COLOR, - when( CAN_RANK_UP && SHOW_XP_BAR );, - rotation -90; ) - /* Label for "NEXT LEVEL" */ - PREPROC_TEXT_DRAW_ADV_VIS_EX( X_START, - XP_BAR_Y_START, - XP_BAR_WIDTH, - 20, - HORIZONTAL_ALIGN_RIGHT, CHOICE_VERTICAL_ALIGN, - "@MPUI_NEXT_LEVEL_CAPS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, - when( SHOW_XP_BAR ), ; ) - /* value for XP NEEDED to next level */ - PREPROC_TEXT_DRAW_ADV_VIS_EX( (X_START+XP_TEXT_WIDTH), - XP_BAR_Y_START, - XP_BAR_WIDTH, - 20, - HORIZONTAL_ALIGN_RIGHT, CHOICE_VERTICAL_ALIGN, - locString( "MPUI_AAR_XP_NEEDED_CAPS", REQUIRED_XP_STRING ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, - when( CAN_RANK_UP && SHOW_XP_BAR ), ; ) - /* next level */ - PREPROC_TEXT_DRAW_ADV_VIS_EX( (X_START+XP_BAR_WIDTH+XP_TEXT_WIDTH+3), - (XP_BAR_Y_START+2), - 15, - 15, - HORIZONTAL_ALIGN_RIGHT, CHOICE_VERTICAL_ALIGN, - int( NEXT_LEVEL ), - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, - when( CAN_RANK_UP && PRESTIGE_NEXT==0 && SHOW_XP_BAR ), ; ) - PREPROC_TEXT_DRAW_ADV_VIS_EX( (X_START+XP_BAR_WIDTH+XP_TEXT_WIDTH+3), - (XP_BAR_Y_START+2), - 15, - 15, - HORIZONTAL_ALIGN_RIGHT, CHOICE_VERTICAL_ALIGN, - "1", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, CHOICE_TEXTCOLOR, - when( CAN_RANK_UP && PRESTIGE_NEXT && SHOW_XP_BAR ), ; ) - /* next level rank icon */ - RANK_ICON_ADV( ( X_START+XP_BAR_WIDTH+XP_TEXT_WIDTH+6+getTextWidth( NEXT_LEVEL, CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) ), (XP_BAR_Y_START+2), HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_CENTER, - tablelookup( "mp/rankIconTable.csv", 0, getDStat( "PlayerStatsList", "RANK" )+1, getDStat( "PlayerStatsList", "PLEVEL" )+1 ), - when( CAN_RANK_UP && PRESTIGE_NEXT==0 && SHOW_XP_BAR ) ) - RANK_ICON_ADV( ( X_START+XP_BAR_WIDTH+XP_TEXT_WIDTH+6+getTextWidth( "1", CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) ), (XP_BAR_Y_START+2), HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_CENTER, - tablelookup( "mp/rankIconTable.csv", 0, 0, getDStat( "PlayerStatsList", "PLEVEL" )+2 ), - when( CAN_RANK_UP && PRESTIGE_NEXT && SHOW_XP_BAR) ) - -//************************************Contracts******************************** -//***************************************************************************** -//Green background -#define BACKGROUND_COLOR_COMPLETED_RGB .34 .9 .34 -//Gray background -#define BACKGROUND_COLOR_PROGRESS_RGB BACKGROUND_COLOR_GRAY_RGB -//Red background -#define BACKGROUND_COLOR_EXPIRED_RGB .9 .16 .24 -// Yellow Background -#define BACKGROUND_COLOR_PROGRESS_STATUS 0.97 0.85 0.03 - -#define CONTRACTS_Y_START ( MAP_BG_Y_START + 5 ) -#define CONTRACTS_X_START ( MAP_BG_X_START + TAB_BG_PAD ) -#define CONTRACTS_WIDTH ( MAP_BACKGROUND_WIDTH - (TAB_BG_PAD*2) ) -#define CONTRACTS_HEIGHT ( MAP_BACKGROUND_HEIGHT - TAB_BG_PAD ) - -#define CONTRACT_INFO( index, visArg ) \ - /* BACKGROUND FOR CONTRACT INFO if completed*/ \ - PREPROC_SHADER_DRAW_VIS_EX( CONTRACTS_X_START ( CONTRACTS_Y_START+(CONTRACTS_HEIGHT/3)*index ) CONTRACTS_WIDTH (CONTRACTS_HEIGHT/3 - 5 ) HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, \ - "white", BACKGROUND_COLOR_COMPLETED_RGB .1, \ - when( visArg && dvarInt(showMap) == 0 && IsContractComplete( GetIndexForActiveContract( index ) ) ), \ - ; ) \ - /* BACKGROUND FOR CONTRACT INFO if in progress*/ \ - PREPROC_SHADER_DRAW_VIS_EX( CONTRACTS_X_START ( CONTRACTS_Y_START+(CONTRACTS_HEIGHT/3)*index ) CONTRACTS_WIDTH (CONTRACTS_HEIGHT/3 - 5 ) HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, \ - "white", BACKGROUND_COLOR_PROGRESS_RGB .1, \ - when( visArg && dvarInt(showMap) == 0 && IsContractInProgress( GetIndexForActiveContract( index ) ) ), \ - ; ) \ - /* BACKGROUND FOR CONTRACT INFO if expired*/ \ - PREPROC_SHADER_DRAW_VIS_EX( CONTRACTS_X_START ( CONTRACTS_Y_START+(CONTRACTS_HEIGHT/3)*index ) CONTRACTS_WIDTH (CONTRACTS_HEIGHT/3 - 5 ) HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, \ - "white", BACKGROUND_COLOR_EXPIRED_RGB .1, \ - when( visArg && dvarInt(showMap) == 0 && IsContractExpired( GetIndexForActiveContract( index ) ) ), \ - ; ) \ - /* CONTRACT NAME */ \ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_X_START ( CONTRACTS_Y_START+(CONTRACTS_HEIGHT/3)*index ) CONTRACTS_WIDTH 20 HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, 0 0, GetContractName( GetIndexForActiveContract( index ) ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, when( visArg ); autowrapped ) \ - /* CONTRACT DESC */ \ - PREPROC_TEXT_DRAW_VIS( ( CONTRACTS_X_START+2 ) ( CONTRACTS_Y_START+(CONTRACTS_HEIGHT/3)*index + 12 ) ( CONTRACTS_WIDTH-2 ) 20 HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, 0 0, GetContractDesc( GetIndexForActiveContract( index ) ),0.24, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, BACKGROUND_COLOR_PROGRESS_RGB .25, when( visArg ); autowrapped ) \ - /* CONTRACT STATUS WHEN COMPLETED */ \ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_X_START ( CONTRACTS_Y_START+(CONTRACTS_HEIGHT/3)*index + 65 ) CONTRACTS_WIDTH 20 HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, 0 0, "@MPUI_COMPLETE_CAPS", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_CENTER, NEW_FRAME_GREEN_RGB 1, when( IsContractComplete( GetIndexForActiveContract( index ) ) > 0 && visArg ) ) \ - /* CONTRACT PROGRESS TEXT ( YELLOW WHEN CONTRACT IS IN PROGRESS ) */ \ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_X_START ( CONTRACTS_Y_START+(CONTRACTS_HEIGHT/3)*index + 65 ) CONTRACTS_WIDTH 20 HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, 0 0, locString("MPUI_CONTRACT_PROGRESS_WITHBRACES", GetContractProgress( GetIndexForActiveContract( index ) ), GetContractRequiredCount( GetIndexForActiveContract( index ) ) ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_CENTER, NEW_FRAME_ORANGE_RGB 1, when( IsContractInProgress( GetIndexForActiveContract( index ) ) > 0 && GetContractRequiredCount( GetIndexForActiveContract( index ) ) > 1 && visArg ) ) \ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_X_START ( CONTRACTS_Y_START+(CONTRACTS_HEIGHT/3)*index + 65 ) CONTRACTS_WIDTH 20 HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, 0 0, locString("MPUI_CONTRACT_NOT_COMPLETE"), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_CENTER, NEW_FRAME_ORANGE_RGB 1, when( IsContractInProgress( GetIndexForActiveContract( index ) ) > 0 && GetContractRequiredCount( GetIndexForActiveContract( index ) ) == 1 && visArg ) ) \ - /* CONTRACT STATUS WHEN EXPIRED */ \ - PREPROC_TEXT_DRAW_VIS( CONTRACTS_X_START ( CONTRACTS_Y_START+(CONTRACTS_HEIGHT/3)*index + 65 ) CONTRACTS_WIDTH 20 HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, 0 0, "@MPUI_CONTRACT_EXPIRED_CAPS", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_CENTER, NEW_FRAME_RED_RGB 1, when( IsContractExpired( GetIndexForActiveContract( index ) ) > 0 && visArg ) ) \ - - CONTRACT_INFO( 0, ( GetIndexForActiveContract(0) != -1 && RANKEDGAME && dvarInt(showMap) == 0 ) ) - CONTRACT_INFO( 1, ( GetIndexForActiveContract(1) != -1 && RANKEDGAME && dvarInt(showMap) == 0 ) ) - CONTRACT_INFO( 2, ( GetIndexForActiveContract(2) != -1 && RANKEDGAME && dvarInt(showMap) == 0 ) ) - -#define NO_ACTIVE_CONTRACTS \ - (GetIndexForActiveContract(0) == -1 && GetIndexForActiveContract(1) == -1 && GetIndexForActiveContract(2) == -1) - - PREPROC_TEXT_DRAW_VIS_EX( ( CONTRACTS_X_START+20 ) CONTRACTS_Y_START ( CONTRACTS_WIDTH - 40 ) 40 HORIZONTAL_ALIGN_RIGHT CHOICE_VERTICAL_ALIGN, 0 0, - "@MPUI_AAR_NO_NEW_CONTRACTS", - TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, CHOICE_TEXTCOLOR, - when( NO_ACTIVE_CONTRACTS && RANKEDGAME && dvarInt(showMap) == 0 );, - autowrapped ) - - // Tactical Map - #define SHOULD_SHOW_MAP dvarInt(showMap) - #undef RIGHTITEM_ALIGN - #define RIGHTITEM_ALIGN HORIZONTAL_ALIGN_RIGHT - #define MAP_X ( MAP_BG_X_START + 5 ) - #define MAP_Y ( 101 ) - #include "ui_mp/tactical_map.inc" - - - // ----------------- BEGIN Scroller -------------------------- - #include "ui/scroller.inc" - // ----------------- END Scroller -------------------------- - - #define SETUP_ACTION_OPENFRIENDLIST \ - open menu_friends; - // ------------------ buttons --------------------- - -#ifdef PC - NEW_FRAME_BACK_BUTTON_ACTION_PC_VIS( ON_ESC , when( !dvarInt( ui_show_friends_list_bg ) ) ) -#else - // Back button - PREPROC_TEXT_DRAW_VIS( CHOICE_X_START -17 50 17 CHOICE_HORIZONTAL_ALIGN VERTICAL_ALIGN_BOTTOM, 0 0, "@PLATFORM_BACK", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, when( !dvarInt( ui_show_friends_list_bg ) ) ) -#endif // PC - - // Contracts / Map button -#ifndef PC - PREPROC_TEXT_DRAW_VIS( (MAP_BG_X_START-1) -17 50 17 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM, 0 0, "@PLATFORM_SHOW_CONTRACTS", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, when( dvarInt( showMap ) == 1 && RANKEDGAME && !dvarInt( ui_show_friends_list_bg ) ) ) - PREPROC_TEXT_DRAW_VIS( (MAP_BG_X_START-1) -17 50 17 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM, 0 0, "@PLATFORM_SHOW_MAP", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_BOTTOM_LEFT, 1 1 1 1, when( dvarInt( showMap ) == 0 && RANKEDGAME && !dvarInt( ui_show_friends_list_bg ) ) ) - // Friends list button -#ifdef PS3 - GAMEPAD_BUTTON( -55 -17 70 17 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM, "@PLATFORM_FRIENDLIST", BUTTON_Y { SETUP_ACTION_OPENFRIENDLIST; }, when( !dvarInt( ui_show_friends_list_bg ) && !IS_WAGER_MODE && anySignedInToLiveAndStatsFetched() && canShowContentFromUser( 0 ) ) ) -#else // #ifdef PS3 - GAMEPAD_BUTTON( -55 -17 70 17 HORIZONTAL_ALIGN_RIGHT VERTICAL_ALIGN_BOTTOM, "@PLATFORM_FRIENDLIST", BUTTON_Y { SETUP_ACTION_OPENFRIENDLIST; }, when( !dvarInt( ui_show_friends_list_bg ) && !IS_WAGER_MODE && anySignedInToLiveAndStatsFetched() ) ) -#endif // #ifdef PS3 -#endif - - MAP_HEADERSTEXT - MAP_HEADERSBUTTONS - - - itemDef - { - name friends_list_bg - style WINDOW_STYLE_FILLED - rect -400 -200 10000 10000 - backcolor 0 0 0 0 - visible when( IsInGame() ); - decoration - - state - { - name on - backcolor 0 0 0 0.7 - } - } - - #include "ui/safearea.menu" -} - -#undef CHOICE_GROUP -#define CHOICE_GROUP "popmenu" - -#include "ui_mp/popupstyle.inc" -#include "ui/choices_setup_popmenu.menu" - - - menuDef - { - SYSTEM_POPUP_SETUP_VIS( popup_badspawn, setfocus popup_badspawn_2, ;, 1 ) - - SYSTEM_POPUP_TITLE_VIS( "@MPUI_REPORT_BADSPAWN", 1 ) - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_YES", scriptMenuResponse "badspawn"; close self, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_NO", close self, 1, name popup_badspawn_2 ) - } diff --git a/mods/patch_mp/ui_mp/serverbrowser.menu b/mods/patch_mp/ui_mp/serverbrowser.menu deleted file mode 100644 index f84aaab..0000000 --- a/mods/patch_mp/ui_mp/serverbrowser.menu +++ /dev/null @@ -1,576 +0,0 @@ -#include "ui/menudef.h" -#include "ui_mp/common_macro.inc" -#include "ui/framestyle.inc" -#include "ui_mp/newframe.inc" -#include "ui_mp/serverbrowser.inc"; -#include "ui_mp/menustyle.inc" -#include "ui/choices_setup_common.menu" -#include "ui_mp/item_animate.inc" - -#define SERVER_BROWSER_HEIGHT 420 -#define SERVER_BROWSER_WIDTH TABLE_WIDTH - -#define SERVER_BROWSER_BODY_X_START ( -SERVER_BROWSER_WIDTH / 2 + 15 ) -#define SERVER_BROWSER_BODY_Y_START ( -SERVER_BROWSER_HEIGHT / 2 + 15 + NEW_FRAME_HEADER_HEIGHT ) - - -#undef CHOICE_HORIZONTAL_ALIGN -#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_CENTER - -#undef CHOICE_VERTICAL_ALIGN -#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_CENTER - -#define FLYOUT_NONE 0 -#define FLYOUT_BROWSER 3 - -#undef CHOICE_TEXTSTYLE -#define CHOICE_TEXTSTYLE ITEM_TEXTSTYLE_NORMAL - -#define TAB_OPEN( menuName ) \ - execNow closemenuImmediate (dvarstring("ui_serverBrowserMenu")); \ - execNow openMenuImmediate (menuName); \ - -#undef ORIGIN_TITLE -#define ORIGIN_TITLE 10 0 - -#define CHOICE_TAB_TEXTSIZE TEXTSIZE_DEFAULT -#define TAB_1_TEXT ( locString( "@MENU_JOIN_SERVER_RANKED_CAPS" ) ) -#define TAB_2_TEXT ( locString( "@MENU_JOIN_SERVER_UNRANKED_CAPS" ) ) -#define TAB_3_TEXT ( locString( "@MENU_JOIN_SERVER_WAGER_CAPS" ) ) -#define TAB_4_TEXT ( locString( "@MENU_JOIN_SERVER_FRIENDS_CAPS" ) ) -#define TAB_5_TEXT ( locString( "@MENU_JOIN_SERVER_FAVORITES_CAPS" ) ) -#define TAB_6_TEXT ( locString( "@MENU_JOIN_SERVER_HISTORY_CAPS" ) ) - -#define TAB_BG_PAD 5 -#define TAB_1_WIDTH ( getTextWidth( TAB_1_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_2_WIDTH ( getTextWidth( TAB_2_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_3_WIDTH ( getTextWidth( TAB_3_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_4_WIDTH ( getTextWidth( TAB_4_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_5_WIDTH ( getTextWidth( TAB_5_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_6_WIDTH ( getTextWidth( TAB_6_TEXT, CHOICE_TEXTFONT, TEXTSIZE_SMALL ) + (TAB_BG_PAD*2) ) -#define TAB_HEIGHT 15 - -#define SERVER_BROWSER_TAB_1_X 9 -#define SERVER_BROWSER_TAB_2_X ( SERVER_BROWSER_TAB_1_X + TAB_1_WIDTH ) -#define SERVER_BROWSER_TAB_3_X ( SERVER_BROWSER_TAB_2_X + TAB_2_WIDTH ) -#define SERVER_BROWSER_TAB_4_X ( SERVER_BROWSER_TAB_3_X + TAB_3_WIDTH ) -#define SERVER_BROWSER_TAB_5_X ( SERVER_BROWSER_TAB_4_X + TAB_4_WIDTH ) -#define SERVER_BROWSER_TAB_6_X ( SERVER_BROWSER_TAB_5_X + TAB_5_WIDTH ) - -#define SERVER_BROWSER_TAB_Y ( ( -SERVER_BROWSER_HEIGHT / 2 ) + NEW_FRAME_HEADER_HEIGHT - TAB_HEIGHT + 1 ) - - -#define TAB( x, tabWidth, textArg, menuName, selected ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( -SERVER_BROWSER_WIDTH / 2 + x ), \ - SERVER_BROWSER_TAB_Y, \ - tabWidth, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - textArg, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_GRAY_TEXT_COLOR, when( !selected ), TAB_MOUSEOVER_HIGHLIGHT; ) \ - PREPROC_TEXT_DRAW_ADV_VIS_EX( ( -SERVER_BROWSER_WIDTH / 2 + x ), \ - SERVER_BROWSER_TAB_Y, \ - tabWidth, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - textArg, TEXTSIZE_SMALL, 0, 0, ITEM_ALIGN_MIDDLE_CENTER, \ - NEW_FRAME_ORANGE_RGB 1, when( selected ), ; ) \ - TAB_ACTION_BUTTON_ADV( ( -SERVER_BROWSER_WIDTH / 2 + x ), \ - ( -SERVER_BROWSER_HEIGHT / 2 + NEW_FRAME_HEADER_HEIGHT - TAB_HEIGHT ), \ - tabWidth, \ - TAB_HEIGHT, \ - HORIZONTAL_ALIGN_CENTER, VERTICAL_ALIGN_CENTER, \ - TAB_OPEN( menuName ), 1, ; ) \ - - -#define SERVER_BROWSER_TAB_BG( px, tabWidth, selected ) \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER \ - frame 16 0.2 FRAME_OPEN_BOTTOM \ - rect 0 SERVER_BROWSER_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - exp rect X( ( -SERVER_BROWSER_WIDTH / 2 + px ) ) \ - exp rect W( tabWidth ) \ - background "menu_mp_tab_frame_inner" \ - forecolor 0.5 0.5 0.5 0.5 \ - visible when( selected ) \ - decoration \ - } \ - itemDef \ - { \ - style WINDOW_STYLE_SHADER \ - frame 16 0.2 FRAME_OPEN_BOTTOM \ - rect 0 SERVER_BROWSER_TAB_Y 0 TAB_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER \ - exp rect X( ( -SERVER_BROWSER_WIDTH / 2 + px ) ) \ - exp rect W( tabWidth ) \ - background "menu_mp_tab_frame_inner" \ - forecolor 1 1 1 1 \ - visible when( !selected ) \ - decoration \ - } - -#define ON_ESC \ - if( menuisopen( filter_window ) ) \ - { \ - close filter_window; \ - } \ - else \ - { \ - close self; \ - } - -#define SERVER_BROWSER_MENU_TEMPLATE( menuName, onOpenArg, onCloseArg ) \ - name menuName \ - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \ - focuscolor COLOR_FOCUSED \ - style WINDOW_STYLE_FILLED \ - priority MENU_PRI_DEFAULT \ - soundloop MENU_MUSIC \ - openSlideSpeed DEFAULT_SLIDE_IN_SPEED \ - closeSlideSpeed DEFAULT_SLIDE_OUT_SPEED \ - openSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM \ - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM \ - onFocus { \ - setDvar ui_flyoutHasFocus FLYOUT_BROWSER; \ - } \ - onOpen { \ - activateBlur; \ - play uin_navigation_menu_lg_open; \ - setdvar ui_serverBrowserMenu menuName; \ - onOpenArg; \ - uiScript PopulateServers; \ - } \ - onClose { \ - execNow ui_animate menuName Browser "Maximized" DEFAULT_SLIDE_OUT_SPEED; \ - deactivateBlur; \ - onCloseArg; \ - setDvar ui_flyoutHasFocus FLYOUT_NONE; \ - execNow closemenuImmediate (filter_window); \ - } \ - onEsc { \ - ON_ESC \ - } \ - execKeyInt 171 { \ - uiScript RefreshServers; \ - } \ - - -#define GLOBAL_SERVER_COUNT \ - PREPROC_TEXT_DRAW( (SERVER_BROWSER_WIDTH/2-7) (-SERVER_BROWSER_HEIGHT/2+2) 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, ( locString( "@PLATFORM_PLAYERS_ONLINE", GetPlayersRegisteredOnline() ) ), TEXTSIZE_DEFAULT, 0, 1, ITEM_ALIGN_TOP_RIGHT, 1 1 1 1 ) \ - PREPROC_TEXT_DRAW( (SERVER_BROWSER_WIDTH/2-7) (-SERVER_BROWSER_HEIGHT/2+20) 1 1 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER, 0 0, ( locString( "@PLATFORM_ALL_SERVERS", GetDedicatedServersRegisteredOnline() ) ), TEXTSIZE_DEFAULT, 0, 1, ITEM_ALIGN_TOP_RIGHT, 1 1 1 1 ) - -// Don't let keys fall through to the main menu. -#define MASSIVE_HACK_KEYCATCHER \ - itemDef \ - { \ - style WINDOW_STYLE_EMPTY \ - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN \ - forecolor 1 1 1 0 \ - visible 1 \ - } - -#define SERVER_BROWSER_TAB_COMMON_ITEMS( selectedTabIndex ) \ - MASSIVE_HACK_KEYCATCHER \ - NEW_FRAME( SERVER_BROWSER_WIDTH, SERVER_BROWSER_HEIGHT ) \ - NEW_FRAME_TITLE( SERVER_BROWSER_WIDTH, SERVER_BROWSER_HEIGHT, "@MENU_SERVER_BROWSER_CAPS", 1 ) \ - SERVER_BROWSER_TAB_BG( SERVER_BROWSER_TAB_1_X, TAB_1_WIDTH, ( selectedTabIndex == 1 ) ) \ - SERVER_BROWSER_TAB_BG( SERVER_BROWSER_TAB_2_X, TAB_2_WIDTH, ( selectedTabIndex == 2 ) ) \ - SERVER_BROWSER_TAB_BG( SERVER_BROWSER_TAB_3_X, TAB_3_WIDTH, ( selectedTabIndex == 3 ) ) \ - SERVER_BROWSER_TAB_BG( SERVER_BROWSER_TAB_4_X, TAB_4_WIDTH, ( selectedTabIndex == 4 ) ) \ - SERVER_BROWSER_TAB_BG( SERVER_BROWSER_TAB_5_X, TAB_5_WIDTH, ( selectedTabIndex == 5 ) ) \ - SERVER_BROWSER_TAB_BG( SERVER_BROWSER_TAB_6_X, TAB_6_WIDTH, ( selectedTabIndex == 6 ) ) \ - TAB( SERVER_BROWSER_TAB_1_X, TAB_1_WIDTH, TAB_1_TEXT, server_browser_ranked, ( selectedTabIndex == 1 ) ) \ - TAB( SERVER_BROWSER_TAB_2_X, TAB_2_WIDTH, TAB_2_TEXT, server_browser_unranked, ( selectedTabIndex == 2 ) ) \ - TAB( SERVER_BROWSER_TAB_3_X, TAB_3_WIDTH, TAB_3_TEXT, server_browser_wager, ( selectedTabIndex == 3 ) ) \ - TAB( SERVER_BROWSER_TAB_4_X, TAB_4_WIDTH, TAB_4_TEXT, server_browser_friends, ( selectedTabIndex == 4 ) ) \ - TAB( SERVER_BROWSER_TAB_5_X, TAB_5_WIDTH, TAB_5_TEXT, server_browser_favorites, ( selectedTabIndex == 5 ) ) \ - TAB( SERVER_BROWSER_TAB_6_X, TAB_6_WIDTH, TAB_6_TEXT, server_browser_history, ( selectedTabIndex == 6 ) ) \ - GLOBAL_SERVER_COUNT - - -/////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////////// -// server_browser_main acts as a gateway to open the correct sub menu based upon dvar settings - menuDef - { - name server_browser_main - fullScreen 0 - style WINDOW_STYLE_EMPTY - rect 0 0 640 480 HORIZONTAL_ALIGN_FULLSCREEN VERTICAL_ALIGN_FULLSCREEN - - onFocus - { - close self; - exec openmenu (dvarString( "ui_serverBrowserMenu" )); - } - } - -#define FILTER_ACTION \ - if( menuisopen( filter_window ) ) \ - { \ - close filter_window; \ - } \ - else \ - { \ - open filter_window; \ - } - -#define BUTTON_SPACING 20 -#define FILTER_BUTTON_OFFSET ( getTextWidth( locString( "@PLATFORM_BACK" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) + 8 + BUTTON_SPACING ) -#define SERVER_INFO_BUTTON_OFFSET ( FILTER_BUTTON_OFFSET + getTextWidth( locString( "@MENU_FILTER_SERVERS" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) + 8 + BUTTON_SPACING ) -#define JOIN_BUTTON_OFFSET ( 0 ) -#define REFRESH_BUTTON_OFFSET ( -JOIN_BUTTON_OFFSET - getTextWidth( locString( "@MENU_JOIN_SERVER" ), CHOICE_TEXTFONT, TEXTSIZE_DEFAULT ) - 8 - BUTTON_SPACING ) - -#define SERVER_BROWSER_BOTTOM_BUTTONS \ - NEW_FRAME_BUTTON_PC_LEFT_OFFSET( SERVER_BROWSER_WIDTH, SERVER_BROWSER_HEIGHT, FILTER_BUTTON_OFFSET, "@MENU_FILTER_SERVERS", FILTER_ACTION, 1 ) \ - NEW_FRAME_BUTTON_PC_LEFT_OFFSET( SERVER_BROWSER_WIDTH, SERVER_BROWSER_HEIGHT, SERVER_INFO_BUTTON_OFFSET, "@MENU_SERVER_INFO", open newframeserverinfo;, 1 ) \ - NEW_FRAME_BUTTON_PC_RIGHT_OFFSET( SERVER_BROWSER_WIDTH, SERVER_BROWSER_HEIGHT, REFRESH_BUTTON_OFFSET, "@MENU_REFRESH_LIST", uiScript RefreshServers;, 1 ) \ - NEW_FRAME_BUTTON_PC_RIGHT_OFFSET( SERVER_BROWSER_WIDTH, SERVER_BROWSER_HEIGHT, JOIN_BUTTON_OFFSET, "@MENU_JOIN_SERVER", JOIN_SERVER_ACTION;, 1 ) \ - NEW_FRAME_BACK_BUTTON_ACTION( SERVER_BROWSER_WIDTH, SERVER_BROWSER_HEIGHT, ON_ESC ) - - menuDef - { - SERVER_BROWSER_MENU_TEMPLATE( server_browser_ranked, uiscript UpdateNetSource AS_RANKED;, ; ) - PC_TAB_SWITCH_ACTIONS( server_browser_ranked, server_browser_history, server_browser_unranked ) - SERVER_BROWSER_TAB_COMMON_ITEMS( 1 ); - - // buttons - SERVER_BROWSER_BOTTOM_BUTTONS - - // browser - SERVER_BROWSER( browser, FEEDER_SERVERS, 1) - } - - menuDef - { - SERVER_BROWSER_MENU_TEMPLATE( server_browser_unranked, uiscript UpdateNetSource AS_UNRANKED;, ; ) - PC_TAB_SWITCH_ACTIONS( server_browser_unranked, server_browser_ranked, server_browser_wager ) - SERVER_BROWSER_TAB_COMMON_ITEMS( 2 ) - - // buttons - SERVER_BROWSER_BOTTOM_BUTTONS - - // browser listbox with background - SERVER_BROWSER( browser, FEEDER_SERVERS, 1) - } - - menuDef - { - SERVER_BROWSER_MENU_TEMPLATE( server_browser_wager, uiscript UpdateNetSource AS_WAGER;, ; ) - PC_TAB_SWITCH_ACTIONS( server_browser_wager, server_browser_unranked, server_browser_friends ) - SERVER_BROWSER_TAB_COMMON_ITEMS( 3 ) - - // buttons - SERVER_BROWSER_BOTTOM_BUTTONS - - // browser listbox with background - SERVER_BROWSER( browser, FEEDER_SERVERS, 1) - } - - menuDef - { - SERVER_BROWSER_MENU_TEMPLATE( server_browser_friends, uiscript UpdateNetSource AS_FRIENDS;, ; ) - PC_TAB_SWITCH_ACTIONS( server_browser_friends, server_browser_wager, server_browser_favorites ) - SERVER_BROWSER_TAB_COMMON_ITEMS( 4 ) - - // buttons - SERVER_BROWSER_BOTTOM_BUTTONS - - // browser listbox with background - SERVER_BROWSER( browser, FEEDER_SERVERS, 1) - } - - menuDef - { - SERVER_BROWSER_MENU_TEMPLATE( server_browser_favorites, uiscript UpdateNetSource AS_FAVORITES;, ; ) - PC_TAB_SWITCH_ACTIONS( server_browser_favorites, server_browser_friends, server_browser_history ) - SERVER_BROWSER_TAB_COMMON_ITEMS( 5 ) - - // buttons - SERVER_BROWSER_BOTTOM_BUTTONS - - // browser listbox with background - SERVER_BROWSER( browser, FEEDER_SERVERS, 1) - } - - menuDef - { - SERVER_BROWSER_MENU_TEMPLATE( server_browser_history, uiscript UpdateNetSource AS_HISTORY;, ; ) - PC_TAB_SWITCH_ACTIONS( server_browser_history, server_browser_favorites, server_browser_ranked ) - SERVER_BROWSER_TAB_COMMON_ITEMS( 6 ) - - // buttons - SERVER_BROWSER_BOTTOM_BUTTONS - - // browser listbox with background - SERVER_BROWSER( browser, FEEDER_SERVERS, 1) - } - -#undef MENUDEF_NAME -#define MENUDEF_NAME filter_window - -#undef CHOICE_BUTTON_NAME -#define CHOICE_BUTTON_NAME "filter_" - -#define FILTER_WIDTH TABLE_WIDTH -#define FILTER_HEIGHT FILTER_MENU_HEIGHT -#define FILTER_X (TABLE_X - 10) -#define FILTER_Y ( TABLE_Y + (TABLE_HEIGHT - FILTER_HEIGHT) - 2 ) - -#undef CHOICE_TEXT_COLOR_NO_HL -#undef CHOICE_TEXT_COLOR_HL -#undef CHOICE_CAPTION_TEXT_COLOR_NO_HL -#undef CHOICE_CAPTION_TEXT_COLOR_HL - -#define CHOICE_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_TEXT_COLOR_HL 1 1 1 1 -#define CHOICE_CAPTION_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_CAPTION_TEXT_COLOR_HL 0 0 0 1 - - -#undef CHOICE_SIZE_X -#define CHOICE_SIZE_X 120 -#undef CHOICE_Y_START -#define CHOICE_Y_START 0 -#undef CHOICE_X_START -#define CHOICE_X_START 0 - -#undef CHOICE_TEXTSIZE -#define CHOICE_TEXTSIZE TEXTSIZE_SMALL - -#undef CHOICE_DVAR_EXTRA_WIDTH -#define CHOICE_DVAR_EXTRA_WIDTH 60 - - menuDef - { - name filter_window - rect FILTER_X FILTER_Y FILTER_WIDTH FILTER_HEIGHT CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN - focuscolor COLOR_FOCUSED - style WINDOW_STYLE_FILLED - priority MENU_PRI_ONTOP - openSlideSpeed DEFAULT_SLIDE_IN_SPEED - closeSlideSpeed (DEFAULT_SLIDE_OUT_SPEED*2) - openSlideDirection MENU_SLIDE_DIRECTION_BOTTOM_TO_TOP - closeSlideDirection MENU_SLIDE_DIRECTION_TOP_TO_BOTTOM - visible 1 - - onOpen - { - play uin_navigation_menu_lg_open; - execNow ui_animate (dvarString( "ui_serverBrowserMenu" )) Browser "Reduced" DEFAULT_SLIDE_IN_SPEED; - } - onClose - { - execNow ui_animate (dvarString( "ui_serverBrowserMenu" )) Browser "Maximized" DEFAULT_SLIDE_OUT_SPEED; - } - onEsc - { - close self; - } - leaveFocus - { - close self; - } - - itemDef - { - style WINDOW_STYLE_SHADER_FRAMED - rect -10 -10 ( FILTER_WIDTH + 20 ) ( FILTER_HEIGHT + 20 ) HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - background "menu_mp_lobby_frame_outer" - forecolor 1 1 1 1 - visible when( 1 ); - decoration - frame 26 0.1 FRAME_SIDE_ALL - } - itemDef - { - style WINDOW_STYLE_SHADER_FRAMED - rect 0 0 FILTER_WIDTH FILTER_HEIGHT HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER - background "menu_mp_lobby_frame_inner" - forecolor 1 1 1 1 - visible when( 1 ); - decoration - frame 26 0.1 FRAME_OPEN_TOP - } - - // View empty. - FRAME_CHOICE_DVARFLOATLIST( 1, "@MENU_VIEW_EMPTY", ui_browserShowEmpty, { "@MENU_NO" 0 "@MENU_YES" 1 }, uiScript RefreshFilter; ) - - // View full. - FRAME_CHOICE_DVARFLOATLIST( 2, "@MENU_VIEW_FULL", ui_browserShowFull, { "@MENU_NO" 0 "@MENU_YES" 1 }, uiScript RefreshFilter; ) - - // With password. - FRAME_CHOICE_DVARFLOATLIST( 3, "@MENU_VIEW_PASSWORD", ui_browserShowPassword, { "@MENU_ALL" -1 "@MENU_NO" 0 "@MENU_YES" 1 }, uiScript RefreshFilter; ) - - // mods - FRAME_CHOICE_DVARLIST_VIS( 4, "@MENU_MODS", "", ITEM_TYPE_OD_TEXT_BUTTON, ownerdraw UI_JOINMOD, uiScript RefreshFilter;, 1 ) - - - #undef CHOICE_X_START - #define CHOICE_X_START 180 - - #undef CHOICE_Y_START - #define CHOICE_Y_START -76 - - // Voice chat. - FRAME_CHOICE_DVARFLOATLIST( 5, "@MENU_VOICECHAT", ui_browserVoiceChat, { "@MENU_ALL" -1 "@MENU_NO" 0 "@MENU_YES" 1 }, uiScript RefreshFilter; ) - - // Hardcore. - FRAME_CHOICE_DVARFLOATLIST( 6, "@MPUI_HARDCORE_PRE", ui_browserHardcore, { "@MENU_ALL" -1 "@MENU_NO" 0 "@MENU_YES" 1 }, uiScript RefreshFilter; ) - - // Friendly fire. - FRAME_CHOICE_DVARFLOATLIST( 7, "@MENU_VIEW_FRIENDLY_FIRE", ui_browserFriendlyfire, { "@MENU_ALL" -1 "@MENU_OFF" 0 "@MENU_ON" 1 "@MENU_REFLECT" 2 "@MENU_SHARED" 3 }, uiScript RefreshFilter; ) - - - #undef CHOICE_X_START - #define CHOICE_X_START 360 - - #undef CHOICE_Y_START - #define CHOICE_Y_START -152 - -// Map - FRAME_CHOICE_DVARENUMLIST_VIS( 9, "@MPUI_CHANGE_MAP_LOWER", ui_browserMap, ui_browserMap, uiScript RefreshFilter;, 1 ) - - // Game Mode - #define MODE_LIST { "@MENU_ALL"; 0; "@MPUI_TDM_SHORT_CAPS"; "tdm"; "@MPUI_DM_SHORT_CAPS"; "dm"; "@MPUI_SD_SHORT_CAPS"; "sd"; "@MPUI_DOM_SHORT_CAPS"; "dom"; "@MPUI_KOTH_SHORT_CAPS"; "koth"; "@MPUI_DEM_SHORT_CAPS"; "dem"; "@MPUI_CTF_SHORT_CAPS"; "ctf"; "@MPUI_SAB_SHORT_CAPS"; "sab"; } - FRAME_CHOICE_DVARSTRINGLIST( 10, "@MENU_GAME_MODE_PRE", ui_browserGameMode, MODE_LIST;, uiScript RefreshFilter;) - - // Hide Dlc. - FRAME_CHOICE_DVARFLOATLIST( 11, "@MPUI_DLC_CONTENT", ui_browserHideDlc, { "@MENU_ALL" 0 "@MPUI_PURCHASED" 1 }, uiScript RefreshFilter; ) - - #undef CHOICE_SIZE_X - #define CHOICE_SIZE_X 98 - - #undef CHOICE_X_START - #define CHOICE_X_START 480 - -#undef CHOICE_TEXT_COLOR_NO_HL -#undef CHOICE_TEXT_COLOR_HL -#undef CHOICE_CAPTION_TEXT_COLOR_NO_HL -#undef CHOICE_CAPTION_TEXT_COLOR_HL - -#define CHOICE_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_TEXT_COLOR_HL 0 0 0 1 -#define CHOICE_CAPTION_TEXT_COLOR_NO_HL CHOICE_TEXTCOLOR -#define CHOICE_CAPTION_TEXT_COLOR_HL 0 0 0 1 - - // Reset - FRAME_CHOICE_BUTTON( 12, "@MENU_RESET", exec "exec default_filter.cfg"; ) - - // Apply - //FRAME_CHOICE_BUTTON( 14, "@MENU_APPLY", uiScript RefreshFilter; ) - } -} - -#undef CHOICE_TEXTSIZE -#define CHOICE_TEXTSIZE TEXTSIZE_DEFAULT - -#include "ui_mp/popupstyle.inc" -#include "ui/choices_setup_popmenu.menu" -#include "ui_mp/popup_player_info.inc" - -#undef CHOICE_FOCUS_SOUND -#define CHOICE_FOCUS_SOUND "uin_navigation_over" - - // Redefinitions for MEDIUM_POPUP_SETUP popups - #undef POPUP_WIDTH - #define POPUP_WIDTH MEDIUM_POPUP_WIDTH - #undef POPUP_HEIGHT - #define POPUP_HEIGHT MEDIUM_POPUP_HEIGHT - #undef CHOICE_SIZE_X - #define CHOICE_SIZE_X CONFIRM_PURCHASE_SIZE_X - #undef CHOICE_Y_START - #define CHOICE_Y_START POPUP_Y_START_TOP - #undef PLAYER_INFO_ALIGN - #define PLAYER_INFO_ALIGN // Purposely set to nothing. The popup setup macro sets the alignment. If items within it set their own aligment, they end up offset incorrectly. - #undef PLAYER_INFO_X_START - #define PLAYER_INFO_X_START( frameWidth ) ( frameWidth - PLAYER_INFO_WIDTH - PLAYER_INFO_PAD ) - #undef PLAYER_INFO_Y_START - #define PLAYER_INFO_Y_START( frameHeight ) ( PLAYER_INFO_PAD * 2 ) - #undef BG_BACKCOLOR - #define BG_BACKCOLOR POPUP_BACKCOLOR - - #define PURCHASE_CONFIRMATION_RIGHT_X ( MEDIUM_POPUP_WIDTH / 2 ) - #define PURCHASE_INFO_WIDTH ( ( MEDIUM_POPUP_WIDTH / 2 ) - POPUP_SIDE_PAD ) - - #define PURCHASE_CONFIRMATION_ITEM_INFO( itemName, itemCost ) \ - CONFIRMATION_ITEM_INFO_VIS( itemName, itemCost, "@MPUI_BALANCE_AFTER_PURCHASE", locString( "@MENU_POINTS", GetStatByName( "CODPOINTS" ) - itemCost ), 1 ) - - #define CONFIRMATION_ITEM_INFO_VIS( itemName, itemCost, balanceHeader, balanceAfter, visArg ) \ - PREPROC_TEXT_DRAW_VIS_EX( (PURCHASE_CONFIRMATION_RIGHT_X) CHOICE_Y( 1 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, locString( itemName, itemCost ), TEXTSIZE_LARGE, 0, 0, ITEM_ALIGN_MIDDLE_LEFT, NEW_FRAME_GREEN_RGB 1, visArg, ; ) \ /* Name */ - PREPROC_TEXT_DRAW_VIS_EX( (PURCHASE_CONFIRMATION_RIGHT_X) CHOICE_Y( 7 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, "@MPUI_YOUR_BANK", TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, MEDIUM_POPUP_GRAY, visArg, ; ) \ /* Currency Available Header */ - PREPROC_TEXT_DRAW_VIS_EX( (MEDIUM_POPUP_WIDTH-75) CHOICE_Y( 7 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, locString( "@MENU_POINTS", GetStatByName( "CODPOINTS" ) ), TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, visArg, ; ) \ /* Currency Available */ - PREPROC_TEXT_DRAW_VIS_EX( (PURCHASE_CONFIRMATION_RIGHT_X) CHOICE_Y( 8 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, balanceHeader, TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, MEDIUM_POPUP_GRAY, visArg, ; ) \ /* Balance After Purchase Header */ - PREPROC_TEXT_DRAW_VIS_EX( (MEDIUM_POPUP_WIDTH-75) CHOICE_Y( 8 ) PURCHASE_INFO_WIDTH CHOICE_SIZE_Y, 0 0, balanceAfter, TEXTSIZE_DEFAULT, 0, 0, ITEM_ALIGN_TOP_LEFT, 1 1 1 1, visArg, ; ) /* Balance After Purchase */ - - #define WAGER_ONFOCUS \ - ; - - #define WAGER_ONESC \ - setDvar ui_joiningwagerfrominvite "0"; \ - close self; - - #define WAGER_ACTION \ - play CHOICE_FOCUS_SOUND; \ - uiScript JoinServer; \ - WAGER_ONESC -menuDef -{ - MEDIUM_POPUP_SETUP_VIS( "WagerConfirmation", setfocus "WagerConfirmation_2";, ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@PLATFORM_CONFIRM_WAGER_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( "@PLATFORM_WAGER_BET", dvarInt("ui_wagerbet") ) - - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_JOIN_GAME_CAPS", WAGER_ACTION, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_CANCEL_CAPS", WAGER_ONESC, 1, name WagerConfirmation_2 ) -} - -#define WAGER_ACTION2 \ - play CHOICE_FOCUS_SOUND; \ - execNow quickmatchconnect; \ - WAGER_ONESC -menuDef -{ - MEDIUM_POPUP_SETUP_VIS( "QuickWagerConfirmation", setfocus "QuickWagerConfirmation_2";, ;, POPUP_GLOW_GREEN, 1, 1 ) - MEDIUM_POPUP_TITLE_VIS( "@PLATFORM_CONFIRM_WAGER_CAPS", 1 ) - PLAYER_INFO_VIS( MEDIUM_POPUP_WIDTH, MEDIUM_POPUP_HEIGHT, 1 ) - PURCHASE_CONFIRMATION_ITEM_INFO( "@PLATFORM_WAGER_BET", dvarInt("ui_wagerbet") ) - - - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_JOIN_GAME_CAPS", WAGER_ACTION2, 1, ; ) - FRAME_CHOICE_BUTTON_VIS_EX( 2, "@MENU_CANCEL_CAPS", close self, 1, name QuickWagerConfirmation_2 ) -} - - #undef CHOICE_Y_START - #define CHOICE_Y_START POPUP_Y_START_CENTER - - #undef POPUP_BUTTON_COUNT - #define POPUP_BUTTON_COUNT 1 -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( WagerDeadBeat, WAGER_ONFOCUS, WAGER_ONESC, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@PLATFORM_WAGER_DEADBEAT_TITLE", 1 ) - - SYSTEM_POPUP_SUBTITLE_VIS( locString( "@PLATFORM_WAGER_DEADBEAT_DESC", dvarInt( "ui_wagerbet" ) ), 1 ) - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", WAGER_ONESC, 1, ; ) -} - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( WagerPlaylistIsOld, WAGER_ONFOCUS, WAGER_ONESC, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_ERROR_CAPS", 1 ) - - SYSTEM_POPUP_SUBTITLE_VIS( locString( "@PATCH_PLAYLISTISOLD" ), 1 ) - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", WAGER_ONESC, 1, ; ) -} - -menuDef -{ - SYSTEM_POPUP_SETUP_VIS( WagerPlaylistIsNew, WAGER_ONFOCUS, WAGER_ONESC, 1 ) - SYSTEM_POPUP_TITLE_VIS( "@MENU_ERROR_CAPS", 1 ) - - SYSTEM_POPUP_SUBTITLE_VIS( locString( "@PATCH_PLAYLISTISNEW" ), 1 ) - FRAME_CHOICE_BUTTON_VIS_EX( 1, "@MENU_OK", WAGER_ONESC, 1, ; ) -} - diff --git a/mods/patch_ui_mp/mod.csv b/mods/patch_ui_mp/mod.csv deleted file mode 100644 index e69de29..0000000 diff --git a/mods/mp_bots/mp/gametypesTable.csv b/mp/gametypesTable.csv similarity index 100% rename from mods/mp_bots/mp/gametypesTable.csv rename to mp/gametypesTable.csv diff --git a/out/Move to root of Black Ops folder/mods/mp_bots/description.txt b/out/Move to root of Black Ops folder/mods/mp_bots/description.txt deleted file mode 100644 index 8245eea..0000000 --- a/out/Move to root of Black Ops folder/mods/mp_bots/description.txt +++ /dev/null @@ -1 +0,0 @@ -Extends functionality of Combat Training. \ No newline at end of file diff --git a/out/Move to root of Black Ops folder/mods/mp_bots/mod.ff b/out/Move to root of Black Ops folder/mods/mp_bots/mod.ff deleted file mode 100644 index ba5d576..0000000 Binary files a/out/Move to root of Black Ops folder/mods/mp_bots/mod.ff and /dev/null differ diff --git a/out/Move to root of Black Ops folder/mods/mp_bots/mp_bots.iwd b/out/Move to root of Black Ops folder/mods/mp_bots/mp_bots.iwd deleted file mode 100644 index 1ef994c..0000000 Binary files a/out/Move to root of Black Ops folder/mods/mp_bots/mp_bots.iwd and /dev/null differ diff --git a/out/Others/patch_mp.ff b/out/Others/patch_mp.ff deleted file mode 100644 index 5020cd1..0000000 Binary files a/out/Others/patch_mp.ff and /dev/null differ diff --git a/out/Others/patch_ui_mp.ff b/out/Others/patch_ui_mp.ff deleted file mode 100644 index f938024..0000000 Binary files a/out/Others/patch_ui_mp.ff and /dev/null differ diff --git a/out/readme.txt b/out/readme.txt deleted file mode 100644 index a2f56fb..0000000 --- a/out/readme.txt +++ /dev/null @@ -1,52 +0,0 @@ -# BO1 Bot Warfare -Bot Warfare is a GSC mod for Black Ops 1. - -It aims to extend the existing AI in the multiplayer games of Black Ops 1. - -You can find the more information at the Git Repo: https://github.com/ineedbots/bo1_bot_warfare - -## Installation -1. Locate the root folder which your game is installed in. -2. Move the files/folders found in 'Move to root of Black Ops folder' from the Bot Warfare release archive you downloaded to the root of your Black Ops folder. - - The folder/file structure should follow as '.Black Ops folder\mods\mp_bots\mp_bots.iwd'. -3. The mod is now installed. Start your game, go to the 'Mods' menu and select 'mp_bots'. -4. The mod is now loaded! Go play Combat Training and enjoy the new additions. - -## Changelog -- v1.1.1 - - Fixed some script runtime errors - - Improved domination - - Bots use altmode weapons - - Improved revenge - - Bots can swap weapons on spawn more likely - -- v1.1.0 - - Rewrote using CoD4x as a base - - Fixed bots not knifing - - Fixed several bugs, mainly with bot goals - - New way of adding/managing bots, new dvars - - Fixed bots force spawning - - Fixed infinite loops and script errors - -- v1.03 - - Fixed bots switching to secondaries all the time. - - Bots can freely switch to their secondaries. - - Fixed HCTDM scorelimit menu option. - -- v1.02 - - Fixed a few small bugs. A possible infinite loop when bots are too poor for a grenade and reasonable setups are on, and bots never spawning after death with forcerespawn off. - - Added an option to allow for UNLIMITED score. - -- v1.01 - - Fixed bot's rank not updating after a multiround. - - Can now set bot numbers for friends and enemies from 0 - 30 within menu. (15v15) (1v29) - -- v1.0 - - Initial release. - -## Credits -- INeedGames(me) - http://www.moddb.com/mods/bot-warfare -- apdonato - http://rsebots.blogspot.ca/ - -Feel free to use code, host on other sites, host on servers, mod it and merge mods with it, just give credit where credit is due! - -INeedGames/INeedBot(s) @ ineedbots@outlook.com diff --git a/out/ss.png b/out/ss.png deleted file mode 100644 index 30bce1f..0000000 Binary files a/out/ss.png and /dev/null differ diff --git a/mods/mp_bots/ui_mp/cac_main.menu b/ui_mp/cac_main.menu similarity index 100% rename from mods/mp_bots/ui_mp/cac_main.menu rename to ui_mp/cac_main.menu diff --git a/mods/mp_bots/ui_mp/custom_game_create.menu b/ui_mp/custom_game_create.menu similarity index 100% rename from mods/mp_bots/ui_mp/custom_game_create.menu rename to ui_mp/custom_game_create.menu diff --git a/mods/mp_bots/ui_mp/pc_basictraining.menu b/ui_mp/pc_basictraining.menu similarity index 100% rename from mods/mp_bots/ui_mp/pc_basictraining.menu rename to ui_mp/pc_basictraining.menu diff --git a/mods/mp_bots/ui_mp/playercards.menu b/ui_mp/playercards.menu similarity index 100% rename from mods/mp_bots/ui_mp/playercards.menu rename to ui_mp/playercards.menu diff --git a/z_deploy.bat b/z_deploy.bat deleted file mode 100644 index 05197ae..0000000 --- a/z_deploy.bat +++ /dev/null @@ -1 +0,0 @@ -start "" "node" deploy.js \ No newline at end of file diff --git a/z_server.bat b/z_server.bat deleted file mode 100644 index ee8edea..0000000 --- a/z_server.bat +++ /dev/null @@ -1,44 +0,0 @@ -@echo off -::Paste the server key from https://platform.plutonium.pw/serverkeys here -set key= -::RemoteCONtrol password, needed for most management tools like IW4MADMIN and B3. Do not skip if you installing IW4MADMIN. -set rcon_password= -::Name of the config file the server should use. -set cfg=server.cfg -::Name of the server shown in the title of the cmd window. This will NOT bet shown ingame. -set name=PlutoniumT5MP Bot Warfare -::Port used by the server (default: 28960) -set port=28967 -::What ip to bind too -set ip=0.0.0.0 -::Mod name (default "") -set mod= -:: current dir of this .bat file -SET mypath=%~dp0 -SET mypath=%mypath:~0,-1% -::Only change this when you don't want to keep the bat files in the game folder. MOST WON'T NEED TO EDIT THIS! %cd% -set gamepath=%mypath% -::Your plutonium install path (leave default!) -set pluto_path=%localappdata%\Plutonium -:: Gamemode; oneof t4sp, t4mp, t5sp, t5mp, iw5mp, t6mp, t6zm -set pluto_game_mode=t5mp -:: Other things to send to cmd -set cmd_extras= -:: Exe dedi path (leave default!) -set exe_path=bin\plutonium-bootstrapper-win32.exe -::IMPORTANT! Make sure the filename is unique for each server you clone! -set log_file=games_mp.log - - -title Plutonium - %name% - Server restarter -echo Visit plutonium.pw / Join the Discord (a6JM2Tv) for NEWS and Updates! -echo Server "%name%" will load "%cfg%" and listen on port "%port%" UDP with IP "%ip%"! -echo To shut down the server close this window first! -echo (%date%) - (%time%) %name% server start. - -cd /D %pluto_path% -:server -start /wait /abovenormal /b "%name%" "%exe_path%" %pluto_game_mode% "%gamepath%" -dedicated -key "%key%" +set net_ip "%ip%" +set net_port "%port%" +set rcon_password "%rcon_password%" +set fs_game "%mod%" +set g_log "%log_file%" +exec "%cfg%" %cmd_extras% +map_rotate -echo (%date%) - (%time%) WARNING: %name% server closed or dropped... server restarts. -goto server -