artikash / textractor Goto Github PK
View Code? Open in Web Editor NEWExtracts text from video games and visual novels. Highly extensible.
License: GNU General Public License v3.0
Extracts text from video games and visual novels. Highly extensible.
License: GNU General Public License v3.0
sorry bad english
see screenshot attached
trying to playAbnormal Lovers https://vndb.org/v21530
I guess this is a error of UTF-8, visual novel reader hook the game perfect fine, but I really dislike to use visual novel reader because is so much bugged, NextHooker is much more stable
someone know how fix it?
I am using a hcode /HSN4@1511F0:abunoma.exe
Some applications I am using Textractor with are crashing after displaying a bit of output. Each time this happens, all hooked text is lost. Textractor should keep displaying the text even after application process quits.
Sorry bad English as well sorry to post it here, but, I do not find any active forum that you are in.
I think your work is awesome, several games that not work with ITHVNR also Visual Novel Reader works very nice with Textractor, I yet not find any game that not works with Textractor
Thank you very much from the bottom of my heart, I am just a lonely 41 years old Brazilian man that loves to play Japanese visual novels but I do not understand Japanese and thanks to your work I can play all games that I want, you bring a lot of happiness to my life with Textractor.
I wish you great health, happiness and prosperity
Thank you very much
Hi there,
Thanks so much for taking up the mantle of writing a new text hooker. This project is invaluable.
You might be aware that a full voice, HD release of Subarashiki Hibi (https://vndb.org/v3144) came out a few days go (This release: https://vndb.org/r56597). The engine is BGI, which I think is supposed to be pretty common, but it seems like its been updated, because its not hooking properly.
I'm currently running Windows 10 64-bit at latest updates. I've installed SubaHibiHD's release day patch, as well.
Upon launching the game, the menu bar displays the following engine information:
Ethornell - BURIKO General Interpreter ( Version : 1.647 - Compatibility : 1.72 )
Here's how hooking the game looks, side by side with how NextHooker hooks it:
https://i.imgur.com/naTzP6W.jpg
https://i.imgur.com/PZcI9kF.jpg
https://i.imgur.com/VUFF8Hd.jpg
These are actually just the first few lines of the game. Also, it looks like ITH and ITHVNR handle it about the same as NextHooker.
Here's what the output from the console is:
NextHooker beta v1.0.3 (07/16/2018)
Copyright (C) 2010-2012 kaosu ([email protected])
Copyright (C) 2015 Stomp ([email protected])
Copyright (C) 2016-2017 mireado ([email protected])
Copyright (C) 2018 Artikash ([email protected])
Source code available at github.com/Artikash/NextHooker (GPLv3 License)
Type ":h" or ":help" for help.
vnreng: hijack process
vnrcli:WaitForPipe: pipe connected
enter
vnrcli:NewHook: try inserting hook:
GetTextExtentPoint32A
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetTextExtentExPointA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetTabbedTextExtentA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharacterPlacementA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetGlyphIndicesA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetGlyphOutlineA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
ExtTextOutA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
TextOutA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
TabbedTextOutA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharABCWidthsA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharABCWidthsFloatA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharWidth32A
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharWidthFloatA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetTextExtentPoint32W
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetTextExtentExPointW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetTabbedTextExtentW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharacterPlacementW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetGlyphIndicesW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetGlyphOutlineW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
ExtTextOutW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
TextOutW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
TabbedTextOutW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharABCWidthsW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharABCWidthsFloatW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharWidth32A
vnrcli:RemoveHook: enter
vnrcli:RemoveHook: leave
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GetCharWidthFloatA
vnrcli:RemoveHook: enter
vnrcli:RemoveHook: leave
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
DrawTextA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
DrawTextExA
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
DrawTextW
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
DrawTextExW
vnrcli:NewHook: hook inserted
leave
vnreng:BGI2: pattern found but the function offset is invalid
vnreng: INSERT BGI#2
vnrcli:NewHook: try inserting hook:
BGI
vnrcli:NewHook: hook inserted
enter
vnrcli:NewHook: try inserting hook:
GdipAddPathString
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GdipDrawString
vnrcli:NewHook: hook inserted
vnrcli:NewHook: try inserting hook:
GdipMeasureString
vnrcli:NewHook: hook inserted
leave
Thank you for all your hard work!
Hello Artikash!
You can add "big5(Traditional chinese) & GBK(Simplified Chinese)" encoding, many Chinese games use this encoding, rather than using "UTF-8 & 16" encoding. I want to hook chinese text.
And you can add support for NScripter engine? (if possible)
(https://en.wikipedia.org/wiki/List_of_visual_novel_engines#NScripter)
(Noesis(VN): https://vndb.org/v11029)
Thank you!
(PS: Sorry, my english is bad.)
First of all, love this. It's definitely an improvement over ITHVNR.
So, I was looking at multiple different versions of ITH and never found a generic solution for switching Text encodings, like VNR has. Can you please bring that functionality in here. User should be able to switch text encoding of grabbed text from UI at runtime. Mainly used encodings are Shift-JIS, UTF-8 and UTF-16.
I am very happy that someone is still working on text hooker and i hope this text hooker gets everything done unlike others which always missed something.
1st Issue:
bing translation is nice but for some games it's more cruel than google translate.
I can assure you his name isn't West Tong leisurely.
2nd Issue:
When we attach textractor to a game we have to get in text part to load hooks and then select hook which lefts the first line of text untranslated and even if i go to the title screen and start the game again text which was being shown in hook doesn't show up in hook again. I think right click to translate the lines which didn't got translated would be nice.
It's not big issue but it would be nice if it gets fixed.
thanks again for working on this project.
It would be nice if Textractor was buildable with, say, mingw+gcc instead of Visual Studio, so that you wouldn't need Windows to build it. I remember ITHVNR had a lot of msvc-specific code, so I'm not really expecting this to be done anytime soon, just something to keep in mind if you ever wanted to do some large-scale refactoring of the whole codebase.
textractor translates a sentence after some time if there is a sentence which is same as before doesn't gets translated.
After "updating" the nexthooker to the latest beta version 2.1.4, the software can't hook 9 -nine- sorairo properly anymore. The previous version could do it anyway, so for now I'm probably reverting back to the ver 2.1.3.
Here's the console log btw
NextHooker beta v2.1.4 by Artikash
Source code and more information available under GPLv3 at https://github.com/Artikash/NextHooker
vnrcli:WaitForPipe: pipe connected
enter
vnrcli:NewHook: try inserting hook: GetTextExtentPoint32A
vnrcli:NewHook: inserted hook: GetTextExtentPoint32A
vnrcli:NewHook: try inserting hook: GetTextExtentExPointA
vnrcli:NewHook: inserted hook: GetTextExtentExPointA
vnrcli:NewHook: try inserting hook: GetTabbedTextExtentA
vnrcli:NewHook: inserted hook: GetTabbedTextExtentA
vnrcli:NewHook: try inserting hook: GetCharacterPlacementA
vnrcli:NewHook: inserted hook: GetCharacterPlacementA
vnrcli:NewHook: try inserting hook: GetGlyphIndicesA
vnrcli:NewHook: inserted hook: GetGlyphIndicesA
vnrcli:NewHook: try inserting hook: GetGlyphOutlineA
vnrcli:NewHook: inserted hook: GetGlyphOutlineA
vnrcli:NewHook: try inserting hook: ExtTextOutA
vnrcli:NewHook: inserted hook: ExtTextOutA
vnrcli:NewHook: try inserting hook: TextOutA
vnrcli:NewHook: inserted hook: TextOutA
vnrcli:NewHook: try inserting hook: TabbedTextOutA
vnrcli:NewHook: inserted hook: TabbedTextOutA
vnrcli:NewHook: try inserting hook: GetCharABCWidthsA
vnrcli:NewHook: inserted hook: GetCharABCWidthsA
vnrcli:NewHook: try inserting hook: GetCharABCWidthsFloatA
vnrcli:NewHook: inserted hook: GetCharABCWidthsFloatA
vnrcli:NewHook: try inserting hook: GetCharWidth32A
vnrcli:NewHook: inserted hook: GetCharWidth32A
vnrcli:NewHook: try inserting hook: GetCharWidthFloatA
vnrcli:NewHook: inserted hook: GetCharWidthFloatA
vnrcli:NewHook: try inserting hook: GetTextExtentPoint32W
vnrcli:NewHook: inserted hook: GetTextExtentPoint32W
vnrcli:NewHook: try inserting hook: GetTextExtentExPointW
vnrcli:NewHook: inserted hook: GetTextExtentExPointW
vnrcli:NewHook: try inserting hook: GetTabbedTextExtentW
vnrcli:NewHook: inserted hook: GetTabbedTextExtentW
vnrcli:NewHook: try inserting hook: GetCharacterPlacementW
vnrcli:NewHook: inserted hook: GetCharacterPlacementW
vnrcli:NewHook: try inserting hook: GetGlyphIndicesW
vnrcli:NewHook: inserted hook: GetGlyphIndicesW
vnrcli:NewHook: try inserting hook: GetGlyphOutlineW
vnrcli:NewHook: inserted hook: GetGlyphOutlineW
vnrcli:NewHook: try inserting hook: ExtTextOutW
vnrcli:NewHook: inserted hook: ExtTextOutW
vnrcli:NewHook: try inserting hook: TextOutW
vnrcli:NewHook: inserted hook: TextOutW
vnrcli:NewHook: try inserting hook: TabbedTextOutW
vnrcli:NewHook: inserted hook: TabbedTextOutW
vnrcli:NewHook: try inserting hook: GetCharABCWidthsW
vnrcli:NewHook: inserted hook: GetCharABCWidthsW
vnrcli:NewHook: try inserting hook: GetCharABCWidthsFloatW
vnrcli:NewHook: inserted hook: GetCharABCWidthsFloatW
vnrcli:NewHook: try inserting hook: GetCharWidth32A
vnrcli:RemoveHook: enter
vnrcli:RemoveHook: leave
vnrcli:NewHook: inserted hook: GetCharWidth32A
vnrcli:NewHook: try inserting hook: GetCharWidthFloatA
vnrcli:RemoveHook: enter
vnrcli:RemoveHook: leave
vnrcli:NewHook: inserted hook: GetCharWidthFloatA
vnrcli:NewHook: try inserting hook: DrawTextA
vnrcli:NewHook: inserted hook: DrawTextA
vnrcli:NewHook: try inserting hook: DrawTextExA
vnrcli:NewHook: inserted hook: DrawTextExA
vnrcli:NewHook: try inserting hook: DrawTextW
vnrcli:NewHook: inserted hook: DrawTextW
vnrcli:NewHook: try inserting hook: DrawTextExW
vnrcli:NewHook: inserted hook: DrawTextExW
leave
vnreng: INSERT KiriKiriZ
vnrcli:NewHook: try inserting hook: KiriKiriZ
vnrcli:NewHook: inserted hook: KiriKiriZ
vnreng:KiriKiriZ: disable GDI hooks
vnreng: KiriKiriZ2 inserted
enter
vnrcli:NewHook: try inserting hook: GdipAddPathString
vnrcli:NewHook: inserted hook: GdipAddPathString
vnrcli:NewHook: try inserting hook: GdipDrawString
vnrcli:NewHook: inserted hook: GdipDrawString
vnrcli:NewHook: try inserting hook: GdipMeasureString
vnrcli:NewHook: inserted hook: GdipMeasureString
leave
edit:
welp, I'm also going to report this as well. In previous version (since the 2.1.4-beta can't hook it), sometimes the text is repeated, like this
is it possible to add save support for last window size and possition?
whenever i launch next hooker its always appear on the center of desktop with default size
next hooker cant hook some amusecraft/sofpal game, in this case i tried koikake
list of text hooker i tried before:
ITH: cant hook
ITH 3.0: cant hook
ITH for win 10: cant hook
ITHVNR: cant hook
Chiitrans / AGTH : cant hook
Next hooker both 32 & 64 (latest): cant hook
the only working hooker for this game is chiitrans lite
So when I run a game through Locale Emulator program I for some reason don't see the process inside the Textractor while at the same time, it displays correctly inside the windows process window.
Is that because of something with your program or something you could possibly fix?
Without using Locale Emulator the game won't display Japanese characters correctly but when I use Locale Emulator I can't see game process inside Textractor.
So with any WOLF RPG game I try, the sentences only ends up being shown partially.
For instance:
っと、悪い悪い。 それじゃあリアナ、 また後で。
Becomes:
悪後
does this work with atlas V14? and does it's auto copy to clipboard work like ITHVNR? since i'm using atlas V14 and when i'm using textractor, i have to copy the text manually rather than automatically translated like ITHVNR, which quite troublesome.
This screenshot should probably tell it all. Tried setting message speed to maximum, no effect.
Also logs contained phrase "NextHooker threw while searching memory (NextHooker will likely still work fine, but please let Artikash know this happened!)", so here they are.
NextHooker beta v3.0.3 by Artikash
Source code and more information available under GPLv3 at https://github.com/Artikash/NextHooker
NextHooker: pipe connected
enter
NextHooker: try inserting hook: GetTextExtentPoint32A
NextHooker: inserted hook: GetTextExtentPoint32A
NextHooker: try inserting hook: GetTextExtentExPointA
NextHooker: inserted hook: GetTextExtentExPointA
NextHooker: try inserting hook: GetTabbedTextExtentA
NextHooker: inserted hook: GetTabbedTextExtentA
NextHooker: try inserting hook: GetCharacterPlacementA
NextHooker: inserted hook: GetCharacterPlacementA
NextHooker: try inserting hook: GetGlyphIndicesA
NextHooker: inserted hook: GetGlyphIndicesA
NextHooker: try inserting hook: GetGlyphOutlineA
NextHooker: inserted hook: GetGlyphOutlineA
NextHooker: try inserting hook: ExtTextOutA
NextHooker: inserted hook: ExtTextOutA
NextHooker: try inserting hook: TextOutA
NextHooker: inserted hook: TextOutA
NextHooker: try inserting hook: TabbedTextOutA
NextHooker: inserted hook: TabbedTextOutA
NextHooker: try inserting hook: GetCharABCWidthsA
NextHooker: inserted hook: GetCharABCWidthsA
NextHooker: try inserting hook: GetCharABCWidthsFloatA
NextHooker: inserted hook: GetCharABCWidthsFloatA
NextHooker: try inserting hook: GetCharWidth32A
NextHooker: inserted hook: GetCharWidth32A
NextHooker: try inserting hook: GetCharWidthFloatA
NextHooker: inserted hook: GetCharWidthFloatA
NextHooker: try inserting hook: GetTextExtentPoint32W
NextHooker: inserted hook: GetTextExtentPoint32W
NextHooker: try inserting hook: GetTextExtentExPointW
NextHooker: inserted hook: GetTextExtentExPointW
NextHooker: try inserting hook: GetTabbedTextExtentW
NextHooker: inserted hook: GetTabbedTextExtentW
NextHooker: try inserting hook: GetCharacterPlacementW
NextHooker: inserted hook: GetCharacterPlacementW
NextHooker: try inserting hook: GetGlyphIndicesW
NextHooker: inserted hook: GetGlyphIndicesW
NextHooker: try inserting hook: GetGlyphOutlineW
NextHooker: inserted hook: GetGlyphOutlineW
NextHooker: try inserting hook: ExtTextOutW
NextHooker: inserted hook: ExtTextOutW
NextHooker: try inserting hook: TextOutW
NextHooker: inserted hook: TextOutW
NextHooker: try inserting hook: TabbedTextOutW
NextHooker: inserted hook: TabbedTextOutW
NextHooker: try inserting hook: GetCharABCWidthsW
NextHooker: inserted hook: GetCharABCWidthsW
NextHooker: try inserting hook: GetCharABCWidthsFloatW
NextHooker: inserted hook: GetCharABCWidthsFloatW
NextHooker: try inserting hook: GetCharWidth32W
NextHooker: inserted hook: GetCharWidth32W
NextHooker: try inserting hook: GetCharWidthFloatW
NextHooker: inserted hook: GetCharWidthFloatW
NextHooker: try inserting hook: DrawTextA
NextHooker: inserted hook: DrawTextA
NextHooker: try inserting hook: DrawTextExA
NextHooker: inserted hook: DrawTextExA
NextHooker: try inserting hook: DrawTextW
NextHooker: inserted hook: DrawTextW
NextHooker: try inserting hook: DrawTextExW
NextHooker: inserted hook: DrawTextExW
leave
gdi+: not loaded
NextHooker threw while searching memory (NextHooker will likely still work fine, but please let Artikash know this happened!)
vnreng:WillPlus: function call not found
vnreng:WillPlusW: pattern not found
vnreng:WillPlusA: pattern not found
Just a suggestion, since current extension API would allow you to write only via C++ and C++ ABI is not very stable on msvc until recent versions
Passing std::wstring
by value back and forth is also not very practical as you're going to copy back and forth it most likely
Upon reaching a choice or opening the backlog in a malie game (tested both with an older game, Paradise Lost, and a newer game, Senshinkan Hachimyoujin) there's a continuous stream of hooked text appears until the backlog is either closed or a choice is made.
Textractor also gives a "SearchMemory ERROR" and a vnreng:Malie3: pattern not found and vnreng:Malie4: pattern not found error when hooking, that might have something to do with it.
[IMG]http://i66.tinypic.com/29maj2x.png[/IMG]
EVENT VIEWER LOG:
Faulting application name: NextHooker.exe, version: 0.0.0.0, time stamp: 0x5b8c6637
Faulting module name: ucrtbase.dll, version: 10.0.17134.254, time stamp: 0x92f5b34a
Exception code: 0xc0000005
Fault offset: 0x00024e3f
Faulting process id: 0xccc
Faulting application start time: 0x01d452a61f7cd732
Faulting application path: C:\Users\XY\Downloads\Next Hooker v3.0.3\NextHooker.exe
Faulting module path: C:\WINDOWS\System32\ucrtbase.dll
Report Id: d6dff228-eb4b-4781-9a3b-258c9b24d0a5
Faulting package full name:
Game:
Acerola - RJ232953 - Young Wife Rihanna - H Belly Daughter 's Daily Everyday Life v1.0
Don't know if it has anything to do with this game or it's a general issue.
I'm using Win10X64
I hope you add an option to remove all whitespace before copying the captured text to clipboard.
del
I'm pretty impulsive and launch and close vns all the time and that would be great since this is way better than ith now :)
https://github.com/Artikash/NextHooker/projects/1
https://reddit.com/r/visualnovels/comments/93crxr/im_developing_nexthooker_a_new_text_hooker_post/
My backlog is huge - please help me! Find a reliable way to hook a game engine that NextHooker currently cannot, then implement it in vnrhook/engine/
. If you need help with any of that (even if it's a lot of help), please ask!
Hello,
I happened to stumble across NextHooker while looking for a solution to an issue I was having with VNR, seems I no longer need to look for a solution. :)
Do you have any plans to add support for any additional sites such http://translation.infoseek.ne.jp/, https://www.bing.com/translator or https://www.excite.co.jp/world/english_japanese/? With VNR, I usually had a couple different translators enabled as one might fail on certain keywords or provide a better sentence structure than another.
noticed this across a few games. not sure why. things like そうか, なるほど etc. only one line
Firstly, there are some hooks that continuously get senseless texts and never stop.
For example, windowbtn_windowbtn_windowbtn_windowbtn_windowbtn_...
or menu_menu_menu_menu_menu_menu_...
(you can have a glance at how many texts are get from the size of scrollbar)
The second one is, when new dialogue comes, a new thread created and output the text.
And when the next dialogue comes, a second thread created, output the text, and the first thread just does not output anything.
(many threads created)
BTW, I use AlphaROMdiE to crack the game, so I have no idea whether these could only happen on the cracked version or not.
Pause translation feature would be great.
So, I can skip in game text without spamming the translator website.
Currently, the only way to do it is to unhook the game.
An extension for Bing would be really appreciated. It is especially useful in cases where Google Translate falls short.
game in question: natsuiro koi uta (tried with trial ver)
the game is hooked, but only some letters, not the full sentences
subj
Similarly to ITH it would be nice to have pop-up windows to select pid.
I can work on it once I'll have some free time on weekends
As the title says when i hook to the novel the program keep extracting the same line in weird ways without stoping.
I got 2 threads and both have the same problem.
ITHVNR was actually worse as the text came much more faster. (Same 2 threads)
I tried to get a read code but as always the new text is in a new memory everytime and i don't know what to do when that happens.
(I downloaded version 3.2.2 and the problem persist)
Version : 2.01 (971e35d)
If you press the Remove extension button, the program crashes.
This crash appears to occur when the extension is not set.
11gatsu no arcadia / 11月のアルカディア is the only game i am having this trouble with.
https://vndb.org/v16342
most of case this game have more than 1 lines which produces results like this.
Error while translating and before lines there is a heart emote.
Can't hook anything from the steam release of Little Busters.
Would be super happy if you made NextHooker work with it. Logs in case they are needed:
NextHooker beta v3.0.3 by Artikash
Source code and more information available under GPLv3 at https://github.com/Artikash/NextHooker
NextHooker: pipe connected
enter
NextHooker: try inserting hook: GetTextExtentPoint32A
NextHooker: inserted hook: GetTextExtentPoint32A
NextHooker: try inserting hook: GetTextExtentExPointA
NextHooker: inserted hook: GetTextExtentExPointA
NextHooker: try inserting hook: GetTabbedTextExtentA
NextHooker: inserted hook: GetTabbedTextExtentA
NextHooker: try inserting hook: GetCharacterPlacementA
NextHooker: inserted hook: GetCharacterPlacementA
NextHooker: try inserting hook: GetGlyphIndicesA
NextHooker: inserted hook: GetGlyphIndicesA
NextHooker: try inserting hook: GetGlyphOutlineA
NextHooker: inserted hook: GetGlyphOutlineA
NextHooker: try inserting hook: ExtTextOutA
NextHooker: inserted hook: ExtTextOutA
NextHooker: try inserting hook: TextOutA
NextHooker: inserted hook: TextOutA
NextHooker: try inserting hook: TabbedTextOutA
NextHooker: inserted hook: TabbedTextOutA
NextHooker: try inserting hook: GetCharABCWidthsA
NextHooker: inserted hook: GetCharABCWidthsA
NextHooker: try inserting hook: GetCharABCWidthsFloatA
NextHooker: inserted hook: GetCharABCWidthsFloatA
NextHooker: try inserting hook: GetCharWidth32A
NextHooker: inserted hook: GetCharWidth32A
NextHooker: try inserting hook: GetCharWidthFloatA
NextHooker: inserted hook: GetCharWidthFloatA
NextHooker: try inserting hook: GetTextExtentPoint32W
NextHooker: inserted hook: GetTextExtentPoint32W
NextHooker: try inserting hook: GetTextExtentExPointW
NextHooker: inserted hook: GetTextExtentExPointW
NextHooker: try inserting hook: GetTabbedTextExtentW
NextHooker: inserted hook: GetTabbedTextExtentW
NextHooker: try inserting hook: GetCharacterPlacementW
NextHooker: inserted hook: GetCharacterPlacementW
NextHooker: try inserting hook: GetGlyphIndicesW
NextHooker: inserted hook: GetGlyphIndicesW
NextHooker: try inserting hook: GetGlyphOutlineW
NextHooker: inserted hook: GetGlyphOutlineW
NextHooker: try inserting hook: ExtTextOutW
NextHooker: inserted hook: ExtTextOutW
NextHooker: try inserting hook: TextOutW
NextHooker: inserted hook: TextOutW
NextHooker: try inserting hook: TabbedTextOutW
NextHooker: inserted hook: TabbedTextOutW
NextHooker: try inserting hook: GetCharABCWidthsW
NextHooker: inserted hook: GetCharABCWidthsW
NextHooker: try inserting hook: GetCharABCWidthsFloatW
NextHooker: inserted hook: GetCharABCWidthsFloatW
NextHooker: try inserting hook: GetCharWidth32W
NextHooker: inserted hook: GetCharWidth32W
NextHooker: try inserting hook: GetCharWidthFloatW
NextHooker: inserted hook: GetCharWidthFloatW
NextHooker: try inserting hook: DrawTextA
NextHooker: inserted hook: DrawTextA
NextHooker: try inserting hook: DrawTextExA
NextHooker: inserted hook: DrawTextExA
NextHooker: try inserting hook: DrawTextW
NextHooker: inserted hook: DrawTextW
NextHooker: try inserting hook: DrawTextExW
NextHooker: inserted hook: DrawTextExW
leave
gdi+: not loaded
vnreng:ShinaRio: unknown version
vnreng:AliceHook: failed
enter
NextHooker: try inserting hook: lstrlenA
NextHooker: inserted hook: lstrlenA
NextHooker: try inserting hook: lstrlenW
NextHooker: inserted hook: lstrlenW
leave
enter
NextHooker: try inserting hook: CharNextA
NextHooker: inserted hook: CharNextA
NextHooker: try inserting hook: CharNextW
NextHooker: inserted hook: CharNextW
NextHooker: try inserting hook: CharPrevA
NextHooker: inserted hook: CharPrevA
NextHooker: try inserting hook: CharPrevW
NextHooker: inserted hook: CharPrevW
leave
I tried Textractor with Boku wa Kou Shite Otacir no Hime ni Narimashita and got cascading c0000005 5BD4638B ucrtbase.dll errors before it crashes. It's the same with Josou Shite Onnayu ni Sennyuu Shiyou to Shitara, Machigaete Haitta Otokoyu ga Hattenba Datta Ken while it's not a problem with this one considering ITH works with it. Now, I noticed that with every otokonoko (trap) release after Josou Shite Onnayu [...], even ITH stopped working, like no thread at all. It would be great if you could handle those.
OS: win7 x64.
ITH Link threads together
Introduction
When your see text appears in different threads, you don't need to switch between them every time.
ITH provide a flexible mechanism to handle this case. Namely Thread Linking.
You can find thread name in the Thread List.
Every thread's name begins with its unique 4-digit identifier.
You use this number to tell ITH which threads to link.
Notice that thread number is hexadecimal.
So character A-F stands for decimal number 10-15 (you won't see decimal number in Thread List).
You will need 2 numbers to perform a link operation.
Namely From and To. There are 2 ways to link threads.
Open the Thread Editor by clicking Thread.
Select thread with the number From from the list in the top.
Select thread with the number To from the shorter list.
Then click Set.Type L"From"-"To" in the Command Line and press enter.
No quotes, only number. Example LA-4.
Error code: C0000005
Error address: 74D3457D
Error in module: C:\WINDOWS\System32\ucrtbase.dll
Additional info: 0
Additional info: C
Happens at start.
Latest release,
Windows 10 x64
Hi, first thanks for this tool, very useful, since my English is a bit bad, I'm lazy to read a novel without translator. ^^
My problem is that sometimes, when a character is talking the program took only the first line, the next lines from the character isn't loaded.
My bad for not explain well, but this captures could help. Since I'm a newbie at this, I don't really know what the problem would be.
I guess that both captures would give you an idea.
I tried Amazing Grace trial... H-code is /HA8:4@348D0:amegure.exe
So, Bing is terrible for translation, as I can see, can you add more translators?
And I think, chiitrans is better, because it allow to see meaning of words, change the names etc...
Originally posted by @Veshurik in #25 (comment)
Hooks usually return dialog text alongside with character names which sometimes cause mistranslation. A mechanism such as a dictionary blacklist, using delimiters, semi-automatic name detection (keep a list of most encountered name-like substrings and make the user choose one) etc. would be useful. Probably more than one mechanism is needed, semi-automatic detection might be too expensive since it would require extra parsing and keeping everything in memory but it might be made togglable so the user only activates it when needed and disables it after adding string to the blacklist.
First, nice to see new progress on this front after 8 years of buggy ITH/agth variants. Keep it up.
Since these tools will never parse every game like people want, please make custom regex text filters a thing. Ideally they'd be something like:
Thinking further it could be nice if extensions had ability to draw a custom GUI for modifying settings like this. This would allow e.g. this custom regex feature to become a fully self-contained modular extension. In this case extensions would likely need more entry points for events like program start, on new game hooked, on plugin added, on program exit and whatnot.
Hello I would like to use ChiitransLite to display my translations in game however there is no way to just copy the translation?
Could you make an extension that would do this?
I tested out NextHooker for an RPGMakerRGSS3 game RJ225365 that had issues with text lines being mixed up in random continuous spam:
「部00:00.000屋は00:00.000もう00:00.000とっ00:00.000てる00:00.000から00:00.000、 00:00.000いつ00:00.000でも00:00.000好き00:00.000なと00:00.000きに00:00.000使っ00:00.000てく00:00.000れて00:00.000いい00:00.000よ00:00.00000:00.000
so I wrote a simple extension to filter the garbage out:
sentence = std::regex_replace(sentence, std::wregex(LR"([:\d\.])"), L"");
now however the lines would get randomly cut in the middle at random points like this:
「部屋はもうと
るから、 いつでも好きなときに使ってくれていいよ
with only the latter part getting copied to clipboard.
Eventually I fixed this too by making the extension append new sentences to the previous one if there's less than 300ms gap between the sentences. This is however hacky and NextHooker should handle the timed buffering itself. If there's already some kind of buffering present, it should probably do it's thing after extensions have filtered the sentences, as it's possible they'll remove all of the text.
Edit: Actually the timed buffering can't happen after extensions as copying to clipboard happens also by an extension. Possible solution would be separate "prefilter-extensions" that modify the input before it hits the buffer, so the entire process would be something like [Raw input] -> [Prefilter-extensions] -> [Save to buffer] -> [N ms with no additions to buffer or until buffer size hits limit] -> [Extensions]
Novel in question: https://vndb.org/v22880
None of the options give me readeable text
I tried using the cheat engine method to get a read code but every line appears in a new memory position and i don't know what to do when that happens.
Text From Console:
NextHooker beta v3.2.1 by Artikash
Source code and more information available under GPLv3 at https://github.com/Artikash/NextHooker
NextHooker: pipe connected
NextHooker: try inserting hook: GetTextExtentPoint32A
NextHooker: inserted hook: GetTextExtentPoint32A
NextHooker: try inserting hook: GetTextExtentExPointA
NextHooker: inserted hook: GetTextExtentExPointA
NextHooker: try inserting hook: GetTabbedTextExtentA
NextHooker: try inserting hook: GetCharacterPlacementA
NextHooker: inserted hook: GetCharacterPlacementA
NextHooker: try inserting hook: GetGlyphIndicesA
NextHooker: inserted hook: GetGlyphIndicesA
NextHooker: try inserting hook: GetGlyphOutlineA
NextHooker: inserted hook: GetGlyphOutlineA
NextHooker: try inserting hook: ExtTextOutA
NextHooker: inserted hook: ExtTextOutA
NextHooker: try inserting hook: TextOutA
NextHooker: inserted hook: TextOutA
NextHooker: try inserting hook: TabbedTextOutA
NextHooker: inserted hook: TabbedTextOutA
NextHooker: try inserting hook: GetCharABCWidthsA
NextHooker: inserted hook: GetCharABCWidthsA
NextHooker: try inserting hook: GetCharABCWidthsFloatA
NextHooker: inserted hook: GetCharABCWidthsFloatA
NextHooker: inserted hook: GetCharWidth32A
NextHooker: try inserting hook: GetCharWidthFloatA
NextHooker: inserted hook: GetCharWidthFloatA
NextHooker: try inserting hook: GetTextExtentPoint32W
NextHooker: inserted hook: GetTextExtentPoint32W
NextHooker: try inserting hook: GetTextExtentExPointW
NextHooker: inserted hook: GetTextExtentExPointW
NextHooker: try inserting hook: GetTabbedTextExtentW
NextHooker: try inserting hook: GetCharacterPlacementW
NextHooker: inserted hook: GetCharacterPlacementW
NextHooker: try inserting hook: GetGlyphIndicesW
NextHooker: inserted hook: GetGlyphIndicesW
NextHooker: try inserting hook: GetGlyphOutlineW
NextHooker: inserted hook: GetGlyphOutlineW
NextHooker: try inserting hook: ExtTextOutW
NextHooker: inserted hook: ExtTextOutW
NextHooker: try inserting hook: TextOutW
NextHooker: inserted hook: TextOutW
NextHooker: try inserting hook: TabbedTextOutW
NextHooker: inserted hook: TabbedTextOutW
NextHooker: try inserting hook: GetCharABCWidthsW
NextHooker: inserted hook: GetCharABCWidthsW
NextHooker: try inserting hook: GetCharABCWidthsFloatW
NextHooker: inserted hook: GetCharABCWidthsFloatW
NextHooker: inserted hook: GetCharWidth32W
NextHooker: try inserting hook: GetCharWidthFloatW
NextHooker: inserted hook: GetCharWidthFloatW
NextHooker: try inserting hook: DrawTextA
NextHooker: inserted hook: DrawTextA
NextHooker: try inserting hook: DrawTextExA
NextHooker: inserted hook: DrawTextExA
NextHooker: try inserting hook: DrawTextW
NextHooker: inserted hook: DrawTextW
NextHooker: try inserting hook: DrawTextExW
NextHooker: inserted hook: DrawTextExW
gdi+: not loaded
vnreng:HorkEye: pattern not found
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.