Skip to content
Draft
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,919 changes: 1,843 additions & 76 deletions src/Data/Spectres.lua

Large diffs are not rendered by default.

3,435 changes: 2,161 additions & 1,274 deletions src/Data/WorldAreas.lua

Large diffs are not rendered by default.

236 changes: 199 additions & 37 deletions src/Export/Minions/SpectreList.txt

Large diffs are not rendered by default.

157 changes: 157 additions & 0 deletions src/Export/Minions/Spectres.txt
Original file line number Diff line number Diff line change
Expand Up @@ -671,6 +671,10 @@ local minions, mod, flag = ...
#flags recommendedSpectre
#emit

#spectre Metadata/Monsters/PitifulFabrications/PitifulFabrication02
#flags recommendedSpectre
#emit

#spectre Metadata/Monsters/PitifulFabrications/PitifulFabrication03_
#emit

Expand Down Expand Up @@ -1481,3 +1485,156 @@ local minions, mod, flag = ...

#spectre Metadata/Monsters/LeagueIncursionNew/Thaumaturge/SpittingSnakeExperiment
#emit

#spectre Metadata/Monsters/PrecursorDrillSphere/DrillSphere
#emit

#spectre Metadata/Monsters/PrecursorCannisterMover/PrecursorCannisterMover
#emit

#spectre Metadata/Monsters/PrecursorCorruptionProcessor/PrecursorCorruptionProcessor
#emit

#spectre Metadata/Monsters/PrecursorRaptorDefender/RaptorDefender_
#emit

#spectre Metadata/Monsters/PrecursorCentipedeTrain/PrecursorCentipedeTrainHead
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/AntFaction/AntCarrierExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/AntFaction/BaneSaplingExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/AntFaction/HoneyAntExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/AntFaction/NettleAntExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/ArachnidFaction/ShakariExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/ArachnidFaction/TumourSpiderExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/CrustaceanFaction/AnglerFishParasiteExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/CrustaceanFaction/ShellMonsterExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/HumanoidFaction/IceCasterExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/HumanoidFaction/MassGoldSkeletonExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/ParasiteFaction/MantaRayParasiteExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/ParasiteFaction/OctopusParasiteExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/ParasiteFaction/ParasiteHostMonsterExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/Fodder/Cocoon3Expedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/Fodder/PlagueBringerExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/Fodder/PlagueMorph1Expedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/Fodder/PlagueMorph2Expedition_
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/Fodder/PlagueMorph3Expedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/Fodder/PlagueMorph4Expedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/Fodder/PlagueNymphExpedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/Fodder/TumourStatue2Expedition
#emit

#spectre Metadata/Monsters/LeagueExpeditionNew/Expedition2/Fodder/TumourStatueSnakeExpedition
#emit

#spectre Metadata/Monsters/CorpseWheel/PlagueCorpseWheel
#emit

#spectre Metadata/Monsters/BloodClan/BloodClanTrapper
#emit

#spectre Metadata/Monsters/BloodClan/BloodClanVillager
#emit

#spectre Metadata/Monsters/BloodClan/BloodClanCaster
#emit

#spectre Metadata/Monsters/BloodClan/BloodClanVaulter
#emit

#spectre Metadata/Monsters/BloodClan/BloodClanDagger
#emit

#spectre Metadata/Monsters/BloodClan/BloodClanKina
#emit

#spectre Metadata/Monsters/BloodClan/BloodClanHarpooner
#emit

#spectre Metadata/Monsters/BloodClan/BloodClanBirdFisherman
#emit

#spectre Metadata/Monsters/BloodClan/BloodClanBird
#emit

#spectre Metadata/Monsters/VaalConstructs/Monkey/VaalConstructMonkey
#emit

#spectre Metadata/Monsters/VaalConstructs/Monkey/VaalConstructMonkeyHead
#emit

#spectre Metadata/Monsters/VaalMonsters/ViperNapuatzi/ViperNapuatziSnakeMinion
#emit

#spectre Metadata/Monsters/VaalMonsters/Living/Minions/VaalJaguarMinion
#emit

#spectre Metadata/Monsters/VaalMonsters/Living/Minions/VaalSnakeMinion
#emit

#spectre Metadata/Monsters/VaalMonsters/Living/Minions/VaalMonkeyMinion_
#emit

#spectre Metadata/Monsters/SerpentHusk/snakes/SerpentHuskSnake
#emit

#spectre Metadata/Monsters/LeagueDelirium/DeliriumMinion1
#emit

#spectre Metadata/Monsters/LeagueDelirium/DeliriumMinion2
#emit

#spectre Metadata/Monsters/LeagueDelirium/DeliriumMinion3
#emit

#spectre Metadata/Monsters/LeagueDelirium/DeliriumMinion4
#emit

#spectre Metadata/Monsters/LeagueDelirium/DeliriumMinion5_
#emit

#spectre Metadata/Monsters/LeagueDelirium/DeliriumMinion6_
#emit

#spectre Metadata/Monsters/LeagueDelirium/DeliriumDemonColdIceSpear
#emit
47 changes: 25 additions & 22 deletions src/Export/Scripts/minions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,13 @@ local function tableToString(tbl, pre)
return tableString .. " }"
end

local function getOTStats(OTFile, modList)
local function getOTStats(OTFile, modList, visited)
visited = visited or {}
if visited[OTFile] then
return modList
end
visited[OTFile] = true

local file = OTFile..".ot"
local text
if main.ggpk.ot[file] then
Expand All @@ -55,7 +61,7 @@ local function getOTStats(OTFile, modList)
for line in text:gmatch("[^\r\n]+") do
local superClass = line:match("extends \"(.+)\"")
if superClass and superClass ~= "Metadata/Monsters/Monster" and superClass ~= "nothing" then
modList = getOTStats(superClass, modList)
modList = getOTStats(superClass, modList, visited)
end
-- Detect start of a block
if line:match("^Stats") then
Expand Down Expand Up @@ -224,27 +230,24 @@ directiveTable.emit = function(state, args, out)
if mapRow.NativePacks then
for _, nativePack in ipairs(mapRow.NativePacks) do
if nativePack.Id == packId then
local areaIds = {}
for _, areaId in ipairs(areaIds) do
local area = dat("WorldAreas"):GetRow("Id", areaId)
if area and area.Name ~= "NULL" and not area.Name:match("DNT") then
local isMap = false
for _, tag in ipairs(area.Tags or {}) do
if tag.Id == "map" then
isMap = true
end
end
local displayName = area.Name
if isMap then
displayName = displayName .. " (Map)"
elseif area.Act and area.Act ~= 10 then
displayName = displayName .. " (Act " .. tostring(area.Act) .. ")"
end
if not seenAreas[displayName] then
table.insert(worldAreaNames, displayName)
seenAreas[displayName] = true
local area = dat("WorldAreas"):GetRow("Id", mapRow.Id.Id)
if area and area.Name ~= "NULL" and not area.Name:match("DNT") then
local isMap = false
for _, tag in ipairs(area.Tags or {}) do
if tag.Id == "map" then
isMap = true
end
end
local displayName = area.Name
if isMap then
displayName = displayName .. " (Map)"
elseif area.Act and area.Act ~= 10 then
displayName = displayName .. " (Act " .. tostring(area.Act) .. ")"
end
if not seenAreas[displayName] then
table.insert(worldAreaNames, displayName)
seenAreas[displayName] = true
end
end
end
end
Expand Down Expand Up @@ -308,7 +311,7 @@ directiveTable.emit = function(state, args, out)
out:write('\tbaseMovementSpeed = ', monsterVariety.MovementSpeed, ',\n')
if monsterVariety.ExperienceMultiplier then
out:write('\tspectreReservation = ', math.floor(((monsterVariety.ExperienceMultiplier/100) ^ 0.75) * 50), ',\n')
out:write('\tcompanionReservation = ', (round(math.sqrt(monsterVariety.ExperienceMultiplier/100), 2) * 30), ',\n')
out:write('\tcompanionReservation = ', (round(math.sqrt(monsterVariety.ExperienceMultiplier/100), 2) * 30), ',\n')
end
if monsterVariety.MonsterCategory then
out:write('\tmonsterCategory = "', (monsterVariety.MonsterCategory.Type), '",\n')
Expand Down
1 change: 1 addition & 0 deletions src/Export/Scripts/spectreList.lua
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ for monster in dat("MonsterVarieties"):Rows() do
and not monster.Type.IsPlayerMinion == true
and not monster.Id:match("NPC")
and not monster.Name:match("DNT")
and not monster.Name:match("Testling")
and not monster.AIScript:match("NoAI")
and #monster.GrantedEffects ~= 0 then
for _, name in ipairs(uniqueName) do
Expand Down
82 changes: 82 additions & 0 deletions src/Export/Scripts/spectreSkillCheck.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
--
-- Check for Spectres that have no skills in PoB yet.
--

-- Build skill lookup (Spectre + Minion + Other)
local skillLookup = {}

local function loadSkillFile(path)
local f = io.open(path, "r")
if f then
for line in f:lines() do
local skillId = line:match('skills%[%"(.-)%"%]')
if skillId then
skillLookup[skillId] = true
end
end
f:close()
end
end

-- Load all skill sources
loadSkillFile("../Data/Skills/Spectre.lua")
loadSkillFile("../Data/Skills/Minion.lua")
loadSkillFile("../Data/Skills/Other.lua")

-- Parse Spectres.lua for ids + skillLists
local spectres = {}
local file = io.open("../Data/Spectres.lua", "r")

if file then
local currentId = nil
local inSkillList = false

for line in file:lines() do
-- detect new spectre
local id = line:match('minions%[%"(.-)%"%]')
if id then
currentId = id
spectres[currentId] = { skills = {} }
end

-- detect skillList start
if line:find("skillList%s*=%s*{") then
inSkillList = true
end

-- read skills
if inSkillList and currentId then
for skillId in line:gmatch('%"(.-)%"') do
table.insert(spectres[currentId].skills, skillId)
end
end

-- detect end of skillList
if inSkillList and line:find("}") then
inSkillList = false
end
end

file:close()
end

local notFoundSpectres = {}
-- Validate
for id, data in pairs(spectres) do
local found = false

for _, skillId in ipairs(data.skills) do
-- skip default attack if you want (optional)
if skillLookup[skillId] then
found = true
break
end
end

if not found then
table.insert(notFoundSpectres, id)
print("No spectre skill: " .. id)
end
end

print("Total Spectres without at least one skill: " .. tostring(#notFoundSpectres))
Loading
Loading