diff --git a/Upgrade.lua b/Upgrade.lua index 0dc92fc..71c2525 100755 --- a/Upgrade.lua +++ b/Upgrade.lua @@ -2,7 +2,6 @@ local upgrade = {} -- imports -local squadAttack = require("libs/SquadAttack") local constants = require("libs/Constants") local mathUtils = require("libs/MathUtils") @@ -17,8 +16,6 @@ local SQUAD_GUARDING = constants.SQUAD_GUARDING -- imported functions -local scoreAttackLocation = squadAttack.scoreAttackLocation - local roundToNearest = mathUtils.roundToNearest -- module code @@ -245,14 +242,16 @@ function upgrade.attempt(natives) game.surfaces[natives.activeSurface].print("Rampant - Version 0.16.37") global.version = constants.VERSION_72 end - if (global.version < constants.VERSION_73) then + if (global.version < constants.VERSION_74) then - for _,squad in pairs(natives.squads) do - squad.attackScoreFunction = scoreAttackLocation + for _,squad in pairs(natives.squads) do + squad.status = SQUAD_GUARDING + squad.cycles = 0 + squad.attackScoreFunction = nil end - game.surfaces[natives.activeSurface].print("Rampant - Version 0.16.38") - global.version = constants.VERSION_73 + game.surfaces[natives.activeSurface].print("Rampant - Version 0.16.39") + global.version = constants.VERSION_74 end return starting ~= global.version, natives diff --git a/changelog.txt b/changelog.txt index cba9d94..511476b 100755 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,10 @@ +--------------------------------------------------------------------------------------------------- +Version: 0.16.39 +Date: 2. 15. 2019 + Bugfixes: + - Reset squad scoring functions and set default scoring function + - Switched to single instance require statements causing multiple sentinel memory objects + --------------------------------------------------------------------------------------------------- Version: 0.16.38 Date: 2. 14. 2019 diff --git a/control.lua b/control.lua index f32422b..660e1b1 100755 --- a/control.lua +++ b/control.lua @@ -582,8 +582,7 @@ local function onSurfaceTileChange(event) local position = tiles[i].position local chunk = getChunkByPosition(map, position, true) - -- weird bug with table pointer equality using name instead of pointer comparison - if not chunk.name then + if (chunk ~= SENTINEL_IMPASSABLE_CHUNK) then map.chunkToPassScan[chunk] = true else local x,y = positionToChunkXY(position) diff --git a/info.json b/info.json index a59a47e..e5e3b78 100755 --- a/info.json +++ b/info.json @@ -1,7 +1,7 @@ { "name" : "Rampant", "factorio_version" : "0.16", - "version" : "0.16.38", + "version" : "0.16.39", "title" : "Rampant", "author" : "Veden", "homepage" : "https://forums.factorio.com/viewtopic.php?f=94&t=31445", diff --git a/libs/AIAttackWave.lua b/libs/AIAttackWave.lua index 36d8960..6696f6e 100755 --- a/libs/AIAttackWave.lua +++ b/libs/AIAttackWave.lua @@ -1,3 +1,6 @@ +if (aiAttackWaveG) then + return aiAttackWaveG +end local aiAttackWave = {} -- imports @@ -256,4 +259,5 @@ function aiAttackWave.formSquads(map, surface, natives, chunk, cost) return (natives.points - cost) > 0 end +aiAttackWaveG = aiAttackWave return aiAttackWave diff --git a/libs/AIPlanning.lua b/libs/AIPlanning.lua index fc02d6b..571ded2 100755 --- a/libs/AIPlanning.lua +++ b/libs/AIPlanning.lua @@ -1,3 +1,6 @@ +if aiPlanningG then + return aiPlanningG +end local aiPlanning = {} -- imports @@ -145,4 +148,5 @@ function aiPlanning.planning(natives, evolution_factor, tick, surface, connected end +aiPlanningG = aiPlanning return aiPlanning diff --git a/libs/AIPredicates.lua b/libs/AIPredicates.lua index 88db393..8e41802 100755 --- a/libs/AIPredicates.lua +++ b/libs/AIPredicates.lua @@ -1,3 +1,6 @@ +if (aiPredicatesG) then + return aiPredicatesG +end local aiPredicates = {} -- imports @@ -33,4 +36,5 @@ function aiPredicates.canMigrate(natives, surface) (natives.aiNocturnalMode and surface.darkness > 0.65)) end +aiPredicatesG = aiPredicates return aiPredicates diff --git a/libs/BaseUtils.lua b/libs/BaseUtils.lua index f197fd9..dee1af7 100755 --- a/libs/BaseUtils.lua +++ b/libs/BaseUtils.lua @@ -1,3 +1,6 @@ +if baseUtilsG then + return baseUtilsG +end local baseUtils = {} -- imports @@ -828,4 +831,5 @@ function baseUtils.rebuildNativeTables(natives, surface, rg) natives.evolutionTableWorm = normalizeProbabilities(natives.evolutionTableWorm) end +baseUtilsG = baseUtils return baseUtils diff --git a/libs/BobsBaseUtils.lua b/libs/BobsBaseUtils.lua index 7718dac..5d19ca2 100755 --- a/libs/BobsBaseUtils.lua +++ b/libs/BobsBaseUtils.lua @@ -1,3 +1,6 @@ +if bobsBaseUnits then + return bobsBaseUnits +end local bobs = {} -- imports @@ -118,4 +121,5 @@ function bobs.processBobsUnitClass(natives, surface) end +bobsBaseUnits = bobs return bobs diff --git a/libs/ChunkProcessor.lua b/libs/ChunkProcessor.lua index 67033f4..a922722 100755 --- a/libs/ChunkProcessor.lua +++ b/libs/ChunkProcessor.lua @@ -1,3 +1,6 @@ +if (chunkProcessorG) then + return chunkProcessorG +end local chunkProcessor = {} -- imports @@ -159,4 +162,5 @@ end -- end +chunkProcessorG = chunkProcessor return chunkProcessor diff --git a/libs/ChunkPropertyUtils.lua b/libs/ChunkPropertyUtils.lua index d51cb8a..7cea62c 100755 --- a/libs/ChunkPropertyUtils.lua +++ b/libs/ChunkPropertyUtils.lua @@ -1,3 +1,6 @@ +if chunkPropertyUtilsG then + return chunkPropertyUtilsG +end local chunkPropertyUtils = {} local constants = require("Constants") @@ -74,7 +77,7 @@ function chunkPropertyUtils.getRallyTick(map, chunk) end function chunkPropertyUtils.setRallyTick(map, chunk, tick) - map.chunkToRallys[chunk] = tick + map.chunkToRallys[chunk] = tick end function chunkPropertyUtils.setRetreatTick(map, chunk, tick) @@ -147,7 +150,7 @@ function chunkPropertyUtils.decayDeathGenerator(map, chunk) else map.chunkToDeathGenerator[chunk] = gen end - end + end end function chunkPropertyUtils.getPlayerBaseGenerator(map, chunk) @@ -160,12 +163,12 @@ function chunkPropertyUtils.addSquadToChunk(map, chunk, squad) if squad.chunk ~= chunk then chunkPropertyUtils.removeSquadFromChunk(map, squad) end - + if not chunkToSquad[chunk] then chunkToSquad[chunk] = {} end chunkToSquad[chunk][squad] = squad - + squad.chunk = chunk end @@ -204,4 +207,5 @@ function chunkPropertyUtils.addPlayerBaseGenerator(map, chunk, playerGenerator) map.chunkToPlayerBase[chunk] = (map.chunkToPlayerBase[chunk] or 0) + playerGenerator end +chunkPropertyUtilsG = chunkPropertyUtils return chunkPropertyUtils diff --git a/libs/ChunkUtils.lua b/libs/ChunkUtils.lua index 85c2f12..bebee79 100755 --- a/libs/ChunkUtils.lua +++ b/libs/ChunkUtils.lua @@ -1,3 +1,6 @@ +if chunkUtilsG then + return chunkUtilsG +end local chunkUtils = {} -- imports @@ -547,4 +550,5 @@ function chunkUtils.makeImmortalEntity(surface, entity) newEntity.destructible = false end +chunkUtilsG = chunkUtils return chunkUtils diff --git a/libs/Constants.lua b/libs/Constants.lua index a9d6e83..ff6db28 100755 --- a/libs/Constants.lua +++ b/libs/Constants.lua @@ -1,3 +1,6 @@ +if constantsG then + return constantsG +end local constants = {} -- versions @@ -23,6 +26,7 @@ constants.VERSION_51 = 51 constants.VERSION_57 = 57 constants.VERSION_72 = 72 constants.VERSION_73 = 73 +constants.VERSION_74 = 74 -- misc @@ -710,4 +714,5 @@ constants.POISON_UNIT_TIERS = unitTiers constants.POISON_UNIT_VARIATIONS = unitVariations +constantsG = constants return constants diff --git a/libs/Interop.lua b/libs/Interop.lua index 2479a98..8c87f2e 100755 --- a/libs/Interop.lua +++ b/libs/Interop.lua @@ -1,3 +1,6 @@ +if interopG then + return interopG +end local interop = {} local unitGroupUtils = require("UnitGroupUtils") @@ -84,4 +87,5 @@ function interop.registerUnitGroup(unitGroup) unitGroupUtils.createSquad(unitGroup.position, unitGroup.surface, global.natives, unitGroup) end +interopG = interop return interop diff --git a/libs/MapProcessor.lua b/libs/MapProcessor.lua index 5e542ec..484619c 100755 --- a/libs/MapProcessor.lua +++ b/libs/MapProcessor.lua @@ -1,3 +1,6 @@ +if mapProcessorG then + return mapProcessorG +end local mapProcessor = {} -- imports @@ -307,4 +310,5 @@ function mapProcessor.scanMap(map, surface, natives, tick) end end +mapProcessorG = mapProcessor return mapProcessor diff --git a/libs/MapUtils.lua b/libs/MapUtils.lua index 8482896..86c2db8 100755 --- a/libs/MapUtils.lua +++ b/libs/MapUtils.lua @@ -1,3 +1,6 @@ +if mapUtilsG then + return mapUtilsG +end local mapUtils = {} -- imports @@ -87,11 +90,11 @@ function mapUtils.getNeighborChunks(map, x, y) neighbors[5] = xChunks[y] or SENTINEL_IMPASSABLE_CHUNK neighbors[8] = xChunks[chunkYRow3] or SENTINEL_IMPASSABLE_CHUNK else - neighbors[3] = SENTINEL_IMPASSABLE_CHUNK + neighbors[3] = SENTINEL_IMPASSABLE_CHUNK neighbors[5] = SENTINEL_IMPASSABLE_CHUNK neighbors[8] = SENTINEL_IMPASSABLE_CHUNK end - + xChunks = map[x] if xChunks then neighbors[2] = xChunks[chunkYRow1] or SENTINEL_IMPASSABLE_CHUNK @@ -152,14 +155,14 @@ function mapUtils.getCardinalChunks(map, x, y) neighbors[1] = SENTINEL_IMPASSABLE_CHUNK neighbors[4] = SENTINEL_IMPASSABLE_CHUNK end - + xChunks = map[x-CHUNK_SIZE] if xChunks then neighbors[2] = xChunks[y] or SENTINEL_IMPASSABLE_CHUNK else neighbors[2] = SENTINEL_IMPASSABLE_CHUNK end - + xChunks = map[x+CHUNK_SIZE] if xChunks then neighbors[3] = xChunks[y] or SENTINEL_IMPASSABLE_CHUNK @@ -186,7 +189,7 @@ function mapUtils.positionFromDirectionAndChunk(direction, startPosition, endPos endPosition.x = startPosition.x + CHUNK_SIZE * scaling endPosition.y = startPosition.y elseif (direction == 6) then - endPosition.x = startPosition.x - CHUNK_SIZE * scaling + endPosition.x = startPosition.x - CHUNK_SIZE * scaling endPosition.y = startPosition.y + CHUNK_SIZE * scaling elseif (direction == 7) then endPosition.x = startPosition.x @@ -198,4 +201,5 @@ function mapUtils.positionFromDirectionAndChunk(direction, startPosition, endPos return endPosition end +mapUtilsG = mapUtils return mapUtils diff --git a/libs/MathUtils.lua b/libs/MathUtils.lua index 62f0262..a277c32 100755 --- a/libs/MathUtils.lua +++ b/libs/MathUtils.lua @@ -1,3 +1,6 @@ +if mathUtilsG then + return mathUtilsG +end local mathUtils = {} -- imports @@ -8,7 +11,7 @@ local constants = require("Constants") local TICKS_A_MINUTE = constants.TICKS_A_MINUTE -local INTERVAL_LOGIC = constants.INTERVAL_LOGIC +local INTERVAL_LOGIC = constants.INTERVAL_LOGIC -- imported functions @@ -45,7 +48,7 @@ function mathUtils.xorRandom(state) local xor = bit32.bxor local lshift = bit32.lshift local rshift = bit32.rshift - + state = state + 21594771 return function() @@ -66,9 +69,9 @@ end --]] function mathUtils.gaussianRandom(mean, std_dev) -- marsagliaPolarMethod - local iid1 - local iid2 - local q + local iid1 + local iid2 + local q repeat iid1 = 2 * mRandom() + -1 iid2 = 2 * mRandom() + -1 @@ -76,7 +79,7 @@ function mathUtils.gaussianRandom(mean, std_dev) until (q ~= 0) and (q < 1) local s = mSqrt((-2 * mLog10(q)) / q) local v = iid1 * s - + return mean + (v * std_dev) end @@ -86,9 +89,9 @@ function mathUtils.gaussianRandomRange(mean, std_dev, min, max) end local r repeat - local iid1 - local iid2 - local q + local iid1 + local iid2 + local q repeat iid1 = 2 * mRandom() + -1 iid2 = 2 * mRandom() + -1 @@ -96,17 +99,17 @@ function mathUtils.gaussianRandomRange(mean, std_dev, min, max) until (q ~= 0) and (q < 1) local s = mSqrt((-2 * mLog10(q)) / q) local v = iid1 * s - + r = mean + (v * std_dev) until (r >= min) and (r <= max) return r end -function mathUtils.gaussianRandomRG(mean, std_dev, rg) +function mathUtils.gaussianRandomRG(mean, std_dev, rg) -- marsagliaPolarMethod - local iid1 - local iid2 - local q + local iid1 + local iid2 + local q repeat iid1 = 2 * rg() + -1 iid2 = 2 * rg() + -1 @@ -114,7 +117,7 @@ function mathUtils.gaussianRandomRG(mean, std_dev, rg) until (q ~= 0) and (q < 1) local s = mSqrt((-2 * mLog10(q)) / q) local v = iid1 * s - + return mean + (v * std_dev) end @@ -124,13 +127,13 @@ function mathUtils.gaussianRandomRangeRG(mean, std_dev, min, max, rg) return min end repeat - local iid1 - local iid2 - local q + local iid1 + local iid2 + local q repeat iid1 = 2 * rg() + -1 iid2 = 2 * rg() + -1 - q = (iid1 * iid1) + (iid2 * iid2) + q = (iid1 * iid1) + (iid2 * iid2) until (q ~= 0) and (q < 1) local s = mSqrt((-2 * mLog10(q)) / q) local v = iid1 * s @@ -170,4 +173,5 @@ function mathUtils.distortPosition(position) position.y = position.y + (yDistort * 48) end +mathUtilsG = mathUtils return mathUtils diff --git a/libs/MovementUtils.lua b/libs/MovementUtils.lua index b65e125..f75c19a 100755 --- a/libs/MovementUtils.lua +++ b/libs/MovementUtils.lua @@ -1,3 +1,6 @@ +if movementUtilsG then + return movementUtilsG +end local movementUtils = {} -- imports @@ -197,4 +200,5 @@ function movementUtils.scoreNeighborsForFormation(neighborChunks, validFunction, return highestChunk, highestDirection end +movementUtilsG = movementUtils return movementUtils diff --git a/libs/NEBaseUtils.lua b/libs/NEBaseUtils.lua index 24f45c2..f0dcb59 100755 --- a/libs/NEBaseUtils.lua +++ b/libs/NEBaseUtils.lua @@ -1,3 +1,6 @@ +if neBaseUtilsG then + return neBaseUtilsG +end local ne = {} -- imports @@ -200,4 +203,5 @@ function ne.processNEUnitClass(natives, surface) end end +neBaseUtilsG = ne return ne diff --git a/libs/PheromoneUtils.lua b/libs/PheromoneUtils.lua index 34da758..27793f0 100755 --- a/libs/PheromoneUtils.lua +++ b/libs/PheromoneUtils.lua @@ -1,3 +1,6 @@ +if pheromoneUtilsG then + return pheromoneUtilsG +end local pheromoneUtils = {} -- imports @@ -203,4 +206,5 @@ function pheromoneUtils.processPheromone(map, chunk, staging) end end +pheromoneUtilsG = pheromoneUtils return pheromoneUtils diff --git a/libs/PlayerUtils.lua b/libs/PlayerUtils.lua index a9db283..f948208 100755 --- a/libs/PlayerUtils.lua +++ b/libs/PlayerUtils.lua @@ -1,3 +1,6 @@ +if playerUtilsG then + return playerUtilsG +end local playerUtils = {} -- imports @@ -25,4 +28,5 @@ function playerUtils.playersWithinProximityToPosition(players, position, distanc return false end +playerUtilsG = playerUtils return playerUtils diff --git a/libs/SquadAttack.lua b/libs/SquadAttack.lua index b76d05f..cfc72f0 100755 --- a/libs/SquadAttack.lua +++ b/libs/SquadAttack.lua @@ -1,3 +1,6 @@ +if (squadAttackG) then + return squadAttackG +end local squadAttack = {} -- imports @@ -9,9 +12,6 @@ local playerUtils = require("PlayerUtils") local movementUtils = require("MovementUtils") local mathUtils = require("MathUtils") local chunkPropertyUtils = require("ChunkPropertyUtils") -local chunkUtils = require("ChunkUtils") - ---local chunkUtils = require("ChunkUtils") -- constants @@ -80,7 +80,7 @@ local function scoreSiegeLocation(squad, neighborChunk) return settle - lookupMovementPenalty(squad, neighborChunk) end -function squadAttack.scoreAttackLocation(natives, squad, neighborChunk) +local function scoreAttackLocation(natives, squad, neighborChunk) local damage if (neighborChunk[MOVEMENT_PHEROMONE] >= 0) then @@ -167,7 +167,7 @@ local function attackMove(map, attackPosition, attackCmd, squad, group, natives, natives, chunk, getNeighborChunks(map, x, y), - squad.attackScoreFunction, + squad.attackScoreFunction or scoreAttackLocation, squad) if (chunk ~= SENTINEL_IMPASSABLE_CHUNK) then addSquadToChunk(map, chunk, squad) @@ -260,7 +260,7 @@ function squadAttack.squadsBeginAttack(natives, players) if squad.kamikaze and (mRandom() < (kamikazeThreshold * 0.75)) then squad.attackScoreFunction = scoreAttackKamikazeLocation else - squad.attackScoreFunction = squadAttack.scoreAttackLocation + squad.attackScoreFunction = scoreAttackLocation end squad.status = SQUAD_RAIDING end @@ -268,4 +268,5 @@ function squadAttack.squadsBeginAttack(natives, players) end end +squadAttackG = squadAttack return squadAttack diff --git a/libs/SquadDefense.lua b/libs/SquadDefense.lua index f765eec..213c94f 100755 --- a/libs/SquadDefense.lua +++ b/libs/SquadDefense.lua @@ -1,3 +1,6 @@ +if aiDefenseG then + return aiDefenseG +end local aiDefense = {} -- imports @@ -113,4 +116,5 @@ function aiDefense.retreatUnits(chunk, position, squad, map, surface, natives, t end end +aiDefenseG = aiDefense return aiDefense diff --git a/libs/StringUtils.lua b/libs/StringUtils.lua index bbe5818..a8faecb 100755 --- a/libs/StringUtils.lua +++ b/libs/StringUtils.lua @@ -1,3 +1,6 @@ +if stringUtilsG then + return stringUtilsG +end local stringUtils = {} local sFind = string.find @@ -10,4 +13,5 @@ function stringUtils.isSpawnerEgg(str) return sFind(str, "spawner", -#"spawner") end +stringUtilsG = stringUtils return stringUtils diff --git a/libs/UnitGroupUtils.lua b/libs/UnitGroupUtils.lua index b986b7d..f64d3e3 100755 --- a/libs/UnitGroupUtils.lua +++ b/libs/UnitGroupUtils.lua @@ -1,3 +1,6 @@ +if unitGroupUtilsG then + return unitGroupUtilsG +end local unitGroupUtils = {} -- imports @@ -305,4 +308,5 @@ function unitGroupUtils.regroupSquads(natives, map) end end +unitGroupUtilsG = unitGroupUtils return unitGroupUtils diff --git a/libs/UnitUtils.lua b/libs/UnitUtils.lua index 213cf57..d612c58 100755 --- a/libs/UnitUtils.lua +++ b/libs/UnitUtils.lua @@ -1,3 +1,6 @@ +if (unitUtilsG) then + return unitUtilsG +end local unitUtils = {} -- imports @@ -50,4 +53,5 @@ function unitUtils.convertTypeToDrainCrystal(evolutionFactor, entity) end end +unitUtilsG = unitUtils return unitUtils