- Textextractor bruteforce
- The ‘universal’ unity hook(for astronault’s games)
Unity games/novels have a bad reputation of being unable to hook the game’s text and needing hook codes that are sometimes not available. Older versions of Unity still used to work fine with VNR and other text hookers but nowadays they simply won’t work anymore.
Textextractor has a ‘brute force’ mode when it detects a unity game that can kinda work. But its not very intuitive, gets a lot of garbage text together and can virtually crash you PC for a few seconds if you don’t properly configure it. I’ll cover that here but the main point of this post will the the ‘universal’ unity hook at the end(for astronault’s games).
Textextractor configure game.
Hook code: /HW-4@xxxx .
Get xxx with cheat engine->activate mono features->
(Might only work for astronaults games)
When you hook textextractor to a unity game it’ll use its “Mono Dynamic” hook bruteforce and hook to all of its known text thread.
While this way works you might get literally thousands of lines spit out every second and slow down and even freeze your PC for a few seconds until its done.
The reason that happens is because a few of those text threads might be used to read binary data or pre-load and split the entire game script lines in the computer memory. While this is just a split second for the computer to process it takes 1000x more time for it to be print out as text and that’s why the PC freezes.
To fix this, textextractor has a “Configure game” button that will let you choose what to ignore and only keep the ones that displays proper text. Each game is different so you’ll need to find out yourself which are the right ones. But even the most ideal ones might have some garbage text so while this works its not ideal.
Textextractor: Configure games
After you hook the game, simply press the “Configure game” and textextractor will create an “TextractorConfig.txt” file on the same folder as the game and also open it for you.
There will be a link inside with how to use use. But the link leads to a non-existent page that leads to the issue page that kinda explains how it works on a comment. So I’ll briefly explain it here.
Start the game and when you get to the first textbox, only then, hook the game. Wait a while for the textextractor and when you click something in the game textextractor will begin its dynamic hook bruteforce.
Now, go to the next text and you’ll note there are dozens of text-threads on textextractor. You’ll need to go through each one and find one that best represents the text you are see. But even the best ones still have some garbage text.
Warning: There is a very high change of your PC freezing up for a few seconds at the start of a scene on games that pre-load its script and images. It’ll go back to normal after it stops spitting out the text but it’s better to avoid that.
After you find the right thread you can get its name and put it inside the “TextractorConfig.txt” config file.
In case you want to add more then one text thread you can separate them with TABS. A little tip, all the available hooks will be shown on textextractor console(the first text thread) when you first hook the game so you can just copy them from there to avoid typing errors.
e.g: “Textractor: inserting hook: string:IndexOf (string,System.StringComparison)”
So the configure file would be “string:IndexOf (string,System.StringComparison) “
After you save the configure file you can close textextractor. The next time you hook the game it’ll only load the hook you saved so this process only needs to be done one time.
‘Universal’ Astronault brand Unity hook
Edit: Let me correct this. This will only work for astronault games.
I made this post on a whim without really checking other brand games. But I’ll leave this here.
This is a way a just found out and so far it worked perfectly for any of the games made by astronaults(https://vndb.org/p2692) which are now all made with Unity. It can properly hook all text and even the items/skills descriptions so playing them should be easier.
The big downside is that you need to do this everytime you start the game because the hookcode is dynamic and changes everytime you start the game.
First you’ll need to have cheat engine. Any version should work but for reference I’ve tried with 6.8.3 and 7.0.
Start the game and cheatengine. On cheat engine click File->Open Process (or the button) and then select the game process and open it.
After connecting with the game click on the menu Mono and Activate Mono Features then click on the button “Memory view” to open a new window.
On this new window press CTRL+G and search for “System:Char:IsHighSurrogate”
After you press OK it’ll lead you to that address. Now press CTRL+G again and copy the number already in the box.
The resulting hook code will be /HW-4@xxxxxxxxxxxxx with “xxxx” being the number you get in that box. In this case mine was “132C9238”.
So my hookcode was /HW-4@132C9238.
You can now use this hook on textextractor. Just make sure to put some random text on the configure file so textextractor will not bruteforce it anymore.
And it should work perfectly without any garbage for any text displayed.
This needs to be done every time the game is started.
It only takes a few seconds after you memorize it but unfortunately you need to do it every time.
Note: This hookcode will apparently only work on textextractor on older versions of ITH(2.3<). I don’t know why or if its true but that’s what was written on the original text.
Original japanese comment text for reference:
※には、以下の手順で得られるアドレスを入力します。 なお、このHコードはTextractorと旧バージョンのITH（ITH 2.3など）のみがを対応しており、AGTH、ITH 3.0以降、ITHVNR及びVNRでは機能しません。また、ゲームが32bit版でなければ、対応できないため、例えば64bit版のアップデートパッチをあてると、アドレスを見つけられません。
①ゲームを起動 ②Cheat Engineで【File】タブ→【Open Process】 ③ゲームを選択し、【Open】を押下。 ④【Mono】タブから【Activate mono features】を選択。 ⑤【Memory viwe】ボタンを押し、「ctrl + G」を押下 ⑥入力欄に「System:Char:IsHighSurrogate」と入力し、【OK】 ⑦再度、「ctrl + G」を押下し、入力欄のアドレスを上記のH-codeの「」部分に入力する。
Do you have a list of VN Unity games with gameplay besides astronauts and ninetail?
No. I don’t think there are a lot of RPGs made in Unity. I also only know these 2 brand.
Unity in novels in itself is kinda rare. There are a few brands of normal visual novels that only use Unity but that’s because they want to get multiOS or mobile releases.
Can you make a github or something for bunny black 3 translation, let’s get this done as a community project.
How do I put the thread inside the TextractorConfig.txt file? I pasted it on the 3rd line and still kept the text on the first line but it dosen’t seem to work.
TextextractorConfig.txt will only accpet the bruteforced unity functions that displays when you hook the game.
You just put them inside separated by TABS (not endline)
Here is an example (this one works with most unity novels).
Inside TextextractorConfig.txt :
string:Split (char) System:Char:IsHighSurrogate
I have been trying to get Maoujou Re:build! to work using this method but all I get is gibberish for my hookcode. Not sure what im doing wrong