[WIP - Full] 奴隷との生活 -Teaching Feeling-


Jaypee

Jungle Girl
Jan 3, 2016
24
0
#2
Re: 奴隷との生活 -Teaching Feeling-

Nomake Wan said:
Here is the script with the demo lines translated!
Okay, thanks! I'll have the trial patch ready later today. Now we just need an ambassador to contact Ray. Anyone up for the job?

Update: The trial patch is ready to go (mostly). I was able to play all the way through to the end, but I encountered some crashing at times near the endgame when I stopped なでing. Guess Sylvie really didn't like that. Going to try triggering it on an unpatched copy, to rule out the patch as the cause.

Nomake Wan said:
However, notice that line 1121 appears to be the "bought" part of buying clothes. Line 1156 is how they should look, line 1155 is missing 1121. Plus a bunch of those \n lines should be separate (which actually caused the majority of the lines at the end to appear as 'untranslated' when they had been translated previously, such as Line 1706 and Line 1100 to name one example).

Hopefully this helps. :)
The line 1121 discepancy is due to grammatical differences. If you look a fresh copy of shop.ks in Japanese, you'll notice that for all of the lines that are missing 1121 at the end (e.g. 1155), the game prints the first part of the sentence then jumps and prints を買った. So for line 1155 in the dict, it jumps to label *c_e5 in the scenario to print 白いワンピース then it jumps to label *color and prints を買った. When I first constructed the dictionary, I set up a translation entry from を買った→;を買った so that line 1155 wouldn't print, but would be commented out so that when exporting from the translated scenario files the translated lines would match up 1:1 between Japanese and English.

As for lines 1100 and 1706, that was actually a subtle change to the text, not a newline issue. The demo says 「[name]」ってお呼びしますね while the release says 「[name]」とお呼びしますね. I suspect the other translation misses were due to similar changes (and expect that future revisions by Ray will cause similar issues). It's unfortunate that the part after the newline got caught up in this discrepancy, but the alternative (i.e. not joining newlines) would give you less freedom to change the flow of the text.

If you prefer editing scenario files to editing the dictionary, then I recommend this workflow moving forward:

  1. Make a copy of the original untranslated scenario files.
  2. Apply the translation dict to the copy using my script.
  3. Make nonstructural changes to the files, if needed.
  4. Test the changes ingame and return step 3 if needed.
  5. Export lines from the original scenario and changed scenario.
  6. Join the exported lines to make an updated translation dict.
  7. Make structural changes to the scenario files last.
This workflow should minimize errors and headaches, but you need to be aware of a few things. First, in step 3 you must not insert or move around tags that split the text. That means any tag except the following:
Code:
[l], [p], [r], [emb], [lr], [name], [miyage]
Also during step 3, you must not remove any passages of text completely. For example, if you were translating shop.ks and you came across を買った, you should comment it out (by putting a ; in front of it) instead of deleting it.
As a corollary to this, when you export the lines in step 5, both files should have exactly the same number of lines. This ensures that we have a 1:1 mapping between the files, which makes joining them trivial. As long as you follow these rules, you are free to edit the text as you like (even inserting or removing line breaks).

The second thing you should be aware of is duplication. The translation dictionary should only have one entry for each unique passage of Japanese text, so you must remove duplicates in the Japanese column after you join together the exported lines. That means you either have to either be aware of duplicate passages and change each one as you're editing the scenario files, or you have to take a hands-on approach to removing duplicates after joining the exported lines. Both ways are tedious and error prone, which is why it may be a good idea to just edit these directly in the dictionary.

Now, I can handle step 6 for you if you'd like (it's also pretty easy to do it yourself with Excel). But if you don't follow steps 1 through 5 (and verify that the exported line counts match in step 5), it takes a lot of manual work to produce the translation dictionary, which means errors can creep in and we both get headaches.

This workflow might make step 7 more difficult for you (since you'll need to reapply your structural edits every time you want to update the translation). I think we can probably handle this using GNU diff to create a patch of your structural edits, but things could get hairy when the game gets updated or if you decide to insert or delete line breaks when editing the scenarios (since GNU diff cares about line numbers). On the other hand, since the structural edits would all be together in a patch file, you wouldn't have to worry about forgetting any of them when 1.20 rolls around.

One last thing, you can put a '_' in front of any special character at the beginning of the line to escape it. So instead of "...*cough*" you could do "_*cough*".
 
Last edited:

Nomake Wan

Mystic Girl
Jan 9, 2016
265
28
#3
Re: 奴隷との生活 -Teaching Feeling-

Jaypee said:
When I first constructed the dictionary, I set up a translation entry from を買った→;を買った so that line 1155 wouldn't print, but would be commented out so that when exporting from the translated scenario files the translated lines would match up 1:1 between Japanese and English.
Oh...so that's what those were. That makes more sense. I learn something new about how this language parses text every day. Thank you for being patient with me.

Jaypee said:
As for lines 1100 and 1706, that was actually a subtle change to the text, not a newline issue. The demo says 「[name]」ってお呼びしますね while the release says 「[name]」とお呼びしますね. I suspect the other translation misses were due to similar changes (and expect that future revisions by Ray will cause similar issues). It's unfortunate that the part after the newline got caught up in this discrepancy, but the alternative (i.e. not joining newlines) would give you less freedom to change the flow of the text.
Wow...I must've been really tired to not see the te and to there. I'm sorry, that's definitely my mistake. I still think there are lots of lines that are duped for the sake of newline parsing, and while I understand the meaning behind it--being able to be more 'creative' with the translation as you're allowing a per-line translation instead of per-phrase translation--at present the translation does not make any use of this creative freedom. While starting on the 1.20 untranslated, I actually ended up removing the newlines completely just to make things a bit more readable... not to mention...

Jaypee said:
The second thing you should be aware of is duplication. The translation dictionary should only have one entry for each unique passage of Japanese text, so you must remove duplicates in the Japanese column after you join together the exported lines. That means you either have to either be aware of duplicate passages and change each one as you're editing the scenario files, or you have to take a hands-on approach to removing duplicates after joining the exported lines. Both ways are tedious and error prone, which is why it may be a good idea to just edit these directly in the dictionary.
This is actually what I was wondering at when I was working on the demo script this morning, and thankfully in Notepad++ there's a fairly simple command you can run to remove duplicate lines. Thanks, Stack Overflow. I did just that to cut down the line list after removing all the newlines. While creativity is nice, seriously cutting down on the size of the dictionary by excluding newlines and eradicating dupes I think would be more beneficial in the end. That's my opinion at best, however.

Your workflow honestly looks good. I was trying to come up with a way to reconcile it and yet again you've beaten me to it in elegant fashion. I don't mind the dictionary method honestly, especially when cutting out dupes. With dupes cut, the current beta appears to be 'only' 277 lines of text, and much of them are simple things like names or the descriptions for the new clothing items. It's only once the translation is in place that I prefer editing the scenario files directly, so I think this'll work out okay.

I'm going to be a little more busy than usual as classes start up, but I will try to chip away at those 277 lines as much as I can each day. がんばります!

EDIT: I forgot to address the Ray thing. I don't have Twitter unfortunately. I...could get one, but only if no one steps forward, I suppose. I've managed to survive this long without one, so... Oh, and I updated the patch in the first post. Just a minor thing, fixing the ellipses thing and a period that escaped me in the french toast scene.
 
Last edited:

spacegodzilla

Demon Girl Pro
Jul 19, 2014
97
28
#4
Re: 奴隷との生活 -Teaching Feeling-

Python n00b here. Is minding duplicate Japanese phrases in the translation dictionary necessary? I thought if a dictionary attempts to modify a value for an existing key it would use the latest entry found. Or is it for clarity?

Also, Nomake Wan seems to have already started/finished translating the demo so I'll step aside. Good luck! :) Maybe we can work together once 1.2 is fully released if there's a larger number of untranslated lines.

Regarding Ray-Kbys on Twitter: I don't have a twitter, but what would be the best way to approach him if we were to? I "obtained" the game so I can't really say anything regarding the issue he has with piracy, but the original translation only contained the translated scripts and were useless without owning a copy of the game.

If we want to seriously reach out to him, maybe we could say the above, state that we support his game and didn't endorse or encourage piracy with the translations, and ask him if he would like to pack the translated scripts with the international DLSite release for current/future versions? I'm assuming since he said the translations aren't official that the international release was still in Japanese, which may have been a reason for the low number of purchases.
 

Jaypee

Jungle Girl
Jan 3, 2016
24
0
#5
Re: 奴隷との生活 -Teaching Feeling-

While starting on the 1.20 untranslated, I actually ended up removing the newlines completely just to make things a bit more readable... not to mention...

This is actually what I was wondering at when I was working on the demo script this morning, and thankfully in Notepad++ there's a fairly simple command you can run to remove duplicate lines. I did just that to cut down the line list after removing all the newlines. While creativity is nice, seriously cutting down on the size of the dictionary by excluding newlines and eradicating dupes I think would be more beneficial in the end. That's my opinion at best, however.
Fair word of warning, the translation script is not set up to handle this situation (assuming you broke them into separate lines to apply more deduplication). Replacing the '\n's with spaces would be okay, but since the script uses a hash of the Japanese column, any changes there would cause translation misses. I could change the translation script, but that's already been tested fairly well (and the extra freedom may become useful later on), so it's more likely that I'll just end up turning your translation into a giant sed script and running it against the lines from 1.20 to turn them back into a dictionary. Though now that I've said that, it might be a good idea to make a tool to do these kinds of splitting, deduplication, and joining operations directly on the translation dictionary, so I'll look into that. Good luck with your classes and with the translation!

Python n00b here. Is minding duplicate Japanese phrases in the translation dictionary necessary? I thought if a dictionary attempts to modify a value for an existing key it would use the latest entry found. Or is it for clarity?
Yes, that's correct. However, to minimize confusion I think it's best to keep as little duplication in our dictionary as possible.

EDIT: I forgot to address the Ray thing. I don't have Twitter unfortunately. I...could get one, but only if no one steps forward, I suppose.
Regarding Ray-Kbys on Twitter: I don't have a twitter, but what would be the best way to approach him if we were to? I "obtained" the game so I can't really say anything regarding the issue he has with piracy, but the original translation only contained the translated scripts and were useless without owning a copy of the game.
I'm thinking we should try to keep this as low key as possible, and probably also avoid connecting it to these forums. He has an email address on his Tumblr, so that might be the best option to get ahold of him.

If we want to seriously reach out to him, maybe we could say the above, state that we support his game and didn't endorse or encourage piracy with the translations, and ask him if he would like to pack the translated scripts with the international DLSite release for current/future versions? I'm assuming since he said the translations aren't official that the international release was still in Japanese, which may have been a reason for the low number of purchases.
I think the main thing is to show him our translation of the demo, and give him the choice of how to proceed. This may include offering to stop all development, discussion, and distribution of the English translation without his approval (he may ask for this anyway, and honestly we should respect his decision). Actually, I'm going to go ahead right now and take down any links I've posted. I suggest you two do the same until we get this sorted out.

Anyway, I'm not sure that he'll want to include the translation together with his game even if this goes well. He might have concerns about quality control, release schedules, and there could also be copyright issues (I think he retains full control over translations since they're derivative works, but I am not a lawyer). So we should offer him the option to include the translation (either directly or as a separate download that he has control over), but also offer to continue working independently (but only with his approval of course).
 

Nomake Wan

Mystic Girl
Jan 9, 2016
265
28
#6
Re: 奴隷との生活 -Teaching Feeling-

Also, Nomake Wan seems to have already started/finished translating the demo so I'll step aside. Good luck! :) Maybe we can work together once 1.2 is fully released if there's a larger number of untranslated lines.
Definitely! I'd be honored to work with you! Without your work on 1.16 I wouldn't even be here.

Fair word of warning, the translation script is not set up to handle this situation (assuming you broke them into separate lines to apply more deduplication). Replacing the '\n's with spaces would be okay, but since the script uses a hash of the Japanese column, any changes there would cause translation misses. I could change the translation script, but that's already been tested fairly well (and the extra freedom may become useful later on), so it's more likely that I'll just end up turning your translation into a giant sed script and running it against the lines from 1.20 to turn them back into a dictionary. Though now that I've said that, it might be a good idea to make a tool to do these kinds of splitting, deduplication, and joining operations directly on the translation dictionary, so I'll look into that. Good luck with your classes and with the translation!
Thanks! See I figured it was literally a dictionary--that it was using the dictionary files as a 'master list' of translations, then would go through the scripts and when it hit one of the dictionary entries it'd slap in the English version. Something you said on the 4chan thread earlier when I asked about whether your script took into account the updated 1.20b scripts from Ray's twitter account had me thinking that, so I figured killing newlines would end up being beneficial. Is there any way to get this functionality? I'm not a python coder, as you probably already noticed.

I'm thinking we should try to keep this as low key as possible, and probably also avoid connecting it to these forums. He has an email address on his Tumblr, so that might be the best option to get ahold of him. I think the main thing is to show him our translation of the demo, and give him the choice of how to proceed. This may include offering to stop all development, discussion, and distribution of the English translation without his approval (he may ask for this anyway, and honestly we should respect his decision). Actually, I'm going to go ahead right now and take down any links I've posted. I suggest you two do the same until we get this sorted out.

Anyway, I'm not sure that he'll want to include the translation together with his game even if this goes well. He might have concerns about quality control, release schedules, and there could also be copyright issues (I think he retains full control over translations since they're derivative works, but I am not a lawyer). So we should offer him the option to include the translation (either directly or as a separate download that he has control over), but also offer to continue working independently (but only with his approval of course).
I'm...not sure about this. While not the first time someone got translated versions after showing the dev a translated demo (SEE: Seismic's new Liru game), I'm not sure about alienating the English-speaking community after coming this far. While I absolutely respect Ray, and want development to continue above all else... a working game from our patch one cannot make. If I were distributing full versions of the game then yeah, I'd take it down in a heartbeat, but I'm not.

So I believe that for now, I will leave the link to the patch up and wait to see how this communication with Ray goes, rather than preemptively nuke everything. I prefer to believe that diplomacy can be had without gutting our hand in advance.
 

Jaypee

Jungle Girl
Jan 3, 2016
24
0
#7
Re: 奴隷との生活 -Teaching Feeling-

Thanks! See I figured it was literally a dictionary--that it was using the dictionary files as a 'master list' of translations, then would go through the scripts and when it hit one of the dictionary entries it'd slap in the English version. Something you said on the 4chan thread earlier when I asked about whether your script took into account the updated 1.20b scripts from Ray's twitter account had me thinking that, so I figured killing newlines would end up being beneficial. Is there any way to get this functionality? I'm not a python coder, as you probably already noticed.
Yeah, that's basically how it works, but it's a little more clever about it than a simple find and replace operation, because it understands the structure of the scenario file. The translation unit is one "passage" of text (a passage is everything between structural tags like [if] and [cm] and speaker tags like #Sylvie, newlines and all), so while there is no duplication of full passages, there can be duplication between fragments of passages. This is partly by design, as it allows the translation dictionary to read more like the scenario does (it's basically a trade off between having some unnecessary duplication and having a little more context to go by when translating the dictionary directly).

The translation script is working pretty well as it is so I don't want to change how it works, but I can definitely make some tools that would transform the dictionary into the fully deduplicated "one sentence per line" format you want and back again.

I'm...not sure about this. While not the first time someone got translated versions after showing the dev a translated demo (SEE: Seismic's new Liru game), I'm not sure about alienating the English-speaking community after coming this far. While I absolutely respect Ray, and want development to continue above all else... a working game from our patch one cannot make. If I were distributing full versions of the game then yeah, I'd take it down in a heartbeat, but I'm not.

So I believe that for now, I will leave the link to the patch up and wait to see how this communication with Ray goes, rather than preemptively nuke everything. I prefer to believe that diplomacy can be had without gutting our hand in advance.
Yeah, that's totally up to you. Personally, me taking my links down doesn't really affect too much since I can still continue work on and release my Python scripts (just without the translation dictionary), and there isn't much work to be done short term on new UI graphics. I also understand that putting it all on Ray could backfire as far as the community's sentiment is concerned.

EDIT: I finished adding new features to strings.py, you can get it here:
http://mega.nz/#!z0gDRKiA!L_FKirGDNfGAkMrfMHTQjIjLqPWjymstYgxtzkiyB_U

Now strings.py uses two files named tldict_unit.txt (the same dictionary as we had before) and tldict_line.txt. I believe the second file should be what you've been waiting for. It has everything from the unit dictionary, but the lines have been split on '\n's and deduplicated further.

Now you can do this kind of workflow:
  1. Extract a fresh copy of the game (i.e. unpatched, straight from DLsite)
  2. Copy script.py, tyrano.py, tldict_unit.txt, tldict_line.txt to data
  3. Open a command prompt in data
  4. Code:
    xcopy scenario scenario_jp\
  5. Code:
    python strings.py t scenario/*.ks
  6. Test your translation in game.
  7. Make changes to tldict_line.txt.
  8. Code:
    xcopy /y scenario_jp scenario\
  9. Go to step 5.

Note that tldict_line.txt is applied to tldict_unit.txt automatically at step 5, so do not edit tldict_unit.txt while that file exists. If you want to edit tldict_unit.txt directly, you can delete tldict_line.txt and work only with tldict_unit.txt. Another thing to note is that since tldict_unit.txt is still the "master" dictionary, you are free to delete lines from tldict_line.txt after they have been applied and it won't hurt anything. You could even use a regex to get rid of all lines that are not identical before and after the tab (i.e. all lines that have already been translated). Also, if you insert or delete any line breaks in the .ks files (or '\n's in tldict_unit.txt), then you'll start to see '\n's when you regenerate tldict_line.txt. So if you don't want to see '\n's ever, don't make these kinds of changes.

If you need to get tldict_line.txt back after deleting it, or you want to translate the .ks files directly (following closely the guidelines I posted above), then you can regenerate the JP-EN dictionaries by doing
Code:
python strings.py x scenario_jp/*.ks scenario/*.ks
I recommend you make frequent backups to your dictionaries if you use this, at least until we're sure all the bugs are worked out.
 
Last edited:

Jaypee

Jungle Girl
Jan 3, 2016
24
0
#8
Re: 奴隷との生活 -Teaching Feeling-

I've made a new tool, zindex.py. Get it here:

http://mega.nz/#!OwZE3LgQ!zVpM4vcnyFXi2TCdtCqcBkt0v3amaOKvs-0f_KP74OM

You can use this tool to make Teaching Feeling compatible with the latest version of TyranoScript, which is used in the latest TyranoBuilder. Copy it to your data folder and use it like this:

Code:
python zindex.py scenario\*.ks
I've also included a builder_config.json file for TyranoBuilder. To open Teaching Feeling in TyranoBuilder, make a new project (settings don't matter), replace the data folder with Teaching Feeling's data folder, replace builder_config.json with the one from my tools, and run zindex.py on the scenario folder. Advantages of working with TyranoBuilder include the ability to start the game in the middle of any scene, as well as the TyranoRider debugger, which allows you to edit game variables and watch the tags being interpreted as you play the game. Note: Most scenes will show up as one giant TyranoScript component in TyranoBuilder. You will need to remove the tb_start_tyrano_code and _tb_end_tyrano_code tags from each .ks file manually to get TyranoBuilder's drag and drop functionality.

zindex.py details:

Versions of TyranoScript lower than 4.00 did not specify the layering of characters, but the behavior was that characters shown later in the script appear above others. In TyranoScript 4.00, the reverse of this behavior was specified (i.e. characters shown later in the script appear below others). Since Ray abused character tags to show parts of Sylvie, this means that most of the scenes in the game are broken under the latest TyranoScript. Fortunately, a zindex parameter was added to the chara_show tag, making this issue easy to fix by simply incrementing the zindex for each chara_show tag in the scene file (with some exceptions).
 

lkkyo

Tentacle Monster
Jun 4, 2013
291
28
#9
Re: 奴隷との生活 -Teaching Feeling-

anyone working on a 1.21 translation?
 

Nomake Wan

Mystic Girl
Jan 9, 2016
265
28
#11
Re: 奴隷との生活 -Teaching Feeling-

1.22 is the current version of the game, and yes, the TL is in progress. Progress is delayed because I fell ill and also found myself with a contractual obligation to work on a different game. Work on that game should be wrapping up soon, but I can't say what game it is. I can only say it was worth it.

The latest version is mostly just bugfixes, plus a new beta that adds a new H-scene and a new 'dressing room' feature rather than simply changing Sylvie's sit sprite when you change clothes. He mentioned on twitter that after uploading 1.22 he's already noticed some bugs, though he didn't specifically say whether he saw them in 1.22 or 1.30b2. If he means the latter then yeah, so did I LOL. But that's why it's a beta, and he releases beta-only updates via a tumblr site rather than forcing users to re-download the whole game from DLSite.

Time will tell. He's currently sketching Flandre on stream, having taken a break from game work because he burnt himself out trying to get the current version of TyranoScript to work with TeachingFeeling. Jaypee, I believe, has found a rather automated solution to his woes, but neither of us have Twitter. I'm tempted to prod a friend of mine who does to pass this tool (and basic instructions on how to use it and what it does) along so Ray doesn't feel so overwhelmed by the changes.
 

Jaypee

Jungle Girl
Jan 3, 2016
24
0
#12
Re: 奴隷との生活 -Teaching Feeling-

Just a heads up, I'm looking into the possibility of patching TyranoScript's tag parser to do the translation lookups at runtime. This would allow us to distribute the translation as a single JSON file (plus a small modification to first.ks or title_screen.ks), and the script translation should work with any version of the game (including betas and future versions). It might also be possible to do the UI fixups this way too.

Edit: I think this is going to work, and make things a whole lot easier. Here's a tentative release:
http://mega.nz/#!fsIERYLA!_xYH3npR_tvZJJJPCsharxnkCBJWI7LWy3xLbdt2MVk

The translation is in data/others/translate/en-US.json. Every time you launch the game, your translations are loaded from that file, and at the same time, any new lines added to the game by Ray will be written back. This means you don't ever have to run any scripts, just edit the JSON file in place and restart the game to see your changes.

I still need to work on translating character names and button tooltips, as well as some way to apply UI fixups in JavaScript.
 
Last edited:
Oct 13, 2014
299
28
#13
Re: 奴隷との生活 -Teaching Feeling-

Hmm. I know i shouldn't ask this Buuuuuuuuuuuuut... Can't stop myself!
Is there any way to see the translations progress for the newer Versions of "Teaching Feelings"? x:

Apologize for any inconvenience this may cause T_T
 

spacegodzilla

Demon Girl Pro
Jul 19, 2014
97
28
#14
Re: 奴隷との生活 -Teaching Feeling-

Hmm. I know i shouldn't ask this Buuuuuuuuuuuuut... Can't stop myself!
Is there any way to see the translations progress for the newer Versions of "Teaching Feelings"? x:

Apologize for any inconvenience this may cause T_T
No idea how far Nomake Wan has gotten, but I've started doing translations for v1.22 as well. No ETA on when it'll be done yet as RL has me by my nuts.

On another note, some interesting news to come in the future.
 

Jaypee

Jungle Girl
Jan 3, 2016
24
0
#15
Re: 奴隷との生活 -Teaching Feeling-

No idea how far Nomake Wan has gotten, but I've started doing translations for v1.22 as well. No ETA on when it'll be done yet as RL has me by my nuts.

On another note, some interesting news to come in the future.
Not sure if you've been watching 4chan, but here's the latest version of the JavaScript I posted earlier.

http://mega.nz/#!io52SSKS!vHXbrCASGExclCgpU-VykB40UFtcIQx056FcrA-wHSk

If you translate that JSON file, it should be easy to merge what you translated with Nomake Wan's translations.
 

spacegodzilla

Demon Girl Pro
Jul 19, 2014
97
28
#16
Re: 奴隷との生活 -Teaching Feeling-

Not sure if you've been watching 4chan, but here's the latest version of the JavaScript I posted earlier.

http://mega.nz/#!io52SSKS!vHXbrCASGExclCgpU-VykB40UFtcIQx056FcrA-wHSk

If you translate that JSON file, it should be easy to merge what you translated with Nomake Wan's translations.
Thanks for the update!

Unfortunately I don't follow 4chan because it's blocked. Proxies and VPNs are too slow and annoying to make it worth it.
 

Injihara

Jungle Girl
Feb 17, 2016
8
0
#18
Re: 奴隷との生活 -Teaching Feeling-

I'm just edit in scenario folder only, but it's kind of good so far.
It's v1.30.

Preview images :
img ur.com/a/jgObb
 
Jan 12, 2016
1
0
#19
Re: 奴隷との生活 -Teaching Feeling-

I can't really contribute anything except for moral support lol :)
You guys are my heroes :D
Thanks for working hard on the translations ^^
 

lkkyo

Tentacle Monster
Jun 4, 2013
291
28
#20
Re: 奴隷との生活 -Teaching Feeling-

is 1.3 oficially out or still beta guys?