Others Abandoned Esoteric Erotica [v0.149 Alpha] [EsoDev]

5.00 star(s) 1 Vote

EsoDev

Newbie
Mar 4, 2020
63
62
But talk is cheap, lets benchmark:
Before I get on with why the banchrmark itself is incorrect and gives scewed results, I'll first point out this:

Your code is unreadable. As I mentioned, the way I write code tries to strike a balance between human and machine readability. While I will occasionally represent thing in the way you did there, I prefer to avoid it whenever possible. However, your code goes out of its way to obfuscate the relation between the input and output of the function, in regards to human readability.

But that's not the issue. The issue is that your benchmark is correct... but your implementation of the state it self is incorrect and it happens right here:

Code:
createsag "const-height-map" new{ ... }
To optimise the execution, you yeeted part of your solution into the game state, at global level, which is something we don't do. The game state is not there for bits and pieces of date to be cached there local data stays in the local memory space. If you instead did it the way it should be done and moved the table into your state, you'd find that in the best case scenario your way of doing it is, as I said, not faster than mine and in the worst state is indeed significantly slower.

I'm still fairly impressed with what you've shown here but, as you yourself said:

I understand how engine works, at least on high level.
And that is undebatable, yes. However most of my objections to what you've been suggesting were always related to the lack of low level understanding of the engine.

Anyway, this was an interesting encounter. If you feel like talking more about it, though, I'd suggest maybe my Discord?
 

regjunk

New Member
Nov 9, 2020
6
0
Before I get on with why the banchrmark itself is incorrect and gives scewed results, I'll first point out this:

Your code is unreadable. As I mentioned, the way I write code tries to strike a balance between human and machine readability. While I will occasionally represent thing in the way you did there, I prefer to avoid it whenever possible. However, your code goes out of its way to obfuscate the relation between the input and output of the function, in regards to human readability.
I agree, however readability was never been goal of this example, just to show that it is more efficient, and because of that I did minimal example without any changes in logic.
Why it is so unreadable?
- There is unneccessary complex logic in 'determine-height-difference', even after creating truth table there is small bug in my version (but it doesn't affect performance). Code is maybe more readable, but relation between input and output is not.
- There is no multi-dimensional arrays in engine, and you probably don't want to add them.
- Probably it can be written in more readable way, but it is not worth it for benchmark.

But that's not the issue. The issue is that your benchmark is correct... but your implementation of the state it self is incorrect and it happens right here:

Code:
createsag "const-height-map" new{ ... }
To optimise the execution, you yeeted part of your solution into the game state, at global level, which is something we don't do. The game state is not there for bits and pieces of date to be cached there local data stays in the local memory space. If you instead did it the way it should be done and moved the table into your state, you'd find that in the best case scenario your way of doing it is, as I said, not faster than mine and in the worst state is indeed significantly slower.
You correct about my intention, but not about result. I left it that way, because I prefer to have constants on global level, it doesn't affect performance (maybe a bit slower than global variant, but still faster than original).
determine-height-difference2.state:
Code:
//cg-tt-npc-height - height of NPC, either short, average or tall;
//cg-tt-height-diff - height difference of PC, either shorter, equal or taller;

createl "has-highheels" no
if =s fromarray var "cg-inv-equipped" 7 new: jump skip-shoes
    setl "has-highheels" containss strsplit decorate "[data\items\[cg-inv-equipped@7]$28]" "," "type-highheel"
marker skip-shoes;

sets "cg-tt-height-diff2" fromarray new{ "impossible" "impossible" "impossible" "equal" "shorter" "shorter" "taller" "taller" "taller" "equal" "taller" "taller" "impossible" "impossible" "impossible" "taller" "equal" "equal" "taller" "taller" "taller" "taller" "taller" "taller" } + + + * var has-highheels 12 * lengths intersect cvar "atashi" "build-adj" filestr "automata\tools\conditions\is-tall" 6 * lengths intersect cvar "atashi" "build-adj" filestr "automata\tools\conditions\is-short" 3 indexofs new{ "short" "average" "tall" } var "cg-tt-npc-height"

pop
Has same speed as with global array (faster than FSA). And it always will be (you can slowdown array access or add some optimizations for jump only code only, but I don't see reasons for that).
Baseline is always will be faster, at least with current computer architecture. Why? Random memory access is always significantly slower than linear memory access (which is result of complex interactions between cpu caches, branch predictor, prefetch, batched memory read and other stuff, however it is probably easier than Height Difference Determination Problem), any FSA with 'JUMP' inside 'JUMP' will create two random memory access, when single array read causes only one random read. You can easily slowdown performance of array access by using nested arrays for example (arr[1][2][3]), instead flat array. If done that way it will be same as FSA. And you can also optimize FSA by computing jump tables for 2-3 labels depth, which in the end will create same matrix.


I'm still fairly impressed with what you've shown here but, as you yourself said:

And that is undebatable, yes. However most of my objections to what you've been suggesting were always related to the lack of low level understanding of the engine.

Anyway, this was an interesting encounter. If you feel like talking more about it, though, I'd suggest maybe my Discord?
Low level things is implementation details, its not like there is algorithmic reasons which prevents them (I'm pretty sure that it is possible to implement them), however they may require some changes in engine which you don't want, which is ok.

I will try to connect to discord, but probably will take some time, I don't know anyhting about it.
 

EsoDev

Newbie
Mar 4, 2020
63
62
You correct about my intention, but not about result. I left it that way, because I prefer to have constants on global level, it doesn't affect performance (maybe a bit slower than global variant, but still faster than original).
The more variables you place into the global memory space the slower the look up for any of the specific variables will be. So while you can say that you prefer it, and even though it increases performance in this specific case, if you'd apply it as a policy to module construction on the long run, it will eventually lead to issues.

I've also already ran your own benchmark yesterday. But here, I re-ran it today under the worst conditions and under normal conditions and I'm not getting the same results you are, nor coming to the same conclusions (see attached files). In fact, it continues to be in line with the first thing I told you about it when you brought it up.

(As a side note to arrays, we both know that there is never a need to use an array that is more than 1D anyway to store data.)
 

Melongirl3

Newbie
Feb 6, 2019
87
82
Uhm, I finally managed to try the game but there is not much to do after the initial arrival? What do I have to do to progress the story? :eek:
 

Joe Steel

Engaged Member
Jan 10, 2018
2,325
3,083
Uhm, I finally managed to try the game but there is not much to do after the initial arrival? What do I have to do to progress the story? :eek:
I think that you can visit the landlord a few times for some modest sexytimes, and explore the city a little bit, but that's about it for this early demo.
 

Melongirl3

Newbie
Feb 6, 2019
87
82
Thanks for the answer! That’s a bit of a shame, though I really like headpats and spankings :oops: Hopefully a fully fledged game is gonna come out soon. The mechanics are superb though!
 

EsoDev

Newbie
Mar 4, 2020
63
62
Thanks for the answer! That’s a bit of a shame, though I really like headpats and spankings :oops: Hopefully a fully fledged game is gonna come out soon. The mechanics are superb though!
Purely out of curiosity, but what version did you even play?
 

Joe Steel

Engaged Member
Jan 10, 2018
2,325
3,083
Ah yes, the absolutely ancient one without any of the actually interesting mechanics.
The absolutely ancient one that its the only one available to us. I don't think that you can criticize someone for not reviewing a version they cannot access. The version here is two years more recent than the one you have listed ( EE - alpha - 035) as the public version on itch.io or your Patreon. I'm sure that many here would be happy to give feedback on a more recent version if you made it available.
 

EsoDev

Newbie
Mar 4, 2020
63
62
The absolutely ancient one that its the only one available to us. I don't think that you can criticize someone for not reviewing a version they cannot access. The version here is two years more recent than the one you have listed ( EE - alpha - 035) as the public version on itch.io or your Patreon. I'm sure that many here would be happy to give feedback on a more recent version if you made it available.
Actually, the 0.149 version has been publicly available on both Itch and Patreon for ages. Which superseded version 0.133 which was also available publicly for ages. Which in turn superseded version 0.116, the publicly available version before that. And 0.49 was the one released before that. The only reason you have access to version 0.49 on here is that, actually, it was released on my Patreon and Itch, ages ago. All of which were always released for free and that's disregarding versions released only for testing on my Discord. Which is why some people, including people who post here, in this thread, were testing stuff on the 0.169 version.
 

Joe Steel

Engaged Member
Jan 10, 2018
2,325
3,083
Well, I managed to get version 0.169, but, alas, it mostly just crashed on me. The error log is attached. The install program said that everything was installed correctly, and I had started a new game with a new character.
 

EsoDev

Newbie
Mar 4, 2020
63
62
Well, I managed to get version 0.169, but, alas, it mostly just crashed on me. The error log is attached. The install program said that everything was installed correctly, and I had started a new game with a new character.
While you were looking through my Discord for this it might have served you to read what we were testing and maybe actually get the publicly available version instead? Because this wasn't ever supposed to be a stable release, as it should be clear from the comments before and after the link itself.

In any case, the one error that repeats was cleared up a long time ago.

Now, the sock thing is a "my bad" kind of typo and is also fixed now.
 

Teritius

Newbie
Jan 5, 2021
60
20
While you were looking through my Discord for this it might have served you to read what we were testing and maybe actually get the publicly available version instead? Because this wasn't ever supposed to be a stable release, as it should be clear from the comments before and after the link itself.

In any case, the one error that repeats was cleared up a long time ago.

Now, the sock thing is a "my bad" kind of typo and is also fixed now.
Your Discord, BTW. I tried joining through the link on itch, but it didn't work.
 

Dr_Kek

Member
Oct 15, 2020
111
102
seems nice but there is like nothing to do? cant do anything but browse at mortifer shop, can only buy in the cosmetic shop, cant do much in library/park/bridge... is this normal or am i missing something? i havent read the paper we start with, i guess its flavor only
 

DuniX

Well-Known Member
Dec 20, 2016
1,177
777
seems nice but there is like nothing to do? cant do anything but browse at mortifer shop, can only buy in the cosmetic shop, cant do much in library/park/bridge... is this normal or am i missing something? i havent read the paper we start with, i guess its flavor only
Don't expect an update this century.
 

Beggarman

Member
Jan 14, 2018
385
693
Development is ongoing, but if I'm being blunt - the game is not yet finished mechanically and going for quite a complex setup while not having a great many people working on it. There are devblogs posted on the main website that detail all the incremental things that have been done so far. The game probably shouldn't have been posted here in the first place though, considering the early state of the versions that have come out, but it's not like this forum deletes games unless you throw a child into the mix.
 
  • Like
Reactions: DuniX
5.00 star(s) 1 Vote