Touhou Patch Center:Servers
Project overview | ||||||
---|---|---|---|---|---|---|
About | Tutorial | FAQ | Download | Patch servers | Bug tracker | Wiki security |
Mirrors
To ensure the availability of our translations, the patch data used by the Touhou Community Reliant Automatic Patcher is mirrored across multiple servers.
Server | URL |
---|---|
thpatch.net main server (HTTPS) | https://srv.thpatch.net/ |
As the main server, srv.thpatch.net is the most up-to-date resource and directly receives translations after they were made in the wiki. The other mirrors pull the latest state from there every minute.
Just like the content on the wiki, the translations and images on this server are licensed under Creative Commons Attribution-ShareAlike 4.0 International.
Neighbors
This list contains links to third-party patch repositories not under our control. When pointed to Touhou Patch Center, the configuration tool will offer to choose patches from these repositories as well.
If you want your repository to be included in this list, please send a message in the #thirdparty-mods of our Discord server, and include a ping to the @Webmaster role and the public path to your repository (this is the "servers"
value in repo.js
). In case you use Git to manage your server, you can also request it to be automatically mirrored on mirrors.thpatch.net
. This is highly recommended in order to keep your patches available in case the original host happens to go down.
URL | Title | Patches |
---|---|---|
https://mirrors.thpatch.net/nmlgc/ | Nmlgc's patch repository |
(missing support for TH07 and TH08))
(by sibgamer, http://tinyurl.com/real-bullet-size))
|
https://raw.githubusercontent.com/Ghildrean/touhou-es-es/master/ | Traduccion al castellano |
|
https://raw.githubusercontent.com/Gamer251/thcrap-gamer251/master/ | The Amateur Modder |
This mod has a few bugs in the fighting games.) |
https://raw.githubusercontent.com/soap925/BurntToast-Mod-Stockhouse/master/ | BurntToast12's Mod Stockhouse |
|
https://raw.githubusercontent.com/Nutzer/Touhou-8.3/master/ | Nutzer |
|
https://raw.githubusercontent.com/Zrrg/UnKnwn/master/ | UnKnwn Thcrap Repository |
|
https://raw.githubusercontent.com/DTM9025/DTM/master/ | DTM's Patch Repository |
|
https://mirrors.thpatch.net/wobuffet3/ | Wobuffet3's patches |
|
https://mirrors.thpatch.net/PookChang'e/ | Pook Chang'e's Patches |
|
https://mirrors.thpatch.net/MasterGameFTW3561/ | MGFTWH3561's Mods |
|
https://raw.githubusercontent.com/Tearff/Tear/master/ | Tear's Touhou Mods |
|
https://raw.githubusercontent.com/GhostPhanom/GhostPhanom-Thcrap/master/ | GhostPhanom's strange thoughts |
|
https://mirrors.thpatch.net/Bravi/ | Bravi's creations |
A stage 6 midboss got added in th13, 15, and 16 as well. Okina in Stage 6, Extra (turned into Phantasm) that got a revamp, Wrong/Nightmare Saturdays that got a stage background revamp too Yukari in Day 10 Futo and Tojiko in Stage 5 Seiran in Stage 1 Mayumi in stages 5 and 6, got new additions to Keiki's fight too Megumu in stage 5.)
Also please refrain from selecting this patch along with the OCOkina patch...)
Okina's fight has the order of the seasons shuffled, and Mai and Satono drop too many ressources. Keiki and Saki also seem to be affected by a curse, making them wrathful.)
|
https://raw.githubusercontent.com/Priw8/thmod/master/ | Priw8's mods |
|
https://mirrors.thpatch.net/Splashman/ | Splashman's BGM patches. |
|
https://mirrors.thpatch.net/MoriyaFaith/ | @MoriyaFaith#9287 |
|
https://mirrors.thpatch.net/PKWeegee/ | PKWeegee |
|
https://mirrors.thpatch.net/dass7/ | DassRepo |
|
https://raw.githubusercontent.com/SMB7/SMB3Memes/master/ | SMB3's Meme Patches |
|
https://raw.githubusercontent.com/WindowDump/thcrap_mods/master/ | Window Dump's Mod Dump |
|
https://mirrors.thpatch.net/Vasteel/ | Misc Touhou mods |
|
https://raw.githubusercontent.com/Daikarasu/DaiMod/master/ | Daikarasu's repository of Touhou patches |
Currently supports: th14, th15, th16, th16.5, th17, th18, th18.5)
Makes every attack purely RNG. (v2.0))
Adds a TF2-styled kill cam to the game, which zooms in to the enemy that killed you (if it is still alive). Should be fully compatible with vanilla replays!)
|
https://mirrors.thpatch.net/Clover/ | Clover Music Mods |
|
https://raw.githubusercontent.com/32th-System/crap/master/ | 32th's Patch Repo |
|
https://mirrors.thpatch.net/Gensokyo.EXE/ | Gensokyo Executors |
|
https://mirrors.thpatch.net/pgj1997/ | Pgj1997's Patches |
|
https://raw.githubusercontent.com/rosenrose/thmod/master/ | rosenrose's Patch Repo |
(TH10)MarisaA→ReimuC style, MarisaC→ReimuA style (TH11)ReimuA→MarisaA style, ReimuB→MarisaB style, MarisaB→ReimuB style)
by Dide, https://snipestalker.blog.me/221508374213)
|
https://mirrors.thpatch.net/AsyrafFile/ | Tampalan THCRAP AsyrafFile |
|
https://raw.githubusercontent.com/ExpHP/thcrap-patches/master/patches/ | Patches by ExpHP |
UM not well-tested. Defaults to 16x everything. To configure, see http://exphp.github.io/thpages/#/mods/bullet-cap)
|
https://raw.githubusercontent.com/Arandui/trash_patch/master/ | Trash Ideas |
|
https://mirrors.thpatch.net/tpZHCNex/ | thpatch zh-hans ex-patches |
|
https://raw.githubusercontent.com/bttf0504/thmod/master/ | BTTF's Patch Repo |
|
https://raw.githubusercontent.com/chrisGrando/thcrap-patches/master/ | Dreamland's Crazy Tea Party |
|
https://mirrors.thpatch.net/sqrt/ | Welcome to sqrt-net! |
|
https://mirrors.thpatch.net/someguy/ | Bullet Artistry |
|
https://mirrors.thpatch.net/LmocinemodPatchRepo/ | Lmocinemod's (Low-Effort) Patch Repository |
|
https://raw.githubusercontent.com/zero318/thcrap_patches/master/patches/ | zero318's Patch Pile |
|
https://raw.githubusercontent.com/PartyParrotTH/PartyParrot-s-Patches-Repository/master/ | Party Parrot's Patches Repository |
|
https://mirrors.thpatch.net/WilliamDavi/ | This Repository maybe have some bgm and bullets edits |
|
https://mirrors.thpatch.net/shirokura/ | shirokura's Repository |
|
https://raw.githubusercontent.com/yeashie/yeashiePatches/master/ | yeashie |
|
https://mirrors.thpatch.net/redirectto/ | redirectto's patches |
|
https://mirrors.thpatch.net/Revenant/ | Revenant's Touhou hacks |
|
https://raw.githubusercontent.com/WishMakers0/th_crap/master/ | Wish's Scripts |
|
https://mirrors.thpatch.net/Guy/ | Guy's patches |
|
https://raw.githubusercontent.com/KabanFriends/THGTE/master/ | Project 6 (a.k.a. Touhou Project: Google Translate Edition) |
|
https://mirrors.thpatch.net/Shoxlu/ | Some projects. |
|
https://mirrors.thpatch.net/Kogasas_Mods/ | Kogasa's Mods |
|
https://mirrors.thpatch.net/TESM/ | TESM's Patches |
|
https://mirrors.thpatch.net/Clb184/ | Clb184 stuff |
|
https://mirrors.thpatch.net/Wasted/ | Wasted mods |
|
https://raw.githubusercontent.com/BrosterMedia/touhoupatches/main/ | Broster Thcrap Repository |
|
https://mirrors.thpatch.net/egor/ | egor's patches |
|
https://mirrors.thpatch.net/mintymods/ | Mints' Semi-Functional Patch Repository |
|
https://mirrors.thpatch.net/yova/ | Yova's Repository of Hirokawa Ghost |
|
https://mirrors.thpatch.net/SuperChrim/ | SuperChrim's Patch Repository |
Supports th6, th7, th8, th9, th10, th11, th12, th13, th14, th143, th15, th16)
|
https://mirrors.thpatch.net/TRDario/ | TRDario's patches |
|
https://mirrors.thpatch.net/yuureiki/ | yuureiki's Patches |
|
https://mirrors.thpatch.net/tpZHCHTex/ | Thpatch Chinese Traditional ex-Patches. |
|
https://mirrors.thpatch.net/farawayvision/ | FarawayVision's patches |
|
https://raw.githubusercontent.com/megapig9001/megapig9001-mods/main/ | Megapig9001 Mods |
|
https://mirrors.thpatch.net/SSM/ | SSM's Patches |
|
https://mirrors.thpatch.net/catysumi/catysumi/ | Profaned Red Moon Team |
|
https://mirrors.thpatch.net/DedeHead/ | ZeZunStyler's Mods |
|
https://mirrors.thpatch.net/neonickz/ | Neo Nickz's Shottype Mods (+ Others) |
Note that this patch only targets the Lunatic version of non 1.)
To be as accurate as possible to SoEW, Reimu's focus and unfocus speeds are the same, and you're slow as shit! You can still see your hitbox when focused though. A special thank you to TESM for allowing me to use his PC98 Reimu portrait sprites from MiDI.)
Good luck LNNing with this. She replaces Reisen)
No Releases Included.)
|
https://mirrors.thpatch.net/Wast/ | Wast's Repository |
|
https://mirrors.thpatch.net/Daichungus/ | Repo of Daichungus |
|
https://mirrors.thpatch.net/RogyWantsCoffee/ | Patches made a girl addicted to Coffee |
|
https://mirrors.thpatch.net/Wensomt/ | Wensomt's Repository |
|
https://raw.githubusercontent.com/Uielicious/thcrap-projects/main/ | Uielicious Patch Shack |
|
https://mirrors.thpatch.net/takuneru/ | Takuneru's patch repository |
|
Building your own patch server
Creating your own third-party patches with thcrap, updating them, and sharing them is relatively straightforward with the instructions below. By following these steps, you will be able to have your patch selected through thcrap and have those patches be automatically updated when you publish a change. All these tutorials are written for Windows only, but if you use a different operating system, you should have no trouble adapting them. ☺
This tutorial assumes you will be having us mirror your repo, which will allow us to perform some behind the scenes management to make things easier for you. If you do not want to do this, see the section on Not Mirroring after these steps.
Overview
To explain the terminology:
- First, we have patches. These are basically just unordered collections of files that provide replacements for certain original game data. One patch can provide data for an unlimited number of games.
- Patches are grouped in repositories. These are in turn collections of all the different patches offered and controlled by one person or community.
You start by creating a repository, then one or more patches, which you then regularly publish on a server.
Local setup
First, you need to think of a globally unique, short ID for your repository. This could simply be your name, or the name of your community. For the sake of this tutorial, we'll call it YOURNAME
.
You also need to do the following:
- Create a new directory named
YOURNAME
inside your thcraprepos
directory.
This will be your local repository path, where all your patch development will take place. - Create a file name
repo.js
inYOURNAME
with the following contents:
{
"contact": "EMAIL@example.com or can put discord ID or whatever",
"id": "YOURNAME",
"patches": {
"PATCHNAME": "PATCH DESCRIPTION",
"PATCHNAME2": "PATCH DESCRIPTION FOR 2ND PATCH IF YOU HAVE IT"
},
"servers": [
"https://mirrors.thpatch.net/YOURNAME/"
],
"title": "YOURNAME's Repository"
}
- Download this .gitattributes file and put it in
YOURNAME
.
Patch setup
- Inside
YOURNAME
, create a new directory for each of your patches, named after their respective short ID. We'll usePATCHNAME
as an example. - For each patch, create a file named
patch.js
inYOURNAME\PATCHNAME
with the following contents:
{
"id": "PATCHNAME",
"servers": [
"https://mirrors.thpatch.net/YOURNAME/PATCHNAME/"
],
"title": "PATCH DESCRIPTION",
"dependencies": [
"DEPENDENCY/EXAMPLE",
"DEPENDENCY/ETC"
]
}
All files with a JS extension are JSON format files. You can validate their syntax using sites like JSONLint.
Note that anything you put in any of your patch directories will be published by the script, and downloaded by every user of your patches! |
Dependencies
These are set using the dependencies
array in patch.js
, and ensure that the configuration tool automatically pulls in all required functionality for your patch. You can add dependencies by editing the patch.js
file you made to add dependencies in said dependencies
array.
Dependency statements have the form repo_id/patch_id
. repo_id
is optional - leaving it out will resolve the given patch first on your repository, then globally across all repositories a user has discovered. Be careful, this might have unintended consequences when used with a patch not in your repository.
Some of the patches from the network you may want to bundle are:
nmlgc/base_tsa
: The basic technical support for Windows Touhou games. If your patch targets any of these games, make absolutely sure to include this one in some way! Otherwise, the configuration tool may not pull it in and the resulting configurations may not work!nmlgc/base_tasofro
: The basic technical support for the Fighting Touhou games by Twilight Frontier. If your patch targets any of these games, make absolutely sure to include this one in some way! Otherwise, the configuration tool may not pull it in and the resulting configurations may not work!nmlgc/script_latin
: Contains a font with sufficient Unicode coverage for Latin, Greek and Cyrillic scripts, some settings to make it look as nice as possible for every game, as well as Hepburn romanizations for common terms and images.nmlgc/western_name_order
: Exactly what it says – Western name order for the enemy names during boss battles.thpatch/lang_en
: Not only does this give you our up-to-date English translation, it also ensures that any other dependencies for a translation patch (such as all three patches mentioned above) will be present when selecting your patch in the configuration tool.
Examples
A basic configuration for a translation patch using a non-English Latin script language:
{
"dependencies": [
"nmlgc/base_tsa",
"nmlgc/script_latin",
"nmlgc/western_name_order"
]
}
Pulls in all of the above (and maybe even more in the future) plus the English translations:
{
"dependencies": [
"thpatch/lang_en"
]
}
Fonts
If your patch includes custom fonts, register them using the fonts
object. This is a simple list of every font file name to load before starting the patched game:
{
"fonts": {
"Font1.ttf": true,
"Font2.otf": true
}
}
(thcrap does not look at the actual value of the key, true in this example.)
OK, and how do I do X?
Well, thcrap can do a lot of things. ☺ Until we have described them all, your best bet is to look at how our patches do the things you intend to do. If you still have questions, just visit our Discord chat, ask us, and we'll be glad to help you.
You can poke around in lang_en patch to get an idea of how mods work, or in any of the third-party patches hosted at https://mirrors.thpatch.net/.
Here are some resources that might help:
- https://gist.github.com/WindowDump/e007516524b7488eccf74a020b3c7977
- https://priw8.github.io/#b=ecl-tutorial/&p=1
Server setup
The rest of this tutorial differs depending on the webspace or server provider you use. We heavily recommend GitHub.
Using GitHub
This is the recommended option. It will keep your repository under a revision control system and thus store the entire history of your patches, which can then be viewed nicely on the GitHub website.
If you're already familiar with Git you are all set, though if you are not mirroring your repo with us, make sure to run repo_update.py
every time before you commit.
If you aren't familiar with Git, how to set it up on Windows:
- Register a new free account on GitHub if you don't have one yet.
On your dashboard, create a new repository with the default settings. Its name does not necessarily have to correspond with the name you chose for
YOURNAME
in your local setup.- Download and install a Git client. We recommend Sublime Merge and will be using it in this tutorial.
Open Sublime Merge, select
New repository
, and selectYOURNAME
folder. Once you do this, it's going to look somewhat like this, but with more files.- Now you need to create a commit. Double click
Stage All
, enter a commit message at the top (e.g. "Initial Commit"), and press the commit button. A window will pop up asking you to enter user information, since it's your first time committing. Name can be anything, but email should be the one associated with your GitHub account. (more info here: https://help.github.com/en/articles/about-commit-email-addresses) In the end you should be able to see the commit you've created on the left. To publish the commit, click on the Up Arrow in the top right corner. It's going to ask you to add a remote. Type
origin
and press enter, and then type the HTTPS URL GitHub gave you when you created the repository (see below) and press enter. Now click that Up Arrow again, and it should start uploading it to GitHub. It's going to ask you to login, and after you do you should be able to see the files up on the GitHub page.- The last step is to add the patch to the list in thcrap_configure. This can only be done by our staff. You can ask anyone with the Webmaster role to do it on Discord. The only thing required is the GitHub URL.
That's it for the basic setup. After you have made some edits or update to your patches, this is how you publish them:
- In Sublime Merge, open your repository (should be the default when opened again). You should see your changes displayed.
- Double click Stage All, enter a commit message at the top (e.g. "Updated patch"), and press the commit button.
- To publish the commit, click on the up arrow in the top right corner as before. These changes should now be published!
Making your repository known
In order for your patch to be seen and able to be used by others globally, there are generally three methods:
- After your repository has been uploaded, anyone else can then discover it by calling
thcrap
with your URL as a command-line parameter. - If you have a own website, blog, etc., you can upload a custom version of the thcrap archive containing the
repo.js
file inside your local repository directory. This is generally not recommended, though - The best method, however, is to contact us on Discord and tell us your repository URL to get listed in the Touhou Patch Center network as one of our neighbors.
Not Mirroring
If you don't want to have us mirror your repository, you will need to make some adjustments to the above workflow.
- In
repo.js
, change the value inservers
tohttps://raw.githubusercontent.com/GITHUB_USER_NAME/YOURNAME/master/
- For each patch, edit
patch.js
and change the value inservers
tohttps://raw.githubusercontent.com/GITHUB_USER_NAME/YOURNAME/master/PATCHNAME/
- Download and install Python 3, if you don't have it already. Then install the
pathspec
python package from pip. - If
YOURNAME
is in your thcrap folder, simply runpython ..\..\bin\scripts\repo_update.py
from the command line. If it is not, then you can just download repo_update.py and utils.py intoYOURNAME
and run it from there. - Now, whenever you make a change, before commit be sure to run
repo_update.py
. Not doing so will cause your update to not be pushed to users of your patch.