What's new

SIM [Old Huntsman] Jack-o-nine-tails [SLG]


OP
Monceber

Monceber

Demon Girl Master
Joined
Jan 9, 2011
Messages
206
Reputation score
81
Re: [SLG] Jack-o-nine-tails

Apologies for a long delay in posting any updates.

So, after discussing this matter with guys, who update this on GitHub, I decided to stick with the idea of forking that repo. This way, bugfixes from the main branch will be much easier to implement, as well as there won't be any problems to merge changes, that BreezeIndigo done with my translations.

Therefore, here: an url supposed to be here, but I'll hide it until there will be actual content there - forked repo, where I'll be doing a translating stuff. I still haven't committed anything there, but I think I'll be doing as soon as possible. I think I'll use BreezeIndigo's latest patch and I'll continue working from there (i.e. if I'm able to split and merge it w/o problems, otherwise I'll be trying other versions).

I'll continue posting .qsp here, because that repo is pretty much for dev/bugs, so ordinary users will have trouble getting the game from there.

P.S. If I manage to make it work, that is <_<

---

Do you have a program that loads the qsp file, extract the strings and asks you their translations
Haha, nice one :D There's no such program, obviously.

Fixed. Max fiend skill should now prevent parasite infestation.
That's not a fix. Bypass? Yes. Fix? No. How can a person get immunity to pregnancy just by fucking a tentacle monster? That's what a 'sterilization' option in Technosphere is for.

There's a few things I don't quite agree with. First of all - Picturesque isn't a fitting word to describe a person (a place or a view - sure, but I don't think that i ever heard about 'picturesque person').
Second - about extended rental. They are supposed to be optional, but now you can't get rid of them, even if you don't want/need them, or you want to save extra sparks.

I'm still in process of merging changes, so I'll be expanding whenever I see something.

---

Setting fame requirement for Taurus Estate is not the best idea, as roughly half of story characters. And it really breaks the story telling, if the games tells you that slaver is aligned with one House, but you can leave in that House's territory, going, instead, to other house. And you start Sandbox, you get House in White Town, but you brand fame is at it's lowest.

---

This game is more role-play oriented. Therefore, I don't really agree with making text shorter just to give more information. With such approach we might as well just write numbers instead of sentences.
For that reason, I don't really like changes like "Obedience: LIMITED". My English may be lacking, indeed, but still that's not exactly the changes I approve of.

On a side notice, I agree somehow with your idea of limiting access to residence, but it takes away freedom of choice. The only way to increase your fame within the House is to sell slaves to residents. And to sell slaves to residents, you need to live in any other place beside slums. And to do that, you need to raise your fame. It's kind of loop. And while it's possible to use initial fame that your slaver gets from the start (for some strange reason everyone get Serpis fame, disregarding they starting alignment), it's virtually impossible to play as a max.difficulty guys (because he get's only 200$ at the start, and they'll be gone in a moment). The thing you've done, by limiting sales to residents is already done by limiting sales to elite customers.
 
Last edited:

BreezeIndigo

Jungle Girl
Joined
Jan 15, 2012
Messages
22
Reputation score
4
Re: [SLG] Jack-o-nine-tails

Apologies for a long delay in posting any updates.

So, after discussing this matter with guys, who update this on GitHub, I decided to stick with the idea of forking that repo. This way, bugfixes from the main branch will be much easier to implement, as well as there won't be any problems to merge changes, that BreezeIndigo done with my translations.
They got in touch with me about the GitHub too. If I can get the split_file.py thing to work properly I'd be happy to share any of the changes I make through there.

That's not a fix. Bypass? Yes. Fix? No. How can a person get immunity to pregnancy just by fucking a tentacle monster? That's what a 'sterilization' option in Technosphere is for.
Oddly enough though, the 'milkmaid' option doesn't seem to cause pregnancy, so I honestly don't know whether it's intended or not. I see your point though, so it's probably worth reversing that change. Originally I wanted to leave the option not to sterilise, but there's really no reason not to.

There's a few things I don't quite agree with. First of all - Picturesque isn't a fitting word to describe a person (a place or a view - sure, but I don't think that i ever heard about 'picturesque person').
Yeah, I was never sure about choice of words here. You really need a succinct way to describe great beauty without resorting to metaphor, which is kind of clunky. I'm happy to take any suggestions for wording changes, this is really just something I'm playing with. For now, I've changed it to say 'exquisite'.


Second - about extended rental. They are supposed to be optional, but now you can't get rid of them, even if you don't want/need them, or you want to save extra sparks.
Setting fame requirement for Taurus Estate is not the best idea, as roughly half of story characters. And it really breaks the story telling, if the games tells you that slaver is aligned with one House, but you can leave in that House's territory, going, instead, to other house. And you start Sandbox, you get House in White Town, but you brand fame is at it's lowest.
Yeah, the faction housing thing was a bad idea and I apologise for that. I've reversed that change already on my computer. The reason I've added things to default in the houses is so that each house provides you something beyond cosmetic differences. At present, there doesn't appear to be any strong reason to pick one house over the other as far as I can tell, nor is there anything guiding you towards interacting with them. That might be something I've missed in the untranslated part of the game though, so if that's the case I'll happily undo what I've done here.

The current setup I've got is to have the houses unlocked based on player fame. Their costs should be balanced so that lower tier housing is cheaper at base cost, but slightly (around 10sp. per month) more expensive if you elect to buy the upgrades to match a higher tier house. I was hoping this would encourage players to increase their fame and work towards better housing. Again, this is mostly just experimental. It was an idea I had and I wanted to fiddle with it, in future maybe I'll try and separate experimental and bug fix versions.

This game is more role-play oriented. Therefore, I don't really agree with making text shorter just to give more information. With such approach we might as well just write numbers instead of sentences.
For that reason, I don't really like changes like "Obedience: LIMITED". My English may be lacking, indeed, but still that's not exactly the changes I approve of.
Yeah, that shouldn't be in there. I originally went with the single words and it looked weird to me, so I'm pretty sure I changed it to short sentence descriptions like: 'Master a common skill' or 'Learn a sex skill'. I must have missed that one though, I'll get it fixed up in my working version.

On a side notice, I agree somehow with your idea of limiting access to residence, but it takes away freedom of choice. The only way to increase your fame within the House is to sell slaves to residents. And to sell slaves to residents, you need to live in any other place beside slums. And to do that, you need to raise your fame. It's kind of loop. And while it's possible to use initial fame that your slaver gets from the start (for some strange reason everyone get Serpis fame, disregarding they starting alignment), it's virtually impossible to play as a max.difficulty guys (because he get's only 200$ at the start, and they'll be gone in a moment). The thing you've done, by limiting sales to residents is already done by limiting sales to elite customers.
Yeah, like I said the faction thing was a bit of a bad idea. As it stands I think the faction setup is too convoluted for it to work well like that. The current setup I'm playing with is to tie house access to player fame. I've gotten rid of the 'slave soldiers' option since it's redundant with the guild subpurchaser and I think I'll open up access to Outcasts residences from the start which should allow you a reasonable selection of D and C grade purchasers. As I said above, I was hoping to make the housing upgrade process a bit more compelling and worthwhile so that it's something to work towards. Essentially, I want to create things for the player to sink their money into, so that there's a motive to training better slaves. That means noticeable and worthwhile upgrades. I understand the point about player choice, but at the moment the game doesn't really tell you what you did to get access to the houses at the start and even then the difference between each house option seems cosmetic only.

Anyway, those are just my thoughts. Since you're working on an English version, if you don't mind I'll put any code I do in your GitHub fork. I'm more than happy to share with the guys doing the Russian community patch, but since a lot of what I'm doing is related to translation and formatting it's probably not useful to them.
 
Last edited:

GargantuaBlarg

Lurker
RP Moderator
Joined
Sep 23, 2009
Messages
2,859
Reputation score
254
Re: [SLG] Jack-o-nine-tails

This looks pretty hype. Would prefer to wait until that talky-alternative to Auspex or whatever is finished being translated, though. Watchan.
 

PaganWarlord

Jungle Girl
Joined
Jun 21, 2013
Messages
36
Reputation score
2
Re: [SLG] Jack-o-nine-tails

A quick newbie question if you don't mind.

Is there any tool to decompile qsp files back to txt, or did you guys got your source files from Old Huntsman/russian community?
I got txt2gam but it didn't have backward functionality like I hoped.

My knowledge of russian is nonexistent and my programming skills are rusty at best so I wouldn't be of much help to translation/patch project, however there is still the older game from Old Huntsman - Royal Hunt Deluxe left untouched so I hoped to attempt machine translation to kill time waiting for progress on this project.
 

magotpie

Jungle Girl
Joined
Jul 6, 2013
Messages
8
Reputation score
1
Re: [SLG] Jack-o-nine-tails

A quick newbie question if you don't mind.

Is there any tool to decompile qsp files back to txt, or did you guys got your source files from Old Huntsman/russian community?

project.
Not sure if this would help, but you can google for qgen400.
Monceber mentioned it earlier on.
Controls are quite intuitive.. and in english.
 

PaganWarlord

Jungle Girl
Joined
Jun 21, 2013
Messages
36
Reputation score
2
Re: [SLG] Jack-o-nine-tails

Not sure if this would help, but you can google for qgen400.
Monceber mentioned it earlier on.
Controls are quite intuitive.. and in english.
Thanks.
My ability to read has failed me again, time to look for my road cone of shame - not the most elegant of head wears but appropriate in this situation.
 

moreporn

Demon Girl Master
Joined
Sep 3, 2012
Messages
187
Reputation score
9
Re: [SLG] Jack-o-nine-tails

is it easier translating from russian or Japanese?
 
OP
Monceber

Monceber

Demon Girl Master
Joined
Jan 9, 2011
Messages
206
Reputation score
81
Re: [SLG] Jack-o-nine-tails

Would prefer to wait until that talky-alternative to Auspex or whatever is finished being translated, though.
Yep, that's done already with previous patch. This talky alternative can be accessed by 'Question mark -> What to you think about me?'. This way slave will tell you auspex information in roundabout way.

moreporn said:
is it easier translating from russian or Japanese?
It's subjective. For me, who is struggling to learn kanji to qualify for at least JLPT4 translating from Japanese is harder, if not impossible. Comparing to Japanese... yes, it's easier to translate from Russian to English, mainly for the reason that I didn't learn Russian - I learned English.
Talking from subjective side - Russian is easier simply because they have roughly the same structure of sentence as the English ones. I don't know about Japanese, but, afaik, they have kind of roundabout way of putting words together.

BreezeIndigo said:
If I can get the split_file.py thing to work properly I'd be happy to share any of the changes I make through there.
I have the same feeling. I managed to make it work yesterday, but that was only with my vanilla translation. After applying your patch I returned to square one.

BreezeIndigo said:
Oddly enough though, the 'milkmaid' option doesn't seem to cause pregnancy
I'd rather think that bug hides somewhere around here.

BreezeIndigo said:
Yeah, the faction housing thing was a bad idea and I apologize for that.
Nothing to apologize for, it's not like I'd feel offended just because you had an idea to change/improve the game (which, coincidentally, is not mine :D). Your idea wasn't necessarily wrong, it wasn't just thought-out till the very end, taking into consideration all possible options.

BreezeIndigo said:
Anyway, those are just my thoughts. Since you're working on an English version, if you don't mind I'll put any code I do in your GitHub fork. I'm more than happy to share with the guys doing the Russian community patch, but since a lot of what I'm doing is related to translation and formatting it's probably not useful to them.
Surely I don't mind. Just let me get a hang on this weird splitting procedure :confused:
 

Xilnold

Lurker
Joined
Dec 28, 2009
Messages
49
Reputation score
11
Re: [SLG] Jack-o-nine-tails

Can I get a link to the game? Thank you.

As a suggestion, can you mention the most current version of the game in the OP, and keep it updated? That way people could hunt it down themselves instead of their only option being to PM you.
 

PaganWarlord

Jungle Girl
Joined
Jun 21, 2013
Messages
36
Reputation score
2
Re: [SLG] Jack-o-nine-tails

Can I get a link to the game? Thank you.

As a suggestion, can you mention the most current version of the game in the OP, and keep it updated? That way people could hunt it down themselves instead of their only option being to PM you.
Link for the full game, if that's what you are asking, will not be happening for the reasons mentioned in op. Forum does not openly accommodate loli and more extreme content, not that some of us agree with it but rules are rules.

As for English patch there are currently two versions: Monceber's one in the op, and BreezeIndigo's on page 12 (somewhat more complete but contains game play modifications).

I don't have much time now to upload full patched ver but I will send you PM with separate links for main game
 

GargantuaBlarg

Lurker
RP Moderator
Joined
Sep 23, 2009
Messages
2,859
Reputation score
254
Re: [SLG] Jack-o-nine-tails

Oh god I have no idea what I am doing.

Does anywhere sell Prozac? I think my slaves are gonna need some Prozac.
 

BreezeIndigo

Jungle Girl
Joined
Jan 15, 2012
Messages
22
Reputation score
4
Re: [SLG] Jack-o-nine-tails

Link for the full game, if that's what you are asking, will not be happening for the reasons mentioned in op. Forum does not openly accommodate loli and more extreme content, not that some of us agree with it but rules are rules.

As for English patch there are currently two versions: Monceber's one in the op, and BreezeIndigo's on page 12 (somewhat more complete but contains game play modifications).

I don't have much time now to upload full patched ver but I will send you PM with separate links for main game
I'd suggest you grab the first version I posted a few pages back. The R2 version I posted is still pretty buggy. I was planning on putting up a slightly newer R2 version with some of the weird gameplay changes I put in there cut back, but I'm checking something with the Russian community patch guys re: a piece of code I changed. On the other hand, new version will contain a few machine translations of parts of the 'Active Sex' stuff. Hopefully that will tide us over until Monceber comes out with his stuff which will feature translations done by someone who actually can read the stuff.
 

Xilnold

Lurker
Joined
Dec 28, 2009
Messages
49
Reputation score
11
Re: [SLG] Jack-o-nine-tails

Both of your MEGA links seem to be broken, BreezeIndigo.
 

stuntcock42

Demon Girl Master
Joined
Jul 4, 2011
Messages
156
Reputation score
53
Re: [SLG] Jack-o-nine-tails

Teaser screenshot for the Trainer application (no links yet; it needs a few more hours of work before release):



The dynamic memory allocation scheme used by QSP is a major hindrance, and I'm a bit burned-out after chasing down some of the more 'evasive' variables (and failing to pin down many more). I'd like to get some initial feedback and discuss a few design concepts, so that I can return to the code with a more positive attitude. Please feel free to comment on any of the following:

  • All changes are made immediately. There are no buttons for "confirm" or "reset" or "undo" - because such features add complexity (more coding) without adding much safety, and because they tend to impede experienced users.
    • I'm expecting users to Save the game before launching the trainer, and to keep a backup Save (a pre-cheating pristine file) just in case the Trainer does something nasty or unrecoverable. Since users are already creating lots of Save files to work with the various game versions, I don't foresee this being a major inconvenience.
    • Although memory is altered immediately, the game UI is based on static HTML - it will not show the change until it gets redrawn (e.g. by moving to a new location).
  • The categories are arbitrary and incomplete. For example, I have an address for "the current game day (e.g. Day: 1)" but I don't have a category for it. Would this be "World" (since it's a sort-of calendar thing) or "Guy" (days since he became a slave trainer) or "House" (since it's implicated in finances and bill-payments) or should I just toss it into a "Miscellaneous" category with some other misfits?
    • Similarly, it might make sense to put the "Guy" and both "Girl" subcategories within "House" (that's where they live!) - so that they're more cleanly separated from any NPC categories that get added later (as well as the four cryostorage pods). Comments or suggestions are welcome.
    • When the UI is expanded, it quickly becomes "too tall" - you might see a field (e.g. "Beauty") but you'd need to scroll up in order to determine whether it belongs to Girl #1 or Girl #2. For now, I've simply color-coded the sections (e.g. blue = guy, pink = girl) but I'm open to other suggestions. Or maybe I'm just over-analyzing, and players are capable of remembering which sections they're currently dealing with.
  • I started developing the trainer in LUA but I found it much too limiting. Unless someone can make a really compelling argument, I'm going to proceed with C#.
  • The UI design is deliberately "tall and skinny" because I envision it being used side-by-side with the game window. The user can therefore easily move the mouse back and forth between the two windows. Since the game is entirely mouse-driven, I made the Trainer UI heavily mouse-driven as well.
    • If anyone out there prefers to play the game fullscreen, then the trainer would be inconvenient (lots of Alt-Tab switching). I can't think of an obvious way to deal with this, other than "assign hotkeys to each variable so that it can be manipulated while the trainer is in the background."
    • Other suggestions are welcome.
    • Alternatively, if you can think of a reason why the trainer UI ought to be "short and fat" then let me know.
    • It's possible to make the UI elements "drag and drop"-able, but it would involve more work.
  • The trainer works with the official Russian version of the game (and the Russian Github version), so I plan to include Russian labels for the various fields and sliders. I'll probably just machine-translate the whole .resx file and then append the original English strings for context.
  • The trainer enforces max and min values on most numeric fields, based on the normal ranges used by the game (max is usually 5, min is either 0 or -5). This is mostly done "for the user's protection" - I'm trying to keep the Trainer stable, and writing an out-of-range value can cause UI elements to disappear (or crash the game).
    • There are a few cases wherein setting an out-of-range value can actually alter gameplay or provide an additional challenge, but I'm not sure how to visually "explain" this to the user.
    • Possible fix: sliders could have a "green" (normal) range and a "yellow" (warning/caution) range. Sliders would normally be confined to the green values but the user could switch to "expert mode" and explore the territory beyond.
  • QSP string allocation uses tight packing. If you change the value of a string externally (e.g. via the Trainer or Cheat Engine), then there's a risk that you'll accidentally overwrite part of an adjacent string (which can crash your game).
    • As a countermeasure, I've simply prevented the user from editing most of the strings (e.g. slave name, master name).
    • Caution: There's one important category of strings which remain editable: filenames. The aforementioned overwrite problem can occur here. For now, I'd advise users to exercise caution, and to avoid switching from a short filename (e.g. 541_sepia.jpg) to a long one (e.g. isabella_ava_sepia.jpg).
    • Possible fix: the code could simply scan the implicated memory space and abort the action if it detects a risk of overwrite. It might be confusing (and restrictive) for users, but it would be safer than the current behaviour.
    • Possible fix: This problem can be fixed in code: find an empty memory block of sufficient size, dump the new string into it, and update the game's memory pointer. However, that would involve a lot of work and testing, and the new string might not be covered by the QSP save/load logic, so I'd prefer not to do it.
  • File-selection is done via dropdown menus rather than Browse windows (mostly because I'm lazy, and also because I find them visually cleaner). The menus use simple wildcard searches, so it's possible to paste new image files into the game folder and then use them in your game.
    • Bonus feature: you can use animated GIFs by dropping them into the appropriate folders (I've tested it and it works fine). With a bit of modding, we could include animated sex scenes.
    • Caveat: the filename-length risk applies here. If your newly-added file has a short name then there should be no problem.
    • Caveat: the game has a lot of internal variables for image paths, and the trainer adjusts only a small subset of them. Thus: you can easily switch from a "redhead" to a "blonde" portrait, but you'll still see sex scenes involving the redhead.
      • This could be disturbing - imagine that you've customized a waifu character with perfect stats and traits, but then you try to have sex and you're presented with a loli image. :eek:
      • I'll investigate this issue. It may be possible to reset many/all of the image paths with a relatively small effort. I'm not making any promises here; if you intend to fine-tune a character then I'd advise you to begin with one whose original appearance is acceptable.
    • Caveat: if you add an image, please ensure that it's consistent with the other images in the folder (e.g. pixel dimensions, transparency, file format, file extension, and any suffices such as "_sepia"). It's not my fault if you break your game by doing something silly.
    • You might ask "why are you limiting me via the dropdown menus? I don't like the sepia-toned images, and I'd rather have full-color portraits on the main menu." This is a valid complaint, but the memory structure is unpredictable and my code needs to see suffices such as "_gray" and "_sepia" in order to sort things out. So I'm not going to include the full-color images in the dropdowns. Maybe later - if I can find a clever workaround.
  • The trainer uses relative paths and wildcard lookups. It ought to be fairly stable w/r/t things like [FAT32 | NTFS] or [x86 | x64]. However, the game's subfolder structure MUST remain intact. If you start renaming and copy-pasting subfolders then the Trainer will probably break.
  • The trainer was written and tested in a 64-bit environment but should work fine on x86.
    • If it doesn't then that's a serious mistake on my part; please report it.
  • QSP pointer addresses are path-dependent. The relative position of related variables (such as "Slave Name" and "Slave Mood") can and will shift depending on the circumstances of object construction (e.g. "bought from slave market" vs "rescued in battle"). Therefore, it's possible that the Trainer will correctly link itself to one variable but fail to link to another.
    • Consequence: the Trainer will attempt to detect such problems, and will disable any UI elements (sliders, dropdown menus, etc) which correspond to unstable memory addresses. If you see a slider that doesn't work, it probably isn't a bug - it's a safety measure. You can probably play around with the sliders immediately adjacent to the broken one, without any ill effects.
    • Workaround: If this behaviour prevents you from editing an important value, then you can try to fix it by "jiggling" the memory structure:
      • save the game
      • promote the Slave to Assistant
      • demote the Assistant to Slave
      • restart the Trainer application
      • if it's still stuck, reload the save file and restart the Trainer again
      • if it's still stuck, restart the game, load the file, and restart the Trainer
    • Consequence: each time that you upgrade your .qsp file, a few of the Trainer feature will probably stop working. The exact number of casualties will depend on the scope of changes made in the underlying code. For example, the difference between the official release and translation v0.3R2 is about a dozen addresses.
  • The slider "ticks" are unlabeled. I don't want to hardcode in a specific set of labels ("weak", "strong", "very strong", etc) because it would be a duplication of effort (and it would add brittleness).
    • Possible fix: the entire game code exists (unobfuscated, uncompiled) in memory. I could simply extract the various labels (as specified in your current .qsp file) from memory and bind them to the appropriate sliders.
    • It's a pretty "meh" feature, though. When you make a change, you can immediately Alt-Tab over to the game and see the new description ("very strong" or whatever) so putting additional text into the Trainer doesn't add much value. And I expect that most users will simply set sliders to min/max values. They're thinking "I want my slave to be as beautiful as possible" rather than "I want my slave to be described as Picturesque." Confirm/deny?
  • Most people probably know this, but just in case: the Trainer application can modify the memory of other applications and services on your computer. By default, your operating system will not allow an application to do this, because it's a serious security risk.
    • This is not a joke. For instance, if I scanned the memory of your internet browser I could potentially steal bank account information. Before running the trainer, you should ask yourself "how much am I willing to potentially lose, in order to cheat at a porno game?"
    • I've developed the application in good faith, and I have not included any malicious code in it. However, a malicious jerk would tell you the same thing (to trick you into installing his malware). Feel free to virus-scan the program before running it, or run it on a computer which lacks internet access. I won't be offended. I'm just an anonymous jerk on the internet and you have no reason to trust me.
    • When you launch the application, Windows UAC will prompt you to allow elevated permissions. If you decline, then the Trainer simply will not work.
    • If you're not willing to accept this risk then you can use the Cheat Engine table instead. It has fewer features but it's still effective for many tasks. When using Cheat Engine, you have strict control over which processes it attaches to (you must manually connect it to FastQSP.exe), so there's no danger of sniping passwords or whatever. I'll post a current .CT file alongside the download links for the Trainer.
    • I'll probably release the source code when I'm satisfied with the state of the Trainer, so if you're nervous then you can just wait until that happens, download the code, review it for malware, and then compile it for yourself.
  • The game uses a lot of interlinked variables and it will sometimes overwrite the changes that you make in the Trainer (e.g. by overwriting variable values whenever you enter a new Location).
    • Workaround: use the Lock checkbox. The Trainer will continuously reassert the desired value (default cycle time = 500ms).
    • Caveat: locking a variable will sometimes cause stupid effects, because you're controlling the "symptom" rather than the "cause." For instance, if you lock the guy's dirtiness value to 0 then his status will always appear clean, and you'll never be prompted to bathe, but the game will gradually modify a (hidden) hygiene value and his mood will gradually decay.
    • By contrast, locking Arousal to 5 will cause your slave to always be interested in sex but it doesn't have weird side-effects and it's a kinda-legitimate way to play the game (e.g. "I want to feed her aphrodisiacs but the alchemy interface is confusing and it never works properly, so let's just make her perma-horny.")
  • The Trainer will keep itself up-to-date. If you tutor your slave in a particular skill, then the associated slider will advance. Therefore, it isn't necessary to "refresh" the Trainer.
    • For example, if you launch the Trainer at the start of a game, then the "Girl #1" section will be disabled because there is no girl in the Slave slot. Buy one (or rescue one) and the Trainer will refresh automatically.
    • Input needed: whenever a new section becomes available (e.g. Girl #1 section, because you're bought a girl), that section will immediately become visible and expanded. I wanted to make it very obvious for users, so that they would understand that a new set of features (which was mysteriously absent) had just become available. However, I suppose that it might be distracting or annoying. Comments?
    • I've provided a "Force Refresh" button, but it's mostly intended for debugging and it will almost never solve an actual problem.
  • The whole "Girl #2" memory block is currently unexplored and won't be functional in the first release. I'll need many hours of work to map it out before I can start to add it to the Trainer UI.
    • It's wholly dissimilar to the Girl #1 block, which is a goddamned travesty. Object-orientiation should make this sort of thing trivial for both the application developer AND the mod developer, but instead it requires giant copy-pasted blocks of code and hours of pointer-chasing. QSP makes me :mad:
 

igotnostuffs

Grim Reaper
Joined
Dec 5, 2013
Messages
415
Reputation score
49
Re: [SLG] Jack-o-nine-tails

Why not let us see the source code of your trainer application?
 

BreezeIndigo

Jungle Girl
Joined
Jan 15, 2012
Messages
22
Reputation score
4
Re: [SLG] Jack-o-nine-tails

Both of your MEGA links seem to be broken, BreezeIndigo.
I was in the process of updating the R2 link when one of the guys doing the Russian community patch got in touch and let me know about a bug in one of my fixes. He's got an updated fix so I'm going to put that in and then re-release. That link should come back up.

No idea why the R1 link is broken. In any case, there should be a reasonably stable R2 link back up again in a few hours when I get around to fixing up the code.

Teaser screenshot for the Trainer application (no links yet; it needs a few more hours of work before release):

The dynamic memory allocation scheme used by QSP is a major hindrance, and I'm a bit burned-out after chasing down some of the more 'evasive' variables (and failing to pin down many more). I'd like to get some initial feedback and discuss a few design concepts, so that I can return to the code with a more positive attitude. Please feel free to comment on any of the following:

  • All changes are made immediately. There are no buttons for "confirm" or "reset" or "undo" - because such features add complexity (more coding) without adding much safety, and because they tend to impede experienced users.
    • I'm expecting users to Save the game before launching the trainer, and to keep a backup Save (a pre-cheating pristine file) just in case the Trainer does something nasty or unrecoverable. Since users are already creating lots of Save files to work with the various game versions, I don't foresee this being a major inconvenience.
    • Although memory is altered immediately, the game UI is based on static HTML - it will not show the change until it gets redrawn (e.g. by moving to a new location).
  • The categories are arbitrary and incomplete. For example, I have an address for "the current game day (e.g. Day: 1)" but I don't have a category for it. Would this be "World" (since it's a sort-of calendar thing) or "Guy" (days since he became a slave trainer) or "House" (since it's implicated in finances and bill-payments) or should I just toss it into a "Miscellaneous" category with some other misfits?
    • Similarly, it might make sense to put the "Guy" and both "Girl" subcategories within "House" (that's where they live!) - so that they're more cleanly separated from any NPC categories that get added later (as well as the four cryostorage pods). Comments or suggestions are welcome.
    • When the UI is expanded, it quickly becomes "too tall" - you might see a field (e.g. "Beauty") but you'd need to scroll up in order to determine whether it belongs to Girl #1 or Girl #2. For now, I've simply color-coded the sections (e.g. blue = guy, pink = girl) but I'm open to other suggestions. Or maybe I'm just over-analyzing, and players are capable of remembering which sections they're currently dealing with.
  • I started developing the trainer in LUA but I found it much too limiting. Unless someone can make a really compelling argument, I'm going to proceed with C#.
  • The UI design is deliberately "tall and skinny" because I envision it being used side-by-side with the game window. The user can therefore easily move the mouse back and forth between the two windows. Since the game is entirely mouse-driven, I made the Trainer UI heavily mouse-driven as well.
    • If anyone out there prefers to play the game fullscreen, then the trainer would be inconvenient (lots of Alt-Tab switching). I can't think of an obvious way to deal with this, other than "assign hotkeys to each variable so that it can be manipulated while the trainer is in the background."
    • Other suggestions are welcome.
    • Alternatively, if you can think of a reason why the trainer UI ought to be "short and fat" then let me know.
    • It's possible to make the UI elements "drag and drop"-able, but it would involve more work.
  • The trainer works with the official Russian version of the game (and the Russian Github version), so I plan to include Russian labels for the various fields and sliders. I'll probably just machine-translate the whole .resx file and then append the original English strings for context.
  • The trainer enforces max and min values on most numeric fields, based on the normal ranges used by the game (max is usually 5, min is either 0 or -5). This is mostly done "for the user's protection" - I'm trying to keep the Trainer stable, and writing an out-of-range value can cause UI elements to disappear (or crash the game).
    • There are a few cases wherein setting an out-of-range value can actually alter gameplay or provide an additional challenge, but I'm not sure how to visually "explain" this to the user.
    • Possible fix: sliders could have a "green" (normal) range and a "yellow" (warning/caution) range. Sliders would normally be confined to the green values but the user could switch to "expert mode" and explore the territory beyond.
  • QSP string allocation uses tight packing. If you change the value of a string externally (e.g. via the Trainer or Cheat Engine), then there's a risk that you'll accidentally overwrite part of an adjacent string (which can crash your game).
    • As a countermeasure, I've simply prevented the user from editing most of the strings (e.g. slave name, master name).
    • Caution: There's one important category of strings which remain editable: filenames. The aforementioned overwrite problem can occur here. For now, I'd advise users to exercise caution, and to avoid switching from a short filename (e.g. 541_sepia.jpg) to a long one (e.g. isabella_ava_sepia.jpg).
    • Possible fix: the code could simply scan the implicated memory space and abort the action if it detects a risk of overwrite. It might be confusing (and restrictive) for users, but it would be safer than the current behaviour.
    • Possible fix: This problem can be fixed in code: find an empty memory block of sufficient size, dump the new string into it, and update the game's memory pointer. However, that would involve a lot of work and testing, and the new string might not be covered by the QSP save/load logic, so I'd prefer not to do it.
  • File-selection is done via dropdown menus rather than Browse windows (mostly because I'm lazy, and also because I find them visually cleaner). The menus use simple wildcard searches, so it's possible to paste new image files into the game folder and then use them in your game.
    • Bonus feature: you can use animated GIFs by dropping them into the appropriate folders (I've tested it and it works fine). With a bit of modding, we could include animated sex scenes.
    • Caveat: the filename-length risk applies here. If your newly-added file has a short name then there should be no problem.
    • Caveat: the game has a lot of internal variables for image paths, and the trainer adjusts only a small subset of them. Thus: you can easily switch from a "redhead" to a "blonde" portrait, but you'll still see sex scenes involving the redhead.
      • This could be disturbing - imagine that you've customized a waifu character with perfect stats and traits, but then you try to have sex and you're presented with a loli image. :eek:
      • I'll investigate this issue. It may be possible to reset many/all of the image paths with a relatively small effort. I'm not making any promises here; if you intend to fine-tune a character then I'd advise you to begin with one whose original appearance is acceptable.
    • Caveat: if you add an image, please ensure that it's consistent with the other images in the folder (e.g. pixel dimensions, transparency, file format, file extension, and any suffices such as "_sepia"). It's not my fault if you break your game by doing something silly.
    • You might ask "why are you limiting me via the dropdown menus? I don't like the sepia-toned images, and I'd rather have full-color portraits on the main menu." This is a valid complaint, but the memory structure is unpredictable and my code needs to see suffices such as "_gray" and "_sepia" in order to sort things out. So I'm not going to include the full-color images in the dropdowns. Maybe later - if I can find a clever workaround.
  • The trainer uses relative paths and wildcard lookups. It ought to be fairly stable w/r/t things like [FAT32 | NTFS] or [x86 | x64]. However, the game's subfolder structure MUST remain intact. If you start renaming and copy-pasting subfolders then the Trainer will probably break.
  • The trainer was written and tested in a 64-bit environment but should work fine on x86.
    • If it doesn't then that's a serious mistake on my part; please report it.
  • QSP pointer addresses are path-dependent. The relative position of related variables (such as "Slave Name" and "Slave Mood") can and will shift depending on the circumstances of object construction (e.g. "bought from slave market" vs "rescued in battle"). Therefore, it's possible that the Trainer will correctly link itself to one variable but fail to link to another.
    • Consequence: the Trainer will attempt to detect such problems, and will disable any UI elements (sliders, dropdown menus, etc) which correspond to unstable memory addresses. If you see a slider that doesn't work, it probably isn't a bug - it's a safety measure. You can probably play around with the sliders immediately adjacent to the broken one, without any ill effects.
    • Workaround: If this behaviour prevents you from editing an important value, then you can try to fix it by "jiggling" the memory structure:
      • save the game
      • promote the Slave to Assistant
      • demote the Assistant to Slave
      • restart the Trainer application
      • if it's still stuck, reload the save file and restart the Trainer again
      • if it's still stuck, restart the game, load the file, and restart the Trainer
    • Consequence: each time that you upgrade your .qsp file, a few of the Trainer feature will probably stop working. The exact number of casualties will depend on the scope of changes made in the underlying code. For example, the difference between the official release and translation v0.3R2 is about a dozen addresses.
  • The slider "ticks" are unlabeled. I don't want to hardcode in a specific set of labels ("weak", "strong", "very strong", etc) because it would be a duplication of effort (and it would add brittleness).
    • Possible fix: the entire game code exists (unobfuscated, uncompiled) in memory. I could simply extract the various labels (as specified in your current .qsp file) from memory and bind them to the appropriate sliders.
    • It's a pretty "meh" feature, though. When you make a change, you can immediately Alt-Tab over to the game and see the new description ("very strong" or whatever) so putting additional text into the Trainer doesn't add much value. And I expect that most users will simply set sliders to min/max values. They're thinking "I want my slave to be as beautiful as possible" rather than "I want my slave to be described as Picturesque." Confirm/deny?
  • Most people probably know this, but just in case: the Trainer application can modify the memory of other applications and services on your computer. By default, your operating system will not allow an application to do this, because it's a serious security risk.
    • This is not a joke. For instance, if I scanned the memory of your internet browser I could potentially steal bank account information. Before running the trainer, you should ask yourself "how much am I willing to potentially lose, in order to cheat at a porno game?"
    • I've developed the application in good faith, and I have not included any malicious code in it. However, a malicious jerk would tell you the same thing (to trick you into installing his malware). Feel free to virus-scan the program before running it, or run it on a computer which lacks internet access. I won't be offended. I'm just an anonymous jerk on the internet and you have no reason to trust me.
    • When you launch the application, Windows UAC will prompt you to allow elevated permissions. If you decline, then the Trainer simply will not work.
    • If you're not willing to accept this risk then you can use the Cheat Engine table instead. It has fewer features but it's still effective for many tasks. When using Cheat Engine, you have strict control over which processes it attaches to (you must manually connect it to FastQSP.exe), so there's no danger of sniping passwords or whatever. I'll post a current .CT file alongside the download links for the Trainer.
    • I'll probably release the source code when I'm satisfied with the state of the Trainer, so if you're nervous then you can just wait until that happens, download the code, review it for malware, and then compile it for yourself.
  • The game uses a lot of interlinked variables and it will sometimes overwrite the changes that you make in the Trainer (e.g. by overwriting variable values whenever you enter a new Location).
    • Workaround: use the Lock checkbox. The Trainer will continuously reassert the desired value (default cycle time = 500ms).
    • Caveat: locking a variable will sometimes cause stupid effects, because you're controlling the "symptom" rather than the "cause." For instance, if you lock the guy's dirtiness value to 0 then his status will always appear clean, and you'll never be prompted to bathe, but the game will gradually modify a (hidden) hygiene value and his mood will gradually decay.
    • By contrast, locking Arousal to 5 will cause your slave to always be interested in sex but it doesn't have weird side-effects and it's a kinda-legitimate way to play the game (e.g. "I want to feed her aphrodisiacs but the alchemy interface is confusing and it never works properly, so let's just make her perma-horny.")
  • The Trainer will keep itself up-to-date. If you tutor your slave in a particular skill, then the associated slider will advance. Therefore, it isn't necessary to "refresh" the Trainer.
    • For example, if you launch the Trainer at the start of a game, then the "Girl #1" section will be disabled because there is no girl in the Slave slot. Buy one (or rescue one) and the Trainer will refresh automatically.
    • Input needed: whenever a new section becomes available (e.g. Girl #1 section, because you're bought a girl), that section will immediately become visible and expanded. I wanted to make it very obvious for users, so that they would understand that a new set of features (which was mysteriously absent) had just become available. However, I suppose that it might be distracting or annoying. Comments?
    • I've provided a "Force Refresh" button, but it's mostly intended for debugging and it will almost never solve an actual problem.
  • The whole "Girl #2" memory block is currently unexplored and won't be functional in the first release. I'll need many hours of work to map it out before I can start to add it to the Trainer UI.
    • It's wholly dissimilar to the Girl #1 block, which is a goddamned travesty. Object-orientiation should make this sort of thing trivial for both the application developer AND the mod developer, but instead it requires giant copy-pasted blocks of code and hours of pointer-chasing.
Handy, might be able to do some debugging with this. Spares me trying to figure out where I can plonk a debug button in the game.

QSP makes me :mad:
This.
 

nonameforme

Demon Girl
Joined
Mar 26, 2011
Messages
85
Reputation score
3
Re: [SLG] Jack-o-nine-tails

Noob question sir,

How do I appoint assistant?. What the slave need to be appoint-able?
I have a D-grade maid+cook+account (none are green-level thought) and I want to appoint her as assistance.

So does level or grade is required? Or I have to do specific event first?



Also, What's the 'required' level of skill to level my slave to D>C>B>A???

What is more important between....

'the varieties of things she can do...'
Or 'How perfection can she do one thing (job)'.
 
Last edited:

Joshyan

Jungle Girl
Joined
Sep 17, 2013
Messages
26
Reputation score
2
Re: [SLG] Jack-o-nine-tails

Noob question sir,

How do I appoint assistant?. What the slave need to be appoint-able?
I have a D-grade maid+cook+account (none are green-level thought) and I want to appoint her as assistance.

So does level or grade is required? Or I have to do specific event first?



Also, What's the 'required' level of skill to level my slave to D>C>B>A???

What is more important between....

'the varieties of things she can do...'
Or 'How perfection can she do one thing (job)'.

Devotion Level 3, you can check at aura, it is the last line.
It raises when your slave is happy for a long time, and raise at very slow rate.

I recommend you to max out Nurse too since it help improve slave health faster. Maid, Cook and Account are leveling up over time but by you should max it by the time devotion level reach level 3.
 
Last edited:

BreezeIndigo

Jungle Girl
Joined
Jan 15, 2012
Messages
22
Reputation score
4
Re: [SLG] Jack-o-nine-tails

Code:
https://mega.co.nz/#!MgZVASbB!Lm9AKC9tpeCs2-38ZyuYXPr49J4Q3NPa5Dbo1TBhW7g
Updated R2 version. Big changes noted below (detailed changes listed in the included changelog):

  • Reverted most of the changes to the faction system, the experimental changes to the housing setup remain in place for now.
  • Integrated fixes from the Russian community patch. All credit for this work goes to the Russian guys who wrote this.
  • A few small bugfixes (see previous threads). I've elected to keep the code that prevents chestbursters with max fiend skill. Reason being that if you elect to make your slave oviparous instead of sterilising, you can still get chestbursters, which kind of sucks.
  • Rudimentary translations to the 'Active Sex' menu.

As always, save compatibility is out (blame QSP for that) and I can make no guarantee about bugginess. I simply don't have the time or energy to test it extensively, but I will say that this one should be less buggy than previous versions (fingers crossed). My hope is that this one will tide people over until Monceber releases something new.
 
Last edited:
Top