commit
d5764d17c2
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Discord Server
|
||||||
|
url: https://discord.gg/dpnRn2tKT9/
|
||||||
|
about: Please ask and answer support questions here.
|
31
.github/ISSUE_TEMPLATE/get-help.md
vendored
Normal file
31
.github/ISSUE_TEMPLATE/get-help.md
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
name: Get help
|
||||||
|
about: Get help using H2-Mod
|
||||||
|
title: ''
|
||||||
|
labels: discussion
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Do not open an issue here if you need help with modding or have a problem getting the client to run.
|
||||||
|
It is very likely your problem will be resolved by reading the [README](https://github.com/fedddddd/h2-mod#installation) carefully.
|
||||||
|
Ask in the `#help` channel on the [Discord](https://discord.gg/dpnRn2tKT9) server if you still have problems.
|
||||||
|
Before opening a new issue, please see [Issues](https://github.com/fedddddd/h2-mod/issues) and check that a similar issue does not already exist
|
||||||
|
If this does not apply, please continue by filling in the template below._
|
||||||
|
|
||||||
|
**What are you trying to do?**
|
||||||
|
A short, concise description of the outcome you are trying to achieve.
|
||||||
|
|
||||||
|
**What problem are you having?**
|
||||||
|
A clear and concise description of the problem that is blocking you from your desired outcome, ex. "H2-Mod is crashing with this error message: ..."
|
||||||
|
Please walk us through the steps you have taken when you encountered this problem.
|
||||||
|
If H2-Mod is crashing, include the minidump file and the crash address in text form. Screenshots showing the message box with the crash address are not acceptable.
|
||||||
|
|
||||||
|
**What have you tried so far?**
|
||||||
|
Describe any steps you've already taken to try to get past this issue. Have you found a workaround?
|
||||||
|
|
||||||
|
**What version of H2-Mod are you using?**
|
||||||
|
Please make sure you are up to date with the latest build from the `main` or `develop` branch.
|
||||||
|
|
||||||
|
**Anything else we should know?**
|
||||||
|
Add any other context about the problem here.
|
27
.github/ISSUE_TEMPLATE/request-a-feature.md
vendored
Normal file
27
.github/ISSUE_TEMPLATE/request-a-feature.md
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
name: Request a feature
|
||||||
|
about: Suggest a new feature or enhancement
|
||||||
|
title: ''
|
||||||
|
labels: feature
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_Before opening a new feature request, please see [Issues](https://github.com/fedddddd/h2-mod/issues) and check that a similar issue does not already exist.
|
||||||
|
If this a new request, help us help you by filling in the template below.
|
||||||
|
H2-Mod is not in active development right now. Please keep in mind that if there is not a clear positive impact on the gameplay to be gained by this feature request, it may be closed at the maintainers' discretion._
|
||||||
|
|
||||||
|
**What problem will this solve?**
|
||||||
|
A clear and concise description of the problem this new feature is meant to solve, ex. "There is something wrong with the game" or "There is something wrong with H2-Mod's source code".
|
||||||
|
Please limit your request to a single feature; create multiple feature requests instead.
|
||||||
|
|
||||||
|
**What might be a solution?**
|
||||||
|
A clear and concise description of what you want to happen. If you are proposing changes to H2-Mod's source code, tell us which component you want to be changed.
|
||||||
|
If you propose changes to the game, you may use images or videos to illustrate what aspect of the game should be changed.
|
||||||
|
|
||||||
|
**What other alternatives have you already considered?**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
It may help others to find workarounds until the problem is resolved.
|
||||||
|
|
||||||
|
**Anything else we should know?**
|
||||||
|
Add any other context or screenshots about the feature request here.
|
12
.github/workflows/build.yml
vendored
12
.github/workflows/build.yml
vendored
@ -8,6 +8,9 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- "*"
|
- "*"
|
||||||
types: [opened, synchronize, reopened]
|
types: [opened, synchronize, reopened]
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}
|
||||||
|
cancel-in-progress: false
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build binaries
|
name: Build binaries
|
||||||
@ -18,20 +21,11 @@ jobs:
|
|||||||
- Debug
|
- Debug
|
||||||
- Release
|
- Release
|
||||||
steps:
|
steps:
|
||||||
- name: Wait for previous workflows
|
|
||||||
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop')
|
|
||||||
uses: softprops/turnstyle@v1
|
|
||||||
with:
|
|
||||||
poll-interval-seconds: 10
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Check out files
|
- name: Check out files
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
# NOTE - If LFS ever starts getting used during builds, switch this to true!
|
|
||||||
lfs: false
|
lfs: false
|
||||||
|
|
||||||
- name: Add msbuild to PATH
|
- name: Add msbuild to PATH
|
||||||
|
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -43,9 +43,9 @@
|
|||||||
[submodule "deps/curl"]
|
[submodule "deps/curl"]
|
||||||
path = deps/curl
|
path = deps/curl
|
||||||
url = https://github.com/curl/curl.git
|
url = https://github.com/curl/curl.git
|
||||||
[submodule "deps/gsc-tool-h2"]
|
|
||||||
path = deps/gsc-tool-h2
|
|
||||||
url = https://github.com/fedddddd/gsc-tool-h2.git
|
|
||||||
[submodule "deps/json"]
|
[submodule "deps/json"]
|
||||||
path = deps/json
|
path = deps/json
|
||||||
url = https://github.com/nlohmann/json.git
|
url = https://github.com/nlohmann/json.git
|
||||||
|
[submodule "deps/gsc-tool"]
|
||||||
|
path = deps/gsc-tool
|
||||||
|
url = https://github.com/xensik/gsc-tool.git
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
**NOTE**: You must legally own Call of Duty®: Modern Warfare® 2 Campaign Remastered to run this mod. Cracked/Pirated versions of the game are **NOT** supported.
|
**NOTE**: You must legally own Call of Duty®: Modern Warfare® 2 Campaign Remastered to run this mod. Cracked/Pirated versions of the game are **NOT** supported.
|
||||||
|
|
||||||
1. Download the latest **[release](https://github.com/fedddddd/h2-mod/releases/latest/download/h2-mod.exe)** or **[develop](https://master.fed0001.xyz/data-dev/h2-mod.exe)** build
|
1. Download the latest **[release](https://h2-mod.fed.cat/data/h2-mod.exe)** or **[develop](https://h2-mod.fed.cat/data-dev/h2-mod.exe)** build
|
||||||
2. Drop the file in your **Call of Duty: Modern Warfare 2 Campaign Remastered** installation folder.
|
2. Drop the file in your **Call of Duty: Modern Warfare 2 Campaign Remastered** installation folder.
|
||||||
3. Run **h2-mod.exe** and make sure you press **"YES"** when asked whether to install updates.
|
3. Run **h2-mod.exe** and make sure you press **"YES"** when asked whether to install updates.
|
||||||
|
|
||||||
|
21
data/cdata/scripts/ending/achievements.gsc
Normal file
21
data/cdata/scripts/ending/achievements.gsc
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
main()
|
||||||
|
{
|
||||||
|
replacefunc(maps\char_museum::ramirez_jukebox, ::ramirez_jukebox);
|
||||||
|
}
|
||||||
|
|
||||||
|
ramirez_jukebox()
|
||||||
|
{
|
||||||
|
common_scripts\utility::flag_wait("museum_ready");
|
||||||
|
wait 4;
|
||||||
|
|
||||||
|
jukebox = getent("ramirez_jukebox", "targetname");
|
||||||
|
jukebox makeusable();
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
jukebox waittill("trigger");
|
||||||
|
index = randomint(37);
|
||||||
|
jukebox maps\_utility::play_sound_on_entity("museum_ramirez_ee_" + index);
|
||||||
|
maps\_utility::giveachievement_wrapper("RAMIREZ");
|
||||||
|
}
|
||||||
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
#include maps\_endmission;
|
||||||
|
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
replacefunc(maps\_credit_h2_autogen::_id_B775, ::initiwcredits);
|
replacefunc(maps\_credit_h2_autogen::_id_B775, ::initiwcredits);
|
||||||
|
171
data/cdata/scripts/endmission.gsc
Normal file
171
data/cdata/scripts/endmission.gsc
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
#include maps\_endmission;
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
// fix credits victory screen & add wait after giving mission achievements
|
||||||
|
replacefunc(maps\_endmission::_nextmission, ::nextmission);
|
||||||
|
}
|
||||||
|
|
||||||
|
give_mission_achievement(name)
|
||||||
|
{
|
||||||
|
was_unlocked = achievementunlocked(name);
|
||||||
|
maps\_utility::giveachievement_wrapper(name);
|
||||||
|
|
||||||
|
if (!was_unlocked)
|
||||||
|
{
|
||||||
|
wait 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nextmission(var_0)
|
||||||
|
{
|
||||||
|
level notify("achievements_level_complete");
|
||||||
|
|
||||||
|
if (level.script == "ending" && level._id_AC38 != "credits_1")
|
||||||
|
{
|
||||||
|
changelevel("");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!isdefined(var_0))
|
||||||
|
var_0 = 0;
|
||||||
|
|
||||||
|
level notify("nextmission");
|
||||||
|
level.player notify("levelComplete");
|
||||||
|
level.nextmission = 1;
|
||||||
|
level.player enableinvulnerability();
|
||||||
|
|
||||||
|
if (maps\_utility::arcademode())
|
||||||
|
{
|
||||||
|
level._id_AC81 = 1;
|
||||||
|
thread _id_D36F::_id_AF95();
|
||||||
|
common_scripts\utility::flag_wait("arcademode_ending_complete");
|
||||||
|
}
|
||||||
|
|
||||||
|
var_1 = undefined;
|
||||||
|
setsaveddvar("ui_nextMission", "1");
|
||||||
|
setdvar("ui_showPopup", "0");
|
||||||
|
setdvar("ui_popupString", "");
|
||||||
|
|
||||||
|
if (level.script == "ending")
|
||||||
|
{
|
||||||
|
level.script = "af_chase";
|
||||||
|
nextmission(1);
|
||||||
|
level.script = "ending";
|
||||||
|
}
|
||||||
|
|
||||||
|
game["previous_map"] = level.script;
|
||||||
|
var_1 = level.missionsettings getlevelindex(level.script);
|
||||||
|
|
||||||
|
if (!(level.script == "af_chase" && var_0) && !maps\_utility::achievement_conditions("IMMORTAL"))
|
||||||
|
{
|
||||||
|
_func_1FC(level.script, var_1);
|
||||||
|
updategamerprofileall();
|
||||||
|
maps\_endmission::check_immortal_achievement();
|
||||||
|
}
|
||||||
|
|
||||||
|
maps\_gameskill::auto_adust_zone_complete("aa_main_" + level.script);
|
||||||
|
|
||||||
|
if (!isdefined(var_1))
|
||||||
|
{
|
||||||
|
missionsuccess(level.script);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level.script != "ending" && !(level.script == "af_chase" && var_0))
|
||||||
|
{
|
||||||
|
level.player thread maps\_hud_util::fade_out(1, undefined);
|
||||||
|
soundscripts\_snd::snd_message("end_mission_fade_to_black");
|
||||||
|
wait 2;
|
||||||
|
maps\_utility::level_end_save();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level.script != "af_chase" || var_0)
|
||||||
|
{
|
||||||
|
level.missionsettings setlevelcompleted(var_1);
|
||||||
|
var_3 = maps\_endmission::updatesppercent();
|
||||||
|
updategamerprofile();
|
||||||
|
|
||||||
|
if (level.missionsettings hasachievement(var_1))
|
||||||
|
{
|
||||||
|
give_mission_achievement(level.missionsettings getachievement(var_1));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level.missionsettings haslevelveteranaward(var_1) && getlevelcompleted(var_1) == 4 && level.missionsettings check_other_haslevelveteranachievement(var_1))
|
||||||
|
{
|
||||||
|
give_mission_achievement(level.missionsettings getlevelveteranaward(var_1));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level.missionsettings hasmissionhardenedaward() && level.missionsettings getlowestskill() > 2)
|
||||||
|
{
|
||||||
|
give_mission_achievement(level.missionsettings gethardenedaward());
|
||||||
|
}
|
||||||
|
|
||||||
|
level.missionsettings maps\_endmission::_id_D1B9();
|
||||||
|
var_4 = level.missionsettings.levels.size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level.script == "af_chase" && var_0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (level.script == "ending" && level._id_AC38 == "credits_1")
|
||||||
|
common_scripts\utility::flag_wait("af_chase_nextmission");
|
||||||
|
|
||||||
|
if (level.script == "airplane" || level.script == "ending")
|
||||||
|
{
|
||||||
|
if (level.credits_active)
|
||||||
|
{
|
||||||
|
level notify("credits_ended");
|
||||||
|
credits_end();
|
||||||
|
}
|
||||||
|
|
||||||
|
setsaveddvar("ui_nextMission", "0");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var_4 = var_1 + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getdvarint("limited_mode"))
|
||||||
|
{
|
||||||
|
setsaveddvar("ui_nextMission", "0");
|
||||||
|
changelevel("");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maps\_utility::arcademode())
|
||||||
|
{
|
||||||
|
if (!getdvarint("arcademode_full"))
|
||||||
|
{
|
||||||
|
setsaveddvar("ui_nextMission", "0");
|
||||||
|
changelevel("");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level.script == "cargoship")
|
||||||
|
{
|
||||||
|
changelevel("blackout", level.missionsettings getkeepweapons(var_1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (level.script == "airlift")
|
||||||
|
{
|
||||||
|
changelevel("village_assault", level.missionsettings getkeepweapons(var_1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (level.script == "jeepride")
|
||||||
|
{
|
||||||
|
changelevel("airplane", level.missionsettings getkeepweapons(var_1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (level.missionsettings skipssuccess(var_1))
|
||||||
|
{
|
||||||
|
changelevel(level.missionsettings getlevelname(var_4), level.missionsettings getkeepweapons(var_1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
missionsuccess(level.missionsettings getlevelname(var_4), level.missionsettings getkeepweapons(var_1));
|
||||||
|
}
|
||||||
|
}
|
25
data/cdata/scripts/gulag/achievements.gsc
Normal file
25
data/cdata/scripts/gulag/achievements.gsc
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
main()
|
||||||
|
{
|
||||||
|
replacefunc(maps\gulag_code::surprise, ::surprise);
|
||||||
|
}
|
||||||
|
|
||||||
|
surprise()
|
||||||
|
{
|
||||||
|
level endon("cancel_surprise");
|
||||||
|
tv = getent("surprise_tv", "script_noteworthy");
|
||||||
|
tv thread maps\gulag_code::surprise_tv();
|
||||||
|
common_scripts\utility::flag_wait("player_nears_cell_door3");
|
||||||
|
|
||||||
|
maps\gulag_code::surprise_damage_trigger();
|
||||||
|
maps\gulag_code::surprise_flag_touching();
|
||||||
|
|
||||||
|
tv thread maps\_utility::play_sound_on_entity("h2_zombie_easter_egg");
|
||||||
|
tv.screen = spawn("script_model", tv.origin);
|
||||||
|
tv.screen.angles = tv.angles;
|
||||||
|
tv.screen setmodel("com_tv1_pho_zombie");
|
||||||
|
|
||||||
|
wait 3.3;
|
||||||
|
tv.screen delete();
|
||||||
|
|
||||||
|
maps\_utility::giveachievement_wrapper("BRAINS");
|
||||||
|
}
|
2
data/cdata/ui_scripts/achievements/__init__.lua
Normal file
2
data/cdata/ui_scripts/achievements/__init__.lua
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
require("toast")
|
||||||
|
require("menu")
|
372
data/cdata/ui_scripts/achievements/menu.lua
Normal file
372
data/cdata/ui_scripts/achievements/menu.lua
Normal file
@ -0,0 +1,372 @@
|
|||||||
|
LUI.MenuBuilder.registerType("achievements_menu", function(root, controller)
|
||||||
|
local menuwidth = 500
|
||||||
|
local menu = LUI.MenuTemplate.new(root, {
|
||||||
|
menu_title = "@LUA_MENU_ACHIEVEMENTS",
|
||||||
|
exclusiveController = 0,
|
||||||
|
menu_width = menuwidth,
|
||||||
|
menu_top_indent = LUI.MenuTemplate.spMenuOffset,
|
||||||
|
showTopRightSmallBar = true,
|
||||||
|
uppercase_title = true
|
||||||
|
})
|
||||||
|
|
||||||
|
local black_state = CoD.CreateState(nil, nil, nil, nil, CoD.AnchorTypes.All)
|
||||||
|
black_state.red = 0
|
||||||
|
black_state.blue = 0
|
||||||
|
black_state.green = 0
|
||||||
|
black_state.alpha = 0
|
||||||
|
black_state.left = -100
|
||||||
|
black_state.right = 100
|
||||||
|
black_state.top = -100
|
||||||
|
black_state.bottom = 100
|
||||||
|
|
||||||
|
local black = LUI.UIImage.new(black_state)
|
||||||
|
black:setPriority(-1000)
|
||||||
|
|
||||||
|
black:registerAnimationState("BlackScreen", {
|
||||||
|
alpha = 1
|
||||||
|
})
|
||||||
|
|
||||||
|
black:registerAnimationState("Faded", {
|
||||||
|
alpha = 0
|
||||||
|
})
|
||||||
|
|
||||||
|
menu:addElement(black)
|
||||||
|
|
||||||
|
local currentbackground = nil
|
||||||
|
local changebackground = function(background, isvideobg)
|
||||||
|
if (not Engine.InFrontend() or currentbackground == background) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
currentbackground = background
|
||||||
|
|
||||||
|
if (isvideobg) then
|
||||||
|
PersistentBackground.ChangeBackground(nil, background)
|
||||||
|
else
|
||||||
|
PersistentBackground.ChangeBackground(background, "")
|
||||||
|
PersistentBackground.ChangeBackground(background, nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
black:animateInSequence( {
|
||||||
|
{
|
||||||
|
"BlackScreen",
|
||||||
|
0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Faded",
|
||||||
|
1000
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local itemheight = 80
|
||||||
|
local itemwidth = menuwidth
|
||||||
|
local itemspacing = 10
|
||||||
|
local maxrowelements = 1
|
||||||
|
|
||||||
|
local rowelements = 0
|
||||||
|
local newrow = function()
|
||||||
|
local currentrow = LUI.UIElement.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = itemheight * maxrowelements,
|
||||||
|
height = itemheight,
|
||||||
|
})
|
||||||
|
|
||||||
|
menu.list.currentrow = currentrow
|
||||||
|
menu.list:addElement(currentrow)
|
||||||
|
menu.list.currentrow:makeFocusable()
|
||||||
|
end
|
||||||
|
|
||||||
|
newrow()
|
||||||
|
|
||||||
|
local addelement = function(element)
|
||||||
|
local container = LUI.UIElement.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = itemheight,
|
||||||
|
height = itemheight,
|
||||||
|
left = rowelements * (itemheight + itemspacing)
|
||||||
|
})
|
||||||
|
container:addElement(element)
|
||||||
|
container:makeFocusable()
|
||||||
|
menu.list.currentrow:addElement(container)
|
||||||
|
rowelements = rowelements + 1
|
||||||
|
if (rowelements == maxrowelements) then
|
||||||
|
newrow()
|
||||||
|
rowelements = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local achievementtable = achievements.table()
|
||||||
|
local unlockcount = 0
|
||||||
|
for i = 0, #achievementtable do
|
||||||
|
if (achievementtable[i]) then
|
||||||
|
unlockcount = unlockcount + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 0, achievements.count() - 1 do
|
||||||
|
local btnbg = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = itemwidth,
|
||||||
|
height = itemheight,
|
||||||
|
material = RegisterMaterial("h2_btn_unfocused")
|
||||||
|
})
|
||||||
|
|
||||||
|
btnbg:setup9SliceImage()
|
||||||
|
|
||||||
|
btnbg:registerAnimationState("locked", {
|
||||||
|
material = RegisterMaterial("h2_btn_unfocused_locked")
|
||||||
|
})
|
||||||
|
|
||||||
|
local raritynames = {
|
||||||
|
"common",
|
||||||
|
"rare",
|
||||||
|
"legendary",
|
||||||
|
"epic",
|
||||||
|
}
|
||||||
|
|
||||||
|
local rarityname = raritynames[achievements.getrarity(i) + 1]
|
||||||
|
|
||||||
|
local raritystrip = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = 10,
|
||||||
|
height = itemheight,
|
||||||
|
material = RegisterMaterial("depot_button_rarity_strip_" .. rarityname)
|
||||||
|
})
|
||||||
|
|
||||||
|
raritystrip:registerAnimationState("hide", {
|
||||||
|
alpha = 0
|
||||||
|
})
|
||||||
|
|
||||||
|
raritystrip:registerAnimationState("show", {
|
||||||
|
alpha = 1
|
||||||
|
})
|
||||||
|
|
||||||
|
raritystrip:setup9SliceImage()
|
||||||
|
|
||||||
|
local glow = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = itemwidth,
|
||||||
|
height = itemheight,
|
||||||
|
material = RegisterMaterial("depot_button_rarity_glow_" .. rarityname)
|
||||||
|
})
|
||||||
|
|
||||||
|
glow:registerAnimationState("hide", {
|
||||||
|
alpha = 0
|
||||||
|
})
|
||||||
|
|
||||||
|
glow:registerAnimationState("show", {
|
||||||
|
alpha = 1
|
||||||
|
})
|
||||||
|
|
||||||
|
local glow2 = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = itemwidth,
|
||||||
|
height = itemheight,
|
||||||
|
material = RegisterMaterial("depot_button_rarity_glow_" .. rarityname)
|
||||||
|
})
|
||||||
|
|
||||||
|
glow2:registerAnimationState("hide", {
|
||||||
|
alpha = 0
|
||||||
|
})
|
||||||
|
|
||||||
|
glow2:registerAnimationState("show", {
|
||||||
|
alpha = 1
|
||||||
|
})
|
||||||
|
|
||||||
|
glow:animateToState("hide")
|
||||||
|
glow2:animateToState("hide")
|
||||||
|
|
||||||
|
local achievementcontainer = LUI.UIElement.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = itemwidth,
|
||||||
|
height = itemheight,
|
||||||
|
})
|
||||||
|
|
||||||
|
local image = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = itemspacing / 2,
|
||||||
|
left = itemspacing / 2 + 10,
|
||||||
|
width = itemheight - itemspacing,
|
||||||
|
height = itemheight - itemspacing,
|
||||||
|
material = RegisterMaterial("trophy_" .. i)
|
||||||
|
})
|
||||||
|
|
||||||
|
image:registerAnimationState("locked", {
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = itemspacing / 2 + 15,
|
||||||
|
left = itemspacing / 2 + 15 + 10,
|
||||||
|
width = itemheight - itemspacing - 30,
|
||||||
|
height = itemheight - itemspacing - 30,
|
||||||
|
material = RegisterMaterial("icon_lock_mini")
|
||||||
|
})
|
||||||
|
|
||||||
|
local textwidth = itemwidth - itemheight - itemspacing * 2
|
||||||
|
local title = LUI.UIText.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = itemspacing + 5,
|
||||||
|
left = itemheight + 5 + 10,
|
||||||
|
color = {
|
||||||
|
r = 0.7,
|
||||||
|
g = 0.7,
|
||||||
|
b = 0.7,
|
||||||
|
},
|
||||||
|
width = textwidth,
|
||||||
|
font = CoD.TextSettings.Font23.Font,
|
||||||
|
height = CoD.TextSettings.Font23.Height
|
||||||
|
})
|
||||||
|
|
||||||
|
local desc = LUI.UIText.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = itemspacing + CoD.TextSettings.Font23.Height + 10,
|
||||||
|
left = itemheight + 5 + 10,
|
||||||
|
width = textwidth,
|
||||||
|
alignment = LUI.Alignment.Left,
|
||||||
|
color = {
|
||||||
|
r = 0.7,
|
||||||
|
g = 0.7,
|
||||||
|
b = 0.7,
|
||||||
|
},
|
||||||
|
font = CoD.TextSettings.Font21.Font,
|
||||||
|
height = CoD.TextSettings.Font21.Height
|
||||||
|
})
|
||||||
|
|
||||||
|
local focusedtext = {
|
||||||
|
color = {r = 1, g = 1, b = 1}
|
||||||
|
}
|
||||||
|
desc:registerAnimationState("focused", focusedtext)
|
||||||
|
title:registerAnimationState("focused", focusedtext)
|
||||||
|
|
||||||
|
title:setText(Engine.ToUpperCase(Engine.Localize(achievements.getname(i))))
|
||||||
|
desc:setText(Engine.Localize(achievements.getdetails(i)))
|
||||||
|
|
||||||
|
achievementcontainer:setHandleMouse(true)
|
||||||
|
local locked = not achievementtable[i]
|
||||||
|
|
||||||
|
if (locked) then
|
||||||
|
raritystrip:animateToState("hide")
|
||||||
|
end
|
||||||
|
|
||||||
|
local background = achievements.getbackground(i)
|
||||||
|
achievementcontainer:registerEventHandler("mouseenter", function()
|
||||||
|
Engine.PlaySound(CoD.SFX.MouseOver)
|
||||||
|
|
||||||
|
if (background ~= nil and achievementtable[i]) then
|
||||||
|
changebackground(background, false)
|
||||||
|
else
|
||||||
|
changebackground("sp_menus_bg_regular", true)
|
||||||
|
end
|
||||||
|
|
||||||
|
if (locked) then
|
||||||
|
btnbg:setImage(RegisterMaterial("h2_btn_focused_locked"))
|
||||||
|
else
|
||||||
|
raritystrip:animateToState("show")
|
||||||
|
title:animateToState("focused")
|
||||||
|
desc:animateToState("focused")
|
||||||
|
glow:animateToState("show")
|
||||||
|
glow2:animateToState("show")
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
achievementcontainer:registerEventHandler("mouseleave", function()
|
||||||
|
if (locked) then
|
||||||
|
btnbg:setImage(RegisterMaterial("h2_btn_unfocused_locked"))
|
||||||
|
else
|
||||||
|
title:animateToState("default")
|
||||||
|
desc:animateToState("default")
|
||||||
|
glow:animateToState("hide")
|
||||||
|
glow2:animateToState("hide")
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
achievementcontainer:addElement(btnbg)
|
||||||
|
achievementcontainer:addElement(glow)
|
||||||
|
achievementcontainer:addElement(glow2)
|
||||||
|
achievementcontainer:addElement(raritystrip)
|
||||||
|
achievementcontainer:addElement(image)
|
||||||
|
achievementcontainer:addElement(title)
|
||||||
|
achievementcontainer:addElement(desc)
|
||||||
|
|
||||||
|
if (locked) then
|
||||||
|
btnbg:animateToState("locked")
|
||||||
|
image:animateToState("locked")
|
||||||
|
|
||||||
|
if (achievements.issecret(i)) then
|
||||||
|
title:setText(Engine.ToUpperCase(Engine.Localize("ACHIEVEMENT_HIDDEN")))
|
||||||
|
desc:setText(Engine.Localize("ACHIEVEMENT_HIDDEN_DESC"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
addelement(achievementcontainer)
|
||||||
|
end
|
||||||
|
|
||||||
|
if (rowelements == 0) then
|
||||||
|
menu.list.currentrow:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.Options.InitScrollingList(menu.list, nil, {
|
||||||
|
rows = 5
|
||||||
|
})
|
||||||
|
|
||||||
|
local createprogressbar = function()
|
||||||
|
local barwidth = itemwidth + 17
|
||||||
|
local progressbar = LUI.UIElement.new({
|
||||||
|
bottomAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = barwidth,
|
||||||
|
bottom = -90,
|
||||||
|
height = 15
|
||||||
|
})
|
||||||
|
|
||||||
|
local bg = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
rightAnchor = true,
|
||||||
|
bottomAnchor = true,
|
||||||
|
alpha = 0.55,
|
||||||
|
color = Colors.grey_14,
|
||||||
|
})
|
||||||
|
|
||||||
|
local bar = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
bottomAnchor = true,
|
||||||
|
width = 0,
|
||||||
|
material = RegisterMaterial("h1_ui_progressbar_green")
|
||||||
|
})
|
||||||
|
|
||||||
|
progressbar.setprogress = function(fraction)
|
||||||
|
bar:registerAnimationState("progress", {
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
bottomAnchor = true,
|
||||||
|
width = fraction * (barwidth),
|
||||||
|
})
|
||||||
|
|
||||||
|
bar:animateToState("progress", 300)
|
||||||
|
end
|
||||||
|
|
||||||
|
progressbar.setprogress(unlockcount / achievements.count())
|
||||||
|
|
||||||
|
progressbar:addElement(bg)
|
||||||
|
progressbar:addElement(bar)
|
||||||
|
progressbar:addElement(LUI.DecoFrame.new(nil, LUI.DecoFrame.Grey))
|
||||||
|
|
||||||
|
return progressbar
|
||||||
|
end
|
||||||
|
|
||||||
|
menu:addElement(createprogressbar())
|
||||||
|
menu:AddBackButton()
|
||||||
|
|
||||||
|
return menu
|
||||||
|
end)
|
203
data/cdata/ui_scripts/achievements/toast.lua
Normal file
203
data/cdata/ui_scripts/achievements/toast.lua
Normal file
@ -0,0 +1,203 @@
|
|||||||
|
if (Engine.InFrontend()) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local hud = LUI.UIElement.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = 500,
|
||||||
|
height = 500,
|
||||||
|
left = 0
|
||||||
|
})
|
||||||
|
|
||||||
|
local hidetimer = LUI.UITimer.new(5000, "hide_toast")
|
||||||
|
local finishtimer = LUI.UITimer.new(6000, "notification_finished")
|
||||||
|
local animtime = 250
|
||||||
|
|
||||||
|
hud:setPriority(1000)
|
||||||
|
|
||||||
|
local isshowingachievement = false
|
||||||
|
local notificationqueue = {}
|
||||||
|
local shownotificationinternal = nil
|
||||||
|
|
||||||
|
local shownextnotification = function()
|
||||||
|
isshowingachievement = false
|
||||||
|
local data = notificationqueue[1]
|
||||||
|
if (data == nil) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
table.remove(notificationqueue, 1)
|
||||||
|
shownotificationinternal(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
local createtoast = function()
|
||||||
|
local height = 80
|
||||||
|
local width = 400
|
||||||
|
local padding = 10
|
||||||
|
local leftoffset = 10
|
||||||
|
|
||||||
|
local titlefont = CoD.TextSettings.Font27
|
||||||
|
local descfont = CoD.TextSettings.Font21
|
||||||
|
|
||||||
|
local imagesize = height - padding * 2
|
||||||
|
local textoffset = padding * 2 + imagesize
|
||||||
|
local textyoffset = height / 2 - (titlefont.Height + descfont.Height) / 2
|
||||||
|
local text2yoffset = 5
|
||||||
|
|
||||||
|
local container = LUI.UIElement.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = 100,
|
||||||
|
left = 0,
|
||||||
|
width = width,
|
||||||
|
height = height
|
||||||
|
})
|
||||||
|
|
||||||
|
container:registerAnimationState("hide", {
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = 100,
|
||||||
|
left = -1000,
|
||||||
|
width = width,
|
||||||
|
height = height
|
||||||
|
})
|
||||||
|
|
||||||
|
container:registerAnimationState("show", {
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = 100,
|
||||||
|
left = 0,
|
||||||
|
width = width,
|
||||||
|
height = height
|
||||||
|
})
|
||||||
|
|
||||||
|
container:registerAnimationState("show_right", {
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = 100,
|
||||||
|
left = 40,
|
||||||
|
width = width,
|
||||||
|
height = height
|
||||||
|
})
|
||||||
|
|
||||||
|
local bg = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
rightAnchor = true,
|
||||||
|
bottomAnchor = true,
|
||||||
|
alpha = 0.55,
|
||||||
|
color = Colors.grey_14,
|
||||||
|
})
|
||||||
|
|
||||||
|
local imagebg = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = padding,
|
||||||
|
left = padding + leftoffset,
|
||||||
|
width = imagesize,
|
||||||
|
height = imagesize,
|
||||||
|
material = RegisterMaterial("trophy_border")
|
||||||
|
})
|
||||||
|
|
||||||
|
local image = LUI.UIImage.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = padding,
|
||||||
|
left = padding + leftoffset,
|
||||||
|
width = imagesize,
|
||||||
|
height = imagesize,
|
||||||
|
})
|
||||||
|
|
||||||
|
local title = LUI.UIText.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
top = textyoffset,
|
||||||
|
left = textoffset + leftoffset,
|
||||||
|
font = titlefont.Font,
|
||||||
|
height = titlefont.Height
|
||||||
|
})
|
||||||
|
|
||||||
|
local desc = LUI.UIText.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
width = width - textoffset - leftoffset - padding,
|
||||||
|
alignment = LUI.Alignment.Left,
|
||||||
|
top = textyoffset + titlefont.Height + text2yoffset,
|
||||||
|
left = textoffset + leftoffset,
|
||||||
|
font = descfont.Font,
|
||||||
|
height = descfont.Height
|
||||||
|
})
|
||||||
|
|
||||||
|
container:addElement(bg)
|
||||||
|
container:addElement(imagebg)
|
||||||
|
container:addElement(image)
|
||||||
|
container:addElement(title)
|
||||||
|
container:addElement(desc)
|
||||||
|
container:addElement(LUI.DecoFrame.new(nil, LUI.DecoFrame.Grey))
|
||||||
|
|
||||||
|
container:animateToState("hide")
|
||||||
|
|
||||||
|
container:addElement(hidetimer)
|
||||||
|
container:addElement(finishtimer)
|
||||||
|
|
||||||
|
container:registerEventHandler("hide_toast", function()
|
||||||
|
LUI.UITimer.Stop(hidetimer)
|
||||||
|
container:animateToState("hide", animtime)
|
||||||
|
end)
|
||||||
|
|
||||||
|
container:registerEventHandler("notification_finished", function()
|
||||||
|
LUI.UITimer.Stop(finishtimer)
|
||||||
|
shownextnotification()
|
||||||
|
end)
|
||||||
|
|
||||||
|
hud:addElement(container)
|
||||||
|
|
||||||
|
container.image = image
|
||||||
|
container.title = title
|
||||||
|
container.desc = desc
|
||||||
|
|
||||||
|
return container
|
||||||
|
end
|
||||||
|
|
||||||
|
local toast = createtoast()
|
||||||
|
|
||||||
|
shownotificationinternal = function(data)
|
||||||
|
isshowingachievement = true
|
||||||
|
|
||||||
|
LUI.UITimer.Reset(hidetimer)
|
||||||
|
LUI.UITimer.Reset(finishtimer)
|
||||||
|
|
||||||
|
toast:animateToState("hide")
|
||||||
|
toast:animateToState("show", animtime)
|
||||||
|
|
||||||
|
toast.title:setText(data.title)
|
||||||
|
toast.desc:setText(data.description)
|
||||||
|
toast.image:setImage(data.image)
|
||||||
|
|
||||||
|
if (data.sound) then
|
||||||
|
Engine.PlaySound(data.sound)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function addnotification(data)
|
||||||
|
table.insert(notificationqueue, data)
|
||||||
|
if (not isshowingachievement) then
|
||||||
|
shownextnotification()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local addachievementnotification = function(id)
|
||||||
|
addnotification({
|
||||||
|
title = Engine.Localize("ACHIEVEMENT_EARNED"),
|
||||||
|
description = Engine.ToUpperCase(Engine.Localize("ACHIEVEMENT_NAME_" .. id)),
|
||||||
|
image = RegisterMaterial("trophy_" .. id),
|
||||||
|
sound = "ui_achievement_unlocked"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
hud:registerEventHandler("earned_achievement", function(element, event)
|
||||||
|
addachievementnotification(event.id)
|
||||||
|
end)
|
||||||
|
|
||||||
|
LUI.roots.UIRoot0:addElement(hud)
|
@ -1 +1,2 @@
|
|||||||
require("credits")
|
require("credits")
|
||||||
|
require("victoryscreen")
|
||||||
|
85
data/cdata/ui_scripts/branding/victoryscreen.lua
Normal file
85
data/cdata/ui_scripts/branding/victoryscreen.lua
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
local specopsmod = "mods/specops"
|
||||||
|
|
||||||
|
function CampaignCompleteMenu()
|
||||||
|
Engine.ExecNow("profile_menuDvarsSetup")
|
||||||
|
Engine.SetDvarBool("profileMenuOption_resumeIsGameCompleted", true)
|
||||||
|
Engine.ExecNow("profile_menuDvarsFinish")
|
||||||
|
Engine.Exec("updategamerprofile")
|
||||||
|
|
||||||
|
local victory = LUI.UIImage.new({
|
||||||
|
material = RegisterMaterial("victory"),
|
||||||
|
top = -300,
|
||||||
|
width = 1126,
|
||||||
|
height = 563,
|
||||||
|
alpha = 0
|
||||||
|
})
|
||||||
|
|
||||||
|
victory:registerAnimationState("show", {
|
||||||
|
alpha = 1
|
||||||
|
})
|
||||||
|
|
||||||
|
victory:animateInSequence({
|
||||||
|
{
|
||||||
|
"default",
|
||||||
|
0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"show",
|
||||||
|
1000
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
local topoffset = 590
|
||||||
|
local text = LUI.UIText.new({
|
||||||
|
leftAnchor = true,
|
||||||
|
rightAnchor = true,
|
||||||
|
topAnchor = true,
|
||||||
|
bottomAnchor = false,
|
||||||
|
top = topoffset,
|
||||||
|
bottom = topoffset + CoD.TextSettings.BodyFont18.Height,
|
||||||
|
font = CoD.TextSettings.BodyFont18.Font,
|
||||||
|
alignment = LUI.Alignment.Center,
|
||||||
|
alpha = 0
|
||||||
|
})
|
||||||
|
|
||||||
|
text:registerAnimationState("show", {
|
||||||
|
alpha = 1
|
||||||
|
})
|
||||||
|
|
||||||
|
text:setText(Engine.Localize("@MENU_SP_CONTINUE_TO_SPECIAL_OPS_CAPS"))
|
||||||
|
victory:addElement(text)
|
||||||
|
victory.text = text
|
||||||
|
|
||||||
|
victory.skipLocked = true
|
||||||
|
victory:addElement(LUI.UITimer.new(3000, "enable_quit", nil, true))
|
||||||
|
victory:registerEventHandler("enable_quit", function (element, event)
|
||||||
|
element.text:animateToState("show", 300)
|
||||||
|
element.skipLocked = false
|
||||||
|
end)
|
||||||
|
|
||||||
|
local buttonhandler = function (element, event)
|
||||||
|
if (element.skipLocked) then
|
||||||
|
return
|
||||||
|
else
|
||||||
|
if (mods.getinfo(specopsmod).isvalid) then
|
||||||
|
mods.load(specopsmod)
|
||||||
|
else
|
||||||
|
game:openlink("specops")
|
||||||
|
Engine.PlaySound(CoD.SFX.MenuAccept)
|
||||||
|
Engine.PopupClosed(event.controller, "accept_normal")
|
||||||
|
LUI.FlowManager.RequestCloseAllMenus(element)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local bindbutton = LUI.UIBindButton.new()
|
||||||
|
bindbutton:registerEventHandler("button_start", buttonhandler)
|
||||||
|
bindbutton:registerEventHandler("button_action", buttonhandler)
|
||||||
|
bindbutton:registerEventHandler("button_secondary", buttonhandler)
|
||||||
|
bindbutton.handlePrimary = true
|
||||||
|
victory:addElement(bindbutton)
|
||||||
|
|
||||||
|
return victory
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.MenuBuilder.m_types_build["MENU_CAMPAIGN_COMPLETED"] = CampaignCompleteMenu
|
31
data/cdata/ui_scripts/buttons/__init__.lua
Normal file
31
data/cdata/ui_scripts/buttons/__init__.lua
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
LUI.addmenubutton("main_campaign", {
|
||||||
|
index = 6,
|
||||||
|
text = "@MENU_MODS",
|
||||||
|
description = Engine.Localize("@MENU_MODS_DESC"),
|
||||||
|
callback = function()
|
||||||
|
LUI.FlowManager.RequestAddMenu(nil, "mods_menu")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
LUI.addmenubutton("main_campaign", {
|
||||||
|
index = 6,
|
||||||
|
text = "@LUA_MENU_ACHIEVEMENTS",
|
||||||
|
description = Engine.Localize("@LUA_MENU_ACHIEVEMENTS_DESC"),
|
||||||
|
callback = function()
|
||||||
|
LUI.FlowManager.RequestAddMenu(nil, "achievements_menu")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
local maincampaign = LUI.MenuBuilder.m_types_build["main_campaign"]
|
||||||
|
LUI.MenuBuilder.m_types_build["main_campaign"] = function(...)
|
||||||
|
local initlist = LUI.Options.InitScrollingList
|
||||||
|
LUI.Options.InitScrollingList = function(list)
|
||||||
|
initlist(list, nil ,{
|
||||||
|
rows = 10
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
local menu = maincampaign(...)
|
||||||
|
LUI.Options.InitScrollingList = initlist
|
||||||
|
return menu
|
||||||
|
end
|
@ -29,15 +29,6 @@ function string:truncate(length)
|
|||||||
return self:sub(1, length - 3) .. "..."
|
return self:sub(1, length - 3) .. "..."
|
||||||
end
|
end
|
||||||
|
|
||||||
LUI.addmenubutton("main_campaign", {
|
|
||||||
index = 6,
|
|
||||||
text = "@MENU_MODS",
|
|
||||||
description = Engine.Localize("@MENU_MODS_DESC"),
|
|
||||||
callback = function()
|
|
||||||
LUI.FlowManager.RequestAddMenu(nil, "mods_menu")
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
function getmodname(path)
|
function getmodname(path)
|
||||||
local modinfo = mods.getinfo(path)
|
local modinfo = mods.getinfo(path)
|
||||||
|
|
||||||
|
@ -11,6 +11,10 @@ LUI.MenuBuilder.registerPopupType("motd", function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
LUI.onmenuopen("main_campaign", function(menu)
|
LUI.onmenuopen("main_campaign", function(menu)
|
||||||
|
if (not motd.hasmotd()) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if (not motd.hasseentoday()) then
|
if (not motd.hasseentoday()) then
|
||||||
motd.sethasseentoday()
|
motd.sethasseentoday()
|
||||||
LUI.FlowManager.RequestPopupMenu(nil, "motd")
|
LUI.FlowManager.RequestPopupMenu(nil, "motd")
|
||||||
|
@ -1 +1,2 @@
|
|||||||
require("unlockall")
|
require("unlockall")
|
||||||
|
require("pausequit")
|
||||||
|
18
data/cdata/ui_scripts/patches/pausequit.lua
Normal file
18
data/cdata/ui_scripts/patches/pausequit.lua
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
if (Engine.InFrontend()) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.onmenuopen("sp_pause_menu", function(element)
|
||||||
|
local menu = element:getFirstChild()
|
||||||
|
|
||||||
|
local button = menu:AddButton("@LUA_MENU_ACHIEVEMENTS", function()
|
||||||
|
LUI.FlowManager.RequestAddMenu(nil, "achievements_menu")
|
||||||
|
end)
|
||||||
|
|
||||||
|
menu.list:removeElement(button)
|
||||||
|
menu.list:insertElement(button, 4)
|
||||||
|
|
||||||
|
menu:AddButton("@MENU_QUIT_TO_DESKTOP", function()
|
||||||
|
LUI.FlowManager.RequestAddMenu(nil, "quit_popmenu")
|
||||||
|
end)
|
||||||
|
end)
|
@ -1,210 +1,3 @@
|
|||||||
|
require("settings")
|
||||||
require("language")
|
require("language")
|
||||||
|
require("audio")
|
||||||
function createdivider(menu, text)
|
|
||||||
local element = LUI.UIElement.new({
|
|
||||||
leftAnchor = true,
|
|
||||||
rightAnchor = true,
|
|
||||||
left = 0,
|
|
||||||
right = 0,
|
|
||||||
topAnchor = true,
|
|
||||||
bottomAnchor = false,
|
|
||||||
top = 0,
|
|
||||||
bottom = 33.33
|
|
||||||
})
|
|
||||||
|
|
||||||
element.scrollingToNext = true
|
|
||||||
element:addElement(LUI.MenuBuilder.BuildRegisteredType("h1_option_menu_titlebar", {
|
|
||||||
title_bar_text = Engine.ToUpperCase(Engine.Localize(text))
|
|
||||||
}))
|
|
||||||
|
|
||||||
menu.list:addElement(element)
|
|
||||||
end
|
|
||||||
|
|
||||||
LUI.addmenubutton("pc_controls", {
|
|
||||||
index = 4,
|
|
||||||
text = "@MENU_GENERAL",
|
|
||||||
description = Engine.Localize("@MENU_GENERAL_DESC"),
|
|
||||||
callback = function()
|
|
||||||
LUI.FlowManager.RequestAddMenu(nil, "settings_menu")
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
LUI.MenuBuilder.m_types_build["settings_menu"] = function(a1)
|
|
||||||
local menu = LUI.MenuTemplate.new(a1, {
|
|
||||||
menu_title = "@MENU_GENERAL",
|
|
||||||
menu_list_divider_top_offset = -(LUI.H1MenuTab.tabChangeHoldingElementHeight + H1MenuDims.spacing),
|
|
||||||
menu_width = GenericMenuDims.OptionMenuWidth
|
|
||||||
})
|
|
||||||
|
|
||||||
createdivider(menu, "@LUA_MENU_UPDATES")
|
|
||||||
|
|
||||||
LUI.Options.CreateOptionButton(
|
|
||||||
menu,
|
|
||||||
"cg_auto_update",
|
|
||||||
"@LUA_MENU_AUTO_UPDATE",
|
|
||||||
"@LUA_MENU_AUTO_UPDATE_DESC",
|
|
||||||
{
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_ENABLED",
|
|
||||||
value = true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_DISABLED",
|
|
||||||
value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
menu:AddButton("@LUA_MENU_CHECK_UPDATES", function()
|
|
||||||
LUI.tryupdating(false)
|
|
||||||
end, nil, true, nil, {
|
|
||||||
desc_text = Engine.Localize("@LUA_MENU_CHECK_UPDATES_DESC")
|
|
||||||
})
|
|
||||||
|
|
||||||
createdivider(menu, "@LUA_MENU_DRAWING")
|
|
||||||
|
|
||||||
LUI.Options.CreateOptionButton(
|
|
||||||
menu,
|
|
||||||
"cg_drawFPS",
|
|
||||||
"@LUA_MENU_DRAW_FPS",
|
|
||||||
"@LUA_MENU_DRAW_FPS_DESC",
|
|
||||||
{
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_DISABLED",
|
|
||||||
value = 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_FPS_ONLY",
|
|
||||||
value = 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_FPS_AND_VIEWPOS",
|
|
||||||
value = 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
LUI.Options.CreateOptionButton(
|
|
||||||
menu,
|
|
||||||
"cg_drawSpeed",
|
|
||||||
"@LUA_MENU_DRAW_SPEED",
|
|
||||||
"@LUA_MENU_DRAW_SPEED_DESC",
|
|
||||||
{
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_ENABLED",
|
|
||||||
value = true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_DISABLED",
|
|
||||||
value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
LUI.Options.CreateOptionButton(
|
|
||||||
menu,
|
|
||||||
"cg_speedGraph",
|
|
||||||
"@LUA_MENU_DRAW_SPEEDGRAPH",
|
|
||||||
"@LUA_MENU_DRAW_SPEEDGRAPH_DESC",
|
|
||||||
{
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_ENABLED",
|
|
||||||
value = true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_DISABLED",
|
|
||||||
value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
createdivider(menu, "@LUA_MENU_RENDERING")
|
|
||||||
|
|
||||||
LUI.Options.CreateOptionButton(
|
|
||||||
menu,
|
|
||||||
"r_fullbright",
|
|
||||||
"@LUA_MENU_R_FULLBRIGHT",
|
|
||||||
"@LUA_MENU_R_FULLBRIGHT_DESC",
|
|
||||||
{
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_DISABLED",
|
|
||||||
value = 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_ENABLED",
|
|
||||||
value = 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_MODE2",
|
|
||||||
value = 2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_MODE3",
|
|
||||||
value = 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
createdivider(menu, "@LUA_MENU_AUDIO_OPTIONS")
|
|
||||||
|
|
||||||
LUI.Options.CreateOptionButton(
|
|
||||||
menu,
|
|
||||||
"snd_musicDisabledForCustomSoundtrack",
|
|
||||||
"@LUA_MENU_MUSIC",
|
|
||||||
"@LUA_MENU_MUSIC_DESC",
|
|
||||||
{
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_DISABLED",
|
|
||||||
value = true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_ENABLED",
|
|
||||||
value = false
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
createdivider(menu, "@MENU_GAME_BEGINNING")
|
|
||||||
|
|
||||||
LUI.Options.CreateOptionButton(
|
|
||||||
menu,
|
|
||||||
"intro",
|
|
||||||
"@LUA_MENU_INTRO",
|
|
||||||
"@LUA_MENU_INTRO_DESC",
|
|
||||||
{
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_DISABLED",
|
|
||||||
value = false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = "@LUA_MENU_ENABLED",
|
|
||||||
value = true
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
LUI.Options.InitScrollingList(menu.list, nil)
|
|
||||||
LUI.Options.AddOptionTextInfo(menu)
|
|
||||||
|
|
||||||
menu:AddBackButton()
|
|
||||||
|
|
||||||
return menu
|
|
||||||
end
|
|
||||||
|
|
||||||
if not Engine.InFrontend() then
|
|
||||||
LUI.MenuTemplate.AddVignette = function(f36_arg0)
|
|
||||||
if not LUI.FlowManager.IsMenuTopmost(Engine.GetLuiRoot(), "advanced_video") then
|
|
||||||
local f36_local0 = CoD.CreateState(0, 0, 0, 0, CoD.AnchorTypes.All)
|
|
||||||
f36_local0.material = RegisterMaterial("h1_ui_bg_vignette")
|
|
||||||
local self = LUI.UIImage.new(f36_local0)
|
|
||||||
self:setupFullWindowElement()
|
|
||||||
f36_arg0:addElement(self)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
LUI.MenuTemplate.InitInGameBkg = function(f38_arg0, f38_arg1, f38_arg2, f38_arg3)
|
|
||||||
LUI.MenuTemplate.AddDarken(f38_arg0, f38_arg1, f38_arg3, 0.55)
|
|
||||||
if not Engine.IsMultiplayer() and not LUI.FlowManager.IsMenuTopmost(Engine.GetLuiRoot(), "advanced_video") then
|
|
||||||
LUI.MenuTemplate.AddWorldBlur(f38_arg0, f38_arg1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
207
data/cdata/ui_scripts/settings/audio.lua
Normal file
207
data/cdata/ui_scripts/settings/audio.lua
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
local function GetVolume()
|
||||||
|
return (Engine.GetProfileData("snd_volume") - SliderBounds.Volume.Min) / (SliderBounds.Volume.Max - SliderBounds.Volume.Min)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function VolumeLess(a1)
|
||||||
|
LUI.Options.ProfileDataMenuOption(a1, SliderBounds.Volume.Min, SliderBounds.Volume.Max, -SliderBounds.Volume.Step, "snd_volume")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function VolumeMore(a1)
|
||||||
|
LUI.Options.ProfileDataMenuOption(a1, SliderBounds.Volume.Min, SliderBounds.Volume.Max, SliderBounds.Volume.Step, "snd_volume")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function dvarmenuoption(name, min, max, step)
|
||||||
|
Engine.SetDvarFloat(name, math.min(max, math.max(min, Engine.GetDvarFloat(name) + step)))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getvolumefunc(name)
|
||||||
|
return function()
|
||||||
|
return (Engine.GetDvarFloat(name) - SliderBounds.Volume.Min) / (SliderBounds.Volume.Max - SliderBounds.Volume.Min)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getvolumelessfunc(name)
|
||||||
|
return function()
|
||||||
|
dvarmenuoption(name, SliderBounds.Volume.Min, SliderBounds.Volume.Max, -SliderBounds.Volume.Step)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getvolumemorefunc(name)
|
||||||
|
return function()
|
||||||
|
dvarmenuoption(name, SliderBounds.Volume.Min, SliderBounds.Volume.Max, SliderBounds.Volume.Step)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.PCAudio.new = function (a1)
|
||||||
|
local menu = LUI.MenuTemplate.new(a1, {
|
||||||
|
menu_title = Engine.ToUpperCase(Engine.Localize("@LUA_MENU_AUDIO_OPTIONS")),
|
||||||
|
menu_top_indent = Engine.IsMultiplayer() and 0 or LUI.MenuTemplate.spMenuOffset,
|
||||||
|
menu_width = GenericMenuDims.OptionMenuWidth
|
||||||
|
})
|
||||||
|
|
||||||
|
LUI.Options.AddButtonOptionVariant(
|
||||||
|
menu,
|
||||||
|
GenericButtonSettings.Variants.Slider,
|
||||||
|
"@MENU_MASTER_VOLUME",
|
||||||
|
"@MENU_MASTER_VOLUME_DESC",
|
||||||
|
GetVolume,
|
||||||
|
VolumeLess,
|
||||||
|
VolumeMore
|
||||||
|
)
|
||||||
|
|
||||||
|
LUI.Options.AddButtonOptionVariant(
|
||||||
|
menu,
|
||||||
|
GenericButtonSettings.Variants.Slider,
|
||||||
|
"@MENU_MUSIC_VOLUME",
|
||||||
|
"@MENU_MUSIC_VOLUME_DESC",
|
||||||
|
getvolumefunc("snd_musicVolume"),
|
||||||
|
getvolumelessfunc("snd_musicVolume"),
|
||||||
|
getvolumemorefunc("snd_musicVolume")
|
||||||
|
)
|
||||||
|
|
||||||
|
local speakeroptions = {
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_AUTODETECT_SPEAKERS",
|
||||||
|
value = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local speakerconfig = Engine.GetDvarInt("snd_detectedSpeakerConfig")
|
||||||
|
if speakerconfig > 1 then
|
||||||
|
speakeroptions[#speakeroptions + 1] = {
|
||||||
|
text = "@LUA_MENU_STEREO",
|
||||||
|
value = 2
|
||||||
|
}
|
||||||
|
speakeroptions[#speakeroptions + 1] = {
|
||||||
|
text = "@LUA_MENU_HEADPHONE",
|
||||||
|
value = 50
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
if speakerconfig > 2 then
|
||||||
|
speakeroptions[#speakeroptions + 1] = {
|
||||||
|
text = "@LUA_MENU_FOUR_SPEAKERS",
|
||||||
|
value = 4
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
if speakerconfig > 4 then
|
||||||
|
speakeroptions[#speakeroptions + 1] = {
|
||||||
|
text = "@LUA_MENU_FIVE_ONE_SPEAKERS",
|
||||||
|
value = 6
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
if speakerconfig > 6 then
|
||||||
|
speakeroptions[#speakeroptions + 1] = {
|
||||||
|
text = "@LUA_MENU_SEVEN_ONE_SPEAKERS",
|
||||||
|
value = 8
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.Options.CreateOptionButton(
|
||||||
|
menu,
|
||||||
|
"snd_speakerConfig",
|
||||||
|
"@LUA_MENU_SPEAKER_CONFIG",
|
||||||
|
"@LUA_MENU_SPEAKER_CONFIG_DESC",
|
||||||
|
speakeroptions
|
||||||
|
)
|
||||||
|
|
||||||
|
if Engine.IsMultiplayer() then
|
||||||
|
LUI.Options.AddButtonOptionVariant(
|
||||||
|
menu,
|
||||||
|
GenericButtonSettings.Variants.Select,
|
||||||
|
"@LUA_MENU_MUSIC",
|
||||||
|
"@LUA_MENU_MUSIC_DESC",
|
||||||
|
LUI.Options.GetDvarEnableTextFunc("snd_musicDisabled", true),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_musicDisabled"),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_musicDisabled")
|
||||||
|
)
|
||||||
|
|
||||||
|
LUI.Options.AddButtonOptionVariant(
|
||||||
|
menu,
|
||||||
|
GenericButtonSettings.Variants.Select,
|
||||||
|
"@LUA_MENU_ANNOUNCER",
|
||||||
|
"@LUA_MENU_ANNOUNCER_DESC",
|
||||||
|
LUI.Options.GetDvarEnableTextFunc("snd_announcerDisabled", true),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_announcerDisabled"),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_announcerDisabled")
|
||||||
|
)
|
||||||
|
|
||||||
|
LUI.Options.AddButtonOptionVariant(
|
||||||
|
menu,
|
||||||
|
GenericButtonSettings.Variants.Select,
|
||||||
|
"@LUA_MENU_BATTLECHATTER",
|
||||||
|
"@LUA_MENU_BATTLECHATTER_DESC",
|
||||||
|
LUI.Options.GetDvarEnableTextFunc("snd_battleChatterDisabled", true),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_battleChatterDisabled"),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_battleChatterDisabled")
|
||||||
|
)
|
||||||
|
|
||||||
|
LUI.Options.AddButtonOptionVariant(
|
||||||
|
menu,
|
||||||
|
GenericButtonSettings.Variants.Select,
|
||||||
|
"@LUA_MENU_PUSH_TO_TALK",
|
||||||
|
"@LUA_MENU_PUSH_TO_TALK_DESC",
|
||||||
|
LUI.Options.GetDvarEnableTextFunc("cl_pushToTalk", false),
|
||||||
|
LUI.Options.ToggleDvarFunc("cl_pushToTalk"),
|
||||||
|
LUI.Options.ToggleDvarFunc("cl_pushToTalk")
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
if not Engine.IsMultiplayer() and Engine.ShouldShowSubtitlesOption() then
|
||||||
|
LUI.Options.CreateControlProfileDataButton(
|
||||||
|
menu,
|
||||||
|
"subtitles",
|
||||||
|
"profile_toggleSubtitles",
|
||||||
|
nil,
|
||||||
|
"LUA_MENU_SUBTITLES",
|
||||||
|
"PLATFORM_UI_OPTIONS_SUBTITLES_DESC",
|
||||||
|
{
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_DISABLED",
|
||||||
|
value = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_ENABLED",
|
||||||
|
value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.Options.AddButtonOptionVariant(
|
||||||
|
menu,
|
||||||
|
GenericButtonSettings.Variants.Select,
|
||||||
|
"@LUA_MENU_HITSOUND",
|
||||||
|
"@LUA_MENU_HITSOUND_DESC",
|
||||||
|
LUI.Options.GetDvarEnableTextFunc("snd_hitsoundDisabled", true),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_hitsoundDisabled"),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_hitsoundDisabled")
|
||||||
|
)
|
||||||
|
|
||||||
|
if Engine.IsPC() and Engine.GetDvarBool("snd_wasapiSampleRateConverterNeeded") then
|
||||||
|
LUI.Options.AddButtonOptionVariant(
|
||||||
|
menu,
|
||||||
|
GenericButtonSettings.Variants.Select,
|
||||||
|
"@LUA_MENU_LOWQUALITYAUDIO",
|
||||||
|
"@LUA_MENU_LOWQUALITYAUDIO_DESC",
|
||||||
|
LUI.Options.GetDvarEnableTextFunc("snd_lowQualityAudio", false),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_lowQualityAudio"),
|
||||||
|
LUI.Options.ToggleDvarFunc("snd_lowQualityAudio")
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.Options.InitScrollingList(menu.list, nil)
|
||||||
|
LUI.Options.AddOptionTextInfo(menu)
|
||||||
|
|
||||||
|
menu:AddBackButton(function(a1, a2)
|
||||||
|
Engine.ExecNow("profile_menuDvarsFinish", a2.controller)
|
||||||
|
Engine.Exec("updategamerprofile")
|
||||||
|
LUI.FlowManager.RequestLeaveMenu(a1)
|
||||||
|
end)
|
||||||
|
|
||||||
|
return menu
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.MenuBuilder.m_types_build["pc_audio"] = LUI.PCAudio.new
|
210
data/cdata/ui_scripts/settings/settings.lua
Normal file
210
data/cdata/ui_scripts/settings/settings.lua
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
function createdivider(menu, text)
|
||||||
|
local element = LUI.UIElement.new({
|
||||||
|
leftAnchor = true,
|
||||||
|
rightAnchor = true,
|
||||||
|
left = 0,
|
||||||
|
right = 0,
|
||||||
|
topAnchor = true,
|
||||||
|
bottomAnchor = false,
|
||||||
|
top = 0,
|
||||||
|
bottom = 33.33
|
||||||
|
})
|
||||||
|
|
||||||
|
element.scrollingToNext = true
|
||||||
|
element:addElement(LUI.MenuBuilder.BuildRegisteredType("h1_option_menu_titlebar", {
|
||||||
|
title_bar_text = Engine.ToUpperCase(Engine.Localize(text))
|
||||||
|
}))
|
||||||
|
|
||||||
|
menu.list:addElement(element)
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.addmenubutton("pc_controls", {
|
||||||
|
index = 4,
|
||||||
|
text = "@MENU_GENERAL",
|
||||||
|
description = Engine.Localize("@MENU_GENERAL_DESC"),
|
||||||
|
callback = function()
|
||||||
|
LUI.FlowManager.RequestAddMenu(nil, "settings_menu")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
LUI.MenuBuilder.m_types_build["settings_menu"] = function(a1)
|
||||||
|
local menu = LUI.MenuTemplate.new(a1, {
|
||||||
|
menu_title = "@MENU_GENERAL",
|
||||||
|
menu_list_divider_top_offset = -(LUI.H1MenuTab.tabChangeHoldingElementHeight + H1MenuDims.spacing),
|
||||||
|
menu_width = GenericMenuDims.OptionMenuWidth
|
||||||
|
})
|
||||||
|
|
||||||
|
createdivider(menu, "@LUA_MENU_UPDATES")
|
||||||
|
|
||||||
|
LUI.Options.CreateOptionButton(
|
||||||
|
menu,
|
||||||
|
"cg_auto_update",
|
||||||
|
"@LUA_MENU_AUTO_UPDATE",
|
||||||
|
"@LUA_MENU_AUTO_UPDATE_DESC",
|
||||||
|
{
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_ENABLED",
|
||||||
|
value = true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_DISABLED",
|
||||||
|
value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (Engine.InFrontend()) then
|
||||||
|
menu:AddButton("@LUA_MENU_CHECK_UPDATES", function()
|
||||||
|
LUI.tryupdating(false)
|
||||||
|
end, nil, true, nil, {
|
||||||
|
desc_text = Engine.Localize("@LUA_MENU_CHECK_UPDATES_DESC")
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
createdivider(menu, "@LUA_MENU_DRAWING")
|
||||||
|
|
||||||
|
LUI.Options.CreateOptionButton(
|
||||||
|
menu,
|
||||||
|
"cg_drawFPS",
|
||||||
|
"@LUA_MENU_DRAW_FPS",
|
||||||
|
"@LUA_MENU_DRAW_FPS_DESC",
|
||||||
|
{
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_DISABLED",
|
||||||
|
value = 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_FPS_ONLY",
|
||||||
|
value = 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_FPS_AND_VIEWPOS",
|
||||||
|
value = 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
LUI.Options.CreateOptionButton(
|
||||||
|
menu,
|
||||||
|
"cg_drawSpeed",
|
||||||
|
"@LUA_MENU_DRAW_SPEED",
|
||||||
|
"@LUA_MENU_DRAW_SPEED_DESC",
|
||||||
|
{
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_ENABLED",
|
||||||
|
value = true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_DISABLED",
|
||||||
|
value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
LUI.Options.CreateOptionButton(
|
||||||
|
menu,
|
||||||
|
"cg_speedGraph",
|
||||||
|
"@LUA_MENU_DRAW_SPEEDGRAPH",
|
||||||
|
"@LUA_MENU_DRAW_SPEEDGRAPH_DESC",
|
||||||
|
{
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_ENABLED",
|
||||||
|
value = true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_DISABLED",
|
||||||
|
value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
createdivider(menu, "@LUA_MENU_RENDERING")
|
||||||
|
|
||||||
|
LUI.Options.CreateOptionButton(
|
||||||
|
menu,
|
||||||
|
"r_fullbright",
|
||||||
|
"@LUA_MENU_R_FULLBRIGHT",
|
||||||
|
"@LUA_MENU_R_FULLBRIGHT_DESC",
|
||||||
|
{
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_DISABLED",
|
||||||
|
value = 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_ENABLED",
|
||||||
|
value = 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_MODE2",
|
||||||
|
value = 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_MODE3",
|
||||||
|
value = 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
createdivider(menu, "@LUA_MENU_AUDIO_OPTIONS")
|
||||||
|
|
||||||
|
LUI.Options.CreateOptionButton(
|
||||||
|
menu,
|
||||||
|
"snd_musicDisabledForCustomSoundtrack",
|
||||||
|
"@LUA_MENU_MUSIC",
|
||||||
|
"@LUA_MENU_MUSIC_DESC",
|
||||||
|
{
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_DISABLED",
|
||||||
|
value = true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_ENABLED",
|
||||||
|
value = false
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
createdivider(menu, "@MENU_GAME_BEGINNING")
|
||||||
|
|
||||||
|
LUI.Options.CreateOptionButton(
|
||||||
|
menu,
|
||||||
|
"intro",
|
||||||
|
"@LUA_MENU_INTRO",
|
||||||
|
"@LUA_MENU_INTRO_DESC",
|
||||||
|
{
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_DISABLED",
|
||||||
|
value = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text = "@LUA_MENU_ENABLED",
|
||||||
|
value = true
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
LUI.Options.InitScrollingList(menu.list, nil)
|
||||||
|
LUI.Options.AddOptionTextInfo(menu)
|
||||||
|
|
||||||
|
menu:AddBackButton()
|
||||||
|
|
||||||
|
return menu
|
||||||
|
end
|
||||||
|
|
||||||
|
if not Engine.InFrontend() then
|
||||||
|
LUI.MenuTemplate.AddVignette = function(f36_arg0)
|
||||||
|
if not LUI.FlowManager.IsMenuTopmost(Engine.GetLuiRoot(), "advanced_video") then
|
||||||
|
local f36_local0 = CoD.CreateState(0, 0, 0, 0, CoD.AnchorTypes.All)
|
||||||
|
f36_local0.material = RegisterMaterial("h1_ui_bg_vignette")
|
||||||
|
local self = LUI.UIImage.new(f36_local0)
|
||||||
|
self:setupFullWindowElement()
|
||||||
|
f36_arg0:addElement(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
LUI.MenuTemplate.InitInGameBkg = function(f38_arg0, f38_arg1, f38_arg2, f38_arg3)
|
||||||
|
LUI.MenuTemplate.AddDarken(f38_arg0, f38_arg1, f38_arg3, 0.55)
|
||||||
|
if not Engine.IsMultiplayer() and not LUI.FlowManager.IsMenuTopmost(Engine.GetLuiRoot(), "advanced_video") then
|
||||||
|
LUI.MenuTemplate.AddWorldBlur(f38_arg0, f38_arg1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -33,3 +33,4 @@ sna_h2_mod_common
|
|||||||
sna_h2_mod_patch_af_caves
|
sna_h2_mod_patch_af_caves
|
||||||
spa_h2_mod_common
|
spa_h2_mod_common
|
||||||
tch_h2_mod_common
|
tch_h2_mod_common
|
||||||
|
tur_h2_mod_common
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
|
techset,,2d
|
||||||
material,logo_h2mod
|
material,logo_h2mod
|
||||||
localize,english
|
localize,english
|
||||||
|
|
@ -1,3 +1,5 @@
|
|||||||
|
techset,,2d
|
||||||
|
|
||||||
material,h2_ui_featured_pip_focused
|
material,h2_ui_featured_pip_focused
|
||||||
material,h1_ui_featured_pip_unfocused
|
material,h1_ui_featured_pip_unfocused
|
||||||
material,h2_ui_btn_focused_stroke_square
|
material,h2_ui_btn_focused_stroke_square
|
||||||
@ -19,3 +21,131 @@ material,featured_panel_thumbnail_6
|
|||||||
material,featured_panel_thumbnail_7
|
material,featured_panel_thumbnail_7
|
||||||
material,featured_panel_thumbnail_8
|
material,featured_panel_thumbnail_8
|
||||||
material,motd_image
|
material,motd_image
|
||||||
|
|
||||||
|
material,depot_button_rarity_corner_common
|
||||||
|
material,depot_button_rarity_corner_epic
|
||||||
|
material,depot_button_rarity_corner_legendary
|
||||||
|
material,depot_button_rarity_corner_rare
|
||||||
|
material,depot_button_rarity_corner_reward
|
||||||
|
material,depot_button_rarity_glow_common
|
||||||
|
material,depot_button_rarity_glow_epic
|
||||||
|
material,depot_button_rarity_glow_legendary
|
||||||
|
material,depot_button_rarity_glow_rare
|
||||||
|
material,depot_button_rarity_glow_reward
|
||||||
|
material,depot_button_rarity_strip_common
|
||||||
|
material,depot_button_rarity_strip_epic
|
||||||
|
material,depot_button_rarity_strip_legendary
|
||||||
|
material,depot_button_rarity_strip_rare
|
||||||
|
material,depot_button_rarity_strip_reward
|
||||||
|
|
||||||
|
material,trophy_border
|
||||||
|
material,trophy_0
|
||||||
|
material,trophy_1
|
||||||
|
material,trophy_2
|
||||||
|
material,trophy_3
|
||||||
|
material,trophy_4
|
||||||
|
material,trophy_5
|
||||||
|
material,trophy_6
|
||||||
|
material,trophy_7
|
||||||
|
material,trophy_8
|
||||||
|
material,trophy_9
|
||||||
|
material,trophy_10
|
||||||
|
material,trophy_11
|
||||||
|
material,trophy_12
|
||||||
|
material,trophy_13
|
||||||
|
material,trophy_14
|
||||||
|
material,trophy_15
|
||||||
|
material,trophy_16
|
||||||
|
material,trophy_17
|
||||||
|
material,trophy_18
|
||||||
|
material,trophy_19
|
||||||
|
material,trophy_20
|
||||||
|
material,trophy_21
|
||||||
|
material,trophy_22
|
||||||
|
material,trophy_23
|
||||||
|
material,trophy_24
|
||||||
|
material,trophy_25
|
||||||
|
material,trophy_26
|
||||||
|
material,trophy_27
|
||||||
|
material,trophy_28
|
||||||
|
material,trophy_29
|
||||||
|
material,trophy_30
|
||||||
|
material,trophy_31
|
||||||
|
material,trophy_32
|
||||||
|
material,trophy_33
|
||||||
|
material,trophy_34
|
||||||
|
material,trophy_35
|
||||||
|
material,trophy_36
|
||||||
|
material,trophy_37
|
||||||
|
material,trophy_38
|
||||||
|
material,trophy_39
|
||||||
|
material,trophy_40
|
||||||
|
material,trophy_41
|
||||||
|
material,trophy_42
|
||||||
|
material,trophy_43
|
||||||
|
material,trophy_44
|
||||||
|
material,trophy_45
|
||||||
|
material,trophy_46
|
||||||
|
material,trophy_47
|
||||||
|
material,trophy_48
|
||||||
|
material,trophy_49
|
||||||
|
material,trophy_50
|
||||||
|
material,trophy_51
|
||||||
|
material,trophy_52
|
||||||
|
|
||||||
|
material,achievement_bg_0
|
||||||
|
material,achievement_bg_1
|
||||||
|
material,achievement_bg_2
|
||||||
|
material,achievement_bg_3
|
||||||
|
material,achievement_bg_4
|
||||||
|
material,achievement_bg_5
|
||||||
|
material,achievement_bg_6
|
||||||
|
material,achievement_bg_7
|
||||||
|
material,achievement_bg_8
|
||||||
|
material,achievement_bg_9
|
||||||
|
material,achievement_bg_10
|
||||||
|
material,achievement_bg_11
|
||||||
|
material,achievement_bg_12
|
||||||
|
material,achievement_bg_13
|
||||||
|
material,achievement_bg_14
|
||||||
|
material,achievement_bg_15
|
||||||
|
material,achievement_bg_16
|
||||||
|
material,achievement_bg_17
|
||||||
|
material,achievement_bg_18
|
||||||
|
material,achievement_bg_19
|
||||||
|
material,achievement_bg_20
|
||||||
|
material,achievement_bg_21
|
||||||
|
material,achievement_bg_22
|
||||||
|
material,achievement_bg_23
|
||||||
|
material,achievement_bg_24
|
||||||
|
material,achievement_bg_25
|
||||||
|
material,achievement_bg_26
|
||||||
|
material,achievement_bg_27
|
||||||
|
material,achievement_bg_28
|
||||||
|
material,achievement_bg_29
|
||||||
|
material,achievement_bg_30
|
||||||
|
material,achievement_bg_31
|
||||||
|
material,achievement_bg_32
|
||||||
|
material,achievement_bg_33
|
||||||
|
material,achievement_bg_34
|
||||||
|
material,achievement_bg_35
|
||||||
|
material,achievement_bg_36
|
||||||
|
material,achievement_bg_37
|
||||||
|
material,achievement_bg_38
|
||||||
|
material,achievement_bg_39
|
||||||
|
material,achievement_bg_40
|
||||||
|
material,achievement_bg_41
|
||||||
|
material,achievement_bg_42
|
||||||
|
material,achievement_bg_43
|
||||||
|
material,achievement_bg_44
|
||||||
|
material,achievement_bg_45
|
||||||
|
material,achievement_bg_46
|
||||||
|
material,achievement_bg_47
|
||||||
|
material,achievement_bg_48
|
||||||
|
material,achievement_bg_49
|
||||||
|
material,achievement_bg_50
|
||||||
|
material,achievement_bg_51
|
||||||
|
material,achievement_bg_52
|
||||||
|
|
||||||
|
localize,english
|
||||||
|
sound,ui_achievement_unlocked
|
||||||
|
|
2
data/zone_source/tur_h2_mod_common.csv
Normal file
2
data/zone_source/tur_h2_mod_common.csv
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
localize,turkish
|
||||||
|
stringtable,video/subtitles.csv
|
|
@ -9,3 +9,4 @@ russian,h2_mod_font_bank,h2_mod_font_default,h2_mod_font_default_bold
|
|||||||
russian_partial,h2_mod_font_bank,h2_mod_font_default,h2_mod_font_default_bold
|
russian_partial,h2_mod_font_bank,h2_mod_font_default,h2_mod_font_default_bold
|
||||||
simplified_chinese,h2_mod_font_default,h2_mod_font_default_bold
|
simplified_chinese,h2_mod_font_default,h2_mod_font_default_bold
|
||||||
traditional_chinese,h2_mod_font_default,h2_mod_font_default_bold
|
traditional_chinese,h2_mod_font_default,h2_mod_font_default_bold
|
||||||
|
turkish,h2_mod_font_bank,h2_mod_font_default,h2_mod_font_default_bold
|
||||||
|
|
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_0.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_0.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_1.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_1.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_10.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_10.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_11.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_11.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_12.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_12.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_13.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_13.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_14.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_14.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_15.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_15.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_16.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_16.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_17.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_17.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_18.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_18.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_19.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_19.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_2.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_2.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_20.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_20.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_21.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_21.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_22.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_22.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_23.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_23.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_24.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_24.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_25.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_25.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_26.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_26.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_27.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_27.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_28.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_28.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_29.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_29.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_3.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_3.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_30.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_30.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_31.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_31.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_32.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_32.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_33.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_33.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_34.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_34.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_35.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_35.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_36.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_36.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_37.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_37.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_38.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_38.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_39.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_39.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_4.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_4.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_40.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_40.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_41.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_41.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_42.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_42.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_43.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_43.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_44.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_44.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_45.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_45.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_46.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_46.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_47.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_47.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_48.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_48.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_49.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_49.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_5.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_5.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_50.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_50.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_51.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_51.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_52.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_52.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_6.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_6.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_7.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_7.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_8.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_8.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_9.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/achievement_bg_9.dds
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/trophy_0.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/trophy_0.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/trophy_1.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/trophy_1.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/trophy_10.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/trophy_10.dds
Normal file
Binary file not shown.
BIN
data/zonetool/h2_mod_ui/images/trophy_11.dds
Normal file
BIN
data/zonetool/h2_mod_ui/images/trophy_11.dds
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user