Professional Documents
Culture Documents
svg)]
(https://builds.sr.ht/~delthas/SokuMods?)
A repository of all known SWRSToys and SokuEngine mods and their frameworks for
Touhou Hisoutensoku (12.3).
This repository was originally created from the original SWRSToys release by
*Anonymous Coward* with the following goals:
- make sure the source code for SWRSToys is easy to find
- make a repository of all released modules and their source code, including ones
that were not made by Anonymous Coward
- have up-to-date headers of the latest reverse-engineered addresses from the game,
updated as new people find more addresses
- set up a CI for easy, reproducible builds and deployment of the latest release of
SWRSToys.
## Using
### SokuEngine
## SWRSToys/Common modules
### Autopunch
**Automatically host without forwarding your ports, with any other Autopunch
user.**
### BGMChanger
### CharactersInForeground
### DiscordIntegration
**Automatically show your game status in Discord, send Soku invites and join games
with one click on Discord.**
*The mod merely sends and receives IP addresses from Discord, you'll still need to
forward your ports or use Autopunch.*
### DPadFix
### EasyDecks
### FixMeiling236
**Fix a serious game bug regarding an underministic Meiling 236 recovery duration
which could cause game desyncs.**
*This module is very lightweight; it is advised & good netplay etiquette to always
enable it.*
### GetIP
**Automatically copy your IP and an optional host message to your clipboard when
starting to host.**
*This replaces an old deprecated module of the same name that was SokuEngine-
exclusive and buggy.*
### InGameHostlist
*The mod is connected to Konni only, not Parvati. Hopefully your server will move
to Konni soon.*
### LabTool
<details>
<summary>Details</summary>
- **Gap time** in a blockstring displays the number of idle frames the defender
comes back to between the first and second hit. If nothing is displayed, the string
is tight, else, it is safely mashable by the amount displayed on the console. "Xf
gap gets beaten by Xf move, and trades with X+1f move" is how you should interpret
it.
- **Frame advantage**: both characters must be on ground for the result to be
displayed.
- **Highjump cancel advantage**: p2 remains on the ground while p1 must hjc for the
result to be displayed.
- **Skills reset** with a key customizable in the .ini, reset the levels and the
skills you used to default.
</details>
### MemoryPatch
Available patches:
- 16bitsColor: reduce rendering color depth from 32 bits to 16 bits
- InputFreedom: accept gamepad input even when the device is inactive
- DefaultDenyWatch: disallow spectating by default
- DefaultDenyBattle: spectate by default
- AllowMultiInstance: allow running multiple instances of the game at once
- DisableWeatherEffect: disable all weather effects
- AlwaysRandomMusic: always play random stage music regardless of in-game choice
- NativeDPadFix: use the gamepad DPad rather than the circle pad (use only if
DPadFix does not work)
### NetBattleCounter
**Display the number of consecutive online matches you play, and optionally play
specific sounds on consecutive games played.**
### NetBellChanger
### NetProfileView
**Display profile name for players in a game with a specific formatting (color,
font, ...) (spectating and/or playing).**
### ReDelay
*Make sure to read the configuration file and set your game control keys properly
for the mod to work.*
### ReplayDnD
*This associates .rep with Soku for easy watching in one click. You can also drag
replays or folders containing replays to the th123.exe file (not th123e.exe!).*
### ReplayInputView+
*The replay speed can also be changed with configurable hotkeys: by default F10
speeds up; F9 slows down; F11 pauses and unpauses the game; F12 steps a single
frame forward; F4 toggles hitboxes display; F6 displays additional debug
information; F7 cycles through different game inputs display.*
### ReplayReSync
**Work around a game bug causing desyncs by forcing the game state to Moutain Vapor
or Normal.**
*By default, the game is in normal state. When ending a game/spectate/replay during
mountain vapor, the game goes in Mountain Vapor state and stays this way until the
next game starts. When joining, spectating, or watching a replay that does not
correspond to your state, you will be desynced.*
*The mod allows you to automatically resync some replays (currently, those
downloaded from sokureplays) and manually set your weather state if needed.*
### shady-loader
**Simply load custom game resources (sprites, images, sounds, music, ...) to the
game.**
*To add and remove mods, use the shady-manage program in `modules/shady-loader/` or
use the in-game ModConfig menu if you're using SokuEngine.*
### SkipIntro
**Skip the game intro screen, automatically enter a menu or a custom practice
preset on start.**
### SokuReplays
### SokuStreaming
*To use the mod, start playing or spectating, and in OBS Studio, add a Browser
Capture at URL `http://localhost` with resolution 1920 x 1080.*
### SWRSokuRoll
*This mod uses a configuration file in its module directory, not the `SokuRoll.ini`
in the main game folder. This mod does not require installing SokuRoll (does not
require `SokuRoll.dll` and `SokuRoll.ini`).*
### UPnPNat
*This mod uses the UPnP NAT technology, which lets applications automatically
request a port forwarding without user intervention. This technology is known to be
disabled by default on most routers and might therefore not work for everyone.*
### WindowedFullscreen
**Make the game window fullscreen, but without stretching, and with fast Alt+Tab.**
## SokuEngine-exclusive mods
### NetGameScore
### PracticeEx
**Greatly improve Practice mode by adding several game options and support for
macros.**
## Making a module
- Make a new folder in `modules/`. You can copy an existing module and adapt it.
- Edit the root `CMakeLists.txt` file accordingly.
- Your module will automatically be injected.
## Building
Install Visual Studio (or CMake and the Visual C++ Build Tools).
If you're running Visual Studio 2017 or newer: import the directory in Visual
Studio, the project will be recognized automatically.
If you're running Visual Studio 2015 or older: you will need to install CMake and
run:
```
cmake .
```
After building, run the install target, which will create an `install` folder with
all the built files.
## License