From 20c73de7a57f0ca42022c361fd73de25af68da4d Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Sat, 2 Apr 2016 19:40:56 +0200 Subject: [PATCH] Initial commit. --- .gitignore | 4 + ap/gameTypesTable.csv | 2 + english/localizedstrings/hns.str | 28 + german/localizedstrings/hns.str | 28 + maps/mp/gametypes/_gametypes.txt | 1 + maps/mp/gametypes/dm.gsc | 14 + maps/mp/gametypes/hns.gsc | 880 ++++++++++++++++++++++++++++ maps/mp/gametypes/hns.txt | 3 + maps/mp/gametypes/war.gsc | 14 + maps/mp/mods/_modellist.gsc | 943 ++++++++++++++++++++++++++++++ maps/mp/mods/disableClassMenu.gsc | 41 ++ spanish/localizedstrings/hns.str | 28 + ui_mp/settings_gametype.menu | 648 ++++++++++++++++++++ 13 files changed, 2634 insertions(+) create mode 100644 .gitignore create mode 100644 ap/gameTypesTable.csv create mode 100644 english/localizedstrings/hns.str create mode 100644 german/localizedstrings/hns.str create mode 100644 maps/mp/gametypes/_gametypes.txt create mode 100644 maps/mp/gametypes/dm.gsc create mode 100644 maps/mp/gametypes/hns.gsc create mode 100644 maps/mp/gametypes/hns.txt create mode 100644 maps/mp/gametypes/war.gsc create mode 100644 maps/mp/mods/_modellist.gsc create mode 100644 maps/mp/mods/disableClassMenu.gsc create mode 100644 spanish/localizedstrings/hns.str create mode 100644 ui_mp/settings_gametype.menu diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a87329f --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +demos/ +*.log +*.log.??? +missingasset.csv diff --git a/ap/gameTypesTable.csv b/ap/gameTypesTable.csv new file mode 100644 index 0000000..c7aa9e9 --- /dev/null +++ b/ap/gameTypesTable.csv @@ -0,0 +1,2 @@ +a0,b1,c2,d3 +hns,MPUI_HIDEANDSEEK,MENU_HIDEANDSEEK,weapon_missing_image diff --git a/english/localizedstrings/hns.str b/english/localizedstrings/hns.str new file mode 100644 index 0000000..a8456bc --- /dev/null +++ b/english/localizedstrings/hns.str @@ -0,0 +1,28 @@ +VERSION "1" +FILENOTES "Hide & Seek localized strings" + +REFERENCE MPUI_HIDEANDSEEK +LANG_ENGLISH "Hide & Seek" + +REFERENCE MPUI_HIDEANDSEEK_CAPS +LANG_ENGLISH "HIDE & SEEK" + +REFERENCE MPUI_HIDEANDSEEK_SHORT_CAPS +LANG_ENGLISH "HNS" + +REFERENCE MENU_HIDEANDSEEK +LANG_ENGLISH "As a hider, try to blend into the environment - if all goes bad, you can still fight back.\nAs a seeker, try to find the hiders and kill them." + +REFERENCE OBJECTIVES_HIDEANDSEEK_DEFENDER +LANG_ENGLISH "Disguise yourself and survive." + +REFERENCE HIDEANDSEEK_TIMER_SEEKER_RELEASE +LANG_ENGLISH "Seekers released in &&1" + +REFERENCE HIDEANDSEEK_TIMER_SEEKER_RELEASE_TITLE +LANG_ENGLISH "Seekers will be released in:" + +REFERENCE HIDEANDSEEK_SEEKERS_RELEASED +LANG_ENGLISH "Seekers have been released." + +ENDMARKER \ No newline at end of file diff --git a/german/localizedstrings/hns.str b/german/localizedstrings/hns.str new file mode 100644 index 0000000..66b642c --- /dev/null +++ b/german/localizedstrings/hns.str @@ -0,0 +1,28 @@ +VERSION "1" +FILENOTES "Hide & Seek lokalisierte Texte" + +REFERENCE MPUI_HIDEANDSEEK +LANG_ENGLISH "Hide & Seek" + +REFERENCE MPUI_HIDEANDSEEK_CAPS +LANG_ENGLISH "HIDE & SEEK" + +REFERENCE MPUI_HIDEANDSEEK_SHORT_CAPS +LANG_ENGLISH "HNS" + +REFERENCE MENU_HIDEANDSEEK +LANG_GERMAN "Als ein Hider sollst du versuchen, dich an deine Umgebung anzupassen - wenn alles schief läuft kannst du immer noch zurückschlagen.\nAls ein Seeker musst du die Hider finden und ausschalten." + +REFERENCE OBJECTIVES_HIDEANDSEEK_DEFENDER +LANG_GERMAN "Tarne dich and überlebe." + +REFERENCE HIDEANDSEEK_TIMER_SEEKER_RELEASE +LANG_GERMAN "Seeker kommen in &&1" + +REFERENCE HIDEANDSEEK_TIMER_SEEKER_RELEASE_TITLE +LANG_GERMAN "Seeker werden freigelassen in:" + +REFERENCE HIDEANDSEEK_SEEKERS_RELEASED +LANG_ENGLISH "Seeker freigelassen." + +ENDMARKER \ No newline at end of file diff --git a/maps/mp/gametypes/_gametypes.txt b/maps/mp/gametypes/_gametypes.txt new file mode 100644 index 0000000..bfb6c8f --- /dev/null +++ b/maps/mp/gametypes/_gametypes.txt @@ -0,0 +1 @@ +hns \ No newline at end of file diff --git a/maps/mp/gametypes/dm.gsc b/maps/mp/gametypes/dm.gsc new file mode 100644 index 0000000..5594ef2 --- /dev/null +++ b/maps/mp/gametypes/dm.gsc @@ -0,0 +1,14 @@ +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::SetupCallbacks(); + maps\mp\gametypes\_globallogic::SetupCallbacks(); + + // Force HNS + setDvar("ui_gametype", "Hide & Seek"); + setDvar("g_gametype", "hns"); + Map_Restart(false); +} \ No newline at end of file diff --git a/maps/mp/gametypes/hns.gsc b/maps/mp/gametypes/hns.gsc new file mode 100644 index 0000000..740d26d --- /dev/null +++ b/maps/mp/gametypes/hns.gsc @@ -0,0 +1,880 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\perks\_perks; +#include maps\mp\gametypes\_hud_util; +#include maps\mp\mods\disableClassMenu; + +// Rallypoints should be destroyed on leaving your team/getting killed +// Doesn't seem to be setting angle on spawn so that you are facing your rallypoint + +/* + Hide and Seek + Attackers objective: Kill all enemies. + Defenders objective: Hide as an entity on the map, optionally meleeing attackers. + Round ends: When one team is eliminated, or roundlength time is reached + Map ends: When one team reaches the score limit, or time limit or round limit is reached + Respawning: Players remain dead for the round and will respawn at the beginning of the next round + + For this gametype, special key bindings need to be enabled. + + - Switching into a prop(menu) + - Switching into a prop(quick) + - Rotating the prop(fast) + - Rotating the prop(slow) + + Level requirements + ------------------ + Allied Spawnpoints: + classname mp_sd_spawn_attacker + Allied players spawn from these. Place at least 16 of these relatively close together. + + Axis Spawnpoints: + classname mp_sd_spawn_defender + 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. + + Level script requirements + ------------------------- + Team Definitions: + game["seekers"] = "allies"; + game["hiders"] = "axis"; + +*/ + +/*QUAKED mp_sd_spawn_attacker(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_sd_spawn_defender(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.*/ + +main() +{ + // Make gametype display properly in server browser + setDvar("ui_gametype", "Hide & Seek"); + + // We don't run this gametype in the menu + if (getdvar("mapname") == "mp_background") + return; + + // Define allowed seeker weapons + level.seekerWeapons = []; + level.seekerWeapons[0] = "m16"; + level.seekerWeapons[1] = "m4"; + level.seekerWeapons[2] = "ump45"; + level.seekerWeapons[3] = "fal"; + level.seekerWeapons[4] = "scar"; + level.seekerWeapons[5] = "ak47"; + level.seekerWeapons[6] = "p90"; + level.seekerWeapons[7] = "famas"; + + // Time for hiders to hide before releasing seekers + // TODO - make this a dvar + + // Performance tweaking + // TODO - currently does not allow more than 200 in dvar + if (getDvar("sys_cpughz") > 2) + { + setDvar("sv_network_fps", 200); + } + + // Make DVars available + level.gameType = "hns"; + setDvarIfUninitialized("scr_" + level.gameType + "_roundswitch", 1); + setDvarIfUninitialized("scr_" + level.gameType + "_timelimit", 5); + setDvarIfUninitialized("scr_" + level.gameType + "_scorelimit", 1); + setDvarIfUninitialized("scr_" + level.gameType + "_roundlimit", 0); + setDvarIfUninitialized("scr_" + level.gameType + "_winlimit", 4); + setDvarIfUninitialized("scr_" + level.gameType + "_halftime", 0); + setDvarIfUninitialized("scr_" + level.gameType + "_numlives", 1); + + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::SetupCallbacks(); + maps\mp\gametypes\_globallogic::SetupCallbacks(); + + level.teamBased = true; + + // General game logic DVars + registerRoundSwitchDvar(level.gameType, 1, 0, 9); + registerTimeLimitDvar(level.gameType, 5, 0, 1440); + registerScoreLimitDvar(level.gameType, 1, 0, 500); + registerRoundLimitDvar(level.gameType, 0, 0, 12); + registerWinLimitDvar(level.gameType, 4, 0, 12); + registerHalfTimeDvar(level.gameType, 0, 0, 1); + registerNumLivesDvar(level.gameType, 1, 0, 10); + + // Specific DVars for this gametype + registerPrereleaseDvar(level.gameType, 30, 0, 300); + + // event handlers + //level.onXPEvent = ::onXPEvent; + + level.getSpawnPoint = ::getSpawnPoint; + level.onSpawnPlayer = ::onSpawnPlayer; + level.onRespawnDelay = maps\mp\gametypes\_globallogic::blank; + + level.onTimeLimit = ::onTimeLimit; + level.onHalfTime = maps\mp\gametypes\_gamelogic::default_onHalfTime; + level.onDeadEvent = ::onDeadEvent; + level.onOneLeftEvent = ::onOneLeftEvent; + + level.onPrecacheGametype = ::onPrecacheGametype; + level.onStartGameType = ::onStartGameType; + level.onPlayerKilled = ::onPlayerKilled; + level.onNormalDeath = ::onNormalDeath; + + game["dialog"]["gametype"] = "hns"; + + if (getDvarInt("g_hardcore")) + game["dialog"]["gametype"] = "hc_" + game["dialog"]["gametype"]; + else if (getDvarInt("camera_thirdPerson")) + game["dialog"]["gametype"] = "thirdp_" + game["dialog"]["gametype"]; + else if (getDvarInt("scr_diehard")) + game["dialog"]["gametype"] = "dh_" + game["dialog"]["gametype"]; + else if (getDvarInt("scr_" + level.gameType + "_promode")) + game["dialog"]["gametype"] = game["dialog"]["gametype"] + "_pro"; + + // stretch regen time + maps\mp\gametypes\_tweakables::registerTweakable("player", "healthregentime", "scr_player_healthregentime", 10); + + // disable all unwanted kinds of weapons + maps\mp\gametypes\_tweakables::setTweakableValue("weapon", "allowfrag", "scr_weapon_allowfrags", 0); + maps\mp\gametypes\_tweakables::setTweakableValue("weapon", "allowsmoke", "scr_weapon_allowsmoke", 0); + maps\mp\gametypes\_tweakables::setTweakableValue("weapon", "allowflash", "scr_weapon_allowflash", 0); + maps\mp\gametypes\_tweakables::setTweakableValue("weapon", "allowc4", "scr_weapon_allowc4", 0); + maps\mp\gametypes\_tweakables::setTweakableValue("weapon", "allowclaymores", "scr_weapon_allowclaymores", 0); + maps\mp\gametypes\_tweakables::setTweakableValue("weapon", "allowrpgs", "scr_weapon_allowrpgs", 0); + maps\mp\gametypes\_tweakables::setTweakableValue("weapon", "allowmines", "scr_weapon_allowmines", 0); + + // disable all hardpoints + maps\mp\gametypes\_tweakables::setTweakableValue("hardpoint", "allowartillery", "scr_hardpoint_allowartillery", 0); + maps\mp\gametypes\_tweakables::setTweakableValue("hardpoint", "allowuav", "scr_hardpoint_allowuav", 0); + maps\mp\gametypes\_tweakables::setTweakableValue("hardpoint", "allowsupply", "scr_hardpoint_allowsupply", 0); + maps\mp\gametypes\_tweakables::setTweakableValue("hardpoint", "allowhelicopter", "scr_hardpoint_allowhelicopter", 0); + + level disableClassMenu(); + level maps\mp\mods\_modellist::initModelList(); + + initGameFlags(); + gameFlagInit("seekers_released", false); +} + +onPrecacheGametype() +{ + logString("onPrecacheGametype called"); + + //game["seekers_released_sound"] = "bomb_taken"; <= doesn't work + //game["seekers_released_sound"] = "mp_obj_taken"; + game["seekers_released_sound"] = "elev_bell_ding"; + game["seekers_blind_sound"] = "elev_run_end"; + //game["hiders_changed_sound"] = "claymore_activated"; + game["hiders_changed_sound"] = "weap_c4detpack_trigger_plr"; + //game["hiders_changed_sound"] = "positions_lock"; + + game["fx_confetti"] = LoadFX("props/cash_player_drop"); + game["fx_boom"] = LoadFX("props/electricbox4_explode"); + + PreCacheString(&"HIDEANDSEEK_TIMER_SEEKER_RELEASE"); + PreCacheString(&"HIDEANDSEEK_TIMER_SEEKER_RELEASE_TITLE"); + PreCacheString(&"HIDEANDSEEK_SEEKERS_RELEASED"); + PreCacheString(&"OBJECTIVES_HIDEANDSEEK_DEFENDER"); +} + +registerPrereleaseDvar(dvarString, defaultValue, minValue, maxValue) +{ + logString("registerPrereleaseDvar called"); + + registerWatchDvarInt("prereleasetime", defaultValue); + + dvarString = "scr_" + dvarString + "_prereleasetime"; + + level.preReleaseTimeDvar = dvarString; + level.preReleaseTimeMin = minValue; + level.preReleaseTimeMax = maxValue; + level.preReleaseTime = getDvarInt(dvarString, defaultValue); + + if (level.preReleaseTime < minValue) + { + level.preReleaseTime = minValue; + } + else if (level.preReleaseTime > maxValue) + { + level.preReleaseTime = maxValue; + } +} + +updateGametypeDvars() +{ + logString("updateGametypeDvars called"); + + // no time <= {prereleasetime} <= 5 minutes + level.preReleaseTime = dvarIntValue("prereleasetime", 30, 0, 5 * 60); + +} + +onStartGameType() +{ + logString("onStartGameType called"); + + // reset flags + gameFlagClear("seekers_released"); + + if (!IsDefined(game["switchedsides"])) + game["switchedsides"] = false; + + // Define who's seekers and who's hiders + if (!IsDefined(game["seekers"]) || !IsDefined(game["hiders"])) + { + game["seekers"] = "allies"; + game["hiders"] = "axis"; + + // compatibility with the game's own game logic + game["attackers"] = game["seekers"]; + game["defenders"] = game["hiders"]; + } + + // handle side switching + if (game["switchedsides"]) + { + oldSeekers = game["seekers"]; + oldHiders = game["hiders"]; + game["seekers"] = oldHiders; + game["hiders"] = oldSeekers; + } + + // team setup + setDvar("g_TeamName_" + game["hiders"], "Hiders"); + setDvar("g_TeamName_" + game["seekers"], "Seekers"); + + // prevent spectators ghosting through nickchanging + setClientNameMode("auto_change"); + + // objective text + // TODO + setObjectiveText(game["seekers"], &"OBJECTIVES_WAR"); + setObjectiveText(game["hiders"], &"OBJECTIVES_HIDEANDSEEK_DEFENDER"); + if (!level.splitscreen) + { + setObjectiveScoreText(game["seekers"], &"OBJECTIVES_WAR_SCORE"); + setObjectiveScoreText(game["hiders"], &"OBJECTIVES_SD_DEFENDER_SCORE"); + } + setObjectiveHintText(game["seekers"], &"OBJECTIVES_WAR_HINT"); + setObjectiveHintText(game["hiders"], &"OBJECTIVES_HIDEANDSEEK_DEFENDER"); + + // spawn points + level.spawnMins = (0, 0, 0); + level.spawnMaxs = (0, 0, 0); + maps\mp\gametypes\_spawnlogic::placeSpawnPoints("mp_sd_spawn_attacker"); + maps\mp\gametypes\_spawnlogic::placeSpawnPoints("mp_sd_spawn_defender"); + + // center of map + level.mapCenter = maps\mp\gametypes\_spawnlogic::findBoxCenter( level.spawnMins, level.spawnMaxs ); + setMapCenter( level.mapCenter ); + + // game objects on map + allowed[0] = "dm"; + allowed[1] = "war"; + allowed[2] = level.gameType; + maps\mp\gametypes\_gameobjects::main(allowed); + + // remove turrets + level deletePlacedEntity("misc_turret"); + + // scoring + maps\mp\gametypes\_rank::registerScoreInfo("win", 2); + maps\mp\gametypes\_rank::registerScoreInfo("loss", 1); + maps\mp\gametypes\_rank::registerScoreInfo("tie", 1.5); + // + maps\mp\gametypes\_rank::registerScoreInfo("kill", 50); + maps\mp\gametypes\_rank::registerScoreInfo("headshot", 50); + maps\mp\gametypes\_rank::registerScoreInfo("assist", 20); + + // life count + level.livesCount[game["seekers"]] = 1; + + level updateGametypeDvars(); + + level thread levelReleaseTimer(); + level thread levelSpeeding(); +} + +getSpawnPoint() +{ + logString("getSpawnPoint called"); + + if (self.pers["team"] == game["seekers"]) + spawnPointName = "mp_sd_spawn_attacker"; + else + spawnPointName = "mp_sd_spawn_defender"; + + spawnPoints = maps\mp\gametypes\_spawnlogic::getSpawnpointArray(spawnPointName); + assert(spawnPoints.size); + spawnpoint = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Random(spawnPoints); + + return spawnpoint; +} + +onSpawnPlayer() +{ + logString("onSpawnPlayer called"); + + player = self; + + //player.spawnprotection = 0; + //player thread DoSpawnProtection(); + + //player SetClientDvar("cg_scoreboardItemHeight", 13); + player SetClientDvar("lowAmmoWarningColor1", 0, 0, 0, 0); + player SetClientDvar("lowAmmoWarningColor2", 0, 0, 0, 0); + player SetClientDvar("lowAmmoWarningNoAmmoColor1", 0, 0, 0, 0); + player SetClientDvar("lowAmmoWarningNoAmmoColor2", 0, 0, 0, 0); + player SetClientDvar("lowAmmoWarningNoReloadColor1", 0, 0, 0, 0); + player SetClientDvar("lowAmmoWarningNoReloadColor2", 0, 0, 0, 0); + + if (player.pers["team"] == game["hiders"]) + { + player thread handleHider(); + } + else if (player.pers["team"] == game["seekers"]) + { + player thread handleSeeker(); + } + + level notify("spawned_player"); +} + +onPlayerKilled(eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime, deathAnimDuration, killId) +{ + logString("onPlayerKilled called"); + + player = self; + + // If victim has a custom model, destroy it + if (IsDefined(player.customModel)) + { + player.customModel Delete(); + } + + // If victim had a custom model set, reset it + if (IsDefined(player.originalModel)) + { + player SetModel(player.originalModel); + player PlaySound(game["hiders_changed_sound"]); + player.originalModel = undefined; + } + if (IsDefined(player.originalModelAttachments)) + { + player DetachAll(); + for (index = 0; index < player.originalModelAttachments.size; index++) + { + player Attach(player.originalModelAttachments[index].model, player.originalModelAttachments[index].tag); + } + player.originalModelAttachments = undefined; + } + + // Update spectator permissions + thread checkAllowSpectating(); +} + + +checkAllowSpectating() +{ + logString("checkAllowSpectating called"); + + wait(0.05); + + if (!level.aliveCount[game["seekers"]]) + { + level.spectateOverride[game["seekers"]].allowEnemySpectate = 1; + maps\mp\gametypes\_spectating::updateSpectateSettings(); + } + + if (!level.aliveCount[game["hiders"]]) + { + level.spectateOverride[game["hiders"]].allowEnemySpectate = 1; + maps\mp\gametypes\_spectating::updateSpectateSettings(); + } +} + + +onDeadEvent(team) +{ + logString("onDeadEvent called"); + + if (team == "all") + { + thread maps\mp\gametypes\_gamelogic::endGame("tie", game["strings"]["tie"]); + } + else if (team == game["seekers"]) + { + level thread maps\mp\gametypes\_gamelogic::endGame(game["hiders"], game["strings"][game["seekers"]+"_eliminated"]); + } + else if (team == game["hiders"]) + { + level thread maps\mp\gametypes\_gamelogic::endGame(game["seekers"], game["strings"][game["hiders"]+"_eliminated"]); + } +} + + +onTimeLimit() +{ + logString("onTimeLimit called"); + + // Hiders win when time limit reached + thread maps\mp\gametypes\_gamelogic::endGame(game["hiders"], game["strings"]["time_limit_reached"]); +} + + +onNormalDeath(victim, attacker, lifeId) +{ + logString("onNormalDeath called"); + + // Make sure the kill score is set properly + score = maps\mp\gametypes\_rank::getScoreInfoValue("kill"); + assert(isDefined(score)); + + thread maps\mp\_matchdata::logKillEvent(lifeId, victim.pers["team"]); + + // Is this the final kill? + if (game["state"] == "postgame") + attacker.finalKill = true; +} + + +onOneLeftEvent(team) +{ + logString("onOneLeftEvent called"); + + player = getLastLivingPlayer(team); + + player thread giveLastOnTeamWarning(); +} + + +giveLastOnTeamWarning() +{ + logString("giveLastOnTeamWarning called"); + + player = self; + + player endon("death"); + player endon("disconnect"); + level endon("game_ended"); + + player waitTillRecoveredHealth(3); + + otherTeam = getOtherTeam(player.pers["team"]); + level thread teamPlayerCardSplash("callout_lastteammemberalive", player, player.pers["team"]); + level thread teamPlayerCardSplash("callout_lastenemyalive", player, otherTeam); + level notify("last_alive", player); +} + +levelReleaseTimer() +{ + logString("levelReleaseTimer called"); + + gameFlagClear("seekers_released"); + gameFlagWait("prematch_done"); + + if (!level.preReleaseTime) + { + gameFlagSet("seekers_released"); + return; + } + + maps\mp\gametypes\_gamelogic::pauseTimer(); + + timerDisplays = []; + + // Display a pre-release timer on the top right corner for the hiders + timerDisplay = createServerTimer("objective", 1.4, game["hiders"]); + timerDisplay setPoint("TOPRIGHT", "TOPRIGHT", -8, 8); + timerDisplay.archived = false; + timerDisplay.hideWhenInMenu = false; + timerDisplay.label = &"HIDEANDSEEK_TIMER_SEEKER_RELEASE"; + timerDisplay.alpha = 1; + timerDisplay setTimer(level.preReleaseTime); + timerDisplays[0] = timerDisplay; + + // Display a pre-release timer in the center for the seekers + timerDisplayText = createServerFontString("objective", 1.5, game["seekers"]); + timerDisplayText setPoint("CENTER", "CENTER", 0, -40); + timerDisplayText.sort = 1001; + timerDisplayText setText(&"HIDEANDSEEK_TIMER_SEEKER_RELEASE_TITLE"); + timerDisplayText.foreground = false; + timerDisplayText.hideWhenInMenu = true; + timerDisplays[1] = timerDisplayText; + timerDisplay = createServerTimer("hudbig", 1, game["seekers"]); + timerDisplay setPoint("CENTER", "CENTER", 0, 0); + timerDisplay.sort = 1001; + timerDisplay.color = (1,1,0); + timerDisplay.foreground = false; + timerDisplay.hideWhenInMenu = true; + timerDisplay maps\mp\gametypes\_hud::fontPulseInit(); + //timerDisplay setTimer(level.preReleaseTime); + timerDisplays[2] = timerDisplay; + + waittillframeend; // wait till cleanup of previous start timer if multiple happen at once + timerSeconds = level.preReleaseTime; + for (timerSeconds = level.preReleaseTime; timerSeconds > 0 && !level.gameEnded; timerSeconds--) + { + timerDisplays[2] thread maps\mp\gametypes\_hud::fontPulse(level); + wait (timerDisplays[2].inFrames * 0.05); + timerDisplays[2] SetValue(timerSeconds); + wait (1 - (timerDisplays[2].inFrames * 0.05)); + } + + if (!level.gameEnded) + { + // Prerelease phase done + gameFlagSet("seekers_released"); + maps\mp\gametypes\_gamelogic::resumeTimer(); + } + + for (index = 0; index < timerDisplays.size; index++) + timerDisplays[index] destroyElem(); +} + +levelSpeeding() +{ + logString("levelSpeeding called"); + + level endon("game_ended"); + + originalSpeed = GetDvarInt("g_speed"); + originalSprintUnlimited = GetDvar("player_sprintUnlimited"); + + thread levelRevertSpeedingWhenGameEnds(originalSpeed, originalSprintUnlimited); + + setDvar("g_speed", originalSpeed * 1.6); + setDvar("player_sprintUnlimited", 1); + + gameFlagWait("seekers_released"); + + setDvar("g_speed", originalSpeed); + setDvar("player_sprintUnlimited", originalSprintUnlimited); +} + +levelRevertSpeedingWhenGameEnds(originalSpeed, originalSprintUnlimited) +{ + logString("levelRevertSpeedingWhenGameEnds called"); + + level endon("seekers_released"); + level waittill("game_ended"); + + setDvar("g_speed", originalSpeed); + setDvar("player_sprintUnlimited", originalSprintUnlimited); +} + +handleSeeker() { + logString("handleSeeker called"); + + player = self; + + player endon("disconnect"); + player endon("death"); + level endon("game_ended"); + + // Wait for _playerlogic to give the player his default weapons and perks + player waittill("spawned_player"); + + // Disable third-person mode + player SetClientDvar("cg_thirdperson", 0); + + // Set player health high enough for stabbing to not instantly kill them + //player.maxhealth = 280; + //player.health = 280; + + // Take weapons and perks + player ClearPerks(); + player TakeAllWeapons(); + + // Give gametype-friendly perks + player GivePerk("specialty_lightweight"); + player GivePerk("specialty_coldblooded"); + player GivePerk("specialty_marathon"); + player GivePerk("specialty_falldamage"); + player GivePerk("specialty_fastreload"); + + gameFlagWait("prematch_done"); + + if (!gameFlag("seekers_released")) { + wait 0.5; + + // Blind player if seekers weren't released yet + player playLocalSound(game["seekers_blind_sound"]); + /*for (a = 0; a < RandomIntRange(5, 20); a++) { + len = RandomFloatRange(0.0, 0.25); + player VisionSetNakedForPlayer("blacktest", len); + wait len; + len = RandomFloatRange(0.0, 0.25); + player VisionSetNakedForPlayer(getDvar("mapname"), len); + wait len; + } + len = RandomFloatRange(0.0, 0.25); + player VisionSetNakedForPlayer("blacktest", len); + */ + player VisionSetNakedForPlayer("blacktest", 0.1); + + // Freeze, hide + player FreezeControls(true); + player Hide(); + + gameFlagWait("seekers_released"); + player playLocalSound(game["seekers_released_sound"]); + + // Unfreeze, show + player FreezeControls(false); + player VisionSetNakedForPlayer(getDvar("mapname"), 2.5); + player Show(); + } + else + { + wait 0.5; + } + + // random primary weapon + primaryWeapon = level.seekerWeapons[RandomInt(level.seekerWeapons.size)]; + player GiveWeapon(primaryWeapon + "_reflex_mp", RandomInt(9), false); + + // tactical knife + player GiveWeapon("deserteagle_tactical_mp", 0, false); + + // single semtex + player GiveWeapon("semtex_mp"); + player SwitchToWeapon(primaryWeapon + "_reflex_mp"); + + wait 0.75; + + // ammo + player GiveMaxAmmo(primaryWeapon + "_reflex_mp"); + player GiveMaxAmmo("deserteagle_tactical_mp"); + + player thread enableUnlimitedReload(); + player thread enableWeaponDicing("+actionslot 3"); +} + +handleHider() { + logString("handleHider called"); + + player = self; + + player endon("disconnect"); + player endon("death"); + level endon("game_ended"); + + // Wait for _playerlogic to give the player his default weapons and perks + player waittill("spawned_player"); + + // Go third-person mode + player SetClientDvar("cg_thirdperson", 1); + + // Take weapons and perks + player ClearPerks(); + player TakeAllWeapons(); + + // Gametype-friendly perks + player GivePerk("specialty_quieter"); + player GivePerk("specialty_coldblooded"); + player GivePerk("specialty_falldamage"); + + gameFlagWait("prematch_done"); + + player thread enableThirdPersonSwitch("+actionslot 3", 1); + player thread enableModelChange("+attack"); + player thread revealWhenGameEnds(); + + if (!gameFlag("seekers_released")) + { + gameFlagWait("seekers_released"); + + /* + player giveWeapon("deserteagle_tactical_mp", 0, false); + player switchtoWeapon("deserteagle_tactical_mp"); + */ + + // "Seekers have been released." message on screen + notifyData = spawnstruct(); + notifyData.titleText = &"HIDEANDSEEK_SEEKERS_RELEASED"; + notifyData.glowColor = (1.0, 0.4, 0.1); + //notifyData.sound = game["seekers_released_sound"]; + player thread maps\mp\gametypes\_hud_message::notifyMessage(notifyData); + player PlayLocalSound(game["seekers_released_sound"]); + } +} + +/* + * Binds a player command to let the player change between first + * person view and third person view. + */ +enableThirdPersonSwitch(playerCommand, value) { + logString("enableThirdPersonSwitch called"); + + player = self; + + level endon("game_ended"); + player endon("death"); + player endon("disconnect"); + + player notifyOnPlayerCommand("thirdpersonswitch_requested", playerCommand); + + for (;;) + { + player waittill("thirdpersonswitch_requested"); + + // toggle third person mode + value = !value; + player SetClientDvar("cg_thirdperson", value); + wait 0.5; + } +} + +/* + * Binds a player command to let the player change into the model they + * are looking at. + */ +enableModelChange(playerCommand) { + logString("enableModelChange called"); + + player = self; + + level endon("game_ended"); + player endon("death"); + player endon("disconnect"); + + player notifyOnPlayerCommand("modelchange_requested", playerCommand); + + defaultOriginAdd = undefined; + + for (;;) + { + player waittill("modelchange_requested"); + + if (!IsDefined(defaultOriginAdd)) + { + defaultOriginAdd = (player GetEye()) - (player GetOrigin()); + } + + if (!IsDefined(player.originalModel)) + { + player.originalModel = player.model; + } + + if (!IsDefined(player.originalModelAttachments)) + { + player.originalModelAttachments = []; + for (index = 0; index < player GetAttachSize(); index++) + { + player.originalModelAttachments[index] = spawnstruct(); + player.originalModelAttachments[index].tag = player GetAttachTagName(index); + player.originalModelAttachments[index].model = player GetAttachModelName(index); + } + } + + // Make a trace to the focused object + origin = (player GetOrigin()) + defaultOriginAdd; + trace = BulletTrace(origin, origin + anglestoforward(player getplayerangles()) * 1000000, false, player); + if (!IsDefined(trace) || !IsDefined(trace["entity"]) || !IsDefined(trace["entity"].model) || !IsDefined(trace["entity"].classname)) + { + player IPrintLnBold(trace); + continue; + } + if (trace["entity"].classname != "script_model") + { + player IPrintLnBold("^3" + trace["entity"].model + " is not a script model."); + continue; + } + if (maps\mp\mods\_modellist::isIgnoredModel(trace["entity"].model)) + { + player IPrintLnBold("^3You can't change into that!"); + continue; + } + displayName = maps\mp\mods\_modellist::getDisplayName(trace["entity"].model); + + healthfrac = player.health / player.maxhealth; + newhealth = healthfrac * (trace["entity"] GetNormalHealth()); + + player DetachAll(); + player SetModel(trace["entity"].model); + player PlaySound(game["hiders_changed_sound"]); + + player.health = newhealth; + player.maxhealth = trace["entity"] GetNormalHealth(); + + player SetClientDvar("cg_thirdpersonrange", 300); + + // Seems like changing model causes weapons to be reloaded + player TakeAllWeapons(); + + //player SayTeam("(changed into " + displayName + ")"); + player IPrintLnBold("^2You changed into ^4" + displayName); + } +} + +/* + * Binds a player command to shuffle the weapon. + */ +enableWeaponDicing(playerCommand) +{ + logString("enableWeaponDicing called"); + + player = self; + + player notifyOnPlayerCommand("weapondicing_requested", playerCommand); + + for (;;) + { + player waittill("weapondicing_requested"); + + // random primary weapon + player TakeWeapon(player GetCurrentWeapon()); + primaryWeapon = level.seekerWeapons[RandomInt(level.seekerWeapons.size)]; + player GiveWeapon(primaryWeapon + "_reflex_mp", RandomInt(9), false); + player SwitchToWeapon(primaryWeapon + "_reflex_mp"); + player GiveMaxAmmo(primaryWeapon + "_reflex_mp"); + } +} + +/* + * Refills ammo stock after a reload. + */ +enableUnlimitedReload() +{ + logString("enableUnlimitedReload called"); + + player = self; + + for (;;) + { + player waittill("reload"); + + player GiveMaxAmmo(player GetCurrentWeapon()); + //player GiveMaxAmmo(player GetCurrentOffhand()); + } +} + +/* + * Plays a revealing effect when the round ends if this player is + * still alive. + */ +revealWhenGameEnds() +{ + logString("revealWhenGameEnds called"); + + player = self; + + player endon("death"); + player endon("disconnect"); + + level waittill("game_ended"); + + for (a = 0; a < 5; a++) { + fxPos = player GetOrigin() + (RandomIntRange(-32, 32), RandomIntRange(-32, 32), RandomIntRange(64, 192)); + PlayFX(game["fx_confetti"], fxPos); + PlayFX(game["fx_boom"], fxPos); + wait 0.75; + } +} \ No newline at end of file diff --git a/maps/mp/gametypes/hns.txt b/maps/mp/gametypes/hns.txt new file mode 100644 index 0000000..acf79a0 --- /dev/null +++ b/maps/mp/gametypes/hns.txt @@ -0,0 +1,3 @@ +"MPUI_HIDEANDSEEK" +"MPUI_HIDEANDSEEK_CAPS" +"MPUI_HIDEANDSEEK_CAPS" \ No newline at end of file diff --git a/maps/mp/gametypes/war.gsc b/maps/mp/gametypes/war.gsc new file mode 100644 index 0000000..5594ef2 --- /dev/null +++ b/maps/mp/gametypes/war.gsc @@ -0,0 +1,14 @@ +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +main() +{ + maps\mp\gametypes\_globallogic::init(); + maps\mp\gametypes\_callbacksetup::SetupCallbacks(); + maps\mp\gametypes\_globallogic::SetupCallbacks(); + + // Force HNS + setDvar("ui_gametype", "Hide & Seek"); + setDvar("g_gametype", "hns"); + Map_Restart(false); +} \ No newline at end of file diff --git a/maps/mp/mods/_modellist.gsc b/maps/mp/mods/_modellist.gsc new file mode 100644 index 0000000..a0478ee --- /dev/null +++ b/maps/mp/mods/_modellist.gsc @@ -0,0 +1,943 @@ +#include common_scripts\utility; +#include maps\mp\_utility; + +createModel(modelname, RName) +{ + model = spawnstruct(); + model.name = modelname; + model.RName = RName; + return model; +} + +initModelList() { + initIgnoredModels(); + initDisplayNames(); + initScriptModels(); +} + +initScriptModels() +{ + if (!IsDefined(level.ModelList)) { + level.ModelList = []; + } + + alreadyAdded = []; + for (index = 0; index < level.ModelList.size; index++) { + name = level.ModelList[index].name; + alreadyAdded[name] = true; + } + + ents = GetEntArray("script_model", "classname"); + for (index = 0; index < ents.size; index++) { + ent = ents[index]; + name = ent.model; + if (!IsDefined(alreadyAdded[name])) { + alreadyAdded[name] = true; + if (!isIgnoredModel(name)) { + level.ModelList[level.ModelList.size] = createModel(name, getDisplayName(name)); + } + } + } +} + +getDisplayName(name) { + if (IsDefined(level.ModelDisplayNames) && IsDefined(level.ModelDisplayNames[name])) { + return level.ModelDisplayNames[name]; + } + return name; +} + +isIgnoredModel(name) { + return IsDefined(level.IgnoredModels) + && IsDefined(level.IgnoredModels[name]) + && level.IgnoredModels[name] == true; +} + +initIgnoredModels() { + if (!IsDefined(level.IgnoredModels)) { + level.IgnoredModels = []; + } + + level.IgnoredModels["accessories_windsock"] = true; + level.IgnoredModels["c130_zoomrig"] = true; + level.IgnoredModels["com_airduct_circle"] = true; + level.IgnoredModels["com_pipe_4_90angle_ceramic"] = true; + level.IgnoredModels["com_pipe_4_90angle_gas"] = true; + level.IgnoredModels["com_pipe_4_90angle_metal"] = true; + level.IgnoredModels["com_pipe_4x128_ceramic"] = true; + level.IgnoredModels["com_pipe_4x128_gas"] = true; + level.IgnoredModels["com_pipe_4x128_metal"] = true; + level.IgnoredModels["com_pipe_4x256_ceramic"] = true; + level.IgnoredModels["com_pipe_4x256_gas"] = true; + level.IgnoredModels["com_pipe_4x256_metal"] = true; + level.IgnoredModels["com_pipe_4x32_ceramic"] = true; + level.IgnoredModels["com_pipe_4x32_gas"] = true; + level.IgnoredModels["com_pipe_4x32_metal"] = true; + level.IgnoredModels["com_pipe_4x64_ceramic"] = true; + level.IgnoredModels["com_pipe_4x64_gas"] = true; + level.IgnoredModels["com_pipe_4x64_metal"] = true; + level.IgnoredModels["com_pipe_4x96_ceramic"] = true; + level.IgnoredModels["com_pipe_4x96_gas"] = true; + level.IgnoredModels["com_pipe_4x96_metal"] = true; + level.IgnoredModels["com_pipe_8_90angle_ceramic"] = true; + level.IgnoredModels["com_pipe_8_90angle_gas"] = true; + level.IgnoredModels["com_pipe_8_90angle_metal"] = true; + level.IgnoredModels["com_pipe_8x128_ceramic"] = true; + level.IgnoredModels["com_pipe_8x128_gas"] = true; + level.IgnoredModels["com_pipe_8x128_metal"] = true; + level.IgnoredModels["com_pipe_8x256_ceramic"] = true; + level.IgnoredModels["com_pipe_8x256_gas"] = true; + level.IgnoredModels["com_pipe_8x256_metal"] = true; + level.IgnoredModels["com_pipe_8x32_ceramic"] = true; + level.IgnoredModels["com_pipe_8x32_gas"] = true; + level.IgnoredModels["com_pipe_8x32_metal"] = true; + level.IgnoredModels["com_pipe_8x64_ceramic"] = true; + level.IgnoredModels["com_pipe_8x64_gas"] = true; + level.IgnoredModels["com_pipe_8x64_metal"] = true; + level.IgnoredModels["com_pipe_8x96_ceramic"] = true; + level.IgnoredModels["com_pipe_8x96_gas"] = true; + level.IgnoredModels["com_pipe_8x96_metal"] = true; + level.IgnoredModels["com_propane_tank01"] = true; + level.IgnoredModels["com_propane_tank02"] = true; + level.IgnoredModels["com_propane_tank02_small"] = true; + level.IgnoredModels["com_propane_tank03"] = true; + level.IgnoredModels["com_wall_fan_blade"] = true; + level.IgnoredModels["com_wall_fan_blade_2x"] = true; + level.IgnoredModels["cs_wallfan"] = true; + level.IgnoredModels["cs_wallfan1"] = true; + level.IgnoredModels["dt_mirror"] = true; + level.IgnoredModels["dt_mirror_large"] = true; + level.IgnoredModels["hanging_apron"] = true; + level.IgnoredModels["hanging_short_sleeve"] = true; + level.IgnoredModels["hanging_long_sleeve"] = true; + level.IgnoredModels["hanging_sheet"] = true; + level.IgnoredModels["highrise_fencetarp_01"] = true; + level.IgnoredModels["highrise_fencetarp_02"] = true; + level.IgnoredModels["highrise_fencetarp_03"] = true; + level.IgnoredModels["highrise_fencetarp_04"] = true; + level.IgnoredModels["highrise_fencetarp_04_dlc_1"] = true; + level.IgnoredModels["highrise_fencetarp_04_dlc_2"] = true; + level.IgnoredModels["highrise_fencetarp_05"] = true; + level.IgnoredModels["highrise_fencetarp_06"] = true; + level.IgnoredModels["highrise_fencetarp_07"] = true; + level.IgnoredModels["highrise_fencetarp_07_dlc_1"] = true; + level.IgnoredModels["highrise_fencetarp_07_dlc_2"] = true; + level.IgnoredModels["highrise_fencetarp_08"] = true; + level.IgnoredModels["highrise_fencetarp_09"] = true; + level.IgnoredModels["highrise_fencetarp_10"] = true; + level.IgnoredModels["me_fanceil1"] = true; + level.IgnoredModels["me_lightfluohang"] = true; + level.IgnoredModels["me_lightfluohang_on"] = true; + level.IgnoredModels["me_lightfluohang_double"] = true; + level.IgnoredModels["me_lightfluohang_double_on"] = true; + level.IgnoredModels["parachute_roof_hanging_animated"] = true; + level.IgnoredModels["sign_airport_security"] = true; + level.IgnoredModels["tag_origin"] = true; + level.IgnoredModels["vehicle_ac130_coop"] = true; + level.IgnoredModels["vehicle_slamraam_base"] = true; + level.IgnoredModels["vehicle_slamraam_launcher"] = true; + level.IgnoredModels["vehicle_slamraam_launcher_no_spike"] = true; + level.IgnoredModels["vehicle_taxi_rooftop_ad_base"] = true; + level.IgnoredModels["vehicle_taxi_rooftop_ad_1"] = true; + level.IgnoredModels["vehicle_taxi_rooftop_ad_2"] = true; + level.IgnoredModels["vehicle_taxi_rooftop_ad_3"] = true; + level.IgnoredModels["vehicle_taxi_rooftop_ad_4"] = true; +} + +initDisplayNames() { + if (!IsDefined(level.ModelDisplayNames)) { + level.ModelDisplayNames = []; + } + + level.ModelDisplayNames["arcade_machine_1"] = "Arcade Machine"; + level.ModelDisplayNames["arcade_machine_1_des"] = "Destroyed Arcade Machine"; + level.ModelDisplayNames["arcade_machine_2"] = "Arcade Machine 2"; + level.ModelDisplayNames["chicken_black"] = "Chicken (black)"; + level.ModelDisplayNames["chicken_black_white"] = "Chicken (black-white)"; + level.ModelDisplayNames["chicken_white"] = "Chicken (white)"; + level.ModelDisplayNames["com_barrel_benzin"] = "Benzin barrel"; + level.ModelDisplayNames["com_barrel_russian_fuel_dirt"] = "Fuel barrel"; + level.ModelDisplayNames["com_electrical_transformer_large_dam"] = "Large electrical transformer"; + level.ModelDisplayNames["com_ex_airconditioner"] = "Air conditioner"; + level.ModelDisplayNames["com_filecabinetblackclosed"] = "Black file cabinet"; + level.ModelDisplayNames["com_filecabinetblackclosed_dam"] = "Black broken file cabinet"; + level.ModelDisplayNames["com_firehydrant"] = "Fire hydrant"; + level.ModelDisplayNames["com_locker_double"] = "Locker"; + level.ModelDisplayNames["com_newspaperbox_blue"] = "Blue newspaper box"; + level.ModelDisplayNames["com_newspaperbox_red"] = "Red newspaper box"; + level.ModelDisplayNames["com_plasticcase_black_big_us_dirt"] = "Ammo crate"; + level.ModelDisplayNames["com_roofvent2_animated"] = "Roof ventilator"; + level.ModelDisplayNames["com_trashbin01"] = "Green trash bin"; + level.ModelDisplayNames["com_trashbin02"] = "Black trash bin"; + level.ModelDisplayNames["com_trashcan_metal_closed"] = "Metal trash bin"; + level.ModelDisplayNames["com_tv1"] = "TV 1"; + level.ModelDisplayNames["com_tv1_cinematic"] = "TV 1"; + level.ModelDisplayNames["com_tv1_testpattern"] = "TV 1 with test pattern"; + level.ModelDisplayNames["com_tv2"] = "TV 2"; + level.ModelDisplayNames["com_vending_can_new1_lit"] = "Vending machine"; + level.ModelDisplayNames["com_vending_can_new2_lit"] = "Vending machine 2"; + level.ModelDisplayNames["crashed_satellite"] = "Crashed satellite"; + level.ModelDisplayNames["foliage_cod5_tree_jungle_01_animated"] = "Jungle tree 1"; + level.ModelDisplayNames["foliage_cod5_tree_jungle_02_animated"] = "Jungle tree 2"; + level.ModelDisplayNames["foliage_cod5_tree_jungle_03_animated"] = "Jungle tree 3"; + level.ModelDisplayNames["foliage_cod5_tree_pine01_large_animated"] = "Pine tree 1"; + level.ModelDisplayNames["foliage_cod5_tree_pine02_large_animated"] = "Pine tree 2"; + level.ModelDisplayNames["foliage_cod5_tree_pine03_large_animated"] = "Pine tree 3"; + level.ModelDisplayNames["foliage_cod5_tree_pine04_large_animated"] = "Pine tree 4"; + level.ModelDisplayNames["foliage_cod5_tree_pine05_large_animated"] = "Pine tree 5"; + level.ModelDisplayNames["foliage_dead_pine_lg_animated"] = "Large dead pine tree"; + level.ModelDisplayNames["foliage_dead_pine_med_animated"] = "Small dead pine tree"; + level.ModelDisplayNames["foliage_desertbrush_1_animated"] = "Desert bush 1"; + level.ModelDisplayNames["foliage_pacific_bushtree01_animated"] = "Big green bush"; + level.ModelDisplayNames["foliage_pacific_bushtree01_halfsize_animated"] = "Small green bush"; + level.ModelDisplayNames["foliage_pacific_bushtree02_animated"] = "Big desert bush"; + level.ModelDisplayNames["foliage_pacific_bushtree02_halfsize_animated"] = "Small desert bush"; + level.ModelDisplayNames["foliage_pacific_fern01_animated"] = "Small fern bush 1"; + level.ModelDisplayNames["foliage_pacific_fern02_animated"] = "Small fern bush 2"; + level.ModelDisplayNames["foliage_pacific_palms06_animated"] = "Small palms"; + level.ModelDisplayNames["foliage_pacific_palms08_animated"] = "Small green bush"; + level.ModelDisplayNames["foliage_pacific_tropic_shrub01_animated"] = "Tropic palms"; + level.ModelDisplayNames["foliage_red_pine_med_animated"] = "Small red pine"; + level.ModelDisplayNames["foliage_red_pine_lg_animaged"] = "Large red pine"; + level.ModelDisplayNames["foliage_red_pine_xl_animated"] = "Red pine"; + level.ModelDisplayNames["foliage_red_pine_xxl_animated"] = "Tall red pine"; + level.ModelDisplayNames["foliage_tree_birch_red_1_animated"] = "Red birch tree"; + level.ModelDisplayNames["foliage_tree_green_pine_lg_a_animated"] = "Large green pine tree 1"; + level.ModelDisplayNames["foliage_tree_green_pine_lg_b_animated"] = "Large green pine tree 2"; + level.ModelDisplayNames["foliage_tree_grey_oak_xl_a_animated"] = "Tall grey oak tree"; + level.ModelDisplayNames["foliage_tree_oak_1_animated2"] = "Oak tree"; + level.ModelDisplayNames["foliage_tree_palm_bushy_1"] = "Bushy palm tree 1"; + level.ModelDisplayNames["foliage_tree_palm_bushy_2"] = "Bushy palm tree 2"; + level.ModelDisplayNames["foliage_tree_palm_bushy_3"] = "Bushy palm tree 3"; + level.ModelDisplayNames["foliage_tree_palm_med_1"] = "Palm tree 1"; + level.ModelDisplayNames["foliage_tree_palm_med_2"] = "Palm tree 2"; + level.ModelDisplayNames["foliage_tree_palm_tall_1"] = "Tall palm tree"; + level.ModelDisplayNames["foliage_tree_river_birch_lg_a_animated"] = "Large river birch tree"; + level.ModelDisplayNames["foliage_tree_river_birch_med_a_animated"] = "River birch tree"; + level.ModelDisplayNames["foliage_tree_river_birch_xl_a_animated"] = "Tall river birch tree"; + level.ModelDisplayNames["fortune_machine"] = "Fortune Machine"; + level.ModelDisplayNames["furniture_gaspump01"] = "Gas pump"; + level.ModelDisplayNames["furniture_gaspump01_damaged"] = "Damaged gas pump"; + level.ModelDisplayNames["highrise_fencetarp_04"] = "Large green fence"; + level.ModelDisplayNames["highrise_fencetarp_05"] = "Small orange fence"; + level.ModelDisplayNames["ma_flatscreen_tv_01"] = "Flat TV (off)"; + level.ModelDisplayNames["ma_flatscreen_tv_on_02"] = "Flat TV (on)"; + level.ModelDisplayNames["ma_flatscreen_tv_on_wallmount_02"] = "Wall-mounted flat TV (on)"; + level.ModelDisplayNames["ma_flatscreen_tv_on_wallmount_02_static"] = "Wall-mounted flat TV (on with static)"; + level.ModelDisplayNames["ma_flatscreen_tv_wallmount_01"] = "Flat TV (off 1)"; + level.ModelDisplayNames["ma_flatscreen_tv_wallmount_02"] = "Flat TV (off 2)"; + level.ModelDisplayNames["machinery_generator"] = "Small generator"; + level.ModelDisplayNames["machinery_oxygen_tank01"] = "Orange oxygen tank"; + level.ModelDisplayNames["machinery_oxygen_tank02"] = "Green oxygen tank"; + level.ModelDisplayNames["me_electricbox1"] = "Electric box 1"; + level.ModelDisplayNames["me_electricbox2"] = "Electric box 2"; + level.ModelDisplayNames["me_electricbox3"] = "Electric box 3"; + level.ModelDisplayNames["me_electricbox4"] = "Electric box 4"; + level.ModelDisplayNames["me_rooftop_tank_01"] = "Tank rooftop"; + level.ModelDisplayNames["mil_tntbomb_mp"] = "Military TNT"; + level.ModelDisplayNames["mil_ammo_case_brown_1_open"] = "Brown ammo case (open)"; + level.ModelDisplayNames["pinball_machine_1"] = "Pinball machine 1"; + level.ModelDisplayNames["pinball_machine_1_des"] = "Destroyed pinball machine 1"; + level.ModelDisplayNames["pinball_machine_2"] = "Pinball machine 2"; + level.ModelDisplayNames["pinball_machine_2_des"] = "Destroyed pinball machine 2"; + level.ModelDisplayNames["popcorn_cart"] = "Popcorn cart"; + level.ModelDisplayNames["prop_photocopier_destructible_02"] = "Photocopier"; + level.ModelDisplayNames["prop_trailerpark_beer_keg"] = "Beer keg"; + level.ModelDisplayNames["trashcan_clown"] = "Clown trashbin"; + level.ModelDisplayNames["usa_gas_station_trash_bin_01"] = "Trash bin 1"; + level.ModelDisplayNames["usa_gas_station_trash_bin_02"] = "Trash bin 2"; + level.ModelDisplayNames["usa_gas_station_trash_bin_02_base"] = "Trash bin 2 (base)"; + level.ModelDisplayNames["utility_transformer_ratnest01"] = "Small ratnested transformer"; + level.ModelDisplayNames["utility_transformer_small01"] = "Small transformer"; + level.ModelDisplayNames["utility_water_collector"] = "Water collector"; + level.ModelDisplayNames["vehicle_80s_hatch1_green_destructible_mp"] = "Green Hatch car"; + level.ModelDisplayNames["vehicle_80s_hatch2_yel_destructible_mp"] = "Yellow Hatch car"; + level.ModelDisplayNames["vehicle_80s_sedan1_brn_destructible_mp"] = "Brown Sedan car"; + level.ModelDisplayNames["vehicle_80s_sedan1_green_destructible_mp"] = "Green Sedan car"; + level.ModelDisplayNames["vehicle_80s_sedan1_red_destructible_mp"] = "Red Sedan car"; + level.ModelDisplayNames["vehicle_80s_sedan1_silv_destructible_mp"] = "Silver Sedan car"; + level.ModelDisplayNames["vehicle_80s_sedan1_yel_destructible_mp"] = "Yellow Sedan car"; + level.ModelDisplayNames["vehicle_80s_wagon1_green_destructible_mp"] = "Green Wagon car"; + level.ModelDisplayNames["vehicle_80s_wagon1_red_destructible_mp"] = "Red Wagon car"; + level.ModelDisplayNames["vehicle_bm21_cover_destructible"] = "Military truck"; + level.ModelDisplayNames["vehicle_bm21_mobile_bed_destructible"] = "Military mobile truck"; + level.ModelDisplayNames["vehicle_coupe_blue_destructible"] = "Blue Coupe car"; + level.ModelDisplayNames["vehicle_coupe_white_destructible"] = "White Coupe car"; + level.ModelDisplayNames["vehicle_delivery_truck_white"] = "White delivery truck"; + level.ModelDisplayNames["vehicle_hummer_destructible"] = "Hummer"; + level.ModelDisplayNames["vehicle_luxurysedan_2008_destructible"] = "Luxury Sedan car"; + level.ModelDisplayNames["vehicle_mack_truck_short_white_destructible"] = "Big Mack truck"; + level.ModelDisplayNames["vehicle_moving_truck_destructible"] = "Truck"; + level.ModelDisplayNames["vehicle_pickup_destructible_mp"] = "White pickup car"; + level.ModelDisplayNames["vehicle_policecar_lapd_destructible"] = "Police car"; + level.ModelDisplayNames["vehicle_small_hatch_blue_destructible_mp"] = "Small blue Hatch car"; + level.ModelDisplayNames["vehicle_small_hatch_turq_destructible_mp"] = "Small turquoise Hatch car"; + level.ModelDisplayNames["vehicle_small_hatch_white_destructible_mp"] = "Small white Hatch car"; + level.ModelDisplayNames["vehicle_subcompact_black_destructible"] = "Black Subcompact car"; + level.ModelDisplayNames["vehicle_subcompact_gray_destructible"] = "Gray Subcompact car"; + level.ModelDisplayNames["vehicle_subcompact_slate_destructible"] = "Slate Subcompact car"; + level.ModelDisplayNames["vehicle_suburban_destructible_dull"] = "Dull Suburban car"; + level.ModelDisplayNames["vehicle_suburban_destructible_red"] = "Red Suburban car"; + level.ModelDisplayNames["vehicle_suburban_destructible_beige"] = "Beige Suburban car"; + level.ModelDisplayNames["vehicle_taxi_yellow_destructible"] = "Taxi"; + level.ModelDisplayNames["vehicle_theme_park_truck"] = "Park Truck"; + level.ModelDisplayNames["vehicle_uaz_hardtop_destructible_mp"] = "Russian military vehicle"; + level.ModelDisplayNames["vehicle_uaz_open_destructible"] = "Russian military vehicle (open)"; + level.ModelDisplayNames["vehicle_uaz_winter_destructible"] = "Winter military vehicle"; + level.ModelDisplayNames["vehicle_van_green_destructible"] = "Green van"; + level.ModelDisplayNames["vehicle_van_slate_destructible"] = "Blue van"; + level.ModelDisplayNames["vehicle_van_white_destructible"] = "White van"; + level.ModelDisplayNames["weapon_c4"] = "C4"; +} + +/* +checkMap() +{ + self endon("disconnect"); + self thread UnSupportedMaps(); + level.Mapname = getDvar("mapname"); + i = 1; + while(i < 2) + { + if(level.Mapname==level.UnSupp[i].name) + { + i = 3; + level notify("unsupported"); + level.NotSupported = 1; + self thread endGameUnsupportedMap(); + } + i++; + } + self thread execMapVariables(); +} + +endGameUnsupportedMap() +{ + self endon("disconnect"); + p = 10; + for(;;) + { + self sayall("^1MAP NOT SUPPORTED! CHANGING MAP IN: " + p); + if(p==0) + { + map("mp_afghan"); + } + wait 1; + p--; + } +} + +UnSupportedMaps() +{ + level.UnSupp = []; + level.UnSupp[1] = supMap("mp_rust"); + level.UnSupp[2] = supMap("mp_brecourt"); +} + +supMap(Mapname) +{ + Map = spawnstruct(); + Map.name = Mapname; + return Map; +} + +execMapVariables() //This thread sucks but we couldn't find any good alternative +{ + self endon("disconnect"); + self endon("unsupported"); + + if(level.Mapname=="mp_afghan") + { + self mp_afghan(); + } + else if(level.Mapname=="mp_derail") + { + self mp_derail(); + } + else if(level.Mapname=="mp_boneyard") + { + self mp_boneyard(); + } + else if(level.Mapname=="mp_underpass") + { + self mp_underpass(); + } + else if(level.Mapname=="mp_highrise") + { + self mp_highrise(); + } + else if(level.Mapname=="mp_estate") + { + self mp_estate(); + } + else if(level.Mapname=="mp_terminal") + { + self mp_terminal(); + } + else if(level.Mapname=="mp_subbase") + { + self mp_subbase(); + } + else if(level.Mapname=="mp_favela") + { + self mp_favela(); + } + else if(level.Mapname=="mp_checkpoint") + { + self mp_checkpoint(); + } + else if(level.Mapname=="mp_invasion") + { + self mp_invasion(); + } + else if(level.Mapname=="mp_quarry") + { + self mp_quarry(); + } + else if(level.Mapname=="mp_nightshift") + { + self mp_nightshift(); + } + else if(level.Mapname=="mp_rundown") + { + self mp_rundown(); + } + else if(level.Mapname=="mp_crash") + { + self mp_crash(); + } + else if(level.Mapname=="mp_complex") + { + self mp_complex(); + } + else if(level.Mapname=="mp_overgrown") + { + self mp_overgrown(); + } + else if(level.Mapname=="mp_compact") + { + self mp_compact(); + } + else if(level.Mapname=="mp_trailerpark") + { + self mp_trailerpark(); + } + else if(level.Mapname=="mp_abandon") + { + self mp_abandon(); + } + else if(level.Mapname=="mp_storm") + { + self mp_storm(); + } + else if(level.Mapname=="mp_vacant") + { + self mp_vacant(); + } + else if(level.Mapname=="mp_strike") + { + self mp_strike(); + } + else if(level.Mapname=="mp_fuel2") + { + self mp_fuel2(); + } +} + +mp_afghan() +{ + level.ModelList = []; + level.MaxModels = 14; + // Modelname + level.ModelList[1] = createModel("machinery_oxygen_tank01", "Oxygen Tank orange"); + level.ModelList[2] = createModel("foliage_pacific_bushtree02_animated", "Big bush"); + level.ModelList[3] = createModel("foliage_cod5_tree_jungle_02_animated", "Tree"); + level.ModelList[4] = createModel("machinery_oxygen_tank02", "Oxygen Tank green"); + level.ModelList[5] = createModel("com_barrel_russian_fuel_dirt", "Fuel barrel"); + level.ModelList[6] = createModel("com_locker_double", "Locker"); + level.ModelList[7] = createModel("foliage_pacific_bushtree02_halfsize_animated", "Small desert bush"); + level.ModelList[8] = createModel("com_plasticcase_black_big_us_dirt", "Ammo crate"); + level.ModelList[9] = createModel("foliage_pacific_bushtree01_halfsize_animated", "Small green bush"); + level.ModelList[10] = createModel("vehicle_uaz_open_destructible", "Military vehicle open"); + level.ModelList[11] = createModel("vehicle_hummer_destructible", "Hummer"); + level.ModelList[12] = createModel("foliage_cod5_tree_pine05_large_animated", "Tree 2"); + level.ModelList[13] = createModel("utility_transformer_ratnest01", "Transformer"); + level.ModelList[14] = createModel("utility_water_collector", "Water collector"); +} + +mp_derail() +{ + level.ModelList = []; + level.MaxModels = 14; + // Modelname + level.ModelList[1] = createModel("com_roofvent2_animated", "Roof ventilator"); + level.ModelList[2] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[3] = createModel("com_tv1_testpattern", "TV"); + level.ModelList[4] = createModel("usa_gas_station_trash_bin_02", "Trash bin"); + level.ModelList[5] = createModel("prop_photocopier_destructible_02", "Photocopier"); + level.ModelList[6] = createModel("machinery_oxygen_tank01", "Oxygen tank orange"); + level.ModelList[7] = createModel("com_trashbin01", "Trash bin 2"); + level.ModelList[8] = createModel("vehicle_pickup_destructible_mp", "Pickup"); + level.ModelList[9] = createModel("furniture_gaspump01_damaged", "Gas pump"); + level.ModelList[10] = createModel("vehicle_uaz_winter_destructible", "Winter vehicle"); + level.ModelList[11] = createModel("com_propane_tank02", "Big propane tank"); + level.ModelList[12] = createModel("crashed_satellite", "Crashed satellite"); + level.ModelList[13] = createModel("vehicle_bm21_cover_destructible", "Military truck"); + level.ModelList[14] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + +mp_boneyard() +{ + level.ModelList = []; + level.MaxModels = 14; + // Modelname + level.ModelList[1] = createModel("foliage_tree_oak_1_animated2", "Tree"); + level.ModelList[2] = createModel("machinery_oxygen_tank01", "Oxygen tank orange"); + level.ModelList[3] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[4] = createModel("machinery_oxygen_tank02", "Oxygen tank green"); + level.ModelList[5] = createModel("com_electrical_transformer_large_dam", "Large transformer"); + level.ModelList[6] = createModel("vehicle_moving_truck_destructible", "Truck"); + level.ModelList[7] = createModel("foliage_pacific_bushtree02_animated", "Bush"); + level.ModelList[8] = createModel("vehicle_pickup_destructible_mp", "Pickup"); + level.ModelList[9] = createModel("com_trashbin02", "Trash bin"); + level.ModelList[10] = createModel("vehicle_bm21_mobile_bed_destructible", "Military truck"); + level.ModelList[11] = createModel("foliage_cod5_tree_jungle_02_animated", "Tree 2"); + level.ModelList[12] = createModel("com_firehydrant", "Fire hydrant"); + level.ModelList[13] = createModel("machinery_generator", "Generator"); + level.ModelList[14] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + +mp_underpass() +{ + level.ModelList = []; + level.MaxModels = 19; + // Modelname + level.ModelList[1] = createModel("foliage_pacific_bushtree01_halfsize_animated", "Small green bush"); + level.ModelList[2] = createModel("utility_water_collector", "Water collector"); + level.ModelList[3] = createModel("com_propane_tank02", "Large propane tank"); + level.ModelList[4] = createModel("foliage_pacific_bushtree01_animated", "Big green bush"); + level.ModelList[5] = createModel("vehicle_van_slate_destructible", "Blue van"); + level.ModelList[6] = createModel("com_locker_double", "Locker"); + level.ModelList[7] = createModel("machinery_oxygen_tank01", "Oxygen tank orange"); + level.ModelList[8] = createModel("prop_photocopier_destructible_02", "Photocopier"); + level.ModelList[9] = createModel("usa_gas_station_trash_bin_02", "Trash bin"); + level.ModelList[10] = createModel("machinery_oxygen_tank02", "Oxygen tank green"); + level.ModelList[11] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[12] = createModel("vehicle_pickup_destructible_mp", "White pickup"); + level.ModelList[13] = createModel("foliage_cod5_tree_jungle_02_animated", "Tall tree"); + level.ModelList[14] = createModel("foliage_tree_oak_1_animated2", "Tree"); + level.ModelList[15] = createModel("foliage_pacific_palms08_animated", "Small green bush 2"); + level.ModelList[16] = createModel("chicken_black_white", "Chicken black-white"); + level.ModelList[17] = createModel("utility_transformer_ratnest01", "Transformer"); + level.ModelList[18] = createModel("utility_transformer_small01", "Small transformer"); + level.ModelList[19] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + +mp_highrise() +{ + level.ModelList = []; + level.MaxModels = 12; + // Modelname + level.ModelList[1] = createModel("ma_flatscreen_tv_wallmount_01", "Flatscreen TV"); + level.ModelList[2] = createModel("com_trashbin02", "Black trash bin"); + level.ModelList[3] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[4] = createModel("prop_photocopier_destructible_02", "Photocopier"); + level.ModelList[5] = createModel("machinery_oxygen_tank01", "Oxygen tank orange"); + level.ModelList[6] = createModel("machinery_oxygen_tank02", "Oxygen tank green"); + level.ModelList[7] = createModel("com_electrical_transformer_large_dam", "Large electrical transformer"); + level.ModelList[8] = createModel("com_roofvent2_animated", "Roof ventilator"); + level.ModelList[9] = createModel("com_propane_tank02", "Large propane tank"); + level.ModelList[10] = createModel("highrise_fencetarp_04", "Large green fence"); + level.ModelList[11] = createModel("highrise_fencetarp_05", "Small orange fence"); + level.ModelList[12] = createModel("com_barrel_benzin", "Benzin barrel"); + level.ModelList[13] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + + +mp_estate() //Thanks to ezr +{ + level.ModelList = []; + level.MaxModels = 10; + // Modelname + level.ModelList[1] = createModel("machinery_generator", "Small generator"); + level.ModelList[2] = createModel("vehicle_pickup_destructible_mp", "White pickup"); + level.ModelList[3] = createModel("vehicle_coupe_white_destructible", "Small white car"); + level.ModelList[4] = createModel("vehicle_suburban_destructible_dull", "Big black car"); + level.ModelList[5] = createModel("vehicle_luxurysedan_2008_destructible", "Small black car"); + level.ModelList[6] = createModel("com_electrical_transformer_large_dam", "Large electrical transformer"); + level.ModelList[7] = createModel("machinery_oxygen_tank01", "Oxygen tank orange"); + level.ModelList[8] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[9] = createModel("ma_flatscreen_tv_on_wallmount_02", "Flatscreen TV"); + level.ModelList[10] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + +mp_terminal() //Thanks to ezr +{ + level.ModelList = []; + level.MaxModels = 13; + // Modelname + level.ModelList[1] = createModel("com_tv1", "TV"); + level.ModelList[2] = createModel("com_barrel_benzin", "Benzin barrel"); + level.ModelList[3] = createModel("foliage_pacific_fern01_animated", "Small Bush"); + level.ModelList[4] = createModel("ma_flatscreen_tv_wallmount_02", "Flatscreen TV"); + level.ModelList[5] = createModel("com_roofvent2_animated", "Roof ventilator"); + level.ModelList[6] = createModel("ma_flatscreen_tv_on_wallmount_02_static", "Flatscreen TV On"); + level.ModelList[7] = createModel("vehicle_policecar_lapd_destructible", "Police car"); + level.ModelList[8] = createModel("com_vending_can_new2_lit", "Vending machine"); + level.ModelList[9] = createModel("usa_gas_station_trash_bin_01", "Trash bin"); + level.ModelList[10] = createModel("foliage_cod5_tree_pine05_large_animated", "Tree"); + level.ModelList[11] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[12] = createModel("com_plasticcase_black_big_us_dirt", "Ammo crate"); + level.ModelList[13] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + +mp_subbase() +{ + level.ModelList = []; + level.MaxModels = 8; + // Modelname + level.ModelList[1] = createModel("machinery_oxygen_tank01", "Oxygen tank orange"); + level.ModelList[2] = createModel("machinery_oxygen_tank02", "Oxygen tank green"); + level.ModelList[3] = createModel("com_trashcan_metal_closed", "Metal trash bin"); + level.ModelList[4] = createModel("com_tv1", "TV"); + level.ModelList[5] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[6] = createModel("com_locker_double", "Locker"); + level.ModelList[7] = createModel("vehicle_uaz_winter_destructible", "Military vehicle"); + level.ModelList[8] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + +mp_checkpoint() //Thanks to ezr +{ + level.ModelList = []; + level.MaxModels = 8; + // Modelname + level.ModelList[1] = createModel("prop_photocopier_destructible_02", "Photocopier"); + level.ModelList[2] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[3] = createModel("com_firehydrant", "Fire hydrant"); + level.ModelList[4] = createModel("com_newspaperbox_red", "Red newspaper box"); + level.ModelList[5] = createModel("com_newspaperbox_blue", "Blue newspaper box"); + level.ModelList[6] = createModel("com_tv1", "TV"); + level.ModelList[7] = createModel("vehicle_moving_truck_destructible", "Truck"); + level.ModelList[8] = createModel("chicken_black_white", "Chicken black-white"); + level.ModelList[9] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + +mp_invasion() //Thanks to ezr +{ + level.ModelList = []; + level.MaxModels = 13; + // Modelname + level.ModelList[1] = createModel("com_trashbin01", "Green trash bin"); + level.ModelList[2] = createModel("com_trashbin02", "Black trash bin"); + level.ModelList[3] = createModel("com_firehydrant", "Fire hydrant"); + level.ModelList[4] = createModel("com_newspaperbox_blue", "Blue newspaper box"); + level.ModelList[5] = createModel("com_newspaperbox_red", "Red newspaper box"); + level.ModelList[6] = createModel("furniture_gaspump01_damaged", "Gas pump"); + level.ModelList[7] = createModel("vehicle_80s_wagon1_red_destructible_mp", "Red car"); + level.ModelList[8] = createModel("vehicle_hummer_destructible", "Hummer"); + level.ModelList[9] = createModel("vehicle_taxi_yellow_destructible", "Taxi"); + level.ModelList[10] = createModel("vehicle_uaz_open_destructible", "Military vehicle open"); + level.ModelList[11] = createModel("utility_transformer_small01", "Transformer"); + level.ModelList[12] = createModel("foliage_tree_palm_tall_1", "Palm tree tall"); + level.ModelList[13] = createModel("foliage_tree_palm_bushy_1", "Palm tree bushy"); +} + +mp_quarry() //Thanks to ezr +{ + level.ModelList = []; + level.MaxModels = 20; + // Modelname + level.ModelList[1] = createModel("foliage_pacific_bushtree02_animated", "Small bush"); + level.ModelList[2] = createModel("foliage_tree_oak_1_animated2", "Big bush"); + level.ModelList[3] = createModel("foliage_cod5_tree_jungle_02_animated", "Tree"); + level.ModelList[4] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[5] = createModel("machinery_generator", "Small generator"); + level.ModelList[6] = createModel("machinery_oxygen_tank01", "Oxygen tank orange"); + level.ModelList[7] = createModel("machinery_oxygen_tank02", "Oxygen tank green"); + level.ModelList[8] = createModel("utility_transformer_small01", "Small transformer"); + level.ModelList[9] = createModel("com_locker_double", "Locker"); + level.ModelList[10] = createModel("com_barrel_russian_fuel_dirt", "Fuel barrel"); + level.ModelList[11] = createModel("com_tv1", "TV"); + level.ModelList[12] = createModel("vehicle_van_green_destructible", "Green van"); + level.ModelList[13] = createModel("vehicle_van_white_destructible", "White van"); + level.ModelList[14] = createModel("vehicle_pickup_destructible_mp", "White pickup"); + level.ModelList[15] = createModel("vehicle_small_hatch_turq_destructible_mp", "Small white car"); + level.ModelList[16] = createModel("vehicle_uaz_open_destructible", "Military vehicle"); + level.ModelList[17] = createModel("vehicle_moving_truck_destructible", "White truck"); + level.ModelList[18] = createModel("usa_gas_station_trash_bin_02", "Trash bin"); + level.ModelList[19] = createModel("prop_photocopier_destructible_02", "Photocopier"); + level.ModelList[20] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + +mp_nightshift() //Thanks to ezr +{ + level.ModelList = []; + level.MaxModels = 10; + // Modelname + level.ModelList[1] = createModel("com_trashbin01", "Green trash bin"); + level.ModelList[2] = createModel("com_trashbin02", "Black trash bin"); + level.ModelList[3] = createModel("com_firehydrant", "Fire hydrant"); + level.ModelList[4] = createModel("com_newspaperbox_red", "Red newspaper box"); + level.ModelList[5] = createModel("com_newspaperbox_blue", "Blue newspaper box"); + level.ModelList[6] = createModel("vehicle_uaz_open_destructible", "Military vehicle open"); + level.ModelList[7] = createModel("vehicle_van_white_destructible", "White car"); + level.ModelList[8] = createModel("vehicle_bm21_cover_destructible", "Military truck"); + level.ModelList[9] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[10] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + +mp_favela() //Thanks to ezr +{ + level.ModelList = []; + level.MaxModels = 15; + // Modelname + level.ModelList[1] = createModel("utility_transformer_small01", "Small Transformer"); + level.ModelList[2] = createModel("vehicle_small_hatch_white_destructible_mp", "Small white car"); + level.ModelList[3] = createModel("vehicle_small_hatch_blue_destructible_mp", "Small blue car"); + level.ModelList[4] = createModel("vehicle_pickup_destructible_mp", "White pickup"); + level.ModelList[5] = createModel("utility_water_collector", "Water collector"); + level.ModelList[6] = createModel("com_tv2", "TV"); + level.ModelList[7] = createModel("machinery_oxygen_tank01", "Oxygen tank orange"); + level.ModelList[8] = createModel("machinery_oxygen_tank02", "Oxygen tank green"); + level.ModelList[9] = createModel("utility_transformer_ratnest01", "Transformer"); + level.ModelList[10] = createModel("foliage_tree_palm_bushy_3", "Palm tree"); + level.ModelList[11] = createModel("com_firehydrant", "Fire hydrant"); + level.ModelList[12] = createModel("com_newspaperbox_red", "Red newspaperbox"); + level.ModelList[13] = createModel("com_newspaperbox_blue", "Blue newspaperbox"); + level.ModelList[14] = createModel("com_trashbin01", "Green trash bin"); + level.ModelList[15] = createModel("com_trashbin02", "Black trash bin"); +} + +mp_rundown() //Thanks to ezr +{ + level.ModelList = []; + level.MaxModels = 18; + // Modelname + level.ModelList[1] = createModel("com_tv1", "TV"); + level.ModelList[2] = createModel("com_tv2", "TV 2"); + level.ModelList[3] = createModel("com_trashbin01", "Green trash bin"); + level.ModelList[4] = createModel("com_trashbin02", "Black trash bin"); + level.ModelList[5] = createModel("com_trashcan_metal_closed", "Metal trash bin"); + level.ModelList[6] = createModel("vehicle_small_hatch_white_destructible_mp", "White car"); + level.ModelList[7] = createModel("vehicle_small_hatch_blue_destructible_mp", "Blue car"); + level.ModelList[8] = createModel("vehicle_uaz_open_destructible", "Russian military vehicle"); + level.ModelList[9] = createModel("vehicle_bm21_mobile_bed_destructible", "Military truck"); + level.ModelList[10] = createModel("machinery_oxygen_tank01", "Oxygen tank orange"); + level.ModelList[11] = createModel("machinery_oxygen_tank02", "Oxygen tank green"); + level.ModelList[12] = createModel("com_firehydrant", "Fire hydrant"); + level.ModelList[13] = createModel("foliage_tree_palm_bushy_1", "Palm tree"); + level.ModelList[14] = createModel("foliage_pacific_fern01_animated", "Small bush"); + level.ModelList[15] = createModel("utility_transformer_small01", "Small transformer"); + level.ModelList[16] = createModel("utility_water_collector", "Water collector"); + level.ModelList[17] = createModel("utility_transformer_ratnest01", "Transformer"); + level.ModelList[18] = createModel("chicken_black_white", "Chicken black-white"); +} + +//DLC MAPS, Thanks to ezr + +mp_crash() +{ + level.ModelList = []; + level.MaxModels = 13; + //Modelname + level.ModelList[1] = createModel("com_tv1", "TV"); + level.ModelList[2] = createModel("com_tv2", "TV 2"); + level.ModelList[3] = createModel("ma_flatscreen_tv_wallmount_01", "Flatscreen"); + level.ModelList[4] = createModel("ma_flatscreen_tv_wallmount_02", "Flatscreen 2"); + level.ModelList[5] = createModel("foliage_tree_river_birch_xl_a_animated", "Birch Tree Tall"); + level.ModelList[6] = createModel("foliage_tree_palm_bushy_3", "Palm Tree"); + level.ModelList[7] = createModel("foliage_tree_river_birch_med_a_animated", "Birch Tree Small"); + level.ModelList[8] = createModel("utility_transformer_ratnest01", "Transformer"); + level.ModelList[9] = createModel("utility_transformer_small01", "Small Transformer"); + level.ModelList[10] = createModel("vehicle_80s_sedan1_brn_destructible_mp", "Brown Sedan"); + level.ModelList[11] = createModel("vehicle_80s_sedan1_green_destructible_mp", "Green Sedan"); + level.ModelList[12] = createModel("vehicle_80s_sedan1_red_destructible_mp", "Red Sedan"); + level.ModelList[13] = createModel("vehicle_pickup_destructible_mp", "White Pickup"); +} + +mp_complex() +{ + level.ModelList = []; + level.MaxModels = 19; + //Modelname + level.ModelList[1] = createModel("usa_gas_station_trash_bin_02", "Trashbin"); + level.ModelList[2] = createModel("usa_gas_station_trash_bin_02_base", "Trashbin 2"); + level.ModelList[3] = createModel("ma_flatscreen_tv_on_02", "Flatscreen"); + level.ModelList[4] = createModel("ma_flatscreen_tv_on_wallmount_02_static", "Flatscreen static"); + level.ModelList[5] = createModel("arcade_machine_1", "Arcade Machine"); + level.ModelList[6] = createModel("arcade_machine_2", "Arcade Machine 2"); + level.ModelList[7] = createModel("pinball_machine_1", "Pinball Machine"); + level.ModelList[8] = createModel("pinball_machine_2", "Pinball Machine 2"); + level.ModelList[9] = createModel("foliage_tree_green_pine_lg_b_animated", "Pine"); + level.ModelList[10] = createModel("foliage_tree_green_pine_lg_a_animated", "Pine 2"); + level.ModelList[11] = createModel("foliage_pacific_palms06_animated", "Small Palm"); + level.ModelList[12] = createModel("foliage_pacific_tropic_shrub01_animated", "Tropic Palms"); + level.ModelList[13] = createModel("vehicle_subcompact_black_destructible", "Black Car"); + level.ModelList[14] = createModel("vehicle_subcompact_slate_destructible", "Blue Car"); + level.ModelList[15] = createModel("vehicle_pickup_destructible_mp", "White Pickup"); + level.ModelList[16] = createModel("vehicle_coupe_blue_destructible", "Blue Coupe"); + level.ModelList[17] = createModel("vehicle_coupe_white_destructible", "White Coupe"); + level.ModelList[18] = createModel("vehicle_policecar_lapd_destructible", "Police Car"); + level.ModelList[19] = createModel("vehicle_moving_truck_destructible", "White Truck"); +} + +mp_overgrown() +{ + level.ModelList = []; + level.MaxModels = 8; + //Modelname + level.ModelList[1] = createModel("foliage_tree_river_birch_xl_a_animated", "Birch"); + level.ModelList[2] = createModel("foliage_tree_river_birch_lg_a_animated", "Birch 2"); + level.ModelList[3] = createModel("foliage_red_pine_xl_animated", "Pine"); + level.ModelList[4] = createModel("foliage_red_pine_xxl_animated", "Pine Tall"); + level.ModelList[5] = createModel("foliage_red_pine_med_animated", "Pine Small"); + level.ModelList[6] = createModel("foliage_tree_grey_oak_xl_a_animated", "Tall Tree"); + level.ModelList[7] = createModel("com_propane_tank02", "Big Propane Tank"); + level.ModelList[8] = createModel("furniture_gaspump01_damaged", "Gaspump"); +} + +mp_compact() +{ + level.ModelList = []; + level.MaxModels = 9; + //Modelname + level.ModelList[1] = createModel("com_locker_double", "Locker"); + level.ModelList[2] = createModel("machinery_generator", "Small Generator"); + level.ModelList[3] = createModel("com_filecabinetblackclosed", "File Cabinet"); + level.ModelList[4] = createModel("com_propane_tank02", "Big Propane Tank"); + level.ModelList[5] = createModel("machinery_oxygen_tank01", "Oxygentank Orange"); + level.ModelList[6] = createModel("me_rooftop_tank_01", "Tank rooftop"); + level.ModelList[7] = createModel("com_electrical_transformer_large_dam", "Large Transformer"); + level.ModelList[8] = createModel("com_tv1", "TV"); + level.ModelList[9] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); +} + + +mp_trailerpark() +{ + level.ModelList = []; + level.MaxModels = 17; + //Modelname + level.ModelList[1] = createModel("prop_trailerpark_beer_keg", "Beer keg"); + level.ModelList[2] = createModel("foliage_dead_pine_med_animated", "Tree"); + level.ModelList[3] = createModel("foliage_dead_pine_lg_animated", "Tree 2"); + level.ModelList[4] = createModel("com_propane_tank02", "Big Propane Tank"); + level.ModelList[5] = createModel("com_propane_tank03", "Propane Tank"); + level.ModelList[6] = createModel("machinery_oxygen_tank01", "Orange Oxygen Tank"); + level.ModelList[7] = createModel("machinery_oxygen_tank02", "Green Oxygen Tank"); + level.ModelList[8] = createModel("com_trashbin02", "Trashbin"); + level.ModelList[9] = createModel("machinery_generator", "Generator"); + level.ModelList[10] = createModel("com_firehydrant", "Fire hydrant"); + level.ModelList[11] = createModel("utility_transformer_ratnest01", "Transformer"); + level.ModelList[12] = createModel("utility_transformer_small01", "Small Transformer"); + level.ModelList[13] = createModel("vehicle_subcompact_gray_destructible", "Gray Car"); + level.ModelList[14] = createModel("vehicle_coupe_white_destructible", "White Coupe"); + level.ModelList[15] = createModel("vehicle_80s_hatch1_green_destructible_mp", "Green Car"); + level.ModelList[16] = createModel("vehicle_80s_sedan1_red_destructible_mp", "Red Car"); + level.ModelList[17] = createModel("vehicle_delivery_truck_white", "White Truck"); +} + +mp_abandon() +{ + level.ModelList = []; + level.MaxModels = 13; + //Modelname + level.ModelList[1] = createModel("popcorn_cart", "Popcorn cart"); + level.ModelList[2] = createModel("prop_trailerpark_beer_keg", "Beer keg"); + level.ModelList[3] = createModel("usa_gas_station_trash_bin_01", "Trashbin"); + level.ModelList[4] = createModel("trashcan_clown", "Clown trashbin"); + level.ModelList[5] = createModel("foliage_tree_river_birch_xl_a_animated", "Birch"); + level.ModelList[6] = createModel("arcade_machine_1", "Arcade Machine"); + level.ModelList[7] = createModel("arcade_machine_1_des", "Destroyed Arcade Machine"); + level.ModelList[8] = createModel("arcade_machine_2", "Arcade Machine 2"); + level.ModelList[9] = createModel("pinball_machine_1", "Pinball Machine"); + level.ModelList[10] = createModel("pinball_machine_2", "Pinball Machine 2"); + level.ModelList[11] = createModel("pinball_machine_2_des", "Destroyed Pinball Machine 2"); + level.ModelList[12] = createModel("fortune_machine", "Fortune Machine"); + level.ModelList[13] = createModel("vehicle_theme_park_truck", "Park Truck"); +} + +mp_storm() +{ + level.ModelList = []; + level.MaxModels = 12; + //Modelname + level.ModelList[1] = createModel("com_tv1", "TV"); + level.ModelList[2] = createModel("com_trashbin01", "Trash bin"); + level.ModelList[3] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[4] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); + level.ModelList[5] = createModel("foliage_dead_pine_lg_animated", "Tree"); + level.ModelList[6] = createModel("foliage_dead_pine_med_animated", "Tree 2"); + level.ModelList[7] = createModel("foliage_tree_oak_1_animated2", "Tree 3"); + level.ModelList[8] = createModel("vehicle_80s_wagon1_green_destructible_mp", "Green car"); + level.ModelList[9] = createModel("vehicle_80s_sedan1_silv_destructible_mp", "Silver car"); + level.ModelList[10] = createModel("vehicle_80s_hatch2_yel_destructible_mp", "Yellow car"); + level.ModelList[11] = createModel("vehicle_moving_truck_destructible", "White Truck"); + level.ModelList[12] = createModel("vehicle_mack_truck_short_white_destructible", "Big Truck"); +} + +mp_vacant() +{ + level.ModelList = []; + level.MaxModels = 14; + //Modelname + level.ModelList[1] = createModel("machinery_generator", "Generator"); + level.ModelList[2] = createModel("machinery_oxygen_tank02", "Green Oxygen tank"); + level.ModelList[3] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[4] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); + level.ModelList[5] = createModel("foliage_tree_birch_red_1_animated", "Birch"); + level.ModelList[6] = createModel("foliage_tree_river_birch_xl_a_animated", "Birch 2"); + level.ModelList[7] = createModel("com_locker_double", "Locker"); + level.ModelList[8] = createModel("utility_transformer_small01", "Small transformer"); + level.ModelList[9] = createModel("vehicle_80s_sedan1_silv_destructible_mp", "Silver car"); + level.ModelList[10] = createModel("vehicle_80s_sedan1_green_destructible_mp", "Green car"); + level.ModelList[11] = createModel("vehicle_80s_sedan1_red_destructible_mp", "Red car"); + level.ModelList[12] = createModel("vehicle_80s_sedan1_yel_destructible_mp", "Yellow car"); + level.ModelList[13] = createModel("vehicle_uaz_hardtop_destructible_mp", "Military vehicle"); + level.ModelList[14] = createModel("com_propane_tank02", "Big Propane tank"); +} + +mp_fuel2() +{ + level.ModelList = []; + level.MaxModels = 13; + //Modelname + level.ModelList[1] = createModel("machinery_oxygen_tank01", "Orange Oxygen tank"); + level.ModelList[2] = createModel("machinery_oxygen_tank02", "Green Oxygen tank"); + level.ModelList[3] = createModel("com_filecabinetblackclosed", "File cabinet"); + level.ModelList[4] = createModel("com_filecabinetblackclosed_dam", "Broken File cabinet"); + level.ModelList[5] = createModel("com_trashbin02", "Trashbin"); + level.ModelList[6] = createModel("machinery_generator", "Generator"); + level.ModelList[7] = createModel("foliage_tree_palm_med_2", "Palm"); + level.ModelList[8] = createModel("foliage_tree_palm_bushy_2", "Bushy palm"); + level.ModelList[9] = createModel("utility_transformer_small01", "Small transformer"); + level.ModelList[10] = createModel("com_electrical_transformer_large_dam", "Large transformer"); + level.ModelList[11] = createModel("com_propane_tank02_small", "Small Propane tank"); + level.ModelList[12] = createModel("vehicle_uaz_hardtop_destructible_mp", "Military vehicle"); + level.ModelList[13] = createModel("vehicle_bm21_mobile_bed_destructible", "Military truck"); +} + +mp_strike() +{ + level.ModelList = []; + level.MaxModels = 17; + // Modelname + level.ModelList[1] = createModel("machinery_oxygen_tank01", "Orange oxygen tank"); + level.ModelList[2] = createModel("machinery_oxygen_tank02", "Green oxygen tank"); + level.ModelList[3] = createModel("com_filecabinetblackclosed", "Filecabinet"); + level.ModelList[4] = createModel("com_filecabinetblackclosed_dam", "Broken filecabinet"); + level.ModelList[5] = createModel("machinery_generator", "Generator"); + level.ModelList[6] = createModel("foliage_tree_river_birch_xl_a_animated", "Tree"); + level.ModelList[7] = createModel("foliage_tree_palm_bushy_2", "Tall palm tree"); + level.ModelList[8] = createModel("usa_gas_station_trash_bin_01", "Trashbin"); + level.ModelList[9] = createModel("com_locker_double", "Locker"); + level.ModelList[10] = createModel("com_trashcan_metal_closed", "Metal trashcan"); + level.ModelList[11] = createModel("com_firehydrant", "Fire hydrant"); + level.ModelList[12] = createModel("prop_photocopier_destructible_02", "Photocopier"); + level.ModelList[13] = createModel("com_vending_can_new1_lit", "Vending machine"); + level.ModelList[14] = createModel("com_vending_can_new2_lit", "Vending machine 2"); + level.ModelList[15] = createModel("vehicle_80s_sedan1_green_destructible_mp", "Green car"); + level.ModelList[16] = createModel("vehicle_80s_sedan1_brn_destructible_mp", "Brown car"); + level.ModelList[17] = createModel("vehicle_hummer_destructible", "Hummer"); +} +*/ diff --git a/maps/mp/mods/disableClassMenu.gsc b/maps/mp/mods/disableClassMenu.gsc new file mode 100644 index 0000000..e8a9f95 --- /dev/null +++ b/maps/mp/mods/disableClassMenu.gsc @@ -0,0 +1,41 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +disableClassMenu() +{ + level.originalAllies = level.allies; + level.originalAxis = level.axis; + level.allies = ::menuAllies; + level.axis = ::menuAxis; +} + + +autoClass() +{ + self closepopupMenu(); + self closeInGameMenu(); + self.selectedClass = true; + self [[level.class]]("class1"); +} + + +menuAllies() +{ + self [[level.originalAllies]](); + + if (self.pers["team"] == "allies") + { + self autoClass(); + } +} + +menuAxis() +{ + self [[level.originalAxis]](); + + if (self.pers["team"] == "axis") + { + self autoClass(); + } +} diff --git a/spanish/localizedstrings/hns.str b/spanish/localizedstrings/hns.str new file mode 100644 index 0000000..eb5230d --- /dev/null +++ b/spanish/localizedstrings/hns.str @@ -0,0 +1,28 @@ +VERSION "1" +FILENOTES "" + +REFERENCE MPUI_HIDEANDSEEK +LANG_SPANISH "Escondidas" + +REFERENCE MPUI_HIDEANDSEEK_CAPS +LANG_SPANISH "ESCONDIDAS" + +REFERENCE MPUI_HIDEANDSEEK_SHORT_CAPS +LANG_SPANISH "ESCONDIDAS" + +REFERENCE MENU_HIDEANDSEEK +LANG_ENGLISH "As a hider, try to blend into the environment - if all goes bad, you can still fight back.\nAs a seeker, try to find the hiders and kill them." + +REFERENCE OBJECTIVES_HIDEANDSEEK_DEFENDER +LANG_ENGLISH "Disguise yourself and survive." + +REFERENCE HIDEANDSEEK_TIMER_SEEKER_RELEASE +LANG_ENGLISH "Seekers released in &&1" + +REFERENCE HIDEANDSEEK_TIMER_SEEKER_RELEASE_TITLE +LANG_ENGLISH "Seekers will be released in:" + +REFERENCE HIDEANDSEEK_SEEKERS_RELEASED +LANG_ENGLISH "Seekers have been released." + +ENDMARKER \ No newline at end of file diff --git a/ui_mp/settings_gametype.menu b/ui_mp/settings_gametype.menu new file mode 100644 index 0000000..6179aab --- /dev/null +++ b/ui_mp/settings_gametype.menu @@ -0,0 +1,648 @@ +{ + menuDef + { + name settings_gametype + fullscreen 1 + rect 0 0 640 480 + style 1 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + soundLoop music_mainmenu_mp + fadeCycle 1 + fadeClamp 1 + fadeAmount 0.1 + fadeInAmount 0 + blurWorld 0 + onOpen + { + focusfirst; + setfocusbydvar ui_gametype; + setLocalVarBool "ui_more_gametypes" ( 0 ); + } + onClose + { + execNow xupdatepartystate; + } + onESC + { + close settings_gametype; + } + focusColor 1 1 1 1 + itemDef + { + rect 0 0 640 480 4 4 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background mw2_main_background + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect 0 0 1708 480 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 0.5 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background mw2_main_cloud_overlay + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + exp rect x ( ( 0 - 107 ) - ( ( float( milliseconds( ) % 60000 ) / 60000 ) * ( 854 ) ) ) + } + itemDef + { + rect 0 0 -1708 -480 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 0.5 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background mw2_main_cloud_overlay + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + exp rect x ( ( - 107 + 854 ) + ( ( float( milliseconds( ) % 50000 ) / 50000 ) * ( 854 ) ) ) + } + itemDef + { + rect 0 0 640 480 4 4 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 0 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background mockup_bg_glow + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + exp forecolor a ( ( ( ( sin milliseconds( ) / 1500 ) + 1 ) * 0.250000 ) + 0.250000 ) + } + itemDef + { + rect 0 0 640 480 4 4 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 0 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background mockup_bg_glow + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + exp forecolor a ( ( ( ( sin milliseconds( ) / 480 ) + 1 ) * 0.250000 ) + 0.250000 ) + } + itemDef + { + rect 0 0 272 28 1 1 + style 0 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + decoration + type 0 + align 0 + textAlign 6 + textAlignX -60 + textAlignY 0 + textScale 0.44 + textStyle 0 + textFont 9 + feeder 0 + text "@MENU_CHOOSE_GAME_MODE_CAP" + visible 1 + } + itemDef + { + rect 0 28 640 356 4 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 0.15 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background white + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect -32 -4 32 32 4 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 0 0 0 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background drop_shadow_tl + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect 0 -4 640 32 4 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 0 0 0 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background drop_shadow_t + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect 640 -4 32 32 4 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 0 0 0 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background drop_shadow_tr + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect 640 28 32 356 4 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 0 0 0 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background drop_shadow_r + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect 640 384 32 32 4 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 0 0 0 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background drop_shadow_br + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect 0 384 640 32 4 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 0 0 0 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background drop_shadow_b + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect -32 384 32 32 4 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 0 0 0 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background drop_shadow_bl + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect -32 28 32 356 4 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 0 0 0 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background drop_shadow_l + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + + #define CHOICE_Y(i) (8 + (i * 20)) + //half pixels are GREAT - well, they seem to work here + #define HR_ORIGIN(i) 0 (CHOICE_Y(i) - 0.5) + #define CHOICE_ORIGIN(i) -64 CHOICE_Y(i) + #define CHOICE_RECT(i) CHOICE_ORIGIN(i) 316 20 1 1 + #define HR_RECT(i) HR_ORIGIN(i) 216 1 1 1 + #define CHOICE_ICON_Y(i) (28 + (i * 20.5)) + + #define GAMETYPE_BUTTON(itemIndex, visArg, textArg) \ + itemDef \ + { \ + rect CHOICE_RECT(itemIndex) \ + style 1 \ + border 0 \ + ownerdraw 0 \ + ownerdrawFlag 0 \ + borderSize 0 \ + foreColor 1 1 1 1 \ + backColor 0 0 0 0 \ + borderColor 0 0 0 0 \ + outlineColor 0 0 0 0 \ + background menu_button_selection_bar \ + group mw2_button \ + type 1 \ + align 0 \ + textAlign 6 \ + textAlignX -60 \ + textAlignY 0 \ + textScale 0.375 \ + textStyle 0 \ + textFont 3 \ + feeder 0 \ + visible 1 \ + visible visArg \ + exp text ( "@" + tablelookup( "mp/gameTypesTable.csv" , 0 , textArg , 1 ) + "_CAPS" ) \ + onFocus \ + { \ + play "mouse_over"; \ + setItemColor self backcolor 0 0 0 1; \ + setLocalVarBool "ui_menuAButton" ( 1 ); \ + setLocalVarString ui_info_name "@" + tablelookup( "mp/gameTypesTable.csv" , 0 , textArg , 1 ); \ + setLocalVarString ui_info_desc "@" + tablelookup( "mp/gameTypesTable.csv" , 0 , textArg , 2 ); \ + setLocalVarString ui_info_icon tablelookup( "mp/gameTypesTable.csv" , 0 , textArg , 3 ); \ + } \ + leaveFocus \ + { \ + setItemColor self backcolor 0 0 0 0; \ + setLocalVarBool "ui_menuAButton" ( 0 ); \ + setLocalVarString ui_info_name ( "@NULL_EMPTY" ); \ + setLocalVarString ui_info_desc ( "@NULL_EMPTY" ); \ + setLocalVarString ui_info_icon tablelookup( "mp/gameTypesTable.csv" , 0 , textArg , 3 ); \ + } \ + action \ + { \ + play "mouse_click"; \ + setDvar ui_gametype textArg; \ + setDvar g_gametype textArg; \ + execOnDvarIntValue "splitscreen" 1 "exec default_splitscreen.cfg"; \ + execOnDvarIntValue "systemlink" 1 "exec default_systemlink.cfg"; \ + execOnDvarIntValue "xblive_privatematch" 1 "exec default_xboxlive.cfg"; \ + close "self"; \ + } \ + } + + #define GAMETYPE_BUTTON_SCROLLER(itemIndex, visArg, textArg, scrollArg) \ + itemDef \ + { \ + rect CHOICE_RECT(itemIndex) \ + style 1 \ + border 0 \ + ownerdraw 0 \ + ownerdrawFlag 0 \ + borderSize 0 \ + foreColor 1 1 1 1 \ + backColor 0 0 0 0 \ + borderColor 0 0 0 0 \ + outlineColor 0 0 0 0 \ + background menu_button_selection_bar \ + group mw2_button \ + type 1 \ + align 0 \ + textAlign 6 \ + textAlignX -60 \ + textAlignY 0 \ + textScale 0.375 \ + textStyle 0 \ + textFont 3 \ + text textArg \ + feeder 0 \ + visible 1 \ + visible visArg \ + onFocus \ + { \ + play "mouse_over"; \ + setItemColor self backcolor 0 0 0 1; \ + setLocalVarBool "ui_menuBButton" ( 1 ); \ + } \ + leaveFocus \ + { \ + setItemColor self backcolor 0 0 0 0; \ + setLocalVarBool "ui_menuBButton" ( 0 ); \ + } \ + action \ + { \ + play "mouse_click"; \ + setLocalVarBool "ui_more_gametypes" ( scrollArg ); \ + } \ + } + + GAMETYPE_BUTTON(1, 1, hns) + + itemDef + { + rect -64 -20 336 20 1 3 + style 1 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + origin 0 0 + background menu_button_selection_bar + group mw2_button + type 1 + align 0 + textAlign 6 + textAlignX -60 + textAlignY 0 + textScale 0.375 + textStyle 0 + textFont 3 + feeder 0 + text "@PLATFORM_BACK_CAPS" + visible 1 + onFocus + { + play "mouse_over"; + setItemColor self backcolor 0 0 0 1; + setLocalVarBool ui_menuAButton 1; + } + leaveFocus + { + setItemColor self backcolor 0 0 0 0.0; + setLocalVarBool ui_menuAButton 1; + } + action + { + play mouse_click; + close self; + } + } + itemDef + { + rect -272 28 272 356 3 1 + style 3 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 0 0 0 0.7 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + background black + decoration + type 0 + align 0 + textAlign 0 + textAlignX 0 + textAlignY 0 + textScale 0.55 + textStyle 0 + textFont 0 + feeder 0 + visible 1 + } + itemDef + { + rect -272 28 264 200 3 1 + style 0 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 1 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + decoration + type 0 + align 0 + textAlign 4 + textAlignX 8 + textAlignY 0 + textScale 0.375 + textStyle 0 + textFont 9 + feeder 0 + visible 1 + exp text ( localvarstring( "ui_info_name" ) ) + } + itemDef + { + rect -272 28 264 200 3 1 + style 0 + border 0 + ownerdraw 0 + ownerdrawFlag 0 + borderSize 0 + foreColor 1 1 1 0.65 + backColor 0 0 0 0 + borderColor 0 0 0 0 + outlineColor 0 0 0 0 + decoration + autoWrapped + type 0 + align 0 + textAlign 4 + textAlignX 8 + textAlignY 20 + textScale 0.375 + textStyle 0 + textFont 3 + feeder 0 + visible 1 + exp text ( localvarstring( "ui_info_desc" ) ) + } + } +}