diff --git a/data/cdata/scripts/ending/credits.gsc b/data/cdata/scripts/ending/credits.gsc index deaeff7a..81509eea 100644 --- a/data/cdata/scripts/ending/credits.gsc +++ b/data/cdata/scripts/ending/credits.gsc @@ -1,6 +1,11 @@ +#include maps\_endmission; + main() { replacefunc(maps\_credit_h2_autogen::_id_B775, ::initiwcredits); + + // fix credits victory screen + replacefunc(maps\_endmission::_nextmission, ::nextmission); } initcredits_h2mod() @@ -27,3 +32,150 @@ initiwcredits() maps\_credit_h2_autogen::initiwcredits_nerve(); maps\_credit_h2_autogen::initiwcredits_irongalaxy(); } + +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)) + maps\_utility::giveachievement_wrapper(level.missionsettings getachievement(var_1)); + + if (level.missionsettings haslevelveteranaward(var_1) && getlevelcompleted(var_1) == 4 && level.missionsettings check_other_haslevelveteranachievement(var_1)) + maps\_utility::giveachievement_wrapper(level.missionsettings getlevelveteranaward(var_1)); + + if (level.missionsettings hasmissionhardenedaward() && level.missionsettings getlowestskill() > 2) + maps\_utility::giveachievement_wrapper(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)); + } +} diff --git a/data/cdata/ui_scripts/achievements/__init__.lua b/data/cdata/ui_scripts/achievements/__init__.lua new file mode 100644 index 00000000..15df206b --- /dev/null +++ b/data/cdata/ui_scripts/achievements/__init__.lua @@ -0,0 +1,196 @@ +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, + color = { + r = 0.1, + g = 0.1, + b = 0.1, + }, + alpha = 0.55 + }) + + 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(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) \ No newline at end of file diff --git a/data/cdata/ui_scripts/branding/__init__.lua b/data/cdata/ui_scripts/branding/__init__.lua index 169563ff..1cd95fe0 100644 --- a/data/cdata/ui_scripts/branding/__init__.lua +++ b/data/cdata/ui_scripts/branding/__init__.lua @@ -1 +1,2 @@ require("credits") +require("victoryscreen") diff --git a/data/cdata/ui_scripts/branding/victoryscreen.lua b/data/cdata/ui_scripts/branding/victoryscreen.lua new file mode 100644 index 00000000..607b970f --- /dev/null +++ b/data/cdata/ui_scripts/branding/victoryscreen.lua @@ -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 diff --git a/data/zone_source/h2_mod_ui.csv b/data/zone_source/h2_mod_ui.csv index 47bd8fa7..09411678 100644 --- a/data/zone_source/h2_mod_ui.csv +++ b/data/zone_source/h2_mod_ui.csv @@ -19,3 +19,57 @@ material,featured_panel_thumbnail_6 material,featured_panel_thumbnail_7 material,featured_panel_thumbnail_8 material,motd_image + +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 +localize,english +sound,ui_achievement_unlocked diff --git a/data/zonetool/h2_mod_ui/images/trophy_0.dds b/data/zonetool/h2_mod_ui/images/trophy_0.dds new file mode 100644 index 00000000..f2c794da Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_0.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_1.dds b/data/zonetool/h2_mod_ui/images/trophy_1.dds new file mode 100644 index 00000000..f1337327 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_1.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_10.dds b/data/zonetool/h2_mod_ui/images/trophy_10.dds new file mode 100644 index 00000000..937c3e68 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_10.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_11.dds b/data/zonetool/h2_mod_ui/images/trophy_11.dds new file mode 100644 index 00000000..ac758314 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_11.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_12.dds b/data/zonetool/h2_mod_ui/images/trophy_12.dds new file mode 100644 index 00000000..522cc3cf Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_12.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_13.dds b/data/zonetool/h2_mod_ui/images/trophy_13.dds new file mode 100644 index 00000000..dcfe720a Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_13.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_14.dds b/data/zonetool/h2_mod_ui/images/trophy_14.dds new file mode 100644 index 00000000..71297720 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_14.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_15.dds b/data/zonetool/h2_mod_ui/images/trophy_15.dds new file mode 100644 index 00000000..eb89330c Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_15.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_16.dds b/data/zonetool/h2_mod_ui/images/trophy_16.dds new file mode 100644 index 00000000..ee4d782e Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_16.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_17.dds b/data/zonetool/h2_mod_ui/images/trophy_17.dds new file mode 100644 index 00000000..4235463c Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_17.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_18.dds b/data/zonetool/h2_mod_ui/images/trophy_18.dds new file mode 100644 index 00000000..e07130d9 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_18.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_19.dds b/data/zonetool/h2_mod_ui/images/trophy_19.dds new file mode 100644 index 00000000..205c012c Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_19.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_2.dds b/data/zonetool/h2_mod_ui/images/trophy_2.dds new file mode 100644 index 00000000..b1d53864 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_2.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_20.dds b/data/zonetool/h2_mod_ui/images/trophy_20.dds new file mode 100644 index 00000000..4197056f Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_20.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_21.dds b/data/zonetool/h2_mod_ui/images/trophy_21.dds new file mode 100644 index 00000000..478a878e Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_21.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_22.dds b/data/zonetool/h2_mod_ui/images/trophy_22.dds new file mode 100644 index 00000000..979292a3 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_22.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_23.dds b/data/zonetool/h2_mod_ui/images/trophy_23.dds new file mode 100644 index 00000000..059ccd72 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_23.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_24.dds b/data/zonetool/h2_mod_ui/images/trophy_24.dds new file mode 100644 index 00000000..a88b1ee3 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_24.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_25.dds b/data/zonetool/h2_mod_ui/images/trophy_25.dds new file mode 100644 index 00000000..9fda4441 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_25.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_26.dds b/data/zonetool/h2_mod_ui/images/trophy_26.dds new file mode 100644 index 00000000..bf113a4f Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_26.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_27.dds b/data/zonetool/h2_mod_ui/images/trophy_27.dds new file mode 100644 index 00000000..1a1bf0b0 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_27.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_28.dds b/data/zonetool/h2_mod_ui/images/trophy_28.dds new file mode 100644 index 00000000..2d576f86 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_28.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_29.dds b/data/zonetool/h2_mod_ui/images/trophy_29.dds new file mode 100644 index 00000000..256e2ac6 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_29.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_3.dds b/data/zonetool/h2_mod_ui/images/trophy_3.dds new file mode 100644 index 00000000..e9674a01 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_3.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_30.dds b/data/zonetool/h2_mod_ui/images/trophy_30.dds new file mode 100644 index 00000000..9f801ac2 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_30.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_31.dds b/data/zonetool/h2_mod_ui/images/trophy_31.dds new file mode 100644 index 00000000..907b14f9 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_31.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_32.dds b/data/zonetool/h2_mod_ui/images/trophy_32.dds new file mode 100644 index 00000000..ec9e3db7 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_32.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_33.dds b/data/zonetool/h2_mod_ui/images/trophy_33.dds new file mode 100644 index 00000000..f3c50064 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_33.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_34.dds b/data/zonetool/h2_mod_ui/images/trophy_34.dds new file mode 100644 index 00000000..23b989a2 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_34.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_35.dds b/data/zonetool/h2_mod_ui/images/trophy_35.dds new file mode 100644 index 00000000..55b66065 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_35.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_36.dds b/data/zonetool/h2_mod_ui/images/trophy_36.dds new file mode 100644 index 00000000..9bd03f2e Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_36.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_37.dds b/data/zonetool/h2_mod_ui/images/trophy_37.dds new file mode 100644 index 00000000..b0283485 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_37.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_38.dds b/data/zonetool/h2_mod_ui/images/trophy_38.dds new file mode 100644 index 00000000..78f12244 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_38.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_39.dds b/data/zonetool/h2_mod_ui/images/trophy_39.dds new file mode 100644 index 00000000..61cd8e27 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_39.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_4.dds b/data/zonetool/h2_mod_ui/images/trophy_4.dds new file mode 100644 index 00000000..e90bb449 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_4.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_40.dds b/data/zonetool/h2_mod_ui/images/trophy_40.dds new file mode 100644 index 00000000..b9ec29ab Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_40.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_41.dds b/data/zonetool/h2_mod_ui/images/trophy_41.dds new file mode 100644 index 00000000..0d32c621 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_41.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_42.dds b/data/zonetool/h2_mod_ui/images/trophy_42.dds new file mode 100644 index 00000000..40055e81 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_42.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_43.dds b/data/zonetool/h2_mod_ui/images/trophy_43.dds new file mode 100644 index 00000000..a25d9bd5 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_43.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_44.dds b/data/zonetool/h2_mod_ui/images/trophy_44.dds new file mode 100644 index 00000000..b84aa579 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_44.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_45.dds b/data/zonetool/h2_mod_ui/images/trophy_45.dds new file mode 100644 index 00000000..1d7acfb1 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_45.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_46.dds b/data/zonetool/h2_mod_ui/images/trophy_46.dds new file mode 100644 index 00000000..605164e6 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_46.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_47.dds b/data/zonetool/h2_mod_ui/images/trophy_47.dds new file mode 100644 index 00000000..2ff93b51 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_47.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_48.dds b/data/zonetool/h2_mod_ui/images/trophy_48.dds new file mode 100644 index 00000000..8d4cf1cf Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_48.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_49.dds b/data/zonetool/h2_mod_ui/images/trophy_49.dds new file mode 100644 index 00000000..498a9336 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_49.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_5.dds b/data/zonetool/h2_mod_ui/images/trophy_5.dds new file mode 100644 index 00000000..39a96656 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_5.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_50.dds b/data/zonetool/h2_mod_ui/images/trophy_50.dds new file mode 100644 index 00000000..3913bd93 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_50.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_6.dds b/data/zonetool/h2_mod_ui/images/trophy_6.dds new file mode 100644 index 00000000..01714ee2 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_6.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_7.dds b/data/zonetool/h2_mod_ui/images/trophy_7.dds new file mode 100644 index 00000000..194435fc Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_7.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_8.dds b/data/zonetool/h2_mod_ui/images/trophy_8.dds new file mode 100644 index 00000000..8420b3cb Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_8.dds differ diff --git a/data/zonetool/h2_mod_ui/images/trophy_9.dds b/data/zonetool/h2_mod_ui/images/trophy_9.dds new file mode 100644 index 00000000..d8005d28 Binary files /dev/null and b/data/zonetool/h2_mod_ui/images/trophy_9.dds differ diff --git a/data/zonetool/h2_mod_ui/loaded_sound/ui/ui_achievement_unlocked.wav b/data/zonetool/h2_mod_ui/loaded_sound/ui/ui_achievement_unlocked.wav new file mode 100644 index 00000000..fd4e046c Binary files /dev/null and b/data/zonetool/h2_mod_ui/loaded_sound/ui/ui_achievement_unlocked.wav differ diff --git a/data/zonetool/h2_mod_ui/materials/trophy_0.json b/data/zonetool/h2_mod_ui/materials/trophy_0.json new file mode 100644 index 00000000..e52fe383 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_0.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_0", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_0", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_1.json b/data/zonetool/h2_mod_ui/materials/trophy_1.json new file mode 100644 index 00000000..a004f76f --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_1.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_1", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_1", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_10.json b/data/zonetool/h2_mod_ui/materials/trophy_10.json new file mode 100644 index 00000000..87809e77 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_10.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_10", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_10", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_11.json b/data/zonetool/h2_mod_ui/materials/trophy_11.json new file mode 100644 index 00000000..1d0de13a --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_11.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_11", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_11", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_12.json b/data/zonetool/h2_mod_ui/materials/trophy_12.json new file mode 100644 index 00000000..c910775a --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_12.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_12", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_12", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_13.json b/data/zonetool/h2_mod_ui/materials/trophy_13.json new file mode 100644 index 00000000..e762623a --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_13.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_13", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_13", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_14.json b/data/zonetool/h2_mod_ui/materials/trophy_14.json new file mode 100644 index 00000000..fff12ee2 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_14.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_14", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_14", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_15.json b/data/zonetool/h2_mod_ui/materials/trophy_15.json new file mode 100644 index 00000000..5c2a3ad0 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_15.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_15", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_15", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_16.json b/data/zonetool/h2_mod_ui/materials/trophy_16.json new file mode 100644 index 00000000..c178e307 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_16.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_16", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_16", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_17.json b/data/zonetool/h2_mod_ui/materials/trophy_17.json new file mode 100644 index 00000000..1d0e8e1c --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_17.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_17", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_17", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_18.json b/data/zonetool/h2_mod_ui/materials/trophy_18.json new file mode 100644 index 00000000..cd2c6c07 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_18.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_18", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_18", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_19.json b/data/zonetool/h2_mod_ui/materials/trophy_19.json new file mode 100644 index 00000000..b107bbce --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_19.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_19", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_19", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_2.json b/data/zonetool/h2_mod_ui/materials/trophy_2.json new file mode 100644 index 00000000..12af97d6 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_2.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_2", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_2", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_20.json b/data/zonetool/h2_mod_ui/materials/trophy_20.json new file mode 100644 index 00000000..a626c97e --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_20.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_20", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_20", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_21.json b/data/zonetool/h2_mod_ui/materials/trophy_21.json new file mode 100644 index 00000000..3e50bbd8 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_21.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_21", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_21", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_22.json b/data/zonetool/h2_mod_ui/materials/trophy_22.json new file mode 100644 index 00000000..94f51cd8 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_22.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_22", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_22", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_23.json b/data/zonetool/h2_mod_ui/materials/trophy_23.json new file mode 100644 index 00000000..acc5773c --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_23.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_23", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_23", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_24.json b/data/zonetool/h2_mod_ui/materials/trophy_24.json new file mode 100644 index 00000000..ad095654 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_24.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_24", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_24", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_25.json b/data/zonetool/h2_mod_ui/materials/trophy_25.json new file mode 100644 index 00000000..d64855d0 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_25.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_25", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_25", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_26.json b/data/zonetool/h2_mod_ui/materials/trophy_26.json new file mode 100644 index 00000000..94c964a1 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_26.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_26", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_26", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_27.json b/data/zonetool/h2_mod_ui/materials/trophy_27.json new file mode 100644 index 00000000..1857b27a --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_27.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_27", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_27", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_28.json b/data/zonetool/h2_mod_ui/materials/trophy_28.json new file mode 100644 index 00000000..b9498411 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_28.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_28", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_28", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_29.json b/data/zonetool/h2_mod_ui/materials/trophy_29.json new file mode 100644 index 00000000..1221cbfc --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_29.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_29", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_29", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_3.json b/data/zonetool/h2_mod_ui/materials/trophy_3.json new file mode 100644 index 00000000..f4a4d720 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_3.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_3", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_3", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_30.json b/data/zonetool/h2_mod_ui/materials/trophy_30.json new file mode 100644 index 00000000..1cf51342 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_30.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_30", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_30", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_31.json b/data/zonetool/h2_mod_ui/materials/trophy_31.json new file mode 100644 index 00000000..b89fbac5 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_31.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_31", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_31", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_32.json b/data/zonetool/h2_mod_ui/materials/trophy_32.json new file mode 100644 index 00000000..2173f814 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_32.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_32", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_32", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_33.json b/data/zonetool/h2_mod_ui/materials/trophy_33.json new file mode 100644 index 00000000..04e366c7 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_33.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_33", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_33", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_34.json b/data/zonetool/h2_mod_ui/materials/trophy_34.json new file mode 100644 index 00000000..30ee35d7 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_34.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_34", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_34", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_35.json b/data/zonetool/h2_mod_ui/materials/trophy_35.json new file mode 100644 index 00000000..5587502f --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_35.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_35", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_35", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_36.json b/data/zonetool/h2_mod_ui/materials/trophy_36.json new file mode 100644 index 00000000..7da175db --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_36.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_36", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_36", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_37.json b/data/zonetool/h2_mod_ui/materials/trophy_37.json new file mode 100644 index 00000000..fd50278b --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_37.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_37", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_37", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_38.json b/data/zonetool/h2_mod_ui/materials/trophy_38.json new file mode 100644 index 00000000..9726c743 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_38.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_38", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_38", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_39.json b/data/zonetool/h2_mod_ui/materials/trophy_39.json new file mode 100644 index 00000000..3354b8aa --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_39.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_39", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_39", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_4.json b/data/zonetool/h2_mod_ui/materials/trophy_4.json new file mode 100644 index 00000000..cdf3755a --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_4.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_4", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_4", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_40.json b/data/zonetool/h2_mod_ui/materials/trophy_40.json new file mode 100644 index 00000000..9fbdc7ef --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_40.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_40", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_40", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_41.json b/data/zonetool/h2_mod_ui/materials/trophy_41.json new file mode 100644 index 00000000..a696215d --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_41.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_41", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_41", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_42.json b/data/zonetool/h2_mod_ui/materials/trophy_42.json new file mode 100644 index 00000000..7fbfaf54 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_42.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_42", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_42", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_43.json b/data/zonetool/h2_mod_ui/materials/trophy_43.json new file mode 100644 index 00000000..d8917b33 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_43.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_43", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_43", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_44.json b/data/zonetool/h2_mod_ui/materials/trophy_44.json new file mode 100644 index 00000000..0b468cb8 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_44.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_44", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_44", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_45.json b/data/zonetool/h2_mod_ui/materials/trophy_45.json new file mode 100644 index 00000000..753bdd64 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_45.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_45", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_45", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_46.json b/data/zonetool/h2_mod_ui/materials/trophy_46.json new file mode 100644 index 00000000..752254a0 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_46.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_46", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_46", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_47.json b/data/zonetool/h2_mod_ui/materials/trophy_47.json new file mode 100644 index 00000000..48751180 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_47.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_47", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_47", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_48.json b/data/zonetool/h2_mod_ui/materials/trophy_48.json new file mode 100644 index 00000000..c56a2c98 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_48.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_48", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_48", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_49.json b/data/zonetool/h2_mod_ui/materials/trophy_49.json new file mode 100644 index 00000000..ff714807 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_49.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_49", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_49", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_5.json b/data/zonetool/h2_mod_ui/materials/trophy_5.json new file mode 100644 index 00000000..338edfdd --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_5.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_5", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_5", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_50.json b/data/zonetool/h2_mod_ui/materials/trophy_50.json new file mode 100644 index 00000000..89f2e803 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_50.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_50", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_50", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_6.json b/data/zonetool/h2_mod_ui/materials/trophy_6.json new file mode 100644 index 00000000..8f3765ff --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_6.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_6", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_6", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_7.json b/data/zonetool/h2_mod_ui/materials/trophy_7.json new file mode 100644 index 00000000..208500f6 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_7.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_7", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_7", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_8.json b/data/zonetool/h2_mod_ui/materials/trophy_8.json new file mode 100644 index 00000000..783f96f5 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_8.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_8", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_8", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/materials/trophy_9.json b/data/zonetool/h2_mod_ui/materials/trophy_9.json new file mode 100644 index 00000000..93bae362 --- /dev/null +++ b/data/zonetool/h2_mod_ui/materials/trophy_9.json @@ -0,0 +1,26 @@ +{ + "name": "trophy_9", + "techniqueSet->name": "2d", + "gameFlags": 0, + "sortKey": 60, + "renderFlags": 0, + "textureAtlasRowCount": 1, + "textureAtlasColumnCount": 1, + "textureAtlasFrameBlend": 0, + "textureAtlasAsArray": 0, + "surfaceTypeBits": 0, + "cameraRegion": 12, + "materialType": 0, + "assetFlags": 0, + "constantTable": null, + "textureTable": [ + { + "image": "trophy_9", + "semantic": 0, + "samplerState": 226, + "lastCharacter": 112, + "firstCharacter": 99, + "typeHash": 2695565377 + } + ] +} \ No newline at end of file diff --git a/data/zonetool/h2_mod_ui/sounds/ui_achievement_unlocked.json b/data/zonetool/h2_mod_ui/sounds/ui_achievement_unlocked.json new file mode 100644 index 00000000..9bd08cd9 --- /dev/null +++ b/data/zonetool/h2_mod_ui/sounds/ui_achievement_unlocked.json @@ -0,0 +1,192 @@ +{ + "aliasName": "ui_achievement_unlocked", + "count": 1, + "head": [ + { + "aliasName": "ui_achievement_unlocked", + "secondaryAliasName": null, + "chainAliasName": null, + "subtitle": null, + "mixerGroup": null, + "soundfile": { + "type": 1, + "exists": true, + "name": "ui/ui_achievement_unlocked" + }, + "flags": 1048730, + "priority": 20, + "dspBus": "interface", + "volMod": "hud", + "volMin": 1.0, + "volMax": 1.0, + "pitchMin": 1.0, + "pitchMax": 1.0, + "distMin": 120.0, + "distMax": 600.0, + "velocityMin": 0.0, + "probability": 1.0, + "sequence": 1, + "startDelay": 0, + "masterPriority": 70, + "masterPercentage": 0.0, + "slavePercentage": 1.0, + "playbackPercentage": 100, + "lfePercentage": 0.0, + "centerPercentage": 0.0, + "poly": 1, + "polyGlobal": 174, + "polyEntityType": 0, + "polyGlobalType": 0, + "envelopMin": 0.0, + "envelopMax": 0.0, + "envelopPercentage": 0.0, + "reverbWetMixOverride": 0.0, + "reverbMultiplier": 1.0, + "smartPanDistance2d": 0.0, + "smartPanDistance3d": 0.0, + "smartPanAttenuation3d": 1.0, + "stereo3dAngle": 0, + "stereo3dStart": 0.0, + "stereo3dEnd": 0.0, + "sndContext": null, + "sndCurve": "$default", + "lpfCurve": "$default", + "hpfCurve": "$defaultHpf", + "reverbSendCurve": "$default", + "speakerMap": { + "channelMaps": [ + { + "speakerCount": 2, + "speakers": [ + { + "levels0": 1.0, + "levels1": 0.0, + "numLevels": 1, + "speaker": 0 + }, + { + "levels0": 1.0, + "levels1": 0.0, + "numLevels": 1, + "speaker": 1 + } + ] + }, + { + "speakerCount": 6, + "speakers": [ + { + "levels0": 1.0, + "levels1": 0.0, + "numLevels": 1, + "speaker": 0 + }, + { + "levels0": 1.0, + "levels1": 0.0, + "numLevels": 1, + "speaker": 1 + }, + { + "levels0": 0.0, + "levels1": 0.0, + "numLevels": 1, + "speaker": 2 + }, + { + "levels0": 0.0, + "levels1": 0.0, + "numLevels": 1, + "speaker": 3 + }, + { + "levels0": 0.0, + "levels1": 0.0, + "numLevels": 1, + "speaker": 4 + }, + { + "levels0": 0.0, + "levels1": 0.0, + "numLevels": 1, + "speaker": 5 + } + ] + }, + { + "speakerCount": 2, + "speakers": [ + { + "levels0": 1.0, + "levels1": 0.0, + "numLevels": 2, + "speaker": 0 + }, + { + "levels0": 0.0, + "levels1": 1.0, + "numLevels": 2, + "speaker": 1 + } + ] + }, + { + "speakerCount": 6, + "speakers": [ + { + "levels0": 1.0, + "levels1": 0.0, + "numLevels": 2, + "speaker": 0 + }, + { + "levels0": 0.0, + "levels1": 1.0, + "numLevels": 2, + "speaker": 1 + }, + { + "levels0": 0.0, + "levels1": 0.0, + "numLevels": 2, + "speaker": 2 + }, + { + "levels0": 0.0, + "levels1": 0.0, + "numLevels": 2, + "speaker": 3 + }, + { + "levels0": 0.0, + "levels1": 0.0, + "numLevels": 2, + "speaker": 4 + }, + { + "levels0": 0.0, + "levels1": 0.0, + "numLevels": 2, + "speaker": 5 + } + ] + } + ], + "isDefault": false, + "name": "front_only" + }, + "allowDoppler": 0, + "dopplerPreset": null, + "unknown": { + "pad": [ + { + "bytes": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "subtype": null + } + ], + "u1": 4, + "u2": 0.5011872053146362 + } + } + ] +} \ No newline at end of file diff --git a/data/zonetool/localizedstrings/english.json b/data/zonetool/localizedstrings/english.json index 184e3e0a..da4bbe4a 100644 --- a/data/zonetool/localizedstrings/english.json +++ b/data/zonetool/localizedstrings/english.json @@ -119,5 +119,109 @@ "LUA_MENU_SP_LOCATION_MUSEUM": "LUA_MENU_SP_LOCATION_MUSEUM", "DEPOT_GO_TO_THE_DEPOT": "Open link", - "MENU_OPEN_MOTD": "Open Message of the Day" -} \ No newline at end of file + "MENU_OPEN_MOTD": "Open Message of the Day", + + "ACHIEVEMENT_EARNED": "Achievement Unlocked!", + "ACHIEVEMENT_NAME_0": "Is That All You Got?", + "ACHIEVEMENT_DETAIL_0": "Earn all available trophies for Call of Duty®: Modern Warfare® 2 Campaign Remastered.", + "ACHIEVEMENT_NAME_1": "Back in the Saddle", + "ACHIEVEMENT_DETAIL_1": "Help train the local militia.", + "ACHIEVEMENT_NAME_2": "Danger Close", + "ACHIEVEMENT_DETAIL_2": "Get hand picked for Shepherd's elite squad.", + "ACHIEVEMENT_NAME_3": "Cold Shoulder", + "ACHIEVEMENT_DETAIL_3": "Infiltrate the snowy mountain side base.", + "ACHIEVEMENT_NAME_4": "Tag 'em and bag 'em", + "ACHIEVEMENT_DETAIL_4": "Find Rojas in the Favelas.", + "ACHIEVEMENT_NAME_5": "Royale with Cheese", + "ACHIEVEMENT_DETAIL_5": "Defend Burger Town.", + "ACHIEVEMENT_NAME_6": "Soap on a Rope", + "ACHIEVEMENT_DETAIL_6": "Storm the gulag.", + "ACHIEVEMENT_NAME_7": "Desperate Times", + "ACHIEVEMENT_DETAIL_7": "Execute the plan to help the Americans.", + "ACHIEVEMENT_NAME_8": "Whiskey Hotel", + "ACHIEVEMENT_DETAIL_8": "Take back Whiskey Hotel.", + "ACHIEVEMENT_NAME_9": "The Pawn", + "ACHIEVEMENT_DETAIL_9": "Assault Makarov's safehouse.", + "ACHIEVEMENT_NAME_10": "Out of the Frying Pan...", + "ACHIEVEMENT_DETAIL_10": "Complete the mission in the airplane graveyard.", + "ACHIEVEMENT_NAME_11": "For the Record", + "ACHIEVEMENT_DETAIL_11": "Complete the single player campaign on any difficulty.", + "ACHIEVEMENT_NAME_12": "The Price of War", + "ACHIEVEMENT_DETAIL_12": "Complete the single player campaign on Hardened or Veteran difficulty.", + "ACHIEVEMENT_NAME_13": "First Day of School", + "ACHIEVEMENT_DETAIL_13": "Complete 'S.S.D.D.' and 'Team Player' on Veteran difficulty.", + "ACHIEVEMENT_NAME_14": "Black Diamond", + "ACHIEVEMENT_DETAIL_14": "Complete 'Cliffhanger' on Veteran difficulty.", + "ACHIEVEMENT_NAME_15": "Turistas", + "ACHIEVEMENT_DETAIL_15": "Complete 'Takedown' and 'The Hornet's Nest' on Veteran difficulty.", + "ACHIEVEMENT_NAME_16": "Red Dawn", + "ACHIEVEMENT_DETAIL_16": "Complete 'Wolverines!' and 'Exodus' on Veteran difficulty.", + "ACHIEVEMENT_NAME_17": "Prisoner 627", + "ACHIEVEMENT_DETAIL_17": "Complete 'The Only Easy Day... Was Yesterday' and 'The Gulag' on Veteran difficulty.", + "ACHIEVEMENT_NAME_18": "Ends Justify the Means", + "ACHIEVEMENT_DETAIL_18": "Complete 'Contingency' on Veteran difficulty.", + "ACHIEVEMENT_NAME_19": "Homecoming", + "ACHIEVEMENT_DETAIL_19": "Complete 'Of Their Own Accord', 'Second Sun', and 'Whiskey Hotel' on Veteran difficulty.", + "ACHIEVEMENT_NAME_20": "Queen takes Rook", + "ACHIEVEMENT_DETAIL_20": "Complete 'Loose Ends' and 'The Enemy of My Enemy' on Veteran difficulty.", + "ACHIEVEMENT_NAME_21": "Off the Grid", + "ACHIEVEMENT_DETAIL_21": "Complete 'Just Like Old Times' and 'Endgame' on Veteran difficulty.", + "ACHIEVEMENT_NAME_22": "Pit Boss", + "ACHIEVEMENT_DETAIL_22": "Run The Pit in 'S.S.D.D.' and finish with a final time under 30 seconds.", + "ACHIEVEMENT_NAME_23": "Ghost", + "ACHIEVEMENT_DETAIL_23": "Plant the C4 in 'Cliffhanger' without alerting or injuring anyone in the blizzard.", + "ACHIEVEMENT_NAME_24": "Colonel Sanderson", + "ACHIEVEMENT_DETAIL_24": "Kill 7 chickens in under 10 seconds in 'The Hornet's Nest'.", + "ACHIEVEMENT_NAME_25": "Ten plus foot-mobiles", + "ACHIEVEMENT_DETAIL_25": "Kill at least 10 enemies with one Predator Missile.", + "ACHIEVEMENT_NAME_26": "Unnecessary Roughness", + "ACHIEVEMENT_DETAIL_26": "Use a Riot shield to beat down an enemy.", + "ACHIEVEMENT_NAME_27": "Knock-knock", + "ACHIEVEMENT_DETAIL_27": "Kill 4 enemies with 4 shots during a slow-mo breach.", + "ACHIEVEMENT_NAME_28": "Some Like it Hot", + "ACHIEVEMENT_DETAIL_28": "Kill 6 enemies in a row using a thermal weapon.", + "ACHIEVEMENT_NAME_29": "Two Birds with One Stone", + "ACHIEVEMENT_DETAIL_29": "Kill 2 enemies with a single bullet.", + "ACHIEVEMENT_NAME_30": "The Road Less Traveled", + "ACHIEVEMENT_DETAIL_30": "Collect 22 enemy intel items.", + "ACHIEVEMENT_NAME_31": "Leave No Stone Unturned", + "ACHIEVEMENT_DETAIL_31": "Collect 45 enemy intel items.", + "ACHIEVEMENT_NAME_32": "Drive By", + "ACHIEVEMENT_DETAIL_32": "Kill 20 enemies in a row while driving a vehicle.", + "ACHIEVEMENT_NAME_33": "The Harder They Fall", + "ACHIEVEMENT_DETAIL_33": "Kill 2 rappelling enemies in a row before they land on their feet.", + "ACHIEVEMENT_NAME_34": "Desperado", + "ACHIEVEMENT_DETAIL_34": "Kill 5 enemies in a row using 5 different weapons or attachments.", + "ACHIEVEMENT_NAME_35": "Look Ma Two Hands", + "ACHIEVEMENT_DETAIL_35": "Kill 10 enemies in a row using akimbo weapons.", + "ACHIEVEMENT_NAME_36": "No Rest For the Wary", + "ACHIEVEMENT_DETAIL_36": "Knife an enemy without him ever knowing you were there.", + "ACHIEVEMENT_NAME_37": "Three-some", + "ACHIEVEMENT_DETAIL_37": "Kill at least 3 enemies with a single shot from a grenade launcher.", + "ACHIEVEMENT_NAME_38": "Target Confirmed", + "ACHIEVEMENT_DETAIL_38": "Instruct the Honey Badger to kill 80 enemies in 'Exodus'.", + "ACHIEVEMENT_NAME_39": "Angel Savior", + "ACHIEVEMENT_DETAIL_39": "Do not get your Predator Drone destroyed in 'Contingency'.", + "ACHIEVEMENT_NAME_40": "Do NOT push this button", + "ACHIEVEMENT_DETAIL_40": "Ring the red bell in both rooms and survive the attack.", + "ACHIEVEMENT_NAME_41": "The Student Surpasses the Master", + "ACHIEVEMENT_DETAIL_41": "Beat BX time in 'S.S.D.D.'.", + "ACHIEVEMENT_NAME_42": "The Real Gun Game", + "ACHIEVEMENT_DETAIL_42": "Complete any mission but 'S.S.D.D.' and 'Endgame' without reloading weapons or using melee attacks.", + "ACHIEVEMENT_NAME_43": "Precognitive Paranoia", + "ACHIEVEMENT_DETAIL_43": "Kill Shepherd.", + "ACHIEVEMENT_NAME_44": "Immortal", + "ACHIEVEMENT_DETAIL_44": "Complete every missions without dying or reloading to a checkpoint at any difficulty.", + "ACHIEVEMENT_NAME_45": "Silent Skies", + "ACHIEVEMENT_DETAIL_45": "Destroy both BTRs without using Predator Drones in 'Wolverines!'", + "ACHIEVEMENT_NAME_46": "Clay-more", + "ACHIEVEMENT_DETAIL_46": "Kill 11 enemies using Claymores in 'Loose Ends'.", + "ACHIEVEMENT_NAME_47": "Bird Hunter", + "ACHIEVEMENT_DETAIL_47": "Destroy 10 choppers using the Javelin Launcher in 'Of Their Own Accord'.", + "ACHIEVEMENT_NAME_48": "Hot Potato", + "ACHIEVEMENT_DETAIL_48": "Destroy the helicopter using frag grenades in 'The Only Easy Day... Was Yesterday'.", + "ACHIEVEMENT_NAME_49": "Clown in Training", + "ACHIEVEMENT_DETAIL_49": "The U.S. Army Rangers ain’t no place for clowns.", + "ACHIEVEMENT_NAME_50": "Headbanger", + "ACHIEVEMENT_DETAIL_50": "Kill an enemy with the impact damage from a frag grenade to the head." +} diff --git a/data/zonetool/localizedstrings/french.json b/data/zonetool/localizedstrings/french.json index 6b8c58be..c396ea66 100644 --- a/data/zonetool/localizedstrings/french.json +++ b/data/zonetool/localizedstrings/french.json @@ -41,5 +41,108 @@ "LUA_MENU_CHOOSE_LANGUAGE": "Choisissez la langue", "DEPOT_GO_TO_THE_DEPOT": "Ouvrir le lien", - "MENU_OPEN_MOTD": "Message du jour" -} \ No newline at end of file + "MENU_OPEN_MOTD": "Message du jour", + + "ACHIEVEMENT_NAME_0": "Quoi, c'est tout ?", + "ACHIEVEMENT_DETAIL_0": "Gagnez tous les trophées disponibles de Call of Duty®: Modern Warfare® 2 Campaign Remastered.", + "ACHIEVEMENT_NAME_1": "Remise en selle", + "ACHIEVEMENT_DETAIL_1": "Aidez à la formation de la milice locale.", + "ACHIEVEMENT_NAME_2": "Attention, danger", + "ACHIEVEMENT_DETAIL_2": "Faites-vous sélectionner pour l'unité d'élite de Shepherd.", + "ACHIEVEMENT_NAME_3": "Sueurs froides", + "ACHIEVEMENT_DETAIL_3": "Infiltrez la base sur la montagne enneigée.", + "ACHIEVEMENT_NAME_4": "L'affaire est dans le sac", + "ACHIEVEMENT_DETAIL_4": "Trouvez Rojas dans la favela.", + "ACHIEVEMENT_NAME_5": "Menu sur place", + "ACHIEVEMENT_DETAIL_5": "Défendez le Burger Town.", + "ACHIEVEMENT_NAME_6": "Soap sur la corde raide", + "ACHIEVEMENT_DETAIL_6": "Prenez d'assaut le goulag.", + "ACHIEVEMENT_NAME_7": "Situation désespérée", + "ACHIEVEMENT_DETAIL_7": "Mettez à exécution le plan pour aider les Américains.", + "ACHIEVEMENT_NAME_8": "Whiskey Hotel", + "ACHIEVEMENT_DETAIL_8": "Reprenez le Whiskey Hotel.", + "ACHIEVEMENT_NAME_9": "Le pion", + "ACHIEVEMENT_DETAIL_9": "Prenez d'assaut la planque de Makarov.", + "ACHIEVEMENT_NAME_10": "De Charybde en Scylla", + "ACHIEVEMENT_DETAIL_10": "Accomplissez la mission dans le cimetière des avions. ", + "ACHIEVEMENT_NAME_11": "Pour la postérité", + "ACHIEVEMENT_DETAIL_11": "Terminez la campagne solo dans n'importe quelle difficulté.", + "ACHIEVEMENT_NAME_12": "Le prix de la guerre", + "ACHIEVEMENT_DETAIL_12": "Terminez la campagne solo en difficulté Commando ou Vétéran.", + "ACHIEVEMENT_NAME_13": "Premier jour d'école", + "ACHIEVEMENT_DETAIL_13": "Terminez ''S.S.D.D'' et ''Travail d'équipe'' en difficulté Vétéran.", + "ACHIEVEMENT_NAME_14": "Diamant noir", + "ACHIEVEMENT_DETAIL_14": "Terminez ''Périlleuse escalade'' en difficulté Vétéran.", + "ACHIEVEMENT_NAME_15": "Turistas", + "ACHIEVEMENT_DETAIL_15": "Terminez ''Confrontation'' et ''Un nid de frelons'' en difficulté Vétéran.", + "ACHIEVEMENT_NAME_16": "Aube rouge", + "ACHIEVEMENT_DETAIL_16": "Terminez ''Wolverines !'' et ''Exode'' en difficulté Vétéran.", + "ACHIEVEMENT_NAME_17": "Prisonnier 627", + "ACHIEVEMENT_DETAIL_17": "Terminez ''La seule journée paisible, c'était hier...'' et ''Le goulag'' en difficulté Vétéran.", + "ACHIEVEMENT_NAME_18": "La fin justifie les moyens", + "ACHIEVEMENT_DETAIL_18": "Terminez ''Imprévu'' en difficulté Vétéran.", + "ACHIEVEMENT_NAME_19": "Retour à la maison", + "ACHIEVEMENT_DETAIL_19": "Terminez ''Sans contrainte'', ''Deuxième soleil'' et ''Whiskey Hotel'' en difficulté Vétéran.", + "ACHIEVEMENT_NAME_20": "La reine prend la tour", + "ACHIEVEMENT_DETAIL_20": "Terminez ''Derniers détails'' et ''L'ennemi de mon ennemi...'' en difficulté Vétéran.", + "ACHIEVEMENT_NAME_21": "Indépendance", + "ACHIEVEMENT_DETAIL_21": "Terminez ''Comme au bon vieux temps'' et ''Échec et mat'' en difficulté Vétéran.", + "ACHIEVEMENT_NAME_22": "Roi de la fosse", + "ACHIEVEMENT_DETAIL_22": "Parcourez la fosse dans ''S.S.D.D'' et terminez avec un temps final inférieur à 30 secondes.", + "ACHIEVEMENT_NAME_23": "Fantôme", + "ACHIEVEMENT_DETAIL_23": "Placez le C4 dans ''Périlleuse escalade'' sans alerter ou blesser qui que ce soit dans le blizzard.", + "ACHIEVEMENT_NAME_24": "Colonel Sanderson", + "ACHIEVEMENT_DETAIL_24": "Tuez 7 poulets en moins de 10 secondes dans ''Un nid de frelons''.", + "ACHIEVEMENT_NAME_25": "Une dizaine de soldats", + "ACHIEVEMENT_DETAIL_25": "Tuez au moins 10 ennemis avec un seul missile Predator.", + "ACHIEVEMENT_NAME_26": "Brutalité gratuite", + "ACHIEVEMENT_DETAIL_26": "Utilisez un bouclier antiémeute pour vaincre un ennemi.", + "ACHIEVEMENT_NAME_27": "Toc ! Toc !", + "ACHIEVEMENT_DETAIL_27": "Tuez 4 ennemis avec 4 tirs durant une attaque au ralenti.", + "ACHIEVEMENT_NAME_28": "Certains l'aiment chaud", + "ACHIEVEMENT_DETAIL_28": "Tuez 6 ennemis d'affilée en utilisant une arme à lunette thermique.", + "ACHIEVEMENT_NAME_29": "D'une pierre deux coups", + "ACHIEVEMENT_DETAIL_29": "Tuez 2 ennemis d'une seule balle.", + "ACHIEVEMENT_NAME_30": "Chemins détournés", + "ACHIEVEMENT_DETAIL_30": "Récupérez 22 éléments de renseignements ennemis.", + "ACHIEVEMENT_NAME_31": "Une fouille en règle", + "ACHIEVEMENT_DETAIL_31": "Récupérez 45 éléments de renseignements ennemis.", + "ACHIEVEMENT_NAME_32": "Fusillade", + "ACHIEVEMENT_DETAIL_32": "Tuez 20 ennemis d'affilée en pilotant un véhicule.", + "ACHIEVEMENT_NAME_33": "Plus dure sera la chute", + "ACHIEVEMENT_DETAIL_33": "Tuez 2 ennemis faisant du rappel d'affilée avant qu'ils ne touchent le sol.", + "ACHIEVEMENT_NAME_34": "Desperado", + "ACHIEVEMENT_DETAIL_34": "Tuez 5 ennemis d'affilée en utilisant 5 armes ou accessoires différents.", + "ACHIEVEMENT_NAME_35": "Avec les deux mains", + "ACHIEVEMENT_DETAIL_35": "Tuez 10 ennemis d'affilée en utilisant des armes Akimbo.", + "ACHIEVEMENT_NAME_36": "Pas de repos pour les braves", + "ACHIEVEMENT_DETAIL_36": "Poignardez un ennemi sans qu'il ne remarque votre présence.", + "ACHIEVEMENT_NAME_37": "Plus on est de fous…", + "ACHIEVEMENT_DETAIL_37": "Tuez au moins 3 ennemis avec un seul tir de lance-grenades.", + "ACHIEVEMENT_NAME_38": "Cible confirmée", + "ACHIEVEMENT_DETAIL_38": "Utilisez le Honey Badger pour tuer 80 ennemis dans ''Exode''.", + "ACHIEVEMENT_NAME_39": "Sauvetage venu des cieux", + "ACHIEVEMENT_DETAIL_39": "Empêchez la destruction de votre drone Predator dans ''Imprévu''.", + "ACHIEVEMENT_NAME_40": "N'appuyez PAS sur ce bouton", + "ACHIEVEMENT_DETAIL_40": "Déclenchez la sonnette rouge dans les deux salles et survivez à l'attaque.", + "ACHIEVEMENT_NAME_41": "L'élève dépasse le maître", + "ACHIEVEMENT_DETAIL_41": "Battez le temps de BX dans ''S.S.D.D''.", + "ACHIEVEMENT_NAME_42": "Véritable professionnel", + "ACHIEVEMENT_DETAIL_42": "Terminez une mission, sauf ''S.S.D.D'' et ''Échec et mat'', sans recharger ni attaquer au CàC.", + "ACHIEVEMENT_NAME_43": "Paranoïa prémonitoire", + "ACHIEVEMENT_DETAIL_43": "Tuez Shepherd.", + "ACHIEVEMENT_NAME_44": "Immortel", + "ACHIEVEMENT_DETAIL_44": "Terminez chaque mission sans mourir ni recharger un point de contrôle dans tout niv. de difficulté.", + "ACHIEVEMENT_NAME_45": "Silence dans les cieux", + "ACHIEVEMENT_DETAIL_45": "Détruisez les deux BTR sans utiliser de drone Predator dans ''Wolverines !''.", + "ACHIEVEMENT_NAME_46": "Clay-more", + "ACHIEVEMENT_DETAIL_46": "Tuez 11 ennemis en utilisant des claymores dans ''Derniers détails''.", + "ACHIEVEMENT_NAME_47": "Chasseur d'oiseaux", + "ACHIEVEMENT_DETAIL_47": "Détruisez 10 hélicoptères en utilisant un lanceur javelin dans ''Sans contrainte''.", + "ACHIEVEMENT_NAME_48": "Patate chaude", + "ACHIEVEMENT_DETAIL_48": "Détruisez l'hélicoptère avec des grenades à frag. dans 'La seule journée paisible, c'était hier...'.", + "ACHIEVEMENT_NAME_49": "Clown en formation", + "ACHIEVEMENT_DETAIL_49": "Il n'y a pas de place pour les clowns dans l'armée américaine.", + "ACHIEVEMENT_NAME_50": "Headbang", + "ACHIEVEMENT_DETAIL_50": "Tuez un ennemi en le touchant à la tête avec les dégâts d'impact d'une grenade à fragmentation." +} diff --git a/data/zonetool/localizedstrings/german.json b/data/zonetool/localizedstrings/german.json index 4008ac77..8333402d 100644 --- a/data/zonetool/localizedstrings/german.json +++ b/data/zonetool/localizedstrings/german.json @@ -24,5 +24,108 @@ "LUA_MENU_CANCEL_UNLOCK_CAPS": "Freischalten abbrechen", "DEPOT_GO_TO_THE_DEPOT": "Link öffnen", - "MENU_OPEN_MOTD": "Nachricht des Tages" -} \ No newline at end of file + "MENU_OPEN_MOTD": "Nachricht des Tages", + + "ACHIEVEMENT_NAME_0": "Mehr hast du nicht drauf?", + "ACHIEVEMENT_DETAIL_0": "Erlangen Sie alle Trophäen von Call of Duty®: Modern Warfare® 2 Campaign Remastered.", + "ACHIEVEMENT_NAME_1": "Zurück im Sattel", + "ACHIEVEMENT_DETAIL_1": "Helfen Sie, die örtliche Miliz auszubilden.", + "ACHIEVEMENT_NAME_2": "Direkte Gefahr", + "ACHIEVEMENT_DETAIL_2": "Werden Sie für Shepherds Elitetruppe ausgewählt.", + "ACHIEVEMENT_NAME_3": "Kalte Schulter", + "ACHIEVEMENT_DETAIL_3": "Infiltrieren Sie die verschneite Bergbasis.", + "ACHIEVEMENT_NAME_4": "Hab dich", + "ACHIEVEMENT_DETAIL_4": "Finden Sie Rojas im Elendsviertel.", + "ACHIEVEMENT_NAME_5": "Royal mit Käse", + "ACHIEVEMENT_DETAIL_5": "Verteidigen Sie Burger Town.", + "ACHIEVEMENT_NAME_6": "Soap am Seil", + "ACHIEVEMENT_DETAIL_6": "Stürmen Sie den Gulag.", + "ACHIEVEMENT_NAME_7": "Schlimme Zeiten", + "ACHIEVEMENT_DETAIL_7": "Führen Sie den Plan aus, um den Amerikanern zu helfen.", + "ACHIEVEMENT_NAME_8": "Weißes Haus", + "ACHIEVEMENT_DETAIL_8": "Erobern Sie das Weiße Haus zurück.", + "ACHIEVEMENT_NAME_9": "Bauernfigur", + "ACHIEVEMENT_DETAIL_9": "Greifen Sie Makarovs Unterschlupf an.", + "ACHIEVEMENT_NAME_10": "Raus aus der Bratpfanne ...", + "ACHIEVEMENT_DETAIL_10": "Beenden Sie die Mission auf dem Flugzeugfriedhof.", + "ACHIEVEMENT_NAME_11": "Für die Akten", + "ACHIEVEMENT_DETAIL_11": "Beenden Sie die Einzelspielerkampagne auf einem beliebigen Schwierigkeitsgrad.", + "ACHIEVEMENT_NAME_12": "Der Preis des Krieges", + "ACHIEVEMENT_DETAIL_12": "Beenden Sie die Einzelspielerkampagne auf dem Schwierigkeitsgrad Söldner oder Veteran.", + "ACHIEVEMENT_NAME_13": "Erster Schultag", + "ACHIEVEMENT_DETAIL_13": "Beenden Sie 'Die alte Leier' und 'Teamspieler' auf dem Schwierigkeitsgrad Veteran.", + "ACHIEVEMENT_NAME_14": "Schwarzer Diamant", + "ACHIEVEMENT_DETAIL_14": "Beenden Sie 'Cliffhanger' auf dem Schwierigkeitsgrad Veteran.", + "ACHIEVEMENT_NAME_15": "Touristen", + "ACHIEVEMENT_DETAIL_15": "Beenden Sie 'Zugriff' und 'Das Hornissennest' auf dem Schwierigkeitsgrad Veteran.", + "ACHIEVEMENT_NAME_16": "Roter Morgen", + "ACHIEVEMENT_DETAIL_16": "Beenden Sie 'Wolverines!' und 'Exodus' auf dem Schwierigkeitsgrad Veteran.", + "ACHIEVEMENT_NAME_17": "Gefangener 627", + "ACHIEVEMENT_DETAIL_17": "Beenden Sie 'Der einzig schöne Tag ... war gestern' und 'Der Gulag' auf Veteran.", + "ACHIEVEMENT_NAME_18": "Der Zweck heiligt die Mittel", + "ACHIEVEMENT_DETAIL_18": "Beenden Sie 'Notfall' auf dem Schwierigkeitsgrad Veteran.", + "ACHIEVEMENT_NAME_19": "Heimkehr", + "ACHIEVEMENT_DETAIL_19": "Beenden Sie 'Auf eigene Verantwortung', 'Zweite Sonne' und 'Weißes Haus' auf Veteran.", + "ACHIEVEMENT_NAME_20": "Dame schlägt Turm", + "ACHIEVEMENT_DETAIL_20": "Beenden Sie 'Lose Enden' und 'Der Feind meines Feindes' auf dem Schwierigkeitsgrad Veteran.", + "ACHIEVEMENT_NAME_21": "Aussteiger", + "ACHIEVEMENT_DETAIL_21": "Beenden Sie 'Wie in alten Zeiten' und 'Endphase' auf dem Schwierigkeitsgrad Veteran.", + "ACHIEVEMENT_NAME_22": "Grubenarbeiter", + "ACHIEVEMENT_DETAIL_22": "Rennen Sie durch 'Die Grube' in 'Die alte Leier' und beenden Sie den Parcours in unter 30 Sekunden.", + "ACHIEVEMENT_NAME_23": "Geist", + "ACHIEVEMENT_DETAIL_23": "Platzieren Sie in 'Cliffhanger' C4, ohne jemanden im Schneesturm zu verletzen oder zu alarmieren.", + "ACHIEVEMENT_NAME_24": "Colonel Sanderson", + "ACHIEVEMENT_DETAIL_24": "Erledigen Sie in 'Das Hornissennest' 7 Hühner in unter 10 Sekunden.", + "ACHIEVEMENT_NAME_25": "Mehr als 10 Gegner", + "ACHIEVEMENT_DETAIL_25": "Erledigen Sie mindestens 10 Gegner mit einer Predator-Rakete.", + "ACHIEVEMENT_NAME_26": "Übertriebene Härte", + "ACHIEVEMENT_DETAIL_26": "Schlagen Sie einen Gegner mit dem Einsatzschild nieder.", + "ACHIEVEMENT_NAME_27": "Klopf, klopf", + "ACHIEVEMENT_DETAIL_27": "Erledigen Sie 4 Gegner mit 4 Schüssen in einem Zeitlupen-Vorstoß.", + "ACHIEVEMENT_NAME_28": "Manche mögen's heiß", + "ACHIEVEMENT_DETAIL_28": "Erledigen Sie 6 Gegner hintereinander mit einer Thermalwaffe.", + "ACHIEVEMENT_NAME_29": "Zwei Vögel, ein Stein", + "ACHIEVEMENT_DETAIL_29": "Erledigen Sie 2 Gegner mit nur einer Kugel.", + "ACHIEVEMENT_NAME_30": "Neue Wege", + "ACHIEVEMENT_DETAIL_30": "Sammeln Sie 22 feindliche Aufklärungsdaten.", + "ACHIEVEMENT_NAME_31": "Mir entgeht nichts", + "ACHIEVEMENT_DETAIL_31": "Sammeln Sie 45 feindliche Aufklärungsdaten.", + "ACHIEVEMENT_NAME_32": "Im Vorbeifahren", + "ACHIEVEMENT_DETAIL_32": "Erledigen Sie 20 Gegner hintereinander, während Sie ein Fahrzeug fahren.", + "ACHIEVEMENT_NAME_33": "Tiefer Fall", + "ACHIEVEMENT_DETAIL_33": "Erledigen Sie 2 Gegner am Seil, bevor sie auf ihren Füßen landen.", + "ACHIEVEMENT_NAME_34": "Desperado", + "ACHIEVEMENT_DETAIL_34": "Schalten Sie 5 Gegner nacheinander mit 5 verschiedenen Waffen/Aufsätzen aus.", + "ACHIEVEMENT_NAME_35": "Schau mal, mit zwei Händen", + "ACHIEVEMENT_DETAIL_35": "Schalten Sie 10 Gegner nacheinander mit Akimbo-Waffen aus.", + "ACHIEVEMENT_NAME_36": "Keine Ruhe für die Wachsamen", + "ACHIEVEMENT_DETAIL_36": "Schalten Sie einen Gegner mit dem Messer aus, ohne dass dieser Sie bemerkt.", + "ACHIEVEMENT_NAME_37": "Dreier", + "ACHIEVEMENT_DETAIL_37": "Erledigen Sie mindestens 3 Gegner mit nur einem Granatwerferschuss.", + "ACHIEVEMENT_NAME_38": "Ziel bestätigt", + "ACHIEVEMENT_DETAIL_38": "Geben Sie in 'Exodus' dem Honey Badger den Befehl, 80 Gegner zu erledigen.", + "ACHIEVEMENT_NAME_39": "Schutzengel", + "ACHIEVEMENT_DETAIL_39": "Lassen Sie nicht zu, dass Ihre Predator-Drohne in 'Notfall' zerstört wird.", + "ACHIEVEMENT_NAME_40": "Knopf NICHT drücken", + "ACHIEVEMENT_DETAIL_40": "Läuten Sie die rote Glocke in beiden Räumen und überleben Sie den Angriff.", + "ACHIEVEMENT_NAME_41": "Schüler übertrifft Lehrer", + "ACHIEVEMENT_DETAIL_41": "Unterbieten Sie die BX-Zeit in 'Die alte Leier'.", + "ACHIEVEMENT_NAME_42": "Echtes Waffenspiel", + "ACHIEVEMENT_DETAIL_42": "Schließen Sie 1 Mission (außer 'Die alte Leier' & 'Endphase') ohne Nachladen/Nahkampfangriffe ab.", + "ACHIEVEMENT_NAME_43": "Vorauseilender Verfolgungswahn", + "ACHIEVEMENT_DETAIL_43": "Schalten Sie Shepherd aus.", + "ACHIEVEMENT_NAME_44": "Unsterblich", + "ACHIEVEMENT_DETAIL_44": "Schließen Sie jede Mission auf bel. Schwierigkeitsgrad ohne Sterben und ohne Kontrollpunkt-Laden ab.", + "ACHIEVEMENT_NAME_45": "Stiller Himmel", + "ACHIEVEMENT_DETAIL_45": "Zerstören Sie in 'Wolverines!' beide BTRs ohne Predator-Drohnen.", + "ACHIEVEMENT_NAME_46": "Claymord", + "ACHIEVEMENT_DETAIL_46": "Erledigen Sie in 'Lose Enden' 11 Gegner mit Claymores.", + "ACHIEVEMENT_NAME_47": "Vogeljäger", + "ACHIEVEMENT_DETAIL_47": "Zerstören Sie in 'Auf eigene Verantwortung' 10 Helis mit dem Javelin-Werfer.", + "ACHIEVEMENT_NAME_48": "Heiße Kartoffel", + "ACHIEVEMENT_DETAIL_48": "Zerstören Sie in 'Der einzig schöne Tag ... war gestern' den Helikopter mit Splittergranaten.", + "ACHIEVEMENT_NAME_49": "Clown in Ausbildung", + "ACHIEVEMENT_DETAIL_49": "Die U.S. Army Rangers haben keinen Platz für Clowns.", + "ACHIEVEMENT_NAME_50": "Headbanger", + "ACHIEVEMENT_DETAIL_50": "Erledigen Sie einen Gegner mit dem Einschlagsschaden einer Splittergranate am Kopf." +} diff --git a/data/zonetool/localizedstrings/italian.json b/data/zonetool/localizedstrings/italian.json index 20382b49..1ec65021 100644 --- a/data/zonetool/localizedstrings/italian.json +++ b/data/zonetool/localizedstrings/italian.json @@ -61,5 +61,108 @@ "MENU_SYSINFO_DONATION_URL": "https://paypal.me/fedecek", "DEPOT_GO_TO_THE_DEPOT": "Apri il link", - "MENU_OPEN_MOTD": "Bollettino del giorno" -} \ No newline at end of file + "MENU_OPEN_MOTD": "Bollettino del giorno", + + "ACHIEVEMENT_NAME_0": "È tutto quello che hai?", + "ACHIEVEMENT_DETAIL_0": "Guadagna tutti i trofei di Call of Duty®: Modern Warfare® 2 Campaign Remastered.", + "ACHIEVEMENT_NAME_1": "Di nuovo in sella", + "ACHIEVEMENT_DETAIL_1": "Aiuta ad addestrare la milizia locale.", + "ACHIEVEMENT_NAME_2": "Mina vagante", + "ACHIEVEMENT_DETAIL_2": "Fatti scegliere per la squadra d'élite di Shepherd.", + "ACHIEVEMENT_NAME_3": "Sangue freddo", + "ACHIEVEMENT_DETAIL_3": "Infiltrati nella base della montagna innevata.", + "ACHIEVEMENT_NAME_4": "Registrali e ficcali nel sacco", + "ACHIEVEMENT_DETAIL_4": "Trova Rojas nelle favelas.", + "ACHIEVEMENT_NAME_5": "Royale con formaggio", + "ACHIEVEMENT_DETAIL_5": "Difendi Burger Town.", + "ACHIEVEMENT_NAME_6": "Fuoco di Soap-pressione", + "ACHIEVEMENT_DETAIL_6": "Conquista il gulag.", + "ACHIEVEMENT_NAME_7": "Tempi disperati", + "ACHIEVEMENT_DETAIL_7": "Esegui il piano per aiutare gli americani.", + "ACHIEVEMENT_NAME_8": "Whiskey Hotel", + "ACHIEVEMENT_DETAIL_8": "Riconquista il Whiskey Hotel.", + "ACHIEVEMENT_NAME_9": "La parola data", + "ACHIEVEMENT_DETAIL_9": "Attacca il rifugio di Makarov.", + "ACHIEVEMENT_NAME_10": "Dalla padella alla brace", + "ACHIEVEMENT_DETAIL_10": "Completa la missione al cimitero degli aerei.", + "ACHIEVEMENT_NAME_11": "Per la cronaca", + "ACHIEVEMENT_DETAIL_11": "Completa la Campagna per giocatore singolo a qualsiasi livello.", + "ACHIEVEMENT_NAME_12": "Il prezzo della guerra", + "ACHIEVEMENT_DETAIL_12": "Completa la Campagna per giocatore singolo a livello Esperto o Veterano.", + "ACHIEVEMENT_NAME_13": "Primo giorno di scuola", + "ACHIEVEMENT_DETAIL_13": "Completa ''Stessa merda, altro giorno'' e ''Gioco di squadra'' a livello Veterano.", + "ACHIEVEMENT_NAME_14": "Diamante nero", + "ACHIEVEMENT_DETAIL_14": "Completa ''Scalata'' a livello Veterano.", + "ACHIEVEMENT_NAME_15": "Turistas", + "ACHIEVEMENT_DETAIL_15": "Completa ''Atterramento'' e ''Vespaio'' a livello Veterano.", + "ACHIEVEMENT_NAME_16": "Alba rossa", + "ACHIEVEMENT_DETAIL_16": "Completa ''Wolverine!'' e ''Esodo'' a livello Veterano.", + "ACHIEVEMENT_NAME_17": "Detenuto 627", + "ACHIEVEMENT_DETAIL_17": "Completa ''L'unico giorno facile... era ieri'' e ''Il gulag'' a livello Veterano.", + "ACHIEVEMENT_NAME_18": "Il fine giustifica i mezzi", + "ACHIEVEMENT_DETAIL_18": "Completa ''Imprevisto'' a livello Veterano.", + "ACHIEVEMENT_NAME_19": "Ritorno a casa", + "ACHIEVEMENT_DETAIL_19": "Completa ''Secondo le loro fonti'', ''Il secondo sole'' e ''Whiskey Hotel'' a livello Veterano.", + "ACHIEVEMENT_NAME_20": "La regina mangia la torre", + "ACHIEVEMENT_DETAIL_20": "Completa ''Conti in sospeso'' e ''Il nemico del mio nemico'' a livello Veterano.", + "ACHIEVEMENT_NAME_21": "Fuori dai radar", + "ACHIEVEMENT_DETAIL_21": "Completa ''Come ai vecchi tempi'' e ''La fine'' a livello Veterano.", + "ACHIEVEMENT_NAME_22": "Il direttore", + "ACHIEVEMENT_DETAIL_22": "Percorri il pozzo in ''Stessa merda, altro giorno'' in meno di 30 secondi.", + "ACHIEVEMENT_NAME_23": "Fantasma", + "ACHIEVEMENT_DETAIL_23": "Piazza il C4 in ''Scalata'' senza allarmare o ferire nessuno nella tormenta.", + "ACHIEVEMENT_NAME_24": "Polletto alla diavola", + "ACHIEVEMENT_DETAIL_24": "Uccidi 7 galline in meno di 10 secondi in ''Vespaio''.", + "ACHIEVEMENT_NAME_25": "10 pedoni", + "ACHIEVEMENT_DETAIL_25": "Uccidi almeno 10 nemici con un solo missile Predator.", + "ACHIEVEMENT_NAME_26": "Violenza gratuita", + "ACHIEVEMENT_DETAIL_26": "Usa uno scudo antisommossa per abbattere un nemico.", + "ACHIEVEMENT_NAME_27": "Toc-toc", + "ACHIEVEMENT_DETAIL_27": "Uccidi 4 nemici con 4 colpi durante un'irruzione con tempo rallentato.", + "ACHIEVEMENT_NAME_28": "A qualcuno piace caldo", + "ACHIEVEMENT_DETAIL_28": "Uccidi 6 nemici di fila usando un'arma termica.", + "ACHIEVEMENT_NAME_29": "Due piccioni con una fava", + "ACHIEVEMENT_DETAIL_29": "Uccidi 2 nemici con un solo proiettile.", + "ACHIEVEMENT_NAME_30": "Il percorso meno trafficato", + "ACHIEVEMENT_DETAIL_30": "Trova 22 documenti con informazioni nemiche.", + "ACHIEVEMENT_NAME_31": "Guarda dappertutto", + "ACHIEVEMENT_DETAIL_31": "Trova 45 documenti con informazioni nemiche.", + "ACHIEVEMENT_NAME_32": "Sparatoria", + "ACHIEVEMENT_DETAIL_32": "Uccidi 20 nemici di fila mentre guidi un veicolo.", + "ACHIEVEMENT_NAME_33": "Più si fanno male cadendo", + "ACHIEVEMENT_DETAIL_33": "Uccidi 2 nemici che si stanno calando di fila prima che atterrino.", + "ACHIEVEMENT_NAME_34": "Desperado", + "ACHIEVEMENT_DETAIL_34": "Uccidi 5 nemici di fila usando 5 armi o accessori diversi.", + "ACHIEVEMENT_NAME_35": "Guarda mamma! Con due mani!", + "ACHIEVEMENT_DETAIL_35": "Uccidi 10 nemici di fila usando armi akimbo.", + "ACHIEVEMENT_NAME_36": "Non c'è posto per i deboli", + "ACHIEVEMENT_DETAIL_36": "Accoltella un nemico senza che si accorga di te.", + "ACHIEVEMENT_NAME_37": "Triangolo", + "ACHIEVEMENT_DETAIL_37": "Uccidi almeno 3 nemici con un solo colpo di lanciagranate.", + "ACHIEVEMENT_NAME_38": "Bersaglio confermato", + "ACHIEVEMENT_DETAIL_38": "Ordina all'Honey Badger di uccidere 80 nemici in ''Esodo''.", + "ACHIEVEMENT_NAME_39": "Salvatore angelico", + "ACHIEVEMENT_DETAIL_39": "Impedisci che il tuo drone Predator venga distrutto in ''Imprevisto''.", + "ACHIEVEMENT_NAME_40": "NON premere questo pulsante", + "ACHIEVEMENT_DETAIL_40": "Suona il campanello rosso in entrambe le stanze e sopravvivi all'attacco.", + "ACHIEVEMENT_NAME_41": "L'allievo supera il maestro", + "ACHIEVEMENT_DETAIL_41": "Batti il tempo di BX in ''Stessa merda, altro giorno''.", + "ACHIEVEMENT_NAME_42": "Il vero gioco delle armi", + "ACHIEVEMENT_DETAIL_42": "Completa un livello (non 'Stessa merda, altro giorno' e 'La fine') senza ricariche né corpo a corpo.", + "ACHIEVEMENT_NAME_43": "Paranoia precognitiva", + "ACHIEVEMENT_DETAIL_43": "Uccidi Shepherd.", + "ACHIEVEMENT_NAME_44": "Immortale", + "ACHIEVEMENT_DETAIL_44": "Completa l'intera Campagna senza morire né riavviare da un checkpoint (qualsiasi livello).", + "ACHIEVEMENT_NAME_45": "Cieli silenziosi", + "ACHIEVEMENT_DETAIL_45": "Distruggi entrambi i BTR senza usare droni Predator in ''Wolverine!''.", + "ACHIEVEMENT_NAME_46": "Clay-amore", + "ACHIEVEMENT_DETAIL_46": "Uccidi 11 nemici usando Claymore in ''Conti in sospeso''.", + "ACHIEVEMENT_NAME_47": "Caccia grossa", + "ACHIEVEMENT_DETAIL_47": "Distruggi 10 elicotteri usando il lanciatore Javelin in ''Secondo le loro fonti''.", + "ACHIEVEMENT_NAME_48": "Patata bollente", + "ACHIEVEMENT_DETAIL_48": "Distruggi l'elicottero usando granate a frammentazione in ''L'unico giorno facile... era ieri''.", + "ACHIEVEMENT_NAME_49": "Apprendista pagliaccio", + "ACHIEVEMENT_DETAIL_49": "Nei ranger dell'esercito americano non c'è posto per i buffoni.", + "ACHIEVEMENT_NAME_50": "Colpo di testa", + "ACHIEVEMENT_DETAIL_50": "Uccidi un nemico colpendolo alla testa con una granata a frammentazione (solo danni da impatto)." +} diff --git a/data/zonetool/localizedstrings/polish.json b/data/zonetool/localizedstrings/polish.json index 04c91ad2..bc680e8b 100644 --- a/data/zonetool/localizedstrings/polish.json +++ b/data/zonetool/localizedstrings/polish.json @@ -24,5 +24,108 @@ "LUA_MENU_CANCEL_UNLOCK_CAPS": "Anuluj odblokowanie", "DEPOT_GO_TO_THE_DEPOT": "Otwórz link", - "MENU_OPEN_MOTD": "Wiadomość dnia" -} \ No newline at end of file + "MENU_OPEN_MOTD": "Wiadomość dnia", + + "ACHIEVEMENT_NAME_0": "To by było na tyle?", + "ACHIEVEMENT_DETAIL_0": "Zdobądź wszystkie trofea w Call of Duty®: Modern Warfare® 2 Campaign Remastered.", + "ACHIEVEMENT_NAME_1": "Z powrotem w siodle", + "ACHIEVEMENT_DETAIL_1": "Pomóż szkolić lokalną milicję.", + "ACHIEVEMENT_NAME_2": "Niebezpieczeństwo", + "ACHIEVEMENT_DETAIL_2": "Zakwalifikuj się do elitarnego oddziału Shepherda.", + "ACHIEVEMENT_NAME_3": "Straszny mróz", + "ACHIEVEMENT_DETAIL_3": "Zinfiltruj bazę znajdującą się na śnieżnym górskim szczycie.", + "ACHIEVEMENT_NAME_4": "Do piachu", + "ACHIEVEMENT_DETAIL_4": "Znajdź Rojasa w faweli.", + "ACHIEVEMENT_NAME_5": "Royale z serem", + "ACHIEVEMENT_DETAIL_5": "Obroń Burger Town.", + "ACHIEVEMENT_NAME_6": "Na linie", + "ACHIEVEMENT_DETAIL_6": "Wydostań się z gułagu.", + "ACHIEVEMENT_NAME_7": "Desperacki plan", + "ACHIEVEMENT_DETAIL_7": "Wykonaj plan mający pomóc Amerykanom.", + "ACHIEVEMENT_NAME_8": "Bravo Delta", + "ACHIEVEMENT_DETAIL_8": "Odbij Biały Dom.", + "ACHIEVEMENT_NAME_9": "Pionek", + "ACHIEVEMENT_DETAIL_9": "Zaatakuj kryjówkę Makarowa.", + "ACHIEVEMENT_NAME_10": "Z deszczu...", + "ACHIEVEMENT_DETAIL_10": "Ukończ misję na cmentarzysku samolotów.", + "ACHIEVEMENT_NAME_11": "Do akt", + "ACHIEVEMENT_DETAIL_11": "Ukończ kampanię na dowolnym poziomie trudności.", + "ACHIEVEMENT_NAME_12": "Ofiary wojny", + "ACHIEVEMENT_DETAIL_12": "Ukończ kampanię na poziomie trudności Doświadczony lub Weteran.", + "ACHIEVEMENT_NAME_13": "Pierwszy dzień szkoły", + "ACHIEVEMENT_DETAIL_13": "Ukończ misje 'Syf jak co dzień' i 'Gracz zespołowy' na poziomie trudności Weteran.", + "ACHIEVEMENT_NAME_14": "Czarny diament", + "ACHIEVEMENT_DETAIL_14": "Ukończ misję 'Na krawędzi' na poziomie trudności Weteran.", + "ACHIEVEMENT_NAME_15": "Turistas", + "ACHIEVEMENT_DETAIL_15": "Ukończ misje 'Zatrzymanie' i 'Gniazdo szerszeni' na poziomie trudności Weteran.", + "ACHIEVEMENT_NAME_16": "Czerwony świt", + "ACHIEVEMENT_DETAIL_16": "Ukończ misje 'Rosomaki!' i 'Exodus' na poziomie trudności Weteran.", + "ACHIEVEMENT_NAME_17": "Więzień 627", + "ACHIEVEMENT_DETAIL_17": "Ukończ misje 'Lepsze jutro... było wczoraj' i 'Gułag' na poziomie trudności Weteran.", + "ACHIEVEMENT_NAME_18": "Cele uświęcają środki", + "ACHIEVEMENT_DETAIL_18": "Ukończ misję 'Plan awaryjny' na poziomie trudności Weteran.", + "ACHIEVEMENT_NAME_19": "Powrót do domu", + "ACHIEVEMENT_DETAIL_19": "Ukończ misje 'Z własnej woli', 'Drugie słońce' i 'Bravo Delta' na poziomie trudności Weteran.", + "ACHIEVEMENT_NAME_20": "Królowa bije wieżę", + "ACHIEVEMENT_DETAIL_20": "Ukończ misje 'Niedokończone sprawy' i 'Wróg mojego wroga' na poziomie trudności Weteran.", + "ACHIEVEMENT_NAME_21": "Poza siecią", + "ACHIEVEMENT_DETAIL_21": "Ukończ misje 'Jak za dawnych czasów' i 'Ostateczna rozgrywka' na poziomie trudności Weteran.", + "ACHIEVEMENT_NAME_22": "Mistrz Piekiełka", + "ACHIEVEMENT_DETAIL_22": "Przejdź Piekiełko w misji 'Syf jak co dzień' w mniej niż 30 sekund.", + "ACHIEVEMENT_NAME_23": "Duch", + "ACHIEVEMENT_DETAIL_23": "Podłóż C4 w misji 'Na krawędzi', nie dając się zauważyć i nie atakując nikogo podczas śnieżycy.", + "ACHIEVEMENT_NAME_24": "Pułkownik Sanderson", + "ACHIEVEMENT_DETAIL_24": "W misji 'Gniazdo szerszeni' zabij 7 kurczaków w mniej niż 10 sekund.", + "ACHIEVEMENT_NAME_25": "Ponad 10 piechurów", + "ACHIEVEMENT_DETAIL_25": "Zabij co najmniej 10 wrogów jednym pociskiem Predatora.", + "ACHIEVEMENT_NAME_26": "Przesadna brutalność", + "ACHIEVEMENT_DETAIL_26": "Użyj tarczy balistycznej do pokonania wroga.", + "ACHIEVEMENT_NAME_27": "Puk, puk", + "ACHIEVEMENT_DETAIL_27": "Zabij 4 wrogów 4 strzałami podczas ujęcia w zwolnionym tempie.", + "ACHIEVEMENT_NAME_28": "Jak Predator", + "ACHIEVEMENT_DETAIL_28": "Zabij 6 wrogów z rzędu bronią termowizyjną.", + "ACHIEVEMENT_NAME_29": "Dwie pieczenie na jednym ogniu", + "ACHIEVEMENT_DETAIL_29": "Zabij 2 wrogów jednym pociskiem.", + "ACHIEVEMENT_NAME_30": "Nieuczęszczane szlaki", + "ACHIEVEMENT_DETAIL_30": "Znajdź 22 dane wywiadu. ", + "ACHIEVEMENT_NAME_31": "Nic się nie ukryje", + "ACHIEVEMENT_DETAIL_31": "Znajdź 45 danych wywiadu. ", + "ACHIEVEMENT_NAME_32": "Przejazdem", + "ACHIEVEMENT_DETAIL_32": "Zabij 20 wrogów z rzędu, jadąc pojazdem.", + "ACHIEVEMENT_NAME_33": "Upadek", + "ACHIEVEMENT_DETAIL_33": "Zabij 2 zjeżdżających po linie wrogów, zanim dotrą na ziemię.", + "ACHIEVEMENT_NAME_34": "Desperado", + "ACHIEVEMENT_DETAIL_34": "Zabij 5 wrogów z rzędu różną bronią lub dodatkami.", + "ACHIEVEMENT_NAME_35": "Na dwie ręce", + "ACHIEVEMENT_DETAIL_35": "Zabij 10 wrogów z rzędu bronią Akimbo.", + "ACHIEVEMENT_NAME_36": "Podchody", + "ACHIEVEMENT_DETAIL_36": "Zabij wroga nożem tak, by cię nie zauważył.", + "ACHIEVEMENT_NAME_37": "Trójkąt", + "ACHIEVEMENT_DETAIL_37": "Zabij co najmniej 3 wrogów jednym pociskiem z granatnika.", + "ACHIEVEMENT_NAME_38": "Cel potwierdzony", + "ACHIEVEMENT_DETAIL_38": "Poinstruuj Badgera, by zabił 80 wrogów w misji 'Exodus'.", + "ACHIEVEMENT_NAME_39": "Anioł Wybawiciel", + "ACHIEVEMENT_DETAIL_39": "Nie pozwól zniszczyć swojego Predatora w misji 'Plan awaryjny'.", + "ACHIEVEMENT_NAME_40": "Nie wciskać!!!", + "ACHIEVEMENT_DETAIL_40": "Użyj czerwonych dzwonków znajdujących się w obu pokojach i przeżyj atak.", + "ACHIEVEMENT_NAME_41": "Gdy uczeń przerasta mistrza", + "ACHIEVEMENT_DETAIL_41": "Pobij czas BX w misji 'Syf jak co dzień'.", + "ACHIEVEMENT_NAME_42": "Prawdziwa zabawa bronią", + "ACHIEVEMENT_DETAIL_42": "Ukończ misję inną niż 'Syf jak co dzień' i 'Ostateczna rozgrywka' bez przeładowania i walki wręcz.", + "ACHIEVEMENT_NAME_43": "Prekognitywna paranoja", + "ACHIEVEMENT_DETAIL_43": "Zabij Shepherda.", + "ACHIEVEMENT_NAME_44": "Nieśmiertelny", + "ACHIEVEMENT_DETAIL_44": "Ukończ każdą z misji na dowolnym poziomie trudności, nie ginąc i nie wczytując punktu kontrolnego.", + "ACHIEVEMENT_NAME_45": "Czyste niebo", + "ACHIEVEMENT_DETAIL_45": "Zniszcz oba BTR-y bez użycia dronów Predator w misji 'Rosomaki!'.", + "ACHIEVEMENT_NAME_46": "Podkładacz min", + "ACHIEVEMENT_DETAIL_46": "Zabij 11 wrogów minami Claymore w misji 'Niedokończone sprawy'.", + "ACHIEVEMENT_NAME_47": "Polowanie na ptaki", + "ACHIEVEMENT_DETAIL_47": "Zniszcz 10 helikopterów wyrzutnią Javelin w misji 'Z własnej woli'.", + "ACHIEVEMENT_NAME_48": "Gorący ziemniak", + "ACHIEVEMENT_DETAIL_48": "Zniszcz helikopter za pomocą granatów odłamkowych w misji 'Lepsze jutro... było wczoraj'.", + "ACHIEVEMENT_NAME_49": "Szkolenie klauna", + "ACHIEVEMENT_DETAIL_49": "U Rangersów nie ma miejsca dla klaunów.", + "ACHIEVEMENT_NAME_50": "W dyńkę", + "ACHIEVEMENT_DETAIL_50": "Zabij wroga bezpośrednim trafieniem granatem odłamkowym w głowę." +} diff --git a/data/zonetool/localizedstrings/portuguese.json b/data/zonetool/localizedstrings/portuguese.json index 32aea6ac..65df95f6 100644 --- a/data/zonetool/localizedstrings/portuguese.json +++ b/data/zonetool/localizedstrings/portuguese.json @@ -24,5 +24,108 @@ "LUA_MENU_CANCEL_UNLOCK_CAPS": "Cancelar desbloqueio", "DEPOT_GO_TO_THE_DEPOT": "Abrir link", - "MENU_OPEN_MOTD": "Abrir mensagem do dia" -} \ No newline at end of file + "MENU_OPEN_MOTD": "Abrir mensagem do dia", + + "ACHIEVEMENT_NAME_0": "Isso É Tudo?", + "ACHIEVEMENT_DETAIL_0": "Obtenha todos os troféus disponíveis para Call of Duty®: Modern Warfare® 2 Campaign Remastered.", + "ACHIEVEMENT_NAME_1": "De Volta à Ativa", + "ACHIEVEMENT_DETAIL_1": "Ajude a treinar a milícia local.", + "ACHIEVEMENT_NAME_2": "Perigo Próximo", + "ACHIEVEMENT_DETAIL_2": "Seja escolhido a dedo para o esquadrão de elite de Shepherd.", + "ACHIEVEMENT_NAME_3": "Entrando Numa Fria", + "ACHIEVEMENT_DETAIL_3": "Infiltre-se na base secundária na montanha nevada.", + "ACHIEVEMENT_NAME_4": "Mande-o Para o Saco", + "ACHIEVEMENT_DETAIL_4": "Encontre Rojas nas favelas.", + "ACHIEVEMENT_NAME_5": "Queijo Duplo, Por Favor", + "ACHIEVEMENT_DETAIL_5": "Defenda o Burger Town.", + "ACHIEVEMENT_NAME_6": "Hora do Rapel!", + "ACHIEVEMENT_DETAIL_6": "Invada o gulag.", + "ACHIEVEMENT_NAME_7": "Medidas Extremas", + "ACHIEVEMENT_DETAIL_7": "Execute o plano para ajudar os Americanos.", + "ACHIEVEMENT_NAME_8": "Whiskey Hotel", + "ACHIEVEMENT_DETAIL_8": "Retome Whiskey Hotel.", + "ACHIEVEMENT_NAME_9": "O Peão", + "ACHIEVEMENT_DETAIL_9": "Ataque o abrigo de Makarov.", + "ACHIEVEMENT_NAME_10": "Saindo de Uma Enrascada...", + "ACHIEVEMENT_DETAIL_10": "Conclua a missão no cemitério de aviões.", + "ACHIEVEMENT_NAME_11": "Para Registrar", + "ACHIEVEMENT_DETAIL_11": "Conclua a Campanha individual em qualquer dificuldade.", + "ACHIEVEMENT_NAME_12": "O Preço da Guerra", + "ACHIEVEMENT_DETAIL_12": "Conclua a Campanha individual na dificuldade Casca-grossa ou Veterano.", + "ACHIEVEMENT_NAME_13": "Primeiro Dia na Escola", + "ACHIEVEMENT_DETAIL_13": "Conclua ''Outro dia, a mesma merda'' e ''Jogador de equipe'' na dificuldade Veterano.", + "ACHIEVEMENT_NAME_14": "Diamante Negro", + "ACHIEVEMENT_DETAIL_14": "Conclua ''À beira do abismo'' na dificuldade Veterano.", + "ACHIEVEMENT_NAME_15": "Turistas", + "ACHIEVEMENT_DETAIL_15": "Conclua ''Derrubada'' e ''O vespeiro'' na dificuldade Veterano.", + "ACHIEVEMENT_NAME_16": "Aurora Vermelha", + "ACHIEVEMENT_DETAIL_16": "Conclua ''Wolverines!'' e ''Exodus'' na dificuldade Veterano.", + "ACHIEVEMENT_NAME_17": "Prisioneiro 627", + "ACHIEVEMENT_DETAIL_17": "Conclua ''O único dia fácil... foi ontem'' e ''O gulag'' na dificuldade Veterano.", + "ACHIEVEMENT_NAME_18": "Os Fins Justificam os Meios", + "ACHIEVEMENT_DETAIL_18": "Conclua ''Contingência'' na dificuldade Veterano.", + "ACHIEVEMENT_NAME_19": "De Volta ao Lar", + "ACHIEVEMENT_DETAIL_19": "Conclua ''Por sua própria vontade'', ''Segundo sol'' e ''Whiskey Hotel'' na dificuldade Veterano.", + "ACHIEVEMENT_NAME_20": "Rainha Captura Torre", + "ACHIEVEMENT_DETAIL_20": "Conclua ''Pontas soltas'' e ''O inimigo do meu inimigo'' na dificuldade Veterano.", + "ACHIEVEMENT_NAME_21": "Fora do Mapa", + "ACHIEVEMENT_DETAIL_21": "Conclua ''Como nos velhos tempos'' e ''Objetivo final'' na dificuldade Veterano.", + "ACHIEVEMENT_NAME_22": "Rei do Fosso", + "ACHIEVEMENT_DETAIL_22": "Conclua ''O fosso'' em ''Outro dia, a mesma merda'' com tempo final menor que 30 segundos.", + "ACHIEVEMENT_NAME_23": "Fantasma", + "ACHIEVEMENT_DETAIL_23": "Arme o C4 em ''À beira do abismo'' sem alertar ou ferir ninguém na nevasca.", + "ACHIEVEMENT_NAME_24": "Coronel Sanderson", + "ACHIEVEMENT_DETAIL_24": "Mate 7 galinhas em menos de 10 segundos em ''O vespeiro''.", + "ACHIEVEMENT_NAME_25": "Dia do Predador", + "ACHIEVEMENT_DETAIL_25": "Mate pelo menos 10 inimigos com um míssil do Predator.", + "ACHIEVEMENT_NAME_26": "Brutalidade Desnecessária", + "ACHIEVEMENT_DETAIL_26": "Use um escudo antimotim para espancar um inimigo.", + "ACHIEVEMENT_NAME_27": "Toc, Toc", + "ACHIEVEMENT_DETAIL_27": "Mate 4 inimigos com 4 disparos durante uma invasão em câmera lenta.", + "ACHIEVEMENT_NAME_28": "Pode Vir Quente", + "ACHIEVEMENT_DETAIL_28": "Mate 6 inimigos seguidos usando uma arma com visão térmica.", + "ACHIEVEMENT_NAME_29": "Dois Pássaros, Uma Pedrada", + "ACHIEVEMENT_DETAIL_29": "Mate 2 inimigos com um único projétil.", + "ACHIEVEMENT_NAME_30": "O Caminho Menos Percorrido", + "ACHIEVEMENT_DETAIL_30": "Colete 22 itens de inteligência inimiga.", + "ACHIEVEMENT_NAME_31": "Pente-Fino", + "ACHIEVEMENT_DETAIL_31": "Colete 45 itens de inteligência inimiga.", + "ACHIEVEMENT_NAME_32": "Passando por Cima", + "ACHIEVEMENT_DETAIL_32": "Mate 20 inimigos seguidos enquanto dirige um veículo.", + "ACHIEVEMENT_NAME_33": "Maior Será a Queda", + "ACHIEVEMENT_DETAIL_33": "Mate 2 inimigos descendo de corda seguidos antes que eles toquem o chão.", + "ACHIEVEMENT_NAME_34": "Desesperado", + "ACHIEVEMENT_DETAIL_34": "Mate 5 inimigos seguidos usando 5 armas ou acessórios diferentes.", + "ACHIEVEMENT_NAME_35": "Com as Duas Mãos", + "ACHIEVEMENT_DETAIL_35": "Mate 10 inimigos seguidos usando armas duplas.", + "ACHIEVEMENT_NAME_36": "Bobeou, Dançou", + "ACHIEVEMENT_DETAIL_36": "Esfaqueie um inimigo sem ele sequer perceber sua presença.", + "ACHIEVEMENT_NAME_37": "Ménage à Trois", + "ACHIEVEMENT_DETAIL_37": "Mate pelo menos 3 inimigos com um único disparo de lança-granadas.", + "ACHIEVEMENT_NAME_38": "Alvo Confirmado", + "ACHIEVEMENT_DETAIL_38": "Ordene o Honey Badger a matar 80 inimigos em ''Exodus''.", + "ACHIEVEMENT_NAME_39": "Anjo Salvador", + "ACHIEVEMENT_DETAIL_39": "Não deixe seu VANT Predator ser destruído em ''Contingência''.", + "ACHIEVEMENT_NAME_40": "NÃO Aperte Este Botão", + "ACHIEVEMENT_DETAIL_40": "Toque o sino vermelho nas duas salas e sobreviva ao ataque.", + "ACHIEVEMENT_NAME_41": "O Aprendiz Supera o Mestre", + "ACHIEVEMENT_DETAIL_41": "Bata o recorde da BX em ''Outro dia, a mesma merda''.", + "ACHIEVEMENT_NAME_42": "O Verdadeiro Jogo de Armas", + "ACHIEVEMENT_DETAIL_42": "Complete qualquer missão fora ''Outro dia, a mesma merda'' e ''Objetivo final'' sem CaC ou recargas.", + "ACHIEVEMENT_NAME_43": "Paranoia Precognitiva", + "ACHIEVEMENT_DETAIL_43": "Mate Shepherd.", + "ACHIEVEMENT_NAME_44": "Imortal", + "ACHIEVEMENT_DETAIL_44": "Conclua todas as missões sem morrer ou voltar a pontos de controle em qualquer dificuldade.", + "ACHIEVEMENT_NAME_45": "Céus Silenciosos", + "ACHIEVEMENT_DETAIL_45": "Destrua os dois BTRs sem usar VANTs Predator em ''Wolverines!''", + "ACHIEVEMENT_NAME_46": "Olhe por Onde Anda", + "ACHIEVEMENT_DETAIL_46": "Mate 11 inimigos usando Claymores em ''Pontas soltas''.", + "ACHIEVEMENT_NAME_47": "Caçando Pássaros", + "ACHIEVEMENT_DETAIL_47": "Destrua 10 helicópteros usando o lançador Javelin em ''Por sua própria vontade''.", + "ACHIEVEMENT_NAME_48": "Batata Quente", + "ACHIEVEMENT_DETAIL_48": "Destrua o helicóptero usando granadas de fragmentação em ''O único dia fácil... foi ontem''.", + "ACHIEVEMENT_NAME_49": "Palhaço em Treinamento", + "ACHIEVEMENT_DETAIL_49": "Os Rangers do Exército Americano não aceitam palhaços.", + "ACHIEVEMENT_NAME_50": "Na Cachola", + "ACHIEVEMENT_DETAIL_50": "Mate um inimigo com o dano de impacto de uma granada de fragmentação na cabeça." +} diff --git a/data/zonetool/localizedstrings/russian.json b/data/zonetool/localizedstrings/russian.json index 7dd687d1..e68eb706 100644 --- a/data/zonetool/localizedstrings/russian.json +++ b/data/zonetool/localizedstrings/russian.json @@ -434,5 +434,108 @@ "WEAPON_UMP45_SILENCER": "UMP45 с глушителем", "WEAPON_UMP45_THERMAL": "UMP45 с тепловизором", "WEAPON_UMP45_XMAGS": "UMP45 с магазином повышенной емкости", - "WEAPON_WA2000_FMJ": "WA2000 с ЦМ патронами" -} \ No newline at end of file + "WEAPON_WA2000_FMJ": "WA2000 с ЦМ патронами", + + "ACHIEVEMENT_NAME_0": "Это все, на что вы способны?", + "ACHIEVEMENT_DETAIL_0": "Получить все награды игры ''Call of Duty®: Modern Warfare® 2. Обновленная кампания''.", + "ACHIEVEMENT_NAME_1": "Снова в седле", + "ACHIEVEMENT_DETAIL_1": "Помочь обучить местное ополчение.", + "ACHIEVEMENT_NAME_2": "Повышенный риск", + "ACHIEVEMENT_DETAIL_2": "Пройти отбор в элитный отряд Шепарда.", + "ACHIEVEMENT_NAME_3": "Холодный прием", + "ACHIEVEMENT_DETAIL_3": "Проникнуть на базу на заснеженном горном склоне.", + "ACHIEVEMENT_NAME_4": "Всем лежать!", + "ACHIEVEMENT_DETAIL_4": "Найти Рохаса в фавелах.", + "ACHIEVEMENT_NAME_5": "Двойной с сыром", + "ACHIEVEMENT_DETAIL_5": "Защитить закусочную ''Бургер Таун''.", + "ACHIEVEMENT_NAME_6": "Мыло и веревка", + "ACHIEVEMENT_DETAIL_6": "Взять штурмом колонию.", + "ACHIEVEMENT_NAME_7": "Отчаянные времена", + "ACHIEVEMENT_DETAIL_7": "Выполнить план помощи американцам.", + "ACHIEVEMENT_NAME_8": "Виски-Хоутел", + "ACHIEVEMENT_DETAIL_8": "Вернуть ''Виски-Хоутел''.", + "ACHIEVEMENT_NAME_9": "Пешка", + "ACHIEVEMENT_DETAIL_9": "Взять штурмом логово Макарова.", + "ACHIEVEMENT_NAME_10": "Из огня...", + "ACHIEVEMENT_DETAIL_10": "Выполнить задание на свалке для самолетов.", + "ACHIEVEMENT_NAME_11": "Для протокола", + "ACHIEVEMENT_DETAIL_11": "Пройти кампанию для одного игрока на любом уровне сложности.", + "ACHIEVEMENT_NAME_12": "Цена войны", + "ACHIEVEMENT_DETAIL_12": "Пройти кампанию для одного игрока на уровне сложности ''Закаленный'' или ''Ветеран''.", + "ACHIEVEMENT_NAME_13": "Первый раз в первый класс", + "ACHIEVEMENT_DETAIL_13": "Завершить эпизоды ''Курс молодого бойца'' и ''Командный игрок'' на уровне сложности ''Ветеран''.", + "ACHIEVEMENT_NAME_14": "Черный бриллиант", + "ACHIEVEMENT_DETAIL_14": "Завершить эпизод ''Скалолаз'' на уровне сложности ''Ветеран''.", + "ACHIEVEMENT_NAME_15": "Туристы", + "ACHIEVEMENT_DETAIL_15": "Завершить эпизоды ''Охота'' и ''Осиное гнездо'' на уровне сложности ''Ветеран''.", + "ACHIEVEMENT_NAME_16": "Алая заря", + "ACHIEVEMENT_DETAIL_16": "Завершить эпизоды ''Росомахи!'' и ''Исход'' на уровне сложности ''Ветеран''.", + "ACHIEVEMENT_NAME_17": "Заключенный №627", + "ACHIEVEMENT_DETAIL_17": "Завершить эпизоды ''Отдыхать надо было вчера'' и ''Колония'' на уровне сложности ''Ветеран''.", + "ACHIEVEMENT_NAME_18": "Цель оправдывает средства", + "ACHIEVEMENT_DETAIL_18": "Завершить эпизод ''Досадная случайность'' на уровне сложности ''Ветеран''.", + "ACHIEVEMENT_NAME_19": "Возвращение домой", + "ACHIEVEMENT_DETAIL_19": "Завершить ''По собственному желанию'', ''Второе солнце'', ''Виски-Хоутел'' на сложности ''Ветеран''.", + "ACHIEVEMENT_NAME_20": "Ферзь бьет ладью", + "ACHIEVEMENT_DETAIL_20": "Завершить эпизоды ''Неоконченные дела'' и ''Враг моего врага'' на уровне сложности ''Ветеран''.", + "ACHIEVEMENT_NAME_21": "В отрыве", + "ACHIEVEMENT_DETAIL_21": "Завершить эпизоды ''Все как раньше'' и ''Финал'' на уровне сложности ''Ветеран''.", + "ACHIEVEMENT_NAME_22": "Мастер полигона", + "ACHIEVEMENT_DETAIL_22": "Пройти полигон в эпизоде ''Курс молодого бойца'' менее чем за 30 секунд.", + "ACHIEVEMENT_NAME_23": "Призрак", + "ACHIEVEMENT_DETAIL_23": "Заложить заряд C4 в эпизоде ''Скалолаз'', не подняв тревогу и не ранив ни одного врага.", + "ACHIEVEMENT_NAME_24": "Полковник Сандерсон", + "ACHIEVEMENT_DETAIL_24": "Убить 7 куриц менее чем за 10 секунд в эпизоде ''Осиное гнездо''.", + "ACHIEVEMENT_NAME_25": "Десять пеших целей", + "ACHIEVEMENT_DETAIL_25": "Убить не менее 10 противников одной ракетой ''Хищник''.", + "ACHIEVEMENT_NAME_26": "Зверства полиции", + "ACHIEVEMENT_DETAIL_26": "Убить противника ударами полицейского щита.", + "ACHIEVEMENT_NAME_27": "Тук-тук", + "ACHIEVEMENT_DETAIL_27": "Убить 4 противников четырьмя выстрелами во время штурма в замедлении.", + "ACHIEVEMENT_NAME_28": "Люблю погорячее", + "ACHIEVEMENT_DETAIL_28": "Убить 6 противников подряд тепловым оружием.", + "ACHIEVEMENT_NAME_29": "Два зайца", + "ACHIEVEMENT_DETAIL_29": "Убить 2 противников одной пулей.", + "ACHIEVEMENT_NAME_30": "Нехоженые тропы", + "ACHIEVEMENT_DETAIL_30": "Собрать 22 фрагмента разведданных.", + "ACHIEVEMENT_NAME_31": "Заглянуть под каждый камень", + "ACHIEVEMENT_DETAIL_31": "Собрать 45 фрагментов разведданных.", + "ACHIEVEMENT_NAME_32": "Гроза пешеходов", + "ACHIEVEMENT_DETAIL_32": "Убить 20 противников подряд, управляя транспортным средством.", + "ACHIEVEMENT_NAME_33": "Жесткая посадка", + "ACHIEVEMENT_DETAIL_33": "Убить подряд 2 противников, спускающихся по тросам.", + "ACHIEVEMENT_NAME_34": "Универсал", + "ACHIEVEMENT_DETAIL_34": "Убить 5 противников подряд, используя 5 разных видов оружия или модулей.", + "ACHIEVEMENT_NAME_35": "Стрельба по-македонски", + "ACHIEVEMENT_DETAIL_35": "Убить 10 противников подряд из парного оружия.", + "ACHIEVEMENT_NAME_36": "Нет покоя грешным душам", + "ACHIEVEMENT_DETAIL_36": "Зарезать противника, не подозревающего о вашем присутствии.", + "ACHIEVEMENT_NAME_37": "Тройной удар", + "ACHIEVEMENT_DETAIL_37": "Убить 3 противников одним выстрелом из гранатомета.", + "ACHIEVEMENT_NAME_38": "Цель подтверждена", + "ACHIEVEMENT_DETAIL_38": "Обеспечить убийство Бэджером 80 противников в эпизоде ''Исход''.", + "ACHIEVEMENT_NAME_39": "Ангел-спаситель", + "ACHIEVEMENT_DETAIL_39": "Не допустить уничтожения БПЛА ''Хищник'' в эпизоде ''Досадная случайность''.", + "ACHIEVEMENT_NAME_40": "Не трогай кнопку!", + "ACHIEVEMENT_DETAIL_40": "Позвонить в красный колокольчик в обеих комнатах и пережить атаку.", + "ACHIEVEMENT_NAME_41": "Ученик превзошел учителя", + "ACHIEVEMENT_DETAIL_41": "Побить рекорд BX в эпизоде ''Курс молодого бойца''.", + "ACHIEVEMENT_NAME_42": "Виртуозный стрелок", + "ACHIEVEMENT_DETAIL_42": "Завершить любое задание кроме ''Курса молодого бойца'' и ''Финала'' без перезарядки/рукопашного боя.", + "ACHIEVEMENT_NAME_43": "Превентивная паранойя", + "ACHIEVEMENT_DETAIL_43": "Убить Шепарда.", + "ACHIEVEMENT_NAME_44": "Бессмертный", + "ACHIEVEMENT_DETAIL_44": "Завершить все задания на любом уровне сложности, не погибая и не возвращаясь к контрольным точкам.", + "ACHIEVEMENT_NAME_45": "Мирное небо", + "ACHIEVEMENT_DETAIL_45": "Уничтожить оба БТР-а, не используя БПЛА ''Хищник'', в эпизоде ''Росомахи!''.", + "ACHIEVEMENT_NAME_46": "Минер", + "ACHIEVEMENT_DETAIL_46": "Убить 11 противников с помощью мин в эпизоде ''Неоконченные дела''.", + "ACHIEVEMENT_NAME_47": "Птицелов", + "ACHIEVEMENT_DETAIL_47": "Сбить 10 вертолетов из ПТРК ''Джавелин'' в эпизоде ''По собственному желанию''.", + "ACHIEVEMENT_NAME_48": "Горячая картошка", + "ACHIEVEMENT_DETAIL_48": "Уничтожить вертолет осколочными гранатами в эпизоде ''Отдыхать надо было вчера''.", + "ACHIEVEMENT_NAME_49": "Клоунада", + "ACHIEVEMENT_DETAIL_49": "В рядах рейнджеров не место клоунам.", + "ACHIEVEMENT_NAME_50": "Раскинь мозгами!", + "ACHIEVEMENT_DETAIL_50": "Убить противника прямым попаданием осколочной гранаты в голову." +} diff --git a/data/zonetool/localizedstrings/spanish.json b/data/zonetool/localizedstrings/spanish.json index 2b1299de..92131995 100644 --- a/data/zonetool/localizedstrings/spanish.json +++ b/data/zonetool/localizedstrings/spanish.json @@ -24,5 +24,108 @@ "LUA_MENU_CANCEL_UNLOCK_CAPS": "Cancelar desbloqueo", "DEPOT_GO_TO_THE_DEPOT": "Abrir vínculo", - "MENU_OPEN_MOTD": "Mensaje del día" -} \ No newline at end of file + "MENU_OPEN_MOTD": "Mensaje del día", + + "ACHIEVEMENT_NAME_0": "¿Eso es todo?", + "ACHIEVEMENT_DETAIL_0": "Consigue todos los trofeos disponibles en Call of Duty®: Modern Warfare® 2 Campaign Remastered.", + "ACHIEVEMENT_NAME_1": "De vuelta a la acción", + "ACHIEVEMENT_DETAIL_1": "Instruye a la milicia local.", + "ACHIEVEMENT_NAME_2": "Peligro cercano", + "ACHIEVEMENT_DETAIL_2": "Haz que te escojan para el pelotón de Shepherd.", + "ACHIEVEMENT_NAME_3": "Recibimiento frío", + "ACHIEVEMENT_DETAIL_3": "Infíltrate en la base de la ladera nevada.", + "ACHIEVEMENT_NAME_4": "Identifícalo y a la bolsa", + "ACHIEVEMENT_DETAIL_4": "Encuentra a Rojas en las favelas.", + "ACHIEVEMENT_NAME_5": "Royal con queso", + "ACHIEVEMENT_DETAIL_5": "Defiende el Burger Town.", + "ACHIEVEMENT_NAME_6": "Soap en apuros", + "ACHIEVEMENT_DETAIL_6": "Asalta el gulag.", + "ACHIEVEMENT_NAME_7": "Tiempos desesperados", + "ACHIEVEMENT_DETAIL_7": "Ejecuta el plan para ayudar a los americanos.", + "ACHIEVEMENT_NAME_8": "Whiskey Hotel", + "ACHIEVEMENT_DETAIL_8": "Recupera Whiskey Hotel.", + "ACHIEVEMENT_NAME_9": "El peón", + "ACHIEVEMENT_DETAIL_9": "Ataca el piso franco de Makarov.", + "ACHIEVEMENT_NAME_10": "De la sartén al fuego...", + "ACHIEVEMENT_DETAIL_10": "Completa la misión en el cementerio de aviones.", + "ACHIEVEMENT_NAME_11": "Para que conste", + "ACHIEVEMENT_DETAIL_11": "Completa la campaña individual en cualquier dificultad.", + "ACHIEVEMENT_NAME_12": "El precio de la guerra", + "ACHIEVEMENT_DETAIL_12": "Completa la campaña individual en dificultad Curtido o Veterano.", + "ACHIEVEMENT_NAME_13": "Primer día de clase", + "ACHIEVEMENT_DETAIL_13": "Completa 'Otro día, la misma mierda' y 'Jugador de equipo' en dificultad Veterano.", + "ACHIEVEMENT_NAME_14": "Diamante negro", + "ACHIEVEMENT_DETAIL_14": "Completa 'Máximo riesgo' en dificultad Veterano.", + "ACHIEVEMENT_NAME_15": "Turistas", + "ACHIEVEMENT_DETAIL_15": "Completa 'En búsqueda y captura' y 'Avispero' en dificultad Veterano.", + "ACHIEVEMENT_NAME_16": "Amanecer rojo", + "ACHIEVEMENT_DETAIL_16": "Completa '¡Wolverines!' y 'Éxodo' en dificultad Veterano.", + "ACHIEVEMENT_NAME_17": "Prisionero 627", + "ACHIEVEMENT_DETAIL_17": "Completa 'El único día fácil... fue ayer' y 'El gulag' en dificultad Veterano.", + "ACHIEVEMENT_NAME_18": "El fin justifica los medios", + "ACHIEVEMENT_DETAIL_18": "Completa 'Contingencia' en dificultad veterano.", + "ACHIEVEMENT_NAME_19": "Vuelta a casa", + "ACHIEVEMENT_DETAIL_19": "Completa 'Por voluntad propia', 'Segundo sol' y 'Whiskey Hotel' en dificultad Veterano.", + "ACHIEVEMENT_NAME_20": "La reina se come a la torre", + "ACHIEVEMENT_DETAIL_20": "Completa 'Cabos sueltos' y 'El enemigo de mi enemigo' en dificultad Veterano.", + "ACHIEVEMENT_NAME_21": "Invisible", + "ACHIEVEMENT_DETAIL_21": "Completa 'Como en los viejos tiempos' y 'Fin de partida' en Veterano.", + "ACHIEVEMENT_NAME_22": "Jefe del foso", + "ACHIEVEMENT_DETAIL_22": "Recorre el foso en 'Otro día, la misma mierda' y acaba en menos de 30 segundos.", + "ACHIEVEMENT_NAME_23": "Fantasma", + "ACHIEVEMENT_DETAIL_23": "Coloca el C4 en 'Máximo riesgo' sin alertar ni herir a nadie en la ventisca.", + "ACHIEVEMENT_NAME_24": "Coronel Sanderson", + "ACHIEVEMENT_DETAIL_24": "Mata a 7 gallinas en menos de 10 segundos en 'Avispero'.", + "ACHIEVEMENT_NAME_25": "Más de 10 enemigos", + "ACHIEVEMENT_DETAIL_25": "Mata al menos a 10 enemigos con un misil del Predator.", + "ACHIEVEMENT_NAME_26": "Violencia innecesaria", + "ACHIEVEMENT_DETAIL_26": "Usa un escudo antidisturbios para derribar a un enemigo.", + "ACHIEVEMENT_NAME_27": "Toc toc", + "ACHIEVEMENT_DETAIL_27": "Mata a 4 enemigos con 4 tiros durante una incursión a cámara lenta.", + "ACHIEVEMENT_NAME_28": "En caliente", + "ACHIEVEMENT_DETAIL_28": "Mata a 6 enemigos seguidos con un arma térmica.", + "ACHIEVEMENT_NAME_29": "Dos pájaros de un tiro", + "ACHIEVEMENT_DETAIL_29": "Mata a 2 enemigos con una sola bala.", + "ACHIEVEMENT_NAME_30": "El camino menos transitado", + "ACHIEVEMENT_DETAIL_30": "Consigue 22 objetos con información enemiga.", + "ACHIEVEMENT_NAME_31": "Remover cielo y tierra", + "ACHIEVEMENT_DETAIL_31": "Consigue 45 objetos con información enemiga.", + "ACHIEVEMENT_NAME_32": "Tiroteo en marcha", + "ACHIEVEMENT_DETAIL_32": "Mata a 20 enemigos seguidos conduciendo un vehículo.", + "ACHIEVEMENT_NAME_33": "Más dura será la caída", + "ACHIEVEMENT_DETAIL_33": "Mata a 2 enemigos seguidos que hagan rápel antes de que aterricen.", + "ACHIEVEMENT_NAME_34": "Desperado", + "ACHIEVEMENT_DETAIL_34": "Mata a 5 rivales seguidos con 5 armas o accesorios distintos.", + "ACHIEVEMENT_NAME_35": "Mira mamá, con dos manos", + "ACHIEVEMENT_DETAIL_35": "Mata a 10 enemigos seguidos empuñando armas duales.", + "ACHIEVEMENT_NAME_36": "No hay paz para los cautos", + "ACHIEVEMENT_DETAIL_36": "Apuñala a un enemigo sin que se percate de tu presencia.", + "ACHIEVEMENT_NAME_37": "Trío", + "ACHIEVEMENT_DETAIL_37": "Mata al menos a 3 enemigos de un solo tiro de lanzagranadas.", + "ACHIEVEMENT_NAME_38": "Blanco confirmado", + "ACHIEVEMENT_DETAIL_38": "Ordena que el Honey Badger mate a 80 enemigos en 'Éxodo'.", + "ACHIEVEMENT_NAME_39": "Ángel salvador", + "ACHIEVEMENT_DETAIL_39": "Evita que destruyan tu dron Predator en 'Contingencia'.", + "ACHIEVEMENT_NAME_40": "NO pulses este botón", + "ACHIEVEMENT_DETAIL_40": "Dale a la campanilla roja en ambas salas y sobrevive al ataque.", + "ACHIEVEMENT_NAME_41": "El estudiante supera al maestro", + "ACHIEVEMENT_DETAIL_41": "Supera el tiempo de BX en 'Otro día, la misma mierda'.", + "ACHIEVEMENT_NAME_42": "El verdadero juego de armas", + "ACHIEVEMENT_DETAIL_42": "Completa una misión salvo 'Otro día, la misma mierda' y 'Fin de partida' sin recargar ni usar CaC.", + "ACHIEVEMENT_NAME_43": "Paranoia precognitiva", + "ACHIEVEMENT_DETAIL_43": "Mata a Shepherd.", + "ACHIEVEMENT_NAME_44": "Inmortal", + "ACHIEVEMENT_DETAIL_44": "Completa todas las misiones sin morir ni recargar puntos de control en cualquier dificultad.", + "ACHIEVEMENT_NAME_45": "Cielo silencioso", + "ACHIEVEMENT_DETAIL_45": "Destruye los dos BTR sin usar drones Predator en '¡Wolverines!'.", + "ACHIEVEMENT_NAME_46": "Claymore", + "ACHIEVEMENT_DETAIL_46": "Mata a 11 enemigos con claymore en 'Cabos sueltos'.", + "ACHIEVEMENT_NAME_47": "Cazador de pájaros", + "ACHIEVEMENT_DETAIL_47": "Destruye 10 helicópteros con el Javelin en 'Por voluntad propia'.", + "ACHIEVEMENT_NAME_48": "Patata caliente", + "ACHIEVEMENT_DETAIL_48": "Destruye el helicóptero con granadas de fragmentación en 'El único día fácil... fue ayer'.", + "ACHIEVEMENT_NAME_49": "Escuela de payasos", + "ACHIEVEMENT_DETAIL_49": "El cuerpo de Rangers del ejército de EE. UU. no es lugar para payasos.", + "ACHIEVEMENT_NAME_50": "Cabecear", + "ACHIEVEMENT_DETAIL_50": "Mata a un enemigo con el impacto de una granada de fragmentación en la cabeza." +} diff --git a/src/client/component/achievements.cpp b/src/client/component/achievements.cpp new file mode 100644 index 00000000..becc11f3 --- /dev/null +++ b/src/client/component/achievements.cpp @@ -0,0 +1,280 @@ +#include +#include "loader/component_loader.hpp" + +#include "game/game.hpp" + +#include "achievements.hpp" +#include "console.hpp" +#include "scheduler.hpp" +#include "command.hpp" + +#include "game/ui_scripting/execution.hpp" + +#include +#include +#include + +#define ACHIEVEMENT_FILE_VERSION 1 +#define ACHIEVEMENT_FILE_SIGNATURE 'AM2H' + +namespace achievements +{ + namespace + { + std::mutex file_mutex; + + std::array achievements = + { + achievement_t(ACHIEVEMENT_ALL_ACHIEVEMENTS, "ACHIEVEMENTS_COMPLETED", ACHIEVEMENT_RARITY_3), + achievement_t(ACHIEVEMENT_1, "BACK_IN_THE_SADDLE", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_2, "DANGER_CLOSE", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_3, "COLD_SHOULDER", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_4, "TAGEM_AND_BAGEM", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_5, "ROYAL_WITH_CHEESE", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_6, "SOAP_ON_A_ROPE", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_7, "DESPERATE_TIMES", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_8, "HOUSTON_WE_HAVE_A_PROBLEM", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_9, "THE_PAWN", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_10, "OUT_OF_THE_FRYING_PAN", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_11, "FOR_THE_RECORD", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_12, "THE_PRICE_OF_WAR", ACHIEVEMENT_RARITY_2), + achievement_t(ACHIEVEMENT_13, "FIRST_DAY_OF_SCHOOL", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_14, "BLACK_DIAMOND", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_15, "TURISTAS", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_16, "RED_DAWN", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_17, "PRISONER_627", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_18, "ENDS_JUSTIFY_THE_MEANS", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_19, "HOME_COMING", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_20, "QUEEN_TAKES_ROOK", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_21, "OFF_THE_GRID", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_22, "PIT_BOSS", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_23, "GHOST", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_24, "COLONEL_SANDERSON", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_25, "TEN_PLUS_FOOT_MOBILES", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_26, "UNNECESSARY_ROUGHNESS", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_27, "KNOCK_KNOCK", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_28, "SOME_LIKE_IT_HOT", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_29, "TWO_BIRDS_WITH_ONE_STONE", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_30, "THE_ROAD_LESS_TRAVELED", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_31, "LEAVE_NO_STONE_UNTURNED", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_32, "DRIVE_BY", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_33, "THE_HARDER_THEY_FALL", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_34, "ONE_MAN_ARMY", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_35, "LOOK_MA_TWO_HANDS", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_36, "NO_REST_FOR_THE_WARY", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_37, "THREESOME", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_38, "TARGET_CONFIRMED", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_39, "ANGEL_SAVIOR", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_40, "NIGHT_MUSEUM", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_41, "STUDENT_MASTER", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_42, "REAL_GUN_GAME", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_43, "PRECOGNITIVE_PARANOIA", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_44, "IMMORTAL", ACHIEVEMENT_RARITY_2), + achievement_t(ACHIEVEMENT_45, "SILENT_SKIES", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_46, "CLAYMORE", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_47, "BIRD_HUNTER", ACHIEVEMENT_RARITY_1), + achievement_t(ACHIEVEMENT_48, "HOT_POTATO", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_49, "CLOWN_IN_TRAINING", ACHIEVEMENT_RARITY_0), + achievement_t(ACHIEVEMENT_50, "HEADBANGER", ACHIEVEMENT_RARITY_0), + }; + + struct achievement_file_t + { + std::uint32_t signature; + std::uint8_t version; + bool achievements[ACHIEVEMENT_COUNT]; + }; + + std::filesystem::path get_achievements_path() + { + return utils::properties::get_appdata_path() / "player/achievements.bin"; + } + + void get_achievements(achievement_file_t* file) + { + std::lock_guard _0(file_mutex); + const auto path = get_achievements_path().generic_string(); + + if (!utils::io::file_exists(path)) + { + return; + } + + const auto data = utils::io::read_file(path); + if (data.size() < sizeof(achievement_file_t)) + { + return; + } + + std::memcpy(file, data.data(), sizeof(achievement_file_t)); + if (file->signature != ACHIEVEMENT_FILE_SIGNATURE) + { + std::memset(file, 0, sizeof(achievement_file_t)); + } + } + + void write_achievements(achievement_file_t* data) + { + std::lock_guard _0(file_mutex); + + data->version = ACHIEVEMENT_FILE_VERSION; + data->signature = ACHIEVEMENT_FILE_SIGNATURE; + + const auto path = get_achievements_path(); + const auto str = std::string(reinterpret_cast(data), sizeof(achievement_file_t)); + utils::io::write_file(path.generic_string(), str, false); + } + + bool has_achievement(achievement_file_t* file, int id) + { + if (id >= ACHIEVEMENT_COUNT) + { + return false; + } + + return file->achievements[id]; + } + + std::optional get_achievement_id(const std::string& name) + { + for (auto i = 0; i < ACHIEVEMENT_COUNT; i++) + { + const auto achievement = &achievements[i]; + if (name == achievement->code) + { + return {achievement->id}; + } + } + + return {}; + } + + void notifiy_achievement_id(int id) + { + scheduler::once([=] + { + ui_scripting::notify("earned_achievement", {{"id", id}}); + }, scheduler::lui); + } + + bool should_get_platinum(achievement_file_t* file) + { + if (has_achievement(file, ACHIEVEMENT_ALL_ACHIEVEMENTS)) + { + return false; + } + + for (auto i = static_cast(ACHIEVEMENT_START); i < ACHIEVEMENT_COUNT; i++) + { + if (!file->achievements[i]) + { + return false; + } + } + + return true; + } + + void give_achievement_id_internal(achievement_file_t* file, int id) + { + get_achievements(file); + if (has_achievement(file, id)) + { + return; + } + + file->achievements[id] = true; + write_achievements(file); + notifiy_achievement_id(id); + } + + void give_achievement_id(achievement_file_t* file, int id) + { + give_achievement_id_internal(file, id); + if (should_get_platinum(file)) + { + give_achievement_id_internal(file, ACHIEVEMENT_ALL_ACHIEVEMENTS); + } + } + + void give_achievement(const std::string& name) + { + achievement_file_t file{}; + + const auto id = get_achievement_id(name); + if (!id.has_value()) + { + return; + } + + give_achievement_id(&file, id.value()); + } + + void scr_give_achievement_stub() + { + give_achievement(game::Scr_GetString(0)); + } + } + + int get_count() + { + return ACHIEVEMENT_COUNT; + } + + bool has_achievement(int id) + { + achievement_file_t file{}; + get_achievements(&file); + return has_achievement(&file, id); + } + + std::string get_name(int id) + { + return utils::string::va("ACHIEVEMENT_NAME_%i", id); + } + + std::string get_details(int id) + { + return utils::string::va("ACHIEVEMENT_DETAIL_%i", id); + } + + int get_rarity(int id) + { + if (id >= ACHIEVEMENT_COUNT) + { + return 0; + } + + return achievements[id].rarity; + } + + class component final : public component_interface + { + public: + void post_unpack() override + { + utils::hook::jump(0x1404B6240, scr_give_achievement_stub); + + command::add("reset_achievements", [] + { + achievement_file_t file{}; + write_achievements(&file); + }); + + command::add("give_achievement", [](const command::params& params) + { + if (params.size() < 2) + { + return; + } + + const auto id = std::atoi(params.get(1)); + achievement_file_t file{}; + get_achievements(&file); + give_achievement_id_internal(&file, id); + }); + } + }; +} + +REGISTER_COMPONENT(achievements::component) diff --git a/src/client/component/achievements.hpp b/src/client/component/achievements.hpp new file mode 100644 index 00000000..e2f7490e --- /dev/null +++ b/src/client/component/achievements.hpp @@ -0,0 +1,84 @@ +#pragma once + +namespace achievements +{ + enum achievement_rarity + { + ACHIEVEMENT_RARITY_0, + ACHIEVEMENT_RARITY_1, + ACHIEVEMENT_RARITY_2, + ACHIEVEMENT_RARITY_3, + }; + + enum achievement_id + { + ACHIEVEMENT_ALL_ACHIEVEMENTS = 0, + ACHIEVEMENT_START = 1, + ACHIEVEMENT_1 = 1, + ACHIEVEMENT_2, + ACHIEVEMENT_3, + ACHIEVEMENT_4, + ACHIEVEMENT_5, + ACHIEVEMENT_6, + ACHIEVEMENT_7, + ACHIEVEMENT_8, + ACHIEVEMENT_9, + ACHIEVEMENT_10, + ACHIEVEMENT_11, + ACHIEVEMENT_12, + ACHIEVEMENT_13, + ACHIEVEMENT_14, + ACHIEVEMENT_15, + ACHIEVEMENT_16, + ACHIEVEMENT_17, + ACHIEVEMENT_18, + ACHIEVEMENT_19, + ACHIEVEMENT_20, + ACHIEVEMENT_21, + ACHIEVEMENT_22, + ACHIEVEMENT_23, + ACHIEVEMENT_24, + ACHIEVEMENT_25, + ACHIEVEMENT_26, + ACHIEVEMENT_27, + ACHIEVEMENT_28, + ACHIEVEMENT_29, + ACHIEVEMENT_30, + ACHIEVEMENT_31, + ACHIEVEMENT_32, + ACHIEVEMENT_33, + ACHIEVEMENT_34, + ACHIEVEMENT_35, + ACHIEVEMENT_36, + ACHIEVEMENT_37, + ACHIEVEMENT_38, + ACHIEVEMENT_39, + ACHIEVEMENT_40, + ACHIEVEMENT_41, + ACHIEVEMENT_42, + ACHIEVEMENT_43, + ACHIEVEMENT_44, + ACHIEVEMENT_45, + ACHIEVEMENT_46, + ACHIEVEMENT_47, + ACHIEVEMENT_48, + ACHIEVEMENT_49, + ACHIEVEMENT_50, + ACHIEVEMENT_COUNT = 51, + ACHIEVEMENT_51, + ACHIEVEMENT_52, + }; + + struct achievement_t + { + achievement_id id; + std::string_view code; + achievement_rarity rarity; + }; + + int get_count(); + bool has_achievement(int id); + std::string get_name(int id); + std::string get_details(int id); + int get_rarity(int id); +} diff --git a/src/client/component/mods.cpp b/src/client/component/mods.cpp index 7edf56e7..49328546 100644 --- a/src/client/component/mods.cpp +++ b/src/client/component/mods.cpp @@ -332,6 +332,11 @@ namespace mods return mod_list; } + bool mod_exists(const std::string& folder) + { + return utils::io::directory_exists(utils::string::va("%s\\%s", MOD_FOLDER, folder.data())); + } + std::optional get_mod_info(const std::string& name) { const auto info_file = name + "/info.json"; @@ -353,6 +358,46 @@ namespace mods return {}; } + void load(const std::string& path) + { + if (!utils::io::directory_exists(path)) + { + console::error("Mod %s not found!\n", path.data()); + return; + } + + console::info("Loading mod %s\n", path.data()); + set_mod(path); + + if ((mod_info.path.has_value() && mod_requires_restart(mod_info.path.value())) || + mod_requires_restart(path)) + { + // vid_restart is still broken :( + console::info("Restarting...\n"); + full_restart("-mod "s + path); + } + else + { + restart(); + } + } + + void unload() + { + console::info("Unloading mod %s\n", mod_info.path.value().data()); + + if (mod_requires_restart(mod_info.path.value())) + { + console::info("Restarting...\n"); + full_restart(""); + } + else + { + clear_mod(); + restart(); + } + } + class component final : public component_interface { public: @@ -386,26 +431,7 @@ namespace mods } const auto path = params.get(1); - if (!utils::io::directory_exists(path)) - { - console::error("Mod %s not found!\n", path); - return; - } - - console::info("Loading mod %s\n", path); - set_mod(path); - - if ((mod_info.path.has_value() && mod_requires_restart(mod_info.path.value())) || - mod_requires_restart(path)) - { - // vid_restart is still broken :( - console::info("Restarting...\n"); - full_restart("-mod "s + path); - } - else - { - restart(); - } + load(path); }); command::add("unloadmod", [](const command::params& params) @@ -423,18 +449,7 @@ namespace mods return; } - console::info("Unloading mod %s\n", mod_info.path.value().data()); - - if (mod_requires_restart(mod_info.path.value())) - { - console::info("Restarting...\n"); - full_restart(""); - } - else - { - clear_mod(); - restart(); - } + unload(); }); command::add("com_restart", []() diff --git a/src/client/component/mods.hpp b/src/client/component/mods.hpp index 90ef9306..77e3eacf 100644 --- a/src/client/component/mods.hpp +++ b/src/client/component/mods.hpp @@ -28,8 +28,12 @@ namespace mods std::optional get_mod(); std::vector get_mod_zones(); + void load(const std::string& path); + void unload(); + std::vector get_mod_list(); std::optional get_mod_info(const std::string& mod); + bool mod_exists(const std::string& folder); nlohmann::json& get_current_stats(); void write_mod_stats(); diff --git a/src/client/component/motd.cpp b/src/client/component/motd.cpp index c8d9cc8a..ca557353 100644 --- a/src/client/component/motd.cpp +++ b/src/client/component/motd.cpp @@ -180,6 +180,7 @@ namespace motd { {"github", "https://github.com/fedddddd/h2-mod"}, {"donate", "https://www.paypal.com/donate/?hosted_button_id=LM5BA9UABEV4Q"}, + {"specops", "https://github.com/fedddddd/h2-specops-mod"}, {"credits_1", "https://github.com/momo5502"}, {"credits_2", "https://github.com/VladWinner"}, {"credits_3", "https://github.com/diamante0018"}, diff --git a/src/client/component/ui_scripting.cpp b/src/client/component/ui_scripting.cpp index e7d0393a..7053b72a 100644 --- a/src/client/component/ui_scripting.cpp +++ b/src/client/component/ui_scripting.cpp @@ -16,6 +16,7 @@ #include "language.hpp" #include "config.hpp" #include "motd.hpp" +#include "achievements.hpp" #include "game/ui_scripting/execution.hpp" #include "game/scripting/execution.hpp" @@ -481,6 +482,22 @@ namespace ui_scripting return info_table; }; + + mods_table["load"] = [](const std::string& mod) + { + scheduler::once([=]() + { + mods::load(mod); + }, scheduler::main); + }; + + mods_table["unload"] = [] + { + scheduler::once([]() + { + mods::unload(); + }, scheduler::main); + }; auto mods_stats_table = table(); mods_table["stats"] = mods_stats_table; @@ -656,6 +673,15 @@ namespace ui_scripting }; motd_table["hasmotd"] = motd::has_motd; + + auto achievements_table = table(); + lua["achievements"] = achievements_table; + + achievements_table["hasachievement"] = achievements::has_achievement; + achievements_table["getrarity"] = achievements::get_rarity; + achievements_table["getname"] = achievements::get_name; + achievements_table["getdetails"] = achievements::get_details; + achievements_table["count"] = achievements::get_count; } void start()