First of all, thanks so much for taking the time to play my tease and for the feedback. Am so glad you guys have enjoyed it.
The somewhat disjointed second half was because I originally had plans for a much longer series and a professional house not governed by the ethics of traditional Masu play was going to turn up with all sorts of underhand techniques. And because I had the woman counting in German video that I really wanted to use they were going to be German mercenaries. Then when it all got not finished for months and months I sort of just bunged it all together at the end so that I would at least release something.
The edge round from Flux Dance 3 I used because it's such a great edging round and brutal (at least for me) when you are already at the end of a long tease. I love the idea of having t edge really hard and the end and then be denied.
As you can probably gather, the original idea was to sort of bring Cock Hero elements to a Milovana tease and also push the genre with the use of video. And, even if I do say so myself, I always felt I could do a much better job with the story and the writing than most teases.
The plan was to build up to about 8 base forms and then have increasingly complex patterns. Because the patterns teach you to count time properly there is no reason why with more episodes it could not get to forms like "2 dog, 2 cat, 4 snake" and so on. And, with a bit of scripting, no reason once there is a strong set of forms, why they cannot be generated randomly once the player's training is complete and the proper matches start and so increase playability.
Other thoughts I had for more forms were:
Bear "1 - - -" for a very slow beat.
Owl "1+2+- -" requires concentration and focus.
Eagle "1+2+3+4" and Lion "1+2+3+4+" for late game double time style exercises.
To generate the mp3s I just used LMMS mostly as it's free.
https://lmms.io/ There are a million and one freeware/shareware sequencers that would. The spoken words were just from TTS voices (which you can get away with when using single words and better quality voices than the free ones that come with Windows).
As to making your own version, PG, then please do go for it! The end of this was obviously meant to be a set up for more to come where our hero turns out to be the greatest masu player of all time (Did anyone notice the Game of Thrones joke at the end?) and through a series of epic battles leads his house and mistress to legendary status and everlasting glory.
My plan -- I use the term loosely :) -- was something like:
Technical Forms II -- More Training.
Technical Forms III -- Ready for Competition (Competitive debut which so nearly goes disastrously wrong)
Technical Forms IV -- Rivals (Matches against famous houses including the illegal underground German mercenaries)
Technical Forms V -- Legendary Status (Our hero fulfills his potential and his house is victorious in the championship playoff final.
At the very end a very grateful Mistress will allow our hero to cum and the player would be given a choice of either accepting (boo!) or saying that to stroke is it's own reward and go back to his cell denied (hurrah!) and the mistress declares him the greatest masu player of all time.
Although if anyone does carry on with this series, I do feel quite proud of my writing so wouldn't want that altered in anyway and would prefer sequels rather than any editing of the original. But please feel free to run with the idea
And whilst I dont have the time to write my own teases, I could help with story outlining the writing and I have lots of great asian softcore picture series where all of the on-theme pictures in this tease came from. Although I have a very demanding job and a long term health condition which makes it difficult to commit to much.
Thanks once again for taking the time to play my terase and I am so pleased you enjoyed it.
Figroll.
PS Seeing as at least PG is also a programmer, my other long running but never finished project is a Windows app that allows display of pictures, subtitles/captions, Text To Speech, metronome and sequencer all of which is fully scriptable with Roslyn scripting.
So basically a Tease friendly domain model and UI with scripting with the full power of C# (all asynchronous and event driven) and no XML! This is one of my example scripts to give the idea:
Code: Select all
#load "common\setup.csx"
#load "common\standard.csx"
#load "internal\fourtempos.csx"
// A random stroking session based around four metronome speeds, slow, medium, fast and super.
var _ = Require<TrainingSession>();
ApplyUserSettings();
LoadDefaultContent();
// The player must do a random number of galleries between 1 and 5
int galleriesMin = 1;
int galleriesMax = 5;
// These are the four tempos in beats per minute.
var slowTempo = 60;
var normalTempo = 90;
var fastTempo = 120;
var superTempo = 180;
// After each picture there is a 15% chance of a speed change.
// At that point there is a 25% chance of the slow speed,
// 25% chance of the fast speed and 10% chance of the super speed.
// This leaves a 40% chance of the normal speed (100 - 25 - 25 - 10).
var chanceOfSpeedChange = 15;
var chanceOfSlowTempo = 25;
var chanceOfFastTempo = 25;
var chanceOfSuperTempo = 10;
// The amount of time to show each picture.
var minSecondsPerPicture = 5;
var maxSecondsPerPicture = 20;
// On each speed change there is rest period of between
// these numbers in seconds. The pictures will continue.
var longRestMin = 10;
var longRestMax = 30;
var stroking = false;
var tempo = normalTempo;
Run();
Code: Select all
void StartStroking()
{
if (stroking) return;
_.Trainer.Say("Stroke.");
_.Metronome.BPM = tempo;
_.Metronome.Start();
stroking = true;
}
void StopStroking()
{
if (!stroking) return;
_.Trainer.SayAsync("Stop.");
_.Metronome.Stop();
stroking = false;
}
bool IsSpeedChange()
{
if (_.RNG.IsPercentageChance(chanceOfSpeedChange))
{
var r = _.RNG.Between(1, 100);
if (r <= chanceOfSlowTempo)
{
tempo = slowTempo;
}
else if (r <= chanceOfSlowTempo + chanceOfFastTempo)
{
tempo = fastTempo;
}
else if (r <= chanceOfSlowTempo + chanceOfFastTempo + chanceOfSuperTempo)
{
tempo = superTempo;
}
else
{
tempo = normalTempo;
}
return true;
}
return false;
}
void Run()
{
int galleryCount = _.RNG.Between(galleriesMin, galleriesMax);
var shuffledGalleries = _.Content.Galleries.Shuffle().Take(galleryCount);
_.Viewer.PictureChanged += (o, e) =>
{
// Every time the picture changes in the slideshow check to see if there is a speed
// change. If there is player gets a random rest.
if (stroking && IsSpeedChange())
{
StopStroking();
// Rest timer is async so the slideshow continues.
_.Timer.RunAsync(_.RNG.Between(longRestMin, longRestMax));
}
};
_.Timer.TimerEnded += (o, e) =>
{
// Rest ended so start stroking again.
if (!stroking)
{
StartStroking();
}
};
tempo = normalTempo;
StartStroking();
foreach (var gallery in shuffledGalleries)
{
_.Viewer.PlaySlideshow(gallery, () => _.RNG.Between(minSecondsPerPicture, maxSecondsPerPicture));
}
_.Trainer.Say("Training complete.");
}