Skip to content

Commit 71e17e0

Browse files
committed
Add support for the new modding framework, while still supporting ModImporter. Dealt with some potential naming conflicts/incompatibilities with other mods due to functions being global and not under the mod's table.
1 parent cc4fe8d commit 71e17e0

File tree

11 files changed

+128
-62
lines changed

11 files changed

+128
-62
lines changed

HadesIIRandomizer/boon_randomizer.lua renamed to Dannyj1-HadesIIRandomizer/boon_randomizer.lua

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
See the License for the specific language governing permissions and
1414
limitations under the License.
1515
]]
16-
function randomizeBoons()
16+
17+
if not Hades2Randomizer.Config.Enabled then
18+
return
19+
end
20+
21+
function Hades2Randomizer.randomizeBoons()
1722
LootData = DeepCopyTable(Hades2Randomizer.Data.LootData)
1823

1924
local rng = Hades2Randomizer.Data.Rng
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
]]
1616

17-
local mod = ModUtil.Mod.Register("Hades2Randomizer")
18-
19-
mod.Config = {
17+
Hades2Randomizer.Config = {
2018
Enabled = true,
2119
RandomizeEnemies = true,
2220
RandomizeBoons = true,
2321
RandomizeElementalTraits = true,
2422
ScaleStats = true
2523
}
24+
25+
return Hades2Randomizer.Config
Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
]]
1616

17+
if not Hades2Randomizer.Config.Enabled then
18+
return
19+
end
20+
1721
Hades2Randomizer.Data = {
1822
RoomCounter = 0,
1923
Rng = RandomInit(64),
@@ -47,24 +51,24 @@ ModUtil.LoadOnce(function()
4751

4852
-- Load enemy data
4953
for biome, enemies in pairs(EnemySets) do
50-
if tableContains(Hades2Randomizer.Data.IgnoredSets, biome) then
54+
if Hades2Randomizer.tableContains(Hades2Randomizer.Data.IgnoredSets, biome) then
5155
goto continue
5256
end
5357

5458
for _, enemy in ipairs(enemies) do
5559
if EnemyData[enemy] ~= nil then
56-
if string.find(string.lower(enemy), "miniboss") or tableContains(Hades2Randomizer.Data.MiniBosses, enemy) then
57-
if not tableContains(Hades2Randomizer.Data.MiniBosses, enemy) then
60+
if string.find(string.lower(enemy), "miniboss") or Hades2Randomizer.tableContains(Hades2Randomizer.Data.MiniBosses, enemy) then
61+
if not Hades2Randomizer.tableContains(Hades2Randomizer.Data.MiniBosses, enemy) then
5862
table.insert(Hades2Randomizer.Data.MiniBosses, enemy)
5963
end
6064
elseif string.find(string.lower(enemy), "elite") or (EnemyData[enemy].InheritFrom ~= nil
61-
and tableContains(EnemyData[enemy].InheritFrom, "Elite")) or EnemyData[enemy].HealthBuffer ~= nil then
65+
and Hades2Randomizer.tableContains(EnemyData[enemy].InheritFrom, "Elite")) or EnemyData[enemy].HealthBuffer ~= nil then
6266
-- Elite enemies generally have armor
63-
if not tableContains(Hades2Randomizer.Data.EliteEnemies, enemy) then
67+
if not Hades2Randomizer.tableContains(Hades2Randomizer.Data.EliteEnemies, enemy) then
6468
table.insert(Hades2Randomizer.Data.EliteEnemies, enemy)
6569
end
6670
else
67-
if not tableContains(Hades2Randomizer.Data.Enemies, enemy) then
71+
if not Hades2Randomizer.tableContains(Hades2Randomizer.Data.Enemies, enemy) then
6872
table.insert(Hades2Randomizer.Data.Enemies, enemy)
6973
end
7074
end
@@ -78,54 +82,54 @@ ModUtil.LoadOnce(function()
7882
for _, data in pairs(LootData) do
7983
if data.PriorityUpgrades ~= nil then
8084
for _, upgrade in ipairs(data.PriorityUpgrades) do
81-
if not tableContains(Hades2Randomizer.Data.PriorityUpgrades, upgrade) then
85+
if not Hades2Randomizer.tableContains(Hades2Randomizer.Data.PriorityUpgrades, upgrade) then
8286
table.insert(Hades2Randomizer.Data.PriorityUpgrades, upgrade)
8387
end
8488
end
8589
end
8690

8791
if data.WeaponUpgrades ~= nil then
8892
for _, upgrade in ipairs(data.WeaponUpgrades) do
89-
if not tableContains(Hades2Randomizer.Data.WeaponUpgrades, upgrade) then
93+
if not Hades2Randomizer.tableContains(Hades2Randomizer.Data.WeaponUpgrades, upgrade) then
9094
table.insert(Hades2Randomizer.Data.WeaponUpgrades, upgrade)
9195
end
9296
end
9397
end
9498

9599
if data.Traits ~= nil then
96100
for _, trait in ipairs(data.Traits) do
97-
if not tableContains(Hades2Randomizer.Data.Traits, trait) then
101+
if not Hades2Randomizer.tableContains(Hades2Randomizer.Data.Traits, trait) then
98102
table.insert(Hades2Randomizer.Data.Traits, trait)
99103
end
100104
end
101105
end
102106

103107
if data.Consumables ~= nil then
104108
for _, consumable in ipairs(data.Consumables) do
105-
if not tableContains(Hades2Randomizer.Data.Consumables, consumable) then
109+
if not Hades2Randomizer.tableContains(Hades2Randomizer.Data.Consumables, consumable) then
106110
table.insert(Hades2Randomizer.Data.Consumables, consumable)
107111
end
108112
end
109113
end
110114

111115
if data.OffersElementalTrait ~= nil then
112116
for _, trait in ipairs(data.OffersElementalTrait) do
113-
if not tableContains(Hades2Randomizer.Data.ElementalTraits, trait) then
117+
if not Hades2Randomizer.tableContains(Hades2Randomizer.Data.ElementalTraits, trait) then
114118
table.insert(Hades2Randomizer.Data.ElementalTraits, trait)
115119
end
116120
end
117121
end
118122
end
119123
end)
120124

121-
function isElite(enemy)
122-
return tableContains(Hades2Randomizer.Data.EliteEnemies, enemy)
125+
function Hades2Randomizer.isElite(enemy)
126+
return Hades2Randomizer.tableContains(Hades2Randomizer.Data.EliteEnemies, enemy)
123127
end
124128

125-
function isMiniBoss(enemy)
126-
return tableContains(Hades2Randomizer.Data.MiniBosses, enemy)
129+
function Hades2Randomizer.isMiniBoss(enemy)
130+
return Hades2Randomizer.tableContains(Hades2Randomizer.Data.MiniBosses, enemy)
127131
end
128132

129-
function isEnemy(enemy)
130-
return tableContains(Hades2Randomizer.Data.Enemies, enemy)
133+
function Hades2Randomizer.isEnemy(enemy)
134+
return Hades2Randomizer.tableContains(Hades2Randomizer.Data.Enemies, enemy)
131135
end

HadesIIRandomizer/enemy_randomizer.lua renamed to Dannyj1-HadesIIRandomizer/enemy_randomizer.lua

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
]]
1616

17+
if not Hades2Randomizer.Config.Enabled then
18+
return
19+
end
20+
1721
-- TODO: Randomize Chronos spawns and maybe Scylla spawns if that doesn't become too difficult
18-
function randomizeEnemies()
22+
function Hades2Randomizer.randomizeEnemies()
1923
local rng = Hades2Randomizer.Data.Rng
2024
local availableEnemies = DeepCopyTable(Hades2Randomizer.Data.Enemies)
2125
local availableEliteEnemies = DeepCopyTable(Hades2Randomizer.Data.EliteEnemies)
@@ -143,7 +147,7 @@ function randomizeEnemies()
143147
end
144148

145149
for key, enemies in pairs(EnemySets) do
146-
if tableContains(Hades2Randomizer.Data.IgnoredSets, key) then
150+
if Hades2Randomizer.tableContains(Hades2Randomizer.Data.IgnoredSets, key) then
147151
goto continue
148152
end
149153

Dannyj1-HadesIIRandomizer/main.lua

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--[[
2+
Copyright 2024 Danny Jelsma
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
https://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
]]
16+
17+
rom.mods['SGG_Modding-DemonDaemon'].auto()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "Hades II Randomizer",
3+
"version_number": "1.0.0",
4+
"website_url": "https://github.com/Dannyj1/HadesIIRandomizer/",
5+
"description": "Hades II Randomizer is a randomizer mod for the game Hades II. It randomizes certain parts of the game everytime you start a new run. ",
6+
"dependencies": [
7+
"Hell2Modding-Hell2Modding-1.0.22",
8+
"SGG_Modding-DemonDaemon-1.0.1",
9+
"SGG_Modding-ModUtil-3.1.0"
10+
]
11+
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
Top Import "register.lua"
12
Top Import "config.lua"
3+
24
Import "utils.lua"
35
Import "data.lua"
46
Import "enemy_randomizer.lua"
57
Import "boon_randomizer.lua"
68
Import "stat_scaler.lua"
7-
Import "main.lua"
8-
9-
9+
Import "randomizer_core.lua"

HadesIIRandomizer/main.lua renamed to Dannyj1-HadesIIRandomizer/randomizer_core.lua

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ function StartOver(args)
2626
EnemyData = DeepCopyTable(Hades2Randomizer.Data.EnemyData)
2727

2828
if Hades2Randomizer.Config.RandomizeEnemies then
29-
randomizeEnemies()
29+
Hades2Randomizer.randomizeEnemies()
3030
end
3131

3232
if Hades2Randomizer.Config.ScaleStats then
33-
scaleStats()
33+
Hades2Randomizer.scaleStats()
3434
end
3535

3636
if Hades2Randomizer.Config.RandomizeBoons then
37-
randomizeBoons()
37+
Hades2Randomizer.randomizeBoons()
3838
end
3939

4040
oStartOver(args)
@@ -45,7 +45,7 @@ function DoUnlockRoomExits(run, room)
4545
Hades2Randomizer.Data.RoomCounter = Hades2Randomizer.Data.RoomCounter + 1
4646

4747
if Hades2Randomizer.Config.ScaleStats then
48-
scaleStats()
48+
Hades2Randomizer.scaleStats()
4949
end
5050

5151
oDoUnlockRoomExits(run, room)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--[[
2+
Copyright 2024 Danny Jelsma
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
https://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
]]
16+
17+
return ModUtil.Mod.Register("Hades2Randomizer")
Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,40 @@ local originalMaxMinibossHealth = {}
2020
local originalMaxMinibossArmor = {}
2121
local originalDifficulty = {}
2222

23+
if not Hades2Randomizer.Config.Enabled then
24+
return
25+
end
26+
27+
local function restoreOriginalStats()
28+
for enemyName, health in pairs(originalMaxHealth) do
29+
EnemyData[enemyName].MaxHealth = health
30+
end
31+
32+
for enemyName, armor in pairs(originalMaxArmor) do
33+
EnemyData[enemyName].HealthBuffer = armor
34+
end
35+
36+
for enemyName, health in pairs(originalMaxMinibossHealth) do
37+
EnemyData[enemyName].MaxHealth = health
38+
end
39+
40+
for enemyName, armor in pairs(originalMaxMinibossArmor) do
41+
EnemyData[enemyName].HealthBuffer = armor
42+
end
43+
44+
for enemyName, difficulty in pairs(originalDifficulty) do
45+
EnemyData[enemyName].GeneratorData.DifficultyRating = difficulty
46+
end
47+
48+
originalMaxHealth = {}
49+
originalMaxArmor = {}
50+
originalMaxMinibossHealth = {}
51+
originalMaxMinibossArmor = {}
52+
originalDifficulty = {}
53+
end
54+
2355
-- TODO: Add min health and min difficulty (to fix very long encounters)
24-
function scaleStats()
56+
function Hades2Randomizer.scaleStats()
2557
restoreOriginalStats()
2658

2759
local maxHealth = 999999999
@@ -47,15 +79,15 @@ function scaleStats()
4779
end
4880

4981
for enemyName, values in pairs(EnemyData) do
50-
if not isEnemy(enemyName) and not isElite(enemyName) and not isMiniBoss(enemyName) then
82+
if not Hades2Randomizer.isEnemy(enemyName) and not Hades2Randomizer.isElite(enemyName) and not Hades2Randomizer.isMiniBoss(enemyName) then
5183
goto continue
5284
end
5385

5486
if string.lower(enemyName) == "crawlerminiboss" then
5587
goto continue
5688
end
5789

58-
if isMiniBoss(enemyName) then
90+
if Hades2Randomizer.isMiniBoss(enemyName) then
5991
if values.MaxHealth ~= nil then
6092
values.MaxHealth = math.min(values.MaxHealth, maxMinibossHealth)
6193
originalMaxMinibossHealth[enemyName] = values.MaxHealth
@@ -90,31 +122,3 @@ function scaleStats()
90122
::continue::
91123
end
92124
end
93-
94-
function restoreOriginalStats()
95-
for enemyName, health in pairs(originalMaxHealth) do
96-
EnemyData[enemyName].MaxHealth = health
97-
end
98-
99-
for enemyName, armor in pairs(originalMaxArmor) do
100-
EnemyData[enemyName].HealthBuffer = armor
101-
end
102-
103-
for enemyName, health in pairs(originalMaxMinibossHealth) do
104-
EnemyData[enemyName].MaxHealth = health
105-
end
106-
107-
for enemyName, armor in pairs(originalMaxMinibossArmor) do
108-
EnemyData[enemyName].HealthBuffer = armor
109-
end
110-
111-
for enemyName, difficulty in pairs(originalDifficulty) do
112-
EnemyData[enemyName].GeneratorData.DifficultyRating = difficulty
113-
end
114-
115-
originalMaxHealth = {}
116-
originalMaxArmor = {}
117-
originalMaxMinibossHealth = {}
118-
originalMaxMinibossArmor = {}
119-
originalDifficulty = {}
120-
end

0 commit comments

Comments
 (0)