# The Bullet Sponge (BS) Mod

A Gibberlings Three Mod
Aithor: CamDawg
On the web: Home page, discussion forum,and Discord

Version 2
Languages: English
Platforms: Windows, macOS, Linux
GitHub: Gibberlings3/bullet_sponge

## Overview

The Bullet Sponge (BS) Mod is a WeiDU compilation of small modifications to adjust the difficulty of your game by brute-forcing the statistics of non-party creatures. This mod started as an outgrowth of the Max HP Creatures component from Tweaks Anthology. About a year ago, I modified the code to allow for an arbitrary percentage change to HP, not just 100%, and it got me thinking about other creature stats that could be adjusted similarly. After some experimentation, I came up with an array of basic stats that can be adjusted to make the game easier or harder, controlled by the config.txt file.

The term 'bullet sponge' refers to a technique where higher difficulty levels, especially in older games, just added higher and higher stats (such as hit points) to enemies to make them more difficult.

While the stats can be adjusted to make the game easier, I expect most players will use this to make their games more difficult—after losing a frustrating fight, the player will confidently be able to say "yeah, that was BS".

## Compatibility

This mod works on all Infinity Engine games. This includes

- The series of Enhanced Editions (EE) published by Beamdog, which at present includes Baldur's Gate: Enhanced Edition (BGEE), Baldur's Gate II: Enhanced Edition (BG2EE), Icewind Dale: Enhanced Edition (IWDEE), and Planescape: Torment: Enhanced Edition (PsTEE). The BGEE Siege of Dragonspear expansion (SoD) is supported as well. All of the Enhanced Edition games include the original expansion packs, e.g. IWDEE includes Heart of Winter and Trials of the Luremaster.
- The original Baldur's Gate (BG), with or without the Tales of the Sword Coast (TotSC) expansion
- The original Baldur's Gate II (BG2 or just Shadows of Amn (SoA)), with or without the Throne of Bhaal (ToB) expansion
- The conversion projects Baldur's Gate Trilogy (BGT), Baldur's Gate Tutu (Tutu), Icewind Dale-in-Baldur's Gate II (IWD-in-BG2), and Enhanced Edition Trilogy (EET)
- The original Icewind Dale (IWD) with or without either of its expansions, Heart of Winter (HoW) and Trials of the Luremaster (TotLM)
- Icewind Dale II (IWD2)
- Planescape: Torment (PsT)

In terms of install order, it should go as late as possible (even after SCS) to take advantage of boosts and improvements that other mods have already made to creatures in the game. The additional memorized spells, for example, will strongly benefit from SCS' improvements to spellbooks. As of v2, BS mow generates its own function at installation to allow other mods to tap into its adjustments if they want to be installed after BS.

While the mod works on all of these platforms, not every adjustment is available for every game; check the individual stats below.

## Bug Reporting and Known Issues

If you should encounter any bugs, please report them to the author at the Miscellaneous Released Mods forum. In addition, BS Mod is available on GitHub, so fixes and changes can be submitted by the community.

## Installation

First time installing a mod? Check out G3's comprehensive tutorial: A New Player's Guide to Installing and Playing Mods.

Special Note for Siege of Dragonspear from Steam/GOG
Good Old Games (GOG) and Steam both package the additional content for Siege of Dragonspear in a method that WeiDU, the tool used to install this mod, cannot access. You must run a program called DLC Merger on your SoD installation before you can install this or any other WeiDU-based mod.

Enhanced Editions Note
The Enhanced Editions are actively supported games. Please note that every patch update will wipe your current mod setup! If in the middle of a modded game you might want to delay the patch update (if possible) as even after reinstalling the mods, you might not be able to continue with your old savegames. Alternatively, copy the whole game's folder into a new one that can be modded and will stay untouched by game patches. It is important that you install the mod to the language version you are playing the game in. Otherwise, the dialogues of the mod will not show but give error messages.

Windows
The BS Mod for Windows is distributed as a self-extracting archive and includes a WeiDU installer. To install, simply double-click the archive and follow the instructions on screen.

Alternatively, the files can be extracted into your game directory using 7zip or WinRAR. When properly extracted, your game directory will contain setup-cd_bullet_sponge.exe and the folder cd_bullet_sponge. To install, double-click setup-cd_bullet_sponge.exe and follow the instructions on screen.

You can run setup-cd_bullet_sponge.exe in your game folder to reinstall, uninstall or otherwise change components.

macOS
The BS Mod for macOS is distributed as a compressed tarball and includes a WeiDU installer.

First, extract the files from the tarball into your game directory. When properly extracted, your game directory will contain setup-cd_bullet_sponge, setup-cd_bullet_sponge.command, and the folder cd_bullet_sponge. To install, double-click setup-cd_bullet_sponge.command and follow the instructions on screen.

You can run setup-cd_bullet_sponge.command in your game folder to reinstall, uninstall or otherwise change components.

Linux
The BS Mod for Linux is distributed as a compressed tarball and does not include a WeiDU installer. Linux users will need to do a one-time install of WeiDU (and a few other adjustments) as described in this great writeup.

To install, run 'WeInstall cd_bullet_sponge in your game folder.

Note for Complete Uninstallation
In addition to the methods above for removing individual components, you can completely uninstall the mod using setup-cd_bullet_sponge --uninstall at the command line to remove all components without wading through prompts.

## Contents

The BS Mod has a single component, which will put into effect the changes specified in the mod's config.txt file. The variables and their effects are described below. These changes will affect all creatures in the game excluding party members.

For the first time running the mod, you will need to find and rename _config.txt in the mod's folder to config.txt (removing the underscore), and input the desired changes.

The changes in the config.txt will be implemented when you install the mod. If you want to make further changes, you will have to update the config.txt and then re-install BS. Changing the config.txt, by itself, doesn't change anything in-game until you re-install BS.

If you want to change the pace of experience progression, check out the Ding0 Experience Fixer aka DEF JAM.

### General Notes

All of the values in config.txt should be whole, integer values, e.g. no decimal places. Negative values are generally allowed except where notes. Each config option also has two ranges: what values you're allowed to set in the config, and what values are allowed in the game. We'll use a strength bonus as an example. Positive numbers should just be written as the number; negative values need a dash (e.g. -1) preceding them, and keep the whole expression within the existing quotation marks.

Note that when I mention that something works "on BG2", I mean the BG2 engine, so it will also work on conversion projects such as BGT, IWD-in-BG2, or Tutu. Similarly, working "on EE" includes the baseline EE games and EET.

### Experience Progression

As of v2, BS allows you to tailor your experience gains:

OUTER_SET xp_creature_bonus = "100"
OUTER_SET xp_quest_bonus = "100"

Both of these set the experience gain as a percentage, so 100 is normal XP (no change), 50 is half XP, 200 is double XP. The xp_creature_bonus value applies to the XP you get from defeating monsters while xp_quest_bonus applies to the XP you get for completing quests or other activites.

### Basic Combat Stats

OUTER_SET ac_bonus = "0" // final range -20 to 10 (IWD2 0 to 30); allowed outside this range on EEs, BG2 engine
OUTER_SET to-hit_bonus = "0" // final range 0 to 20 (IWD2 0 to 25); allowed outside this range on EEs, BG2 engine

These make basic to-hit and armor class adjustments, with a slightly different range for the 2e and 3e rulesets. On the BG2 engine and the Enhanced Edition games, these bonuses are applied as external effects and not adjustments to the base scores, allowing these scores to potentially range outside their normal values. Note that the engine usually caps effects in these circumstances, but it's still done this way to give a little more flexibility to the player.

OUTER_SET hd_bonus = "0" // final range 1 - 50

The goal here is to make spells and abilities a little more dangerous; combined with the HP tweaks this can also bump up hit points as well.

In non-IWD2 games, this will bump up all classes of the creatures with the bonus, e.g. specifying a +2 HD bonus will give +2 levels to both a fighter-mage's fighter AND mage class, and a +2 bonus to a single-class thief's level.

On IWD2 games, it will distribute the added levels evenly among the existing levels present in the creature. If it cannot be evenly divided, remainders will favor spellcasting classes, e.g. specifying a +5 bonus would get distributed as +3 sorcerer, +2 rogue if those were the only existing levels in the creature file.

OUTER_SET apr_bonus = "0" // final range 0 - 5

The desired APR bonus must be multiplied by two to get the desired outcome, as WeiDU does not allow for fractions. So if you want to add 1.5 attacks per round, use a value of 3. For an additional 4 attacks per round, use a value of 8.

OUTER_SET damage_bonus = "100" // only works on EEs and BG2; minimum value 1

As noted, this only works on EEs and BG2-based games. This allows you to adjust the damage that enemies are doing; 200 would set enemies to double damage and 50 to half.

### Basic Attributes

OUTER_SET str_bonus = "0" // final range 1 to 25 (IWD2 1 to 40)
OUTER_SET dex_bonus = "0"
OUTER_SET con_bonus = "0"
OUTER_SET int_bonus = "0"
OUTER_SET wis_bonus = "0"
OUTER_SET chr_bonus = "0"

The six basic stats—strength, dexterity, constitution, intelligence, wisdom, and charisma—can be adjusted up or down with these variables. Since 2e and 3e have different caps, they run to 25 on 2e games and 40 on 3e games.

### Damage Resistances

OUTER_SET resistance_fire_bonus = "0" // final range 0-99
OUTER_SET resistance_cold_bonus = "0"
OUTER_SET resistance_electricity_bonus = "0"
OUTER_SET resistance_acid_bonus = "0"
OUTER_SET resistance_slashing_bonus = "0"
OUTER_SET resistance_crushing_bonus = "0"
OUTER_SET resistance_piercing_bonus = "0"
OUTER_SET resistance_missile_bonus = "0"
OUTER_SET resistance_magic_damage_bonus = "0" // only works on EEs, BG2, and IWD2
OUTER_SET resistance_magic_bonus = "0" // not for IWD2
OUTER_SET spell_resistance_bonus = "0" // IWD2-only

These affect resistances to various damage types in the game. However, two certain creatures are exempt from changes: if a creature is already immune to an element or take extra damage from a damage type, they will not be changed. E.g. specifying -20 to cold resistance will not mean that ice golems now take ice damage; on the flipside, specifying +20 to fire resistance won't change kuo-toa since they take extra fire damage.

Outside of those exceptions, the scores can be adjusted as desired. They cap at 99 to prevent a creature becoming completely immune, and they are applied multiplicatively. As an example, if you specify +50% electrical resistance, then mummies (baseline 40% resistant) will be improved to 70% resistance. A creature with no prior electrical resistance will go from 0 to 50.

### Hit Point Adjustments

OUTER_SET hit_point_percentage = "100"
OUTER_SET flat_hit_point_bonus = "0"

Like Tweaks Anthology's Max HP Creatures, this allows you to fine-tune enemy HP. It calculates a maximum HP based on the creature's class and levels, which is then multiplied by the specified percentage, and the flat bonus added on top of that. If the resulting adjustment is higher than the current HP, then it is applied, otherwise the existing (and higher) HP remains unchanged. If the percentage is being used to lower HP off the maximum, then the opposite calculation occurs: it will only commit a new HP total if it's below their current HP.

### Saving Throws

Non-IWD2:

OUTER_SET save_death_bonus = "0" // final range 0-20; allowed outside this range on EEs, BG2 engine
OUTER_SET save_wand_bonus = "0"
OUTER_SET save_polymorph_bonus = "0"
OUTER_SET save_breath_bonus = "0"
OUTER_SET save_spell_bonus = "0"

IWD2:

OUTER_SET save_fortitude_bonus = "0" // final range 0-25
OUTER_SET save_reflex_bonus = "0"
OUTER_SET save_will_bonus = "0"

Adjustments to all saving throws in the game. Like the AC and to-hit bonuses, these are attached as external effects in BG2 and EE games, allowing them to range outside of their normal values.

### Movement Speed

OUTER_SET movement_speed_bonus = "100" // only works on EEs and BG2

As noted, this only works on EEs and BG2-based games. This allows you to adjust the base movement speed of enemies, as a percentage, and it will not be affected by free action. Half speed enemies would need a score of 50; a score of 120 would make them 20% faster than normal.

A prime use case for this would to increase enemy speed to reduce or eliminate the player's ability to kite enemies. Alternatively, you could lower enemy speeds to favor ranged attacks or spellcasting.

### Additional Memorized Spells

Non-IWD2:

OUTER_SET extra_divine_spells_1 = "0"
...
OUTER_SET extra_divine_spells_7 = "0"
OUTER_SET extra_arcane_spells_1 = "0"
...
OUTER_SET extra_arcane_spells_9 = "0"

All of these allow the player to add additional memorizations of spells that enemies already have memorized, allowing them to endure longer and be more dangerous in prolonged fights. It will browse the existing memorized divine/arcane side at the specified level, pick one at random, and then give the creature an additional casting of that spell. It will repeat these process, with a new random selection every iteration, until the number of spells matches what the player has requested. Note that this greatly benefits from being installed after a mod like SCS, which already optimizes spell selection.

IWD2:

OUTER_SET extra_bard_spells_1 = "0"
...
OUTER_SET extra_bard_spells_9 = "0"
OUTER_SET extra_cleric_spells_1 = "0"
...
OUTER_SET extra_cleric_spells_9 = "0"
OUTER_SET extra_druid_spells_1 = "0"
...
OUTER_SET extra_druid_spells_9 = "0"
OUTER_SET extra_paladin_spells_1 = "0"
...
OUTER_SET extra_paladin_spells_9 = "0"
OUTER_SET extra_ranger_spells_1 = "0"
...
OUTER_SET extra_ranger_spells_9 = "0"
OUTER_SET extra_sorcerer_spells_1 = "0"
...
OUTER_SET extra_sorcerer_spells_9 = "0"
OUTER_SET extra_wizard_spells_1 = "0"
...
OUTER_SET extra_wizard_spells_9 = "0"
OUTER_SET extra_domain_spells_1 = "0"
...
OUTER_SET extra_domain_spells_9 = "0"

All of these allow the player to add additional memorizations of spells that enemies already have memorized, allowing them to endure longer and be more dangerous in prolonged fights. It will browse the existing memorized spell type at the specified level, pick one at random, and then give the creature an additional casting of that spell. It will repeat these process, with a new random selection every iteration, until the number of spells matches what the player has requested. Note that this greatly benefits from being installed after a mod which already optimizes spell selection.

## Contact Information

The BS mod was created by CamDawg. For issues, suggestions and general feedback, G3's Miscellaneous Released Mods forum are the best resource. Visit the Gibberlings Three Forums for information on this and any other Gibberlings Three mods on which we may be working.

## Thanks and Acknowledgements

This mod started as an outgrowth of the Max HP Creatures component from tweaks Anthology. About a year ago, I modified the code to allow for an arbitrary percentage change to HP, not just 100%, and it got me thinking about other basic stats that could be adjusted similarly.

Tools Used in Creation

- WeiDU by Wes Weimer, the bigg, and Wisp
- Near Infinity by Jon Olav Hauglid, FredSRichardson, and argent77
- Notepad++, by the Notepad++ team
- WeiDU Notepad++ Highlighters by cmorgan, updated by argent77
- ConTEXT Text Editor by Eden Kirin
- WeiDU ConTEXT Highlighters by Idobek, updated by cmorgan
- IESDP maintained by igi and lynx
- The shared modding resource library at G3

## Credits and Copyright Information

The modding community for the Infinity Engine has been going strong for more than 20 years now, and is the culmination of thousands of unpaid modding hours by fellow fans of the game. Modders produce their best work and players get the best, well-supported mods when we all work together.

There are two big ways to upset this harmony. One is to claim someone else's work as your own. The second is to host and redistribute a mod without permission from the author(s).

Be kind to your fellow players and modders. Don't do either.

## Version History

Version 2 - June 26, 2025

- Added two new variables to control XP progression
- Fixed a minor bug where AC bonuses on BG2 games were only being applied to one of the two listed AC stats on creatures

Version 1 - January 14, 2025

- Fixed bug with save bonuses on non-BG2 games
- Added input checks for IWD2 bonus spells

Version Beta 2 - January 12, 2025

- Fixed bug with extra memorized spells for sorcerers and shaman
- Extended additional memorized spells to work on IWD2, albeit with their own suite of variables

Version Beta 1 - January 8, 2025

- Initial release