Lag is driven almost exclusively by graphics. As in "the number of things which are shown onscreen at the same time". Add a shirt? FPS takes a hit. Add a hat? FPS takes a hit. Toss in a few fully-shaded semen strands? FPS dies in a fire.
The game is CPU-gated, but not in a manner that modders can effectively do anything about. For example, there are a lot of mods which run minor update calculations on a per-frame basis. This is usually extravagant; we can cut the calculations down to "once per ten frames" and achieve nearly-identical results. But such calculations are not a significant source of lag, so we gain nothing by throttling them. I ran some ad hoc tests while working on hair physics. Even when a hairstyle is composed of absurdly simple graphics (i.e. colored tubes), the physics calculations involved in "deciding how the hair strands ought to move around" constitutes at most 3% of the surplus CPU load, while "drawing the ugly-ass tubes onto the screen" eats 97%. Flash isn't very good at drawing a heavily-composited scene at high detail (at least ... not if you want it in real time).
We could improve performance by merging some of the graphics together and reducing the number of layers, but this would come at the cost of the game's modularity. For example, instead of drawing the girl's arm and then drawing a shirt sleeve on the layer above it, we could import a single pre-baked [arm+sleeve] sprite into the game. But then you'd lose the ability to re-tint the girl's shirt or alter her skin tone.
The trend in SDT modding has been towards increased customizability. For example, @sby's template extension adds a half-dozen layers, for the sake of new clothing combinations (e.g. shirt+hoodie). I had to similarly add layers in order to allow a bikini strap to pass between the shoulder and neck. Pim_gd has added new dialogue triggers and an open-ended scripting system to support a huge variety of interactive narratives.
- we don't have the original SDT source code
- patching or replacing sections of the code is possible (I've done so with the hair physics; @sby has revamped the scene layout and animation; Pim_gd has expanded the dialogue system) but the result rarely improves the game's performance
- because we don't have the original code, we're forced to patch around it. @ModGuy's lProxy system is a huge boon here (especially in terms of inter-mod compatibility), but actual optimization passes (such as loop rewrites or data structure overhauls) are very risky.
- people have proposed porting the game to a new platform or engine
- these projects tend to fizzle out
- to paraphrase someone (possibly @ModGuy ?): "people who are capable of completing these projects don't start them, because they understand that it's a huge task. People who don't understand the scope will start out full of optimism, but will be disappointed when senior SDT modders aren't eager to get involved, and they'll eventually get buried by the huge workload."
- a major optimization project (or a full re-write) would involve a significant time investment, and there's no feasible way for anyone to be recompensed for their time
- they'd be building on the work of hundreds of different people, not to mention the copyrighted girls themselves ... untangling the IP rights would be a total clusterfuck
- any optimization or rewrite project would quickly face a painful choice
- do we attempt to include backwards compatibility for existing SDT content, or do we "cut the umbilical cord" and setup fresh systems for everything?
- if you include backwards compatibility then your design is going to be riddled with compromises (i.e. susceptible to bugs) and your performance will probably be shitty
- if you don't include backwards compatibility then there's a risk that people will look at your optimized-but-content-barren game and say "nah, I'll stick with the old SDT instead".
- also - many of the existing modders and artists will feel betrayed (because you're effectively asking them to re-create all of their stuff again) so there would be distrust and resentment against your project from within the fanbase. Even moreso if you're somehow getting paid for the rewrite project and they're being asked to update their stuff pro bono.
So ... what do you want us to actually do?
I wanted you guys to take it to the next level and port the game to another engine where it could run lag-free.
Sadly, as you've said, it's a LOT of hardwork, so I can't expect anything to happen when even I the OP cannot contribute.
@detritus asked about it a few weeks ago; he wanted to extract some of the vector art and try to assemble a proof-of-concept framework (using a language with higher performance, of course). I looked for the two threads that you mention but couldn't find either of them. They were presumably lost during the forum migration, or deleted during the cleanup+reorganization work which followed.Does anyone else remember these guys?
There have been at least two people who've tried that I can remember, both on the old site.
One of them DoomKnight I think was their username, was planning to teach himself programming and then port the game to Unity. He was calling it Ultimate Deepthroat. He made posts all the time even started a blog, I wish I had the link to but the community wasn't impressed I guess.
There other I forget their name, they wanted to make SDT with html5 I think. They wanted it mostly web based, all the mods could be shared to a site and you could browse for them in game. They made one thread once were they showed an early proof of concept. After that they'd drop by randomly and just chat in the shout box. I thought that he was really proficient, he asked for ideas and had them working in a day or so.
Does anyone else remember these guys?
Yes, but:As for the rendering, couldn't something similar to "Occlusion Culling" be used here to only render the top-most layer of the image?
I doubt that we could achieve anything significant without the original source code. Any gains would be dependent on spiltting the graphics out onto separate stages (e.g. "girl's left arm", "girl's right arm") instead of the existing layers. The GPU might then be able to speed things up by handling layer occlusion stuff, but I can't promise that that's true.1) Can the 3D API called Stage3D be implemented into SDT? It supposedly has support for GPU-accelerated rendering, that if it could be used here could be a potential gain in framerate.
Not sure. As I understand it, Flex and AIR are more about "cross-platform" stuff - getting your app to run in a protected environment, ensuring that your UI automatically scales to the appropriate aspect ratio, managing encryption+signing credentials when you need to transmit data across secure networks, allowing your app to be installed without goofy APK side-loading bullshit, allowing fullscreen mode on devices which normally prohibit it, accessing the local filesystem (or a full-fledged database - for business apps), reading data from embedded GPS or accelerometer, and so on.2) Is Adobe AIR more powerful than the web-browser based Flash Player? Could SDT be built or modded in some way to utilize Adobe AIR instead?
Scaleform is licensed software. I don't know enough about it to make a serious technical assessment, but I think that the performance improvement potential relies on compile-time optimization. That is -- the Scaleform library scans through the SWF and exports its assets.3) Could the entirety of SDT be imported wholesale into something like Unity or UE4, in the first place? Since these engines do use Scaleform, which uses SWFs, its plausible that they could be ported wholesale into them; plus I believe (at least with UE4) they support Vector Graphics and 2D Animation support.
Scaleform was included in UE3 but has been dropped in UE4. Unity requires third-party tools, which seems to import+preserve animation details (colors, shapes, keyframes, positions, tweens, etc) while discarding the actual logic (penetration depth, strand physics, etc). Because you're supposed to be writing that stuff in the managed scripting environment of your Unity IDE.4) If UE4 or Unity can run SWFs, could the SDT swf be embedded into a Unity / UE4 project and have that engine do the rendering and calculations for the SWF file, instead of having a flash player or adobe AIR doing the rendering/calculations. Thus, my question is would it be possible to get framerate gains by having an actual game engine do the work?
UE4/Unity - no, since we'd just be ripping the artwork and then rewriting most of the game's code.5) Would each of these above solutions require the original FLA?
That's valid, and appreciated. Most SDT modders have given up on the idea of performance improvements and so they may overlook a simple option. Suggestions are always welcome.I have no interest in doing the work and was simply putting ideas out there in case something was overlooked and could be implemented to provide some kind of framerate boost.
It's fairly easy. You can literally create things by tracing a reference image. Every hairstyle that I've made was done by tracing; I've attempted a few projects which involve incomplete references (hence: more artistic interpretation) and they've failed - because I don't have any actual skill at drawing things.If I personally were to do it, I likely wouldn't use Vector Art. I don't understand how that is done, nor do I know anyone personally that can do Vector Art.
This is valid; there's nothing stopping someone from creating a spiritual-successor project in 3d. I can foresee a few obvious challenges:I am much better at doing 3D Modelling/UV Textures, than 2D Painting, which would mean that it would essentially be its own thing.
I disagree; the implementation of the various features generally isn't very complex (and where it is complex, such as the physics system, it shouldn't be because such complexity should have been delegated to an external library). There are a lot of "moving parts" which operate simultaneously, but if you isolate and dissect them then you'll find that they all obey fairly straightforward rules (such as inverse kinematics). The advantage of Flash isn't its power or scripting flexibility. It actually handles set operations (and timed/recurring operations) pretty poorly. Its chief advantage is its lack of code security/integrity measures. This makes it possible for modders to dramatically alter the behavior of the game (viz: animtools) or add new features ... at runtime.A lot of the functionality in SDT may appear "simple" at first glance, but may be a horrid pain to actually implement in something other than flash
True, but I doubt that it would be enough of a "selling point" on its own. If I've spent years painstakingly re-creating the entire cast of my favorite anime show as Illusion characters, then I'll need a strong incentive to jump ship.Having played The Klub 17 games and several Illusion games, most of them don't do "cum physics" in 3D
Yes.Side point = Could physics be applied to the strands in SDT for a short period of time, and then stop applying physics to them (ie they stay where they land and don't move from there)?
No, it wouldn't. The strand physics system isn't a framerate eater.If it could be done, it could dramatically reduce computational costs for the heavy framerate eater in SDT
The more strands visible the faster framerate tanks. The physics calculations carry a negligible cost. Collision detection in 2d is absurdly cheap, and SDT does a half-ass job of it anyways. Only a few layers are "collide-able"; semen strands can attach to the torso and face but not to the hands (for example) and clothing is ignored.as the more strands active the faster framerate tanks.
It was something Japanese; it's difficult to remember details when you can't even figure out the UI well enough to control the camera (let alone change scenes and positions). I'll PM you if anything useful comes to mind.Question = What 3D game caters specifically for the "tentacle" fetish?
The system itself is fairly "lazy", which puts more of a workload on modders (or "constrains their creativity", to put it another way). There's no blending between adjacent bodyparts, so whenever two parts meet (e.g. elbow), one or both of them must end with a semi-circular hinge. Therefore rotation will never leave a gap between adjacent bodyparts (and you don't get the weird anatomical distortions of SFM) ... but you can't model atypical stuff (like big drooping sleeves) unless you abandon the template system and move to physics-based clothing.I assumed making each 2D layer move all at the same time, while avoiding clipping and making movement look fluid would be a huge chore.
Binary patch is literally "open the EXE file in a hex editor, change the value at address xxxx to yyyy". Or you run a script which does the same thing. Obviously this approach isn't compatible with heavy modding, because the various patches will overwrite each other or turn the entire file into gibberish. It also depends on a specific version of the EXE file; the technique will fail if the user has an out-of-date copy. It's often used by pirate groups when only a single alteration is needed (e.g. disabling a DRM check).I'm assuming a binary patch would be something like an ENB and a runtime memory intrusion would be something like a Skyrim Script Extender (SKSE)?
Most of it is achieved by the Gamebryo system itself AFAIK. Bethesda provided an inherently moddable game, but they didn't go far enough. For example: AI behavior was configurable, but only by tweaking a bunch of pre-established numeric parameters. If you wanted to write entire custom AI scripts then you'd need to use SKSE. I think. It's been a while since I've done anything with Skyrim modding.So in Elder Scrolls games it loads new assets into the game world or overwrites existing assets; is that achieved also by binary patches or runtime memory intrusion, or something else entirely?
The API might not see a public release until late in development, but the modding hooks should definitely be included in the ongoing development because it will be obscenely difficult to add them later on. Which means that the team needs to consider how much information should be exposed, how it should be protected, whether it should be editable (are we concerned about cheating? do we have online leaderboards? would a player's ability to cheat discourage them from buying gold via microtransactions? would a player's ability to replace textures allow them to use prestige skins/costumes without actually buying them via microtransactions?), and so on. These deliberations tend to slow down development, and once the decisions are made they will limit the dev team's freedom of action.Aren't most of those modding APIs released after a game's development has been completed, to avoid a situation where patching becomes a chore?
Yes and no. What we can do is "reduce" an element to a bitmap; Flash can then cache it and render it much more quickly. We could then restore the vectors after <n> frames, display them, reduce it back to bitmap, etc... It would turn into a form of jerky stop-motion animation - in which the strands themselves would exhibit much lower FPS than the rest of the scene. But at least the game would remain responsive to user input.1) In some games, developers are able to choose to delay some visual effects to render on certain frames, rather than render every frame. Could certain visual elements be set to render every 2nd frame instead of every frame?
It's CPU. Users are free to adjust core affinity, but it won't do much good.2) What causes the major bottlenecks? CPU or RAM? If it is CPU, can you force the affinity to a different core, so that the game is managed on its own separate core rather than fight for CPU cycles when run on the 1st core with everything else? If it is RAM, do you know if it can be set to utilize these resources = Virtual RAM, EMS or XMS?
It's a stage-level option.3) Can visual quality be reduced for JUST the strands? I know that you can adjust the visual quality of everything with a single button in Options, but what about reducing just the visual quality for strands; fewer pixels is fewer resources required.
It's rare for strands to overlap exactly. More commonly, you'll end up with a "cobweb" pattern in which there is some overlap and some independence. If we cull something, then part of the cobweb will suddenly vanish in front of the user's eyes.4) Can it be set to cause only the topmost layer of a strand to be rendered, and thus any strands underneath another are culled? Thus if you have like 18 strands of cum that have basically layered ontop of eachother, could only say the top 8 strands could be rendered while the 10 others below them are culled?
It's possible to reduce the color depth of a bitmap in AS3, but I think that it would usually be done for artistic reasons rather than performance reasons.5) Can the color value (doubt that is the right term) be changed for specific visual elements that aren't needed as much? So convert a 32 bit color to 16 bit color?
Yes, this is possible. The sudden change in visual quality is quite noticeable, though. It's assumed that anyone who suffers from inconsistent FPS would take precautionary measures -- such as reducing the graphics to Medium or shrinking the game window. The experience would be slightly worse than if the game bumped itself up to High during the quiet moments, but at least it would be consistent.6) Can a system be implemented that slowly degrades visual elements as more elements become present, and then reverts that visual degradation as visual elements disappear? So, in like a AAA game where you have High graphics settings, if more units got on the field, and the CPU couldn't handle it, it might reduce the graphics down to Medium to help handle the load. So, could it be set to reduce visual quality from high to lower as more things appears? Now, it is true that this might be highly undesirable for most players, but could it be made to selectively reduce certain things of visual quality first before affecting everything else? (ie Visual Quality is reduced to Medium for Strands when 10 strands present, and everything else set to Medium when 15 strands present, etc)
It is enabled. Unfortunately, this loops back to the earlier suggestion about Stage3D. If we rewrite some of the game code and reorganize the graphics, then we could effectively delegate much of the work to the GPU. The GPU is a fairly specialized piece of equipment, and (at the moment) it simply doesn't "understand" any of the tasks involved in rendering SDT.7) Noticed this while surfing a separate forum = Legend of Krystal Forums • View topic - Flash "direct" rendering and future improvements ; It mentions a "Direct" rendering that enables the GPU to render some stuff for Flash. Do you think this could be enabled for SDT?
Yeah, that's a valid point. It depends on the "discipline" of the dev team. If they consider their API to be a rock-solid contract, then modders would simply need to recompile after each new release. If the API details change often (e.g. because the team published it without a lot of internal review), then modders will need to do a lot of work, and some project may be suddenly orphaned because the necessary API methods are cut off.The issue with getting a modding crowd involved too early though is it may result in modder burnout by the time the product is released, if the modder must repair their mod with every patch released. This is something I've noticed with Rimworld, where each patch forces modders to basically repair their mod or rebuild it entirely.
Talk to your modders. Keep up with the modding scene. Ensure that the mods are in-line with your long-term vision of the game. If they aren't, then negotiate a compromise - change the API to block the unwanted behaviour, but explain why you're doing so and be prepared to offer alternatives.So, how would one get around this problem?
You're correct. Ideally, the dev team would use the modders as a "playground" or "laboratory" - let them tinker, capture the neat/useful ideas, then re-incorporate them into the actual game.As far as EvE Online goes, doesn't that follow similar Dev Team logic that Bethesaida uses; ie release the game and let the modders fix our game's problems, rather that we fix it? Or am I misunderstanding something here.
Yes, I'd say that that's correct also. If the EVE developers had taken the Guild Wars 2 approach ("no mods ever!") then their game would probably have died years ago. Modders, guild leaders, third-party fansites, etc... have built up a community and metagame which keeps players interested. If you strip all of that stuff away then the game simply isn't interesting enough to deserve a monthly subscription fee.It seems like by having a lot of their API available allows modders to fix various issues with the game and the development team doesn't prevent them from doing so and don't touch their modded additions or subtractions from the game and allowing it to be part of the metagame instead. Thoughts?