Remove localized_strings component
This commit is contained in:
parent
f4ee252daa
commit
33a18ca486
@ -1,298 +1,2 @@
|
|||||||
local spacing = 10
|
require("credits")
|
||||||
local topoffset = 15
|
require("mainmenu")
|
||||||
|
|
||||||
local extrawidth = 50
|
|
||||||
local extraheight1 = 0
|
|
||||||
|
|
||||||
local function makelink(element, link)
|
|
||||||
element:setHandleMouseMove(true)
|
|
||||||
element:setHandleMouseButton(true)
|
|
||||||
element:registerAnimationState("focused", {
|
|
||||||
color = {
|
|
||||||
r = 1,
|
|
||||||
g = 1,
|
|
||||||
b = 1
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
local entered = false
|
|
||||||
element:registerEventHandler("mouseenter", function()
|
|
||||||
if (not entered) then
|
|
||||||
Engine.PlaySound(CoD.SFX.MouseOver)
|
|
||||||
entered = true
|
|
||||||
end
|
|
||||||
|
|
||||||
element:animateToState("focused")
|
|
||||||
end)
|
|
||||||
|
|
||||||
element:registerEventHandler("mouseleave", function()
|
|
||||||
entered = false
|
|
||||||
element:animateToState("default")
|
|
||||||
end)
|
|
||||||
|
|
||||||
element:registerEventHandler("leftmousedown", function()
|
|
||||||
Engine.PlaySound(CoD.SFX.MouseClick)
|
|
||||||
game:openlink(link)
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
local addlinkinfo = function(menu, key, value, link)
|
|
||||||
local text = Engine.Localize(value)
|
|
||||||
local element = menu:AddInfo(Engine.Localize(key), function()
|
|
||||||
return text
|
|
||||||
end)
|
|
||||||
|
|
||||||
local linkelement = element:getFirstChild():getNextSibling()
|
|
||||||
makelink(linkelement, link)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function getnumcredits()
|
|
||||||
local csv = "credits.csv"
|
|
||||||
local rowcount = Engine.TableGetRowCount(csv)
|
|
||||||
return rowcount
|
|
||||||
end
|
|
||||||
|
|
||||||
local extraheight2 = getnumcredits() * 25 / 2
|
|
||||||
|
|
||||||
local function addcredits(menu)
|
|
||||||
local cols = {
|
|
||||||
name = 0,
|
|
||||||
link = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
local csv = "credits.csv"
|
|
||||||
local rowcount = Engine.TableGetRowCount(csv)
|
|
||||||
|
|
||||||
local num = 0
|
|
||||||
local creditselement = LUI.UIElement.new({
|
|
||||||
topAnchor = true,
|
|
||||||
leftAnchor = true,
|
|
||||||
left = 500,
|
|
||||||
width = 30,
|
|
||||||
top = 255
|
|
||||||
})
|
|
||||||
|
|
||||||
menu:addElement(creditselement)
|
|
||||||
|
|
||||||
menu:AddInfo(Engine.Localize("MENU_CREDITS"), function()
|
|
||||||
return ""
|
|
||||||
end)
|
|
||||||
|
|
||||||
local num = 0
|
|
||||||
local addcredit = function(name, link)
|
|
||||||
local row = num % 4
|
|
||||||
local col = num >= 4 and 0 or 1
|
|
||||||
local text = Engine.Localize(name)
|
|
||||||
|
|
||||||
local element = LUI.UIText.new({
|
|
||||||
rightAnchor = true,
|
|
||||||
topAnchor = true,
|
|
||||||
right = -10 + (col * -100),
|
|
||||||
top = 25 * row,
|
|
||||||
width = 90,
|
|
||||||
height = LUI.MenuGenericButtons.ButtonLabelFont.Height * 0.8,
|
|
||||||
font = LUI.MenuGenericButtons.ButtonLabelFont.Font,
|
|
||||||
color = Colors.h1.light_grey,
|
|
||||||
alignment = Engine.IsRightToLeftLanguage() and LUI.Alignment.None or LUI.Alignment.Right
|
|
||||||
})
|
|
||||||
|
|
||||||
element.id = "credits_" .. num
|
|
||||||
element:setText(text)
|
|
||||||
creditselement:addElement(element)
|
|
||||||
makelink(element, link)
|
|
||||||
|
|
||||||
num = num + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
for i = 0, rowcount - 1 do
|
|
||||||
local name = Engine.TableLookupByRow(csv, i, cols.name)
|
|
||||||
local link = Engine.TableLookupByRow(csv, i, cols.link)
|
|
||||||
addcredit(name, link)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
LUI.MenuBuilder.m_types_build["SystemInfo"] = function (f6_arg0, f6_arg1)
|
|
||||||
local f6_local0 = LUI.MenuTemplate.spMenuOffset
|
|
||||||
local title = "LUA_MENU_SYSTEM_INFO_CAPS"
|
|
||||||
|
|
||||||
local f6_local2 = false
|
|
||||||
local f6_local3 = 0
|
|
||||||
|
|
||||||
local menu = LUI.MenuTemplate.new(f6_arg0, {
|
|
||||||
menu_title = title,
|
|
||||||
menu_top_indent = f6_local0 + f6_local3,
|
|
||||||
showSelectButton = false,
|
|
||||||
skipAnim = f6_local2
|
|
||||||
})
|
|
||||||
|
|
||||||
menu:setClass(LUI.SystemInfo)
|
|
||||||
menu:PopulateMissingProps(f6_arg1)
|
|
||||||
menu:ValidateProps(f6_arg1)
|
|
||||||
menu.id = "systemInfo_id"
|
|
||||||
|
|
||||||
local f6_local5 = 300
|
|
||||||
local f6_local6 = LUI.MenuTemplate.ListTop + f6_local0
|
|
||||||
local f6_local7 = f6_arg1.menu_height
|
|
||||||
if not f6_local7 then
|
|
||||||
f6_local7 = f6_local5
|
|
||||||
end
|
|
||||||
|
|
||||||
f6_local7 = f6_local7 + f6_local6 - extraheight1
|
|
||||||
|
|
||||||
local f6_local9 = luiglobals.GenericMenuDims.OptionMenuWidth + 100
|
|
||||||
local f6_local10 = menu.properties
|
|
||||||
local topoffset2 = LUI.MenuTemplate.ListTop + LUI.MenuTemplate.spMenuOffset
|
|
||||||
|
|
||||||
local decobox = LUI.MenuBuilder.BuildRegisteredType("h1_box_deco", {
|
|
||||||
decoTopOffset = topoffset2 - topoffset + 15,
|
|
||||||
decoBottomOffset = -f6_local7,
|
|
||||||
decoRightOffset = -665 + extrawidth
|
|
||||||
})
|
|
||||||
|
|
||||||
menu:addElement(decobox)
|
|
||||||
|
|
||||||
local decoleft = CoD.CreateState(0, 0.5, 8, 0.5, CoD.AnchorTypes.TopLeft)
|
|
||||||
decoleft.color = luiglobals.Colors.h1.light_grey
|
|
||||||
decobox:addElement(LUI.UILine.new(decoleft))
|
|
||||||
|
|
||||||
local decoright = CoD.CreateState(0, 0.5, -8, 0.5, CoD.AnchorTypes.TopRight)
|
|
||||||
decoright.color = luiglobals.Colors.h1.light_grey
|
|
||||||
decobox:addElement(LUI.UILine.new(decoright))
|
|
||||||
|
|
||||||
local element = LUI.UIVerticalList.new({
|
|
||||||
leftAnchor = true,
|
|
||||||
rightAnchor = true,
|
|
||||||
topAnchor = true,
|
|
||||||
bottomAnchor = true,
|
|
||||||
left = spacing,
|
|
||||||
right = 100,
|
|
||||||
top = topoffset2 + 15,
|
|
||||||
bottom = 0,
|
|
||||||
spacing = spacing * 0.8
|
|
||||||
})
|
|
||||||
|
|
||||||
element.id = "systemInfoList_id"
|
|
||||||
menu.vlist = element
|
|
||||||
menu:addElement(element)
|
|
||||||
|
|
||||||
local optionmenuwidth = luiglobals.GenericMenuDims.OptionMenuWidth
|
|
||||||
luiglobals.GenericMenuDims.OptionMenuWidth = optionmenuwidth + extrawidth
|
|
||||||
|
|
||||||
menu:AddInfo(Engine.Localize("MENU_SYSINFO_VERSION"), function()
|
|
||||||
return Engine.GetBuildNumber()
|
|
||||||
end)
|
|
||||||
|
|
||||||
addlinkinfo(menu, "MENU_SYSINFO_CUSTOMER_SUPPORT_LINK", "MENU_SYSINFO_CUSTOMER_SUPPORT_URL", "github")
|
|
||||||
|
|
||||||
luiglobals.GenericMenuDims.OptionMenuWidth = optionmenuwidth
|
|
||||||
|
|
||||||
menu:AddBackButton()
|
|
||||||
menu:registerEventHandler("menu_close", LUI.SystemInfo.LeaveMenu)
|
|
||||||
|
|
||||||
return menu
|
|
||||||
end
|
|
||||||
|
|
||||||
local startmap = Engine.StreamingInstallMap
|
|
||||||
Engine.StreamingInstallMap = function(map, args, ...)
|
|
||||||
if (args == "set ui_play_credits 1; devmap ending;") then
|
|
||||||
LUI.FlowManager.RequestAddMenu(nil, "credits_menu")
|
|
||||||
else
|
|
||||||
startmap(map, args, ...)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local creditsmap = function()
|
|
||||||
LUI.FlowManager.PushMenuStackToDVar()
|
|
||||||
|
|
||||||
if LUI.LevelSelect.IsAllLevelCompleted() then
|
|
||||||
Engine.SetDvarString("ui_char_museum_mode", "credits_2", true)
|
|
||||||
else
|
|
||||||
Engine.SetDvarString("ui_char_museum_mode", "credits_black", true)
|
|
||||||
end
|
|
||||||
|
|
||||||
startmap("ending", "set ui_play_credits 1; devmap ending;")
|
|
||||||
end
|
|
||||||
|
|
||||||
LUI.MenuBuilder.registerType("credits_menu", function(f6_arg0, f6_arg1)
|
|
||||||
local f6_local0 = LUI.MenuTemplate.spMenuOffset
|
|
||||||
local title = "MENU_SP_CREDITS_CAPS"
|
|
||||||
|
|
||||||
local f6_local2 = false
|
|
||||||
local f6_local3 = 0
|
|
||||||
|
|
||||||
local menu = LUI.MenuTemplate.new(f6_arg0, {
|
|
||||||
menu_title = title,
|
|
||||||
menu_top_indent = f6_local0 + f6_local3,
|
|
||||||
showSelectButton = false,
|
|
||||||
skipAnim = f6_local2
|
|
||||||
})
|
|
||||||
|
|
||||||
menu:AddButton("MENU_SP_CREDITS_CAPS", creditsmap, nil, true, nil, {
|
|
||||||
desc_text = Engine.Localize("@LUA_MENU_CREDITS_DESC")
|
|
||||||
})
|
|
||||||
|
|
||||||
menu:setClass(LUI.SystemInfo)
|
|
||||||
menu:PopulateMissingProps(f6_arg1)
|
|
||||||
menu:ValidateProps(f6_arg1)
|
|
||||||
menu.id = "systemInfo_id"
|
|
||||||
|
|
||||||
local f6_local5 = 300
|
|
||||||
local f6_local6 = LUI.MenuTemplate.ListTop + f6_local0
|
|
||||||
local f6_local7 = f6_arg1.menu_height
|
|
||||||
if not f6_local7 then
|
|
||||||
f6_local7 = f6_local5
|
|
||||||
end
|
|
||||||
|
|
||||||
f6_local7 = f6_local7 + f6_local6 - extraheight2
|
|
||||||
|
|
||||||
local f6_local9 = luiglobals.GenericMenuDims.OptionMenuWidth + 100
|
|
||||||
local f6_local10 = menu.properties
|
|
||||||
local topoffset2 = LUI.MenuTemplate.ListTop + LUI.MenuTemplate.spMenuOffset + 50
|
|
||||||
|
|
||||||
local decobox = LUI.MenuBuilder.BuildRegisteredType("h1_box_deco", {
|
|
||||||
decoTopOffset = topoffset2 - topoffset + 15,
|
|
||||||
decoBottomOffset = -f6_local7,
|
|
||||||
decoRightOffset = -665 + extrawidth
|
|
||||||
})
|
|
||||||
|
|
||||||
menu:addElement(decobox)
|
|
||||||
|
|
||||||
local decoleft = CoD.CreateState(0, 0.5, 8, 0.5, CoD.AnchorTypes.TopLeft)
|
|
||||||
decoleft.color = luiglobals.Colors.h1.light_grey
|
|
||||||
decobox:addElement(LUI.UILine.new(decoleft))
|
|
||||||
|
|
||||||
local decoright = CoD.CreateState(0, 0.5, -8, 0.5, CoD.AnchorTypes.TopRight)
|
|
||||||
decoright.color = luiglobals.Colors.h1.light_grey
|
|
||||||
decobox:addElement(LUI.UILine.new(decoright))
|
|
||||||
|
|
||||||
local element = LUI.UIVerticalList.new({
|
|
||||||
leftAnchor = true,
|
|
||||||
rightAnchor = true,
|
|
||||||
topAnchor = true,
|
|
||||||
bottomAnchor = true,
|
|
||||||
left = spacing,
|
|
||||||
right = 100,
|
|
||||||
top = topoffset2 + 15,
|
|
||||||
bottom = 0,
|
|
||||||
spacing = spacing * 0.8
|
|
||||||
})
|
|
||||||
|
|
||||||
element.id = "systemInfoList_id"
|
|
||||||
menu.vlist = element
|
|
||||||
menu:addElement(element)
|
|
||||||
|
|
||||||
local optionmenuwidth = luiglobals.GenericMenuDims.OptionMenuWidth
|
|
||||||
luiglobals.GenericMenuDims.OptionMenuWidth = optionmenuwidth + extrawidth
|
|
||||||
|
|
||||||
addlinkinfo(menu, "MENU_SYSINFO_CUSTOMER_SUPPORT_LINK", "MENU_SYSINFO_CUSTOMER_SUPPORT_URL", "github")
|
|
||||||
addlinkinfo(menu, "MENU_SYSINFO_DONATION_LINK", "MENU_SYSINFO_DONATION_URL", "donate")
|
|
||||||
|
|
||||||
addcredits(menu)
|
|
||||||
|
|
||||||
luiglobals.GenericMenuDims.OptionMenuWidth = optionmenuwidth
|
|
||||||
|
|
||||||
menu:AddBackButton()
|
|
||||||
menu:registerEventHandler("menu_close", LUI.SystemInfo.LeaveMenu)
|
|
||||||
|
|
||||||
return menu
|
|
||||||
end)
|
|
||||||
|
298
data/cdata/ui_scripts/branding/credits.lua
Normal file
298
data/cdata/ui_scripts/branding/credits.lua
Normal file
@ -0,0 +1,298 @@
|
|||||||
|
local spacing = 10
|
||||||
|
local topoffset = 15
|
||||||
|
|
||||||
|
local extrawidth = 50
|
||||||
|
local extraheight1 = 0
|
||||||
|
|
||||||
|
local function makelink(element, link)
|
||||||
|
element:setHandleMouseMove(true)
|
||||||
|
element:setHandleMouseButton(true)
|
||||||
|
element:registerAnimationState("focused", {
|
||||||
|
color = {
|
||||||
|
r = 1,
|
||||||
|
g = 1,
|
||||||
|
b = 1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
local entered = false
|
||||||
|
element:registerEventHandler("mouseenter", function()
|
||||||
|
if (not entered) then
|
||||||
|
Engine.PlaySound(CoD.SFX.MouseOver)
|
||||||
|
entered = true
|
||||||
|
end
|
||||||
|
|
||||||
|
element:animateToState("focused")
|
||||||
|
end)
|
||||||
|
|
||||||
|
element:registerEventHandler("mouseleave", function()
|
||||||
|
entered = false
|
||||||
|
element:animateToState("default")
|
||||||
|
end)
|
||||||
|
|
||||||
|
element:registerEventHandler("leftmousedown", function()
|
||||||
|
Engine.PlaySound(CoD.SFX.MouseClick)
|
||||||
|
game:openlink(link)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
local addlinkinfo = function(menu, key, value, link)
|
||||||
|
local text = Engine.Localize(value)
|
||||||
|
local element = menu:AddInfo(Engine.Localize(key), function()
|
||||||
|
return text
|
||||||
|
end)
|
||||||
|
|
||||||
|
local linkelement = element:getFirstChild():getNextSibling()
|
||||||
|
makelink(linkelement, link)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function getnumcredits()
|
||||||
|
local csv = "credits.csv"
|
||||||
|
local rowcount = Engine.TableGetRowCount(csv)
|
||||||
|
return rowcount
|
||||||
|
end
|
||||||
|
|
||||||
|
local extraheight2 = getnumcredits() * 25 / 2
|
||||||
|
|
||||||
|
local function addcredits(menu)
|
||||||
|
local cols = {
|
||||||
|
name = 0,
|
||||||
|
link = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
local csv = "credits.csv"
|
||||||
|
local rowcount = Engine.TableGetRowCount(csv)
|
||||||
|
|
||||||
|
local num = 0
|
||||||
|
local creditselement = LUI.UIElement.new({
|
||||||
|
topAnchor = true,
|
||||||
|
leftAnchor = true,
|
||||||
|
left = 500,
|
||||||
|
width = 30,
|
||||||
|
top = 255
|
||||||
|
})
|
||||||
|
|
||||||
|
menu:addElement(creditselement)
|
||||||
|
|
||||||
|
menu:AddInfo(Engine.Localize("MENU_CREDITS"), function()
|
||||||
|
return ""
|
||||||
|
end)
|
||||||
|
|
||||||
|
local num = 0
|
||||||
|
local addcredit = function(name, link)
|
||||||
|
local row = num % 4
|
||||||
|
local col = num >= 4 and 0 or 1
|
||||||
|
local text = Engine.Localize(name)
|
||||||
|
|
||||||
|
local element = LUI.UIText.new({
|
||||||
|
rightAnchor = true,
|
||||||
|
topAnchor = true,
|
||||||
|
right = -10 + (col * -100),
|
||||||
|
top = 25 * row,
|
||||||
|
width = 90,
|
||||||
|
height = LUI.MenuGenericButtons.ButtonLabelFont.Height * 0.8,
|
||||||
|
font = LUI.MenuGenericButtons.ButtonLabelFont.Font,
|
||||||
|
color = Colors.h1.light_grey,
|
||||||
|
alignment = Engine.IsRightToLeftLanguage() and LUI.Alignment.None or LUI.Alignment.Right
|
||||||
|
})
|
||||||
|
|
||||||
|
element.id = "credits_" .. num
|
||||||
|
element:setText(text)
|
||||||
|
creditselement:addElement(element)
|
||||||
|
makelink(element, link)
|
||||||
|
|
||||||
|
num = num + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 0, rowcount - 1 do
|
||||||
|
local name = Engine.TableLookupByRow(csv, i, cols.name)
|
||||||
|
local link = Engine.TableLookupByRow(csv, i, cols.link)
|
||||||
|
addcredit(name, link)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.MenuBuilder.m_types_build["SystemInfo"] = function (f6_arg0, f6_arg1)
|
||||||
|
local f6_local0 = LUI.MenuTemplate.spMenuOffset
|
||||||
|
local title = "LUA_MENU_SYSTEM_INFO_CAPS"
|
||||||
|
|
||||||
|
local f6_local2 = false
|
||||||
|
local f6_local3 = 0
|
||||||
|
|
||||||
|
local menu = LUI.MenuTemplate.new(f6_arg0, {
|
||||||
|
menu_title = title,
|
||||||
|
menu_top_indent = f6_local0 + f6_local3,
|
||||||
|
showSelectButton = false,
|
||||||
|
skipAnim = f6_local2
|
||||||
|
})
|
||||||
|
|
||||||
|
menu:setClass(LUI.SystemInfo)
|
||||||
|
menu:PopulateMissingProps(f6_arg1)
|
||||||
|
menu:ValidateProps(f6_arg1)
|
||||||
|
menu.id = "systemInfo_id"
|
||||||
|
|
||||||
|
local f6_local5 = 300
|
||||||
|
local f6_local6 = LUI.MenuTemplate.ListTop + f6_local0
|
||||||
|
local f6_local7 = f6_arg1.menu_height
|
||||||
|
if not f6_local7 then
|
||||||
|
f6_local7 = f6_local5
|
||||||
|
end
|
||||||
|
|
||||||
|
f6_local7 = f6_local7 + f6_local6 - extraheight1
|
||||||
|
|
||||||
|
local f6_local9 = luiglobals.GenericMenuDims.OptionMenuWidth + 100
|
||||||
|
local f6_local10 = menu.properties
|
||||||
|
local topoffset2 = LUI.MenuTemplate.ListTop + LUI.MenuTemplate.spMenuOffset
|
||||||
|
|
||||||
|
local decobox = LUI.MenuBuilder.BuildRegisteredType("h1_box_deco", {
|
||||||
|
decoTopOffset = topoffset2 - topoffset + 15,
|
||||||
|
decoBottomOffset = -f6_local7,
|
||||||
|
decoRightOffset = -665 + extrawidth
|
||||||
|
})
|
||||||
|
|
||||||
|
menu:addElement(decobox)
|
||||||
|
|
||||||
|
local decoleft = CoD.CreateState(0, 0.5, 8, 0.5, CoD.AnchorTypes.TopLeft)
|
||||||
|
decoleft.color = luiglobals.Colors.h1.light_grey
|
||||||
|
decobox:addElement(LUI.UILine.new(decoleft))
|
||||||
|
|
||||||
|
local decoright = CoD.CreateState(0, 0.5, -8, 0.5, CoD.AnchorTypes.TopRight)
|
||||||
|
decoright.color = luiglobals.Colors.h1.light_grey
|
||||||
|
decobox:addElement(LUI.UILine.new(decoright))
|
||||||
|
|
||||||
|
local element = LUI.UIVerticalList.new({
|
||||||
|
leftAnchor = true,
|
||||||
|
rightAnchor = true,
|
||||||
|
topAnchor = true,
|
||||||
|
bottomAnchor = true,
|
||||||
|
left = spacing,
|
||||||
|
right = 100,
|
||||||
|
top = topoffset2 + 15,
|
||||||
|
bottom = 0,
|
||||||
|
spacing = spacing * 0.8
|
||||||
|
})
|
||||||
|
|
||||||
|
element.id = "systemInfoList_id"
|
||||||
|
menu.vlist = element
|
||||||
|
menu:addElement(element)
|
||||||
|
|
||||||
|
local optionmenuwidth = luiglobals.GenericMenuDims.OptionMenuWidth
|
||||||
|
luiglobals.GenericMenuDims.OptionMenuWidth = optionmenuwidth + extrawidth
|
||||||
|
|
||||||
|
menu:AddInfo(Engine.Localize("MENU_SYSINFO_VERSION"), function()
|
||||||
|
return Engine.GetBuildNumber()
|
||||||
|
end)
|
||||||
|
|
||||||
|
addlinkinfo(menu, "MENU_SYSINFO_CUSTOMER_SUPPORT_LINK", "MENU_SYSINFO_CUSTOMER_SUPPORT_URL", "github")
|
||||||
|
|
||||||
|
luiglobals.GenericMenuDims.OptionMenuWidth = optionmenuwidth
|
||||||
|
|
||||||
|
menu:AddBackButton()
|
||||||
|
menu:registerEventHandler("menu_close", LUI.SystemInfo.LeaveMenu)
|
||||||
|
|
||||||
|
return menu
|
||||||
|
end
|
||||||
|
|
||||||
|
local startmap = Engine.StreamingInstallMap
|
||||||
|
Engine.StreamingInstallMap = function(map, args, ...)
|
||||||
|
if (args == "set ui_play_credits 1; devmap ending;") then
|
||||||
|
LUI.FlowManager.RequestAddMenu(nil, "credits_menu")
|
||||||
|
else
|
||||||
|
startmap(map, args, ...)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local creditsmap = function()
|
||||||
|
LUI.FlowManager.PushMenuStackToDVar()
|
||||||
|
|
||||||
|
if LUI.LevelSelect.IsAllLevelCompleted() then
|
||||||
|
Engine.SetDvarString("ui_char_museum_mode", "credits_2", true)
|
||||||
|
else
|
||||||
|
Engine.SetDvarString("ui_char_museum_mode", "credits_black", true)
|
||||||
|
end
|
||||||
|
|
||||||
|
startmap("ending", "set ui_play_credits 1; devmap ending;")
|
||||||
|
end
|
||||||
|
|
||||||
|
LUI.MenuBuilder.registerType("credits_menu", function(f6_arg0, f6_arg1)
|
||||||
|
local f6_local0 = LUI.MenuTemplate.spMenuOffset
|
||||||
|
local title = "MENU_SP_CREDITS_CAPS"
|
||||||
|
|
||||||
|
local f6_local2 = false
|
||||||
|
local f6_local3 = 0
|
||||||
|
|
||||||
|
local menu = LUI.MenuTemplate.new(f6_arg0, {
|
||||||
|
menu_title = title,
|
||||||
|
menu_top_indent = f6_local0 + f6_local3,
|
||||||
|
showSelectButton = false,
|
||||||
|
skipAnim = f6_local2
|
||||||
|
})
|
||||||
|
|
||||||
|
menu:AddButton("MENU_SP_CREDITS_CAPS", creditsmap, nil, true, nil, {
|
||||||
|
desc_text = Engine.Localize("@LUA_MENU_CREDITS_DESC")
|
||||||
|
})
|
||||||
|
|
||||||
|
menu:setClass(LUI.SystemInfo)
|
||||||
|
menu:PopulateMissingProps(f6_arg1)
|
||||||
|
menu:ValidateProps(f6_arg1)
|
||||||
|
menu.id = "systemInfo_id"
|
||||||
|
|
||||||
|
local f6_local5 = 300
|
||||||
|
local f6_local6 = LUI.MenuTemplate.ListTop + f6_local0
|
||||||
|
local f6_local7 = f6_arg1.menu_height
|
||||||
|
if not f6_local7 then
|
||||||
|
f6_local7 = f6_local5
|
||||||
|
end
|
||||||
|
|
||||||
|
f6_local7 = f6_local7 + f6_local6 - extraheight2
|
||||||
|
|
||||||
|
local f6_local9 = luiglobals.GenericMenuDims.OptionMenuWidth + 100
|
||||||
|
local f6_local10 = menu.properties
|
||||||
|
local topoffset2 = LUI.MenuTemplate.ListTop + LUI.MenuTemplate.spMenuOffset + 50
|
||||||
|
|
||||||
|
local decobox = LUI.MenuBuilder.BuildRegisteredType("h1_box_deco", {
|
||||||
|
decoTopOffset = topoffset2 - topoffset + 15,
|
||||||
|
decoBottomOffset = -f6_local7,
|
||||||
|
decoRightOffset = -665 + extrawidth
|
||||||
|
})
|
||||||
|
|
||||||
|
menu:addElement(decobox)
|
||||||
|
|
||||||
|
local decoleft = CoD.CreateState(0, 0.5, 8, 0.5, CoD.AnchorTypes.TopLeft)
|
||||||
|
decoleft.color = luiglobals.Colors.h1.light_grey
|
||||||
|
decobox:addElement(LUI.UILine.new(decoleft))
|
||||||
|
|
||||||
|
local decoright = CoD.CreateState(0, 0.5, -8, 0.5, CoD.AnchorTypes.TopRight)
|
||||||
|
decoright.color = luiglobals.Colors.h1.light_grey
|
||||||
|
decobox:addElement(LUI.UILine.new(decoright))
|
||||||
|
|
||||||
|
local element = LUI.UIVerticalList.new({
|
||||||
|
leftAnchor = true,
|
||||||
|
rightAnchor = true,
|
||||||
|
topAnchor = true,
|
||||||
|
bottomAnchor = true,
|
||||||
|
left = spacing,
|
||||||
|
right = 100,
|
||||||
|
top = topoffset2 + 15,
|
||||||
|
bottom = 0,
|
||||||
|
spacing = spacing * 0.8
|
||||||
|
})
|
||||||
|
|
||||||
|
element.id = "systemInfoList_id"
|
||||||
|
menu.vlist = element
|
||||||
|
menu:addElement(element)
|
||||||
|
|
||||||
|
local optionmenuwidth = luiglobals.GenericMenuDims.OptionMenuWidth
|
||||||
|
luiglobals.GenericMenuDims.OptionMenuWidth = optionmenuwidth + extrawidth
|
||||||
|
|
||||||
|
addlinkinfo(menu, "MENU_SYSINFO_CUSTOMER_SUPPORT_LINK", "MENU_SYSINFO_CUSTOMER_SUPPORT_URL", "github")
|
||||||
|
addlinkinfo(menu, "MENU_SYSINFO_DONATION_LINK", "MENU_SYSINFO_DONATION_URL", "donate")
|
||||||
|
|
||||||
|
addcredits(menu)
|
||||||
|
|
||||||
|
luiglobals.GenericMenuDims.OptionMenuWidth = optionmenuwidth
|
||||||
|
|
||||||
|
menu:AddBackButton()
|
||||||
|
menu:registerEventHandler("menu_close", LUI.SystemInfo.LeaveMenu)
|
||||||
|
|
||||||
|
return menu
|
||||||
|
end)
|
4
data/cdata/ui_scripts/branding/mainmenu.lua
Normal file
4
data/cdata/ui_scripts/branding/mainmenu.lua
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
LUI.onmenuopen("main_campaign", function(menu)
|
||||||
|
local headertext = menu:getFirstDescendentById("header_text")
|
||||||
|
headertext:setText("H2-MOD")
|
||||||
|
end)
|
@ -42,17 +42,10 @@ function getmodname(path)
|
|||||||
local modinfo = mods.getinfo(path)
|
local modinfo = mods.getinfo(path)
|
||||||
|
|
||||||
if (not modinfo.isvalid) then
|
if (not modinfo.isvalid) then
|
||||||
game:addlocalizedstring(path, path)
|
local desc = Engine.Localize("LUA_MENU_MOD_DESC_DEFAULT", string.el(path))
|
||||||
local desc = Engine.Localize("LUA_MENU_MOD_DESC_DEFAULT", path)
|
|
||||||
|
|
||||||
return path, desc
|
return path, desc
|
||||||
else
|
else
|
||||||
game:addlocalizedstring(modinfo.name, modinfo.name)
|
local desc = Engine.Localize("@LUA_MENU_MOD_DESC", string.el(modinfo.description), string.el(modinfo.author), string.el(modinfo.version))
|
||||||
game:addlocalizedstring(modinfo.description, modinfo.description)
|
|
||||||
game:addlocalizedstring(modinfo.author, modinfo.author)
|
|
||||||
game:addlocalizedstring(modinfo.version, modinfo.version)
|
|
||||||
local desc = Engine.Localize("@LUA_MENU_MOD_DESC",
|
|
||||||
modinfo.description, modinfo.author, modinfo.version)
|
|
||||||
return modinfo.name, desc
|
return modinfo.name, desc
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -67,18 +60,10 @@ LUI.MenuBuilder.registerType("mods_menu", function(a1)
|
|||||||
uppercase_title = true
|
uppercase_title = true
|
||||||
})
|
})
|
||||||
|
|
||||||
--[[menu:AddButton("@LUA_MENU_WORKSHOP", function()
|
|
||||||
if (LUI.MenuBuilder.m_types_build["mods_workshop_menu"]) then
|
|
||||||
LUI.FlowManager.RequestAddMenu(nil, "mods_workshop_menu")
|
|
||||||
end
|
|
||||||
end, nil, true, nil, {
|
|
||||||
desc_text = Engine.Localize("@LUA_MENU_WORKSHOP_DESC")
|
|
||||||
})--]]
|
|
||||||
|
|
||||||
local modfolder = game:getloadedmod()
|
local modfolder = game:getloadedmod()
|
||||||
if (modfolder ~= "") then
|
if (modfolder ~= "") then
|
||||||
local name = getmodname(modfolder)
|
local name = getmodname(modfolder)
|
||||||
createdivider(menu, Engine.Localize("@LUA_MENU_LOADED_MOD", name:truncate(24)))
|
createdivider(menu, Engine.Localize("@LUA_MENU_LOADED_MOD", string.el(name:truncate(24))))
|
||||||
|
|
||||||
menu:AddButton("@LUA_MENU_UNLOAD", function()
|
menu:AddButton("@LUA_MENU_UNLOAD", function()
|
||||||
Engine.Exec("unloadmod")
|
Engine.Exec("unloadmod")
|
||||||
@ -98,8 +83,7 @@ LUI.MenuBuilder.registerType("mods_menu", function(a1)
|
|||||||
local name, desc = getmodname(mods[i])
|
local name, desc = getmodname(mods[i])
|
||||||
|
|
||||||
if (mods[i] ~= modfolder) then
|
if (mods[i] ~= modfolder) then
|
||||||
game:addlocalizedstring(name, name)
|
menu:AddButton(string.el(name), function()
|
||||||
menu:AddButton(name, function()
|
|
||||||
Engine.Exec("loadmod " .. mods[i])
|
Engine.Exec("loadmod " .. mods[i])
|
||||||
end, nil, true, nil, {
|
end, nil, true, nil, {
|
||||||
desc_text = desc
|
desc_text = desc
|
||||||
|
@ -95,5 +95,26 @@
|
|||||||
"MENU_CREDITS_5": "netadr",
|
"MENU_CREDITS_5": "netadr",
|
||||||
"MENU_CREDITS_6": "quaK",
|
"MENU_CREDITS_6": "quaK",
|
||||||
"MENU_CREDITS_7": "xensik",
|
"MENU_CREDITS_7": "xensik",
|
||||||
"MENU_CREDITS_8": "ZoneTool"
|
"MENU_CREDITS_8": "ZoneTool",
|
||||||
|
|
||||||
|
"LUA_MENU_SP_LOCATION_AF_CAVES": "LUA_MENU_SP_LOCATION_AF_CAVES",
|
||||||
|
"LUA_MENU_SP_LOCATION_AF_CHASE": "LUA_MENU_SP_LOCATION_AF_CHASE",
|
||||||
|
"LUA_MENU_SP_LOCATION_AIRPORT": "LUA_MENU_SP_LOCATION_AIRPORT",
|
||||||
|
"LUA_MENU_SP_LOCATION_ARCADIA": "LUA_MENU_SP_LOCATION_ARCADIA",
|
||||||
|
"LUA_MENU_SP_LOCATION_BONEYARD": "LUA_MENU_SP_LOCATION_BONEYARD",
|
||||||
|
"LUA_MENU_SP_LOCATION_CLIFFHANGER": "LUA_MENU_SP_LOCATION_CLIFFHANGER",
|
||||||
|
"LUA_MENU_SP_LOCATION_CONTINGENCY": "LUA_MENU_SP_LOCATION_CONTINGENCY",
|
||||||
|
"LUA_MENU_SP_LOCATION_DC_WHITEHOUSE": "LUA_MENU_SP_LOCATION_DC_WHITEHOUSE",
|
||||||
|
"LUA_MENU_SP_LOCATION_DCBURNING": "LUA_MENU_SP_LOCATION_DCBURNING",
|
||||||
|
"LUA_MENU_SP_LOCATION_DCEMP": "LUA_MENU_SP_LOCATION_DCEMP",
|
||||||
|
"LUA_MENU_SP_LOCATION_ENDING": "LUA_MENU_SP_LOCATION_ENDING",
|
||||||
|
"LUA_MENU_SP_LOCATION_ESTATE": "LUA_MENU_SP_LOCATION_ESTATE",
|
||||||
|
"LUA_MENU_SP_LOCATION_FAVELA": "LUA_MENU_SP_LOCATION_FAVELA",
|
||||||
|
"LUA_MENU_SP_LOCATION_FAVELA_ESCAPE": "LUA_MENU_SP_LOCATION_FAVELA_ESCAPE",
|
||||||
|
"LUA_MENU_SP_LOCATION_GULAG": "LUA_MENU_SP_LOCATION_GULAG",
|
||||||
|
"LUA_MENU_SP_LOCATION_INVASION": "LUA_MENU_SP_LOCATION_INVASION",
|
||||||
|
"LUA_MENU_SP_LOCATION_OILRIG": "LUA_MENU_SP_LOCATION_OILRIG",
|
||||||
|
"LUA_MENU_SP_LOCATION_ROADKILL": "LUA_MENU_SP_LOCATION_ROADKILL",
|
||||||
|
"LUA_MENU_SP_LOCATION_TRAINER": "LUA_MENU_SP_LOCATION_TRAINER",
|
||||||
|
"LUA_MENU_SP_LOCATION_MUSEUM": "LUA_MENU_SP_LOCATION_MUSEUM"
|
||||||
}
|
}
|
@ -4,7 +4,6 @@
|
|||||||
#include "game/game.hpp"
|
#include "game/game.hpp"
|
||||||
#include "game/dvars.hpp"
|
#include "game/dvars.hpp"
|
||||||
|
|
||||||
#include "localized_strings.hpp"
|
|
||||||
#include "scheduler.hpp"
|
#include "scheduler.hpp"
|
||||||
#include "command.hpp"
|
#include "command.hpp"
|
||||||
|
|
||||||
@ -57,8 +56,6 @@ namespace branding
|
|||||||
{
|
{
|
||||||
scheduler::loop(draw, scheduler::pipeline::renderer);
|
scheduler::loop(draw, scheduler::pipeline::renderer);
|
||||||
|
|
||||||
localized_strings::override("MENU_SP_CAMPAIGN", "H2-MOD");
|
|
||||||
|
|
||||||
ui_get_formatted_build_number_hook.create(0x1406057D0, ui_get_formatted_build_number_stub);
|
ui_get_formatted_build_number_hook.create(0x1406057D0, ui_get_formatted_build_number_stub);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
#include "command.hpp"
|
#include "command.hpp"
|
||||||
#include "console.hpp"
|
#include "console.hpp"
|
||||||
#include "localized_strings.hpp"
|
|
||||||
#include "mods.hpp"
|
#include "mods.hpp"
|
||||||
|
|
||||||
#include <utils/hook.hpp>
|
#include <utils/hook.hpp>
|
||||||
@ -74,16 +73,6 @@ namespace fastfiles
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_missing_localized_strings()
|
|
||||||
{
|
|
||||||
for (auto map = &game::maps[0]; map->unk; ++map)
|
|
||||||
{
|
|
||||||
const auto str = utils::string::va("LUA_MENU_SP_LOCATION_%s",
|
|
||||||
utils::string::to_upper(map->name).data());
|
|
||||||
localized_strings::override(str, str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
utils::hook::detour db_read_stream_file_hook;
|
utils::hook::detour db_read_stream_file_hook;
|
||||||
void db_read_stream_file_stub(int a1, int a2)
|
void db_read_stream_file_stub(int a1, int a2)
|
||||||
{
|
{
|
||||||
@ -597,8 +586,6 @@ namespace fastfiles
|
|||||||
db_try_load_x_file_internal_hook.create(0x1404173B0, db_try_load_x_file_internal);
|
db_try_load_x_file_internal_hook.create(0x1404173B0, db_try_load_x_file_internal);
|
||||||
db_find_xasset_header.create(game::DB_FindXAssetHeader, db_find_xasset_header_stub);
|
db_find_xasset_header.create(game::DB_FindXAssetHeader, db_find_xasset_header_stub);
|
||||||
|
|
||||||
add_missing_localized_strings();
|
|
||||||
|
|
||||||
// Allow loading of mixed compressor types
|
// Allow loading of mixed compressor types
|
||||||
utils::hook::nop(0x1403E66A7, 2);
|
utils::hook::nop(0x1403E66A7, 2);
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
#include "filesystem.hpp"
|
#include "filesystem.hpp"
|
||||||
#include "console.hpp"
|
#include "console.hpp"
|
||||||
#include "localized_strings.hpp"
|
|
||||||
#include "mods.hpp"
|
#include "mods.hpp"
|
||||||
#include "language.hpp"
|
#include "language.hpp"
|
||||||
|
|
||||||
@ -42,8 +41,6 @@ namespace filesystem
|
|||||||
mods::set_mod(mod_path.value());
|
mods::set_mod(mod_path.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
localized_strings::clear();
|
|
||||||
|
|
||||||
utils::hook::invoke<void>(0x14060BF50, name);
|
utils::hook::invoke<void>(0x14060BF50, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
#include "language.hpp"
|
#include "language.hpp"
|
||||||
#include "config.hpp"
|
#include "config.hpp"
|
||||||
|
|
||||||
#include "localized_strings.hpp"
|
|
||||||
|
|
||||||
#include <utils/hook.hpp>
|
#include <utils/hook.hpp>
|
||||||
#include <utils/io.hpp>
|
#include <utils/io.hpp>
|
||||||
#include <utils/string.hpp>
|
#include <utils/string.hpp>
|
||||||
|
@ -1,199 +0,0 @@
|
|||||||
#include <std_include.hpp>
|
|
||||||
#include "loader/component_loader.hpp"
|
|
||||||
|
|
||||||
#include "localized_strings.hpp"
|
|
||||||
#include "game_console.hpp"
|
|
||||||
#include "filesystem.hpp"
|
|
||||||
#include "console.hpp"
|
|
||||||
|
|
||||||
#include "game/game.hpp"
|
|
||||||
|
|
||||||
#include <utils/hook.hpp>
|
|
||||||
#include <utils/string.hpp>
|
|
||||||
#include <utils/concurrency.hpp>
|
|
||||||
#include <utils/io.hpp>
|
|
||||||
|
|
||||||
namespace localized_strings
|
|
||||||
{
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
utils::hook::detour seh_string_ed_get_string_hook;
|
|
||||||
|
|
||||||
struct localize_entry
|
|
||||||
{
|
|
||||||
std::string value{};
|
|
||||||
bool volatile_{};
|
|
||||||
};
|
|
||||||
|
|
||||||
using localized_map = std::unordered_map<std::string, localize_entry>;
|
|
||||||
utils::concurrency::container<localized_map> localized_overrides;
|
|
||||||
|
|
||||||
const char* seh_string_ed_get_string(const char* reference)
|
|
||||||
{
|
|
||||||
return localized_overrides.access<const char*>([&](const localized_map& map)
|
|
||||||
{
|
|
||||||
const auto entry = map.find(reference);
|
|
||||||
if (entry != map.end())
|
|
||||||
{
|
|
||||||
return utils::string::va("%s", entry->second.value.data());
|
|
||||||
}
|
|
||||||
|
|
||||||
return seh_string_ed_get_string_hook.invoke<const char*>(reference);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
game::XAssetHeader db_find_localize_entry_stub(game::XAssetType type, const char* name, int allow_create_default)
|
|
||||||
{
|
|
||||||
const auto value = localized_overrides.access<const char*>([&](const localized_map& map)
|
|
||||||
-> const char*
|
|
||||||
{
|
|
||||||
const auto entry = map.find(name);
|
|
||||||
if (entry != map.end())
|
|
||||||
{
|
|
||||||
return utils::string::va("%s", entry->second.value.data());
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
});
|
|
||||||
|
|
||||||
if (value == nullptr)
|
|
||||||
{
|
|
||||||
return game::DB_FindXAssetHeader(type, name, allow_create_default);
|
|
||||||
}
|
|
||||||
|
|
||||||
static game::LocalizeEntry entry{};
|
|
||||||
entry.value = value;
|
|
||||||
entry.name = name;
|
|
||||||
|
|
||||||
return static_cast<game::XAssetHeader>(&entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool parse_localized_strings_file(const std::string& data)
|
|
||||||
{
|
|
||||||
rapidjson::Document j;
|
|
||||||
j.Parse(data.data());
|
|
||||||
|
|
||||||
if (!j.IsObject())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
localized_overrides.access([&](localized_map& map)
|
|
||||||
{
|
|
||||||
const auto obj = j.GetObj();
|
|
||||||
for (const auto& [key, value] : obj)
|
|
||||||
{
|
|
||||||
if (!key.IsString() || !value.IsString())
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto name = key.GetString();
|
|
||||||
const auto str = value.GetString();
|
|
||||||
|
|
||||||
const auto entry = map.find(name);
|
|
||||||
if (entry == map.end() || entry->second.volatile_)
|
|
||||||
{
|
|
||||||
map[name] = {str, true};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool try_load_file(const std::string& path, const std::string& language)
|
|
||||||
{
|
|
||||||
const auto file = utils::string::va("%s/localizedstrings/%s.json", path.data(), language.data());
|
|
||||||
if (!utils::io::file_exists(file))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
console::info("[Localized strings] Parsing %s\n", file);
|
|
||||||
const auto data = utils::io::read_file(file);
|
|
||||||
if (!parse_localized_strings_file(data))
|
|
||||||
{
|
|
||||||
console::error("[Localized strings] Invalid language json file\n");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void load_localized_strings()
|
|
||||||
{
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
const auto search_paths = filesystem::get_search_paths_rev();
|
|
||||||
const auto language = game::SEH_GetCurrentLanguageName();
|
|
||||||
|
|
||||||
for (const auto& path : search_paths)
|
|
||||||
{
|
|
||||||
bool found_in_current_path = false;
|
|
||||||
|
|
||||||
if (try_load_file(path, "english"))
|
|
||||||
{
|
|
||||||
found_in_current_path = true;
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (language != "english"s && !try_load_file(path, language) && found_in_current_path)
|
|
||||||
{
|
|
||||||
console::warn("[Localized strings] No valid language file found for '%s' in '%s/localizedstrings/', falling back to 'english'\n",
|
|
||||||
language, path.data());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
found = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found)
|
|
||||||
{
|
|
||||||
console::warn("[Localized strings] No valid language file found!\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void override(const std::string& key, const std::string& value, bool volatile_)
|
|
||||||
{
|
|
||||||
localized_overrides.access([&](localized_map& map)
|
|
||||||
{
|
|
||||||
map[key] = {value, volatile_};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
localized_overrides.access([&](localized_map& map)
|
|
||||||
{
|
|
||||||
for (auto i = map.begin(); i != map.end();)
|
|
||||||
{
|
|
||||||
if (i->second.volatile_)
|
|
||||||
{
|
|
||||||
i = map.erase(i);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
load_localized_strings();
|
|
||||||
}
|
|
||||||
|
|
||||||
class component final : public component_interface
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void post_unpack() override
|
|
||||||
{
|
|
||||||
// Change some localized strings
|
|
||||||
seh_string_ed_get_string_hook.create(0x1405E5FD0, &seh_string_ed_get_string);
|
|
||||||
utils::hook::call(0x1405E5AB9, db_find_localize_entry_stub);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
REGISTER_COMPONENT(localized_strings::component)
|
|
@ -1,7 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
namespace localized_strings
|
|
||||||
{
|
|
||||||
void override(const std::string& key, const std::string& value, bool volatile_ = false);
|
|
||||||
void clear();
|
|
||||||
}
|
|
@ -9,7 +9,6 @@
|
|||||||
#include "filesystem.hpp"
|
#include "filesystem.hpp"
|
||||||
#include "fonts.hpp"
|
#include "fonts.hpp"
|
||||||
#include "mods.hpp"
|
#include "mods.hpp"
|
||||||
#include "localized_strings.hpp"
|
|
||||||
#include "loadscreen.hpp"
|
#include "loadscreen.hpp"
|
||||||
|
|
||||||
#include <utils/hook.hpp>
|
#include <utils/hook.hpp>
|
||||||
@ -63,8 +62,6 @@ namespace mods
|
|||||||
loadscreen::clear();
|
loadscreen::clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
localized_strings::clear();
|
|
||||||
|
|
||||||
db_release_xassets_hook.invoke<void>();
|
db_release_xassets_hook.invoke<void>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
#include "command.hpp"
|
#include "command.hpp"
|
||||||
|
|
||||||
#include "filesystem.hpp"
|
#include "filesystem.hpp"
|
||||||
#include "localized_strings.hpp"
|
|
||||||
#include "scripting.hpp"
|
#include "scripting.hpp"
|
||||||
#include "fastfiles.hpp"
|
#include "fastfiles.hpp"
|
||||||
#include "mods.hpp"
|
#include "mods.hpp"
|
||||||
@ -320,12 +319,6 @@ namespace ui_scripting
|
|||||||
return path.value_or("");
|
return path.value_or("");
|
||||||
};
|
};
|
||||||
|
|
||||||
game_type["addlocalizedstring"] = [](const game&, const std::string& string,
|
|
||||||
const std::string& value)
|
|
||||||
{
|
|
||||||
localized_strings::override(string, value, true);
|
|
||||||
};
|
|
||||||
|
|
||||||
game_type["setlanguage"] = [](const game&, const std::string& language)
|
game_type["setlanguage"] = [](const game&, const std::string& language)
|
||||||
{
|
{
|
||||||
language::set(language);
|
language::set(language);
|
||||||
@ -361,6 +354,13 @@ namespace ui_scripting
|
|||||||
ShellExecuteA(nullptr, "open", link->second.data(), nullptr, nullptr, SW_SHOWNORMAL);
|
ShellExecuteA(nullptr, "open", link->second.data(), nullptr, nullptr, SW_SHOWNORMAL);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
lua["string"]["escapelocalization"] = [](const game&, const std::string& str)
|
||||||
|
{
|
||||||
|
return "\x1F"s.append(str);
|
||||||
|
};
|
||||||
|
|
||||||
|
lua["string"]["el"] = lua["string"]["escapelocalization"];
|
||||||
|
|
||||||
lua["Engine"]["SetLanguage"] = [](const int index)
|
lua["Engine"]["SetLanguage"] = [](const int index)
|
||||||
{
|
{
|
||||||
language::set_from_index(index);
|
language::set_from_index(index);
|
||||||
|
@ -787,12 +787,6 @@ namespace scripting::lua
|
|||||||
return mod.value_or("");
|
return mod.value_or("");
|
||||||
};
|
};
|
||||||
|
|
||||||
game_type["addlocalizedstring"] = [](const game&, const std::string& string,
|
|
||||||
const std::string& value)
|
|
||||||
{
|
|
||||||
localized_strings::override(string, value, true);
|
|
||||||
};
|
|
||||||
|
|
||||||
game_type["overridedvarint"] = [](const game&, const std::string& dvar, const int value)
|
game_type["overridedvarint"] = [](const game&, const std::string& dvar, const int value)
|
||||||
{
|
{
|
||||||
scripting::get_dvar_int_overrides[dvar] = value;
|
scripting::get_dvar_int_overrides[dvar] = value;
|
||||||
|
Loading…
Reference in New Issue
Block a user