Spawn-B-Gone will remove selected enemy types from maps/levels for the home computer release of the video game Quake, and should also work for any fan made maps or mods such as Arcane Dimensions, Quoth, etc. (While not tested, it could potentially work for Quake 1 engined based games such as Hexen II for example.)
Because I suck at video games.
The original goal was to create something that would allow me to remove Spawn enemies from any Quake maps. They are by far Quake's worst enemy type (IMO). (More whining below) I didn't want to have to manually determine which map featured them, open said map, edit it, and save each file in a map editor, so I tried to find a code solution that could somewhat automate the process.
After a bit of trial and error while creating these scripts, I realized any enemy type could be removed entirely from maps. So instead of limiting the scripts to just replacing or removing Spawn enemies, I figured it would make more sense to allow the removal of any enemy type. I thought the name was decently clever though, so I kept it even after changing the scripts focus.
Lastly, this has just been a fun coding exercise (.bat/.sh file creation) for a game I enjoy playing. I've also learned a bit about how Quake map files are created, compiled, and structured in the process.
The scripts are just a glorified find and replace function. They search for a user entered string (Ex: monster_dguard) within a Quake .bsp map file, and replace the monster_ prepend with _removed.
Quake seems to expect a certain file/lump size for a compiled .bsp map file that I'm not familiar enough with, so changing the number of bytes in the file seems to cause Quake to crash when the map is loaded. For example, replacing a monster entity name with another of more or fewer characters (E.g., monster_zombie to monster_dog), or just outright removing an enemy map entity doesn't work.
(EntEd seems to work when removing entities, but I'm not sure how it does it properly, and it also seems to crash when loading larger, more modern fan created maps. If you're aware of how I could get around that issue, feel free to contact me or submit a PR.)
Download either the spawn-b-gone.sh (Mac/Linux) or spawn-b-gone.bat (Windows) script to a directory of your choosing. Preferably wherever the Quake .bsp map file(s) that you want to run the replacement on are already located. This is usually a path that looks like one of the following:
C:\Quake\MODNAME\maps
C:\Program Files (x86)\Steam\steamapps\common\Quake\MODNAME\maps
If you are using spawn-b-gone.sh, you will need to make the bash script exectuable, by running the following command in the directory that you placed the script:
chmod 755 spawn-b-gone.sh
If you want to run the replacement on the original games map files or any mods that are contained as a .pak file, you will need to export the .bsp files from within to a temporary directory, using something like PakScape. After running the script, if you are using a modern Quake sourceport, you may be able to leave the extracted .pak files as is. If not, then you will then need to import the modified .bsp files back into the .pak file and save it.
Run ./spawn-b-gone.sh (Mac/Linux) or spawn-b-gone.bat (Windows) in your terminal from whatever directory you've placed the script in, and then follow the on screen prompts. This directory must contain the .bsp files you want to run the enemy removal on. E.g.:
cd C:\Quake\MODNAME\maps\
Spawn-B-Gone.bat
If any map files had replacements made, you should now have a MAPNAME.bsp.bak file(s) for it in the same directory. You should either keep these files as is, or put them somewhere safe, in the event you want to revert back to the original enemy layout.
To use the original map file, just delete the modified one, remove .bak from the filename of the backup map, and put it in place of the modified file you deleted.
Aside from the balance of the map as created by the original desiger, this may cause issues in situations where a maps logic/triggered events are tied to:
- Expecting a specific monster entity type (E.g., A door only opens if a specific Spawn enemy is killed, a Shambler only appears if a number of Death Knights are killed, etc.)
- Expecting a specific number of enemies on the map (I.e., These scripts will reduce a maps total enemy count)
- Some other situation I haven't thought of.
In the event of such an issue (or any other), you could easily revert to the original maps backup file that is generated when the scripts are run.
For me personally, I find that they ruin the flow of the game. They seem to have no discernible pattern, unlike every other enemy type, and can be used quite poorly in fan made maps. Coming across them changes the game from a fun run-and-gun shooter, to a corner-creeper, where you have to move slow and poke around corners to take the enemy out before continuing on running and gunning.
Thank you for your comments. I will take them under consideration. Please forward any additional insights to spawn-b-gone@gmail.com.
