Initial commit.

This commit is contained in:
Storm Dragon 2025-01-10 13:30:35 -05:00
parent 38fe088ce3
commit 7f08c41d9d
13 changed files with 2228 additions and 2 deletions

149
README.md
View File

@ -1,3 +1,148 @@
# toby-doom-launcher
# Toby Doom Launcher
Launcher for the Toby Doom Accessibility project.
The Toby Doom Launcher is a game launcher designed to help players easily configure and start various Doom-based games using the Toby Doom Accessibility Mod.
## Quick Start
1. Download the [Windows package](https://stormux.org/downloads/toby_doom_launcher.zip) or install dependencies for running from source
2. Place the launcher in your Toby Doom Accessibility Mod directory
3. Select your IWAD and game variant
4. Choose your narration style and start playing!
## Features
- Support for multiple game variants including Classic Doom, Toby Doom, Heretic, and Hexen
- Single-player, deathmatch, and co-op gameplay modes
- Custom game configuration support
- Built-in audio manual player
- Text-to-speech integration for game feedback
## System Requirements
When running from source:
- GZDoom 4.9 or higher
- Python 3.9 or higher
- PySide6 6.0 or higher
- VLC media player (for audio manual)
- Required speech providers:
- Windows: Accessible Output 2
- Linux: Speech Dispatcher or Cthulhu
- Mac: Support planned for future release
The Windows package includes all required dependencies except GZDoom and VLC.
## Installation - Linux
1. Install required dependencies from your distribution's package manager
2. Extract Toby Doom to ~/.local/games/doom
3. The launcher itself can run from anywhere on the system
4. The TobyCustom directory can be placed in any of these locations:
- Same directory as the launcher
- ~/.local/games/doom/TobyCustom
- ~/.local/share/doom/TobyCustom
5. Additional IWADs can be placed in ~/.local/share/doom
## Installation - Mac
Mac support is planned for a future release. Currently, the launcher has not been tested on macOS.
## Installation - Windows
Using the pre-packaged version:
1. Download the [launcher package](https://stormux.org/downloads/toby_doom_launcher.zip)
2. Extract it to the top level of your Toby Accessibility Mod directory
3. Install VLC media player if you want to use the audio manual
4. For multiplayer, download [freedm](https://github.com/freedoom/freedoom/releases/download/v0.13.0/freedm-0.13.0.zip) and place freedm.wad in the Toby Doom Accessibility Mod directory
Running from source:
1. Install Python 3.9 or higher
2. Install PySide6 (`pip install PySide6`)
3. Install other required Python packages
4. Place the launcher in the top level of the Toby Accessibility Mod directory
## Usage
### Basic Navigation
- Use Tab and Shift+Tab to move between controls
- Use arrow keys to navigate combo boxes
- Press Enter to activate buttons
- Press Escape to close dialogs or exit the launcher
### Important Note for NVDA Users on Windows
When using NVDA, you may need to press Alt+DownArrow to expand combo boxes if they don't respond to the normal arrow keys.
### Game Selection
1. Choose your IWAD from the dropdown menu
2. Select your desired game variant
3. Choose your preferred narration style (Self-voiced or Text to Speech)
4. Select your gameplay mode:
- Single Player: Start a solo game
- Deathmatch: Configure and start a multiplayer deathmatch
- Custom Deathmatch: Play deathmatch with custom modifications
- Co-op: Set up or join a cooperative multiplayer game
### Multiplayer Setup
#### Deathmatch
- Select arena map
- Configure options like frag limit, player count, and skill level
- Choose between hosting, joining, or playing with bots
- When playing with bots, use the console (`) to add bots with the "addbot" command
#### Co-op
- Host or join a cooperative game
- Set player count and skill level
- Uses universal keyshare for better cooperative gameplay
### Audio Manual
The launcher includes an accessible audio manual player with these features:
- Browse and select manual sections
- Full keyboard control for playback
- Play individual tracks or entire manual
- Previous/Next track navigation
- Requires VLC media player for audio playback
## File Organization
The launcher expects the following directory structure:
```
/
â TobyAccMod_V[version].pk3
â Addons/
â â MAPS/
â â MENU/
â â [Game-specific folders]/
â Manual/
â TobyCustom/
```
## Customization
Custom games can be configured using JSON files in the TobyCustom directory. This allows for:
- Custom game configurations
- Additional WAD and PK3 file loading
- Special launch parameters
- Dependency management
## Troubleshooting
- If GZDoom fails to launch, verify the executable is in your PATH or game directory
- For multiplayer, ensure freedm.wad is available in your game directory
- Check file permissions if unable to save narration settings
- Verify VLC is installed if audio manual playback fails
- Ensure speech providers are properly configured for your platform
## Additional Resources
- [MrAlanD1's Youtube Channel](https://www.youtube.com/@MrAlanD1)
- [Toby Doom topic on the zdoom forum](https://forum.zdoom.org/viewtopic.php?t=71349&hilit=toby+accessibility&sid=f874cf335c6bbb63ef4408610ae9fe5b)
- The Stormux email list, join at <https://stormux.org>
## License
This software is distributed under the GNU Lesser General Public License v3.0 (LGPL-3.0).

4
Requirements.txt Normal file
View File

@ -0,0 +1,4 @@
accessible_output2
PySide6>=6.0.0
python-vlc
setproctitle>=1.2.0

1720
Toby Doom Launcher.py Executable file

File diff suppressed because it is too large Load Diff

44
Toby Doom Launcher.spec Normal file
View File

@ -0,0 +1,44 @@
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['Toby Doom Launcher.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='Toby Doom Launcher',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='Toby Doom Launcher',
)

124
TobyCustom/' Normal file
View File

@ -0,0 +1,124 @@
#!/usr/bin/env bash
pushd "$doomPath"
# Set up the pk3 and wad files
gameOption=(
"$(find /usr/share/games/ -name 'Project_Brutality-master.pk3')"
"${doomPath}/TobyAccMod_V${tobyVersion}.pk3"
"${doomPath}/PB-Toby-Compatibility-Addon.pk3"
"${doomPath}/Toby-Universal-Pickup-Beacon-Prototype.pk3"
"${doomPath}/TobyDeathArena_V1-0.wad"
)
# Death match setup
ipAddress="$(dialog --backtitle "Deathmatch Options" \
--clear \
--no-tags \
--ok-label "Join" \
--cancel-label "Exit" \
--extra-button \
--extra-label "Host" \
--inputbox "Enter ip or URL, required for join." -1 -1 --stdout)"
buttonCode=$?
[[ $buttonCode -eq 1 ]] && exit 0
if [[ $buttonCode -eq 0 ]]; then
if [[ "${#ipAddress}" -lt 3 ]]; then
dialog --backtitle "Deathmatch" --clear --msgbox "No ip address or URL given." -1 -1 --stdout
exit 1
fi
flags=('-join' "${ipAddress}")
else
# List of maps included:
maps=(
"1" "Com Station (2-4 players)"
"2" "Warehouse (2-4 players)"
"3" "Sector 3 (2-4 players)"
"4" "Dungeon of Doom (2-4 players)"
"5" "Ocean Fortress (2-4 players)"
"6" "Water Treatment Facility (2-4 players)"
"7" "Phobos Base Site 4 (2-4 players)"
"8" "Hangar Bay 18 (2-4 players)")
# Array of how many players a given map supports in dialog rangebox syntax
declare -a mapPlayers=(
[1]="2 4"
[2]="2 4"
[3]="2 4"
[4]="2 4"
[5]="2 4"
[6]="2 4"
[7]="2 4"
[8]="2 4")
map="$(dialog --backtitle "Select Map" \
--clear \
--no-tags \
--cancel-label "Exit" \
--ok-label "Next" \
--menu "Please select one" 0 0 0 "${maps[@]}" --stdout)"
fraglimit="$(dialog --backtitle "Fraglimit" \
--clear \
--ok-label "Next" \
--cancel-label "Exit" \
--rangebox "Select Fraglimit" -1 -1 1 500 20 --stdout)"
[[ $? -eq 1 ]] && exit 0
# Get ip address
yourIpAddress="$(curl -4s https://icanhazip.com)"
players="$(dialog --backtitle "Host Deathmatch Game" \
--clear \
--ok-label "Next" \
--cancel-label "Exit" \
--rangebox "Select number of players. Remember to give them your IP address: ${yourIpAddress}" -1 -1 ${mapPlayers[$map]} --stdout)"
[[ $? -eq 1 ]] && exit 0
skillLevel="$(dialog --backtitle "Host Deathmatch Game" \
--clear \
--ok-label "Start" \
--cancel-label "Exit" \
--extra-button \
--extra-label "Bots Only" \
--rangebox "Select difficulty. 1 easiest, 5 hardest." -1 -1 1 5 3 --stdout)"
code=$?
[[ $code -eq 1 ]] && exit 0
if [[ $code -eq 3 ]]; then
players=1
dialog --backtitle "Preparing to Launch" \
--msgbox "When the game starts, press \` to open the console. Type addbot, press enter. Repeat addbot for as many bots as you would like. Press \` again to close the console." -1 -1 --stdout
fi
flags=(
'-host' "${players}"
'-skill' "${skillLevel}"
'-deathmatch'
'+set' 'sv_cheats' '1'
'+fraglimit' "$fraglimit"
'+dmflags' '16384' '+dmflags' '4' '+dmflags' '128' '+dmflags' '4096'
'+dmflags2' '512' '+dmflags2' '1024'
'-extratic' '-dup' '3'
'-warp' "$map"
)
fi
# Check for and include if present a wad. Some people may not have it.
if [[ -e "${doomPath}/DoomMetalVol7.wad" ]]; then
gameOption+=" DoomMetalVol7.wad"
elif [[ -e "${doomPath}/DoomMetalVol6.wad" ]]; then
gameOption+=" DoomMetalVol6.wad"
fi
# Extend the search for new messages to be read.
grepStrings+=('-e' ' died.'
'-e' 'Ectoplasmic Surge!'
'-e' ' has been '
'-e' '^(Armor|Health) boosted!'
'-e' 'Lesser demon energy'
'-e' '^Found '
'-e' 'Got the '
'-e' 'Picked up '
'-e' '^(Mega|Soul)sphere$'
'-e' '^Took '
'-e' ' was .*(\.|!)'
'-e' '^Vanguard of the gods!$'
'-e' "You've found "
'-e' 'You (collected|got|found|picked up) ')
# Launch the game and pipe things to be spoken through speech-dispatcher.
# This also leaves the console output intact for people who may want to read it.
exec stdbuf -oL ${gzdoom} ${gameOption[@]} "${flags[@]}" | while IFS= read -r l ; do echo "$l" | { grep "${grepStrings[@]}" | grep "${antiGrepStrings[@]}" | sed "${sedStrings[@]}" | spd-say -e ${spd_module} ${spd_pitch} ${spd_rate} ${spd_voice} ${spd_volume} -- > /dev/null 2>&1; }; echo "$l";done

View File

@ -0,0 +1,24 @@
{
"name": "Army of Darkness Doom",
"dependencies": [
{
"file": "aoddoom1.wad",
"url": "https://www.moddb.com/mods/army-of-darkness-total-conversion/addons/army-of-darkness-doom-wad",
"messages": [
"Place \"aoddoom1.wad\" in \"${gamePath}\""
]
}
],
"files": [
"Addons/MENU/TobyV{toby_base_version}_*",
"aoddoom1.wad"
],
"optional_files": [
"DoomMetalVol7.wad",
"DoomMetalVol6.wad"
],
"flags": [
"+Toby_UniversalBeacon_UseUniversalSounds", "true"
],
"use_map_menu": true
}

View File

@ -0,0 +1,27 @@
{
"name": "Go Midievil On Their Ass",
"dependencies": [
{
"file": "GMOTA_V.1.5.2.pk3",
"url": "https://combine-kegan.itch.io/gmota",
"messages": [
"Place the file in ~/.local/games/doom"
]
}
],
"files": [
"Addons/MENU/TobyV{toby_base_version}_*",
"Addons/DOOM/TobyV{toby_base_version}_Proximity.pk3",
"GMOTA_V.1.5.2.pk3"
],
"flags": [
"+Toby_NarrationOutputType", "2",
"+pb_exaggeratedrecoil", "false",
"+pb_weapon_recoil_mod_horizontal", "0",
"+pb_weapon_recoil_mod_vertical", "0",
"+vertspread", "true",
"+Toby_SnapToTargetTargetingMode", "1",
"+Toby_UniversalBeacon_UseUniversalSounds", "true"
],
"use_map_menu": true
}

View File

@ -0,0 +1,32 @@
{
"name": "Project Brutality",
"dependencies": [
{
"file": "Project_Brutality.pk3",
"url": "https://www.moddb.com/mods/project-brutality",
"messages": [
"This should be included by default.",
"If you are seeing this message, please reinstall after removing any TobyDoom files from ~/.cache/linux-game-manager.",
"rm -f ~/.cache/linux-game-manager/TobyAccessibilityMod_Version*"
]
}
],
"files": [
"Addons/DOOM/TobyV{toby_base_version}_Proximity.pk3",
"PB-Toby-Compatibility-Addon.pk3",
"Project_Brutality.pk3"
],
"optional_files": [
"DoomMetalVol7.wad",
"DoomMetalVol6.wad"
],
"flags": [
"+pb_exaggeratedrecoil", "false",
"+pb_weapon_recoil_mod_horizontal", "0",
"+pb_weapon_recoil_mod_vertical", "0",
"+vertspread", "true",
"+Toby_SnapToTargetTargetingMode", "1",
"+Toby_UniversalBeacon_UseUniversalSounds", "false"
],
"use_map_menu": true
}

View File

@ -0,0 +1,31 @@
{
"name": "Project Brutality Latest",
"dependencies": [
{
"file": "Project_Brutality-Latest.pk3",
"url": "https://www.moddb.com/mods/project-brutality",
"messages": [
"This should be included by default.",
"If you are seeing this message, please reinstall after removing any TobyDoom files from ~/.cache/linux-game-manager.",
"rm -f ~/.cache/linux-game-manager/TobyAccessibilityMod_Version*"
]
}
],
"files": [
"Addons/DOOM/TobyV{toby_base_version}_Proximity.pk3",
"Project_Brutality-Latest.pk3"
],
"optional_files": [
"DoomMetalVol7.wad",
"DoomMetalVol6.wad"
],
"flags": [
"+pb_exaggeratedrecoil", "false",
"+pb_weapon_recoil_mod_horizontal", "0",
"+pb_weapon_recoil_mod_vertical", "0",
"+vertspread", "true",
"+Toby_SnapToTargetTargetingMode", "1",
"+Toby_UniversalBeacon_UseUniversalSounds", "false"
],
"use_map_menu": true
}

View File

@ -0,0 +1,14 @@
In your ~/.config/gzdoom/gzdoom.ini file, if you do not have these four sections create them at the end. If they are there, you can just update the keybindings. It should look like this:
[Doom.PBInteractions.Bindings]
[Doom.PBInteractions.DoubleBindings]
[Doom.PBAdvMoves.Bindings]
F=+User2
G=+User1
U=unreloader
V=+User4
[Doom.PBAdvMoves.DoubleBindings]

17
TobyCustom/StarWarsjson Normal file
View File

@ -0,0 +1,17 @@
{
"name": "Star Wars",
"dependencies": [
{
"file": "Xim-StarWars-v3.1.5.pk3",
"url": "https://www.moddb.com/mods/xims-star-wars-doom",
"messages": [
"Place Xim-StarWars-v3.1.5.pk3 in the Toby Doom directory, on Linux or Mac, ~/.local/games/doom"
]
}
],
"files": [
"Xim-StarWars-v3.1.5.pk3",
"Addons/STARWARS/*.pk3"
],
"use_map_menu": true
}

View File

@ -0,0 +1,44 @@
{
"name": "WolfenDoom",
"dependencies": [
{
"file": "Addons/WOLFENDOOM/orig_enh.pk3",
"url": "https://www.moddb.com/mods/wolfendoom/downloads/wolfendoom-enhanced",
"messages": [
"mkdir -p ~/.local/games/doom/Addons/WOLFENDOOM/",
"Place all pk3 files from the zip archive in:",
"~/.local/games/doom/Addons/WOLFENDOOM/",
"There should be three of them noct_enh.pk3, orig_enh.pk3, and sod_enh.pk3"
]
}
],
"submenu": {
"title": "Select Game",
"options": [
{
"name": "WolfenDoom",
"file": "Addons/WOLFENDOOM/orig_enh.pk3"
},
{
"name": "WolfenDoom - Spear of Destiny",
"file": "Addons/WOLFENDOOM/sod_enh.pk3"
},
{
"name": "WolfenDoom - Nocturne",
"file": "Addons/WOLFENDOOM/noct_enh.pk3"
}
]
},
"files": [
"Addons/MENU/TobyV{toby_base_version}_*",
"Addons/DOOM/TobyV{toby_base_version}_Proximity.pk3"
],
"flags": [
"+bind", "Ctrl", "+attack",
"+bind", "X", "turn180",
"+Toby_NarrationOutputType", "2",
"+Toby_SnapToTargetTargetingMode", "1",
"+Toby_UniversalBeacon_UseUniversalSounds", "true"
],
"use_map_menu": true
}

BIN
dist/_internal/nvdaControllerClient.dll vendored Normal file

Binary file not shown.