Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
3109a43
Armored Enemies lose outlines when mod is off for a biome, didn't before
cgu11 May 17, 2021
0872bfc
Bugfixes addressing issues 32, 31, 30, 29, 27, and more. Also include…
cgu11 May 17, 2021
46d735e
Added missing trailing newline
cgu11 May 17, 2021
cd22bd6
DontGetVorimed: reformat, simplify CreateLoot wrapper
Museus May 22, 2021
7af761f
InteractableChaos, LootChoiceExt: minor formatting changes
Museus May 22, 2021
cc99e5e
Leaderboard: add presets and update default ruleset
Museus May 22, 2021
48056ad
Rulesets: Update hashes and save settings to file properly
Museus May 22, 2021
03cf24f
MinibossControl: Fix variable names, run UpdateMaxCreations on load
Museus May 29, 2021
32a1307
QuickRestart: set conditions for illegal restarts to avoid bugs, prin…
Museus May 29, 2021
7b1e5ba
BoonSelector: enable filters by default, hide rarity filter if DontGe…
Museus May 29, 2021
d97bb0e
MinibossControl: fix typo in config
Museus May 30, 2021
68ed751
EmoteMod: disable import for now
Museus May 30, 2021
56af131
Release version 1.0.0-rc.2
Museus May 30, 2021
7ce1c0e
Bump version to 1.0.0
Museus Jun 4, 2021
0ecea31
QuickRestart: if RtaTimer exists, restart it
Jul 2, 2021
9083259
Merge pull request #50 from ellomenop/museus-make-rtatimer-reset-with…
cgu11 Jul 18, 2021
b78bd97
Removed FixedHammers, added RunStartControl, updated ModUtil
cgu11 Jul 7, 2021
28c6bd0
Updates to RunStartControl, adjusted default Settings Hash
cgu11 Jul 7, 2021
cfa1543
Updated version# and runstartcontrol issues
cgu11 Jul 7, 2021
0dcd0dd
actually moving bug fixes
cgu11 Jul 7, 2021
4acbd05
Update HadesSpeedrunningModpack.lua
cgu11 Jul 18, 2021
67c95f5
Single run ruleset added
cgu11 Jul 18, 2021
47b55ae
Update HadesSpeedrunningModpack.lua
cgu11 Jul 20, 2021
d6f3a98
QuickRestart: Disallow in Thanatos Encounters until enemies spawn (#52)
Museus Jul 29, 2021
6f4ce91
Miniboss control: removed asterius from leaderboard
Jul 29, 2021
cdd294f
Update version to 1.1.0-rc.2
Jul 29, 2021
8b4a768
Release version v1.1.0
Museus Aug 2, 2021
79098a8
Approval Process high heat bug fixes
Sep 14, 2021
4bb8b65
QuickRestart: add 0.1 second delay before check
Sep 14, 2021
004bfec
Added HellModeToggle feature and corresponding menu button
Sep 14, 2021
6363641
Updating credits menu screen
Sep 14, 2021
eaeb3f8
Hell Mode Toggle final fixes, QoL Menu updated, DontGetVorimed bugfixes
Sep 14, 2021
e77cf7f
Removing Starting Boon Selector (not legal for any category) and fixi…
Sep 14, 2021
c0c97cc
DontGetVorimed: Update submodule reference
Sep 14, 2021
0b560dc
Changing ruleset text to be clearer
Sep 14, 2021
0ff8c91
fixup credits menu and ruleset text
Sep 14, 2021
adce15a
Added charon sack control functionality, no control toggle yet.
Dec 29, 2021
ce90a2b
RtaTimer: Add Low Performance Mode
Museus Feb 11, 2022
9bdafc3
CharonSackControl: Add QoL menu option
Museus Feb 11, 2022
f31d30a
Make QuickRestart spawn you in Courtyard
Museus Mar 5, 2022
e382aa2
QuickRestart: set temporary InputBlock for autosplitter to detect
Museus Mar 6, 2022
8fa9388
Make LowPerformance mode the default
Museus Mar 6, 2022
44d6f0d
QuickRestart: add setting to re-equip starting keepsake
Museus Mar 6, 2022
82c27b3
CharonSackControl: update to functional version
Museus Mar 6, 2022
aec385c
Update CHANGELOG and release v1.2.0-rc.1
Museus Mar 6, 2022
995d691
Adding GameState update for keepsake alteration
cgu11 Mar 7, 2022
0edf3e1
RC 0.3 updates
cgu11 Mar 7, 2022
2e7ee80
updating changelog to rc3
cgu11 Mar 7, 2022
a83eed0
RSC submodule update
cgu11 Mar 7, 2022
825d224
add comment prefix
Zyruvias May 12, 2022
ca207da
RSC update for modpack branch
cgu11 May 14, 2022
0cd9c0d
QuickRestart: do not allow during Death Defiance animation (#64)
Museus May 19, 2022
65c8c61
Added flag for blocking resets mid-trial boon selection
cgu11 May 19, 2022
e865d57
Tidied up keepsake replacement, hopefully fixing some of the order of…
cgu11 May 19, 2022
a55b79a
Removed KeepsakeList.lua and import thereof in modfile.txt.
cgu11 May 19, 2022
bb8fc45
switching to kill from killhero
cgu11 May 19, 2022
4a21c5e
Renamed sgg-mod-modutil to reduce duplicate ModUtil user installs
cgu11 May 19, 2022
e9ab569
Release v1.2.0-rc.4
Museus May 19, 2022
e7ea557
Changelog: specify that v1.2.0 is not yet released
Museus May 20, 2022
d7859a4
v1.2.0: update version string and Changelog
Museus May 30, 2022
75c7f48
setting: treat all non-completion Deaths as QuickRestarts
Zyruvias Sep 30, 2022
be2eeea
build(deps): update ModUtil from 2021Jun30 to v2.7.0
Museus Sep 30, 2022
aea5d3f
refactor(deprecated): update ModUtil calls to newest version
Kenorah Oct 29, 2022
a664a95
(feat)(MinibossControl: Add Hypermodded ruleset, which removes Tisiph…
SleepSoul Nov 15, 2022
9a97f81
feat(ChaosControl): Add ChaosControl mod, allowing certain blessings …
SleepSoul Nov 16, 2022
818536c
build(deps): update ModUtil to v2.8.0
SleepSoul Nov 16, 2022
7ce27ab
(refactor)(MinibossControl): Simplify Fury code using ModUtil v2.8.0 …
SleepSoul Nov 16, 2022
bff7fe3
build(deps): update ModUtil to v2.8.1
SleepSoul Nov 26, 2022
5c407f5
feat(EnemyControl): Add EnemyControl mod, allowing enemy pools to be …
SleepSoul Nov 26, 2022
ed2c02e
feat(SatyrSackControl): Add option to force short tunnels
SleepSoul Nov 27, 2022
af79223
refactor(SatyrSackControl): Replace Path.Override with Path.Wrap for …
SleepSoul Nov 30, 2022
f6f8559
use wraps
Zyruvias Nov 30, 2022
15a21c1
add ModUtil to gitignore
Zyruvias May 30, 2022
094d7dc
feat(RCLib): Add RCLib mod
SleepSoul Dec 1, 2022
a32ab64
refactor(EnemyControl): Update to use RCLib
SleepSoul Dec 1, 2022
a895283
refactor(ChaosControl): Update to use RCLib
SleepSoul Dec 1, 2022
341026a
fix(EnemyControl): Fix EnemyControl crash when RuleOverrides are not …
SleepSoul Dec 11, 2022
ce26372
fix quick restart crashing
Zyruvias Jan 15, 2023
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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
################################################################################
# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
################################################################################

/.vs
ModUtil/**
16 changes: 16 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[submodule "RunStartControl"]
path = RunStartControl
url = https://github.com/Museus/RunStartControl.git
[submodule "sgg-mod-modutil"]
path = ModUtil
url = https://github.com/SGG-Modding/sgg-mod-modutil.git
[submodule "HellModeToggle"]
path = HellModeToggle
url = https://github.com/cgullsHadesMods/HellModeToggle
[submodule "DontGetVorimed"]
path = DontGetVorimed
url = https://github.com/cgullsHadesMods/DontGetVorimed
[submodule "hades-CharonSackControl"]
path = hades-CharonSackControl
url = https://github.com/cgullsHadesMods/hades-CharonSackControl.git

114 changes: 114 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@

# Change Log
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/), and will follow [Semantic Versioning](https://semver.org/).

## [1.2.0] - 2022-05-30

### Added

- Can now toggle guaranteed Charon Sack spawn for Loyalty Card
- QuickRestart now sets a flag for the Livesplit autosplitter to reset

### Changed
- QuickRestart spawns you in the Courtyard instead of the blood pool
- QuickRestart re-equips your starting keepsake
- RtaTimer is now more efficient - should remove any lag issues that it was causing
- Default Hammer for Rama Aspect of the Bow is now Twin Shot
- Renamed sgg-mod-modutil to reduce duplicate ModUtil user installs

### Bug fixes
- ShowChamberNumber now works with newer versions of modimporter

## [1.1.1] - 2021-09-14

### Added

- Can now toggle Hell Mode in mod settings

### Removed

- Starting Boon Selector was not legal on any rulesets

### Changed

- Clarified ruleset text
- Cleaned up menu and credits

### Bug fixes

- Remove Approval Process blocking on the DontGetVorimed boon
- Slight delay before QuickRestart to remove interaction bugs

## [1.1.0] - 2021-08-01

### Added

- Single-run ruleset

### Changed

- Quick Restart also resets RtaTimer
- Replaced FixedHammers with RunStartControl
- Asterius removed from Leaderboard ruleset

### Bug fixes

- Can no longer reset during the pause before Thanatos Encounter spawns to prevent broken GameState



## [1.0.0] - 2021-06-04

No major bugs were found with v1.0.0-rc.2 so we are moving forward with leaderboard creation!

## [1.0.0-rc.2] - 2021-05-30

### Changed

- Quick Restart (insta-kill) can only be activated if
- Zagreus is not in the house
- Zagreus is not frozen (cutscenes, boon pickups, room endings)
- Combat UI is visible

This is to prevent a variety of bugs, from duplicated boons to crashes. [#39](https://github.com/ellomenop/HadesSpeedrunningModPack/pull/39)

- BoonSelector now has all filters enabled by default, and the rarity filter will be disabled automatically if "DontGetVorimed" is enabled. [#45](https://github.com/ellomenop/HadesSpeedrunningModPack/pull/45)

- EmoteMod has been disabled due to an unknown issue with MacOS [#48](https://github.com/ellomenop/HadesSpeedrunningModPack/pull/48)

### Fixed

- MinibossControl now forces the correct amount of miniboss doors in Asphodel. [#38](https://github.com/ellomenop/HadesSpeedrunningModPack/pull/38)

- MinibossControl now enforces changes on save reload. [#38](https://github.com/ellomenop/HadesSpeedrunningModPack/pull/38)

## [1.0.0-rc.1] - 2021-05-27

Initial "Beta" release of the modpack. This includes:

- Colorblind
- DontGetVorimed
- DoorVisualIndicators
- StartingBoonSelector
- EmoteMod
- ErumiUILib
- FixedHammers
- HadesSpeedrunningModpack
- InteractableChaos
- LootChoiceExt
- MinibossControl
- ModConfigMenu
- ModUtil
- ModdedWarning
- PrintUtil
- QuickRestart
- RemoveCutscenes
- RoomDeterminism
- RTATimer
- SatyrSackControl
- ShowChamberNumber
- ThanatosControl

as well as a ruleset preset for "Multiweapon Leaderboard" runs.
118 changes: 118 additions & 0 deletions ChaosControl/ChaosControl.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
--[[
ChaosControl
Authors:
SleepSoul (Discord: SleepSoul#6006)
Museus (Discord: Museus#7777)
Dependencies: ModUtil, RCLib
Change the eligible offerings from Chaos, allowing certain curses or blessings to be removed.
]]
ModUtil.Mod.Register("ChaosControl")

local config = {
ChaosSetting = "Vanilla"
}
ChaosControl.config = config --TODO add config option in menu
ChaosControl.EligibleBlessings = {}
ChaosControl.EligibleCurses = {}
ChaosControl.VanillaBlessings = {}
ChaosControl.VanillaCurses = {}

ChaosControl.Presets = { --Define rulesets
Vanilla = {},
Hypermodded = {
Blessings = {
Eclipse = false,
},
Curses = {
Roiling = false,
},
},
Debug = {
Blessings = {
Shot = true,
},
Curses = {
Abyssal = true,
},
}
}

ChaosControl.InheritVanilla = { -- Presets set to true will inherit the vanilla traits and only remove those set to false, Presets set to false will start from 0 and only add those set to true.
Hypermodded = {
Blessings = true,
Curses = true,
},
}

function ChaosControl.ReadPreset() -- Read current preset and create table of blessings and curses marked to eligible, including failsafe for presets with <3 traits
local Preset = {
Blessings = {},
Curses = {},
}
local InheritVanilla = {}
if ChaosControl.Presets[config.ChaosSetting] ~= nil then
Preset = ChaosControl.Presets[config.ChaosSetting]
end
if ChaosControl.InheritVanilla[config.ChaosSetting] ~= nil then
InheritVanilla = ChaosControl.InheritVanilla[config.ChaosSetting]
end
if Preset.Blessings ~= nil then
if InheritVanilla.Blessings then
RCLib.PopulateMinLength(
ChaosControl.EligibleBlessings,
RCLib.RemoveIneligibleStrings(Preset.Blessings,ChaosControl.VanillaBlessings,RCLib.NameToCode.ChaosBlessings),
3
)
else
RCLib.PopulateMinLength(
ChaosControl.EligibleBlessings,
RCLib.GetEligible(Preset.Blessings,RCLib.NameToCode.ChaosBlessings),
3
)
end
else
ChaosControl.EligibleBlessings = ChaosControl.VanillaBlessings
end
if Preset.Curses ~= nil then
if InheritVanilla.Curses then
RCLib.PopulateMinLength(
ChaosControl.EligibleCurses,
RCLib.RemoveIneligibleStrings(Preset.Curses,ChaosControl.VanillaCurses,RCLib.NameToCode.ChaosCurses),
3
)
else
RCLib.PopulateMinLength(
ChaosControl.EligibleCurses,
RCLib.GetEligible(Preset.Curses,RCLib.NameToCode.ChaosCurses),
3
)
end
else
ChaosControl.EligibleCurses = ChaosControl.VanillaCurses
end
end

function ChaosControl.UpdateOfferings() --Inject eligible blessings/curses into table of Chaos' offerings in LootData
DebugPrint({Text = "Chaos preset: "..ChaosControl.config.ChaosSetting})
ModUtil.Table.MergeKeyed(LootData, {
TrialUpgrade = {
PermanentTraits = ChaosControl.EligibleBlessings,
TemporaryTraits = ChaosControl.EligibleCurses,
}
})
DebugPrint({Text = "Updated Chaos offerings"})
end

ModUtil.LoadOnce( function()
ChaosControl.VanillaBlessings = ModUtil.Table.Copy(LootData.TrialUpgrade.PermanentTraits)
ChaosControl.VanillaCurses = ModUtil.Table.Copy(LootData.TrialUpgrade.TemporaryTraits)
ChaosControl.ReadPreset()
ChaosControl.UpdateOfferings()
end)

-- When a new run is started, make sure to apply the offering settings
ModUtil.Path.Wrap("StartNewRun", function ( baseFunc, currentRun )
ChaosControl.ReadPreset()
ChaosControl.UpdateOfferings()
return baseFunc(currentRun)
end, ChaosControl)
2 changes: 2 additions & 0 deletions ChaosControl/modfile.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
:: Miniboss Control
Import "ChaosControl.lua"
33 changes: 18 additions & 15 deletions Colorblind/colorblind.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ModUtil.RegisterMod("ColorblindMod")
ModUtil.Mod.Register("ColorblindMod")

local config =
{
Expand Down Expand Up @@ -98,7 +98,7 @@ function IsOutlineLegal(enemy)
return true
end

ModUtil.WrapBaseFunction("CreateLevelDisplay", function ( baseFunc, newEnemy, currentRun )
ModUtil.Path.Wrap("CreateLevelDisplay", function ( baseFunc, newEnemy, currentRun )
local biome = CurrentRun.CurrentRoom.RoomSetName

if ColorblindMod.config[(biome or "nil") .. "Enabled"] and IsOutlineLegal(newEnemy) then
Expand All @@ -109,12 +109,15 @@ ModUtil.WrapBaseFunction("CreateLevelDisplay", function ( baseFunc, newEnemy, cu
baseFunc(newEnemy, currentRun)
end, ColorblindMod)

ModUtil.BaseOverride("DoEnemyHealthBufferDeplete", function ( enemy )
ModUtil.Path.Override("DoEnemyHealthBufferDeplete", function ( enemy )
if enemy.OnHealthBufferDepleteFunctionName ~= nil then
_G[enemy.OnHealthBufferDepleteFunctionName]( enemy )
end
-- Mod start
-- RemoveOutline({ Id = enemy.ObjectId })
local biome = CurrentRun.CurrentRoom.RoomSetName
if not ColorblindMod.config[(biome or "nil") .. "Enabled"] then
RemoveOutline({ Id = enemy.ObjectId })
end
-- Mod end
if enemy.TetherIds ~= nil then
for k, tetherId in ipairs( enemy.TetherIds ) do
Expand All @@ -128,7 +131,7 @@ ModUtil.BaseOverride("DoEnemyHealthBufferDeplete", function ( enemy )
end, ColorblindMod)

OnAnyLoad{function ()
local biome = ModUtil.SafeGet(_G, ModUtil.PathArray("CurrentRun.CurrentRoom.RoomSetName"))
local biome = ModUtil.IndexArray.Get(_G, ModUtil.Path.IndexArray("CurrentRun.CurrentRoom.RoomSetName"))
while ColorblindMod.config[(biome or "nil") .. "Enabled"] do
local ammoIds = GetIdsByType({ Name = "AmmoPack" })
if ammoIds ~= nil then
Expand All @@ -142,52 +145,52 @@ OnAnyLoad{function ()
end
end}

ModUtil.WrapBaseFunction( "HarpyKillPresentation", function(baseFunc, unit, args)
ModUtil.Path.Wrap( "HarpyKillPresentation", function(baseFunc, unit, args)
RemoveOutline({ Id = unit.ObjectId})
return baseFunc(unit, args)
end)

ModUtil.WrapBaseFunction( "HydraKillPresentation", function(baseFunc, unit, args)
ModUtil.Path.Wrap( "HydraKillPresentation", function(baseFunc, unit, args)
RemoveOutline({ Id = unit.ObjectId})
return baseFunc(unit, args)
end)

ModUtil.WrapBaseFunction( "HydraKillPresentation", function(baseFunc, unit, args)
ModUtil.Path.Wrap( "HydraKillPresentation", function(baseFunc, unit, args)
RemoveOutline({ Id = unit.ObjectId})
return baseFunc(unit, args)
end)

ModUtil.WrapBaseFunction( "TheseusMinotaurKillPresentation", function(baseFunc, unit, args)
ModUtil.Path.Wrap( "TheseusMinotaurKillPresentation", function(baseFunc, unit, args)
RemoveOutline({ Id = unit.ObjectId})
return baseFunc(unit, args)
end)

ModUtil.WrapBaseFunction( "CrawlerMiniBossKillPresentation", function(baseFunc, unit, args)
ModUtil.Path.Wrap( "CrawlerMiniBossKillPresentation", function(baseFunc, unit, args)
RemoveOutline({ Id = unit.ObjectId})
return baseFunc(unit, args)
end)

ModUtil.WrapBaseFunction( "HadesKillPresentation", function(baseFunc, unit, args)
ModUtil.Path.Wrap( "HadesKillPresentation", function(baseFunc, unit, args)
RemoveOutline({ Id = unit.ObjectId})
return baseFunc(unit, args)
end)

ModUtil.WrapBaseFunction( "KillPresentation", function(baseFunc, victim, args)
ModUtil.Path.Wrap( "KillPresentation", function(baseFunc, victim, args)
RemoveOutline({ Id = victim.ObjectId})
return baseFunc(victim, args)
end)

ModUtil.WrapBaseFunction( "DeathPresentation", function(baseFunc, currentRun, killer, killingUnitWeapon )
ModUtil.Path.Wrap( "DeathPresentation", function(baseFunc, currentRun, killer, killingUnitWeapon )
RemoveOutline({ Id = currentRun.Hero.ObjectId})
return baseFunc(currentRun, killer, killingUnitWeapon )
end)

ModUtil.WrapBaseFunction( "BoatToDeathAreaTransition", function(baseFunc, unit, args)
ModUtil.Path.Wrap( "BoatToDeathAreaTransition", function(baseFunc, unit, args)
RemoveOutline({ Id = CurrentRun.Hero.ObjectId})
return baseFunc(unit, args)
end)

ModUtil.WrapBaseFunction( "SurfaceDeathPresentation", function(baseFunc, unit, args)
ModUtil.Path.Wrap( "SurfaceDeathPresentation", function(baseFunc, unit, args)
RemoveOutline({ Id = CurrentRun.Hero.ObjectId})
return baseFunc(unit, args)
end)
1 change: 1 addition & 0 deletions DontGetVorimed
Submodule DontGetVorimed added at a3e9d1
Loading