TrueWorld~真実のセカイ~ (Shinjitsu no Sekai)

Download the patch:

Statistics:

  • 43 399 symbols, 1 148 lines
  • 11 218 kanji (different: 1 316)
  • 28 263 kana (hiragana: 25 814, katakana: 2 449)

Other stuff:

License for everything: public domain (CC0).

Found a typo? Leave a comment here.

Want to translate this short game? Get in touch, I can help you insert the texts and publish it.

About The Game

True World is a short humorous Visual Novel worth 1-2 hours of read. Conceptually it's an omake to NHK ni Youkoso! – that purported game that Sato and Yamazaki have been working on throughout the series.

As unassuming as it looks on the first glance, this is easily the best short NVL I have ever played (can't call it ADV with just 1 choice) – IMO the authors overdid what a simple omake strictly required. CG, BGM, scenario are all top notch©. Even mini-comics and the song for the credits roll are memorable and make a great conclusion.

You can grab the soundtrack (and the game) from here (magnet) or use GARbro to extract it yourself. It's amazingly athmospheric – I spent hundreds of hours on this localization while listening to it and it never palled on me.

The stories are also fitting. When I finished the first route I thought, “Well, it's not bad, it's even cute for such a small game”. Next one was a bit more “realistic” (if I can say so), still obviously grotesque but with a nice twist in the end. I pondered: “Not bad too but it worked twice now – can they possibly offer something new in the third route?” Despite the boring start, eventually it became clear that yes, they can, and that “nice twists” are the signature of this game. Else, how could a route have more than one ending while offering no choices to the player?

I will leave the answer to you. Just one advice: if you care, first go right (the BSR route), then left (the ERS route) – although it won't be the end of the world if you do the opposite (the world will end with NIE).

One of the ending illustrations
Ironically, the only heroine of the game they show in the anime actually does not appear in this game. But you know what? A cat is just as good!

About This Localization

I leeched this game from some goodness forsaken Japanese file sharing network back in 2010 and reversed it along with dozens of others per my hacking frenzy of that time. Then work and other stuff came in and the thing ended up collecting dust for around twenty years until I suddenly remembered about unfinished business™ and… here you have it.

First vs. replay art

The original game lets you replay it in “draft mode” with sketches instead of art and minor typos in the text. In my opinion, it doesn't add much value so I changed replay texts to be the raw (unchecked) translation. They are very close to the original and may give an interested reader insights into the plot as the authors intended it to be – however, long texts overflow and you are better off reading them on this HTML page instead.

I fanatically tried to convey all the meanings (obvious, hidden and cross-referenced) and even tasked a Japanese native with a parallel translation so I could cross-check it with mine. However, such accuracy was not always possible and to make up for that I am publishing all source files, including original Japanese texts, my translated texts after the first pass (no QC), the native's translation and my final texts.

Engine limitations. The game is using a fixed-width font and many hardcoded values such as the limit on how much text may appear before a pause (around 500 symbols). I patched some of them but not others because they're spread all over the code. Japanese packs more meaning per character than non-hieroglyphic languages and an equivalent translation would require proportionally more symbols – yet there are scenes where the entire screen is filled with text before a pause occurs leaving very little extra room for the translation. And occasionally I'd like to add in-text TL notes which can take 1-2 more lines on their own…

So, I did my best and even took liberty to "adapt" certain passages to make them more engaging. The result (non-replay texts) might deviate from the original – but hopefully for the best!

“Uncle Anon” Edition & The Blockchain-Based Lootbox

Bashyar in the heat

At some point during the translation, I realized that this game is just asking to be exploited. I mean, it's already a pun and what can be more fun than going deeper with the pun?

Therefore I went ahead and in addition to the “normal” translation created a “4chan version”, a.k.a. “Uncle Anon” Edition. I mixed references to several hundreds of Internet memes into the texts (not necessary exact) and made it so that whoever first determines a triplet of memes wins a pinch of  BTC bitcoins.

Without further ado, the formal rules (these are for nerds, read on for simple ones):

  1. There are 249 memes used within the texts of all 3 routes.
  2. All used memes are listed on KnowYourMeme.com.
  3. Each meme is identified by two numbers: its KnowYourMeme ID (search for article class='entry' id='entry_2083' in the page's source code) and a line in this game's script (from this page).
    » For example: Zerg Rush ID is 927, Doge ID is 13564, Trollface ID is 91.
  4. Memes are grouped into random triplets. Each triplet consists of 3 memes taken from any part of the game (possibly even from different routes). A meme+line pair can be used only in 1 triplet (but some memes may be used more than once in the game, on different lines).
    » For example, assume line 452 hints at Zerg Rush, line 754 at Doge, line 351 at Trollface.
  5. A SHA-512 digest (raw) is calculated for each triplet, over this ASCII string: KEY1,KEY2,KEY3,
    M@RbLeC@KeG@Me
    where KEYn is L I where L is the meme's line number and I is its KnowYourMeme ID.
    » For example, echo -n 452 927,754 13564,351 91,M@RbLeC@KeG@Me | sha512sum = 02fee8ef…
  6. I have uploaded an archive with 83 files (“lootboxes”) – one file for each triplet. Each file has a (different) bitcoin private key encrypted with AES-256-CBC using key = first 32 bytes of the digest and IV = the following 16 bytes.
    » For example, echo 04e2acb7… | xxd -r -p | openssl aes-256-cbc -d -K 02fee8… -iv 37bb92…
  7. You know you have decrypted a file correctly if it starts with ASCII ZomG U WiN! plus space.
  8. You win a lootbox once you withdraw the entire amount from its bitcoin address.

The above rules are there so that I cannot be accused of cheating ;) A more convenient way to participate is:

  1. You play through the game and/or read through its script at this page.
  2. You input suspect memes (as KnowYourMeme URLs) into fields next to each line on that page.
  3. To check your results you download the “answer sheet” and feed it to this small program.
  4. If you guessed any loot, the program will display the private keys.
  5. You import them to Electrum and send the coins to your own address.

However, bitcoins are just a pretext. Above all, I wish you have some fun with my localization! :^)

Well then… Shall we do it?

YTMND

Leaderboard

Below is a table of all triplets and current status of their keys. Once a win is recorded on the blockchain, memes constituting the corresponding triplet are unveiled.

Triplet # Meme 1 Meme 2 Meme 3
0 L817 | the answer to life L484 | youtube poop ytp L253 | a cat is fine too
1 L1072 | real ultimate power L176 | i was frozen today L44 | has science gone too far
2 L61 | final fantasy L614 | shit was so cash L1081 | he will not divide us
3 L964 | moar L14 | cracky chan L475 | ha ha ha oh wow
4 L226 | hammer time L165 | sandwich chef L93 | what am i reading
5 L120 | winrar L1072 | real ultimate power L701 | its magic
6 L1060 | angry german kid L334 | doug walker L1084 | killdozer
7 L251 | pretty cool guy L9 | duckroll L150 | advice dog
8 L1054 | unlimited blade works L857 | gangnam style L954 | zalgo
9 L62 | bitches and whores L693 | catgirls L978 | i accidentally
10 L253 | a cat is fine too L34 | drought prairie dog L278 | asshole in danger
11 L388 | watamote L458 | yaranaika L1058 | lemon party
12 L247 | gar L145 | winter is coming L224 | the annoying orange
13 L327 | nevada tan L261 | pools closed L951 | leeroy jenkins
14 L1049 | its magic L1047 | jizz in my pants L966 | rage guy
15 L1075 | nedm L1079 | asmr L1058 | lemon party
16 L51 | mega milk L254 | kenny glenn L700 | its a lion
17 L686 | i dunno lol _o L333 | did he died L53 | simply walk into mordor
18 L288 | its over 9000 L445 | poker face rage comics L1085 | spanish laughing guy
19 L1083 | rickroll L921 | fsjal L466 | fukken saved
20 L76 | brazzers L848 | you gonna get raped L54 | i herd u liek mudkips
21 L50 | katawa shoujo L958 | mereana mordegard L1060 | angry german kid
22 L288 | its over 9000 L1053 | merely a setback L614 | shit was so cash
23 L1075 | nedm L550 | world of warcraft L612 | 4chan triforce
24 L856 | rules of the internet L591 | jojos L143 | mega milk
25 L48 | why so serious L83 | card crusher L829 | dangerous to go alone
26 L56 | katawa shoujo L229 | zerg rush L952 | nope chuck testa
27 L90 | gnaa goatse security L57 | om nom nom nom L74 | acoustic black metal
28 L920 | exploitables L299 | fate type moon L42 | english motherfucker
29 L450 | higurashi no naku L1079 | asmr L149 | disaster girl
30 L71 | at first i was like L1084 | killdozer L956 | numa numa
31 L100 | well yes but actually no L354 | party hard L453 | uncle b
32 L74 | acoustic black metal L328 | the simpsons L84 | what a twist
33 L1085 | spanish laughing guy L1082 | jojos L676 | mr freeman
34 L282 | stick it in her pooper L31 | small bombs L249 | higurashi no naku
35 L480 | i did it for the lulz L74 | acoustic black metal L168 | brilliant but i like this
36 L1055 | dune L809 | heresy L952 | nope chuck testa
37 L131 | ps3 has no games L13 | moe L296 | all your base
38 L502 | do a barrel roll L86 | abridged series L856 | rules of the internet
39 L883 | hide your power level L82 | people die if killed L478 | nevada tan
40 L50 | katawa shoujo L456 | gtfo L94 | cool story bro
41 L454 | no time to explain L1075 | nedm L1006 | divide by zero
42 L121 | mega milk L123 | protect ip act L639 | rule 34
43 L255 | katawa shoujo L945 | get down geddan L53 | simply walk into mordor
44 L81 | fag suffix L819 | what will he do L627 | mad skills
45 L76 | brazzers L693 | catgirls L97 | oh noes
46 L231 | kitty cat dance L812 | boxxy L312 | just as planned
47 L117 | nice things L167 | doge L330 | metal gear solid
48 L251 | pretty cool guy L620 | ancient aliens L239 | dont look at her
49 L125 | o rly L491 | im meen L852 | my trap card
50 L476 | spam L956 | numa numa L560 | flat is justice
51 L1075 | nedm L380 | pingas L1048 | should have ended
52 L6 | nyan cat L954 | zalgo L25 | huge like xbox
53 L517 | goodnight sweet prince L572 | bitches dont know L332 | five nights at freddys
54 L956 | numa numa L242 | katawa shoujo L418 | ermahgerd
55 L25 | huge like xbox L1072 | real ultimate power L956 | numa numa
56 L383 | longcat L907 | ha ha guy L19 | serious cat
57 L63 | youre doing it wrong L959 | kill it with fire L121 | mega milk
58 L52 | falcon punch L908 | y u no guy L17 | moonspeak
59 L263 | habbo hotel L224 | the annoying orange L124 | o rly
60 L215 | put that cookie down L497 | do want do not want L17 | moonspeak
61 L914 | crazy mean baby L647 | fgsfds L91 | serbia strong
62 L133 | smug anime face L956 | numa numa L609 | medieval tapestry edits
63 L453 | uncle b L485 | its over 9000 L1082 | jojos
64 L489 | i had to do it to em L245 | haters gonna hate L894 | higurashi no naku
65 L51 | mega milk L139 | happy cat L857 | gangnam style
66 L571 | never have girlfriend L855 | x grab my y L903 | i came
67 L590 | disaster girl L194 | where is your god L272 | a challenger appears
68 L440 | horrifying house guest L962 | its goofy time L182 | caturday
69 L664 | zuul motherfucker zuul L15 | omg L11 | nice boat
70 L928 | smug anime face L1074 | bleach L209 | disregard that
71 L546 | github L108 | y helo thar L344 | 1337 speak
72 L1055 | dune L110 | amirite L286 | like skyrim with guns
73 L1082 | jojos L111 | son i am disappoint L361 | acoustic black metal
74 L97 | oh noes L814 | all your base L221 | do it faggot
75 L71 | at first i was like L613 | action 52 L353 | welcome to internet
76 L916 | a winner is you L1079 | asmr L547 | slender man
77 L8 | bananaphone L182 | caturday L91 | serbia strong
78 L950 | its more likely L512 | this is delicious cake L226 | hammer time
79 L1083 | rickroll L84 | what a twist L169 | piero scaruffi
80 L216 | uguu L613 | action 52 L116 | all your base
81 L77 | an hero L909 | x x everywhere L49 | shoop da whoop
82 L620 | ancient aliens L86 | abridged series L794 | inglip

Technical Notes

Finally, a brief overview of the game engine and localization machinery. For details, refer to the archive.

The engine itself is fairly minimalistic and yet it's unclear if it was written specifically for this game or not – the game is not using all of its features (like voice support or game saves) but hardcoded values suggest the engine was at least adapted for it. There are no distinctive strings identifying the engine. It's also very old (the README too claims support for WIn98) and, erm, aggressively non-Unicode.

Like most engines of that time (ahem, ahem… RealLive), this one is using custom formats for basically everything: graphics are CRX files (CRXG magic, ZLib-compressed data), audio is PCM (XPCM magic, uncompressed PCM data with custom headers), scripts are MES (no magic).

Script files' format is straightforward (it's not some ISM SCRIPT of Sisters with dozens of fields in the header, 4 tables and a whole stack-based interpreter with 122 opcodes). A file starts with a single jump table followed by the bytecode stream. Each opcode is 1 byte long and there are 89 opcodes overall. Some strings (in particular the ones that the player sees – opcodes 4D, 4E, 4F) are obfuscated by subtracting 32 from the ordinal value of the character.

As for the limitations which I mentioned above, the engine has almost everything hardcoded – font names, font sizes, window dimensions, display line length, line height, bytecode length, etc. etc. Most troublesome is the fact that a string meant for output must not be longer than 0x400 bytes and due to the way the engine and my localization hook work every symbol is encoded as 2 bytes (even for pure English texts) so the real limit is around 500 characters, and then you also have to pre-wrap it… If I were to do this again, I would focus on porting the game to another engine rather than trying to localize this one.

Anyway, to work around most annoying problems I made a localization hook which is patching the engine's code on runtime by injecting a DLL into the main process. The DLL:

  • Modifies the import table to intercept calls to CreateFont for substituting hardcoded font parameters with ones that look better for Western languages.
  • Intercepts CreateFile to slip in the translated scripts (which are stored within the resource section of the DLL and extracted to %TEMP% when needed).
  • Breaks into the engine's character sizing algorithm to make it respect proportional fonts… at least this was the plan. It worked but I had to revert to using a monospaced font (Lucida Console) because it looked horrible due to some rendering glitches.
  • Allows the game to run in any locale – some minor texts (like window title) may be junk in non-English (non-Russian, etc.) locale but the main novel's text always looks properly (GetGlyphOutlineA is rerouted to GetGlyphOutlineW).

Lastly, MES.rb (a Ruby script) extracts and replaces texts within MES files. It also takes care of wrapping the lines before insertion – ideally this should be done by the engine on runtime according to screen width and font properties but the hook was already too much a contraption, I was short on free time and besides, I had to forego the idea of using a proportional font anyway.

Visitors' Comments

Your avatar Note: comments are premoderated

Avatar

Waiting diligently.

The original script was written by Tatsuhiko Takimoto - the author of NHK - himself, right? And the art is by Kendi Oiwa, the illustrator of the NHK manga.

Perhaps he wrote it as a joke, but nevertheless it'll be interesting to read anything "new" (as in newer to a non-Japanese-speaking audience) from him.

You are doing divine work. This would be a fascinating release.

Avatar

May I have the jap ver of the game please?

I can't read russian, so downloading from rutracker is pretty hard.

Avatar

Looking forward to giving this a read. Thank you for your hard work and the fun challenge!

Home page