1
0
mirror of https://github.com/veden/Rampant.git synced 2025-03-17 20:58:35 +02:00

FACTO-91: Added custom colors and mod setting pattern from ErdwurmJim

This commit is contained in:
Aaron Veden 2022-04-07 20:54:40 -07:00
parent cd37f6a7d8
commit aadb6dfed9
No known key found for this signature in database
GPG Key ID: FF5990B1C6DD3F84
4 changed files with 248 additions and 32 deletions

View File

@ -1,5 +1,7 @@
---------------------------------------------------------------------------------------------------
Version: 3.0.0
Contributions:
- Added custom colors from ErdwurmJim
Notes:
- Will reset maps of in progress games. This means that all enemy units will be removed and new enemy faction mutations will be reset.
Improvement:
@ -7,6 +9,7 @@ Version: 3.0.0
- AI is now per regional base
- Regional bases now have there own aggressive and siege squad counter and cleanup process
- Added beltlayer, pipelayer, and blueprint-sandboxes mod surfaces to surface exclusion list
- Added mod settings to customize factions colors
Tweaks:
- Added surface minime_dummy_dungeon and minime-preview-character to exclusion list
- Increased unit spawner cooldown by 2x

View File

@ -438,6 +438,37 @@ for tier=1, 10 do
end
end
local function hexToRGBA(hex)
local index = 1
local a = {"r","g","b","a"}
local tint = {}
string.gsub(
hex,
"..",
function(cc)
tint[a[index]] = tonumber(cc, 16) / 255
index = index+1
end
)
return tint
end
local function convertHexPairs(hexPairString)
if #hexPairString ~= 17 then
error(
"Invalid rgba hex value for Rampant new enemy color, each color needs to have `rrggbbaa rrggbbaa`:" .. hexPairString
)
end
local index = 1
local a = {"tint", "tint2"}
local tints = {}
for hex in string.gmatch(hexPairString, "%x%x%x%x%x%x%x%x") do
tints[a[index]] = hexToRGBA(hex)
index = index + 1
end
return tints
end
constants.FACTIONS_BY_DAMAGE_TYPE = {
["physical"] = {
-- "physical",
@ -495,10 +526,11 @@ constants.FACTIONS_BY_DAMAGE_TYPE = {
constants.FACTION_SET = {}
local neutralTints = convertHexPairs(settings.startup["rampant--neutralTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "neutral",
tint = {r=0.9, g=0.9, b=0.9, a=1},
tint2 = {r=1, g=1, b=1, a=1},
tint = neutralTints.tint,
tint2 = neutralTints.tint2,
acceptRate = {1, 7, 0.3, 0.1},
evo = 0,
units = {
@ -579,10 +611,11 @@ if settings.startup["rampant--acidEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["poison"][#constants.FACTIONS_BY_DAMAGE_TYPE["poison"]+1] = "acid"
constants.FACTIONS_BY_DAMAGE_TYPE["explosion"][#constants.FACTIONS_BY_DAMAGE_TYPE["explosion"]+1] = "acid"
constants.FACTIONS_BY_DAMAGE_TYPE["acid"][#constants.FACTIONS_BY_DAMAGE_TYPE["acid"]+1] = "acid"
local acidTints = convertHexPairs(settings.startup["rampant--acidTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "acid",
tint = {r=1, g=1, b=1, a=1},
tint2 = {r=0.4, g=0.9, b=0.4, a=1},
tint = acidTints.tint,
tint2 = acidTints.tint2,
acceptRate = {1, 10, 0.1, 0.2},
evo = 0,
units = {
@ -662,10 +695,11 @@ end
if settings.startup["rampant--laserEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["laser"][#constants.FACTIONS_BY_DAMAGE_TYPE["laser"]+1] = "laser"
constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "laser"
local laserTints = convertHexPairs(settings.startup["rampant--laserTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "laser",
tint = {r=0.3, g=0.3, b=0.42, a=1},
tint2 = {r=0, g=1, b=1, a=1},
tint = laserTints.tint,
tint2 = laserTints.tint2,
acceptRate = {2, 10, 0.1, 0.15},
evo = 0.10,
units = {
@ -739,10 +773,11 @@ end
if settings.startup["rampant--fireEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["fire"][#constants.FACTIONS_BY_DAMAGE_TYPE["fire"]+1] = "fire"
constants.FACTIONS_BY_DAMAGE_TYPE["acid"][#constants.FACTIONS_BY_DAMAGE_TYPE["acid"]+1] = "fire"
local fireTints = convertHexPairs(settings.startup["rampant--fireTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "fire",
tint = {r=1, g=1, b=1, a=1},
tint2 = {r=0.9, g=0.2, b=0.2, a=1},
tint = fireTints.tint,
tint2 = fireTints.tint2,
acceptRate = {2, 10, 0.1, 0.15},
evo = 0.12,
units = {
@ -822,10 +857,11 @@ end
if settings.startup["rampant--infernoEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["fire"][#constants.FACTIONS_BY_DAMAGE_TYPE["fire"]+1] = "inferno"
constants.FACTIONS_BY_DAMAGE_TYPE["acid"][#constants.FACTIONS_BY_DAMAGE_TYPE["acid"]+1] = "inferno"
local infernoTints = convertHexPairs(settings.startup["rampant--infernoTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "inferno",
tint = {r=0.5, g=0.1, b=0.1, a=1},
tint2 = {r=0.9, g=0.1, b=0.1, a=1},
tint = infernoTints.tint,
tint2 = infernoTints.tint2,
acceptRate = {3, 10, 0.1, 0.125},
evo = 0.2,
units = {
@ -883,10 +919,11 @@ end
if settings.startup["rampant--waspEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["laser"][#constants.FACTIONS_BY_DAMAGE_TYPE["laser"]+1] = "wasp"
constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "wasp"
local waspTints = convertHexPairs(settings.startup["rampant--waspTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "wasp",
tint = {r=1, g=1, b=0, a=1},
tint2 = {r=0, g=0, b=0, a=1},
tint = waspTints.tint,
tint2 = waspTints.tint2,
acceptRate = {3, 10, 0.1, 0.125},
evo = 0.2,
units = {
@ -952,10 +989,11 @@ if settings.startup["rampant--spawnerEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "spawner"
constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "spawner"
constants.FACTIONS_BY_DAMAGE_TYPE["physical"][#constants.FACTIONS_BY_DAMAGE_TYPE["physical"]+1] = "spawner"
local spawnerTints = convertHexPairs(settings.startup["rampant--spawnerTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "spawner",
tint = {r=0.7, g=0.1, b=0.7, a=1},
tint2 = {r=1, g=0.4, b=1, a=1},
tint = spawnerTints.tint,
tint2 = spawnerTints.tint2,
acceptRate = {3, 10, 0.1, 0.125},
evo = 0.2,
units = {
@ -1026,10 +1064,11 @@ end
if settings.startup["rampant--electricEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["laser"][#constants.FACTIONS_BY_DAMAGE_TYPE["laser"]+1] = "electric"
constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "electric"
local electricTints = convertHexPairs(settings.startup["rampant--electricTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "electric",
tint = {r=0.7, g=0.7, b=1.0, a=1},
tint2 = {r=0.2, g=0.2, b=1, a=1},
tint = electricTints.tint,
tint2 = electricTints.tint2,
acceptRate = {2, 10, 0.1, 0.15},
evo = 0.1,
units = {
@ -1088,10 +1127,11 @@ if settings.startup["rampant--physicalEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["physical"][#constants.FACTIONS_BY_DAMAGE_TYPE["physical"]+1] = "physical"
constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "physical"
constants.FACTIONS_BY_DAMAGE_TYPE["explosion"][#constants.FACTIONS_BY_DAMAGE_TYPE["explosion"]+1] = "physical"
local physicalTints = convertHexPairs(settings.startup["rampant--physicalTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "physical",
tint = {r=0.9, g=0.9, b=0.9, a=1},
tint2 = {r=0.8, g=0.8, b=0.8, a=1},
tint = physicalTints.tint,
tint2 = physicalTints.tint2,
acceptRate = {2, 10, 0.1, 0.15},
evo = 0.12,
units = {
@ -1150,10 +1190,11 @@ if settings.startup["rampant--trollEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["physical"][#constants.FACTIONS_BY_DAMAGE_TYPE["physical"]+1] = "troll"
constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "troll"
constants.FACTIONS_BY_DAMAGE_TYPE["explosion"][#constants.FACTIONS_BY_DAMAGE_TYPE["explosion"]+1] = "troll"
local trollTints = convertHexPairs(settings.startup["rampant--trollTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "troll",
tint = {r=0.4, g=0.4, b=0.4, a=1},
tint2 = {r=1, g=0.2, b=0.2, a=1},
tint = trollTints.tint,
tint2 = trollTints.tint2,
acceptRate = {3, 10, 0.1, 0.125},
evo = 0.17,
units = {
@ -1213,10 +1254,11 @@ if settings.startup["rampant--poisonEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["fire"][#constants.FACTIONS_BY_DAMAGE_TYPE["fire"]+1] = "poison"
constants.FACTIONS_BY_DAMAGE_TYPE["acid"][#constants.FACTIONS_BY_DAMAGE_TYPE["acid"]+1] = "poison"
constants.FACTIONS_BY_DAMAGE_TYPE["poison"][#constants.FACTIONS_BY_DAMAGE_TYPE["poison"]+1] = "poison"
local poisonTints = convertHexPairs(settings.startup["rampant--poisonTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "poison",
tint = {r=0.4, g=0.6, b=0.5, a=1},
tint2 = {r=0, g=0.7, b=0, a=1},
tint = poisonTints.tint,
tint2 = poisonTints.tint2,
acceptRate = {2, 10, 0.1, 0.15},
evo = 0.17,
units = {
@ -1278,10 +1320,11 @@ end
if settings.startup["rampant--suicideEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "suicide"
constants.FACTIONS_BY_DAMAGE_TYPE["poison"][#constants.FACTIONS_BY_DAMAGE_TYPE["poison"]+1] = "suicide"
local suicideTints = convertHexPairs(settings.startup["rampant--suicideTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "suicide",
tint = {r=0.8, g=0.8, b=0.8, a=1},
tint2 = {r=1, g=0.5, b=0, a=1},
tint = suicideTints.tint,
tint2 = suicideTints.tint2,
acceptRate = {2, 10, 0.05, 0.15},
evo = 0.35,
units = {
@ -1339,10 +1382,11 @@ end
if settings.startup["rampant--nuclearEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["impact"][#constants.FACTIONS_BY_DAMAGE_TYPE["impact"]+1] = "nuclear"
constants.FACTIONS_BY_DAMAGE_TYPE["poison"][#constants.FACTIONS_BY_DAMAGE_TYPE["poison"]+1] = "nuclear"
local nuclearTints = convertHexPairs(settings.startup["rampant--nuclearTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "nuclear",
tint = {r=0.1, g=0.95, b=0.1, a=1},
tint2 = {r=1, g=0.5, b=0, a=1},
tint = nuclearTints.tint,
tint2 = nuclearTints.tint2,
acceptRate = {4, 10, 0.1, 0.125},
evo = 0.45,
units = {
@ -1399,10 +1443,11 @@ end
if settings.startup["rampant--energyThiefEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["laser"][#constants.FACTIONS_BY_DAMAGE_TYPE["laser"]+1] = "energy-thief"
constants.FACTIONS_BY_DAMAGE_TYPE["electric"][#constants.FACTIONS_BY_DAMAGE_TYPE["electric"]+1] = "energy-thief"
local energyThiefTints = convertHexPairs(settings.startup["rampant--energyThiefTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "energy-thief",
tint = {r=0.2, g=0.2, b=0.4, a=1},
tint2 = {r=0.1, g=0.1, b=0.1, a=1},
tint = energyThiefTints.tint,
tint2 = energyThiefTints.tint2,
acceptRate = {3, 10, 0.1, 0.125},
evo = 0.2,
units = {
@ -1460,10 +1505,11 @@ if settings.startup["rampant--fastEnemy"].value then
constants.FACTIONS_BY_DAMAGE_TYPE["physical"][#constants.FACTIONS_BY_DAMAGE_TYPE["physical"]+1] = "fast"
constants.FACTIONS_BY_DAMAGE_TYPE["explosion"][#constants.FACTIONS_BY_DAMAGE_TYPE["explosion"]+1] = "fast"
constants.FACTIONS_BY_DAMAGE_TYPE["fire"][#constants.FACTIONS_BY_DAMAGE_TYPE["fire"]+1] = "fast"
local fastTints = convertHexPairs(settings.startup["rampant--fastTints"].value)
constants.FACTION_SET[#constants.FACTION_SET+1] = {
type = "fast",
tint = {r=0.9, g=0.9, b=0.9, a=1},
tint2 = {r=1, g=1, b=0.1, a=1},
tint = fastTints.tint,
tint2 = fastTints.tint2,
acceptRate = {2, 10, 0.1, 0.15},
evo = 0.12,
units = {

View File

@ -18891,6 +18891,22 @@ rampant--acidEnemy=World: Acidic Biter Faction
rampant--energyThiefEnemy=World: Sapper Biter Faction
rampant--poisonEnemy=World: Poison Biter Faction
rampant--neutralTints=World: Neutral Biter Faction Colors
rampant--laserTints=World: Laser Biter Faction Colors
rampant--waspTints=World: Wasp Biter Faction Colors
rampant--spawnerTints=World: Spawner Biter Faction Colors
rampant--trollTints=World: Regenerative Biter Faction Colors
rampant--fastTints=World: Fast Biter Faction Colors
rampant--infernoTints=World: Inferno Biter Faction Colors
rampant--nuclearTints=World: Nuclear Biter Faction Colors
rampant--electricTints=World: Electric Biter Faction Colors
rampant--fireTints=World: Fire Biter Faction Colors
rampant--suicideTints=World: Suicide Biter Faction Colors
rampant--physicalTints=World: Brutal Biter Faction Colors
rampant--acidTints=World: Acidic Biter Faction Colors
rampant--energyThiefTints=World: Sapper Biter Faction Colors
rampant--poisonTints=World: Poison Biter Faction Colors
rampant--disableCollidingProjectiles=Projectiles: Non biter force colliding projectiles
rampant--enableFullMapScan=Compatibility: Enable full map scanning
rampant--unitAndSpawnerFadeTime=Biter, Spitter, Worm, Nest, and Hive Corpse Fade Time
@ -18995,6 +19011,22 @@ rampant--acidEnemy=Acid Biter Faction, Major resistance to Acid, Minor resistanc
rampant--energyThiefEnemy=Sapper Biter Faction, Major resistance to Electric, Minor resistance to Laser. Destroying powered structures creates draining crystals.
rampant--poisonEnemy=Poison Biter Faction, Only Biters. On death creates a cloud that heals biters and hurts player objects. Major resistance to Poison, Minor weakness to Electric, Minor weakness to Explosive, Minor weakness to Laser, Minor resistance to Fire.
rampant--neutralTints=Both colors should have 8 hex characters rrggbbaa
rampant--laserTints=Both colors should have 8 hex characters rrggbbaa
rampant--waspTints=Both colors should have 8 hex characters rrggbbaa
rampant--spawnerTints=Both colors should have 8 hex characters rrggbbaa
rampant--trollTints=Both colors should have 8 hex characters rrggbbaa
rampant--fastTints=Both colors should have 8 hex characters rrggbbaa
rampant--infernoTints=Both colors should have 8 hex characters rrggbbaa
rampant--nuclearTints=Both colors should have 8 hex characters rrggbbaa
rampant--electricTints=Both colors should have 8 hex characters rrggbbaa
rampant--fireTints=Both colors should have 8 hex characters rrggbbaa
rampant--suicideTints=Both colors should have 8 hex characters rrggbbaa
rampant--physicalTints=Both colors should have 8 hex characters rrggbbaa
rampant--acidTints=Both colors should have 8 hex characters rrggbbaa
rampant--energyThiefTints=Both colors should have 8 hex characters rrggbbaa
rampant--poisonTints=Both colors should have 8 hex characters rrggbbaa
rampant--disableCollidingProjectiles=Biter projectiles no longer collide with other biters, worms or nests. Everything else still collides with biter projectiles.
rampant--enableFullMapScan=This setting causes the game map to slowly be scanned for entities created or destroyed outside of the factorio event system. (If a mod isnt using script_raised_built or script_raised_destroyed this will cause Rampant to still eventually be consistent with the game map)

View File

@ -13,7 +13,6 @@
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>.
data:extend({
{
@ -943,7 +942,6 @@ data:extend({
per_user = false
},
{
type = "double-setting",
name = "rampant--unitHiveRespawnScaler",
@ -1001,3 +999,140 @@ data:extend({
}
})
-- Converts the RGBA struct to Hexadecimal discarding the alpha value.
-- Since the RGBA struct stores values as percent (0-1) and not actual RGB (0-255) there might be precision errors when converting.
local function rgbaToHex(rgba)
local r = string.format("%x", rgba.r * 255)
local g = string.format("%x", rgba.g * 255)
local b = string.format("%x", rgba.b * 255)
local a = string.format("%x", rgba.a * 255)
if #r == 1 then
r = "0"..r
end
if #g == 1 then
g = "0"..g
end
if #b == 1 then
b = "0"..b
end
if #a == 1 then
a = "0"..a
end
return r..g..b..a
end
-- Sets the default value of the faction tint settings.
-- Change this function if the formating of the tint settings changes.
local function setDefaultValue(tint, tint2)
return rgbaToHex(tint) .. " " .. rgbaToHex(tint2)
end
local FACTIONS = {
{
-- Neutral faction
type = "neutral",
tint = {r = 0.90, g = 0.90, b = 0.90, a = 1},
tint2 = {r = 1, g = 1, b = 1, a = 1}
},
{
-- Acidic faction
type = "acid",
tint = {r = 1, g = 1, b = 1, a = 1},
tint2 = {r = 0.40, g = 0.90, b = 0.40, a = 1}
},
{
-- Laser faction
type = "laser",
tint = {r = 0.60, g = 0.60, b = 0.84, a = 1},
tint2 = {r = 0.60, g = 0.60, b = 0.84, a = 1}
},
{
-- Fire faction
type = "fire",
tint = {r = 1, g = 1, b = 1, a = 1},
tint2 = {r = 0.90, g = 0.20, b = 0.20, a = 1}
},
{
-- Inferno faction
type = "inferno",
tint = {r = 0.90, g = 0.75, b = 0.75, a = 1},
tint2 = {r = 0.70, g = 0.30, b = 0.30, a = 1}
},
{
-- Wasp faction
type = "wasp",
tint = {r = 1, g = 1, b = 0.70, a = 1},
tint2 = {r = 0.50, g = 0.50, b = 0, a = 1}
},
{
-- Spawner faction
type = "spawner",
tint = {r = 1, g = 0.80, b = 1, a = 1},
tint2 = {r = 0.90, g = 0.30, b = 0.90, a = 1}
},
{
-- Electric faction
type = "electric",
tint = {r = 0.80, g = 0.80, b = 1, a = 1},
tint2 = {r = 0.30, g = 0.30, b = 1, a = 1}
},
{
-- Brutal faction
type = "physical",
tint = {r = 0.90, g = 0.90, b = 0.90, a = 1},
tint2 = {r = 0.80, g = 0.80, b = 0.80, a = 1}
},
{
-- Regenerative faction
type = "troll",
tint = {r = 0.55, g = 0.55, b = 0.55, a = 1},
tint2 = {r = 1, g = 0.30, b = 0.30, a = 1}
},
{
-- Poison faction
type = "poison",
tint = {r = 0.50, g = 0.70, b = 0.60, a = 1},
tint2 = {r = 0.30, g = 0.90, b = 0.30, a = 1}
},
{
-- Suicide faction
type = "suicide",
tint = {r = 0.80, g = 0.80, b = 0.80, a = 1},
tint2 = {r = 1, g = 0.50, b = 0, a = 1}
},
{
-- Nuclear faction
type = "nuclear",
tint = {r = 0.10, g = 0.95, b = 0.10, a = 1},
tint2 = {r = 1, g = 0.50, b = 0, a = 1}
},
{
-- Sapper faction
type = "energyThief",
tint = {r = 0.50, g = 0.50, b = 0.70, a = 1},
tint2 = {r = 0.40, g = 0.40, b = 0.40, a = 1}
},
{
-- Fast faction
type = "fast",
tint = {r = 0.90, g = 0.90, b = 0.90, a = 1},
tint2 = {r = 1, g = 1, b = 0.10, a = 1}
}
}
for i = 1, #FACTIONS do
local entry = FACTIONS[i]
local setting = "rampant--" .. entry.type .. "Tints"
data:extend({
{
type = "string-setting",
name = setting,
description = setting,
setting_type = "startup",
default_value = setDefaultValue(entry.tint, entry.tint2),
order = "p[modifier]-r[zzunit]",
},
})
end