diff --git a/Upgrade.lua b/Upgrade.lua new file mode 100644 index 0000000..1fe21c2 --- /dev/null +++ b/Upgrade.lua @@ -0,0 +1,125 @@ +local upgrade = {} + +-- imports + +local constants = require("libs/Constants") +local mathUtils = require("libs/MathUtils") + +-- constants + +local INTERVAL_LOGIC = constants.INTERVAL_LOGIC +local INTERVAL_PROCESS = constants.INTERVAL_PROCESS + +local MAX_RALLY_CRIES = constants.MAX_RALLY_CRIES + +-- imported functions + +local roundToNearest = mathUtils.roundToNearest + +-- module code + +function upgrade.attempt(natives, regionMap) + local starting = global.version + if (global.version == nil) then + + -- removed in version 9 + -- regionMap.pQ = {{}} -- processing queue + -- regionMap.pI = 1 -- insertion location for chunk processing + -- regionMap.pP = 1 -- index for the chunk set to process + -- regionMap.pR = -1 -- current processing roll + natives.squads = {} + natives.scouts = {} + natives.tunnels = {} + natives.points = 0 + + global.version = constants.VERSION_5 + end + if (global.version < constants.VERSION_9) then + + -- remove version 5 references + regionMap.pQ = nil + regionMap.pI = nil + regionMap.pP = nil + regionMap.pR = nil + + global.version = constants.VERSION_9 + end + if (global.version < constants.VERSION_10) then + for _,squad in pairs(natives.squads) do + squad.frenzy = false + squad.frenzyPosition = {x=0,y=0} + squad.rabid = false + end + + global.version = constants.VERSION_10 + end + if (global.version < constants.VERSION_11) then + natives.state = constants.AI_STATE_AGGRESSIVE + natives.temperament = 0 + -- needs to be on inner logic tick loop interval + natives.stateTick = roundToNearest(game.tick + INTERVAL_LOGIC, INTERVAL_LOGIC) + natives.temperamentTick = roundToNearest(game.tick + INTERVAL_LOGIC, INTERVAL_LOGIC) + + global.version = constants.VERSION_11 + end + if (global.version < constants.VERSION_12) then + for _,squad in pairs(natives.squads) do + squad.status = constants.SQUAD_GUARDING + squad.kamikaze = false + end + + -- reset ai build points due to error in earning points + natives.points = 0 + + global.version = constants.VERSION_12 + end + if (global.version < constants.VERSION_13) then + -- switched over to tick event + regionMap.logicTick = roundToNearest(game.tick + INTERVAL_LOGIC, INTERVAL_LOGIC) + regionMap.processTick = roundToNearest(game.tick + INTERVAL_PROCESS, INTERVAL_PROCESS) + + -- used to rate limit the number of rally cries during a period of time + natives.rallyCries = MAX_RALLY_CRIES + + global.version = constants.VERSION_13 + end + if (global.version < constants.VERSION_14) then + game.map_settings.unit_group.member_disown_distance = 5 + game.map_settings.unit_group.max_member_speedup_when_behind = 1.1 + game.map_settings.unit_group.max_member_slowdown_when_ahead = 1.0 + game.map_settings.unit_group.max_group_slowdown_factor = 0.9 + + game.surfaces[1].print("Rampant - Version 0.14.11") + global.version = constants.VERSION_14 + end + if (global.version < constants.VERSION_16) then + + natives.lastShakeMessage = 0 + --remove version 14 retreat limit, it has been made redundant + natives.retreats = nil + + game.map_settings.unit_group.max_group_radius = 20 + + game.surfaces[1].print("Rampant - Version 0.14.13") + global.version = constants.VERSION_16 + end + if (global.version < constants.VERSION_18) then + + natives.safeEntities = {} + natives.safeEntityName = {} + + game.surfaces[1].print("Rampant - Version 0.15.5") + global.version = constants.VERSION_18 + end + if (global.version < constants.VERSION_20) then + + natives.aiPointsScaler = settings.global["rampant-aiPointsScaler"].value + natives.aiNocturnalMode = settings.global["rampant-permanentNocturnal"].value + + game.surfaces[1].print("Rampant - Version 0.15.8") + global.version = constants.VERSION_20 + end + return starting ~= global.version +end + +return upgrade diff --git a/control.lua b/control.lua index 3a02b4f..72cc514 100644 --- a/control.lua +++ b/control.lua @@ -1,5 +1,6 @@ -- imports +local upgrade = require("Upgrade") local entityUtils = require("libs/EntityUtils") local mapUtils = require("libs/MapUtils") local unitGroupUtils = require("libs/UnitGroupUtils") @@ -112,102 +113,10 @@ local function onModSettingsChange(event) end local function onConfigChanged() - if (global.version == nil) then - - -- removed in version 9 - -- regionMap.pQ = {{}} -- processing queue - -- regionMap.pI = 1 -- insertion location for chunk processing - -- regionMap.pP = 1 -- index for the chunk set to process - -- regionMap.pR = -1 -- current processing roll - natives.squads = {} - natives.scouts = {} - natives.tunnels = {} - natives.points = 0 - pendingChunks = {} - - global.version = constants.VERSION_5 - end - if (global.version < constants.VERSION_9) then - - -- remove version 5 references - regionMap.pQ = nil - regionMap.pI = nil - regionMap.pP = nil - regionMap.pR = nil - - global.version = constants.VERSION_9 - end - if (global.version < constants.VERSION_10) then - for _,squad in pairs(natives.squads) do - squad.frenzy = false - squad.frenzyPosition = {x=0,y=0} - squad.rabid = false - end - - global.version = constants.VERSION_10 - end - if (global.version < constants.VERSION_11) then - natives.state = constants.AI_STATE_AGGRESSIVE - natives.temperament = 0 - -- needs to be on inner logic tick loop interval - natives.stateTick = roundToNearest(game.tick + INTERVAL_LOGIC, INTERVAL_LOGIC) - natives.temperamentTick = roundToNearest(game.tick + INTERVAL_LOGIC, INTERVAL_LOGIC) - - global.version = constants.VERSION_11 - end - if (global.version < constants.VERSION_12) then - for _,squad in pairs(natives.squads) do - squad.status = constants.SQUAD_GUARDING - squad.kamikaze = false - end - - -- reset ai build points due to error in earning points - natives.points = 0 - - global.version = constants.VERSION_12 - end - if (global.version < constants.VERSION_13) then - -- switched over to tick event - regionMap.logicTick = roundToNearest(game.tick + INTERVAL_LOGIC, INTERVAL_LOGIC) - regionMap.processTick = roundToNearest(game.tick + INTERVAL_PROCESS, INTERVAL_PROCESS) - - -- used to rate limit the number of rally cries during a period of time - natives.rallyCries = MAX_RALLY_CRIES - - global.version = constants.VERSION_13 - end - if (global.version < constants.VERSION_14) then - game.map_settings.unit_group.member_disown_distance = 5 - game.map_settings.unit_group.max_member_speedup_when_behind = 1.1 - game.map_settings.unit_group.max_member_slowdown_when_ahead = 1.0 - game.map_settings.unit_group.max_group_slowdown_factor = 0.9 - - game.surfaces[1].print("Rampant - Version 0.14.11") - global.version = constants.VERSION_14 - end - if (global.version < constants.VERSION_16) then - - natives.lastShakeMessage = 0 - --remove version 14 retreat limit, it has been made redundant - natives.retreats = nil - - game.map_settings.unit_group.max_group_radius = 20 - - game.surfaces[1].print("Rampant - Version 0.14.13") - global.version = constants.VERSION_16 - end - if (global.version < constants.VERSION_18) then - - natives.safeEntities = {} - natives.safeEntityName = {} - - game.surfaces[1].print("Rampant - Version 0.15.5") - global.version = constants.VERSION_18 - end - if (global.version < constants.VERSION_19) then - + if upgrade.attempt(natives, regionMap) then onModSettingsChange(nil) - + + game.surfaces[1].print("Reindexing chunks, please wait") -- clear old regionMap processing Queue -- prevents queue adding duplicate chunks -- chunks are by key, so should overwrite old @@ -224,10 +133,7 @@ local function onConfigChanged() area = { left_top = { x = chunk.x * 32, y = chunk.y * 32 }}}) end - - game.surfaces[1].print("Rampant - Version 0.15.6") - global.version = constants.VERSION_19 - end + end end local function onTick(event) diff --git a/info.json b/info.json index 4fc1d72..cbb069d 100644 --- a/info.json +++ b/info.json @@ -1,7 +1,7 @@ { "name" : "Rampant", "factorio_version" : "0.15", - "version" : "0.15.7", + "version" : "0.15.8", "title" : "Rampant AI", "author" : "Veden", "homepage" : "https://forums.factorio.com/viewtopic.php?f=94&t=31445", diff --git a/libs/AIPlanning.lua b/libs/AIPlanning.lua index 7624a04..f06742b 100644 --- a/libs/AIPlanning.lua +++ b/libs/AIPlanning.lua @@ -38,6 +38,10 @@ function aiPlanning.planning(natives, evolution_factor, tick, surface) maxPoints = maxPoints * 0.85 end if (natives.points < maxPoints) then + -- check for ai points scaler being nil + if not natives.aiPointsScaler then + natives.aiPointsScaler = settings.global["rampant-aiPointsScaler"].value + end natives.points = natives.points + math.floor((AI_POINT_GENERATOR_AMOUNT * math.random()) + ((AI_POINT_GENERATOR_AMOUNT * 0.7) * (evolution_factor ^ 2.5)) * natives.aiPointsScaler) end diff --git a/libs/Constants.lua b/libs/Constants.lua index 01cbad2..dbb58f1 100644 --- a/libs/Constants.lua +++ b/libs/Constants.lua @@ -14,6 +14,7 @@ constants.VERSION_16 = 16 constants.VERSION_17 = 17 constants.VERSION_18 = 18 constants.VERSION_19 = 19 +constants.VERSION_20 = 20 -- misc diff --git a/make.rkt b/make.rkt index 6c7fae0..715b0c8 100644 --- a/make.rkt +++ b/make.rkt @@ -30,6 +30,7 @@ (string->path "data-updates.lua") (string->path "LICENSE.md") (string->path "tests.lua") + (string->path "Upgrade.lua") (string->path "settings.lua") (string->path "README.md") (string->path "NOTICE") @@ -66,6 +67,7 @@ (copyFile "data.lua" modFolder) (copyFile "data-updates.lua" modFolder) (copyFile "settings.lua" modFolder) + (copyFile "Upgrade.lua" modFolder) (copyFile "tests.lua" modFolder) (copyDirectory "libs" modFolder) (copyDirectory "locale" modFolder) @@ -73,7 +75,7 @@ (copyDirectory "prototypes" modFolder))) (define (run) - ;;(copyFiles modFolder) - (makeZip modFolder) + (copyFiles modFolder) + ;;(makeZip modFolder) ) )