Kitteh6660

ReductPro.as

Oct 27th, 2016
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package classes.Items.Miscellaneous
  2. {
  3.     import classes.ItemSlotClass;
  4.     import classes.GLOBAL;
  5.     import classes.Creature;
  6.     import classes.kGAMECLASS;
  7.     import classes.Characters.PlayerCharacter;
  8.     import classes.GameData.TooltipManager;
  9.     import classes.GameData.CodexManager;
  10.     import classes.CockClass;
  11.     import classes.StringUtil;
  12.     import classes.Engine.Interfaces.*;
  13.     import classes.Engine.Utility.*;
  14.    
  15.     public class ReductPro extends ItemSlotClass
  16.     {
  17.         //constructor
  18.         public function ReductPro()
  19.         {
  20.             this._latestVersion = 1;
  21.             this.quantity = 1;
  22.             this.stackSize = 5;
  23.             this.type = GLOBAL.GADGET;
  24.             //Used on inventory buttons
  25.             this.shortName = "ReductPro";
  26.             //Regular name
  27.             this.longName = "container labeled 'ReductPro'";
  28.            
  29.             TooltipManager.addFullName(this.shortName, StringUtil.toTitleCase(this.longName));
  30.            
  31.             //Longass shit, not sure what used for yet.
  32.             this.description = "a package containing a single container labeled “ReductPro”";
  33.             //Displayed on tooltips during mouseovers
  34.             this.tooltip = "This is a colorfully-packaged box featuring some holovid sales girl.";
  35.             if(kGAMECLASS.silly) this.tooltip += " <i>Hi, Milly Bayes here with new ReductPro! Got a dick that’s two sizes too big? Too much junk in your trunk? Are you suffering from weight gain, bloating, aching and groaning? Well now J’ejune Pharmaceutical has the cure: ReductPro!\n\nReductPro uses powerful fast-acting agents based on a combination of ancient alchemical practices and amazing scientific research to the provide targeted relief you can rely on!\n\nReductPro. Apply directly to the desired area, and in seconds you’ll see immediate results with no long-term side effects! Don’t put up with your weight! Cut your mass down to size, with ReductPro!</i>";
  36.             else this.tooltip += " White lettering informs you that this paste is designed to help you lose weight and get rid of oversized body parts.";
  37.             this.tooltip += "\n\nA warning states: <i>INTENDED FOR TOPICAL USE ONLY, AVOID SENSITIVE AREAS!</i> Below this, in much smaller text, is a long string of minor potential side effects. Within the colorful packaging is a dull gray tube of paste.";
  38.            
  39.             TooltipManager.addTooltip(this.shortName, this.tooltip);
  40.            
  41.             this.attackVerb = "";
  42.             //Information
  43.             this.basePrice = 2000;
  44.            
  45.             this.version = this._latestVersion;
  46.         }
  47.        
  48.         protected function rand(max: Number): Number
  49.         {
  50.             return int(Math.random() * max);
  51.         }
  52.        
  53.         //ReductPro: The Reducto of TiTS!
  54.         // Usage Menu:
  55.         private function menuReductProOptions(clearText:Boolean = false):void
  56.         {
  57.             var pc:PlayerCharacter = kGAMECLASS.pc;
  58.            
  59.             if(clearText) clearOutput();
  60.             else output("\n\n");
  61.             kGAMECLASS.showName("\nReductPro");
  62.             output("You ponder over how to use ReductPro. Which body part will you shrink?");
  63.            
  64.             // Build menu:
  65.             clearMenu();
  66.            
  67.             // 0 - Breasts (Single Row)
  68.             // 5 - Breasts (All)
  69.             if(pc.hasBreasts())
  70.             {
  71.                 if(pc.totalBreasts() == 1) addButton(0, "Breast", useReductProShrinkBreasts, 0, "Breast", "Apply the paste to your [pc.breast].");
  72.                 else if(pc.breastRows.length > 1) addButton(0, "Breasts", useReductProShrinkBreastsMenu, undefined, "Breasts (Single Row)", "Apply the paste to your [pc.breasts].");
  73.                 else addButton(0, "Breasts", useReductProShrinkBreasts, 0, "Breasts", "Apply the paste to your [pc.breasts].");
  74.                
  75.                 if(pc.breastRows.length > 1) addButton(5, "BreastAll", useReductProShrinkBreastsAll, undefined, "Breasts (All)", "Apply the paste to your [pc.fullChest].");
  76.                 else kGAMECLASS.addDisabledButton(5, "BreastAll", "Breasts (All)", "You need multiple rows of breasts for that!");
  77.             }
  78.             else {
  79.                 kGAMECLASS.addDisabledButton(0, "Breasts", "Breasts", "You need breasts for that!");
  80.                 kGAMECLASS.addDisabledButton(5, "BreastAll", "BreastAll", "You need breasts for that!");
  81.             }
  82.            
  83.             // 1 - Nipples
  84.             // 6 - Nipples (All)
  85.             if(pc.hasNipples())
  86.             {
  87.                 if(pc.totalNipples() == 1)
  88.                 {
  89.                     if(pc.nippleLengthRatio > 0) addButton(1, "Nipple", useReductProShrinkNipples, -1, "Nipple", "Apply the paste to your [pc.nipple].");
  90.                     else kGAMECLASS.addDisabledButton(1, "Nipple", "Nipple", "Your nipple is already as small as it can be!");
  91.                 }
  92.                 else if(pc.breastRows.length > 1)
  93.                 {
  94.                     if(pc.nippleLengthRatio > 0) addButton(1, "Nipples", useReductProShrinkNipplesMenu, -1, "Nipples (Single Row)", "Apply the paste to a row of your [pc.nipples].");
  95.                     else kGAMECLASS.addDisabledButton(1, "Nipples", "Nipples (Single Row)", "Your nipples are already as small as they can be!");
  96.                 }
  97.                 else
  98.                 {
  99.                     if(pc.nippleLengthRatio > 0) addButton(1, "Nipples", useReductProShrinkNipples, -1, "Nipples", "Apply the paste to your [pc.nipples].");
  100.                     else kGAMECLASS.addDisabledButton(1, "Nipples", "Nipples", "Your nipples are already as small as they can be!");
  101.                 }
  102.                
  103.                 if(pc.breastRows.length > 1)
  104.                 {
  105.                     if(pc.nippleLengthRatio > 0) addButton(6, "NipplesAll", useReductProShrinkNipples, -1, "Nipples (All)", "Apply the paste to your [pc.nipples].");
  106.                     else kGAMECLASS.addDisabledButton(6, "NipplesAll", "Nipples (All)", "Your nipples are already as small as they can be!");
  107.                 }
  108.                 else kGAMECLASS.addDisabledButton(6, "NipplesAll", "Nipples (All)", "You need multiple rows of nipples for that!");
  109.             }
  110.             else kGAMECLASS.addDisabledButton(1, "Nipples", "Nipples", "You need nipples for that!");
  111.            
  112.             // 10 - Vagina
  113.             // 11 - Clit(s)
  114.             if(pc.hasVagina())
  115.             {
  116.                 if(pc.gapestVaginaLooseness() >= 2)
  117.                 {
  118.                     if(pc.totalVaginas() == 1) addButton(10, "Vagina", useReductProShrinkVagina, undefined, "Vagina", "Apply the paste to your [pc.vagina].");
  119.                     else addButton(7, "Vaginas", useReductProShrinkVagina, undefined, "Vaginas", "Apply the paste to [pc.eachVagina].");
  120.                 }
  121.                 else if(pc.totalVaginas() == 1) kGAMECLASS.addDisabledButton(10, "Vagina", "Vagina", "Your vagina is as tight as it can be!");
  122.                 else kGAMECLASS.addDisabledButton(10, "Vaginas", "Vaginas", "Your vaginas are as tight as they can be!");
  123.                
  124.                 if(pc.totalClits() > 0)
  125.                 {
  126.                     if(pc.totalClits() == 1)
  127.                     {
  128.                         if(pc.clitLength > 0.1) addButton(11, "Clit", useReductProShrinkClits, undefined, "Clit","Apply the paste to your [pc.clit].");
  129.                         else kGAMECLASS.addDisabledButton(11, "Clit", "Clit", "Your clit is already as small as it can be!");
  130.                     }
  131.                     else
  132.                     {
  133.                         if(pc.clitLength > 0.1) addButton(11, "Clits", useReductProShrinkClits, undefined, "Clits","Apply the paste to [pc.eachClit].");
  134.                         else kGAMECLASS.addDisabledButton(11, "Clits", "Clits", "Your clits are already as small as they can be!");
  135.                     }
  136.                 }
  137.                 else kGAMECLASS.addDisabledButton(11, "Clit", "Clit", "You need a clitoris for that!");
  138.             }
  139.             else kGAMECLASS.addDisabledButton(10, "Vagina", "Vagina", "You need a vagina for that!");
  140.            
  141.             // 2 - Cocks (Single)
  142.             // 7 - Cocks (All)
  143.             if(pc.hasCock())
  144.             {
  145.                 if(pc.totalCocks() == 1)
  146.                 {
  147.                     if(pc.cocks[0].cLength() > 1) addButton(2, "Cock", useReductProShrinkCock, 0, "Cock", "Apply the paste to your [pc.cock].");
  148.                     else kGAMECLASS.addDisabledButton(2, "Cock", "Cock", "Your cock is as short as it can be!");
  149.                 }
  150.                 else
  151.                 {
  152.                     if(pc.longestCockLength() > 1) addButton(2, "Cock", useReductProShrinkCockMenu, undefined, "Cock (Single)", "Apply the paste to [pc.oneCock].");
  153.                     else kGAMECLASS.addDisabledButton(2, "Cock", "Cock (Single)", "All of your cocks are as short as they can be!");
  154.                 }
  155.                
  156.                 if(pc.cocks.length > 1)
  157.                 {
  158.                     if(pc.longestCockLength() > 1) addButton(7, "All Cocks", useReductProShrinkCockAll, undefined, "Cocks (All)", "Apply the paste to [pc.eachCock].");
  159.                     else kGAMECLASS.addDisabledButton(7, "All Cocks", "Cocks (All)", "All of your cocks are as short as they can be!");
  160.                 }
  161.                 else if(pc.longestCockLength() > 1) kGAMECLASS.addDisabledButton(7, "All Cocks", "Cocks (All)", "You need multiple cocks for that!");
  162.             }
  163.             else kGAMECLASS.addDisabledButton(2, "Cock", "Cock", "You need a cock for that!");
  164.             // 12 - Balls
  165.             if(pc.balls > 0 && pc.ballSizeRaw >= 0.5)
  166.             {
  167.                 if(pc.balls == 1) addButton(12, "Testicle", useReductProShrinkBalls, undefined, "Testicle", "Apply the paste to your [pc.balls].");
  168.                 else if(pc.hasStatusEffect("Uniball")) addButton(12, "Uniball", useReductProShrinkBalls, undefined, "Uniball", "Apply the paste to your [pc.balls].");
  169.                 else addButton(12, "Balls", useReductProShrinkBalls, undefined, "Balls", "Apply the paste to your [pc.balls].");
  170.             }
  171.             else if(pc.balls > 0)
  172.             {
  173.                 if(pc.balls == 1) kGAMECLASS.addDisabledButton(12, "Testicle", "Testicle", "Your [pc.ballNoun] is as small is it can be!");
  174.                 else if(pc.hasStatusEffect("Uniball")) kGAMECLASS.addDisabledButton(12, "Uniball", "Uniball", "Your [pc.ballsNoun] are as small as they can be!");
  175.                 else kGAMECLASS.addDisabledButton(12, "Balls", "Balls", "Your [pc.ballsNoun] are as small as they can be!");
  176.             }
  177.             else kGAMECLASS.addDisabledButton(12, "Balls", "Balls", "You need balls for that!");
  178.            
  179.             // 3 - Hips
  180.             if(pc.hipRatingRaw > 0) addButton(3, "Hips", useReductProShrinkHips, undefined, "Hips","Apply the paste to your [pc.hips].");
  181.             else kGAMECLASS.addDisabledButton(3, "Hips", "Hips", "Your hips are as narrow as they can be!");
  182.             // 8 - Butt
  183.             if(pc.buttRatingRaw > 0) addButton(8, "Butt", useReductProShrinkButt, undefined, "Butt", "Apply the paste to your [pc.butts].");
  184.             else kGAMECLASS.addDisabledButton(8, "Butt", "Butt", "Your ass cheeks are as small as they can be!");
  185.             // 13 - Belly
  186.             if(pc.bellyRatingRaw > 0) addButton(13, "Belly", useReductProShrinkBelly, undefined, "Belly", "Apply the paste to your [pc.belly].");
  187.             else kGAMECLASS.addDisabledButton(13, "Belly", "Belly", "Your belly is as flat as it can be!");
  188.            
  189.             // 4 - Anus
  190.             if(!pc.ass.loosenessRaw >= 2) addButton(4, "Anus", useReductProShrinkAnus, undefined, "Anus", "Apply the paste to your [pc.asshole].");
  191.             else kGAMECLASS.addDisabledButton(4, "Anus", "Anus", "Your asshole is as tight as it can be!");
  192.             // 9 - Horns
  193.             if(pc.hasHorns())
  194.             {
  195.                 if(pc.horns == 1) addButton(9, StringUtil.capitalize(pc.hornsNoun()), useReductProShrinkHorns, undefined, StringUtil.capitalize(pc.hornsNoun()), "Apply the paste to your [pc.horn].");
  196.                 else addButton(9, StringUtil.capitalize(pc.hornsNoun()), useReductProShrinkHorns, undefined, StringUtil.capitalize(pc.hornsNoun()), "Apply the paste to [pc.eachHorn].");
  197.             }
  198.             else kGAMECLASS.addDisabledButton(9, "Horns", "Horns", "You need horns for that!");
  199.             // 14 - Back
  200.             addButton(14, "Back", menuReductProQuit, undefined, "Nevermind", "Put the container back in your inventory.");
  201.            
  202.             return;
  203.         }
  204.        
  205.         // Breasts (Single Row) - Brings up prompt on which row to shrink.
  206.         private function useReductProShrinkBreastsMenu():void
  207.         {
  208.             var pc:PlayerCharacter = kGAMECLASS.pc;
  209.             clearOutput();
  210.             kGAMECLASS.userInterface.author("Kitteh6660");
  211.            
  212.             output("Which row of breasts will you shrink?");
  213.            
  214.             // Generate text and buttons:
  215.             clearMenu();
  216.             if(pc.breastRows.length <= 0) output("\n\nIt looks like you don't have any extra rows...");
  217.             else
  218.             {
  219.                 output("\n\n<b>Total Rows:</b> " + pc.breastRows.length);
  220.                 output("\n<b>Total Breast Count:</b> " + pc.totalBreasts());
  221.                
  222.                 var x:int = 0;
  223.                 var y:int = 0;
  224.                 var z:int = 0;
  225.                
  226.                 for(x = 0; x < pc.breastRows.length; x++)
  227.                 {
  228.                     y = x + Math.floor(x/14);
  229.                     z = 15*(Math.floor(x/14)) - 1;
  230.                    
  231.                     output("\n\n<b>" + StringUtil.capitalize(num2Ordinal(x + 1)) + " Row:</b>");
  232.                     output("\nCount: " + pc.breastRows[x].breasts);
  233.                     if(pc.breastRows[x].breastRating() > 0)
  234.                     {
  235.                         output("\nSize: " + pc.breastCup());
  236.                         if(pc.breastRows[x].breasts != 1) output("s");
  237.                     }
  238.                     else output("\nSize: Flat");
  239.                    
  240.                    
  241.                     // Valid boob row
  242.                     addButton(y, String("Row " + (x + 1)), useReductProShrinkBreasts, x);
  243.                     // Nah...
  244.                     if(x == z) addButton(x, "Back", menuReductProOptions, true, "Nevermind", "Choose something else...");
  245.                 }
  246.             }
  247.             addButton(14, "Back", menuReductProOptions, true, "Nevermind", "Choose something else...");
  248.            
  249.             return;
  250.         }
  251.        
  252.         // Breasts (Single Row)
  253.         private function useReductProShrinkBreasts(rowNum:int = 0):void
  254.         {
  255.             var pc:PlayerCharacter = kGAMECLASS.pc;
  256.             clearOutput();
  257.             kGAMECLASS.userInterface.author("Kitteh6660");
  258.            
  259.             if(pc.isChestCovered())output("Preparing yourself, you remove your [pc.upperGarments]. ");
  260.             output("You unscrew the cap and squeeze the contents of ReductPro on your hand and apply the paste over your [pc.chest " + rowNum + "].");
  261.            
  262.             if(pc.biggestTitSize() <= 0)
  263.             {
  264.                 output("\n\nYou shudder as");
  265.                 if(pc.breastRows.length > 1) output(" a single row of");
  266.                 output(" your [pc.breasts " + rowNum + "] tingle");
  267.                 if(pc.breastsPerRow(rowNum) == 1) output("s");
  268.                 output(" for a short moment, but then the feeling passes as soon as it starts... Perhaps you are as flat as you're going to get?");
  269.                
  270.                 useReductProDone(true);
  271.                 return;
  272.             }
  273.            
  274.             var nShrink:Number = 0;
  275.            
  276.             // Shrink breast size by up to 4 cup sizes, depending on your breast size. Critical shrink shrinks 1-2 additional cup size.
  277.             nShrink += 1 + rand(2);
  278.             // Larger than big EE-cups
  279.             if(pc.breastRows[rowNum].breastRatingRaw > 10) nShrink += 1;
  280.             // Larger than big H-cups
  281.             if(pc.breastRows[rowNum].breastRatingRaw > 20) nShrink += 1;
  282.             // Safety
  283.             if(nShrink > pc.breastRows[rowNum].breastRatingRaw) nShrink = pc.breastRows[rowNum].breastRatingRaw;
  284.            
  285.             if(pc.breastRatingUnlocked(rowNum, (pc.breastRows[rowNum].breastRatingRaw - nShrink)))
  286.             {
  287.                 output("\n\nYou shudder as");
  288.                 if(pc.breastRows.length > 1) output(" a single row of");
  289.                 output(" your [pc.breasts " + rowNum + "] shrink to a");
  290.                 if(nShrink < 2) output(" slightly");
  291.                 else if(nShrink > 2) output(" much");
  292.                 output(" smaller size!");
  293.                
  294.                 pc.breastRows[rowNum].breastRatingRaw -= nShrink;
  295.                
  296.                 // Critical shrink!
  297.                 if(pc.breastRows[rowNum].breastRatingRaw > 0 && rand(4) == 0)
  298.                 {
  299.                     nShrink = 1 + rand(2);
  300.                    
  301.                     output("\n\n");
  302.                     if(kGAMECLASS.silly) output("<b>Critical shrinkage!</b> ");
  303.                     output("The pasty substance continues to manifest, shrinking your [pc.breasts " + rowNum + "] by another");
  304.                     if(nShrink != 1) output(" " + num2Text(nShrink) + " cups!");
  305.                     else output(" cup!");
  306.                    
  307.                     pc.breastRows[rowNum].breastRatingRaw -= nShrink;
  308.                 }
  309.                
  310.                 output("\n\nOnce the substance has been fully absorbed, <b>you confirm that your");
  311.                 if(pc.breastRows.length > 1) output(" " + num2Ordinal(rowNum + 1) + " row of");
  312.                 if(pc.breastsPerRow(rowNum) == 1)
  313.                 {
  314.                     if(pc.breastRows[rowNum].breastRating() > 0) output(" tit is now at " + indefiniteArticle(pc.breastCup(rowNum)) + ".");
  315.                     else output(" tit is now flat.");
  316.                 }
  317.                 else
  318.                 {
  319.                     if(pc.breastRows[rowNum].breastRating() > 0) output(" tits are now at " + pc.breastCup(rowNum) + "s.");
  320.                     else output(" tits are now flat.");
  321.                 }
  322.                 output("</b>");
  323.                
  324.                 if(pc.isBimbo()) output(" <i>Aw, this is no time for me to lose my tits!</i>");
  325.                
  326.                 // Done!
  327.                 useReductProDone();
  328.                 return;
  329.             }
  330.             else
  331.             {
  332.                 output("\n\n" + pc.breastRatingLockedMessage());
  333.                 useReductProDone(true);
  334.                 return;
  335.             }
  336.         }
  337.        
  338.         // Breasts (All)
  339.         private function useReductProShrinkBreastsAll(rowNum:int = 0):void
  340.         {
  341.             var pc:PlayerCharacter = kGAMECLASS.pc;
  342.             clearOutput();
  343.             kGAMECLASS.userInterface.author("Kitteh6660");
  344.            
  345.             if(pc.isChestCovered())output("Preparing yourself, you remove your [pc.upperGarments]. ");
  346.             output("You unscrew the cap and squeeze the contents of ReductPro onto your hand, and smear the foul-smelling ointment all over your " + pc.allBreastsDescript() + ", covering them entirely as the paste begins to get absorbed into your " + pc.skin() + ".");
  347.            
  348.             if(pc.biggestTitSize() <= 0)
  349.             {
  350.                 output("\n\nYou shudder as your [pc.breasts] tingle for a short moment, but then the feeling passes as soon as it starts... Perhaps you are as flat as you're going to get?");
  351.                
  352.                 useReductProDone(true);
  353.                 return;
  354.             }
  355.            
  356.             var nShrink:Number = 0;
  357.             var x:int = 0;
  358.            
  359.             // Shrink breast size by 1-4 cup sizes, depending on your breast size.
  360.             nShrink += 1 + rand(4);
  361.             // If 2 rows, shrink by 2 cup sizes.
  362.             if(pc.breastRows.length == 2) nShrink = 2;
  363.             // If 3+, shrink by 1-2 cup sizes.
  364.             if(pc.breastRows.length >= 3) nShrink = 1 + rand(2);
  365.             // Safety
  366.             if(nShrink > pc.breastRows[pc.biggestTitRow()].breastRatingRaw) nShrink = pc.breastRows[pc.biggestTitRow()].breastRatingRaw;
  367.            
  368.             if(pc.breastRatingUnlocked(pc.biggestTitRow(), (pc.breastRows[pc.biggestTitRow()].breastRatingRaw - nShrink)) || rand(10) == 0)
  369.             {
  370.                 output("\n\nYou shudder as your [pc.chestFull] shrink to a");
  371.                 if(nShrink < 2) output(" slightly");
  372.                 else if(nShrink > 2) output(" much");
  373.                 output(" smaller size!");
  374.                
  375.                 for(x = 0; x < pc.breastRows.length; x++)
  376.                 {
  377.                     pc.breastRows[x].breastRatingRaw -= nShrink;
  378.                 }
  379.                
  380.                 // Critical shrink!
  381.                 if(pc.breastRows[pc.biggestTitRow()].breastRatingRaw > 0 && rand(4) == 0)
  382.                 {
  383.                     nShrink = 1 + rand(2);
  384.                    
  385.                     output("\n\n");
  386.                     if(kGAMECLASS.silly) output("<b>Critical shrinkage!</b> ");
  387.                     output("The pasty substance continues to manifest, shrinking your [pc.breasts] by another");
  388.                     if(nShrink != 1) output(" " + num2Text(nShrink) + " cups!");
  389.                     else output(" cup!");
  390.                    
  391.                     for(x = 0; x < pc.breastRows.length; x++)
  392.                     {
  393.                         pc.breastRows[x].breastRatingRaw -= nShrink;
  394.                     }
  395.                 }
  396.                
  397.                 output("\n\nOnce the substance has been fully absorbed, <b>you confirm that your");
  398.                 if(pc.breastRows[pc.biggestTitRow()].breastRating() > 0) output(" tits are now at " + pc.breastCup(pc.biggestTitRow()) + "s.");
  399.                 else output(" tits are now flat.");
  400.                 output("</b>");
  401.                
  402.                 if(pc.isBimbo()) output(" <i>Oopsies, my boobies!</i>");
  403.                
  404.                 // Done!
  405.                 useReductProDone();
  406.                 return;
  407.             }
  408.             else
  409.             {
  410.                 output("\n\n" + pc.breastRatingLockedMessage());
  411.                 useReductProDone(true);
  412.                 return;
  413.             }
  414.         }
  415.  
  416.         // Nipples (Single Row) - Brings up prompt on which row to shrink.
  417.         private function useReductProShrinkNipplesMenu():void
  418.         {
  419.             var pc:PlayerCharacter = kGAMECLASS.pc;
  420.             clearOutput();
  421.             kGAMECLASS.userInterface.author("Kitteh6660");
  422.            
  423.             output("Which row of nipples will you shrink?");
  424.            
  425.             // Generate text and buttons:
  426.             clearMenu();
  427.             if(pc.breastRows.length <= 0) output("\n\nIt looks like you don't have any extra rows...");
  428.             else
  429.             {
  430.                 output("\n\n<b>Total Rows:</b> " + pc.breastRows.length);
  431.                 output("\n<b>Nipple Count:</b> " + pc.nipplesPerBreast + " nipple");
  432.                 if(pc.nipplesPerBreast != 1) output("s");
  433.                 output(" per breast");
  434.                 output("\n<b>Total:</b> " + pc.totalNipples());
  435.                
  436.                 var x:int = 0;
  437.                 var y:int = 0;
  438.                 var z:int = 0;
  439.                
  440.                 for(x = 0; x < pc.breastRows.length; x++)
  441.                 {
  442.                     y = x + Math.floor(x/14);
  443.                     z = 15*(Math.floor(x/14)) - 1;
  444.                    
  445.                     output("\n\n<b>" + StringUtil.capitalize(num2Ordinal(x + 1)) + " Row:</b>");
  446.                     output("\nType: " + GLOBAL.NIPPLE_TYPE_NAMES[pc.breastRows[x].nippleType]);
  447.                     if(pc.breastRows[x].nippleType == GLOBAL.NIPPLE_TYPE_DICK) output(", " + GLOBAL.TYPE_NAMES[pc.dickNippleType]);
  448.                     output("\nNipple Length: " + pc.nippleLength(x) + " inch");
  449.                     if(pc.nippleLength(x) != 1) output("es");
  450.                     output("\nAreola Size: " + pc.nippleWidth(x) + " inch");
  451.                     if(pc.nippleWidth(x) != 1) output("es");
  452.                    
  453.                     // Valid nipple row
  454.                     addButton(y, String("Row " + (x + 1)), useReductProShrinkNipples, x);
  455.                     // Nah...
  456.                     if(x == z) addButton(x, "Back", menuReductProOptions, true, "Nevermind", "Choose something else...");
  457.                 }
  458.             }
  459.             addButton(14, "Back", menuReductProOptions, true, "Nevermind", "Choose something else...");
  460.            
  461.             return;
  462.         }
  463.        
  464.         // Nipples (rowNum: -1 is all, 0+ is a row)
  465.         private function useReductProShrinkNipples(rowNum:int = 0):void
  466.         {
  467.             var pc:PlayerCharacter = kGAMECLASS.pc;
  468.             clearOutput();
  469.             kGAMECLASS.userInterface.author("Kitteh6660");
  470.            
  471.             var x:int = 0;
  472.             var nShrink:Number = (pc.nippleLengthRatio*0.5)/pc.breastRows.length;
  473.             var bChanged:Boolean = false;
  474.            
  475.             if(pc.isChestCovered())output("Preparing yourself, you remove your [pc.upperGarments]. ");
  476.             output("You unscrew the cap and squeeze the contents of ReductPro on your hand and you begin to apply them to");
  477.            
  478.             if(rowNum >= 0)
  479.             {
  480.                 if(pc.breastRows.length > 1) output(" a single row of");
  481.                 output(" your nipple");
  482.                 if(pc.nipplesPerBreast * pc.breastRows[rowNum].breasts != 1) output("s");
  483.                 output(" evenly.");
  484.             }
  485.             else
  486.             {
  487.                 if(pc.breastRows.length == 2) output(" both rows of");
  488.                 else if(pc.breastRows.length > 1) output(" all rows of");
  489.                 output(" your nipple");
  490.                 if(pc.breastRows.length > 1 || pc.totalBreasts() != 1) output("s");
  491.                 output(" evenly.");
  492.             }
  493.            
  494.             if(pc.nippleLengthRatio <= 0.1 || pc.hasFlatNipples())
  495.             {
  496.                 output("\n\nYou shudder as your [pc.nipples " + rowNum + "] tingle");
  497.                 if(pc.totalNipples() == 1) output("s");
  498.                 output(" for a short moment, but then the feeling passes as soon as it starts... Looks like your [pc.nipples] won't be getting any smaller...");
  499.                
  500.                 if(pc.isBimbo()) output(" <i>That's right--it only makes sense if my nips were bigger, like... like all suckable and stuff!</i>");
  501.                
  502.                 useReductProDone(true);
  503.                 return;
  504.             }
  505.            
  506.             // Shrink nipple size by 50% divided by the number of rows.
  507.             if(pc.nippleLengthRatioUnlocked(pc.nippleLengthRatio - nShrink))
  508.             {
  509.                 if(rowNum >= 0)
  510.                 {
  511.                     output("\n\n");
  512.                     if(pc.nipplesPerBreast * pc.breastRows[rowNum].breasts == 1) output("You shudder as your [pc.nipple " + rowNum + "] shrinks until it has lost a fraction of its old size.");
  513.                     else output("Instead of affecting the row you've applied the drug to, the paste's effect seems to spread to all of your nipples... You shudder as your [pc.nipples " + rowNum + "] shrink until they have lost a fraction of their old size.");
  514.                    
  515.                     pc.nippleLengthRatio -= nShrink;
  516.                     if(pc.nippleLengthRatio < 0.1) pc.nippleLengthRatio = 0.1;
  517.                    
  518.                     // May lose nipplecunts and nipplecocks if you ReductPro them enough.
  519.                     if((pc.breastRows[rowNum].fuckable() || pc.breastRows[rowNum].nippleType == GLOBAL.NIPPLE_TYPE_DICK) && rand(5) == 0)
  520.                     {
  521.                         if(pc.nippleTypeUnlocked(rowNum, GLOBAL.NIPPLE_TYPE_NORMAL))
  522.                         {
  523.                             if(pc.breastRows[rowNum].fuckable())
  524.                             {
  525.                                 if(pc.breastsPerRow(rowNum) == 1 && pc.nipplesPerBreast == 1) output("\n\nThe slit in your [pc.nipple " + rowNum + "] feels tighter and as you reach your fingers to it, you can find no traces of the slit. <b>Your nipple is no longer fuckable!</b>");
  526.                                 else output("\n\nThe slit in your [pc.nipples " + rowNum + "] feel tighter and as you reach your fingers to them, you can find no traces of the slit. <b>Your nipples are no longer fuckable!</b>");
  527.                                
  528.                                 pc.breastRows[rowNum].nippleType = GLOBAL.NIPPLE_TYPE_NORMAL;
  529.                             }
  530.                             else if(pc.breastRows[rowNum].nippleType == GLOBAL.NIPPLE_TYPE_DICK)
  531.                             {
  532.                                 if(pc.breastsPerRow(rowNum) == 1 && pc.nipplesPerBreast == 1) output("\n\nYour [pc.nippleCock] slides out of your [pc.nipple] to full erection before the remaining ReductPro start to manifest and your [pc.nippleCock] shrinks back to nothing. You give your [pc.nipple " + rowNum + "] an experimental pinch to confirm that you no longer have it. <b>You have lost your nipplecock!</b>");
  533.                                 else  output("\n\nYour [pc.nippleCocks] slide out of your [pc.nipples] to full erection before the remaining ReductPro start to manifest and your [pc.nippleCocks] shrink back to nothing. You give your [pc.nipples " + rowNum + "] an experimental pinch to confirm that you no longer have them. <b>You have lost your nipplecocks!</b>");
  534.                                
  535.                                 pc.breastRows[rowNum].nippleType = GLOBAL.NIPPLE_TYPE_NORMAL;
  536.                                
  537.                                 if(pc.isBimbo()) output(" <i>Aww, but I like my yummy cocks...</i>");
  538.                             }
  539.                         }
  540.                         else
  541.                         {
  542.                             output("\n\n" + pc.nippleTypeLockedMessage());
  543.                         }
  544.                     }
  545.                     // May get flat nipples!
  546.                     else if(pc.nippleLengthRatio <= 0.2 && pc.breastRows[rowNum].nippleType != GLOBAL.NIPPLE_TYPE_FLAT && rand(2) == 0)
  547.                     {
  548.                         if(pc.nippleTypeUnlocked(rowNum, GLOBAL.NIPPLE_TYPE_FLAT))
  549.                         {
  550.                             if(pc.breastsPerRow(rowNum) == 1 && pc.nipplesPerBreast == 1) output("\n\nRubbing your [pc.nipple " + rowNum + "] with your fingertips, you feel the nub getting smaller and smaller... until it completely disappears, leaving behind a tipless, pebbly surface <b>You now have a flat nipple!</b>");
  551.                             else output("\n\n\n\nRubbing your [pc.nipples " + rowNum + "] with your fingertips, you feel the nubs getting smaller and smaller... until they completely disappear, each leaving behind a tipless, pebbly surface <b>You now have flat nipples!</b>");
  552.                            
  553.                             pc.breastRows[rowNum].nippleType = GLOBAL.NIPPLE_TYPE_FLAT;
  554.                            
  555.                             if(pc.isBimbo()) output(" <i>Like, what happened to my nips?!</i>");
  556.                         }
  557.                         else
  558.                         {
  559.                             output("\n\n" + pc.nippleTypeLockedMessage());
  560.                         }
  561.                     }
  562.                 }
  563.                 else
  564.                 {
  565.                     if(pc.totalNipples() == 1) output("\n\nYou shudder as your [pc.nipple] shrinks until it has lost a fraction of its old size.");
  566.                     else output("\n\nYou shudder as your [pc.nipples] shrink until they have lost a fraction of their old size.");
  567.                    
  568.                     pc.nippleLengthRatio -= nShrink;
  569.                     if(pc.nippleLengthRatio < 0.1) pc.nippleLengthRatio = 0.1;
  570.                    
  571.                     // May remove fuckable status of your nipples as well as your nipplecocks.
  572.                     if((pc.hasFuckableNipples() || pc.hasDickNipples()) && rand(5) == 0)
  573.                     {
  574.                         for(x = 0; x < pc.breastRows.length; x++)
  575.                         {
  576.                             if(pc.nippleTypeUnlocked(x, GLOBAL.NIPPLE_TYPE_NORMAL))
  577.                             {
  578.                                 if(pc.breastRows[x].fuckable())
  579.                                 {
  580.                                     if(!bChanged)
  581.                                     {
  582.                                         if(pc.totalNipples() == 1) output("\n\nThe slit in your [pc.nipple " + x + "] feels tighter and as you reach your fingers to it, you can find no traces of the slit. <b>Your nipple is no longer fuckable!</b>");
  583.                                         else output("\n\nThe slit in your [pc.nipples " + x + "] feel tighter and as you reach your fingers to them, you can find no traces of the slit. <b>Your nipples are no longer fuckable!</b>");
  584.                                         bChanged = true;
  585.                                     }
  586.                                    
  587.                                     pc.breastRows[x].nippleType = GLOBAL.NIPPLE_TYPE_NORMAL;
  588.                                 }
  589.                                 else if(pc.breastRows[x].nippleType == GLOBAL.NIPPLE_TYPE_DICK)
  590.                                 {
  591.                                     if(!bChanged)
  592.                                     {
  593.                                         if(pc.totalNipples() == 1) output("\n\nYour [pc.nippleCock] slides out of your [pc.nipple] to full erection before the remaining ReductPro start to manifest and your [pc.nippleCock] shrinks back to nothing. You give your [pc.nipple " + x + "] an experimental pinch to confirm that you no longer have it. <b>You have lost your nipplecock!</b>");
  594.                                         else  output("\n\nYour [pc.nippleCocks] slide out of your [pc.nipples] to full erection before the remaining ReductPro start to manifest and your [pc.nippleCocks] shrink back to nothing. You give your [pc.nipples " + x + "] an experimental pinch to confirm that you no longer have them. <b>You have lost your nipplecocks!</b>");
  595.                                         bChanged = true;
  596.                                     }
  597.                                    
  598.                                     pc.breastRows[x].nippleType = GLOBAL.NIPPLE_TYPE_NORMAL;
  599.                                 }
  600.                             }
  601.                         }
  602.                     }
  603.                     // May get flat nipples!
  604.                     else if(pc.nippleLengthRatio <= 0.2 && !pc.hasFlatNipples() && rand(2) == 0)
  605.                     {
  606.                         for(x = 0; x < pc.breastRows.length; x++)
  607.                         {
  608.                             if(pc.nippleTypeUnlocked(x, GLOBAL.NIPPLE_TYPE_FLAT))
  609.                             {
  610.                                 if(!bChanged)
  611.                                 {
  612.                                     if(pc.totalNipples() == 1) output("\n\nRubbing your [pc.nipple " + x + "] with your fingertips, you feel the nub getting smaller and smaller... until it completely disappears, leaving behind a tipless, pebbly surface <b>You now have a flat nipple!</b>");
  613.                                     else output("\n\n\n\nRubbing your [pc.nipples " + x + "] with your fingertips, you feel the nubs getting smaller and smaller... until they completely disappear, each leaving behind a tipless, pebbly surface <b>You now have flat nipples!</b>");
  614.                                     bChanged = true;
  615.                                 }
  616.                                
  617.                                 pc.breastRows[x].nippleType = GLOBAL.NIPPLE_TYPE_FLAT;
  618.                             }
  619.                         }
  620.                     }
  621.                 }
  622.                 // Done!
  623.                 useReductProDone();
  624.                 return;
  625.             }
  626.             else
  627.             {
  628.                 output("\n\n" + pc.nippleLengthRatioLockedMessage());
  629.                 useReductProDone(true);
  630.                 return;
  631.             }
  632.         }
  633.        
  634.         // Vagina(s)
  635.         private function useReductProShrinkVagina():void
  636.         {
  637.             var pc:PlayerCharacter = kGAMECLASS.pc;
  638.             clearOutput();
  639.             kGAMECLASS.userInterface.author("Kitteh6660");
  640.            
  641.             var x:int = 0;
  642.             var iTightestVagina:int = 0;
  643.             var iChanged:int = 0;
  644.            
  645.             if(kGAMECLASS.flags["REDUCTPRO_USED_ON_VAGINA"] == undefined && kGAMECLASS.flags["REDUCTPRO_USED_ON_ASSHOLE"] == undefined) output("Even though the paste is intended for topical use, you are curious to see what it will do internally. Only one way to find out, right? ");
  646.             else if(kGAMECLASS.flags["REDUCTPRO_USED_ON_VAGINA"] == undefined) output("You've already tried this out on your ass, but you wonder what will happen when you get your lady parts involved... ");
  647.             output("You");
  648.             if(pc.isCrotchGarbed()) output(" open up your [pc.lowerGarments],");
  649.             output(" unscrew the cap, squeeze the contents of ReductPro onto your fingers, and proceed to apply the foul-smelling paste inside your [pc.vaginas].");
  650.            
  651.             // Instantly reduces vaginal looseness by 1.
  652.             if(pc.loosenessUnlocked(iTightestVagina, pc.vaginas[iTightestVagina].loosenessRaw - 1))
  653.             {
  654.                 for(x = 0; x < pc.vaginas.length; x++)
  655.                 {
  656.                     if(pc.vaginas[x].looseness() >= 2 && pc.loosenessUnlocked(x, pc.vaginas[x].loosenessRaw - 1))
  657.                     {
  658.                         pc.vaginas[x].loosenessRaw--;
  659.                         iChanged++;
  660.                     }
  661.                 }
  662.             }
  663.            
  664.             if(iChanged > 0)
  665.             {
  666.                 output("\n\nA clenching reflex and tingling feeling within your [pc.vaginas] is a sign that the drug is working its magic.");
  667.                 if(kGAMECLASS.flags["REDUCTPRO_USED_ON_VAGINA"] == undefined) output(" To your surprise");
  668.                 else output(" As expected");
  669.                 output(", <b>");
  670.                 if(pc.vaginas.length > 1 && iChanged == 1) output("one of ");
  671.                 output("your vagina");
  672.                 if(pc.vaginas.length == 1) output(" has");
  673.                 else output("s have");
  674.                 output(" instantly tightened!</b>");
  675.                
  676.                 if(pc.isBimbo()) output(" <i>Ooh, any tighter and I won't be able to fit all those yummy cocks!</i>");
  677.                
  678.                 kGAMECLASS.flags["REDUCTPRO_USED_ON_VAGINA"] = 1;
  679.                
  680.                 // Done!
  681.                 useReductProDone();
  682.                 return;
  683.             }
  684.             else
  685.             {
  686.                 output("\n\n" + pc.loosenessLockedMessage());
  687.                 useReductProDone(true);
  688.                 return;
  689.             }
  690.         }
  691.        
  692.         // Clit(s)
  693.         private function useReductProShrinkClits():void
  694.         {
  695.             var pc:PlayerCharacter = kGAMECLASS.pc;
  696.             clearOutput();
  697.             kGAMECLASS.userInterface.author("Kitteh6660");
  698.            
  699.             output("You");
  700.             if(pc.isCrotchGarbed()) output(" open up your [pc.lowerGarments],");
  701.             output(" unscrew the cap, carefully apply the paste to your " + pc.clitDescript() + ", being very careful to avoid getting it on your " + pc.vaginaDescript(0) + ".  It burns with heat as it begins to make its effects known...");
  702.             var newClitLength:Number = Math.round((pc.clitLength / (1 + (0.7 / (Math.ceil(pc.totalClits()) / 2)))) * 100) / 100;
  703.             if(pc.clitLength > 0 && pc.clitLengthUnlocked(newClitLength))
  704.             {
  705.                 if (pc.totalClits() == 1) output("\n\nYour " + pc.clitDescript() + " shrinks rapidly, dwindling down to almost half its old size before it finishes absorbing the paste.");
  706.                 else output("\n\nYour " + pc.clitDescript() + " shrink rapidly, dwindling down to almost half their old size before it finishes absorbing the paste.");
  707.                 pc.clitLength -= (Math.round((pc.clitLength/3)*100)/100);
  708.                 if(pc.clitLength < 0) pc.clitLength = 0.01;
  709.                
  710.                 if(pc.isBimbo()) output(" <i>Not my happy button!</i>");
  711.                
  712.                 // Done!
  713.                 useReductProDone();
  714.                 return;
  715.             }
  716.             else
  717.             {
  718.                 output("\n\n" + pc.clitLengthLockedMessage());
  719.                 useReductProDone(true);
  720.                 return;
  721.             }
  722.         }
  723.            
  724.         // Cocks (Single) - Brings up prompt on which row to shrink.
  725.         private function useReductProShrinkCockMenu():void
  726.         {
  727.             var pc:PlayerCharacter = kGAMECLASS.pc;
  728.             clearOutput();
  729.             kGAMECLASS.userInterface.author("Kitteh6660");
  730.            
  731.             output("Which cock will you shrink?");
  732.            
  733.             // Generate text and buttons:
  734.             clearMenu();
  735.             if(pc.cocks.length <= 0) output("\n\nIt looks like you don't have any cocks to shrink...");
  736.             else {
  737.                 output("\n\n<b>Total Cocks:</b> " + pc.cockTotal());
  738.                
  739.                 var x:int = 0;
  740.                 var y:int = 0;
  741.                 var z:int = 0;
  742.                
  743.                 for(x = 0; x < pc.cocks.length; x++)
  744.                 {
  745.                     y = x + Math.floor(x/14);
  746.                     z = 15*(Math.floor(x/14)) - 1;
  747.                    
  748.                     output("\n\n<b>" + StringUtil.capitalize(num2Ordinal(x + 1)) + " Cock:</b>");
  749.                     output("\nLength: " + formatFloat((pc.cocks[x] as CockClass).cLength(), 3) + " inch");
  750.                     if(pc.cocks[x].cLength() != 1) output("es");
  751.                     output("\nGirth: " + formatFloat((pc.cocks[x] as CockClass).thickness(), 3) + " inch");
  752.                     if(pc.cocks[x].thickness() != 1) output("es");
  753.                    
  754.                     // Valid cock
  755.                     addButton(y, String("Cock " + (x + 1)), useReductProShrinkCock, x);
  756.                     // Nah...
  757.                     if(x == z) addButton(x, "Back", menuReductProOptions, true, "Nevermind", "Choose something else...");
  758.                 }
  759.             }
  760.             addButton(14, "Back", menuReductProOptions, true, "Nevermind", "Choose something else...");
  761.            
  762.             return;
  763.         }
  764.        
  765.         // Cock (Single)
  766.         private function useReductProShrinkCock(cockNum:int = 0):void
  767.         {
  768.             var pc:PlayerCharacter = kGAMECLASS.pc;
  769.             clearOutput();
  770.             kGAMECLASS.userInterface.author("Kitteh6660");
  771.            
  772.             output("You");
  773.             if(pc.isCrotchGarbed()) output(" open up your [pc.lowerGarments],");
  774.             output(" unscrew the cap and smear the repulsive smelling paste over your " + pc.cockDescript(cockNum) + ". It immediately begins to grow warm, almost uncomfortably so, as your " + pc.cockDescript(cockNum) + " begins to shrink.");
  775.            
  776.             // Too short!
  777.             if(pc.cocks[cockNum].cLength() <= 3)
  778.             {
  779.                 output("\n\nYou shudder as your [pc.cock " + cockNum + "] pulses for a short moment, but then the feeling passes and it soon goes flaccid... Perhaps your little pecker is as small as it's going to get?");
  780.                
  781.                 // Reduce libido by 1 down to 10.
  782.                 if(pc.libidoRaw > (pc.libidoMin() + 10))
  783.                 {
  784.                     output("\n\nEven though your cock refuses to change, you can feel a small part of your urgency for lust fade...");
  785.                     pc.libido(-1);
  786.                 }
  787.                
  788.                 useReductProDone();
  789.                 return;
  790.             }
  791.            
  792.             // Shrink cock size by 33%...
  793.             var nShrink:Number = (Math.round((pc.cocks[cockNum].cLengthRaw/3)*100)/100);
  794.            
  795.             if(pc.cockLengthUnlocked(cockNum, (pc.cocks[cockNum].cLengthRaw - nShrink)) || rand(10) == 0) //10% chance to bypass Goo Crotch, permanently wasting biomass.
  796.             {
  797.                 output("\n\nYour " + pc.cockDescript(cockNum) + " twitches as it shrinks, disappearing steadily into your " + (pc.hasSheath() ? "sheath" : "crotch"));
  798.                 pc.cocks[cockNum].cLengthRaw -= nShrink;
  799.                 if(pc.cocks[cockNum].cLengthRaw < 3)
  800.                 {
  801.                     // ... down to a minimum of 3 inches.
  802.                     pc.cocks[cockNum].cLengthRaw = 3;
  803.                     output(" to about three inches in length");
  804.                 }
  805.                 else output(" until it has lost a third of its old size");
  806.                 output(".</b>");
  807.                
  808.                 if(pc.isBro()) output(" <i>Damn, I gotta be more careful... I'll need this if I'm gonna fuck all the bitches!</i>");
  809.                
  810.                 // Reduce libido by 1 down to 10.
  811.                 if(pc.libidoRaw > (pc.libidoMin() + 10))
  812.                 {
  813.                     output("\n\nAs your [pc.cock " + cockNum + "] settles to its new size, you feel a part of your urgency for lust fade with it...");
  814.                     pc.libido(-1);
  815.                 }
  816.             }
  817.             else
  818.             {
  819.                 output("\n\n" + pc.cockLengthLockedMessage() + " Hmm...");
  820.                
  821.                 // Reduce libido by 1 down to 10.
  822.                 if(pc.libidoRaw > (pc.libidoMin() + 10))
  823.                 {
  824.                     output("\n\nEven though your [pc.cock " + cockNum + "] refuses to change, you can feel a small part of your urgency for lust fade...");
  825.                     pc.libido(-1);
  826.                 }
  827.             }
  828.            
  829.             // Done!
  830.             useReductProDone();
  831.             return;
  832.         }
  833.        
  834.         // Cocks (All)
  835.         private function useReductProShrinkCockAll():void
  836.         {
  837.             var pc:PlayerCharacter = kGAMECLASS.pc;
  838.             clearOutput();
  839.             kGAMECLASS.userInterface.author("Kitteh6660");
  840.            
  841.             var x:int = 0;
  842.             var iSmallestCock:int = pc.smallestCockIndex();
  843.             var iChanged:int = 0;
  844.            
  845.             output("You");
  846.             if(pc.isCrotchGarbed()) output(" open up your [pc.lowerGarments],");
  847.             output(" unscrew the cap and stroke all of your [pc.cocks] until they are brought to full erection. Next, you squeeze the tube of ReductPro all over them, spreading the pasty substance evenly across your");
  848.             if(pc.cocks.length == 2) output(" pair");
  849.             else output(" entire set");
  850.             output(" of manhoods.");
  851.            
  852.             // Too short!
  853.             if(pc.longestCockLength() <= 3)
  854.             {
  855.                 output("\n\nYou shudder as your cocks pulse for a short moment, but then the feeling passes and they soon go flaccid... Perhaps your peckers are as small as they're going to get?");
  856.                
  857.                 // Reduce libido by 1 down to 10.
  858.                 if(pc.libidoRaw > (pc.libidoMin() + 10))
  859.                 {
  860.                     output("\n\nEven though your cocks refuse to change, you can feel a small part of your urgency for lust fade...");
  861.                     pc.libido(-1);
  862.                 }
  863.                
  864.                 useReductProDone();
  865.                 return;
  866.             }
  867.            
  868.             // Shrink cock size by 33%...
  869.             var nShrink:Number = (Math.round((pc.cocks[iSmallestCock].cLengthRaw/3)*100)/100);
  870.            
  871.             // Instantly reduces vaginal looseness by 1.
  872.             if(pc.cockLengthUnlocked(iSmallestCock, pc.cocks[iSmallestCock].cLengthRaw - nShrink) || rand(10) == 0)
  873.             {
  874.                 for(x = 0; x < pc.cocks.length; x++)
  875.                 {
  876.                     if(pc.cocks[x].cLengthRaw() > 3 && pc.cockLengthUnlocked(x, pc.cocks[x].cLengthRaw - nShrink))
  877.                     {
  878.                         pc.cocks[x].cLengthRaw -= nShrink;
  879.                         if(pc.cocks[x].cLengthRaw() < 3) pc.cocks[x].cLengthRaw = 3;
  880.                         iChanged++;
  881.                     }
  882.                 }
  883.             }
  884.            
  885.             if(iChanged > 0)
  886.             {
  887.                 output("\n\nYou shudder as your [pc.cocks] shrink until they have lost a fraction of their old size.");
  888.                
  889.                 if(pc.isBro()) output(" <i>Totally </i>not<i> what I wanted to do, man...</i>");
  890.                
  891.                 // Reduce libido by 1 down to 10.
  892.                 if(pc.libidoRaw > (pc.libidoMin() + 10))
  893.                 {
  894.                     output("\n\nAs");
  895.                     if(iChanged == 1) output(" one of your cocks settles to its");
  896.                     else output(" your cocks settle to their");
  897.                     output(" new size, you feel a part of your urgency for lust fade with it...");
  898.                     pc.libido(-1);
  899.                 }
  900.             }
  901.             else
  902.             {
  903.                 output("\n\n" + pc.cockLengthLockedMessage());
  904.                
  905.                 // Reduce libido by 1 down to 10.
  906.                 if(pc.libidoRaw > (pc.libidoMin() + 10))
  907.                 {
  908.                     output("\n\nEven though your cocks refuse to change, you can feel a small part of your urgency for lust fade...");
  909.                     pc.libido(-1);
  910.                 }
  911.             }
  912.            
  913.             // Done!
  914.             useReductProDone();
  915.             return;
  916.         }
  917.        
  918.         // Balls
  919.         private function useReductProShrinkBalls():void
  920.         {
  921.             var pc:PlayerCharacter = kGAMECLASS.pc;
  922.             clearOutput();
  923.             kGAMECLASS.userInterface.author("Kitteh6660");
  924.            
  925.             output("You");
  926.             if(pc.isCrotchGarbed()) output(" open up your [pc.lowerGarments],");
  927.             output(" unscrew the cap, squeeze the contents of ReductPro onto your hand, and smear the foul-smelling paste onto your " + pc.sackDescript() + ".  It feels cool at first but rapidly warms to an uncomfortable level of heat.");
  928.            
  929.             // Shrink ball size by up to 50%, depending on the size and how many of balls you have.
  930.             var nReduce:Number = 1.00;
  931.             if(pc.ballDiameter() < 1) nReduce -= 0.25;
  932.             if(pc.ballDiameter() > 1) nReduce += 0.10;
  933.             if(pc.ballDiameter() > 2) nReduce += 0.10;
  934.             if(pc.ballDiameter() > 3) nReduce += 0.10;
  935.             if(pc.ballDiameter() > 4) nReduce += 0.10;
  936.             if(pc.ballDiameter() > 5) nReduce += 0.10;
  937.             if(pc.balls == 1) nReduce -= 0.25;
  938.             if(pc.balls >= 2) nReduce += 0.25;
  939.             if(pc.balls >= 4) nReduce += 0.25;
  940.             if(nReduce > 2) nReduce = 2;
  941.             var nSize:Number = (Math.round((pc.ballSizeRaw/nReduce)*100)/100);
  942.            
  943.             if(nSize >= 1 && pc.ballSizeUnlocked(nSize) || rand(10) == 0)
  944.             {
  945.                 output("\n\nYou feel your scrotum shift, shrinking down along with your " + pc.ballsDescript() + ". Within a few seconds the paste has been totally absorbed and the shrinking stops.");
  946.                 if (pc.isGoo()) output(" <b>Any biomass you have invested in your balls are wasted.</b>");
  947.                 pc.ballSize(nSize, true);
  948.                
  949.                 if(pc.isBro()) output(" <i>Ah man, come on now! Seriously?</i>");
  950.                
  951.                 // Reduce libido by 1 down to 15.
  952.                 if(pc.libidoRaw > (pc.libidoMin() + 15))
  953.                 {
  954.                     output("\n\nAs your");
  955.                     if(pc.balls == 1) output(" ball shrinks to its");
  956.                     else output(" balls shrink to their");
  957.                     output(" new size, you feel a little bit of your libido fade as well...");
  958.                     pc.libido(-1);
  959.                 }
  960.             }
  961.             else
  962.             {
  963.                 output("\n\n" + pc.cockLengthLockedMessage());
  964.                
  965.                 // Reduce libido by 1 down to 10.
  966.                 if(pc.libidoRaw > (pc.libidoMin() + 10))
  967.                 {
  968.                     output("\n\nEven though your [pc.sack] remains unchanged, you can feel a small part of your libido fade...");
  969.                     pc.libido(-1);
  970.                 }
  971.             }
  972.                
  973.             // If ball size is 4 inches or less, 10% chance to remove Nuki Nuts perk.
  974.             // Nuki Nuts perk removal, must not be a Kui-tan:
  975.             if(pc.ballSizeRaw <= 4 && pc.hasPerk("'Nuki Nuts") && pc.race() != "kui-tan" && rand(10) == 0)
  976.             {
  977.                 output("\n\n");
  978.                 if(pc.cocks.length != 0) output("A small trickle of pre leaks from [pc.eachCock] as goosebumps travel up your back... ");
  979.                 output("You feel another change inside your [pc.sack] and give your [pc.balls] an experimental squeeze to find out that");
  980.                 if(pc.balls == 1) output(" it no longer grows");
  981.                 else output(" they no longer grow");
  982.                 output(" even if you’re feeling very pent-up. <b>(Perk Lost: Nuki Nuts!)</b>");
  983.                
  984.                 pc.removePerk("'Nuki Nuts");
  985.             }
  986.            
  987.             /*
  988.             // Not sure I should implement this!
  989.             // Needs to be linked, but may fudge up 'Nuki Nuts performance!
  990.             // Look below for implentation! 9999
  991.             // Otherwise...
  992.             else if(pc.hasPerk("'Nuki Nuts"))
  993.             {
  994.                 output("\n\n");
  995.                 // ... Adds status effect to prevent ball growth for 4 hours ...
  996.                 if(!pc.hasStatusEffect("No Grow") && rand(4) > 0)
  997.                 {
  998.                     if(pc.cocks.length != 0) output("A small trickle of pre leaks from [pc.eachCock] as goosebumps travel up your back... ");
  999.                     output("You feel another change in your [pc.balls] and give your [pc.balls] an experimental squeeze to find out that");
  1000.                     if(pc.balls == 1) output(" it");
  1001.                     else output(" they");
  1002.                     output(" won’t grow for a while. Could it be a temporary relief? <b>Your balls will not grow for four hours.</b>");
  1003.                    
  1004.                     pc.createStatusEffect("No Grow", 0, 0, 0, 0, false, "Blocked", "Expansion due to an overfull nutsack is currently prevented.", false, 240);
  1005.                    
  1006.                     useReductProDone();
  1007.                     return;
  1008.                 }
  1009.                 // ... OR slow down ball growth by 10% multiplicatively and rounded...
  1010.                 if(!pc.hasStatusEffect("Slow Grow"))
  1011.                 {
  1012.                     if(pc.cocks.length != 0) output("A small trickle of pre leaks from [pc.eachCock] as goosebumps travel up your back... ");
  1013.                     output("You feel another change in your [pc.sack] and give your [pc.balls] an experimental squeeze to find out that");
  1014.                     if(pc.balls == 1) output(" it appears");
  1015.                     else output(" they appear");
  1016.                     output(" to be growing slower than normal. Looks like you can go a bit longer without having the weight of your [pc.ballsNoun] drag you down. <b>Your balls will now expand at a slower rate.</b>");
  1017.                    
  1018.                     pc.createStatusEffect("Slow Grow", 0.90, 0, 0, 0, true, "", "", false, 0);
  1019.                 }
  1020.                 // ... Down to a minimum of 1%.
  1021.                 else
  1022.                 {
  1023.                     if(pc.cocks.length != 0) output("A small trickle of pre leaks from [pc.eachCock] as goosebumps travel up your back... ");
  1024.                     output("You feel another change inside your [pc.sack] and give your [pc.balls] an experimental squeeze to find out that");
  1025.                    
  1026.                     // Chance of Nuki Nuts removal increases as growth rate slows down.
  1027.                     if(rand((Math.round(pc.statusEffectv1("Slow Grow")*100)%10) + 4) == 0)
  1028.                     {
  1029.                         if(pc.balls == 1) output(" it no longer grows");
  1030.                         else output(" they no longer grow");
  1031.                         output(" even if you’re feeling very pent-up. <b>(Perk Lost: Nuki Nuts!)</b>");
  1032.                        
  1033.                         pc.removePerk("'Nuki Nuts");
  1034.            
  1035.                         useReductProDone();
  1036.                         return;
  1037.                     }
  1038.                    
  1039.                     // by 10%
  1040.                     pc.addStatusValue("Slow Grow", 1, -0.10);
  1041.                    
  1042.                     // min 1%
  1043.                     if(pc.statusEffectv1("Slow Grow") < 0.01)
  1044.                     {
  1045.                         pc.setStatusValue("Slow Grow", 1, 0.01);
  1046.                        
  1047.                         if(pc.balls == 1) output(" it appears");
  1048.                         else output(" they appear");
  1049.                         output(" to be growing the slowest they've ever been. You doubt the weight of your [pc.ballsNoun] will be much of an issue for a long while. <b>Your balls will now expand at the slowest rate possible.</b>")
  1050.                     }
  1051.                     else
  1052.                     {
  1053.                         if(pc.balls == 1) output(" it appears");
  1054.                         else output(" they appear");
  1055.                         output(" to be growing much slower than normal. You can probably go around longer without being worried about the weight of your [pc.ballsNoun] dragging you down. <b>Your balls will expand at an even slower rate.</b>")
  1056.                     }
  1057.                 }
  1058.             }
  1059.             */
  1060.            
  1061.             useReductProDone();
  1062.             return;
  1063.         }
  1064.            
  1065.         // Hips
  1066.         private function useReductProShrinkHips():void
  1067.         {
  1068.             var pc:PlayerCharacter = kGAMECLASS.pc;
  1069.             clearOutput();
  1070.             kGAMECLASS.userInterface.author("Kitteh6660");
  1071.            
  1072.             output("Standing straight, you");
  1073.             if(pc.isCrotchGarbed()) output(" open up your [pc.lowerGarments] to ready yourself for the application. Next, you");
  1074.             output(" unscrew the cap, squeeze the contents of ReductPro and smear them evenly onto your [pc.hips]. It feels cool at first but rapidly warms to an uncomfortable level of heat.");
  1075.            
  1076.             // Shrink hip rating by up to 4.
  1077.             var nShrink:Number = 1+ rand(4);
  1078.             if (pc.hipRating() < 8) Math.floor(nShrink /= 2);
  1079.             if(pc.hipRatingRaw >= nShrink && pc.hipRatingUnlocked(pc.hipRatingRaw - nShrink))
  1080.             {
  1081.                 output("\n\nYou shudder as the changes begin to take effect...");
  1082.                 output(" Your [pc.hips] visibly narrow by a");
  1083.                 if(nShrink <= 1) output(" tiny");
  1084.                 else if(nShrink <= 2) output(" small");
  1085.                 else if(nShrink <= 3) output(" decent");
  1086.                 else output(" great");
  1087.                 output(" amount, making your [pc.legOrLegs] wobble a bit while trying to remain upright. <b>You feel lighter thanks to the shrinkage of your hips.</b>");
  1088.                
  1089.                 pc.hipRating(-nShrink);
  1090.                
  1091.                 if(pc.isBimbo()) output(" <i>But that's, like, my money maker!</i>");
  1092.            
  1093.                 useReductProDone();
  1094.                 return;
  1095.             }
  1096.             else
  1097.             {
  1098.                 output("\n\n" + pc.hipRatingLockedMessage());
  1099.            
  1100.                 useReductProDone(true);
  1101.                 return;
  1102.             }
  1103.         }
  1104.        
  1105.         // Butt
  1106.         private function useReductProShrinkButt():void
  1107.         {
  1108.             var pc:PlayerCharacter = kGAMECLASS.pc;
  1109.             clearOutput();
  1110.             kGAMECLASS.userInterface.author("Kitteh6660");
  1111.            
  1112.             output("You");
  1113.             if(pc.isCrotchGarbed()) output(" open up your [pc.lowerGarments], ");
  1114.             output(" unscrew the cap, squeeze the contents of ReductPro onto your hand and smear the foul-smelling paste onto your " + pc.buttDescript() + ". It feels cool at first but rapidly warms to an uncomfortable level of heat.");
  1115.            
  1116.             // Shrink butt rating by up to 4.
  1117.             var nShrink:Number = 1+ rand(4);
  1118.             if (pc.buttRatingRaw < 8) Math.round(nShrink /= 2);
  1119.             if(pc.buttRatingRaw >= nShrink && pc.buttRatingUnlocked(pc.buttRatingRaw - nShrink) || rand(10) == 0)
  1120.             {
  1121.                 output("\n\nSuddenly, You shudder as the changes take place...");
  1122.                 output(" Your [pc.butts] begin to shrink by a");
  1123.                 if(nShrink <= 1) output(" tiny");
  1124.                 else if(nShrink <= 2) output(" small");
  1125.                 else if(nShrink <= 3) output(" decent");
  1126.                 else output(" great");
  1127.                 output(" amount, making your [pc.hips] sway in response. You turn back and confirm that <b>your ass has reduced to a smaller size.</b>");
  1128.                
  1129.                 pc.buttRating(-nShrink);
  1130.                
  1131.                 if(pc.isBimbo()) output(" <i>Oh no, not my booty!</i>");
  1132.                 else if(pc.buttRating() <= 8) output(" You feel like a dragging weight has been lifted off your behind.");
  1133.                 else output(" It's not much, but it is noticeable.");
  1134.            
  1135.                 // Reduce libido by 1 down to 20.
  1136.                 if(pc.libidoRaw > (pc.libidoMin() + 20))
  1137.                 {
  1138.                     output("\n\nYou cup your smaller [pc.butts] and feel a soft tingle with a little bit of clarity returning to you. It seems your shrinking derrière has taken a piece of libido with it...");
  1139.                     pc.libido(-1);
  1140.                 }
  1141.             }
  1142.             else
  1143.             {
  1144.                 output("\n\n" + pc.buttRatingLockedMessage());
  1145.                
  1146.                 // Reduce libido by 1 down to 20.
  1147.                 if(pc.libidoRaw > (pc.libidoMin() + 20))
  1148.                 {
  1149.                     output("\n\nOdd... Even though your [pc.butt] remains unchanged, you can feel a small part of your libido fade...");
  1150.                     pc.libido(-1);
  1151.                 }
  1152.             }
  1153.            
  1154.             // Done!
  1155.             useReductProDone();
  1156.             return;
  1157.         }
  1158.        
  1159.         // Belly
  1160.         private function useReductProShrinkBelly():void
  1161.         {
  1162.             var pc:PlayerCharacter = kGAMECLASS.pc;
  1163.             clearOutput();
  1164.             kGAMECLASS.userInterface.author("Kitteh6660");
  1165.            
  1166.             output("You");
  1167.             if(pc.isChestCovered()) output(" open up your [pc.upperGarments], ");
  1168.             output(" unscrew the cap and squeeze the contents of ReductPro and rub them evenly onto your [pc.belly]. It feels cool at first but rapidly warms to an uncomfortable level of heat.");
  1169.            
  1170.             // Shrink belly rating by up to 4.
  1171.             var nShrink:Number = 1+ rand(4);
  1172.             if (pc.bellyRatingRaw < 8) Math.round(nShrink /= 2)
  1173.             if(pc.bellyRatingRaw > 1)
  1174.             {
  1175.                 output("\n\nAlmost instantaneously, you shudder as the changes take place...");
  1176.                 output(" Your belly");
  1177.                 if(pc.isPregnant()) output(" pulses");
  1178.                 else output(" gurgles");
  1179.                 output(" softly as you rub your hands across the surface, feeling the microsurgeons reshape your mid-section. Your [pc.belly] calms as it gradually loses a");
  1180.                 if(nShrink <= 1) output(" tiny");
  1181.                 else if(nShrink <= 2) output(" small");
  1182.                 else if(nShrink <= 3) output(" decent");
  1183.                 else output(" great");
  1184.                 output(" amount of mass. When it is finally finished, you give a relieved sigh. <b>Your stomach is now flatter.</b>");
  1185.                
  1186.                 pc.bellyRatingRaw -= nShrink;
  1187.                 if(pc.bellyRatingRaw < 0) pc.bellyRatingRaw = 0;
  1188.            
  1189.                 useReductProDone();
  1190.                 return;
  1191.             }
  1192.             else
  1193.             {
  1194.                 output("\n\nThere is a rumbling warmth in your [pc.belly], and then... nothing. Hm, it seems that whatever change was about to happen had quickly dissipated.");
  1195.                 if(pc.bellyRating() > 0 && pc.isPregnant()) output(" The extra mass on the your belly must be maternal.");
  1196.                 else output(" Your stomach must be too flat to shrink anymore.");
  1197.            
  1198.                 useReductProDone(true);
  1199.                 return;
  1200.             }
  1201.         }
  1202.        
  1203.         // Anus
  1204.         private function useReductProShrinkAnus():void
  1205.         {
  1206.             var pc:PlayerCharacter = kGAMECLASS.pc;
  1207.             clearOutput();
  1208.             kGAMECLASS.userInterface.author("Kitteh6660");
  1209.            
  1210.             if(kGAMECLASS.flags["REDUCTPRO_USED_ON_VAGINA"] == undefined && kGAMECLASS.flags["REDUCTPRO_USED_ON_ASSHOLE"] == undefined) output("Even though the paste is intended for topical use, you are curious to see what it will do internally. Only one way to find out, right? ");
  1211.             else if(kGAMECLASS.flags["REDUCTPRO_USED_ON_ASSHOLE"] == undefined) output("You already know what happens when this drug is applied to your cooch, but you wonder if the same applies to your rectum... ");
  1212.             output("You");
  1213.             if(pc.isCrotchGarbed()) output(" open up your [pc.lowerGarments],");
  1214.             output(" unscrew the cap, squeeze the contents of ReductPro onto your fingers, and apply the foul-smelling paste onto your [pc.asshole], making sure to lather the rim nicely before injecting the rest inside yourself.");
  1215.            
  1216.             // Instantly reduces anal looseness by 1.
  1217.             if(pc.loosenessUnlocked(-1, pc.ass.loosenessRaw - 1))
  1218.             {
  1219.                 output("\n\nYour sphincter throbs momentarily, giving you a sign that the drug is actually working.");
  1220.                 if(kGAMECLASS.flags["REDUCTPRO_USED_ON_ASSHOLE"] == undefined) output(" To your surprise");
  1221.                 else output(" As expected");
  1222.                 output(", <b>your anus has instantly tightened!</b>");
  1223.                
  1224.                 pc.ass.loosenessRaw--;
  1225.                
  1226.                 kGAMECLASS.flags["REDUCTPRO_USED_ON_ASSHOLE"] = 1;
  1227.                
  1228.                 // Done!
  1229.                 useReductProDone();
  1230.                 return;
  1231.             }
  1232.             else
  1233.             {
  1234.                 output("\n\n" + pc.loosenessLockedMessage());
  1235.                 useReductProDone(true);
  1236.                 return;
  1237.             }
  1238.         }
  1239.        
  1240.         // Horns
  1241.         private function useReductProShrinkHorns():void
  1242.         {
  1243.             var pc:PlayerCharacter = kGAMECLASS.pc;
  1244.             clearOutput();
  1245.             kGAMECLASS.userInterface.author("Kitteh6660");
  1246.            
  1247.             if(kGAMECLASS.flags["REDUCTPRO_USED_ON_HORNS"] == undefined) output("You doubt if the ReductPro is going to work on your [pc.hornsNoun] but you proceed to unscrew the cap, squeeze out the contents and rub the paste all over your [pc.horns] anyway.");
  1248.             else output("You unscrew the cap, squeeze out the contents of the ReductPro and rub the paste all over your [pc.horns].");
  1249.            
  1250.             var newHornLength:Number = pc.hornLength - 1;
  1251.             if((pc.hornLength > 0 && pc.hornLengthUnlocked(newHornLength)) || pc.hasStatusEffect("Horn Bumps"))
  1252.             {
  1253.                 output("\n\n");
  1254.                 if(kGAMECLASS.flags["REDUCTPRO_USED_ON_HORNS"] == undefined) output("It works! ");
  1255.                
  1256.                 if(!pc.hasStatusEffect("Horn Bumps"))
  1257.                 {
  1258.                     // Not all horns are malleable--need to make special cases...
  1259.                     if(pc.hornType == 0)
  1260.                     {
  1261.                         output("[pc.EachHorn] vibrates vigorously, as if it is something that does not belong on your head... And so it seems, </b>the [pc.hornsNoun] rapidly vanish");
  1262.                         if(pc.horns != 1) output("es");
  1263.                         output(", leaving your head void of any kind of horns!");
  1264.                         pc.hornLength = 0;
  1265.                         pc.horns = 0;
  1266.                         pc.hornType == 0;
  1267.                     }
  1268.                     else if(pc.hornType == GLOBAL.TYPE_DEMONIC)
  1269.                     {
  1270.                         output("Your demonic-looking horns crackle and warp as the drug kicks in.");
  1271.                         if(pc.horns > 2)
  1272.                         {
  1273.                             output(" As this happens, you can feel your horns starting to decrase in");
  1274.                             if(pc.horns <= 8) output(" size and");
  1275.                             pc.horns -= 2;
  1276.                             if(pc.horns < 2) pc.horns == 2;
  1277.                             output(" number. When the transformation finally completes, you rub your hand alongside each horn. <b>You now have " + num2Text(pc.horns) + " horns total.</b>");
  1278.                         }
  1279.                         else
  1280.                         {
  1281.                             output(" The two horns begin to shrink smaller and smaller, looking less and less threatening. <b>Your horns finally recede into your head, becoming small, barely visible horn bumps!</b>");
  1282.                             pc.hornLength = 0;
  1283.                             pc.horns = 0;
  1284.                             pc.hornType == 0;
  1285.                             pc.createStatusEffect("Horn Bumps");
  1286.                         }
  1287.                     }
  1288.                     else if(pc.hornType == GLOBAL.TYPE_BOVINE)
  1289.                     {
  1290.                         output("A tingling sensation runs across the length of your bovine horns as the drug kicks in.");
  1291.                         if(pc.hornLength >= 2)
  1292.                         {
  1293.                             pc.hornLength--;
  1294.                             output(" You can feel your pair of horns receding by one inch. <b>You now have a pair of " + num2Text(pc.hornLength) + "-inch horns.</b>");
  1295.                         }
  1296.                         else if(pc.hornLength > 0.5 && pc.hornLength <= 1)
  1297.                         {
  1298.                             output(" <b>You can feel your pair of horns receding until they stop to about half-an-inch.</b>");
  1299.                             if(pc.isBimbo()) output(" <i>Cute!</i>");
  1300.                             pc.hornLength = 0.5;
  1301.                         }
  1302.                         else
  1303.                         {
  1304.                             output(" Even with how tiny they are, the paste is pretty effective, causing your calf-like horns to shrink. <b>Your horns keep receding into your head until they become small, barely visible horn bumps!</b>");
  1305.                             pc.hornLength = 0;
  1306.                             pc.horns = 0;
  1307.                             pc.hornType == 0;
  1308.                             pc.createStatusEffect("Horn Bumps");
  1309.                         }
  1310.                     }
  1311.                     else if(pc.hornType == GLOBAL.TYPE_LIZAN)
  1312.                     {
  1313.                         output("Your");
  1314.                         if(pc.horns != 2)
  1315.                         {
  1316.                             pc.horns = 2;
  1317.                             pc.hornLength = 15;
  1318.                             output(" draconic horns soften and vibrate quietly as the drug kicks in. The four horns begin to merge into themselves, changing and rearranging the total mass. As the mass solidifies, <b>you are left with two, " + num2Text(pc.hornLength) + "-inch, reptilian horns.</b>");
  1319.                         }
  1320.                         else if(pc.hornLength > 1)
  1321.                         {
  1322.                             pc.hornLength--;
  1323.                             output(" reptilian horns soften and vibrate quietly as the drug kicks in. You can feel your pair of horns receding by one inch. <b>You now have a pair of " + num2Text(pc.hornLength) + "-inch horns.</b>");
  1324.                         }
  1325.                         else
  1326.                         {
  1327.                             output(" horns soften and vibrate quietly as the drug kicks in. The pair begin to shrink smaller and smaller, looking less and less reptilian. <b>Your horns finally recede into your head, becoming small, barely visible horn bumps!</b>");
  1328.                             pc.hornLength = 0;
  1329.                             pc.horns = 0;
  1330.                             pc.hornType == 0;
  1331.                             pc.createStatusEffect("Horn Bumps");
  1332.                         }
  1333.                     }
  1334.                     else if(pc.hornType == GLOBAL.TYPE_DEER)
  1335.                     {
  1336.                         output("Your pair of deer-like antlers begin to melt and shift, and the branches of each start to fuse with themselves.");
  1337.                         if(pc.horns > 4)
  1338.                         {
  1339.                             pc.horns -= 2;
  1340.                             if(pc.horns < 4) pc.horns == 4;
  1341.                             output(" After a moment to quickly solidify, <b>you find that your antlers have less prongs, giving you " + num2Text(pc.horns) + " antler points total.</b>");
  1342.                         }
  1343.                         else
  1344.                         {
  1345.                             output(" The " + num2Text(pc.horns) + " antler points quickly merge with one another to form two long horns. Examining yourself, you find that <b>your head posses a pair of six-inch horns, making you appear very much like a " + pc.mf("bull","cow") + "!</b>");
  1346.                             pc.hornLength = 6;
  1347.                             pc.horns = 2;
  1348.                             pc.hornType == GLOBAL.TYPE_BOVINE;
  1349.                         }
  1350.                     }
  1351.                     else if(pc.hornType == GLOBAL.TYPE_GOAT)
  1352.                     {
  1353.                         output(" Like a loose hose, you ram-like horns begin to unravel themselves, straightening out, while curving forward. When the morphing process is complete, you discover that <b>you now have a pair of dangerous, foot-long horns, making you appear very much like a bull!</b>");
  1354.                         pc.hornLength = 12;
  1355.                         pc.horns = 2;
  1356.                         pc.hornType == GLOBAL.TYPE_BOVINE;
  1357.                     }
  1358.                     else if(pc.hornLength > 1)
  1359.                     {
  1360.                         // Shrink horns by 1 inch.
  1361.                         output("A tingling sensation runs across the length of your [pc.hornsNoun] as the drug activates. <b>You can feel your [pc.hornsNoun] receding by one inch.</b>");
  1362.                         pc.hornLength--;
  1363.                     }
  1364.                     else
  1365.                     {
  1366.                         output("As the drug activates, you run your fingers over your very small and rapidly shrinking [pc.hornsNoun]. [EachHorn] diminishes in size until there is nothing left. <b>You have lost your [pc.hornsNoun]!</b>");
  1367.                         pc.hornLength = 0;
  1368.                         pc.horns = 0;
  1369.                         pc.hornType == 0;
  1370.                     }
  1371.                 }
  1372.                 else
  1373.                 {
  1374.                     output("\n\nThe small horn bumps on your head pulsate softly. As you rub them against your fingers, you can feel them smoothing out and fading away completly. <b>Your head is now bare of any horns!</b>");
  1375.                     pc.hornLength = 0;
  1376.                     pc.horns = 0;
  1377.                     pc.hornType == 0;
  1378.                     pc.removeStatusEffect("Horn Bumps");
  1379.                 }
  1380.                 output("\n\nAfter the feeling subsides, you close the empty container and throw it away, washing your hands afterward.");
  1381.             }
  1382.             else
  1383.             {
  1384.                 output("\n\n" + pc.hornLengthLockedMessage());
  1385.                 output("\n\nRubbing your [pc.hornsNoun], you sigh in disappointment and throw out the empty container, washing your hands afterward.");
  1386.             }
  1387.            
  1388.             kGAMECLASS.flags["REDUCTPRO_USED_ON_HORNS"] = 1;
  1389.             if(kGAMECLASS.flags["TIMES_REDUCTPRO_USED"] == undefined) kGAMECLASS.flags["TIMES_REDUCTPRO_USED"] = 1;
  1390.             else kGAMECLASS.flags["TIMES_REDUCTPRO_USED"]++;
  1391.            
  1392.             clearMenu();
  1393.             addButton(0, "Next", kGAMECLASS.mainGameMenu);
  1394.            
  1395.             return;
  1396.         }
  1397.        
  1398.         private function useReductProDone(failed:Boolean = false):void
  1399.         {
  1400.             var pc:PlayerCharacter = kGAMECLASS.pc;
  1401.             output("\n\n");
  1402.             if(!failed) output("Recovering from the sensation, you close the empty container and throw it away");
  1403.             else output("You sigh in disappointment and throw out the empty container");
  1404.             output(", washing your hands afterward");
  1405.             if(!pc.isNude()) output(", and redressing your gear");
  1406.             output(".");
  1407.            
  1408.             if(kGAMECLASS.flags["TIMES_REDUCTPRO_USED"] == undefined) kGAMECLASS.flags["TIMES_REDUCTPRO_USED"] = 1;
  1409.             else kGAMECLASS.flags["TIMES_REDUCTPRO_USED"]++;
  1410.            
  1411.             clearMenu();
  1412.             addButton(0, "Next", kGAMECLASS.mainGameMenu);
  1413.             quantity--;
  1414.             return;
  1415.         }
  1416.        
  1417.         private function menuReductProQuit():void
  1418.         {
  1419.             clearOutput();
  1420.             var pc:PlayerCharacter = kGAMECLASS.pc;
  1421.            
  1422.             output("You decide not to use the cream and put the container back into its box and into your inventory.");
  1423.            
  1424.             clearMenu();
  1425.             addButton(0, "Next", kGAMECLASS.mainGameMenu);
  1426.             return;
  1427.         }
  1428.  
  1429.         //METHOD ACTING!
  1430.         override public function useFunction(target:Creature, usingCreature:Creature = null):Boolean
  1431.         {
  1432.             clearOutput();
  1433.             kGAMECLASS.userInterface.author("Kitteh6660");
  1434.            
  1435.             if(target is PlayerCharacter) {
  1436.                 var firstTime:Boolean = false;
  1437.                 if(kGAMECLASS.flags["TIMES_USED_REDUCTPRO"] == undefined) firstTime = true;
  1438.                
  1439.                 // Usage Menu:
  1440.                 output("You open the colourfully-packaged box");
  1441.                 if(firstTime) output(" ,");
  1442.                 else output(" and");
  1443.                 output(" pull the paste container out of the box");
  1444.                 if(firstTime)
  1445.                 {
  1446.                     output(" and decide to scan the item. The codex pulls up a research abstract that reveals the drug is completely safe to use although it’s quite potent");
  1447.                     if(CodexManager.entryViewed("Simii")) output(", even capable of affecting the Simii");
  1448.                     if(target.originalRace == "half kui-tan" || target.race() == "half kui-tan" || target.race() == "kui-tan" || CodexManager.entryViewed("Kui-Tan")) output(". ReductPro is proven to curb the testicular growth in Kui-tan");
  1449.                     output("."); //As the article on it ends, your codex beeps and informs you this drug was invented by a rat-eared doctor known as Professor Azul. He is reputed to be the galaxies’ greatest alchemist in some pharmacy circles.
  1450.                 }
  1451.                 else output(".");
  1452.                
  1453.                 // Question
  1454.                 menuReductProOptions();
  1455.                 if(!kGAMECLASS.infiniteItems()) quantity++;
  1456.                 return true;
  1457.             }
  1458.             //Not the player!
  1459.             else
  1460.             {
  1461.                 output(target.capitalA + target.short + " opens the container and applies the paste to [target.hisHer]self, but to no effect.");
  1462.             }
  1463.             return false;
  1464.         }
  1465.     }
  1466. }
  1467.  
  1468.  
  1469.  
  1470. // 9999 ========================================//
  1471.  
  1472. // To implement both "'Nuki Nuts"-related status effects:
  1473.                    
  1474. /*
  1475. // Edits to 'master/classes/Creature.as':
  1476.  
  1477. if (ballFullness >= 100)
  1478. {
  1479.     if(hasPerk("'Nuki Nuts") && balls > 1 && !hasStatusEffect("No Grow"))
  1480.     {
  1481.         //Figure out a % of normal size to add based on %s.
  1482.         var nutChange:Number = ballFullness/100 - 1;
  1483.         //Get the actual bonus number to add.  Keep it to 2 decimals.
  1484.         var nutBonus:Number = Math.round(ballSizeRaw * nutChange * 100)/100;
  1485.         trace("NUT BONUS: " + nutBonus);
  1486.        
  1487.         if(hasStatusEffect("Slow Grow")) nutBonus *= statusEffectv1("Slow Grow");
  1488.        
  1489.         //Apply nutbonus and track in v1 of the perk
  1490.         ballSizeMod += nutBonus;
  1491.         addPerkValue("'Nuki Nuts",1,nutBonus);
  1492.     }
  1493.     ballFullness = 100;
  1494. };
  1495. */
  1496.  
  1497. //========================================//
Add Comment
Please, Sign In to add comment