Sarkath

Active Member
Sep 8, 2019
536
913
So at risk of sounding extremely noob (considering i've been playing this game for years) finally decided to explore abit more npc interactions and talked with Pix at the gym, i didn't knew training with her could give you an extra physique perk-point so i wanna ask to people that have already exploited this:

How many physique points can you farm by training with Pix?
There's no limit to the number of physique points you can get from Pix's training, but the game does enforce a limit of 100 elsewhere in the code.

So, 100. :)

If you so pedantic, I omit cases where program are allowed to directly manipulate/work with physical memory, because there are...impossible to "leak" memory?? (program lost pointer to memory block -> it think this memory is empty -> override previous data with new).
I'm not sure I follow you. Are you referring to platforms like older consoles/computers where the application has full control of the system? If so, it really depends on how they manage their memory. If they statically allocate everything then there's no chance of a leak happening. If they implement some form of dynamic memory allocation then yes, they can still leak memory as they're basically rolling their own malloc.

But still, its maybe not precise, but relatively good name for a thing that constantly allocate memory without freeing it, since there are no any agreed name for such thing/situation.
I dunno. That use is a bit too far removed from the original definition for my liking. I think I'd just rather call it "wasting resources." :p
 

NODOGAN

Well-Known Member
Dec 11, 2017
1,614
2,765
There's no limit to the number of physique points you can get from Pix's training, but the game does enforce a limit of 100 elsewhere in the code.

So, 100.
Sooo if you're patient enough (and have the money which honestly isn't an issue in this game) you can get ALL the physique stuff through this and use the perk-points ya get by leveling up elsewhere? awesome! (granted the game ain't difficult enough to do this, but the fact you can do it if you want i find cool.)
 

fudejoranek

Newbie
Oct 30, 2018
88
90
Sooo if you're patient enough (and have the money which honestly isn't an issue in this game) you can get ALL the physique stuff through this and use the perk-points ya get by leveling up elsewhere? awesome! (granted the game ain't difficult enough to do this, but the fact you can do it if you want i find cool.)
You can afford a life-time pix gym subscription within 15 minutes of the game starting by selling some slaves. This makes further sessions free. You then have to spend half a year of in-game time training with pix, always declining her shower scene because that takes time (I've fully muscle memorized the process). This is the meta for every build. Since you will get hit a lot in this game, you either have be able to kill every enemy in one turn (this is basically impossible with 4 enemies unless you use an AOE weapon) or be able to take a ton of damage on higher difficulties.

I'm half considering modifying my game to prevent me from doing this because I can't help but play efficiently.
 

tehlemon

Well-Known Member
Jan 26, 2021
1,224
1,564
So at risk of sounding extremely noob (considering i've been playing this game for years) finally decided to explore abit more npc interactions and talked with Pix at the gym, i didn't knew training with her could give you an extra physique perk-point so i wanna ask to people that have already exploited this:

How many physique points can you farm by training with Pix?
You can get 100, but don't get more than 50.

Not that you'd need to, because you can hit max level in about 10 minutes. And the extra 50 points are pretty meaningless if you're trying to break the game anyways, because anything outside of the phys tree becomes pointless and you'll have the phys tree maxed out either way.

This is the kind of thing that'd be more interesting if the game's progression was a curve and not just a single step.
 

Quintilus

Engaged Member
Aug 8, 2020
2,722
7,898
I'm not sure I follow you. Are you referring to platforms like older consoles/computers where the application has full control of the system? If so, it really depends on how they manage their memory. If they statically allocate everything then there's no chance of a leak happening. If they implement some form of dynamic memory allocation then yes, they can still leak memory as they're basically rolling their own malloc.
Have you ever seen a more or less complex program/game that runs on stack completely?? Well, mario probably and other (s)nes/sega games. But they are more like historical curiosities than actual software now. Putting a code with sounds and graphics in so little space that even screenshot of a game have bigger size that whole package...wow, cool how did you make it? Not that I ever would do that...
 
  • Like
Reactions: Sarkath

fudejoranek

Newbie
Oct 30, 2018
88
90
About AOE weapon. There are only illegal shotgun(s) and (sub)machinegun(s), right?!



Try factorio or mindustry then.
There is a wide selection in the debug menu, most of them are illegal ranged weapons, they all require some resource to do the AOE attack. You'd think there is some AOE spell in the game, but the most I could find was the fireball spell that targets two enemies.
 

Warthogs308

Member
Jan 25, 2021
129
374
That's not what a memory leak is. Even if that definition were accurate, the data in the event log is never garbage data—it's meaningful data of dubious usefulness.

A memory leak is the result of memory that has not been properly deallocated and is effectively lost. When you have to manage your own memory it's exceedingly easy to create a memory leak. Here's an example in C:

C:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    leaky_pp();
    return 0;
}

void leaky_pp() {
    char *str;
 
    str = malloc(sizeof(char) * 13);
    strcpy(str, "Hello world!");
 
    printf("%s\n", str);

    /* MEMORY LEAK: str is never freed! */
}
This example leaks 13 bytes of memory. When leaky_pp() is called, it allocates 13 bytes to hold the "Hello world!" string. The function is returned, but the memory is never frees. Since C doesn't do automatic reference counting or garbage collection, this memory remains allocated and is effectively unusable after the function returns and the pointer falls out of scope*. If leaky_pp() is called again, another 13 bytes will be leaked, as the subsequent malloc() call will allocate another 13 bytes of memory.

In this case it isn't a big deal, since the OS will clean up its memory after the program terminates. What if we were to throw the function call in a while loop, creating the traditional looping "Hello world!" program? Every single iteration would cause 13 bytes of memory to be allocated and would eventually run the system out of memory.

That's what a memory leak is. "Hello world!", for this application, was never garbage data. It's data that sticks around for far longer than intended due to a lack of an explicit deallocation. If you were writing a typical C#/Java application (and LT is just a typical Java application, large as it may be) the garbage collector would ensure that memory isn't lost like this.

To be clear, it's still possible to end up in this situation with managed languages but you have to go out of your way to do it. In C# you can cause a memory leak by calling a function like Marshal.AllocHGlobal() and not subsequently calling Marshal.FreeHGlobal() (or by P/Invoking malloc from the C library). It's not something someone is liable to do by accident while writing a typical application.

Either way (and yes, I know I'm being pedantic), what's happening in LT isn't a memory leak. It's simply that the event log was uncapped and would eventually grow to stupidly large sizes.

*It technically can be used and even freed later on, but that would require knowing its memory address. It's not particularly feasible to attain that after the fact.
I never thought I would learn something like this on a hentai thread
 
  • Haha
Reactions: Monstrous Moonshine

ebonheart2319

Member
Jul 21, 2017
135
428
All the C:
So, hypothetically this "data leak" fix would just limit the drips to 50 lines added at a time?
or worse...
Is it capping event LOGS at 50 while the processes its supposed to log can go on infinitely?
Because that almost sounds like pasting an opaque sticker over a digital display and calling it fixed...


Then again I did have to dubious honor of learning LT error reports generate exponentially.
35gigs of .txt
 
  • Wow
Reactions: Monstrous Moonshine

anubis1970

Engaged Member
Mar 1, 2018
2,172
2,458
I would hope what is does is makes the event log into a queue 50 units long, so that whenever something new enters one end the item at the other end is deleted.
 

ebonheart2319

Member
Jul 21, 2017
135
428
Error: X is not defined
Error: error has happened
???
It reported and logged an error (specifically missing mod reference because I am stupid)
The next tick copypasted the ENTIRE errorlog and generated a new error which was identical to the original error.
The third tick copypasted the ENTIRE errorlog and generated a new error which was identical to the original error.

Continue on each tick.

35gigs of .txt

In fact the game did not visibly react to that building behemoth till my rig started asking questions.

This event log cap sounds like it may have been a vaguely similar issue... if Inno coded such logs without recursive and redundant limits.
 
  • Haha
Reactions: Monstrous Moonshine

tehlemon

Well-Known Member
Jan 26, 2021
1,224
1,564
It reported and logged an error (specifically missing mod reference because I am stupid)
The next tick copypasted the ENTIRE errorlog and generated a new error which was identical to the original error.
The third tick copypasted the ENTIRE errorlog and generated a new error which was identical to the original error.

Continue on each tick.

35gigs of .txt

In fact the game did not visibly react to that building behemoth till my rig started asking questions.

This event log cap sounds like it may have been a vaguely similar issue... if Inno coded such logs without recursive and redundant limits.
Why the fuck would anyone write error logging to work that way. In what world would you ever want to completely copy a log and add it to the same log. That's just like, incredibly dumb. There's no way that would ever be useful.
 
  • Haha
Reactions: Monstrous Moonshine

Sarkath

Active Member
Sep 8, 2019
536
913
Have you ever seen a more or less complex program/game that runs on stack completely?? Well, mario probably and other (s)nes/sega games. But they are more like historical curiosities than actual software now. Putting a code with sounds and graphics in so little space that even screenshot of a game have bigger size that whole package...wow, cool how did you make it? Not that I ever would do that...
Oh yeah, I can't even imagine the sort of effort that went into those kind of games. I try to keep my stuff light and fast whenever I can, but that's like a whole different level, lol

Is it capping event LOGS at 50 while the processes its supposed to log can go on infinitely?
Because that almost sounds like pasting an opaque sticker over a digital display and calling it fixed...
Nah, as doniwil mentioned it's actually limiting the size of the event viewer in the lower-right. That's a pretty huge improvement, as it both reduces the size of the object that holds the event text as well as the overhead from the GUI control itself. That event log can get pretty long after a long game session.

I kinda doubt it fixes the error.log issues, though. :/

Why the fuck would anyone write error logging to work that way. In what world would you ever want to completely copy a log and add it to the same log. That's just like, incredibly dumb. There's no way that would ever be useful.
Wouldn't be the first time I saw someone do something like this:

C:
string ErrorList = "";

void LogError(string str) {
    ErrorList += str;
    WriteToLog(ErrorList);  // should be str
}
Pretty easy to do if you aren't paying attention, but you'd think it would have been fixed by now. :|
 

IvoryOwl

Active Member
Mar 29, 2017
761
1,412
I don't know jack about coding but if the error log can't hold more than 50 lines, then won't it become sort of redundant?
In limited experience, error logs can be useful to debug/troubleshoot/locate a problem. What the heck are you supposed to do with only 50 lines if, for example, the error is more extensive than that?
 

ebonheart2319

Member
Jul 21, 2017
135
428
I don't know jack about coding but if the error log...
The bugfix in question was the EVENT LOG in the corner is now limited to 50 lines...
The question I have, however, is if the scripts attached to that EVENT LOG behave like the error report.
The event log we SEE is limited to 50 lines, but is the game saving data elsewhere thousands/millions of lines long... like the error reports can.

The the recursive error log was brought up because of Inno's code habits. Which may or may not be related.
 
  • Thinking Face
Reactions: IvoryOwl

Tattletale21

Member
Jan 26, 2020
380
540
You can afford a life-time pix gym subscription within 15 minutes of the game starting by selling some slaves. This makes further sessions free. You then have to spend half a year of in-game time training with pix, always declining her shower scene because that takes time (I've fully muscle memorized the process). This is the meta for every build. Since you will get hit a lot in this game, you either have be able to kill every enemy in one turn (this is basically impossible with 4 enemies unless you use an AOE weapon) or be able to take a ton of damage on higher difficulties.

I'm half considering modifying my game to prevent me from doing this because I can't help but play efficiently.
everyone else: Casually forgets you can become a dragon morph with an AOE ability as a racial trait

me: one-shotting my way through the game using said dragon breath ability.

also me: BuRn In HoLy FiRe

EDIT: On Dragon-Morphs

unlike what one would expect you dont actually need to shift your face into that of a dragon morph to obtain the fire breathing ability - in fact, all you need is for the game to classify you as a dragon of some kind. so, in that sense, if you start from human and change your eyes to be draconic it would class you as a dragon morph and bam, you gain the dragon breath ability with little to no transformations and can now one-shot your way through almost anything.

oh, and you get like 50 physique and 50 arcane due to dragons being 'mythological' i guess??? but hey, who are you to argue?
 
Last edited:

Fikedever

Member
May 26, 2020
102
333
Calling it a memory leak doesn't sit right with me, though. A memory leak is when you have something unexpected sapping up resources (generally, memory that is allocated, used, and never properly deallocated), and is generally pretty difficult—though not impossible—to do in managed languages like C# and Java because the garbage collector is specifically designed to check for stuff like that. When you let an object grow indefinitely, it isn't a memory leak—it's just you using memory.
These are the top three search result definitions/descriptions of a memory leak I found:


A memory leak is the gradual deterioration of system performance that occurs over time as the result of the fragmentation of a computer's RAM due to poorly designed or programmed applications that fail to free up memory segments when they are no longer needed."
It mentions "fail to free up memory when they are no longer needed". I would consider failing to drop an RC so the GC can do it's job an indirect form of failing to call free in manually managed languages.


In , a memory leak is a type of that occurs when a incorrectly manages in a way that memory which is no longer needed is not released. A memory leak may also happen when an is stored in memory but cannot be accessed by the running code.
See bold; manually managed memory is not a requirement.


Memory leak occurs when programmers create a memory in heap and forget to delete it.
I would consider failing to deallocate an RC when no longer needed forgetting to delete it.
A memory leak is the result of memory that has not been properly deallocated and is effectively lost.

Since C doesn't do automatic reference counting or garbage collection, this memory remains allocated and is effectively unusable after the function returns and the pointer falls out of scope*.

It's data that sticks around for far longer than intended due to a lack of an explicit deallocation.

Either way (and yes, I know I'm being pedantic), what's happening in LT isn't a memory leak. It's simply that the event log was uncapped and would eventually grow to stupidly large sizes.
I see no reason why a reasonable definition (including the ones above) would require failed explicit deallocation as a requirement for a memory leak. The only requirement should be failed deallocation, whether explicit (manually managed or GC bug) or implicit (failed to drop a pointer by keeping it after its usefullness).

"A memory leak is the result of memory that has not been properly deallocated and is effectively lost."
Also, by using the word "effectively", I could also argue your definition would fit in this case. Sure, the program still has the memory address, but the reference is effectively lost to the programmer.
I dunno. That use is a bit too far removed from the original definition for my liking. I think I'd just rather call it "wasting resources." :p
"Memory leak" communicates more precisely the intent while using less letters than "wasting resources". You haven't convinced me that failed explicit deallocation is a required part of the definition. Just because the GC is now the middle man doesn't mean it isn't the programmers job to make sure memory gets released.
 

Sarkath

Active Member
Sep 8, 2019
536
913
I don't know jack about coding but if the error log can't hold more than 50 lines, then won't it become sort of redundant?
In limited experience, error logs can be useful to debug/troubleshoot/locate a problem. What the heck are you supposed to do with only 50 lines if, for example, the error is more extensive than that?
It's really more of an event log. It doesn't show too many error messages aside from, I think, errors that occur while saving/loading the game.

error.log has most of the actual error data, but it has the dupe issues that ebonheart2319 pointed out.

"Memory leak" communicates more precisely the intent while using less letters than "wasting resources". You haven't convinced me that failed explicit deallocation is a required part of the definition. Just because the GC is now the middle man doesn't mean it isn't the programmers job to make sure memory gets released.
I think you're either replying to the wrong person, misinterpreting my posts, and/or misinterpreting the problem.

The actual issue has nothing to do with allocation/deallocation. That's why I was arguing against calling it a memory leak. The issue is that the dev in question didn't put a limit on the size of an object, and that both caused issues with memory usage and performance (since said data was being shoved directly into a GUI control).

This has nothing to do with the GC failing to garbage collect, or Inno failing to release resources. I only used those as examples of instances of actual memory leaks because Quintilus was mislabeling the issue (looking back, it seemed the misunderstanding was probably a language barrier).

The reason for the argument in the first place was that the developer of LT called this situation a "memory leak" in the changelog when it simply wasn't. It was nothing more than unchecked, unrestricted, and unnecessary resource use.
 
4.10 star(s) 124 Votes