/
masturbation.as
4565 lines (4283 loc) · 309 KB
/
masturbation.as
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
import classes.GameData.CommandContainers.FapCommandContainer;
import classes.Items.Armor.GooArmor;
import classes.Items.Miscellaneous.MagicMilker;
import classes.Items.Toys.HoverHole;
import classes.Items.Toys.NivasBionaHole;
import classes.Items.Toys.TamaniBionaHole;
import classes.Items.Toys.BubbleBuddy;
import classes.Items.Toys.SukMastr;
public function checkToyDrawer(arg:Class,amount:int = 1):Boolean
{
var HaveToy:Boolean = pc.hasItemByClass(arg, amount);
if (!HaveToy && InShipInterior()) HaveToy = pc.hasItemInStorageByClass(arg, amount);
return HaveToy;
}
public function canArouseSelf():Boolean
{
var faps:Array = nonLustFaps();
if(faps.length > 0) return true;
return false;
}
public function nonLustFaps():Array
{
var faps:Array = new Array();
if (pc.canLactate())
{
if (checkToyDrawer(MagicMilker, 1))
{
faps.push(["Magic Milker", joyCoMagicMilker7Sucks, "", ""]);
}
faps.push(["Hand Milk", milkturbation, "", ""]);
}
if(pc.hasStatusEffect("Boobswell Pads"))
{
faps.push(["Remove B.Swell", removeBoobswellPads, "Remove Boobswell Pads", "Remove the attached boobswell pads."]);
}
if(hasSmutOptions())
{
faps.push(["Smut", smutFapMenu, "Smut", "You could go check out some smutty videos on the extranet."]);
}
return faps;
}
public function arousalMenu():void
{
if(InRoomWithFlag(GLOBAL.WATERFALL))
{
fapOnWaterfall();
return;
}
clearOutput();
showName("\nAROUSAL");
showBust("");
clearMenu();
var aborted:Boolean = false;
if(rooms[currentLocation].hasFlag(GLOBAL.NOFAP))
{
output("Masturbating here would be impossible.");
aborted = true;
}
else if(rooms[currentLocation].hasFlag(GLOBAL.FAPPING_ILLEGAL))
{
output("Public masturbation is illegal here. Trying to masturbate would almost certainly land you in jail.");
aborted = true;
}
else if(rooms[currentLocation].hasFlag(GLOBAL.PUBLIC) && pc.exhibitionism() >= 66)
{
output("Out here? In public?\n\n...Yeah, that’ll do nicely.\n\n");
}
else if(rooms[currentLocation].hasFlag(GLOBAL.PUBLIC) && pc.exhibitionism() >= 33)
{
output("Out here? In public?\n\n...<b>it’ll have to do</b>.\n\n");
}
if(aborted)
{
addButton(0,"Next",mainGameMenu);
return;
}
var faps:Array = nonLustFaps();
var i:int = 0;
var btnSlot:int = 0;
output("What do you choose to do?");
for(i = 0; i < faps.length; i++)
{
if(btnSlot >= 14 && (btnSlot + 1) % 15 == 0)
{
addButton(btnSlot, "Back", mainGameMenu);
btnSlot++;
}
addButton(btnSlot, faps[i][0], faps[i][1], undefined, faps[i][2], faps[i][3]);
btnSlot++;
if(faps.length > 14 && (i + 1) == faps.length)
{
while((btnSlot + 1) % 15 != 0) { btnSlot++; }
addButton(btnSlot, "Back", mainGameMenu);
}
}
addButton(14, "Back", mainGameMenu);
}
public function availableFaps(roundTwo:Boolean = false):Array
{
var faps:Array = new Array();
var fap:FapCommandContainer;
// Overrides
// If any of these are true, do whatever you need and return after pushing a single function into the array
// We can then autoexecute on the only available option
if (pc.hasCuntSnake() && pc.hasCock() && !pc.isTaur() && (pc.cockThatFits(pc.tailCuntCapacity()) >= 0) && flags["DAYS_SINCE_FED_CUNT_TAIL"] != undefined && flags["DAYS_SINCE_FED_CUNT_TAIL"] >= 7)
{
clearOutput();
output("An insatiable hunger from your tail overwhelms you. <b>You have to feed it!</b>");
addButton(0, "Next", cuntTailFapScene);
return null;
}
if (pc.milkFullness >= 150 && pc.isLactating() && flags["SUPRESS_TREATED_MILK_FAP_MESSAGE"] == undefined)
{
// Super-lactation, must resist urge to fap!
if(pc.isMilkTank())
{
clearOutput();
output("<b>You feel a strong urge to relieve the unbearable pressure your lactating mammaries are experiencing; but thanks to the enhancements to your [pc.fullChest], you are confident they won’t ever stop - or even slow down - [pc.milk] production, and you find it easy to resist.</b>");
clearMenu();
addButton(0, "Next", function():void
{
flags["SUPRESS_TREATED_MILK_FAP_MESSAGE"] = 1;
masturbateMenu(false);
flags["SUPRESS_TREATED_MILK_FAP_MESSAGE"] = undefined;
}, undefined, "Masturbate", "Choose something else...");
addButton(1,"Milk",milkturbation, undefined ,"Milk Anyway","Release the pressure now!");
addButton(14,"Back", mainGameMenu);
}
// Your will is weak, now it's milky fun tiems, yay!
else milkturbation();
return null;
}
// Previous fap has moved to consumers of the faps array.
// This enables us to check if the LAST_FAP targetted command is available (it'll be in the array), otherwise hide repeat.
// List all the faps!
if (InShipInterior() && celiseIsCrew() && pc.hasTailCock())
{
fap = new FapCommandContainer();
fap.text = "Porn&Celise";
fap.func = tailCockCeliseFaps;
faps.push(fap);
}
if (pc.hasVagina())
{
fap = new FapCommandContainer();
fap.text = "Vaginal";
fap.func = vaginalFap;
faps.push(fap);
}
if (pc.hasCock())
{
fap = new FapCommandContainer();
fap.text = "Penis";
fap.func = singleDickFap;
faps.push(fap);
}
if (pc.hasCock() && pc.canAutoFellate(-1))
{
if(pc.isCumCow() && pc.perkv1("Auto-Autofellatio") > 0)
{
fap = new FapCommandContainer();
fap.text = "Autofellatio";
fap.func = cumCowAutoFellatio;
fap.ttHeader = "Autofellatio";
fap.ttBody = "Suck your own dick.";
faps.push(fap);
}
else
{
fap = new FapCommandContainer();
fap.text = "Autofellatio";
fap.func = autofellatioForNormies;
fap.ttHeader = "Autofellatio";
fap.ttBody = "Suck your own dick.";
faps.push(fap);
}
}
if (pc.cockTotal() >= 2)
{
fap = new FapCommandContainer();
fap.text = "Penises";
fap.func = multiCockFap;
faps.push(fap);
}
if (pc.hasCock() && checkToyDrawer(HoverHole))
{
fap = new FapCommandContainer();
fap.text = "HoverHole";
fap.func = hoverholeFapFapFap;
faps.push(fap);
}
if (((pc.canLactate() || pc.milkQ() >= 200) && !roundTwo) || (pc.isLactating() && pc.milkFullness >= 70 && roundTwo))
{
if (checkToyDrawer(MagicMilker, 1))
{
fap = new FapCommandContainer();
fap.text = "Magic Milker";
fap.func = joyCoMagicMilker7Sucks;
fap.ignoreRandomSelection = true;
faps.push(fap);
}
fap = new FapCommandContainer();
fap.text = "Hand Milk";
fap.func = milkturbation;
fap.ignoreRandomSelection = true;
faps.push(fap);
}
if (hasFeedableMimbranes() && mimbranePrivateLocation())
{
if (pc.hasCock())
{
fap = new FapCommandContainer();
fap.text = "Penis Feed";
fap.func = feedMimbranesWithCock;
faps.push(fap);
}
if (pc.hasVagina())
{
fap = new FapCommandContainer();
fap.text = "Vaginal Feed";
fap.func = feedMimbranesWithPussy;
faps.push(fap);
}
}
if (pc.hasCuntTail())
{
fap = new FapCommandContainer();
fap.text = "Tailingus";
fap.func = tailingusFapReqsCuntTail;
faps.push(fap);
if (pc.hasCock() && !pc.isTaur() && (pc.cockThatFits(pc.tailCuntCapacity()) >= 0))
{
fap = new FapCommandContainer();
fap.text = "TailFuck";
fap.func = cuntTailFapScene;
faps.push(fap);
}
}
if (!pc.isTaur())
{
fap = new FapCommandContainer();
fap.text = "ButtFinger";
fap.func = wutwutindabuttbuttFap;
faps.push(fap);
}
//tentacle massage fun
//Accessed from masturbate menu on ship. Req's genitals.
if(celiseIsCrew() && flags["GIGACELISE"] == 1 && (pc.hasCock() || pc.hasVagina()) && InShipInterior())
{
fap = new FapCommandContainer();
fap.text = "GooMassage";
fap.func = tentacleMassageFunShit;
faps.push(fap);
}
//Boobswell pads. Need a way to exclude this from random selection sometime.
if(pc.hasStatusEffect("Boobswell Pads"))
{
fap = new FapCommandContainer();
fap.text = "Remove B.Swell";
fap.ttHeader = "Remove Boobswell Pads";
fap.ttBody = "Remove the attached boobswell pads.";
fap.func = removeBoobswellPads;
fap.ignoreRandomSelection = true;
faps.push(fap);
}
if (hasGooArmor())
{
fap = new FapCommandContainer();
fap.text = "Goo Dicks";
fap.ttHeader = "Goo Dicks";
fap.ttBody = "Have [goo.name] fill all of your holes and fuck you.";
fap.func = gooDickFap;
fap.ignoreRandomSelection = false;
faps.push(fap);
if (pc.hasCock())
{
fap = new FapCommandContainer();
fap.text = "GooSleeve";
fap.ttHeader = "Goo Cocksleeve";
fap.ttBody = "Have [goo.name] jack you off.";
fap.func = grayGooCockSleeve;
fap.ignoreRandomSelection = false;
faps.push(fap);
}
}
if (flags["LAQUINE_LASS_TRYSTS"] != undefined && pc.hasCock() && LaquineEars.lassLaquineAcceptable(pc,pc.biggestCockIndex()))
{
fap = new FapCommandContainer();
fap.text = "F.Laquine";
fap.ttHeader = "Female Laquine Hallucination";
fap.ttBody = "Attempt to summon the hallucinatory laquine you met while using a pair of Laquine Ears.";
fap.func = laquineEarsFemaleWrapper;
fap.ignoreRandomSelection = false;
faps.push(fap);
}
if (flags["LAQUINE_GENT_BONED"] != undefined && pc.inHeat() && pc.hasVagina(GLOBAL.TYPE_EQUINE))
{
fap = new FapCommandContainer();
fap.text = "M.Laquine";
fap.ttHeader = "Male Laquine Hallucination";
fap.ttBody = "Attempt to summon the hallucinatory laquine you met while using a pair of Laquine Ears.";
fap.func = laquineEarsMaleWrapper;
fap.ignoreRandomSelection = false;
faps.push(fap);
}
//PANTY FAPS!
if(pc.hasCock())
{
//Has panties for faps:
if(pantyFapCount() > 0)
{
fap = new FapCommandContainer();
fap.text = "Panty Fap";
fap.ttHeader = "Panty Fap";
fap.ttBody = "Use a pair of panties that you’ve collected as a cumrag.";
fap.func = futaBabePantyfapsRouter;
fap.ignoreRandomSelection = false;
faps.push(fap);
}
}
//PANTY SCHLICK!
if(pc.hasVagina())
{
//Has panties?
if(pantyFapCount() > 0)
{
fap = new FapCommandContainer();
fap.text = "PantySchlick";
fap.ttHeader = "PantySchlick";
fap.ttBody = "Use a pair of panties that you’ve collected as fuel for feminine masturbation.";
fap.func = futaBabePantySchlicksRouter;
fap.ignoreRandomSelection = false;
faps.push(fap);
}
}
if(checkToyDrawer(NivasBionaHole) && pc.hasCock())
{
fap = new FapCommandContainer();
fap.text = "NivasB.Hole";
fap.ttHeader = "Nivas Oxonef BionaHole";
fap.ttBody = "Take the Nivas Oxonef Bionahole for a spin.";
fap.func = nivasFapSetup;
faps.push(fap);
}
if(checkToyDrawer(NivasBionaHole) && pc.hasCock() && flags["NIVAS_TUTORIAL"] != undefined)
{
fap = new FapCommandContainer();
fap.text = "NivasTutorial";
fap.ttHeader = "Nivas Tutorial";
fap.ttBody = "Run through the tutorial for your Nivas Oxonef BionaHole once more.";
fap.func = bionaHoleInstructionalBullshit;
faps.push(fap);
}
if(checkToyDrawer(TamaniBionaHole) && pc.hasCock())
{
fap = new FapCommandContainer();
fap.text = "Tamani B.H.";
fap.ttHeader = "Tamani BionaHole";
fap.ttBody = "Take the Tamani Ultralux edition BionaHole for a spin.";
fap.func = TamaniFapSetup;
faps.push(fap);
}
if(checkToyDrawer(TamaniBionaHole) && pc.hasCock() && flags["TAMANI_HOLED"] != undefined)
{
fap = new FapCommandContainer();
fap.text = "Tamani Tut.";
fap.ttHeader = "Tamani Tutorial";
fap.ttBody = "Run through the tutorial for your Tamani Ultralux edition BionaHole once more.";
fap.func = tamaniBionaholeInstruction;
faps.push(fap);
}
//Use Vi's vagina, if ye fit.
if(pc.hasKeyItem("Vi's Vagina"))
{
fap = new FapCommandContainer();
fap.text = "Vi’s Vagina";
fap.ttHeader = "Vi’s Vagina";
fap.ttBody = "Use the vagina you took from the V-Ko droid on Myrellion to sate yourself.";
fap.func = viPussyFapScene;
faps.push(fap);
}
//Special new texas shit
if(pc.hasItemByClass(GravCuffs) && rooms[currentLocation].planet == "PLANET: NEW TEXAS" && rooms[currentLocation].hasFlag(GLOBAL.PUBLIC))
{
fap = new FapCommandContainer();
fap.text = "CuffSelf";
fap.ttHeader = "Cuff Yourself";
fap.ttBody = "You bet that if you cuffed yourself naked somewhere public, there’d be at least one randy bull or cow to give you a reaming.";
fap.func = cuffSelfRouter;
faps.push(fap);
}
if(hasSmutOptions())
{
fap = new FapCommandContainer();
fap.text = "Smut";
fap.ttHeader = "Smut";
fap.ttBody = "You could go check out some smutty videos on the extranet.";
fap.func = smutFapMenu;
fap.ignoreRandomSelection = true;
faps.push(fap);
}
if(hasRedDildo() || hasGoldDildo())
{
fap = new FapCommandContainer();
fap.text = "StolenDildo";
fap.ttHeader = "Stolen Dildo";
fap.ttBody = "Make use of the dildo you stole from the smutty myr deserter.";
fap.func = stolenDildoFap;
faps.push(fap);
}
if(checkToyDrawer(BubbleBuddy) && pc.hasCock())
{
fap = new FapCommandContainer();
fap.text = "BubbleBuddy";
fap.ttHeader = "Bubble Buddy";
fap.ttBody = "Smaller and thinner than a normal onahole but larger than a prophylactic, the lilac-colored Bubble Buddy is a self-lubricating pocket pussy that will “contain and sustain” the semen of its user. Though only six inches long, the gelatinous surface seems VERY stretchy.";
fap.func = jackIntoDaBubbleBooty;
faps.push(fap);
}
if(checkToyDrawer(SukMastr) && pc.hasVagina())
{
fap = new FapCommandContainer();
fap.text = "SukMastr";
fap.ttHeader = "SukMastr 2000";
fap.ttBody = "This high-quality pussy pump is perfect for a little bit of cunt-expanding fun. Comes with pump, vaginal cup, and remote.";
fap.func = useTheSuckMasta;
faps.push(fap);
}
if(pc.hasHardLightEquipped() && pc.hasHardLightUpgraded())
{
fap = new FapCommandContainer();
fap.text = "HL Strapon";
fap.ttHeader = "Hardlight Strap-on";
fap.ttBody = "You upgraded your strap-on. A dick you enlarge at will might be fun to play with!";
fap.func = adjustableHolofap;
faps.push(fap);
}
if(pc.hasCockTail())
{
fap = new FapCommandContainer();
fap.text = "DicktailFuck";
fap.ttHeader = "Dicktail Fuck";
fap.ttBody = "Fuck yourself with your cock-carrying tail.";
fap.func = dickTailFuck;
faps.push(fap);
}
if(pc.hasCockTail() && pc.hasGenitals())
{
if(pc.isCumCow() && pc.hasTailCock() && pc.hasGenitals())
{
fap = new FapCommandContainer();
fap.text = "Tailsuck";
fap.ttHeader = "Tailcock Suck";
fap.ttBody = "Get some much-needed [pc.cumNoun] from your taildick.";
fap.func = cumCowCockvineSuck;
faps.push(fap);
}
else
{
fap = new FapCommandContainer();
fap.text = "DicktailSuck";
fap.ttHeader = "Dicktail Suck";
fap.ttBody = "Suck off your cock-carrying tail.";
fap.func = tailSucking;
faps.push(fap);
}
}
// Sera Collar Faps
if(wearingSeraCollar())
{
fap = new FapCommandContainer();
fap.text = "Gem Anal";
fap.ttHeader = "Sera’s Collar - Anal";
fap.ttBody = "Use the hard-light dildo Sera gave you on your ass.";
fap.func = fapSeraCollarAnal;
faps.push(fap);
if(pc.hasVagina())
{
fap = new FapCommandContainer();
fap.text = "Gem Vag";
fap.ttHeader = "Sera’s Collar - Vaginal";
fap.ttBody = "Use the hard-light dildo Sera gave you on your pussy.";
fap.func = fapSeraCollarVag;
faps.push(fap);
}
}
if(pc.hasVagina() && pc.hasBackGenitals())
{
fap = new FapCommandContainer();
fap.text = "TentaOrgy";
fap.ttHeader = "TentaOrgy";
fap.ttBody = "Get frisky with those delightful back appendages of yours.";
fap.func = cockwingOrgySluts;
faps.push(fap);
}
return faps;
}
public function cuffSelfRouter():void
{
if(pc.hasCock() && rand(2) == 0) gravCuffsCowgirlBangu();
else newTexanGanguBangu();
}
public function nivasFapSetup():void
{
bionaholeUse("Nivas");
}
public function TamaniFapSetup():void
{
bionaholeUse("Tamani");
}
public function selectRandomFap(faps:Array):void
{
// Don't allow milk scenes to be selected randomly
var filtFaps:Array = faps.filter(function(item:*, index:int, array:Array):Boolean {
if ((item as FapCommandContainer).ignoreRandomSelection == true) return false;
return true;
});
filtFaps[rand(filtFaps .length)].execute();
}
public function masturbateMenu(roundTwo:Boolean = false):void
{
if(InRoomWithFlag(GLOBAL.WATERFALL))
{
fapOnWaterfall();
return;
}
if (flags["KASHIMA_STATE"] == 1 && flags["CHIEF_NEYKKAR_WITH_PC"] == 1 && (pc.hasCock() || pc.hasVagina()))
{
lustyBugpony();
return;
}
clearOutput();
showName("\nMASTURBATE");
showBust("");
clearMenu();
var aborted:Boolean = false;
var btnSlot:int = 0;
//Masturbation prevention
if(rooms[currentLocation].hasFlag(GLOBAL.NOFAP))
{
output("Masturbating here would be impossible.");
aborted = true;
}
else if(rooms[currentLocation].hasFlag(GLOBAL.FAPPING_ILLEGAL))
{
output("Public masturbation is illegal here. Trying to masturbate would almost certainly land you in jail.");
aborted = true;
}
//Subtuner hypnoproc.
else if(pc.hasStatusEffect("Belle Hypno") && pc.hasGenitals())
{
belleMasturbationProc();
return;
}
//Exhibitionism masturbation
else if(rooms[currentLocation].hasFlag(GLOBAL.PUBLIC))
{
//Exhibitionist fap! - overrides all other faps
if(pc.exhibitionism() >= 66)
{
output("Out here? In public?\n\n...Yeah, that’ll do nicely.\n\n");
addButton(btnSlot++,"Exhibitionism",goddamnitJimTAndYourExhibitionism);
//Special new texas shit
if(pc.hasItemByClass(GravCuffs) && rooms[currentLocation].planet == "PLANET: NEW TEXAS")
{
addButton(btnSlot++,"CuffSelf",cuffSelfRouter,undefined,"Cuff Yourself","You bet that if you cuffed yourself naked somewhere public, there’d be at least one randy bull to give you a reaming.");
}
if(pc.hasPerk("Ultra-Exhibitionist"))
{
if(pc.isNude()) addButton(btnSlot++, "Tease", exhibitionismStrip, undefined, "Public Tease", "Reveal every inch of your body to anyone interested.");
else addButton(btnSlot++, "Strip", exhibitionismStrip, undefined, "Public Striptease", "Strip and reveal every inch of your body to anyone interested.");
}
addButton(14,"Back",mainGameMenu);
return;
}
//Low Exhibitionist fap! - overrides all other faps
else if(pc.exhibitionism() >= 33)
{
output("Out here? In public?\n\n...<b>it’ll have to do</b>.\n\n");
addButton(btnSlot++,"Exhibitionism",moderateExhibitionOmniFap);
//Special new texas shit
if(pc.hasItemByClass(GravCuffs) && rooms[currentLocation].planet == "PLANET: NEW TEXAS")
{
addButton(btnSlot++,"CuffSelf",cuffSelfRouter,undefined,"Cuff Yourself","You bet that if you cuffed yourself naked somewhere public, there’d be at least one randy bull to give you a reaming.");
}
addButton(14,"Back",mainGameMenu);
return;
}
//Pussy out, unless you're being force-fapped.
else if(pc.libido() < 70)
{
if(pc.libido() < 10) output("You’d never even consider masturbating in public!");
else if(pc.libido() < 20) {
output("No way. You aren’t the kind of person that would masturbate in public");
if(pc.lust() >= 75) output(", no matter how horny you are!");
else output(".");
}
else if(pc.libido() < 30) output("The galaxy may be a wide-open place with all kinds of different social norms concerning publicly self-satisfying sexual needs, but you’re too nervous to engage in that sort of thing yourself.");
else if(pc.libido() < 40) output("This is a public place! You aren’t keen on the idea of masturbating here. Maybe slip back to somewhere a little more private.");
else if(pc.libido() < 50) output("You aren’t the kind of person to just drop trou and take care of business in public, even if it would be kind of hot.")
else if(pc.libido() < 60)
{
output("Yeah, you definitely want to masturbate, but this is a public place! Everyone would be able to see you there with your [pc.butt] in the dirt, ");
if(pc.hasCock()) output("jacking off like wild.");
else if(pc.hasVagina()) output("grinding your [pc.vaginas] like wild.");
else output("playing with yourself like some kind of wild animal.");
pc.lust(5);
output(" Fuck! Now you’re even hornier.");
}
else
{
output("You consider masturbating here, but ultimately, you can’t. It doesn’t matter that having people watching you masturbating would be totally hot. You’re still too nervous about it all. What if someone took a picture and put it up on the extranet? You can imagine the tabloids now: some garish headline plastered above a picture of you with both hands");
if(pc.hasCuntTail() && pc.hasCock()) output(" pumping your cunt-tail up and down on [pc.oneCock].");
else if(pc.hasCock() && pc.canAutoFellate(-1)) output(" aiming your wildly orgasming cock into your own mouth, your [pc.lips] sealed tightly about the head.");
else if(pc.hasCock()) output(" vigorously pumping at [pc.oneCock].");
else if(pc.hasVagina()) output(" doing your level best to fist [pc.oneVagina], your other hand toying with a [pc.nipple].");
else output(" roaming licentiously across your own body.");
output("\n\nYou whimper. The idle thoughts have you feeling even hotter now. You’d better find a good place to relieve yourself.");
}
output("\n\n(70 libido or sufficient exhibitionism experience is required to masturbate in public spaces.)");
aborted = true;
if(pc.perkv1("'Nuki Nuts") > 0)
{
output("\n\n<b>No! You have to do this! You’re getting too swollen not to!</b> You’ll have to just blush and bear it!");
aborted = false;
}
else if(roundTwo)
{
output("\n\n<b>No! You have to - you’re too turned on from milking yourself!");
aborted = false;
}
output("\n\n");
}
}
if(aborted)
{
addButton(0,"Next",mainGameMenu);
return;
}
// Get available faps
var faps:Array = availableFaps(roundTwo);
var i:int = 0;
// If we got back a null array from the listing functor, it should have created the button for us.
if (faps == null)
{
return;
}
if (roundTwo == true)
{
//If anything on the screen, do as a next
if(userInterface.outputBuffer != "\n")
{
addButton(0,"Next",selectRandomFap,faps);
}
else selectRandomFap(faps);
return;
}
// If only one fap came back, just execute it
if (faps is Array && faps.length == 1)
{
faps[0].execute();
return;
}
output("What do you choose to do?");
// If last is available, show repeat button
var showRepeat:Boolean = false;
if (flags["LAST_FAP"] != undefined)
{
var filtFaps:Array = faps.filter(function(item:*, index:int, array:Array):Boolean {
if (flags["LAST_FAP"] == item.text) return true;
return false;
});
// Available, show repeat
if (filtFaps.length > 0)
{
showRepeat = true;
}
// Unavailable, so we'll just not show the button (in case player backs out and comes back later when the scene is available)
}
// Repeat button
if (showRepeat)
{
addButton(btnSlot, "Repeat", filtFaps[0].func);
btnSlot++;
}
// Random button
if (faps.length > 0)
{
addButton(btnSlot, "Random", selectRandomFap, faps);
btnSlot++;
}
// Generate all the buttons for the available funcs
for(i = 0; i < faps.length; i++)
{
if(btnSlot >= 14 && (btnSlot + 1) % 15 == 0)
{
addButton(btnSlot, "Back", mainGameMenu);
btnSlot++;
}
addButton(btnSlot, faps[i].text, faps[i].execute, undefined, faps[i].ttHeader, faps[i].ttBody);
btnSlot++;
if(faps.length > 12 && (i + 1) == faps.length)
{
while((btnSlot + 1) % 15 != 0) { btnSlot++; }
addButton(btnSlot, "Back", mainGameMenu);
}
}
addButton(14, "Back", mainGameMenu);
}
//Tailcock Fapping w/ Celise
//By Savin
// Accessed from Masturbate menu whilst shipboard
public function tailCockCeliseFaps():void {
clearOutput();
author("Savin");
output("God damn you’re horny.");
output("\n\nYou breathe a lusty sigh as the heat of arousal courses through your body, demanding release. You ");
if(pc.armor.shortName != "") output("strip out of your [pc.armor] and ");
output("toss your gear aside before flopping down on your bed, ");
if(pc.isTaur()) output("your [pc.legs] curled up under your belly");
else output("your [pc.legOrLegs] kicked up behind you");
output(" as you grab your codex tablet and hook it into its stand at your bedside. Opening up the extranet, you flick through a quick search for free porn. Your hand idly reaches around as you scroll, grabbing your [pc.tailCock] and gently stroking it to hardness as you search, browsing past a dozen quick vids of buxom women and chisel-chested men of a dozen races, all oiled up with bodies entangled in myriad erotic poses. Hot. Your stroking slowly picks up in pace");
if(pc.biggestTitSize() > 1) output(", your hand occasionally trailing from the tablet to grope and squeeze your [pc.chest], pinching the hardening teats atop them");
output(".");
output("\n\nIt takes a good long while to finally find a good vid: one you think you can actually stomach all the way through. One of the actors is a little butter-faced, but hey, the curves on the other one... damn. Oh, that’s nice.... You stroke harder and faster as the foreplay starts in earnest, a meaty cock finding a nice sheath in an alien girl’s mouth, making her throat bulge with the gene-spliced boy’s massive girth. Your tail-wang writhes in your hand, straining against your grasp as you jerk it, the first pearly beads forming at your tip.");
output("\n\nThe way it pools and dribbles in your hand makes you think of a certain galotian who’s probably about ready for a snack. Getting a nice and dirty thought forming in your mind, you key the ship’s intercom and call the goo-girl up to your quarters for a meal at the captain’s mess. She’s quick on her... uh... gooey amorphus mass... and before the first blowjob scene’s over, you hear a faint knock on your door. About as heavy as a goo-girl can manage, given her make-up. You call, <i>“Enter,”</i> shooting the green girl a grin, making sure she can see exactly what’s on screen and just how hard your [pc.tailCock] is.");
output("\n\nShe may not be a genius, but Celise’s cock-hungry nature takes the fore as she slithers over, her blobby mass of green gel rolling over itself as she approaches, a great big smile on her face. <i>“Oooh, I don’t get to come up here much,”</i> she says, looking around your cabin with mock interest, her eyes never leaving the cock in your hand. <i>“But if I knew there were going to be treats like that, I’d be up here like, every day.”</i>");
output("\n\nYou feel a surge of affection at her eagerness, and quickly lay back down on your belly, tail wagging enticingly at the galotian in the closest facsimile to a <i>“come hither”</i> waggle as you can manage with a rock-hard pre-dripping tail-cock. Celise hops into your bed, snuggling up next to you, her flank sticking wetly to your [pc.skin]. <i>“Oooh, whatcha watching?”</i>");
output("\n\nYou hover a finger over the name of the vid, but the sudden insertion of a huge cock into a huge-titted bimbo’s asshole opposite the two in her mouth gets the point across pretty quickly. Celise licks her lips as she watches the holo-vid progress, but you’ve got more in mind than just snuggling with a porno. You reach your tail around and nuzzle it against her cheek, letting it practically submerge in the hot, viscous gel of her body. With a squeal of delight, Celise rolls onto her back, taking your tail-cock in her mouth as her eyes keep trained on the vid. You let out a contented little sigh as your [pc.tailCock] finds a nice, warm, wet sheathe to hold it, but that turns into a low moan of pleasure as Celise’s mouth starts to work its wonders, gyrating and washing over and around your cock rather than simply fellating it, getting the most out of her alien biology as her semi-liquid body churns around your member.");
output("\n\nMmmm, that’s niiiiice. Your breath comes heavier as Celise suckles from your cock, little droplets of pre starting to float listlessly in her transparent head. You see a hand vanish down into her crotch, pleasuring her one constant feature -- her big, loose, gooey cunt - as she watches the porno progress from DP to cowgirl as the busty alien rides a huge cock, giving handies to two other males and a hung hermaphrodite pleasures herself with the whore’s big tits. Following along herself, Celise pops your [pc.tailCock] out of her mouth, shifting it downward to her big, bouncy teats and locking it between them, binding your dick in a prison of soft warm goo-tit. Still raptly watching the orgy onscreen, Celise starts to squeeze and move her tits, wanking you off between the two huge orbs. You moan, hips wiggling happily as your cock is coated in green slime, slipping easily through her cleavage again and again, with just enough resistance to let you feel the cum bubbling up through your prick, making you even harder as your seed comes up to feed your gooey friend.");
output("\n\nWith your cock submerged in Celise’s gooey tits, your orgasm mounts toward the inevitable, spurred on by her slick sliding tits as she moves them faster and faster. But just before your climax can come, the pornstar’s position changes, the girl rolling onto all fours to be pounded in every hole by her lovers. A moment later, she slides up onto your back, flopping down atop you with breasts pressing into your back, hands stroking your shoulders soothingly as her big, bubbly buttcheeks lock around your [pc.tailCock], squeezing it ever so smoothly. Celise flexes her cheeks, massaging your prick as she works your shoulders, cheek nuzzling against your own as you watch the money shot, cum splattering everywhere on the bimbo’s body, three cocks all coating her in a multi-colored spunk parade.");
output("\n\n<i>“You wanna cum, too?”</i> Celise asks, her breasts pressing down into your back, practically folding around you. Her ass never stops jacking you off, harder and faster until she’s leaving you with little choice but to join in on the on-screen debauchery. With a grunt and a lusty moan, you feel the spunk traveling up your tail as you finally reach the pinnacle of pleasure, and a moment later Celise yelps with sudden glee as the first of many great [pc.cumColor] globs burst out from between her ass cheeks, raining down onto her back. She rolls over, mouth open wide as your spunk falls all over her, absorbed into her gooey body as she feeds on your sexual release.");
output("\n\nYou ride the orgasm out, humping your hips against her quivering body as Celise sucks up every drop you have to give her; soon she’s got your cock plugged into her twat, wringing out anything that didn’t burst onto her back moments before. When the [pc.cumColor] explosion comes to an end, Celise seems awfully pleased, rolling back onto her belly, practically wrapping your head in her giant tits as she plants a kiss on your head. <i>“That was a nice snack, cap’n. We should do this again sometime, like, soon.”</i>");
output("\n\nYou nod, yawning powerfully as your tailcock slithers out of her, wrapping back around");
if(pc.legCount > 1) output(" one of");
output(" your [pc.legOrLegs]. To your surprise, though, the goo’s already curled up on you, snoring softly. You sigh and reach back, patting her jiggling ass cheek before locking your arms under your own [pc.face] for a quick nap in the afterglow.");
processTime(45 + rand(5));
pc.orgasm();
celise.orgasm();
clearMenu();
addButton(0,"Next",mainGameMenu);
}
//Vaginal Fap
public function vaginalFap():void {
clearOutput();
output("You ");
if(pc.isNude() || (pc.isCrotchExposed() && pc.isChestExposed())) {
output("lazily twist what little gear you wear to the side so as not to bump your arm into it while masturbating and smile to yourself about the practical advantages of being");
if(pc.isNude()) output(" nude");
else output(" mostly naked");
output(".");
}
else {
clearList();
if(pc.hasArmor() && !pc.isChestExposedByArmor() && !pc.isCrotchExposedByArmor()) addToList("wriggle out of your [pc.armor]");
if(pc.hasLowerGarment() && !pc.isCrotchExposedByLowerUndergarment()) {
addToList("push your [pc.lowerUndergarment] down");
trace("LOWER ON LIST");
}
if(pc.hasUpperGarment() && !pc.isChestExposedByUpperUndergarment())
{
addToList("pull your [pc.upperUndergarment] off");
trace("UPPER ON LIST");
}
output(formatList());
//trace("UP SHORT: " + pc.upperUndergarment.shortName);
//trace("LOW SHORT: " + pc.lowerUndergarment.shortName);
output(".");
}
output(" Exposed to the air, your [pc.vaginas] ");
if(pc.vaginaTotal() == 1) output("simmers");
else output("simmer");
output(" with latent, low-level arousal that is soon to bloom in an inferno of ardor and desire. The feminine scent of girlish arousal reaches your nose a moment before your fingers reach ");
if(pc.vaginaTotal() == 1) output("your");
else output("a");
output(" cleft, and you let out a happy, contented sigh as you start to deal with your baser needs.");
output("\n\nThe ");
if(pc.vaginas[0].wetness() <= 1) output("slightly damp entrance your fingers slide against");
else if(pc.vaginas[0].wetness() <= 2) output("sticky, simmering delta your fingers slip against");
else if(pc.vaginas[0].wetness() <= 3) output("unmistakably wet and ready slit your fingers almost slip into");
else if(pc.vaginas[0].wetness() <= 4) output("oozing, overly-lubricated entrance that nearly sucks your fingers in");
else output("soaking-wet, crotch-drenching entrance that would be oh so easy to enter");
output(" quivers deliciously at your touch, the folds engorging as they fill with unspent desire, their flesh sensitive and achy.");
if(pc.totalClits() > 0) {
output(" You slide your palm across the slowly-stiffening surface of your clitroral hood");
if(pc.totalClits() > 1) output("s before they swell");
else output(" before it swells");
output(" enough to become exposed.");
}
output(" Your body gives a gentle shudder at that");
if(pc.hasTail()) output(", your [pc.tail] flicking wildly behind you");
output(".");
if(rooms[currentLocation].hasFlag(GLOBAL.BED)) output(" You’re thankful to have a bed, and you lean back against the headboard, letting your [pc.legOrLegs] splay wide and twitch in a visible display of your enjoyment.");
else if(InShipInterior()) output(" You’re thankful to be in the comfort of your ship and splay your [pc.legOrLegs] out as much as the ship will allow, flexing your muscles in rapacious enjoyment.");
else
{
output(" You slump down against the nearest upright surface since your [pc.legOrLegs] seem");
if(pc.legCount == 1) output("s");
output(" to be too busy quivering to properly support you.");
}
//Second coochie touches!
if(pc.vaginaTotal() > 1) {
output("\n\nIf one is this good... you thrust your other hand down to your crotch as fast as you can, brushing past your other wrist as you find your way to your [pc.vagina 1] and stroke it with eager, feverish need. Paroxysms of pleasure rock your body, alternately locking and convulsing your muscles but not quite bringing you off yet; this is still mere foreplay. You curl your hand into a fist and drag your knuckles up and down that slit, spreading its lips slightly around your digit, rubbing yourself with both hands and letting out quiet little moans of enjoyment. This taste of ecstasy is almost too much and yet not nearly enough, and you plunge two sets of fingers into your eager openings.");
}
//Nipple fucky
//9999
if(pc.hasFuckableNipples()) {
output("\n\nYour other hand finds its way up to your [pc.chest], and more importantly, to one of your ");
if(pc.nipplesPerBreast > 1) output("clusters of ");
output("[pc.nipples]. The ");
if(!pc.hasLipples()) output("tender slit");
else output("tender lips");
output(" easily part around your intruding digit, letting you into another ecstatically clenching tunnel. Trembling contractions run up and down the interior of your sensitive, penetrable nipple as you plumb its moist depths. You slip a second finger in after the first, squelching noisily, shaking your [pc.chest] with the force of it, and you cannot resist mimicking the action down at [pc.oneVagina], thrusting inside, pumping your pussy with lewd, wet squelches of female bliss.");
}
//Regular Nips
else {
//9999
output("\n\nYour other hand finds its way to your [pc.chest], and more importantly, to one of your ");
if(pc.nipplesPerBreast > 1) output("clusters of ");
output("[pc.nipples]. You pinch and tweak at your sensitive bud, really working it back and forth as you toy with your nethers, tugging it from time to time to shoot darts of pleasurable agony through your licentiously contorting form. With one back-arching plunge, you work a pair of fingers into your needy slit, thrusting again and again, so hard that the wet squelches of female bliss are distinctly audible.");
}
output("\n\nYou moan, loud and low but inexorably rising higher with each touch and caress, each thrusting slip through your needy crevice. Arching your [pc.hips], you hump against your hand, grinding back into your quickly moving fingers");
if(pc.totalClits() > 0) output(", some plunging inside while others tend to [pc.oneClit]");
output(", your body practically on autopilot at this point - a quivering, pre-orgasm wreck. It’s no surprise to you; this is what you wanted after all. A high pitched, keening whine escapes your [pc.lips] as you climb towards the peak of pleasure, and your fingers are rapidly becoming soaked with your [pc.girlCum].");
output("\n\nThen, it comes all at once, an explosion of ecstasy strong enough to make your eyes roll back and your body go on autopilot: fingers thrusting, [pc.hips] lurching, [pc.legOrLegs] quivering. Your wail turns into a lurid moan every bit as sloppy as your spasming [pc.vaginas]");
if(pc.isSquirter()) output(", just before you squirt out ribbons of [pc.girlCum]");
output(".");
if(pc.hasFuckableNipples()) output(" Your [pc.nipples] react similarly, and you wind up pulling your soaked fingers free in the throes of your passion.");
output(" Drool from your lolling tongue drips to your [pc.chest], warm on your heaving [pc.skinFurScales] as you shudder one last, climactic time, letting the supernova-hot explosion of bliss roll up from your crotch to your brain. It bursts across your consciousness like a plasma-bolt comprised of pleasure, rolling back your eyes and turning your thoughts to nothing more than animal pleasure.");
if(pc.hasCock()) {
var cum:Number = pc.cumQ();
output("\n\nYour male anatomy goes off as well, triggered by the squelching blissplosions in your [pc.vaginas]. [pc.Cum] launches out of [pc.eachCock] in thick ropes onto your [pc.belly] and [pc.chest].");
if(cum < 25) output(" By the time you finish, you’ve got a nice little puddle there.");
else if(cum <= 100) output(" By the time you finish, you’ve soaked yourself and have thick ribbons of [pc.cumColor] goo rolling down either side of your [pc.hips].");
else if(cum <= 300) {
output(" By the time you finish, you’ve soaked yourself in [pc.cumColor] from the waist to the neck in your lovegoo, and huge streamers of the stuff are running off you to puddle on the ");
if(rooms[currentLocation].hasFlag(GLOBAL.BED)) output("bed");
else if(InShipInterior()) output("deck");
else output("ground");
output(".");
pc.applyCumSoaked();
}
else {
output(" It never really seems to end, not until you’ve splattered huge [pc.cumColor] gobs across your [pc.face] a half-dozen times and thoroughly painted the whole of your body with the seed-filled fluid.");
if(cum >= 10000) output(" Warm wetness rises up around you as you finish out, blissed out and semi-conscious.");
pc.applyCumSoaked();
if(cum > 5000) pc.applyCumSoaked();
if(cum > 10000) pc.applyCumSoaked();
if(cum > 30000) pc.applyCumSoaked();
if(cum > 50000) pc.applyCumSoaked();
}
}
output("\n\nYou come to a little later, reeking of sex, your fingers stained with girlish goo, and smile, sated... for now.");
processTime(45 + rand(5));
pc.orgasm();
clearMenu();
addButton(0,"Next",mainGameMenu);
}
//Single Dick Fap
public function singleDickFap():void {
clearOutput();
clearList();
if(pc.isNude() || pc.isCrotchExposed()) output("You sigh and stretch, letting [pc.eachCock] hang free. Sometimes, it’s good to be nude. You");
else {
if(!pc.isCrotchExposedByArmor() && pc.hasArmor()) {
output("You go ahead and pop open the bottom half of your [pc.armor]");
if(pc.hasLowerGarment() && pc.isCrotchExposedByLowerUndergarment()) output(" and [pc.lowerUndergarment]");
output(" to free [pc.eachCock], and you");
}
else output("You go ahead and pull down your [pc.lowerUndergarment] to free [pc.eachCock], and you");
}
output(" idly reach down to toy with [pc.oneCock], grabbing hold and feeling it fill out in your palm, stiffening in anticipatory lust - not that you needed any more. You’re plenty horny, and you begin to stroke, working yourself towards greater levels of pleasure with great vigor, pumping hard and fast on your ");
if(pc.cockTotal() > 1) output("chosen ");
output(" phallus. The [pc.cockHead] plumps up nice and full in your grip, already swelling out to its full size");
if(pc.hasCockFlag(GLOBAL.FLAG_FLARED)) output(", the flare dangerously expanding already");
output(", hot, lusty, and ready for action.");
//In ship? Pull up porno!
if(InShipInterior()) {
output("\n\nWith your other hand, you manipulate the ship’s computer to pull up some pornography from the extranet. At first, all you get are a bunch of pop-up holos about getting a space-order bride, pirating music, and cleaning malware off your computer systems, but eventually, you hit the jackpot");
if(silly) output(": XMiniatureGiantSpaceHamster.com");
output(". There’s four breasted whores from Omikron Perseus VI, three-cocked trannies masturbating, and even missionary sex in the missionary position for the sole purpose of procreation. You scroll through, picking video after video, watching increasingly debauched activities until [pc.eachCock] feels so full that it could burst.");
}
//Bottom of dick intro
var selector:Array = new Array();
if(pc.hasCockFlag(GLOBAL.FLAG_KNOTTED)) selector[selector.length] = GLOBAL.FLAG_KNOTTED;
if(pc.hasCockFlag(GLOBAL.FLAG_SHEATHED)) selector[selector.length] = GLOBAL.FLAG_SHEATHED;
if(pc.hasCockFlag(GLOBAL.FLAG_STINGER_BASED)) selector[selector.length] = GLOBAL.FLAG_STINGER_BASED;
if(selector.length == 0) selector[selector.length] = GLOBAL.TYPE_HUMAN;
var temp:int = selector[rand(selector.length)];
//Knotted
if(temp == GLOBAL.FLAG_KNOTTED) {
output("\n\nYou start by gently feeling around the bottom of your ");
if(pc.cocks[0].knotMultiplier <= 1.4) output("dutifully swelling");
else if(pc.cocks[0].knotMultiplier <= 1.6) output("nice, thick");
else if(pc.cocks[0].knotMultiplier <= 1.9) output("bloated");
else if(pc.cocks[0].knotMultiplier <= 2.5) output("obscenely swollen");
else output("ridiculously fat");
output(" knot, feeling the swollen cocklump pulse with every beat of your heart. The many veins visible around its circumference tingle pleasantly as they drum against your palm.");
}
//Sheath
else if(temp == GLOBAL.FLAG_SHEATHED) output("\n\nYou start by gently feeling around the sheath, rubbing the sensitive skin that would usually conceal your organ were it not so erect, and even let your fingers dip down into the folds between, running them around the inside, feeling your hands on your dick and yet at the same time penetrating you. By the time you pull them free, your heady, musky aroma is thick in the air. You move up to the shaft a nano-second later, eager to get into the real action.");
//Anemone Wavy
else if(temp == GLOBAL.FLAG_STINGER_BASED) {
output("\n\nYou start by gently feeling around the base of your shaft, letting your wriggling tendrils brush your knuckles, their stinging venom both painful and pleasant all at once. A chemical excitement spreads up your arm, darkening the [pc.skin]");
if(pc.skinType != GLOBAL.SKIN_TYPE_SKIN) output(" under your [pc.skinFurScales]");
output(", exciting your heart until you feel it’s about to thud its way out of your chest. A ripple of sensual pleasure spreads out from your crotch as the venom circulates through your bloodstream to its goal.");
}
//Nothing special:
else output("\n\nYou start by gently caressing yourself, twisting your fingers around your dick, caressing the sensitive underside of your dick as your lasciviousness mounts. Every contact of [pc.skinFurScales] on skin sends electric currents of pleasure shooting through your body.");
//Top of dick intro
selector = new Array();
if(pc.hasCockFlag(GLOBAL.FLAG_TAPERED)) selector[selector.length] = GLOBAL.FLAG_TAPERED;
if(pc.hasCockFlag(GLOBAL.FLAG_FLARED)) selector[selector.length] = GLOBAL.FLAG_FLARED;
if(pc.hasCockFlag(GLOBAL.FLAG_PREHENSILE)) selector[selector.length] = GLOBAL.FLAG_PREHENSILE;
if(pc.hasCockFlag(GLOBAL.FLAG_STINGER_TIPPED)) selector[selector.length] = GLOBAL.FLAG_STINGER_TIPPED;
if(selector.length == 0) selector[selector.length] = GLOBAL.TYPE_HUMAN;
temp = selector[rand(selector.length)];
//Pointed
if(temp == GLOBAL.FLAG_TAPERED) {
output("\n\nSoon, you’re panting with excitement, thrusting against your hand when your fingers touch the sensitive point to bury yourself back to down to your [pc.knot] in your hand’s reflexively tight grip. You stroke up again, fondle yourself, and whine as your body forces you to thrust, embedding your pointed prick deep into your hand once more, pleasuring yourself with rapid humps and vice-like squeezes.");
}
//Flared
else if(temp == GLOBAL.FLAG_FLARED) {
output("\n\nSoon, you’re panting with excitement, your [pc.hips] quivering as you dance your touches up past the middle of your flexing member. Your member gives a mighty shudder when you approach the flare, and that masculine ring thickens in response, engorging with fresh blood and becoming even more responsive to your touches.");
if(pc.isTaur()) output(" You fail to suppress a muted whinney as your body gives in to its animalistic instincts.");
}
//Anemone Wavy
else if(temp == GLOBAL.FLAG_STINGER_TIPPED) {
output("\n\nSoon, you’re panting with excitement and stroking your hand up and down your length. It’s hard and sensitive as you’ve come to expect, but on your upstrokes, you get to your favorite part: the squirming tendrils that ring your crown. They have all the sensitivity of your cocktip, but at the same time, they also move with their own independant skills and desires, slipping between your fingers and dosing you with even more of your own venom.");
}
//Prehensile
else if(temp == GLOBAL.FLAG_PREHENSILE) {
output("\n\nSoon, you’re panting with excitement and handling the [pc.cockHead], twitching excitedly as it squirms against your hand, wrapping around your wrist and tugging it to make it move faster. Your own cock is encouraging you to jack off, driving your arm with pistol-like speed, forcing you to drive your need even hire, until it becomes a palpable, almost tangible thing. You cry out and jack harder, faster, and your cock straightens out under the assault, letting you pleasure its entire length unimpeded.");
}
//Nothing special
else output("\n\nSoon, you are panting with excitement, your hips giving little upward lurches when you fondle your [pc.cockHead], letting your fingers play over it while you imagine it’s actually some cute alien doing the touching.");
var cum:Number = pc.cumQ();