Code Monkey home page Code Monkey logo

textractor's Introduction

Textractor

How it looks

EnglishEspañol简体中文Русский한국어ภาษาไทยFrançaisItaliano日本語Bahasa IndonesiaPortuguêsDeutsch

Textractor (a.k.a. NextHooker) is an open-source x86/x64 video game text hooker for Windows 7+ (and Wine) based off of ITHVNR.
Watch the tutorial video for a quick rundown on using it.

Download

Official stable releases of Textractor can be found here.
The last release of ITHVNR can be found here.
Experimental builds of Textractor (with debug info) from the latest source can be found here in the 'Artifacts' section of each job.

Features

  • Highly extensible and customizable
  • Auto hook many game engines (including some not supported by VNR!)
  • Hook text using /H "hook" codes (most AGTH codes supported)
  • Automatically search for possible hook codes

Support

Let me know of any bugs, games that Textractor has trouble hooking, feature requests, or other suggestions by posting an issue.
If you have trouble hooking a game, please show me a way to freely download it or gift it to me on Steam.

Extensions

See my Example Extension project to see how to build an extension.
See the extensions folder for examples of what extensions can do.

Contributing

All contributions are appreciated! Please email me at [email protected] if you have any questions about the codebase.
You should use the standard process of making a pull request (fork, branch, commit changes, make PR from your branch to my master).
Contributing a translation is easy: text.cpp contains all of the text strings that you need to translate. Translations of this README or the tutorial video transcript are also welcome.

Compiling

Before compiling Textractor, you need Qt version 5.13 and Visual Studio with CMake support. Clone Textractor's source and initialize submodules with git clone https://github.com/Artikash/Textractor.git and git submodule update --init. You should then be able to just open the source folder in Visual Studio and build.

Project Architecture

The host injects texthook into the target process and connects to it via 2 pipe files. texthook waits for the pipe to be connected, then injects a few instructions into any text outputting functions (e.g. TextOut, GetGlyphOutline) that cause their input to be sent through the pipe.
Additional information about hooks is exchanged via shared memory.
The text that the host receives through the pipe is then processed a little before being dispatched back to the GUI.
Finally, the GUI dispatches the text to extensions before displaying it.

textractor's People

Contributors

artikash avatar azmadoppler avatar blu3train avatar chinanoahli avatar doumanash avatar eguni avatar glaringsoul avatar gratusfr avatar hawxone avatar ijemin avatar jazzinghen avatar lgztx96 avatar luojunyuan avatar mireado avatar mishaiac avatar niakr1s avatar roarene317 avatar scese250 avatar starfang208 avatar tera8m4 avatar tinyadapter avatar tokcdk avatar tsumihokiro avatar zeheyler avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

textractor's Issues

Two problems when hooking SiglusEngine

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_...

siglusengine_2018-10-02_16-28-18

siglusengine_2018-10-02_16-40-30

(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.

textractor_2018-10-02_16-39-28

(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.

Doesn't hook last two characters of recent Digital G Power's games

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.

Whitespace removal

I hope you add an option to remove all whitespace before copying the captured text to clipboard.

auto clipboard and atlas

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.

Bad reference

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

RPG Maker MV Game Issue

Hello,

I've noticed the following issue when attempting to play an RPG Maker MV Game. Seems each character is getting repeated multiple times.

image

[feature] Process list selector

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

Can't get readeable text on Shukusei no Girlfriend -the destiny star of girlfriend-

Novel in question: https://vndb.org/v22880

None of the options give me readeable text
imagen

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

Locale Emulator - No Process

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.

I just want to say that I love your work

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

Additional Translation Sites?

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.

A problem on hooking 9 -nine- sorairo in 2.1.4-beta

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
nexthooker_2018-08-30_23-50-05

Feature request and issue

  1. 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

  2. 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

here some pictures:
kokake
koikake2

Can't hook anything in Little Busters! English Edition

Can't hook anything from the steam release of Little Busters.
image
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

Building without Visual Studio

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.

Ignoring character names

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.

Buggy Hooking for SubaHibiHD (Engine: BGI)

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!

Support link threads and clears text of thread

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.

Support for switching Text Encoding

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.

Buffer issues, Lines get cut in the middle

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]

Remove extension crash

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.

WOLFRPG/WOLFRPG2 incomplete sentences

So with any WOLF RPG game I try, the sentences only ends up being shown partially.

For instance:
っと、悪い悪い。 それじゃあリアナ、 また後で。

Becomes:
悪後

Custom Regex filters

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:

  • Can be modified from the GUI, instantly active after pressing OK or something
  • For each filter can select whether the matching text will be discarded or if matching text will be kept
  • Filters can be re-ordered so the filtering happens in known order
  • Will be saved somewhere and associated with the exe so they don't have to be rewritten every time

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.

Bing support

An extension for Bing would be really appreciated. It is especially useful in cases where Google Translate falls short.

WolfRPG option aren't shown in order

from [RJ236963]:
screenshot_2018_1030_12_25_30

Is the options shown however in Textractor it shows up as:

共に良し肌触りがいまいちあそこに触れる感触が…手触り肌触り

When it should be:
手触り肌触り共に良し肌触りがいまいちあそこに触れる感触が…

I'm using Textractor v3.3.2 with all extensions enabled

More than 1 line not translating

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.
desktop screenshot 2018 12 03 - 05 21 08 09
desktop screenshot 2018 12 03 - 05 27 10 23
Error while translating and before lines there is a heart emote.

Error Message

I have tried to hook a few different games, but always get this error message:
image
I have installed the newest C++ redistributable packages and I made sure I had the mentioned dll file.

Problem with read code function

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.

capture

capture2

I guess that both captures would give you an idea.

UCRTBASE.dll

[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

Do not clear output window, if target process crashes

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.

世界でいちばんNGな恋 ハピネスモーション missing a lot of symbols every line

This screenshot should probably tell it all. Tried setting message speed to maximum, no effect.
image
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

Repetition Issue

textractor translates a sentence after some time if there is a sentence which is same as before doesn't gets translated.

Extension to use C ABI interface?

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

Text cascades when reaching a choice or opening the backlog in malie engine games.

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.

Translation Issues

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.
1
2
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.

Pause translation feature.

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.

The program keeps extracting the same line of text over and over

imagen

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)

NextHooker how enable UTF-8 codification ?

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
mypicture1

Copy Translation To Clipboard

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?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.