999 builds on the wall [Engineering build 0.3.999]
Added 2022-05-31 09:59:12 +0000 UTCHello again children.
This build, like the last few, should be considered as an "enthusiast" build for those wanting to get to grips with the very latest engineering work. However, we are...
Almost out of the woods
This will be the last of the recent run of "broken" updates. The major questions about control, positions, animation structure, etc. have been answered now and so development should swing from the "tik" of engineering new systems, to the "tok" of actually creating content to show off those systems. Next month's update will roll the game over to 0.4.0, and most of the development time will be focused on bugfixes and polish. I apologize for the length of time that the game has spent in this semi-playable state, but engineering such fundamental aspects of the game inevitably breaks other elements and fixing them each month, only for them to break again the following month, would only eat up development time. As for what we've worked on this month...
Resistance
I've made some changes to how resistance works. It may seem a bit overly strong at first, but it wears down over time. I acknowledge however that there is a stiffness affecting some movement where it shouldn't and have a fix in mind. This can still be customized using the sidebar menu slider.
Positioning
The first actually functioning additional position has been added to the game using all of the new systems implemented over the last few months.
Visual tweaks
As usual I've been tweaking HD-chan's face and body, which I really should stop doing because it creates a lot of work. Her mouth is bigger now, which makes sense for this kind of game. The 0.4.0 update will be accompanied by new addon dummy files for creating external content.
Movement inertia
HD-chan's hip now has a physically simulated mass (invisible of course) attached to it which influences her positioning during IK targeting. This basically adds a subtle "dynamism" to her movement, for lack of a better word.
Nosey
HD-chan's nose texture (if applied) now fades with view angle to create a more pleasing profile.
Deep Dive: Control in Hyperdeep
What we want
Under the new positioning system, controls are defined for each camera angle of each position. It is easy to see that a profile view and a POV view from above, for example, require different control schemes to feel natural. In the case of the former, we would like our horizontal mouse movement to be translated to HD-chan's head moving forwards and backwards, and the vertical movement should correspond to movement up and down. For the latter, it makes sense instead for vertical mouse movement to dictate forwards and backwards motion, while horizontal movement should move HD-chan's head left and right (from our perspective).
We can see from this problem statement that our intention is to translate a position in "control space" (a 2-dimensional space of x and y mouse movement) to "world space" (a 3-dimensional space of in-game movement).
Answer: Control Surfaces
HYPERDEEP answers this question using a technique called "control surfaces". A control surface is defined by two control curves, which are curves in 3D world space. The control surface is created by interpolating between the two curves. Given a position in the range (0, 0) to (1, 1) in control space, the corresponding position on the control surface can be found by evaluating both constituent curves at a distance along the curve corresponding to the primary control coordinate (either x or y), and then interpolating between the returned values based on the secondary control coordinate. Which of x and y are the primary and secondary coordinate is defined per camera angle.

The control surface can be seen as a non-linear mapping between control space and world space, and allows us to create relatively complex regions of world-space movement, based on very simple control-space movement.
This approach brings with it the added benefit of never allowing the player cursor to get "stuck", not matter what shape the world space control surface is.
Automatic control
Until now, automatic control in HYPERDEEP has been achieved using:
a) manually defined splines in world space
b) procedural "on rails" movement based on a "dick spline"
These methods have both worked somewhat, but each has its downsides. Approach a) allows for expressive movement, but is cumbersome to work with and does not extend easily to multiple positions. Approach b) is relatively hands-off, but results in simplistic, somewhat robotic movement.
However, now that control surfaces are implemented to handle mapping from control space to world space, we can define an automatic movement system that works in the comparatively simple control space, but results in expressive movement in world space. Working in control space also allows us to create movement behaviour that more closely resembles that created by direct player interaction.
So, how do we create automatic movement in control space? Polar coordinates.
For those of you less mathematically inclined, polar coordinates are an alternative coordinate system for representing curves. Instead of defining a position in 2D space by an x and y coordinate, we instead define it based on an angle and a radius. If that sounds to you like it would be a good way to make circles, you'd be right.
Anecdotally, circles (or ellipses) seem to translate into organic, expressive movement in HYPERDEEP, and so the ability to represent circles easily should be a great help.
So let's define an automatic movement preset based on another 3-dimensional vector graph. We'll use the x and y components to encode the cartesian coordinates of the origin of our circle in control space over time, and the z component to encode the radius over time. If we define all of these value over the time range 0-1, we can take the fractional component of the game time in seconds at runtime to loop over this graph. In fact, we can multiply the game time by different values before taking the fractional components and then use these to evaluate the origin position and radius separately, at different speeds. What we end up with is an origin location in control space, moving according to a graph curve at a speed that we can control, and a final location spinning around this origin with variable radius, and at a separately determined speed.

Finally, this control space coordinate is mapped to world space using the control surfaces, in exactly the same way as user input would be.
Yeah ok...
If you didn't understand (or didn't care to understand) the last section, don't worry. You needn't take an interest in the underlying systems that define how the game works to simply enjoy it.
I hope, however, that the above breakdown gives you an indication of just how complex some seemingly simple behaviours can be when you really think about how they need to work. This issue is magnified when working on a game like HYPERDEEP, because for many of the questions we find we have, nobody has yet come up with an answer.
If I was working on first person shooter game, or an RTS, or a driving game, I could whip open google and search for "FPS controls UE4", or "RTS unit selection algorithm", or "suspension physics tutorial". What I cannot search for though, are "penis tracking mouse controls", "testicles physicsbody restitution", or "deepthroat resistance equation". I have never seen another game that requires a skeletally animated part of one character to go inside a hole in another character, dynamically, with no pre-baked animation, and have the hole react with physics and not freak out, yet this is the entire basis of what HYPERDEEP is.
This may read like a complaint, and sometimes it sort of is (mainly because I can't show off how clever some of the solutions are to anyone but you coomers), but most of the time this makes working on Hyperdeep an incredibly refreshing and exciting experience. I know for the majority of problems I come up against I won't be having my hand held, that there is no youtube tutorial by some Indian teenager waiting for me, that I have to fix it myself.
And that's why I've spent nearly two years of my life making a dick suck simulator game...
Anyway,
See you next month, 0.4.0 hype awaits.
Comments
Legendary. At this point I look forward to reading your writing as much as I look forward to the builds.
Destructive Ideation
2022-06-01 06:36:13 +0000 UTCThe only bug I have encountered for now (idk if you yet know this) is her arms "position" going to broke behind her clipping through the body after opening the Designer and going back to the scene (sorry for my bad english btw)
Simone W.
2022-05-31 17:49:46 +0000 UTCLove to see an update <3 I will give it a try later and let you know if there are possible bugs (hope not). I'm very happy you are keeping this project alive :)
Simone W.
2022-05-31 10:25:24 +0000 UTC