You have an issue with your random number generation, specifically in the rir_bm() function in the code, which essentially takes an upper and lower bound and generates a normal distribution from there, with optional mean and stddev parameters. (For those who aren't following any of this, you can open up the html file you get when you download the game into a text editor like VS Code and ctrl+f search for "rir_bm" and there are only two instances where the function appears in the code.)
The main issue is that for the only instance you use this function, in character stat generation, you supply a pre-calculated mean and stddev based on the range of expected values for a given stat, which in the end yields a random normal distribution that does not correspond to either the calculated mean or the mode. If the lower bound were 200, and the upper bound were 400, for example, then the actual mean that your function spits out is 260, not 300. Because you calculate the mean as (200+400)/2=300, then divide by 1000 => 0.3, and then rir_bm() calculates the normal dist and multiplies by the size of the range (400-200=200), and multiplying the normaldist by 200 multiplies the mean by 200, so now we're at 60. Then it adds the start value to get 260. This isn't as much of an issue at larger ranges which are more often used, but the problem gets worse for standard deviation.
The pre-calculated value for stddev, in the example above, is done by the calculation (400-200)/2, along with a comment in the code saying "6 is a natural distribution, so we're allowing for more frequent extremes". You mean that dividing by 6 is a natural standard deviation, and you're allowing for more frequent extremes by only dividing by 2, essentially multiplying all standard deviations by 3. Why then does it feel like all the npcs are always way too similar, if we're allowing for a massive standard deviation? Well, this value of (400-200)/2=100 gets sent to the rir_bm() after getting divided by 1000 which yields 0.1, and then gets multiplied by the range size of 200, so we ultimately get a standard deviation of 20, not 100. So we're actually decreasing the number of frequent extremes, not allowing for more of them. This is why the game lacks variety; it's a big problem that's been present for a long time now. I don't know how you would go about fixing it, but I would just use the already existing random_bm() function with the means and stddev's that are already calculated in character stat generation. And then I would adjust the stddev that is trying and failing to compensate for being severely reduced in the rir_bm() function. Maybe divide by 4 instead of 2.
Sorry for the unreadability of this comment and I'm not sure where would be a better place to put this, but I'm sure this will get to anthaum somehow. This desperately needs fixing.
Tldr; the random number generator that generates stats like height, plumpness, penis size, etc. is broken and severely limits the variation in these stats, making characters way more similar than they should be, and makes it so you almost never see characters with extreme stats. And it's honestly a pretty easy fix, so I hope this gets to the devs so they can fix a pretty bad problem this game has had for at least a year if not longer.