NOTE If you want to report a bug or otherwise need to make sure I am aware or something, send me a message (instead of leaving a comment). I don't get notified of comments, so otherwise I may not see your message for awhile.
This mod was inspired by Loismustdie555's weapon wheel mod for Project Brutality. The original intention was to modify the wheel to be more 'joystick-friendly', but as I didn't have access to the original source, I wound up rewriting the entire wheel from scratch (though I certainly stole some graphics from this mod, for which it seems that DoomNukem deserves credit).
Weapon Wheel v1
This mod was inspired by Loismustdie555's weapon wheel mod for Project Brutality. The original intention was to modify the wheel to be more 'joystick-friendly', but as I didn't have access to the original source, I wound up rewriting the entire wheel from scratch (though I certainly stole some graphics from this mod, for which it seems that DoomNukem deserves credit---see this thread).
How to use
There are two files included: Weapon Wheel.pk3 and Weapon Wheel - Template.pk3. The former is the actual mod and the latter is for other modders who want to adapt this to their own own (see "For modders" below).
Out of the box, there should be compatibility with vanilla (Z)Doom (so hopefully GZDoom and Zandronum, as well), Freedoom, Heretic, Blasphemer, Hexen, Strife, Chex Quest, Chex Quest 3, Action Doom 2: Urban Brawl, Harmony, Hacx, The Adventures of Square, Brutal Doom, the Doom 2016 Weapons Add-on Pack, the Brutal Pack, Project Brutality, Smooth Doom, Complex Doom, the LCA add-on for Complex Doom, Trailblazer, Zion, Russian Overkill, Simple Strife, Death Foretold, Doom 64, Brutal Doom 64, and Strife Uncut. (To clarify, the same file should work for all.) As a rule of thumb, in order to ensure compatibility with other mods, you should load Weapon Wheel.pk3 after other game-play mods.
-There is also compatibility with the pipe-bombs and satchel charges of the UAC Survival Pack, the sledgehammer, the lightning gun, and the Unmaker. You will need to enable these before you begin playing in the "Optional weapons" submenu. If you change this in game, you will need to restart before changes take effect.
The Weapon wheel options menu can be found in OPTIONS->GAMEPLAY OPTIONS->WEAPON WHEEL OPTIONS.
Upon loading up, go into controls and bind a key to the weapon wheel (by default, this is rshoulder, the default in Doom (2016)). You can also bind keys to "Rotate clockwise" and "Rotate counterclockwise" if you plan to use the wheel in rotate mode. You can then customize the wheel to your liking in the options menu. Make sure to set "Invert" to agree with your usual preference (unfortunately, to the best of my knowledge, there is no way to get a user's joystick inversion preference using ACS, so you have to tell the wheel yourself). You should now be good to go.
- Weapon wheel compatible with vanilla (Z)Doom (GZDoom and Zandronum), Freedoom, Heretic, Blasphemer, Hexen, Strife, Chex Quest, Chex Quest 3, Action Doom 2: Urban Brawl, Harmony, Hacx, The Adventures of Square, Brutal Doom, the Doom 2016 Weapons Add-on Pack, the Brutal Pack, Project Brutality, Smooth Doom, Complex Doom, the LCA add-on for Complex Doom, Trailblazer, Zion, Russian Overkill, and Simple Strife.
- Item wheel for selecting/using inventory items.
- For Brutal Doom, the wheel works in any mode (including Classic).
- For Project Brutality, the wheel works in any mode (including Classic v20b and Traditional).
- There are three time modes: stopped time, slowed time, and normal time. The first effectively pauses the game while the wheel is up, the second slows time down, and the last doesn't effect the time flow at all.
- Change between toggle/hold.
- Option to have tapping the weapon wheel button reverts to previous weapon (like in DooM 2016)
- Displays weapon names (with an option to toggle this off).
- Displays ammunition for each weapon on the wheel (with an option to toggle this off).
- Can display a slot for all possible weapons or only those weapons you possess With fewer slots, the wheel can be easier to use, but the positions of the weapons will change as you acquire new ones. Thus, both choices have their pros and cons.
- Can dynamically resize the wheel depending on how many slots are shown (only relevant if you're only displaying a slot for weapons you currently possess).
- Customize the size of the wheel to your liking.
- Cursor mode, similar to Loismustdie555's mod. IMHO, the use of a weapon wheel really shines only with the use of a joystick/controller, but this makes it convenient to use with a mouse as well. (Of course, you can use cursor mode with a joystick or vice-versa, but that's not what it was designed for.)
- Rotation mode, similar in functionality to this mod, but with a wheel. Added due to suggestions from multiple people.
I have play-tested / bug-tested myself, but there are almost certainly bugs that remain. v1 should certainly be considered a beta release. Please let me know if you find any bugs, or otherwise have suggestions for improvement.
The mod was designed to be easy to modify to make work with pretty much any set of weapons. If you would like to change the wheel to work with a custom weapon set, you should modify Weapon Wheel - Template.pk3. You need to do two things (i) add graphics to represent your weapons on the wheel and (ii) modify weapon_list in /SCRIPTS/WEAPONLISTS.acs
For the graphics, simply dump all your icons into the GRAPHICS lump of the .pk3 (of course, you can organize them in subdirectories as you like). Be careful to watch out for (i) name conflicts and (ii) that the file names must be eight characters or less (see the ZDoom wiki). It is probably a good idea to use the Spawn sprite for this purpose (though you may need to resize it first to fit on the wheel---it should probably be smaller than 70x45 pixels). Also, be sure that the offset in SLADE is set to (0,0), or else the sprite won't be centered.
In WEAPONLISTS.acs, you must properly initialize weapon_list. To initialize weapon_list, you can either simply write "weap OF WEAPONS GOES HERE]", or if you need to do something more complicated (e.g., for PB, I needed to check whether the player was playing Project Brutality mode, Classic v20 mode, or Traditional mode), you properly initialize weapon_list in the function initialize_weapon_list().
Either way, the final format of weapon_list should be as follows. It is a doubly-indexed array, which should contain an entry for each weapon, each of these entries in turn consisting of five pieces of data: the class weapon name, the name of the graphic for the weapon you placed in the GRAPHICS lump, the display name of the weapon, the name of the ammo used for the weapon, and the name of the ammo used to represent how much ammunition is currently loaded in the gun. The first entry is required but the latter four can all be set to "NONE" if you don't want to make use of them.
Finally, if you would like to have more mod-specific custom interactions with the wheel, you can put code in update_weapon_list() and update_weapon_list_wheel_on()---these functions are in a whilte(true) loop and so will be called every tic.
In summary, dump your weapon icons in the GRAPHICS lump and properly initialize weapon_list in /SCRIPTS/WEAPONLISTS.acs. With even the most modest amount of modding experience, from the explanation here, code comments, and looking at the examples in Weapon Wheel.pk3 and Weapon Wheel - Template.pk3, it should be pretty obvious what to do.
Don t forget to recompile WEAPONLISTS.acs!
A similar procedure applies if you would like to add support for a custom set of inventory items---see /SCRIPTS/ITEMLISTS.acs.
(I should also mention that it's not that complicated to incorporate your mod into Weapon Wheel.pk3 itself, but you will need to study the code in the 'official' WEAPONLISTS.acs to see how to do this. In contrast, modifying Weapon Wheel - Template.pk3 is easy enough you don't really even need any modding experience to do it.)
Finally, you should feel welcome (and encouraged!) to port this into your own mods.
- Original idea due to Loismustdie555.
- Graphics due to DoomNukem
- PA1NKI113R for Project Brutality
- Sergeant_Mark_IV for Brutal Doom
- Sergeant_Mark_IV for the Doom 2016 Weapons Add-On Pack
- JTC3 for the Brutal Pack
- Gifty for Smooth Doom
- Daedalus for Complex Doom
- Pillowblaster and DoomNukem for Trailblazer
- SAHZALPABAEL for Zion
- PillowBlaster for Russian Overkill
- TheUnbeholder for Simple Strife
- DBThanatos for Death Foretold
- Sergeant_Mark_IV for Brutal Doom 64
- Zaero for Strife Uncut
- Merser433 for Merser's Sprites and Enhancements
- Barge for the sledgehammer
- Barge for the lightning gun
- Barge for the Unmaker
- saegiru for the UAC Survival Pack
- saegiru for the UDV HUD
- nidorb99 for flashlight sprite
- id Software for Doom
- Mike Swanson, Catoptromancy, Jim McDougald, Simon Howard, Jon Dowland, and Captain Mellow for Freedoom
- Raven Software for Heretic and Hexen
- Egregor and Springy for Blasphemer
- Rogue Entertainment for Strife
- Digital Cafe for Chex Quest
- Charles Jacobi for Chex Quest 3
- Scuba Steve for Action Doom 2: Urban Brawl
- Thomas van der Velden for Harmony
- Banjo Software, Xaser, and Blzut3 for Hacx
- BigBrik Games for The Adventures of Square
- Graf Zahl for GZDoom
- Randy Heit for ZDoom
- The Zombie Killer for ACS-X
- Other original code due to Stan423321, Zhs2, PillowBlaster, The Zombie Killer, and Nash
- Ammo font due to Kinsie / id software
- 1.54: Updated compatibility for BD v21 beta.
- 1.53: Added support for Strife Uncut. Adjusted placement of ammunition count.
- 1.52: Fixed compatibility bug with PB 3.0. Fixed compatibility for GZDoom 1.8.6.
- 1.51: Added compatibility for the PB 3.0 axe.
- 1.50: Added compatibility for BD v21 beta. Fixed PB 3.0 bugs involving weapon upgrades.
- 1.49: Disabled side-stepping in Trailblazer while wheel is up in "stopped time" mode. Fixed potential bug.
- 1.48: Disabled side-stepping in PB 3.0 while wheel is up in "stopped time" mode.
- 1.47: Updated compatibility for Russian Overkill 2.5.
- 1.46: Fixed bug with PB 3.0 compatibility (the demon morph runes). Recalibrated joystick nonrecenter mode.
- 1.45: Added UDV's flashlight, EMS, and radar to inventory wheel (can be disabled).
- 1.44: Added option to disable PB grenades and mines with the inventory wheel.
- 1.43: Weapon sway in PB 3.0 is now disabled when the wheel is up under certain settings.
- 1.42: Fixed small bug with inventory sprites.
- 1.41: Added inventory item wheel. Added compatibility for PB 3.0 test version. Added compatibility for Merser's Sprites and Enhancements. Updated compatibility for LCA v220.127.116.11. Updated compatibility for Trailblazer v1.4a. Updated compatibility for Doom 2016 Weapons Add-on pack (to V2b). Fixed small bug in case there was only one weapon. Fixed revenant launcher sprites. Added "UsingWeaponWheel" for mod detection in other mods.
- 1.40: Updated for compatibility with Brutal Pack V9.
- 1.39: Fixed Zandronum compatibility and cleaned up code (thanks to saegiru for this).
- 1.38: Fixed compatibility with UDV 2.11. Updated compatibility with JP's Mini Mods. When the wheel is up, in stopped time and slowed time modes respectively, damaging floors no longer deal damage and deal damage more slowly.
- 1.37: Added support for (a version of) Doom 64 and Brutal Doom 64
- 1.36: Updated for compatibility for UDV v2.11. Fixed small bug with Death Foretold compatibility.
- 1.35: Fixed bug with rotation animation.
- 1.34: Updated for compatibility with Death Foretold v2.0.
- 1.33: Added support for Death Foretold.
- 1.32: Changed behavior of cursor mode if selection dot is enabled
- 1.31: Enabled Doom 2016 style selection dot in cursor mode
- 1.30: Updated sound effect. Added option to disable open/close animation. Fixed lag on wheel close.
- 1.29: Made compatible with JP's Mini Mods. Fixed satchel sprites.
- 1.28: Fixed bug where wheel couldn't select all weapons if there were sufficiently many
- 1.27: Added support for Russian Overkill
- 1.26: Bug fix for D-Touch
- 1.25: Added the ability to rotate the wheel in any mode. Added support for the Doom 2016 Weapons Add-on Pack. Added support for the Brutal Pack. Upgrading weapons in PB now changes the names/sprites/ammo on the wheel. Fixed the optional weapon support for Brutal Doom. Fixed small bug where +nextweap +prevweap would not work correctly with the wheel up. Tried to smooth joystick movement a bit.
- 1.24: Added support for D-Touch. Added option to not have joystick automatically recenter (like in Doom 2016). Added optional selection dot for use in joystick mode. 'Smoothed' cursor/joystick movement at outer radius of wheel.
- 1.23: Fixed bug with revenant transformation. Fixed bug where ammo close to zero, but not actually zero, displayed as black.
- 1.22: Fixed bug where the wheel was not reenabled after respawning.
- 1,21: Added Zion support. Added Simple Strife support. Added option to have tapping the weapon wheel button revert to previous weapon. Fixed bug where the revenant rune in PB would not close the wheel. Fixed bug that made the laser sight on the rocket launcher in PB break the game. Fixed bug where changing the "Firing closes wheel" option with the wheel up would not take immediate effect. Redid slowed time effect. Added wheel animation.
- 1.20: Added option to have firing close the wheel. No longer display slot for SSG in Doom I (this also applies to Smooth Doom and Brutal Doom Classic). Now hides 'cheat' weapons (i.e. those marked with the flag +WEAPON.CHEATNOTWEAPON), unless the player 'happened' to pick them up. No longer display slot for rifle in Smooth Doom unless the player has this turned on. Disabled wheel when 'revenant-cursed' in Project Brutality. Updated credits Cleaned up code Slowed player down in slowed time mode. Using the rotate wheel buttons now automatically puts you into rotate mode Added default binds for the rotate wheel keys No longer have to restart level to change optional weapons settings.
- 1.19: Added Freedoom, Blasphemer, and Harmony support.
- 1.18: Added Action Doom 2, Hacx, and The Adventures of Square support.
- 1.17: Added Chex Quest (3) support. Added support for Trailblazer. Updated Credits. Cleaned up code.
- 1.16: Forced normal time in multiplayer. Updated credits. Added Heretic, Hexen, and Strife support. Added Brutal Doom support. Changed default settings. 'Dims' weapons that are out of ammo. Fixed Zandronum compatibility. Fixed Complex Doom weapon_list. Added support for LCA add-on to Complex Doom.
- 1.15: Fixed weapon order for PB Classic v20. Added support for the sledgehammer and the Unmaker.
- 1.14: Minor bug fix. Slight menu changes.
- 1.13: Consolidated all versions into one. Fixed PB Traditional sprites. Converted to GDCC. Cleaned up code. Updated credits. Reorganized menu. Calibrated dynamically resizing of HUD. Added support for pipe bombs and satchel charges. Added support for the lightning gun. Added option to display weapon names.
- 1.12: Added version for Complex Doom. Calibrated dynamically resizing of HUD.
- 1.11: Actually slows player speed in slowed time mode. Actually slowed down firing rate in slowed time mode. Added additional sound effect for when selection changes. Added 'heartbeat' sound effect in slowed and stopped time modes. Calibrated cursor slightly. Added (optional) green filter in slowed and stopped time modes. Cleaned up code. Fixed warnings. Added default bind for weapon wheel key.
- 1.10: Added option to change sound effect volume.
- 1.09: Added ability to click (+attack) to select weapon in stopped time or cursor mode. Cleaned up code.
- 1.08: Added support for Doom 64 sprites in Smooth Doom
- 1.07: Bug fix.
- 1.06: Bug fix.
- 1.05: Added sound effects. Minor bug fix.
- 1.04: Added "rotate" mode (for mouse wheel). Cleaned up code.
- 1.03: Test upload
- 1.02: Updated credits
- 1.01: Fixed bug that required UDV
- 1.00: Initial release