# SokuMods [](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.
The code in this repository comes from various contributors:
- this repository was originally forked off a source archive of SWRSToys, made by *Anonymous Coward*
- *[DPhoenix](https://github.com/enebe-nb)* made [shady-loader](https://github.com/enebe-nb/shady-packer), UPnPNat, PaletteTrueColors
- *FireSeal* made SokuRoll
- *[fishshapedfish](https://github.com/fishshapedfish)* made DPadFix, ReplayReSync
- *[PinkySmile](https://github.com/Gegel85)* made DiscordIntegraton, SokuStreaming, InfiniteDecks, TrialMode, AdvancedPraticeMode, HostInBackground
- *Ichirin* made CharactersInForeground, NetGameScore, PracticeEx, SokuEngine, SWRSokuRoll, EasyDecks, *AltFullscreen*
- *[RhythmLunatic](https://github.com/RhythmLunatic)* made *WindowedFullscreen*
- *Shinki* and *[PC_volt](https://github.com/PCvolt)* made ReplayInputView+
- *[PC_volt](https://github.com/PCvolt)* made LabTool
- *[S-len](https://github.com/S-len)* made [SkipIntro](https://github.com/S-len/Soku-SkipIntro) and InGameHostlist
- *Fear Nagae*, *[PC_volt](https://github.com/PCvolt)*, *[PinkySmile](https://github.com/Gegel85)*, *[S-len](https://github.com/S-len)* made FixMeiling236
- *[PinkySmile](https://github.com/Gegel85)* made ReDelay, based on an original version by *Nepoke*
- *mauve* made th123e (and its loader, in `th123eloader/`)
- *[delthas](https://github.com/delthas)* made Autopunch, GetIP, SokuReplays, as well as all the plumbing: adding CMake, CI, formatting, ...
If you have made an SWRSToys or SokuEngine module, do contact us either on GitHub or with a PM on Discord to `cc#6439` so we can add it here, with proper credits!
## Using
There are two mod packs:
- the SokuEngine pack includes all mods, a simple in-game UI to enable and disable mods
- the SWRSToys pack includes only SWRSToys mods, and is only configurable from a text file outside of the game
For now **it is recommended you use the SWRSToys pack**.
### SokuEngine
- Download and install the [Visual C++ 2019 x86 redistribuable](https://aka.ms/vs/16/release/vc_redist.x86.exe)
- Download the **[latest SokuEngine release](https://delthas.fr/sokuengine.zip)** and extract it to your game folder.
- Run the game as usual.
- To enable and disable mods, enter the *ModConfig* menu at the bottom of the main menu screen.
- To change the configuration of modules you enabled, modify their `.ini` configuration files (in the `modules/` folder) while the game is turned off, then restart the game.
*Any change made to a .ini file will require a restart.*
### SWRSToys (recommended)
- Download the **[latest SWRSToys release](https://delthas.fr/swrstoys.zip)** and extract it to your game folder.
- Open SWRSToys.ini in Notepad and enable some modules by deleting their `;`, then save the file.
- Modify the `.ini` configuration files of modules you enabled (in the `modules/` folder) while the game is turned off.
- Run the game as usual.
*Any change made to a .ini file will require a restart.*
## SWRSToys/Common modules
### Autopunch
**Automatically host without forwarding your ports, with any other Autopunch user.**
*This module does not have a configuration file.*
### BGMChanger
**Replace some of the game BGMs.**
*The only supported format is OGG Vorbis.*
### CharactersInForeground
**Draw characters over HP bars, for better clarity.**
*This module does not have a configuration file.*
### 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.*
See [here](modules/DiscordIntegration/README.md) for details.
### DPadFix
**Map the joystick DPad and trigger buttons to game inputs.**
### EasyDecks
**Edit your decks freely during a netplay session.**
### 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
**Overhauls the netplay menu by adding an in-game graphical lobby/hostlist connected to the Discord host list bot.**
*The mod is connected to Konni only, not Parvati. Hopefully your server will move to Konni soon.*
### LabTool
**Enhance practice mode by adding fast character position save/reset, character state colors, and frame data info.**
Details
#### Characters state colors
- Display of **grazing** in *transparent*, **CH** in *red*, **invulnerability** in *blue* (do not trust it for DP moves, as they are strangely hardcoded), **guard unavailable** in *purple*.
- **Position management**: 5 hardcoded positions + 1 position customizable with the save key, press 4, 1, 2, 3, 6 or 5 with the reset key. You can set your own keys in the .ini file.
#### Frame data
- **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
This mod merges the previous functionality of WindowResizer, WindowedFullscreen, AltFullscreen in a single mod.