diff --git a/Img/Additional_Death_Guards.png b/Img/Additional_Death_Guards.png new file mode 100644 index 0000000..6186ea0 Binary files /dev/null and b/Img/Additional_Death_Guards.png differ diff --git a/Img/Character_Stats_Multiplier.png b/Img/Character_Stats_Multiplier.png new file mode 100644 index 0000000..970eb04 Binary files /dev/null and b/Img/Character_Stats_Multiplier.png differ diff --git a/Img/Character_Unlock_Cost_Multiplier.png b/Img/Character_Unlock_Cost_Multiplier.png new file mode 100644 index 0000000..2ba46f6 Binary files /dev/null and b/Img/Character_Unlock_Cost_Multiplier.png differ diff --git a/Img/Curse_Level_Strength_Multiplier.png b/Img/Curse_Level_Strength_Multiplier.png new file mode 100644 index 0000000..6cf481c Binary files /dev/null and b/Img/Curse_Level_Strength_Multiplier.png differ diff --git a/Img/Dash_Count.png b/Img/Dash_Count.png new file mode 100644 index 0000000..4f54088 Binary files /dev/null and b/Img/Dash_Count.png differ diff --git a/Img/Enemy_Objective_Multiplier.png b/Img/Enemy_Objective_Multiplier.png new file mode 100644 index 0000000..470bac5 Binary files /dev/null and b/Img/Enemy_Objective_Multiplier.png differ diff --git a/Img/Experience_Multiplier.png b/Img/Experience_Multiplier.png new file mode 100644 index 0000000..488ea81 Binary files /dev/null and b/Img/Experience_Multiplier.png differ diff --git a/Img/Extra_Minerals_Spawn_Delay.gif b/Img/Extra_Minerals_Spawn_Delay.gif new file mode 100644 index 0000000..cd95293 Binary files /dev/null and b/Img/Extra_Minerals_Spawn_Delay.gif differ diff --git a/Img/Infinite_Banishes.png b/Img/Infinite_Banishes.png new file mode 100644 index 0000000..2b52cbf Binary files /dev/null and b/Img/Infinite_Banishes.png differ diff --git a/Img/Infinite_Locks.png b/Img/Infinite_Locks.png new file mode 100644 index 0000000..ef94e04 Binary files /dev/null and b/Img/Infinite_Locks.png differ diff --git a/Img/Infinite_Rerolls.png b/Img/Infinite_Rerolls.png new file mode 100644 index 0000000..076b4f5 Binary files /dev/null and b/Img/Infinite_Rerolls.png differ diff --git a/Img/Item_Drop_Amount_Multiplier.png b/Img/Item_Drop_Amount_Multiplier.png new file mode 100644 index 0000000..4efbd07 Binary files /dev/null and b/Img/Item_Drop_Amount_Multiplier.png differ diff --git a/Img/Minor_Soulstone_Multiplier.png b/Img/Minor_Soulstone_Multiplier.png new file mode 100644 index 0000000..d9d9a39 Binary files /dev/null and b/Img/Minor_Soulstone_Multiplier.png differ diff --git a/Img/Prestige_Multiplier.png b/Img/Prestige_Multiplier.png new file mode 100644 index 0000000..b461efd Binary files /dev/null and b/Img/Prestige_Multiplier.png differ diff --git a/Img/Weapon_Strength_Multiplier.png b/Img/Weapon_Strength_Multiplier.png new file mode 100644 index 0000000..7849ad0 Binary files /dev/null and b/Img/Weapon_Strength_Multiplier.png differ diff --git a/Img/Weapon_Unlock_Cost_Multiplier.png b/Img/Weapon_Unlock_Cost_Multiplier.png new file mode 100644 index 0000000..d4fdbe2 Binary files /dev/null and b/Img/Weapon_Unlock_Cost_Multiplier.png differ diff --git a/Modifications/PlayerInventoryModification.cs b/Modifications/PlayerInventoryModification.cs index 3f524c0..191b8dc 100644 --- a/Modifications/PlayerInventoryModification.cs +++ b/Modifications/PlayerInventoryModification.cs @@ -50,15 +50,15 @@ private static void UpdateInventory(List players) // Alternative: Set this while hooking into LevelUpPanelManager, since that is the only place where they are being used, but if (PluginConfig.Player.Inventory.InfiniteRerolls) { - player._inventory.InventoryData.Rerolls = PluginConfig.Player.Inventory.AdditionalRerolls; + player._inventory.InventoryData.Rerolls = 1000; } if (PluginConfig.Player.Inventory.InfiniteBanishes) { - player._inventory.InventoryData.Banishes = PluginConfig.Player.Inventory.AdditionalBanishes; + player._inventory.InventoryData.Banishes = 1000; } if (PluginConfig.Player.Inventory.InfiniteLocks) { - player._inventory.InventoryData.Locks = PluginConfig.Player.Inventory.AdditionalLocks; + player._inventory.InventoryData.Locks = 1000; } } } diff --git a/Patches/WIP/LootUtil_Patch.cs b/Patches/WIP/LootUtil_Patch.cs index 364ebfb..2c6e1e7 100644 --- a/Patches/WIP/LootUtil_Patch.cs +++ b/Patches/WIP/LootUtil_Patch.cs @@ -15,7 +15,7 @@ namespace SoulstoneTweaks.Patches.WIP // DO NOT USE THIS TO MODIFY EXPERIENCE AND OTHER DROP AMOUNTS // BECAUSE IT WILL RESULT IN MORE INGAME ENTITIES // (e.g. x100 EXP means that an enemy that normally drops 1 EXP orb now drops 100, on bosses this lags, freezes or crashes the game) - //[HarmonyPatch(typeof(LootUtil), nameof(LootUtil.CalculateLoot))] + [HarmonyPatch(typeof(LootUtil), nameof(LootUtil.CalculateLoot))] internal class LootUtil_Patch { @@ -24,25 +24,6 @@ static void Prefix(ref LootComponent loot) // Prestige is rewarded immediately on kill, there is no drop for it. // Could've also modified it on the entity directly on spawn, but seems more reasonable to do it on kill loot.Prestige *= PluginConfig.Player.PrestigeMultiplier; - - - /* if (loot.PossibleItems.Count > 0) - { - Plugin.Log.LogInfo("Possible Loot " + loot.PossibleItems.Count); - foreach (var item in loot.PossibleItems) - { - Plugin.Log.LogInfo(item.ItemId + ", " + item.QuantityMin + ", " + item.QuantityMax + ", " + item.Chance); - } - Plugin.Log.LogInfo("Loot By Tier " + loot.ItemsByTier.Count); - foreach (var itembytier in loot.ItemsByTier) - { - foreach (var item in itembytier.Items) - { - Plugin.Log.LogInfo("Tier: " + itembytier.Tier + ", " + item.ItemId + ", " + item.QuantityMin + ", " + item.QuantityMax + ", " + item.Chance); - } - } - } - */ } } } diff --git a/README.md b/README.md index aee537f..c819ec9 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,22 @@ -# Soulstone-Survivors-Tweak-Mod - A BepInEx mod for the Steam Game 'Soulstone Survivors', providing access to a bunch of tweaks to make the game infinitely harder, or cheatily easy. +# Soulstone Survivors Tweaks + A mod for the Steam Game [Soulstone Survivors](https://store.steampowered.com/app/2066020/Soulstone_Survivors/), providing access to a bunch of tweaks to make the game infinitely harder, or cheatily easy. + + Quick examples of what you can do: + - Modify EXP gain, player stats, enemy stats + - Invulnerability + - Disable AI + - remove obstacles from the map (RIP Trees) + - etc. + + Built for Soulstone Survivors `Early Access 0.11.038a - Windows`. + ![](Img/RemoveMapObstacles.png) + # Installation -This mod requires BepInEx v6 (Bleeding Edge), due to Soulstone Survivors using IL2CPP which is only supported by BepInEx v6. Developed using [Build #666](https://builds.bepinex.dev/projects/bepinex_be). +This mod requires **BepInEx v6 (Bleeding Edge)**. Developed using [Build #666](https://builds.bepinex.dev/projects/bepinex_be), but you can try if a newer build works too. + Unpack BepInEx into your game folder (usually something like `C:\Program Files (x86)\Steam\steamapps\common\Soulstone Survivors`), and run the game once. You should now have a `BepInEx/plugins` folder. Drop the `SoulstoneTweaks.dll` in there and you're good to go. After starting the game again, a config file will be created under `BepInex/configs/SoulstoneTweaks.cfg`. @@ -13,53 +25,100 @@ You should now have a `BepInEx/plugins` folder. Drop the `SoulstoneTweaks.dll` i NOTE: Configs do not get applied while the game is running, changing the config requires a restart! -### Disable Enemy AI +## Misc Features -|Config Entry|Default|Description| -|:----:|:---:|:---:| -|`Disable_Enemy_A_I`|`false`| When enabled, enemy AI is completely turned off. No attacks, no movement. | +|Config Entry|Default|Description|| +|:----:|:---:|:---:|:---:| +|`Disable_Enemy_A_I`|`false`| When enabled, enemy AI is completely turned off. No attacks, no movement. **Note**: Boss health bars do not properly disappear after their death if they have no AI. || +|`Unlock_Zoom`|`false`| Allows you to zoom in / out using your scroll wheel || +|`Invulnerable`|`false`| Makes you completely invulnerable || +|`Time_Modifier`|`1.0`| Modifies game speed (affects **everything**). E.g. `2.0` doubles it.|| +|`Remove_Map_Obstacles`|`false`| Do you have trees? This option removes **ALL** obstacles from the map. Note: This may or may not work for future added maps.|| +|`Extra_Minerals_Spawn_Delay`|`-1`| Spawns a new mineral every `n` seconds. E.g. when set to `0.1`, spawns 10 minerals per second. Disabled when negative.|| +|`Auto_Unlock_Special_Portals`|`false`|Automatically opens special portals (e.g. to Secret Bosses) at the end of the round|| -Note: Boss health bars do not properly disappear after their death if they have no AI. +## Global Features -![DisableEnemyAI.gif](Img/DisableEnemyAI.gif) +These features affect some global game stats, like costs, weapon stats, etc. -### Unlock Zoom +|Config Entry|Default|Description|| +|:----:|:---:|:---:|:---:| +|`Skill_Tree_Cost_Multiplier`|`1.0`| Multiplier for all skill costs in the skill tree. Example: `2.0` doubles everything, `0` makes all skills free.|| +|`Weapon_Strength_Multiplier`|`1.0`| Modifies strength of weapon bonus effects|| +|`Weapon_Unlock_Cost_Multiplier`|`1.0`| Modifies cost of weapon unlocks. When set to `0`, all weapons are (nearly) free, you still need to own at least 1 of each required item.|| +|`Character_Stats_Multiplier`|`1.0`| Modifies strength of character stat bonuses|| +|`Character_Unlock_Cost_Multiplier`|`1.0`| Modifies cost of character unlocks. When set to `0`, all characters are free.|| +|`Runic_Power_Multiplier`|`1.0`|Modifies your runic power limit|| -|Config Entry|Default|Description| -|:----:|:---:|:---:| -|`Unlock_Zoom`|`false`| Allows you to zoom in / out using your scroll wheel | +## Curse Modifiers -![UnlockZoom.png](Img/UnlockZoom.png) +|Config Entry|Default|Description|| +|:----:|:---:|:---:|:---:| +|`Curse_Bonus_Multiplier`|`1.0`| Multiplier for all curse level bonuses|| +|`Curse_Level_Strength_Multiplier`|`1.0`| Multiplier for the curse intensity effects|| -### Time Modifier -|Config Entry|Default|Description| -|:----:|:---:|:---:| -|`Time_Modifier`|`1.0`| Modifies game speed (affects **everything**). E.g. `2.0` doubles it.| +## Loot Multipliers (Soulstone, Experience, Prestige, etc.) -### Remove Map Obstacles +|Config Entry|Default|Description|| +|:----:|:---:|:---:|:---:| +|`Minor_Soulstone_Multiplier`|`1.0`| Modifies **Minor Soulstone** gain during a game|| +|`Boss_Soulstone_Multiplier`|`1.0`| Modifies the amount of big soulstones obtained from bosses (still only drops one item visually)|| +|`Health_Pickup_Amount_Multiplier`|`1.0`| Modifies the amount of health obtained from health pickups (e.g. health crystals). **Note**: You can also set this to a negative value, making you lose health instead.|| +|`Item_Drop_Amount_Multiplier`|`1.0`| Modifies the amount of materials you obtain on pickup (iron, etc.)|| +|`Experience_Multiplier`|`1.0`| Modifies the character experience gain (ingame level)|| +|`Prestige_Multiplier`|`1.0`| Modifies the character prestige gain (prestige level)|| -|Config Entry|Default|Description| -|:----:|:---:|:---:| -|`Remove_Map_Obstacles`|`false`| Do you have trees? This option removes **ALL** obstacles from the map. Note: This may or may not work for future added maps.| - -![RemoveMapObstacles.png](Img/RemoveMapObstacles.png) - -### Skill Tree Cost Multiplier - -|Config Entry|Default|Description| -|:----:|:---:|:---:| -|`Skill_Tree_Cost_Multiplier`|`1.0`| Multiplier for all skill costs in the skill tree. Example: `2.0` doubles everything, `0` makes all skills free.| - -Examples with `1000` or `0`: - - - - -### Curse Bonus Multiplier +## Enemy Modifiers |Config Entry|Default|Description| |:----:|:---:|:---:| -|`Curse_Bonus_Multiplier`|`1.0`| Multiplier for all curse level bonuses| - - \ No newline at end of file +|`Boss_Health_Multiplier`|`1.0`| Modifies health of bosses| +|`Elite_Health_Multiplier`|`1.0`| Modifies health of elites| +|`Small_Enemy_Health_Multiplier`|`1.0`| Modifies health of regular enemies| + +Note: When setting this to 0, they effectively die with a single attack. + +## Objective Modifiers + +|Config Entry|Default|Description|| +|:----:|:---:|:---:|:---:| +|`Enemy_Objective_Multiplier`|`1.0`| Modifies the amount of enemies you need to kill for the next wave of bosses to spawn|| + +## Player Inventory (Rerolls, Banishes, Locks) + +|Config Entry|Default|Description|| +|:----:|:---:|:---:|:---:| +|`Additional_Rerolls`|`0`| Gives additional Rerolls|| +|`Infinite_Rerolls`|`false`| Locks Reroll count at 1000|| +|`Additional_Banishes`|`0`| Gives additional Banishes|| +|`Infinite_Banishes`|`false`| Locks Banish count at 1000|| +|`Additional_Locks`|`0`| Gives additional Locks|| +|`Infinite_Locks`|`false`| Locks Lock count at 1000|| +|`Additional_Death_Guards`|`0`|Gives additional Death Guards|| + +Note: There is no infinite Death Guards, since then you might as well use `Invulnerable`. + +## Player Stats + +You can modify the each stat of the player as you desire. There are two sections in the config, one for `[Player.BaseStats]` and one `[Player.MultiplicativeStats]`. Changes under the `[Player.BaseStats]` are additive bonuses (e.g. start the game with +100% more damage), while `[Player.MultiplicativeStats]` increases the multiplicative stat on top of all your additive values (e.g. double your damage, including all scaling you obtain from power-ups). + +So make sure you edit the one that you want to change (check in which section it is in the config). + +|Config Entry|Default|Description|| +|:----:|:---:|:---:|:---:| +|`Dash_Count`|`0`| Gives you additional dashes|| +|`Max_Health_Modifier`|`0`|Increases Player Max Health by the specified amount|| +|`Crit_Chance_Modifier`|`0`|Increases Player Crit Chance by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Crit_Damage_Modifier`|`0`|Increases Player Crit Damage by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Damage_Modifier`|`0`|Increases Player Damage by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Healing_Modifier`|`0`|Increases Player Healing by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Attack_Speed_Modifier`|`0`|Increases Player Attack Speed by the specified amount.|| +|`Collect_Range_Modifier`|`0`|Increases Player Collection Range by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Damage_Reduction_Modifier`|`0`|Increases Player Damage Reduction by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Movement_Speed_Modifier`|`0`|Increases Player Movement Speed by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Area_Modifier`|`0`|Increases Player Area by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Armor_Modifier`|`0`|Increases Player Armor by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Base_Skill_Cooldowns`|`0`|Increases Player Skill Cooldown by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Block_Chance`|`0`|Increases Player Block Chance by the specified amount. E.g. `0.2` increases it by `20%`|| +|`Extra_Cast_Modifier`|`0`|Increases Player Multicast by the specified amount. E.g. `0.2` increases it by `20%`||