Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,853 changes: 213 additions & 1,640 deletions LuaRules/Configs/dynamic_comm_defs.lua

Large diffs are not rendered by default.

272 changes: 145 additions & 127 deletions LuaRules/Gadgets/unit_commander_upgrade.lua

Large diffs are not rendered by default.

561 changes: 288 additions & 273 deletions LuaRules/Gadgets/unit_shield_charge.lua

Large diffs are not rendered by default.

51 changes: 31 additions & 20 deletions LuaUI/Configs/startup_info_selector.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ local function ReturnFalse()
return false
end

local noCustomComms = ((Spring.GetModOptions().commandertypes == nil or Spring.GetModOptions().commandertypes == '') and true) or false
local noCustomComms = ((Spring.GetModOptions().commandertypes == nil or Spring.GetModOptions().commandertypes == '') and true) or
false
local function ReturnNoCustomComms()
return noCustomComms
end
Expand All @@ -20,13 +21,13 @@ local optionData = {}

local commDataOrdered = {}
local numComms = 0
for profileID, data in pairs( WG.ModularCommAPI.GetPlayerCommProfiles(Spring.GetMyPlayerID(), true)) do
for profileID, data in pairs(WG.ModularCommAPI.GetPlayerCommProfiles(Spring.GetMyPlayerID(), true)) do
numComms = numComms + 1
commDataOrdered[numComms] = data
commDataOrdered[numComms].profileID = profileID
end
--Spring.Echo("wololo", "Player " .. Spring.GetMyPlayerID() .. " has " .. numComms .. " comms")
table.sort(commDataOrdered, function(a,b) return a.profileID < b.profileID end)
table.sort(commDataOrdered, function(a, b) return a.profileID < b.profileID end)

local chassisImages = {
armcom = "LuaUI/Images/startup_info_selector/chassis_armcom.png",
Expand All @@ -35,15 +36,24 @@ local chassisImages = {
commsupport = "LuaUI/Images/startup_info_selector/chassis_commsupport.png",
benzcom = "LuaUI/Images/startup_info_selector/chassis_benzcom.png",
cremcom = "LuaUI/Images/startup_info_selector/chassis_cremcom.png",

recon = "LuaUI/Images/startup_info_selector/chassis_commrecon.png",
support = "LuaUI/Images/startup_info_selector/chassis_commsupport.png",
assault = "LuaUI/Images/startup_info_selector/chassis_benzcom.png",
strike = "LuaUI/Images/startup_info_selector/chassis_commstrike.png",
knight = "LuaUI/Images/startup_info_selector/chassis_cremcom.png"
knight = "LuaUI/Images/startup_info_selector/chassis_cremcom.png",
}

local moduleDefs, emptyModules, chassisDefs, upgradeUtilities, chassisDefByBaseDef, moduleDefNames, chassisDefNames = VFS.Include("LuaRules/Configs/dynamic_comm_defs.lua")

local moduleDefs, chassisDefs, upgradeUtilities, LEVEL_BOUND, chassisDefByBaseDef, moduleDefNames, chassisDefNames = VFS
.Include("LuaRules/Configs/dynamic_comm_defs.lua")

-- chassisDefs.chassisImage
---@cast chassisDefs table
---@cast moduleDefNames table
for key, value in pairs(chassisDefs) do
chassisImages[value.name] = value.chassisImage or chassisImages[value.name]
end

local colorWeapon = "\255\255\32\32"
local colorConversion = "\255\255\96\0"
Expand All @@ -53,25 +63,25 @@ local colorModule = "\255\128\128\255"
local function WriteTooltip(profileID)
local commData = WG.ModularCommAPI.GetCommProfileInfo(profileID)
local str = ''
for i=1,#commData.modules do
str = str .. "\nLEVEL "..(i + 1) .. "\n\tModules:" -- TODO calculate metal cost
for i = 1, #commData.modules do
str = str .. "\nLEVEL " .. (i + 1) .. "\n\tModules:" -- TODO calculate metal cost
for j, modulename in pairs(commData.modules[i]) do
local chassisModuleDefs = moduleDefNames[commData.chassis] or {}
if chassisModuleDefs[modulename] then
local moduleDef = moduleDefs[chassisModuleDefs[modulename]]
local substr = moduleDef.humanName

-- assign color
if (modulename):find("commweapon_") then
substr = colorWeapon..substr
substr = colorWeapon .. substr
elseif (modulename):find("conversion_") then
substr = colorConversion..substr
substr = colorConversion .. substr
elseif (modulename):find("weaponmod_") then
substr = colorWeaponMod..substr
substr = colorWeaponMod .. substr
else
substr = colorModule..substr
substr = colorModule .. substr
end
str = str.."\n\t\t"..substr.."\008"
str = str .. "\n\t\t" .. substr .. "\008"
end
end
end
Expand All @@ -80,17 +90,18 @@ end

local function GetCommSelectTemplate(num, data)
local commProfileID = data.profileID

local option = {
name = data.name,
tooltip = "Select "..data.name..WriteTooltip(commProfileID),
tooltip = "Select " .. data.name .. WriteTooltip(commProfileID),
image = chassisImages[data.chassis],
cmd = "customcomm:"..commProfileID,
cmd = "customcomm:" .. commProfileID,
---@diagnostic disable-next-line: undefined-global
unitname = comm1Name,
commProfile = commProfileID,
trainer = string.find(commProfileID, "trainer") ~= nil, -- FIXME should probably be in the def table
trainer = string.find(commProfileID, "trainer") ~= nil, -- FIXME should probably be in the def table
}

return option
end

Expand All @@ -100,7 +111,7 @@ end
local i = 0
for i = 1, numComms do
local option = GetCommSelectTemplate(i, commDataOrdered[i])
optionData[#optionData+1] = option
optionData[#optionData + 1] = option
end


Expand Down
245 changes: 245 additions & 0 deletions gamedata/modularcomms/chassises/assult.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
return {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo in file name.

clonedefs = {
dynassault1 = {
dynassault0 = {
level = 0,
customparams = { shield_emit_height = 32.5 },
},
dynassault2 = {
level = 2,
collisionvolumescales = [[50 60 50]],
mainstats = { health = 5000, objectname = "benzcom2.s3o" },
customparams = { modelradius = [[30]], shield_emit_height = 35.75 },
wreckmodel = "benzcom2_wreck.s3o",
},
dynassault3 = {
level = 3,
collisionvolumescales = [[55 65 55]],
mainstats = { health = 5700, objectname = "benzcom3.s3o", },
customparams = { modelradius = [[33]], shield_emit_height = 39 },
wreckmodel = "benzcom3_wreck.s3o",
},
dynassault4 = {
level = 4,
collisionvolumescales = [[58 68 58]],
mainstats = { health = 6600, objectname = "benzcom4.s3o", },
customparams = { modelradius = [[34]], shield_emit_height = 40.625 },
wreckmodel = "benzcom4_wreck.s3o",
},
dynassault5 = {
level = 5,
collisionvolumescales = [[60 71 60]],
mainstats = { health = 7600, objectname = "benzcom5.s3o", },
customparams = { modelradius = [[36]], shield_emit_height = 42.25 },
wreckmodel = "benzcom5_wreck.s3o",
},
},
},
dynamic_comm_defs_name = "assault",
---@param shared ModularCommDefsShared
dynamic_comm_defs = function(shared)

local extraLevelCostFunction = shared.extraLevelCostFunction
local morphBuildPower = shared.morphBuildPower
local morphCosts = shared.morphCosts
local COST_MULT = shared.COST_MULT
local GetCloneModuleString = shared.GetCloneModuleString
local morphUnitDefFunction = shared.morphUnitDefFunction
local moduleDefNames = shared.moduleDefNames

local function GetAssaultCloneModulesString(modulesByDefID)
return (modulesByDefID[moduleDefNames.assault.commweapon_personal_shield] or 0) ..
(modulesByDefID[moduleDefNames.assault.commweapon_areashield] or 0)
end

return {
name = "assault",
humanName = "Guardian",
baseUnitDef = UnitDefNames and UnitDefNames["dynassault0"].id,
extraLevelCostFunction = extraLevelCostFunction,
maxNormalLevel = 5,
secondPeashooter = false,
levelDefs = {
[0] = {
morphBuildPower = 5,
morphBaseCost = 0,
chassisApplicationFunction = function(modules, sharedData)
sharedData.autorepairRate = (sharedData.autorepairRate or 0) + 5
sharedData.drones = (sharedData.drones or 0) + 1
end,
morphUnitDefFunction = function(modulesByDefID)
return UnitDefNames["dynassault0"].id
end,
upgradeSlots = {},
},
[1] = {
morphBuildPower = morphBuildPower[1],
morphBaseCost = morphCosts[1],
chassisApplicationFunction = function(modules, sharedData)
sharedData.autorepairRate = (sharedData.autorepairRate or 0) + 5
sharedData.drones = (sharedData.drones or 0) + 1
end,
morphUnitDefFunction = function(modulesByDefID)
return UnitDefNames["dynassault1_" .. GetAssaultCloneModulesString(modulesByDefID)].id
end,
upgradeSlots = {
{
defaultModule = moduleDefNames.assault.commweapon_beamlaser,
slotAllows = "basic_weapon",
},
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
},
},
[2] = {
morphBuildPower = morphBuildPower[2],
morphBaseCost = morphCosts[2] * COST_MULT,
chassisApplicationFunction = function(modules, sharedData)
sharedData.autorepairRate = (sharedData.autorepairRate or 0) + 5
sharedData.drones = (sharedData.drones or 0) + 2
end,
morphUnitDefFunction = function(modulesByDefID)
return UnitDefNames["dynassault2_" .. GetAssaultCloneModulesString(modulesByDefID)].id
end,
upgradeSlots = {
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
},
},
[3] = {
morphBuildPower = morphBuildPower[3],
morphBaseCost = morphCosts[3] * COST_MULT,
chassisApplicationFunction = function(modules, sharedData)
sharedData.autorepairRate = (sharedData.autorepairRate or 0) + 5
sharedData.drones = (sharedData.drones or 0) + 2
end,
morphUnitDefFunction = function(modulesByDefID)
return UnitDefNames["dynassault3_" .. GetAssaultCloneModulesString(modulesByDefID)].id
end,
upgradeSlots = {
{
defaultModule = moduleDefNames.assault.commweapon_beamlaser_adv,
slotAllows = { "dual_basic_weapon", "adv_weapon" },
},
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
},
},
[4] = {
morphBuildPower = morphBuildPower[4],
morphBaseCost = morphCosts[4] * COST_MULT,
chassisApplicationFunction = function(modules, sharedData)
sharedData.autorepairRate = (sharedData.autorepairRate or 0) + 5
sharedData.drones = (sharedData.drones or 0) + 2
end,
morphUnitDefFunction = function(modulesByDefID)
return UnitDefNames["dynassault4_" .. GetAssaultCloneModulesString(modulesByDefID)].id
end,
upgradeSlots = {
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
},
},
[5] = {
morphBuildPower = morphBuildPower[5],
morphBaseCost = morphCosts[5] * COST_MULT,
chassisApplicationFunction = function(modules, sharedData)
sharedData.autorepairRate = (sharedData.autorepairRate or 0) + 5
sharedData.drones = (sharedData.drones or 0) + 3
end,
morphUnitDefFunction = function(modulesByDefID)
return UnitDefNames["dynassault5_" .. GetAssaultCloneModulesString(modulesByDefID)].id
end,
upgradeSlots = {
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
{
defaultModule = moduleDefNames.assault.nullmodule,
slotAllows = "module",
},
},
},
}
}
end,
dyncomm_chassis_generator = {
name = "dynassault1",
weapons = {
"commweapon_peashooter",
"commweapon_rocketlauncher", -- 430
"commweapon_rocketlauncher_napalm", -- 430
"commweapon_rocketlauncher", -- 430
"commweapon_rocketlauncher_napalm", -- 430
"commweapon_beamlaser",
"commweapon_heatray",
"commweapon_heavymachinegun",
"commweapon_flamethrower",
"commweapon_riotcannon",
"commweapon_riotcannon_napalm",
"commweapon_peashooter",
"commweapon_beamlaser",
"commweapon_heatray",
"commweapon_heavymachinegun",
"commweapon_flamethrower",
"commweapon_riotcannon",
"commweapon_riotcannon_napalm",
"commweapon_hpartillery",
"commweapon_hpartillery_napalm",
"commweapon_disintegrator",
"commweapon_napalmgrenade",
"commweapon_slamrocket",
"commweapon_clusterbomb",
-- Space for shield
}
},
dyncomms_predefined = {
dyntrainer_assault = {
name = "Guardian",
chassis = "assault",
modules = {
{ "commweapon_heavymachinegun", "module_radarnet" },
{ "module_ablative_armor", "module_autorepair" },
{ "commweapon_shotgun", "commweapon_personal_shield", "module_heavy_armor" },
{ "module_dmg_booster", "module_dmg_booster", "module_heavy_armor" },
{ "conversion_disruptor", "module_dmg_booster", "module_heavy_armor" },
},
--decorations = {"banner_overhead"},
--images = {overhead = "166"}
},
},
staticcomms = {
"dynassault",
{ { 0, 0 }, { 1, 0 }, { 1, 1 }, { 1, 1 }, { 1, 1 } },
{ "module_personal_shield", "module_areashield" }
}
}
Loading