CREATE YOUR AI CUM SLUT ON CANDY.AI TRY FOR FREE
x

Sarkath

Active Member
Sep 8, 2019
531
908
Then again, even accepting that updating the engine would be a pain in the ass, it is still a decision she made to continue with an outdated version, so...
It's honestly less about using modern Java features than about how LT's engine is designed. It's been a while since I've taken a deep dive into the code so it's possible that some of these issues may have been corrected, but many of the performance issues step from a complete lack of understanding of how the tools work.

Memory thrashing was/is one serious issue the game had/has. There are several ways of dealing with large lists. A somewhat naïve but effective approach would be to grab the whole collection and cache it. A better approach would be to load bits of the collection on demand. The LT approach was to retrieve the entire collection every time it's needed. If it's used in a tight loop this can cause enormous performance issues. I remember seeing this pattern in a few places:

1. Grab a collection of objects to update (let's call it updateObjects).
2. Get the next item from updateObjects.
3. Grab a large list of supporting data and put it into a new collection.
4. Perform the update on the object.
5. If there are still objects to update, jump to 2. Otherwise, end.

The problem is step #3. It was causing the Java VM to allocate memory for the large collection, populate it, use whatever data is there, and then during the next iteration it would allocation another new collection, populate it, etc etc. Assuming the collection in step 3 is 200MB, if there are 100 objects to update in updateObjects, that's 20GB of allocations. That essentially forces Java to garbage collect (that is, clean up abandoned objects and collections) multiple times in a tight loop, which causes the game to grind to a screeching halt while Java desperately tries to clean up the mess.

To be clear, if this were done in non-GC language like C/C++ the game would crash at this point. Runtimes like Java or .NET will do everything in their power to keep applications available at the expense of performance, which is why laymen tend to refer to them as "slow." The JRE and CLR are actually bloody fast for what they are, but they can only do so much in these sort of conditions. Like I said before: garbage in, garbage out.

This isn't just a hypothetical situation, either. At one point I measured 48GB of memory allocations between turns (with one "turn" being moving a single tile on the map, or finishing a combat or sex action).

I've tried to correct some instances of these, but I recall running into a ton of breakage because there were a lot of unexpected dependencies elsewhere in the code. It felt like every correction I made would lead to hours of hunting down a bunch of random issues, and it really just wasn't worth it for someone else's project, especially given the shaky licensing terms it's released under. Refactoring isn't always easy or straightforward, but it really shouldn't be that bad.
 

Draupnir7

Active Member
Sep 3, 2020
626
897
At one point I measured 48GB of memory allocations between turns
The several hundred gigs of error logs is one thing, but this? No. Flat-out no. That might maybe be justifiable if more NPCs moved more places more often, but Jesus fucking Christ.
That is what I get for trying to be positive. I have seen the light.

Maybe I should use LT to cook my rig and bill the new one to her.
 
  • Haha
Reactions: Sarkath

Sarkath

Active Member
Sep 8, 2019
531
908
The several hundred gigs of error logs is one thing, but this? No. Flat-out no. That might maybe be justifiable if more NPCs moved more places more often, but Jesus fucking Christ.
Sorry to break your spirit. XD

If it helps at all, that scenario would only really pop up if there were a lot of NPCs in the world. Then again, that's kind of inevitable even if you don't breed like a rabbit, especially with the plan being to add areas outside of Dominion/Submission, all of which would end up creating their own persistent NPCs. Yeah, not pretty.
 

4access

Newbie
Dec 20, 2019
43
82
To be clear, if this were done in non-GC language like C/C++ the game would crash...
But on the developer's potato PC, before it ships.

Or alternatively someone writing C/C++ would know better algorithms than someone (mis)using "collections" in Java.
 

Sarkath

Active Member
Sep 8, 2019
531
908
But on the developer's potato PC, before it ships.
I had a bit of a brain fart in my initial post. Every "Learn C++ in X Days" course worth its salt hammers in the fact that new and delete are inseparable pairs, so "step 3" wouldn't crash—it would have the same rapid allocation/deallocation behavior as what I described, only the deallocation would happen manually instead of the GC stepping in. Result: the same thing that we're seeing here.

I also failed to consider that using smart pointers in modern C++ would allow someone to write their code the same way as they would in a managed language and the compiler would just toss that pesky delete in there for them, so they wouldn't really have to think about what they're doing in that situation, either.

Or alternatively someone writing C/C++ would know better algorithms than someone (mis)using "collections" in Java.
Implying that there aren't hordes of developers who hack away at C++ without understanding what's going on under the hood (original VVVVVV C++ source code, anyone? That version actually ran worse than the Flash version on the laptop I had at the time). Not to mention that at their core STL containers are functionally equivalent to .NET/JRE collections. A C++ newbie doesn't have to know a thing about binary search trees to use std::map, the same as someone who might use Java's TreeMap or .NET's SortedDictionary.

I can understand your point with C, but that's mostly because it forces developers to implement their own data structures. It also features a ton of ways for even experienced developers to slip up and shoot themselves in the foot in a way that won't necessarily crash the program straight away. The C standard library really hasn't aged well, and just looking through the insanity of its string manipulation functions is more than enough proof of that.

(I still love C, though.)
 
Oct 1, 2023
105
110
Every "Learn C++ in X Days" course worth its salt hammers in the fact that new and delete are inseparable pairs, so "step 3" wouldn't crash—it would have the same rapid allocation/deallocation behavior as what I described, only the deallocation would happen manually instead of the GC stepping in. Result: the same thing that we're seeing here.
I wouldn't be very surprised if in such a scenario Java would be faster than the equivalent C++ code. Using a GC language sometimes has unexpected performance benefits - C++ would drop each object as soon as it goes out of scope, whereas Java would keep them around until a GC pause and then collect in bulk, which can be more performant overall. This is especially true if, say, the whole hot loop can be done without a GC pause and the garbage collection can happen afterwards when the CPU isn't busy (though if there's more memory churn than there's available RAM, I think that can't be the case). In general, it's always possible to write code in a compiled language such that it'd be faster than Java, but it's not guaranteed at all that translating naively written code from Java to e.g. C++ would be a performance improvement rather than a malus.
 
  • Like
Reactions: Sarkath

Qahlz

Member
Jul 25, 2023
361
305
Looking through the maps, I notice there's a doll factory map and I don't know how to get there. Can we do that?
Not sure if that's exactly what you mean, but it's likely the sex toy shop in Lilith's quarter of Dominion. You can get a tour of the factory by speaking with shop owner.
 

anubis1970

Engaged Member
Mar 1, 2018
2,151
2,427
Looking through the maps, I notice there's a doll factory map and I don't know how to get there. Can we do that?
Not sure if that's exactly what you mean, but it's likely the sex toy shop in Lilith's quarter of Dominion. You can get a tour of the factory by speaking with shop owner.
My understanding is that the factory in the shop is just for show and the next update is supposed to include a side quest that allows you to sneak into the true factory.
 

TheSeaofCube

Member
Jul 11, 2018
129
51
Not sure if that's exactly what you mean, but it's likely the sex toy shop in Lilith's quarter of Dominion. You can get a tour of the factory by speaking with shop owner.
No, I know how to get there. I meant this one. Apparently, in the lore it's underground below the sex toy shop you mentioned, and the tour doesn't let me go there.
Screenshot 2024-10-11 142055.png
 

cj5kn

Newbie
Nov 28, 2019
61
92
I seem to have run into a confusing bug; the game at some point became permanently convinced that my character is sleeping. Is there any debug feature to reset status effects? It's causing all sorts of problems and nothing I do through normal gameplay seems to clear it. No clue what caused it either.
Edit: just edited it out of the save file. That was surprisingly easy
 
Last edited:

BlackMamba21

Newbie
Jan 21, 2020
17
11
i wonder if innoxia will ever fix the bimbo dialogue to not be bad (why are bimbo characters saying """y'know"""" in the middle of sex, rubs me the wrong way ever time i see it happen)
 
  • Like
Reactions: Bricecube

Noah Neim

Well-Known Member
Nov 25, 2020
1,419
2,755
i wonder if innoxia will ever fix the bimbo dialogue to not be bad (why are bimbo characters saying """y'know"""" in the middle of sex, rubs me the wrong way ever time i see it happen)
I- Does it matter? I think the intention is to showcase how casual they are but you'd have to be specifc when you reffer to 'bad'
 

Ricstab

Newbie
Mar 24, 2021
79
25
How long has it been since the last update? A bit over 6 months? I wonder why people still care about this dumpster fire.
 

KaiSakurai

Member
Mar 26, 2020
110
141
Because the potential is there for something really good, even after all this misspent time.
u have to be a bit more specific:
the potential is there in the game.
no potential in inno though.

ignoring the bad coding, the game isnt that bad actually. good concept. the story that is in there so far is ok as well. seen worse stories from devs that cared more bout their project than inno does.
most that r still here just come in occasionally for a quick laugh and to clown on inno.
some check occasionally in hopes someone else picks up the game.
 
4.10 star(s) 122 Votes