JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
© M. E. Hydra
The House of Hellish Harlots
Testing
/* Graphics settings */ <<set $isOnline to true>> <<if $isOnline>> <<set $imgLoc to "https:\/\/houseofhellishharlots.com\/images\/">> <<else>> <<set $imgLoc to "images\/">> <</if>> <<include [[AllInit]]>>
<<set $currencyName to "Coin">> <<set $mulliganToken to { name: "Mulligan Token", madamSellPrice: 10, moneyBuyPrice: 8 }>> <<set $npcsForArt to []>> <<set $harlotForArt to 0>> <<include [[LocationsInit]]>>
<<include [[NPC Madam: Init]]>> <<include [[NPC Barman: Init]]>> <<include [[NPC Gossip: Init]]>> <<include [[NPC Potion: Init]]>> <<include [[NPC Charm: Init]]>> <<include [[NPC Nurse: Init]]>> <<include [[NPC Money: Init]]>> <<include [[NPC Car: Init]]>> <<set $allNpcs to [ $npcMadam, $npcBarman, $npcGossip, $npcPotion, $npcCharm, $npcNurse, $npcMoney, $npcBrian, $npcChris, $npcAndy ]>>
/* We create all the possible gifts here */ <<set $giftCount to 33>> <<set $allGifts = []>> <<for _giftNum to 0; _giftNum lt $giftCount; _giftNum++>> <<set $initLink to "Gift" + _giftNum + "Init">> <<include $initLink>> <<set $allGifts[$gift.number] = $gift>> <</for>> /* Init all the category names */ <<include [[GiftCategoryNamesInit]]>>
/* Mock */
/* Mock */
/* This is where we create all the harlots */ <<include [[Mock Harlots Init]]>> /* <<set $harlotCount to 74>> <<set $allHarlots = []>> <<for _harlotNum to 0; _harlotNum lt $harlotCount; _harlotNum++>> <<set $initLink to "Harlot" + _harlotNum + "Init">> <<include $initLink>> <</for>> <<set $hcCount to 3>> <<set $hci = []>> <<set $currentHarlotIndex to 0>> <<set $hapi = []>> <<set $madamOverrideHarlotPick to -1>> <<set $overrideHarlotPicks = []>> <<set $nonOverridableRounds = [5,9,13]>> <<set $visitNumberForFactionIncrease to 0>> */
<<set $allLocations to [ { backgroundSrc: "BG_Madam.jpg" }, { backgroundSrc: "BG_Barman.jpg" }, { backgroundSrc: "BG_Gossip.jpg" }, { backgroundSrc: "BG_Potion.jpg" }, { backgroundSrc: "BG_Charm.jpg" }, { backgroundSrc: "BG_Nurse.jpg" }, { backgroundSrc: "BG_Money.jpg" }, { backgroundSrc: "BG_House.jpg" }, { backgroundSrc: "BG_BarInterior.jpg" }, { backgroundSrc: "BG_Stage.jpg" }, { backgroundSrc: "BG_Bedroom.jpg" }, { backgroundSrc: "BG_Intro.jpg" }, { backgroundSrc: "BG_CharacterSheet.jpg" }, { backgroundSrc: "BG_Corridor.jpg" }, { backgroundSrc: "BG_Socialising.jpg" }, { backgroundSrc: "BG_GameOver.jpg" } ]>>
/* Mock */ <<set $npcMadam to { name: "The Madam", portraitSrc: "P_Madam", isAvailable: true, isUnavailable: false, hasBeenAskedToMulliganHarlots: false, hasGivenComplementaryMulliganToken: false, hasToldHowNotToMulliganHarlots: false, hasToldHowToBuyMulliganTokens: false, hasToldOfNpcMoney: false, hasToldHowToAddHarlot: false, hasExplainedSocialising: false }>>
<<set $npcBarman to { name: "The Handsome Barman", altName1: "The Angelic Barman", altName2: "The Not-So-Angelic Barman", portraitSrc: "P_Barman", isAvailable: true, isUnavailable: false, hasBeenVisited: false, hasToldConsequencesOfRunningAway: false, hasIntroducedBarman: false, hasToldNeedToBuyDrink: false, /* Round 2 */ hasGivenHarlotDifficultiesIntro: false, hasToldNumberOfRounds: false, hasTalkedTier1Harlots: false, hasTalkedTier2Harlots: false, hasTalkedTier3Harlots: false, /* Round 5 */ hasTalkedMiniBosses: false }>>
/* Mock */ <<set $npcGossip to { name: "The Elegant Woman", realName: "NPC_Gossip", portraitSrc: "P_Gossip", isAvailable: true, isUnavailable: false, hasBeenIntroduced: false, hasBeenVisited: false, hasBeenBoughtFirstDrink: false, hasGivenMoneyHints: false, hasTalkedAboutHouse: false, hasBeenAskedForSex: false, hasGossipedAboutBarman: false, leavingMessages: [] }>>
/* Mock */ <<set $npcPotion to { name: "The Doctoress", isAvailable: true, isUnavailable: false, portraitSrc: "P_Potion", hasBeenIntroduced: false, hasBeenVisited: false, semenHarvested: 0, smallSamplePayout: 1, regularSamplePayout: 2, largeSamplePayout: 7, hasAskedAboutSemenExtraction: false, hasBeenAskedForSex: false, hasAskedSideEffects: false, hasSeenBigGulper: false, hasBeenInSemenExtractionBooth: false, hasUsedSmallGulper: false, hasUsedBigGulper: false, addictionLevel: 0, addictionPotCosts: [3,4,5,6,7], introActivities: [] }>>
/* Mock */ <<set $npcCharm to { name: "The Buxom Lolibaba", portraitSrc: "P_Charm", isAvailable: true, isUnavailable: false, hasBeenIntroduced: false, hasBeenVisited: false, /* NPC Specific Properties */ hasBeenAskedForSex: false, hasExplainedCharms: false, hasSoldFirstCharm: false, hasGivenMoneyHint: false, hasExplainedFixedSelection: false, hasExplainedPickAnyCharm: false, charms: [] }>>
/* Mock */ <<set $npcNurse to { name: "Nurse Honey", harlotId: 100, portraitSrc: "P_Nurse", isAvailable: true, isUnavailable: false, hasBeenIntroduced: false, hasBeenVisited: false, hasBeenAskedForSex: false, hasGivenEnergyTonic: false, tonicCost: 4, tonicRecovery: 3, diagnosisCost: 1 }>>
/* Mock */ <<set $npcMoney to { name: "The Portly Gentleman", portraitSrc: "P_Money", hasBeenIntroduced: false, isAvailable: true, isUnavailable: false, hasAskedWho: false, hasAskedWhy: false, hasTriedToBuyMulliganToken: false, hasBoughtAllExperiences: false }>>
<div id="hohh-ui"></div> <div id="character-sheet"></div> <div id="hohh-fullart"></div> <div class="all-container"> <div id="hohh-art"></div> <div class="text-container"> <div id="passages"></div> </div> </div>
<div id="hohh-ui"> /* <<include [[UILeftArt]]>> */ <<include [[UISemen]]>> <<include [[UIRound]]>> <<include [[UIPlayer]]>> <<include [[UIMoney]]>> <<include [[UISave]]>> /* <<include [[UIRightArt]]>> */ <<if $isNpcTesting>> <<include [[TestUIActions]]>> <</if>> </div>
<div> <button onclick="window.toggleCharSheet()" class="player-btn"> <<set _imgSrc to $imgLoc + "UI_Player.png">> <<set _img to "\<img src=\"" + _imgSrc + "\" width=\"56\" height=\"56\"\>">> _img </button> </div>
<div class="ui-money-box"> <div class="ui-money-container"> <<set _imgSrc to $imgLoc + "UI_MToken.jpg">> <<set _img to "\<img src=\"" + _imgSrc + "\"\>">> _img <div class="ui-text">$player.mulliganTokens</div> </div> <div class="ui-money-container"> <<set _imgSrc to $imgLoc + "UI_Coin.png">> <<set _img to "\<img src=\"" + _imgSrc + "\"\>">> _img <div class="ui-text">$player.money</div> </div> </div>
<div> <span class="save-btn"> <<set _imgSrc to $imgLoc + "UI_SaveGame.png">> <<button [img[_imgSrc]]>><<script>>UI.saves()<</script>><</button>> </span> </div>
<<if $isTesting or $player.charms.includes(1)>> <<set _semenText to $player.semenCount>> <<else>> <<if $player.semenCount gt 8>> <<set _semenText to "Floods">> <<elseif $player.semenCount gt 5>> <<set _semenText to "Gushes">> <<elseif $player.semenCount gt 2>> <<set _semenText to "Spurts">> <<else>> <<set _semenText to "Dribbles">> <</if>> <</if>> <<set _semenText to $player.semenCount>> <div class="semen-gauge"> <<set _imgSrc to $imgLoc + "UI_SemenGaugeBack.png">> <<set _img to "\<img src=\"" + _imgSrc + "\" id=\"semen-back\"\>">> _img </div> <div class="semen-gauge"> <<set _imgSrc to $imgLoc + "UI_SemenBar.png">> <<set _img to "\<img src=\"" + _imgSrc + "\" id=\"semen-bar\"\>">> _img </div> <div class="semen-gauge"> <div class="img-container"> <<if $isGameOver>> <<set _imgSrc to $imgLoc + "UI_SemenGaugeFore_Cracked.png">> <<set _img to "\<img src=\"" + _imgSrc + "\" id=\"semen-fore\"\>">> _img <<else>> <<set _imgSrc to $imgLoc + "UI_SemenGaugeFore.png">> <<set _img to "\<img src=\"" + _imgSrc + "\" id=\"semen-fore\"\>">> _img <</if>> <div class="ui-text semen-text">_semenText</div> </div> </div> <div id="semen-splurt-container"> <<set _imgSrc to $imgLoc + "UI_Splurt.png">> <<set _img to "\<img src=\"" + _imgSrc + "\" width=\"64px\" height=\"64px\" id=\"semen-splurt\"\>">> _img </div>
<div class="ui-img-container" id="round-counter"> <div class="ui-text">$player.currentRound</div> </div> <<set _delta to $player.currentRound - 1>> <<if _delta lt 0>> <<set _delta to 0>> <</if>> <<if _delta gt 3>> <<set _delta to 3>> <</if>> <<set _clockSpriteXPos to -64 * _delta>> <<set _clockSrc to $imgLoc + "UI_ClockSprites.png">> <<script>> $(document).on(':passagedisplay', function (ev) { $('#round-counter').css("background", "url('" + State.getVar("_clockSrc") + "') " + State.getVar("_clockSpriteXPos") + "px 0px"); }); <</script>>
<div class="csheet-container"> <<include [[Character Sheet: Generate]]>> </div> <<set _csheetbgSrc to $imgLoc + "BG_CharacterSheet.jpg">> <<script>> $(document).on(':passagedisplay', function (ev) { $('.csheet-container').css("background", "white url('" + State.getVar("_csheetbgSrc") + "') no-repeat center fixed"); }); $(document).on(':passagedisplay', function (ev) { $('.csheet-container').css("background-size", "cover"); }); <</script>>
<<if $player.currIsSubmissive>> <<set _isSubText to "Submissive">> <<else>> <<set _isSubText to "Dominant">> <</if>> <<if $player.currIsSlutty>> <<set _isSlutText to "Slutty">> <<else>> <<set _isSlutText to "Romantic">> <</if>> <<if $player.currIsSerious>> <<set _isSeriousText to "Serious">> <<else>> <<set _isSeriousText to "Humorous">> <</if>> <<if $player.currIsCautious>> <<set _isCautiousText to "Cautious">> <<else>> <<set _isCautiousText to "Impulsive">> <</if>> <<if $player.currIsBlunt>> <<set _isBluntText to "Blunt">> <<else>> <<set _isBluntText to "Tactful">> <</if>> <<if $player.currIsGloomy>> <<set _isGloomyText to "Gloomy">> <<else>> <<set _isGloomyText to "Cheerful">> <</if>> <div class="csheet-main"> <div class="csheet-hflex-container csheet-vflex-sitem csheet-subborder"> <<include [[Character Sheet: Generate Header]]>> </div> <div class="csheet-vflex-container csheet-vflex-bitem csheet-statcontainer"> <div class="csheet-xflex-container csheet-vflex-sitem"> <div class="csheet-vflex-container csheet-xflex-item"> <div class="csheet-title csheet-vflex-sitem csheet-subborder">Physical Stats</div> <div class="csheet-table csheet-vflex-bitem csheet-subborder"> <<include [[Character Sheet: Generate Phys Stats Display]]>> </div> </div> <div class="csheet-vflex-container csheet-xflex-item"> <div class="csheet-title csheet-vflex-sitem csheet-subborder">Personality</div> <div class="csheet-table csheet-vflex-bitem csheet-subborder"> <<include [[Character Sheet: Generate Personality Display]]>> </div> </div> </div> <div class="csheet-xflex-container csheet-vflex-bitem"> <div class="csheet-vflex-container csheet-xflex-item"> <div class="csheet-title csheet-vflex-sitem csheet-subborder">Charms</div> <div class="csheet-table csheet-vflex-bitem csheet-subborder"> <<include [[Character Sheet: Generate Charms Display]]>> </div> </div> <div class="csheet-vflex-container csheet-xflex-item"> <div class="csheet-title csheet-vflex-sitem csheet-subborder">Ailments</div> <div class="csheet-table csheet-vflex-bitem csheet-subborder"> <<include [[Character Sheet: Generate Ailments Display]]>> </div> </div> </div> </div> </div>
<table style="width:100%"> <tr> <td class="stat-label">Strength:</td> <td class="stat-value">$player.currStr</td> </tr> <tr> <td class="stat-label">Agility:</td> <td class="stat-value">$player.currAgi</td> </tr> <tr> <td class="stat-label">Dexterity:</td> <td class="stat-value">$player.currDex</td> </tr> <tr> <td class="stat-label">Constitution:</td> <td class="stat-value">$player.currCon</td> </tr> <tr> <td class="stat-label">Willpower:</td> <td class="stat-value">$player.currWill</td> </tr> <tr> <td class="stat-label">Intelligence:</td> <td class="stat-value">$player.currInt</td> </tr> </table>
<table style="width:100%"> <tr> <td class="stat-label">_isSubText</td> </tr> <tr> <td class="stat-label">_isSlutText</td> </tr> <tr> <td class="stat-label">_isSeriousText</td> </tr> <tr> <td class="stat-label">_isCautiousText</td> </tr> <tr> <td class="stat-label">_isBluntText</td> </tr> <tr> <td class="stat-label">_isGloomyText</td> </tr> </table>
<table style="width:100%"> <<for _c to 0; _c lt $player.charms.length; _c++>> <<set _cid to $player.charms[_c]>> <tr> <td class="stat-label">$allCharms[_cid].name</td> </tr> <</for>> </table>
<table style="width:100%"> <<for _c to 0; _c lt $player.knownAilments.length; _c++>> <<set _cid to $player.knownAilments[_c]>> <tr> <td class="stat-label">$allAilments[_cid].name</td> </tr> <</for>> </table>
<div class="csheet-title csheet-maintitle"> Character Sheet </div> <div> <button onclick="window.toggleCharSheet()" class="csheet-btn"> <img src="images/UI_CSheet_Close.jpg"> </button> </div>
<<set _imgSrc to $imgLoc + $allLocations[$player.location].backgroundSrc>> <<run $('body').css("background", "white url('" + _imgSrc + "') no-repeat center fixed")>> <<run $('body').css("background-size", "cover")>>
<<set _imgSrc to $imgLoc + $allHarlots[$harlotForArt - 100].pinupSrc + ".jpg">> <<set _imgSrcS to $imgLoc + $allHarlots[$harlotForArt - 100].pinupSrc + "_S.jpg">> <<set _img to "\<picture class=\"pinup-container\"\> \<source media=\"(min-width:800px)\" srcset=\"" + _imgSrc + "\"\> \<img src=\"" + _imgSrcS + "\" class=\"pinup-art\"\> \<\/picture\>">> <<link _img>><<script>>window.toggleFullArt()<</script>><</link>>
/* should be no more than 3 portraits */ <div class="portrait-container"> <<for _i to 0; _i lt $npcsForArt.length; _i++>> <<set _npc to $npcsForArt[_i]>> <<if _npc lt 100>> <<set _imgSrc to $imgLoc + $allNpcs[_npc].portraitSrc + ".jpg">> <<set _imgSrcS to $imgLoc + $allNpcs[_npc].portraitSrc + "_S.jpg">> <<else>> <<set _imgSrc to $imgLoc + $allHarlots[_npc - 100].portraitSrc + ".jpg">> <<set _imgSrcS to $imgLoc + $allHarlots[_npc - 100].portraitSrc + "_S.jpg">> <</if>> <<set _img to "\<picture\> \<source media=\"(min-width:800px) and (min-height:800px)\" srcset=\"" + _imgSrc + "\"\> \<img src=\"" + _imgSrcS + "\" class=\"portrait-art\"\> \<\/picture\>">> _img <</for>> </div>
/* note - as with portraits, $harlotForArt should be $hi + 100 */ <<if $harlotForArt gt 0>> <<include [[Set Harlot Art]]>> <<elseif $npcsForArt.length gt 0>> <<include [[Set Portrait Art]]>> <</if>>
<<set _imgSrc to $imgLoc + $allHarlots[$harlotForArt - 100].pinupSrc + ".jpg">> <<set _img to "\<img src=\"" + _imgSrc + "\" class=\"full-art\"\>">> <<link _img>><<script>>window.toggleFullArt()<</script>><</link>>
<<set $npcAndy to { name: "Andy", portraitSrc: "P_Andy" }>> <<set $npcBrian to { name: "Brian", portraitSrc: "P_Brian" }>> <<set $npcChris to { name: "Chris", portraitSrc: "P_Chris" }>>
<div class=test-actions> CAction: $player.clubActivityUnits<br> PAction: $player.postroomActivityUnits </div>
/* Initialise modules */ <<include [[PlayerInit]]>> <<include [[HouseInit]]>> <<include [[NpcInit]]>> <<include [[GiftsInit]]>> <<include [[PotionsInit]]>> <<include [[CharmsInit]]>> <<include [[HarlotsInit]]>> /* reset graphics (in case it's been forgotten) */ <<set $isGameOver to false>> <<set $player.location to 7>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<set $harlotForArt to 0>>
/* Create blank player stats on initialisation */ /* ailments */ <<include [[PlayerAilmentsInit]]>> /* Initialise player stats */ <<set $player to { baseStr: 0, baseAgi: 0, baseDex: 0, baseInt: 0, baseWill: 0, baseCon: 0, currStr: 0, currAgi: 0, currDex: 0, currInt: 0, currWill: 0, currCon: 0, maxSemenCount: 10, semenCount: 10, money: 0, mulliganTokens: 0, charms: [], hasVision: false, roomScores: [], factionAffinities: [0,0,0,0,0,0,0,0], maxFactionAffinities: [], potionResistance: 3, potionEffects: [], ailments: [], knownAilments: [], currentRound: 0, clubActivityMaxUnits: 4, clubActivityUnits: 4, postroomActivityMaxUnits: 2, postroomActivityUnits: 2, location: 11 }>> /* semen change stats */ <<set $semenChange to 0>> <<set $isOutOfSemen to false>>
//Player has $player.maxFactionAffinities.length max faction affinities.//<br> //Player Max Faction Affinities are:// <<for _i to 0; _i lt $player.maxFactionAffinities.length; _i++>> <<print " " + $player.maxFactionAffinities[_i]>>, <</for>><br>
<<set $isTesting to true>> <<include [[PlayerInit]]>> <<include [[Testing: Create New Player]]>> <<include [[Player: Print Faction Affinities]]>> <br> TESTING determination of player max affinities.<br> <br> <<include [[Player: Determine Max Faction Affinities]]>> <<include [[Player: Print Max Affinities]]>><br><br> TESTING: Setting player faction=3 affinity to 1<br><br> <<set $player.factionAffinities[3] to 1>> <<include [[Player: Print Faction Affinities]]>> <br> TESTING determination of player max affinities.<br> <br> <<include [[Player: Determine Max Faction Affinities]]>> <<include [[Player: Print Max Affinities]]>> <br> TESTING: Setting player faction=4 affinity to 1<br><br> <<set $player.factionAffinities[4] to 1>> <<include [[Player: Print Faction Affinities]]>> <br> TESTING determination of player max affinities.<br> <br> <<include [[Player: Determine Max Faction Affinities]]>> <<include [[Player: Print Max Affinities]]>>
//Player Faction Affinities://<br> <<for _faction to 0; _faction lt $player.factionAffinities.length; _faction++>> // <<print _faction>>: <<print $player.factionAffinities[_faction]>>//<br> <</for>>
/* Random Stats */ <<include [[Create Player Physical Stats: Distributed]]>> <<include [[Create Player Disposition Stats: Random]]>> <<include [[Create Player]]>> <<include [[Unset Physical Stats]]>> <<include [[Unset Disposition Stats]]>>
Player Physical Stats:<br> Base Strength = <<print $player.baseStr>><br> Base Agility = <<print $player.baseAgi>><br> Base Dexterity = <<print $player.baseDex>><br> Base Intelligence = <<print $player.baseInt>><br> Base Willpower = <<print $player.baseWill>><br> Base Constitution = <<print $player.baseCon>><br> <br> Current Strength = <<print $player.currStr>><br> Current Agility = <<print $player.currAgi>><br> Current Dexterity = <<print $player.currDex>><br> Current Intelligence = <<print $player.currInt>><br> Current Willpower = <<print $player.currWill>><br> Current Constitution = <<print $player.currCon>><br>
Player Room Scores:<br> <br> <<for _s to 0; _s lt $player.roomScores.length; _s++>> <<set _scoreObj to $player.roomScores[_s]>> <<include [[Print Room Score]]>><br> <br> <</for>>
// Round:// _scoreObj.round<br> // Harlot: // <<if def $allHarlots>> <<set _h to _scoreObj.harlotNumber>> $allHarlots[_h].name <<else>> _scoreObj.harlotNumber <</if>><br> // NPC Money score://<br> <<set _scoreArray to _scoreObj.scoreArray>> <<include [[Score Array: Print]]>>
/* This is the way to do semen count changes in Bad End scenarios or where the player isn't coming back. Updates semen count, but only checks it stays at zero */ <<set $player.semenCount += $semenChange>> <<if $player.semenCount lt 0>> <<set $player.semenCount to 0>> <</if>> <<if $player.semenCount gt $player.maxSemenCount>> <<set $player.semenCount to $player.maxSemenCount>> <</if>>
/* Move all the semen changes to one location. Can put all the triggers on semen count stat here. Can also track if player has been drained enough to trigger a Bad End. */ /* semen choker acts here to reduce all semen lost to units of 1 */ <<if $player.charms.includes(18) and $semenChange lt -1>> <<if $isTesting>> ''Semen loss changed from $semenChange to -1 thanks to Semen Choker Charm.''<br> <br> <</if>> <<set $semenChange to -1>> <</if>> <<set $player.semenCount += $semenChange>> <<if $player.semenCount lt 0>> <<set $isOutOfSemen to true>> /* triggers bad end */ <<set $player.semenCount to 0>> <</if>> <<if $player.semenCount gt $player.maxSemenCount>> <<set $player.semenCount to $player.maxSemenCount>> <</if>>
/* Pre-reqs: _factionNumber _isPlayerThisFaction */ <<set _isPlayerThisFaction to false>> <<set _pmfa to $player.maxFactionAffinities>> <<for _i to 0; _i lt _pmfa.length; _i++>> <<if _pmfa[_i] eq _factionNumber>> <<set _isPlayerThisFaction to true>> <</if>> <</for>>
/* algorithm to give more rounded stats */ /* total number of pts to distribute */ <<set _pts to 12>> <<set $str to 1>> <<set $agi to 1>> <<set $dex to 1>> <<set $con to 1>> <<set $int to 1>> <<set $wil to 1>> <<for _p to 0; _p lt _pts; _p++>> /* generate random number between 1 and 6 */ <<set _rng to random(1,6)>> <<switch _rng>> <<case 1>> <<set $str += 1>> <<case 2>> <<set $agi += 1>> <<case 3>> <<set $dex += 1>> <<case 4>> <<set $con += 1>> <<case 5>> <<set $int += 1>> <<case 6>> <<set $wil += 1>> <</switch>> <</for>> /* Clean-up for stats going above 5 */ <<if $str gt 5>> <<set $str to 5>> <</if>> <<if $agi gt 5>> <<set $agi to 5>> <</if>> <<if $dex gt 5>> <<set $dex to 5>> <</if>> <<if $int gt 5>> <<set $int to 5>> <</if>> <<if $con gt 5>> <<set $con to 5>> <</if>> <<if $wil gt 5>> <<set $wil to 5>> <</if>>
/* Pre-reqs: _ailment Output: _hasAilment */ <<set _hasAilment to false>> <<set _pail to $player.ailments>> <<for _i to 0; _i lt _pail.length; _i++>> <<if _pail[_i] eq _ailment>> <<set _hasAilment to true>> <</if>> <</for>>
/* Create all the player ailments here */ <<set _ailmentCount to 12>> <<set $allAilments = []>> <<for _ail to 0; _ail lt _ailmentCount; _ail++>> <<set _initLink to "Ailment" + _ail + "Init">> <<include _initLink>> <<set $allAilments[$ailment.id] to $ailment>> <</for>>
/* Boob Fetish */ <<set $ailment to { id: 1, name: "Boob Fetish", cureCost: 3 }>>
<<include [[PlayerAilmentsInit]]>> TESTING PLAYER AILMENTS<br> <br> <<include [[Test Ailments: Print All Ailments]]>>
''Number of Player Ailments = $allAilments.length''<br> <br> <<for _a, _ail range $allAilments>> <<print _a + ".">> _ail.name<br> <</for>>
/* print all ailments (known and unknown) the player has */ PLAYER HAS $player.ailments.length AILMENTS<br> <<set _ailments to $player.ailments>> <<for _i to 0; _i lt _ailments.length; _i++>> <<set _a to _ailments[_i]>> <<print $allAilments[_a].name>> <<if _a eq 0>> <<set _hi to $allAilments[_a].harlot>> <<print ": " + $allHarlots[_hi].name>> <</if>> <br> <</for>>
/* print all known ailments the player has */ PLAYER HAS $player.knownAilments.length AILMENTS THEY KNOW ABOUT<br> <<set _ailments to $player.knownAilments>> <<for _i to 0; _i lt _ailments.length; _i++>> <<set _a to _ailments[_i]>> <<print $allAilments[_a].name>><br> <</for>>
/* Add an ailment prereq: _ailment */ <<set $player.ailments.pushUnique(_ailment)>> <<if $isTesting or $player.charms.includes(19)>> ''You've picked up the $allAilments[_ailment].name ailment.''<br> <br> <</if>>
/* Add an known ailment prereq: _ailment */ <<set $player.knownAilments.pushUnique(_ailment)>> <<if $isTesting>> ''Player has been diagnosed with the $allAilments[_ailment].name ailment.''<br> <br> <</if>>
/* Remove an ailment - prereq: _ailment */ <<set $player.ailments.delete(_ailment)>> <<set $player.knownAilments.delete(_ailment)>> <<if $isTesting>> ''Player has been cured of the $allAilments[_ailment].name ailment''<br> <br> <</if>>
<<include [[Testing: Create New Player]]>> <<set $isTesting to true>> ''NO AILMENTS''<br> <br> <<include [[Player: Print Ailments]]>><br> -------------------------------<br> <br> ''ADDING AILMENT''<br> <br> <<set _ailment to 6>> <<include [[Add Player Hidden Ailment]]>> <<include [[Player: Print Ailments]]>><br> -------------------------------<br> <br> ''DIAGNOSING AILMENT''<br> <br> <<include [[Add Player Known Ailment]]>> <<include [[Player: Print Ailments]]>><br> -------------------------------<br> <br> ''CURING AILMENT''<br> <br> <<include [[Remove Player Ailment]]>> <<include [[Player: Print Ailments]]>><br> -------------------------------
<<include [[Player: Print Hidden Ailments]]>><br> <<include [[Player: Print Known Ailments]]>><br>
/* Generic function for scoring if player has done a certain activity with a harlot pre-reqs: _x (activity being checked for) pre-reqs: $hi (harlot) output: _hasDoneX */ <<set _hasDoneX to false>> <<for _r to 0; _r lt $player.roomScores.length; _r++>> <<if $player.roomScores[_r].harlotNumber eq $hi>> <<set _sa to $player.roomScores[_r].scoreArray>> <<if _sa[_x][1] eq true>> <<set _hasDoneX to true>> <</if>> <</if>> <</for>>
/* Enslavement - to a certain harlot. Must always pick them, may trigger Bad End in room */ <<set $ailment to { id: 0, name: "Enslavement", cureCost: 5, harlot: 0 /* add more stuff later as needed */ }>>
/* Check if player has enslaved ailment and is enslaved to harlot pre-req: _hi output: _isEnslaved */ <<set _isEnslaved to false>> <<set _ailment to 0>> <<include [[Check if Player Has Given Ailment]]>> <<if _hasAilment>> <<if $allAilments[0].harlot eq _hi>> <<set _isEnslaved to true>> <</if>> <</if>>
/* Ass Fetish */ <<set $ailment to { id: 2, name: "Ass Fetish", cureCost: 3 }>>
/* Lip Fetish */ <<set $ailment to { id: 3, name: "Lips Fetish", cureCost: 3 }>>
/* Foot Fetish */ <<set $ailment to { id: 4, name: "Foot Fetish", cureCost: 3 }>>
/* Leg Fetish */ <<set $ailment to { id: 5, name: "Leg Fetish", cureCost: 3 }>>
/* Fatigued */ <<set $ailment to { id: 6, name: "Fatigued", cureCost: 2 }>>
/* Mushy (pre-digested by slime girls) */ <<set $ailment to { id: 7, name: "Mushy", /* add more stuff later as needed */ cureCost: 4 }>>
/* check if player is exclusively part of a faction (has max affinity only with that faction). */ /* Pre-reqs: _factionNumber _isPlayerThisFaction */ <<set _isPlayerThisFaction to false>> <<set _pmfa to $player.maxFactionAffinities>> <<if _pmfa.length eq 1>> <<if _pmfa[0] eq _factionNumber>> <<set _isPlayerThisFaction to true>> <</if>> <</if>>
<<set $isSub to false>> <<set $isSlut to false>> <<set $isSerious to false>> <<set $isCautious to false>> <<set $isBlunt to false>> <<set $isGloomy to false>> /* submissive - dominant */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isSub to true>> <</if>> /* slutty - romantic */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isSlut to true>> <</if>> /* serious - humorous */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isSerious to true>> <</if>> /* cautious - impulsive */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isCautious to true>> <</if>> /* blunt - tactful */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isBlunt to true>> <</if>> /* gloomy - cheerful */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isGloomy to true>> <</if>>
Player Dispositions:<br> BASE<br> <<if $player.baseIsSubmissive>>Submissive<<else>>Dominant<</if>><br> <<if $player.baseIsSlutty>>Slutty<<else>>Romantic<</if>><br> <<if $player.baseIsSerious>>Serious<<else>>Humorous<</if>><br> <<if $player.baseIsCautious>>Cautious<<else>>Impulsive<</if>><br> <<if $player.baseIsBlunt>>Blunt<<else>>Tactful<</if>><br> <<if $player.baseIsGloomy>>Gloomy<<else>>Cheerful<</if>><br> <br> CURRENT<br> <<if $player.currIsSubmissive>>Submissive<<else>>Dominant<</if>><br> <<if $player.currIsSlutty>>Slutty<<else>>Romantic<</if>><br> <<if $player.currIsSerious>>Serious<<else>>Humorous<</if>><br> <<if $player.currIsCautious>>Cautious<<else>>Impulsive<</if>><br> <<if $player.currIsBlunt>>Blunt<<else>>Tactful<</if>><br> <<if $player.currIsGloomy>>Gloomy<<else>>Cheerful<</if>><br>
/* Table for player to set their dispositions at beginning of game */ /* Temporary measure - will be updated with proper intro */ <table> <tr> <td style="text-align:left"> <label><<radiobutton "$isSub" true checked>><span> ''Submissive'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isSub" false>><span> ''Dominant'' </span></label> </td> </tr> <tr> <td style="text-align:left"> <label><<radiobutton "$isSlut" true checked>><span> ''Slutty'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isSlut" false>><span> ''Romantic'' </span></label> </td> </tr> <tr> <td style="text-align:left"> <label><<radiobutton "$isSerious" true checked>><span> ''Serious'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isSerious" false>><span> ''Humorous'' </span></label> </td> </tr> <tr> <td style="text-align:left"> <label><<radiobutton "$isCautious" true checked>><span> ''Cautious'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isCautious" false>><span> ''Impulsive'' </span></label> </td> </tr> <tr> <td style="text-align:left"> <label><<radiobutton "$isBlunt" true checked>><span> ''Blunt'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isBlunt" false>><span> ''Tactful'' </span></label> </td> </tr> <tr> <td style="text-align:left"> <label><<radiobutton "$isGloomy" true checked>><span> ''Gloomy'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isGloomy" false>><span> ''Cheerful'' </span></label> </td> </tr> </table>
/* Create a new player */ /* Note: Assumes variables are set beforehand */ <<set $player to { baseStr: $str, baseAgi: $agi, baseDex: $dex, baseInt: $int, baseWill: $wil, baseConst: $con, currStr: $str, currAgi: $agi, currDex: $dex, currInt: $int, currWill: $wil, currConst: $con, baseIsSubmissive: $isSub, baseIsSlutty: $isSlut, baseIsSerious: $isSerious, baseIsCautious: $isCautious, baseIsBlunt: $isBlunt, baseIsGloomy: $isGloomy, currIsSubmissive: $isSub, currIsSlutty: $isSlut, currIsSerious: $isSerious, currIsCautious: $isCautious, currIsBlunt: $isBlunt, currIsGloomy: $isGloomy, maxSemenCount: 10, semenCount: 10, money: 0, mulliganTokens: 0, charms: [], hasVision: false, roomScores: [], factionAffinities: [0,0,0,0,0,0,0,0], maxFactionAffinities: [], potionResistance: 3, potionEffects: [], ailments: [], knownAilments: [], currentRound: 0, clubActivityMaxUnits: 4, clubActivityUnits: 4, postroomActivityMaxUnits: 2, postroomActivityUnits: 2 }>>
/* for after we've assigned stats to player */ <<unset $str>> <<unset $agi>> <<unset $dex>> <<unset $con>> <<unset $int>> <<unset $wil>>
/* for after we've assigned them to player */ <<unset $isSub>> <<unset $isSlut>> <<unset $isSerious>> <<unset $isCautious>> <<unset $isBlunt>> <<unset $isGloomy>>
/* Disposition chosen by player */ //Choose the disposition traits of your player character.//<br> <br> //Some harlots respond better to certain dispositions. (And some will kill players of the wrong disposition.)//<br> <br> <<include [[Create Player Disposition Stats: Table]]>> <br> <br> [[Done.->$afterTableSelectionLink]]
<<include [[Create Player Physical Stats: Distributed]]>> <<set $afterTableSelectionLink to "Create New Player: Chosen Dispositions: End">> <<include [[Create Player Disposition Stats: Choose]]>>
<<include [[Create Player]]>> <<include [[Unset Physical Stats]]>> <<include [[Unset Disposition Stats]]>> <<unset $afterTableSelectionLink>> /* Go back to whereever asked to create a new player */ <<include [[$afterPlayerCreationLink]]>>
<<unset $afterPlayerCreationLink>> <<include [[Print Full Phys Stats]]>><br> <<include [[Print Full Disp Stats]]>><br> [[Roll again->Test Player: Creation]]<br>
/* Revert player stats back to base values. */ /* Done at beginning of round */ /* Used in potion clean-up */ <<set $player.currStr to $player.baseStr>> <<set $player.currAgi to $player.baseAgi>> <<set $player.currDex to $player.baseDex>> <<set $player.currInt to $player.baseInt>> <<set $player.currWill to $player.baseWill>> <<set $player.currCon to $player.baseCon>> <<set $player.currIsSubmissive to $player.baseIsSubmissive>> <<set $player.currIsSlutty to $player.baseIsSlutty>> <<set $player.currIsSerious to $player.baseIsSerious>> <<set $player.currIsCautious to $player.baseIsCautious>> <<set $player.currIsBlunt to $player.baseIsBlunt>> <<set $player.currIsGloomy to $player.baseIsGloomy>>
/* Potion Befuddlement - After effect of mindbending potions. Is checked by some harlots (usually with Will or Int checks) */ <<set $ailment to { id: 8, name: "Potion Befuddlement", /* add more stuff later as needed */ cureCost: 1 }>>
/* Potion Addiction - picked up from drinking too many potions in a short period of time. Forces trips to NPC Potion and wastes actions and coins buying her 'special' potions. */ <<set $ailment to { id: 9, name: "Potion Addiction", /* add more stuff later as needed */ hasSatisfied: false, cureCost: 10 }>>
<<set _currStat to $player.currWill>> <<set _statLabel to "WILL">> <<include [[Player: Test Stat]]>>
<<set _currStat to $player.currAgi>> <<set _statLabel to "AGI">> <<include [[Player: Test Stat]]>>
<<set _currStat to $player.currDex>> <<set _statLabel to "DEX">> <<include [[Player: Test Stat]]>>
<<set _currStat to $player.currCon>> <<set _statLabel to "CON">> <<include [[Player: Test Stat]]>>
<<set _currStat to $player.currInt>> <<set _statLabel to "INT">> <<include [[Player: Test Stat]]>>
/* Boobfairy Milk Fascination */ <<set $ailment to { id: 10, name: "Boobfairy Milk Fascination", /* add more stuff later as needed */ cureCost: 4 }>>
<<set _currStat to $player.currStr>> <<set _statLabel to "STR">> <<include [[Player: Test Stat]]>>
/* For when we want to check semen change in advance to pick a path but not update semen count. Does not update semen count Call Checked Semen Change later to do this (not Unchecked change) */ /* semen choker acts here to reduce all semen lost to units of 1 */ <<if $player.charms.includes(18) and $semenChange lt -1>> <<if $isTesting>> ''Semen loss changed from $semenChange to -1 thanks to Semen Choker Charm.''<br> <br> <</if>> <<set $semenChange to -1>> <</if>> <<set _tempSemenCount to $player.semenCount>> <<set _tempSemenCount += $semenChange>> <<if _tempSemenCount lt 0>> <<set $isOutOfSemen to true>> /* triggers bad end */ <</if>>
<<set _hasSeenUnusualHarlots to false>> <<if $player.hasSeenGenericUnusual eq true>> <<set _hasSeenUnusualHarlots to true>> <</if>> <<if $player.isAwareOfFairyTrick eq true>> <<set _hasSeenUnusualHarlots to true>> <</if>> <<if $player.hasSeenLamia eq true>> <<set _hasSeenUnusualHarlots to true>> <</if>> <<if $player.hasSeenArachne eq true>> <<set _hasSeenUnusualHarlots to true>> <</if>>
<<set $isTesting to true>> <<include [[PlayerInit]]>> ''TESTING STATS:''<br><br> [[stat.->Test Player: Test Stat]]<br> [[STR.->Test Player: Test Str]]<br> [[DEX.->Test Player: Test Dex]]<br> [[AGI.->Test Player: Test Agi]]<br> [[CON.->Test Player: Test Con]]<br> [[WILL.->Test Player: Test Will]]<br> [[INT.->Test Player: Test Int]]
/* Befuddlement */ <<set $ailment to { id: 11, name: "Befuddlement", /* add more stuff later as needed */ cureCost: 2 }>>
<<include [[PlayerInit]]>> ''TEST PLAYER CREATION''<br> <br> /* <<include [[Testing: Create New Player]]>> <<include [[Print Full Phys Stats]]>><br> <<include [[Print Full Disp Stats]]>><br> [[Roll again->Test Player: Creation]]<br> */ [[Create Player With Random Dispositions.->Test Player: Create With Random Dispositions]]<br> [[Create Player With Chosen Dispositions.->Test Player: Create With Chosen Dispositions]]
<<include [[PlayerInit]]>> <<include [[Roll Phys Stats: Random Distributed]]>> <<set $postSetDispLink to "Test Player: Dispositions Chosen">> <<include [[Roll Disp Stats: Choose]]>>
<<include [[Testing: Create New Player]]>> <<include [[Print Full Phys Stats]]>><br> <<include [[Print Full Disp Stats]]>><br> [[Roll again->Test Player: Creation]]<br>
/* Determine the player's current preferred faction(s) */ <<set $player.maxFactionAffinities to []>> <<set _pfa to $player.factionAffinities>> <<set _currentMax to 0>> <<for _faction to 0; _faction lt _pfa.length; _faction++>> <<if _pfa[_faction] gt _currentMax>> /* new current max */ <<set _currentMax to _pfa[_faction]>> <<set $player.maxFactionAffinities to [_faction]>> <<elseif _pfa[_faction] eq _currentMax>> /* tie, add to list */ <<set $player.maxFactionAffinities.push(_faction)>> <</if>> <</for>>
<<set $isTesting to true>> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> /* create score array */ <<set $player.roomScores[0] to { round: $player.currentRound, harlotNumber: 13, scoreArray: [ [1, true, false], [2, true, false], [1, true, false], [3, false, false], [2, false, false] ] }>> <div class="text-display"> <div class="body-text"> <<include [[Player: Print Room Scores]]>> </div> <div class="options-text"> </div> </div>
/* assumes _scoreArray has been defined */ <<for _si to 0; _si lt _scoreArray.length; _si++>> // <<print _scoreArray[_si][0] + ", " + _scoreArray[_si][1] + ", " + _scoreArray[_si][2]>>//<br> <</for>>
<<include [[Testing: Create New Player]]>> <<set $player.currStr to 2>> ''TESTING STR...''<br> <<set _reqStat to 3>> <<include [[Player: Test Str]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> [[More Tests.->Test Player: Test Stats]]
<<include [[Testing: Create New Player]]>> <<set $player.currDex to 2>> ''TESTING DEX...''<br> <<set _reqStat to 3>> <<include [[Player: Test Dex]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> [[More Tests.->Test Player: Test Stats]]
<<include [[Testing: Create New Player]]>> <<set $player.currAgi to 2>> ''TESTING AGI...''<br> <<set _reqStat to 3>> <<include [[Player: Test Agi]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> [[More Tests.->Test Player: Test Stats]]
<<include [[Testing: Create New Player]]>> <<set $player.currCon to 2>> ''TESTING CON...''<br> <<set _reqStat to 3>> <<include [[Player: Test Con]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> [[More Tests.->Test Player: Test Stats]]
<<include [[Testing: Create New Player]]>> <<set $player.currWill to 2>> ''TESTING WILL...''<br> <<set _reqStat to 3>> <<include [[Player: Test Will]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> [[More Tests.->Test Player: Test Stats]]
<<include [[Testing: Create New Player]]>> <<set $player.currInt to 2>> ''TESTING INT...''<br> <<set _reqStat to 3>> <<include [[Player: Test Int]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> [[More Tests.->Test Player: Test Stats]]
/* pre-reqs: _reqStat, _currStat, _statLabel, _ailmentsList, _charmsList */ <<set _testPassed to true>> <<if _currStat lt _reqStat>> <<set _testPassed to false>> <<if $isTesting>> ''Test failed: Player _statLabel (_currStat) less than required (_reqStat).''<br> <br> <</if>> <</if>> <<if _ailmentsList eq null>> <<set _ailmentsList to []>> <</if>> <<for _ai to 0; _ai lt _ailmentsList.length; _ai++>> <<if _testPassed>> <<set _ailment to _ailmentsList[_ai]>> <<include [[Check if Player Has Given Ailment]]>> <<if _hasAilment>> <<set _testPassed to false>> <<if $isTesting>> ''Test failed: Player has $allAilments[_ailment].name ailment.''<br> <br> <</if>> <</if>> <</if>> <</for>> <<if _charmsList eq null>> <<set _charmsList to []>> <</if>> <<for _ci to 0; _ci lt _charmsList.length; _ci++>> <<if not _testPassed>> <<set _charm to _charmsList[_ci]>> <<if $player.charms.includes(_charm)>> <<set _testPassed to true>> <<if $isTesting>> ''Test passed: Failure overridden by $allCharms[_charm].name.''<br> <br> <</if>> <</if>> <</if>> <</for>>
<<set _statLabel to "GENERAL">> ''TESTING STAT CHECKS...''<br> Ailment:<br> <<include [[Testing: Create New Player]]>> <<set _ailment to 6>> <<include [[Add Player Hidden Ailment]]>> <<set _reqStat to 3>> <<set _currStat to 4>> <<set _ailmentsList to [6]>> <<include [[Player: Test Stat]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> Charm:<br> <<include [[Testing: Create New Player]]>> <<set $player.charms.push(20)>> <<set _reqStat to 3>> <<set _currStat to 2>> <<set _charmsList to [20]>> <<include [[Player: Test Stat]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> Ailment + Charm:<br> <<include [[Testing: Create New Player]]>> <<set _ailment to 6>> <<include [[Add Player Hidden Ailment]]>> <<set $player.charms.push(20)>> <<set _reqStat to 3>> <<set _currStat to 4>> <<set _charmsList to [20]>> <<set _ailmentsList to [6]>> <<include [[Player: Test Stat]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> <<include [[Testing: Create New Player]]>> Higher Stat:<br> <<set _reqStat to 3>> <<set _currStat to 4>> <<include [[Player: Test Stat]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> Tying Stat:<br> <<include [[Testing: Create New Player]]>> <<set _reqStat to 3>> <<set _currStat to 3>> <<include [[Player: Test Stat]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> Lower Stat:<br> <<include [[Testing: Create New Player]]>> <<set _reqStat to 3>> <<set _currStat to 2>> <<include [[Player: Test Stat]]>> <<if _testPassed>>''Test passed''<<else>>''Test failed''<</if>><br> <br> [[More Tests.->Test Player: Test Stats]]
<<set $isTesting to true>> <<include [[PlayerInit]]>> ''Create Player 1''<br> <<include [[Testing: Create New Player]]>> <<include [[Check if Player Has Seen Unusual Harlots]]>> Player has <<if not _hasSeenUnusualHarlots>>not<</if>> seen unusual harlots.<br> After seeing lamia.<br> <<set $player.hasSeenLamia to true>> <<include [[Check if Player Has Seen Unusual Harlots]]>> Player has <<if not _hasSeenUnusualHarlots>>not<</if>> seen unusual harlots.<br> <br> ''Create Player 2 (to check these attributes are reset)''<br> <<include [[Testing: Create New Player]]>> <<include [[Check if Player Has Seen Unusual Harlots]]>> Player has <<if not _hasSeenUnusualHarlots>>not<</if>> seen unusual harlots.<br>
<<set $isTesting to true>> <<include [[PlayerInit]]>> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $hi to 13>> /* create score array */ <<set $player.roomScores[0] to { round: $player.currentRound, harlotNumber: $hi, scoreArray: [ [1, true, false], [2, true, false], [1, true, false], [3, false, false], [2, false, false] ] }>> ''Testing Has done X with harlot''<br> <<set _x to 2>> Has done (_x) should be true.<br> <<include [[Check if Player Has Done X With Harlot]]>> is _hasDoneX<br> <<set _x to 4>> Has done (_x) should be false.<br> <<include [[Check if Player Has Done X With Harlot]]>> is _hasDoneX<br>
/* Used for individual module testing */ <<include [[PlayerInit]]>> <<include [[Roll Phys Stats: Random Distributed]]>> <<include [[Roll Disp Stats: Random]]>>
<<if $isPostRoom>> <<set $player.postroomActivityUnits -= 1>> <<else>> <<set $player.clubActivityUnits -= 1>> <</if>> <<set $hasUsedActionWithNpc to true>>
<<include [[Testing: Create New Player]]>> <<set $isPostRoom to false>> <<set $hasUsedActionWithNpc to false>> ''INIT''<br> <<include [[Player: Print Actions Left]]>> Has Used Action With NPC = $hasUsedActionWithNpc<br> <br> ''CLUB ACTIVITY''<br> <<include [[Player: Pay NPC Action]]>> <<include [[Player: Print Actions Left]]>> Has Used Action With NPC = $hasUsedActionWithNpc<br> <br> ''POSTROOM ACTIVITY''<br> <<set $isPostRoom to true>> <<set $hasUsedActionWithNpc to false>> <<include [[Player: Pay NPC Action]]>> <<include [[Player: Print Actions Left]]>> Has Used Action With NPC = $hasUsedActionWithNpc<br> <br> ''RESET''<br> <<include [[Player: Reset Activity Units]]>> <<include [[Player: Print Actions Left]]>>
Club Actity Units = $player.clubActivityUnits<br> Postroom Activity Units = $player.postroomActivityUnits<br>
<<set $player.clubActivityUnits to $player.clubActivityMaxUnits>> <<set $player.postroomActivityUnits to $player.postroomActivityMaxUnits>>
/* algorithm to give more rounded stats */ /* total number of pts to distribute */ <<set _pts to 12>> <<set $str to 1>> <<set $agi to 1>> <<set $dex to 1>> <<set $con to 1>> <<set $int to 1>> <<set $wil to 1>> <<for _p to 0; _p lt _pts; _p++>> /* generate random number between 1 and 6 */ <<set _rng to random(1,6)>> <<switch _rng>> <<case 1>> <<set $str += 1>> <<case 2>> <<set $agi += 1>> <<case 3>> <<set $dex += 1>> <<case 4>> <<set $con += 1>> <<case 5>> <<set $int += 1>> <<case 6>> <<set $wil += 1>> <</switch>> <</for>> <<include [[Fix Bad Phys Stats]]>> <<include [[Assign Phys Stats]]>>
<<set $isSub to false>> <<set $isSlut to false>> <<set $isSerious to false>> <<set $isCautious to false>> <<set $isBlunt to false>> <<set $isGloomy to false>> /* submissive - dominant */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isSub to true>> <</if>> /* slutty - romantic */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isSlut to true>> <</if>> /* serious - humorous */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isSerious to true>> <</if>> /* cautious - impulsive */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isCautious to true>> <</if>> /* blunt - tactful */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isBlunt to true>> <</if>> /* gloomy - cheerful */ <<set _rng to random(1)>> <<if _rng eq 0>> <<set $isGloomy to true>> <</if>> <<include [[Assign Disp Stats]]>>
/* Disposition chosen by player */ /* Pre-req: $postSetDispLink (where to go after setting stats) */ <div class="text-display"> <div class="body-text"> //Choose the disposition traits of your player character.//<br> <br> //Some harlots respond better to certain dispositions. (And some will kill players of the wrong disposition.)//<br> <br> <<include [[Choose Disp Stats Table]]>><br> <br> </div> <div class="options-text"> [[Done.->Roll Disp Stats: Chosen]] </div> </div>
Double-click this passage to edit it.
/* Table for player to set their dispositions at beginning of game */ /* Temporary measure - will be updated with proper intro */ <table> <tr> <<set $isSub to $player.baseIsSubmissive>> <td style="text-align:left"> <label><<radiobutton "$isSub" true autocheck>><span> ''Submissive'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isSub" false autocheck>><span> ''Dominant'' </span></label> </td> </tr> <tr> <<set $isSlut to $player.baseIsSlutty>> <td style="text-align:left"> <label><<radiobutton "$isSlut" true autocheck>><span> ''Slutty'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isSlut" false autocheck>><span> ''Romantic'' </span></label> </td> </tr> <tr> <<set $isSerious to $player.baseIsSerious>> <td style="text-align:left"> <label><<radiobutton "$isSerious" true autocheck>><span> ''Serious'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isSerious" false autocheck>><span> ''Humorous'' </span></label> </td> </tr> <tr> <<set $isCautious to $player.baseIsCautious>> <td style="text-align:left"> <label><<radiobutton "$isCautious" true autocheck>><span> ''Cautious'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isCautious" false autocheck>><span> ''Impulsive'' </span></label> </td> </tr> <tr> <<set $isBlunt to $player.baseIsCautious>> <td style="text-align:left"> <label><<radiobutton "$isBlunt" true autocheck>><span> ''Blunt'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isBlunt" false autocheck>><span> ''Tactful'' </span></label> </td> </tr> <tr> <<set $isGloomy to $player.baseIsGloomy>> <td style="text-align:left"> <label><<radiobutton "$isGloomy" true autocheck>><span> ''Gloomy'' </span></label> </td> <td style="text-align:left"> <label><<radiobutton "$isGloomy" false autocheck>><span> ''Cheerful'' </span></label> </td> </tr> </table>
<<set $player.baseStr to $str>> <<set $player.baseAgi to $agi>> <<set $player.baseDex to $dex>> <<set $player.baseCon to $con>> <<set $player.baseWill to $wil>> <<set $player.baseInt to $int>> <<set $player.currStr to $str>> <<set $player.currAgi to $agi>> <<set $player.currDex to $dex>> <<set $player.currCon to $con>> <<set $player.currWill to $wil>> <<set $player.currInt to $int>> <<unset $str>> <<unset $agi>> <<unset $dex>> <<unset $con>> <<unset $int>> <<unset $wil>>
<<set $player.baseIsSubmissive to $isSub>> <<set $player.currIsSubmissive to $isSub>> <<set $player.baseIsSlutty to $isSlut>> <<set $player.currIsSlutty to $isSlut>> <<set $player.baseIsSerious to $isSerious>> <<set $player.currIsSerious to $isSerious>> <<set $player.baseIsCautious to $isCautious>> <<set $player.currIsCautious to $isCautious>> <<set $player.baseIsBlunt to $isBlunt>> <<set $player.currIsBlunt to $isBlunt>> <<set $player.baseIsGloomy to $isGloomy>> <<set $player.currIsGloomy to $isGloomy>> <<unset $isSub>> <<unset $isSlut>> <<unset $isSerious>> <<unset $isCautious>> <<unset $isBlunt>> <<unset $isGloomy>>
/* Disposition chosen by player */ /* Pre-req: $postSetDispLink (where to go after setting stats) */ <<include [[Assign Disp Stats]]>> <<include $postSetDispLink>>
<table> <tr> <td style="text-align:left"> STR: </td> <td style="text-align:left color:black"> <<numberbox "$str" $player.baseStr>> </td> </tr> <tr> <td style="text-align:left"> AGI: </td> <td style="text-align:left color:black"> <<numberbox "$agi" $player.baseAgi>> </td> </tr> <tr> <td style="text-align:left"> DEX: </td> <td style="text-align:left color:black"> <<numberbox "$dex" $player.baseDex>> </td> </tr> <tr> <td style="text-align:left"> CON: </td> <td style="text-align:left"> <<numberbox "$con" $player.baseCon>> </td> </tr> <tr> <td style="text-align:left"> WILL: </td> <td style="text-align:left"> <<numberbox "$wil" $player.baseWill>> </td> </tr> <tr> <td style="text-align:left"> INT: </td> <td style="text-align:left"> <<numberbox "$int" $player.baseInt>> </td> </tr> </table>
<<include [[Testing: Create New Player]]>> <<include [[Test Player: Player Modifier]]>>
<div class="text-display"> <div class="body-text"> Testing: Modifying stats.<br> <br> //Physical Stats//<br> <<include [[Choose Phys Stats Table]]>><br> <br> //Dispositions//<br> <<include [[Choose Disp Stats Table]]>><br> <br> </div> <div class="options-text"> [[Done.->Test Player: Apply Stat Modifiers]] </div> </div>
<<include [[Fix Bad Phys Stats]]>> <<include [[Assign Phys Stats]]>> <<include [[Assign Disp Stats]]>>
/* Clean-up for stats going out of bounds */ <<if $str gt 5>> <<set $str to 5>> <</if>> <<if $str lt 1>> <<set $str to 1>> <</if>> <<if $agi gt 5>> <<set $agi to 5>> <</if>> <<if $agi lt 1>> <<set $agi to 1>> <</if>> <<if $dex gt 5>> <<set $dex to 5>> <</if>> <<if $dex lt 1>> <<set $dex to 1>> <</if>> <<if $int gt 5>> <<set $int to 5>> <</if>> <<if $int lt 1>> <<set $int to 1>> <</if>> <<if $con gt 5>> <<set $con to 5>> <</if>> <<if $con lt 1>> <<set $con to 1>> <</if>> <<if $wil gt 5>> <<set $wil to 5>> <</if>> <<if $wil lt 1>> <<set $wil to 1>> <</if>>
<div class="text-display"> <div class="body-text"> <<include [[Print Full Phys Stats]]>><br> <br> <<include [[Print Full Disp Stats]]>><br> <br> </div> <div class="options-text"> [[Go Again.->Test Player: Modifying]] </div> </div>
<<set $ailmentsToAdd to []>> <<for _ailment to 0; _ailment lt $allAilments.length; _ailment++>> <<include [[Check if Player Has Given Ailment]]>> <<set $ailmentsToAdd[_ailment] to _hasAilment>> <</for>> <table> <<for _i to 0; _i lt $allAilments.length; _i++>> <tr> <<capture _i>> <label><<checkbox "$ailmentsToAdd[_i]" false true autocheck>><span> ''$allAilments[_i].name''</span></label> <</capture>> </tr> <</for>> </table>
<div class="text-display"> <div class="body-text"> Testing: Add Ailments<br> <br> <<include [[Modify Player: Ailments Table]]>><br> <br> </div> <div class="options-text"> [[Done.->Test Player: Apply Ailments]] </div> </div>
<div class="text-display"> <div class="body-text"> <<for _i to 0; _i lt $allAilments.length; _i++>> $allAilments[_i].name: $ailmentsToAdd[_i]<br> <</for>> <br> <<include [[Modify Player: Apply Ailments]]>> <<include [[Player: Print Ailments]]>> <br> </div> <div class="options-text"> [[Go Again.->Test Player: Modifying]] </div> </div>
<<for _a to 0; _a lt $ailmentsToAdd.length; _a++>> <<if $ailmentsToAdd[_a] eq true>> <<set _ailment to _a>> <<include [[Add Player Hidden Ailment]]>> <<include [[Add Player Known Ailment]]>> <</if>> <</for>>
<<set $charmsToAdd to []>> <table> <<for _i to 0; _i lt $allCharms.length; _i++>> <tr> <<capture _i>> <<set $charmsToAdd[_i] to $player.charms.includes(_i)>> <label><<checkbox "$charmsToAdd[_i]" false true autocheck>><span> //$allCharms[_i].explanation//</span></label> <</capture>> </tr> <</for>> </table>
<<for _charmId to 0; _charmId lt $charmsToAdd.length; _charmId++>> <<if $charmsToAdd[_charmId] eq true>> <<set $player.charms.push(_charmId)>> <<include [[Apply Charm Effect]]>> <</if>> <</for>> <<unset $charmsToAdd>>
<div class="text-display"> <div class="body-text"> Testing: Add Charms<br> <br> <<include [[Modify Player: Charms Table]]>><br> <br> </div> <div class="options-text"> [[Done.->Test Player: Apply Charms]] </div> </div>
<div class="text-display"> <div class="body-text"> <<include [[Modify Player: Apply Charms]]>> <<include [[Player: Print Charms]]>> <br> </div> <div class="options-text"> [[Go Again.->Test Player: Modifying]] </div> </div>
PLAYER HAS $player.charms.length CHARMS<br> <<for _c to 0; _c lt $player.charms.length; _c++>> <<set _charmId to $player.charms[_c]>> $allCharms[_charmId].name<br> <</for>>
<table> <tr> <td> Current Round: </td> <td><<numberbox "$round" $player.currentRound>></td> </tr> <tr> <td> Semen Count: </td> <td><<numberbox "$semenCount" $player.semenCount>></td> </tr> <tr> <td> Money: </td> <td><<numberbox "$money" $player.money>></td> </tr> <tr> <td> Mulligan Tokens: </td> <td><<numberbox "$mtokens" $player.mulliganTokens>></td> </tr> </table> <br>
/* Setting other stats for use by harlot tester */ <<if $round lt 1>><<set $round to 1>><</if>> <<if $round gt 13>><<set $round to 13>><</if>> <<set $player.currentRound to $round>> <<unset $round>> <<if $semenCount lt 0>><<set $semenCount to 0>><</if>> <<if $semenCount gt $player.maxSemenCount>><<set $semenCount to $player.maxSemenCount>><</if>> <<set $player.semenCount to $semenCount>> <<unset $semenCount>> <<if $money lt 0>><<set $money to 0>><</if>> <<set $player.money to $money>> <<unset $money>> <<if $mtokens lt 0>><<set $mtokens to 0>><</if>> <<set $player.mulliganTokens to $mtokens>> <<unset $mtokens>>
<div class="text-display"> <div class="body-text"> <<include [[Modify Player: Semen and Money Table]]>> </div> <div class="options-text"> [[Done.->Test Player: Other Stats]] </div> </div>
<div class="text-display"> <div class="body-text"> <<include [[Modify Player: Apply Semen and Money]]>> Current Round: $player.currentRound<br> <br> Semen Count: $player.semenCount<br> Money: $player.money<br> Mulligan Tokens: $player.mulliganTokens<br> <br> isAwareOfFairyTrick: $player.isAwareOfFairyTrick<br> hasSeenLamia: $player.hasSeenLamia<br> hasSeenArachne: $player.hasSeenArachne<br> hasSeenGenericUnusual: $player.hasSeenGenericUnusual<br> <br> </div> <div class="options-text"> [[Go Again.->Test Player: Modifying]] </div> </div>
STR: <<print $player.currStr>><br> AGI: <<print $player.currAgi>><br> DEX: <<print $player.currDex>><br> CON: <<print $player.currCon>><br> WILL: <<print $player.currWill>><br> INT: <<print $player.currInt>><br>
<<if $player.currIsSubmissive>>Submissive<<else>>Dominant<</if>><br> <<if $player.currIsSlutty>>Slutty<<else>>Romantic<</if>><br> <<if $player.currIsSerious>>Serious<<else>>Humorous<</if>><br> <<if $player.currIsCautious>>Cautious<<else>>Impulsive<</if>><br> <<if $player.currIsBlunt>>Blunt<<else>>Tactful<</if>><br> <<if $player.currIsGloomy>>Gloomy<<else>>Cheerful<</if>><br>
''PLAYER''<br> Semen count: $player.semenCount<br> Money: $player.money<br> MTokens: $player.mulliganTokens<br> <br> <<include [[Print Curr Phys Stats]]>> <<include [[Print Curr Disp Stats]]>> <br> <<include [[Player: Print Known Ailments]]>> <br> <<include [[Player: Print Charms]]>>
/* Used by Harlot Tester */ <div class="text-display"> <div class="body-text"> //OTHER STATS// <<include [[Modify Player: Semen and Money Table]]>> <br> //Physical Stats// <<include [[Choose Phys Stats Table]]>> <br> //Dispositions// <<include [[Choose Disp Stats Table]]>> <br> /* Include alt vars if relevant */ </div> <div class="options-text"> [[Done.->Modify Test Player: After Stats]] </div> </div>
<<include [[Modify Player: Apply Semen and Money]]>> <<include [[Modify Player: Apply Stat Modifiers]]>> <<include $afterModifyPlayerStatsLink>>
/* Modifying alternative variables for testing */ //HOUSE SIGHTS// <table> <tr> <label><<checkbox "$isAwareOfFairyTrick" false true>><span> isAwareOfFairyTrick</span></label> </tr> <tr> <label><<checkbox "$hasSeenLamia" false true>><span> hasSeenLamia</span></label> </tr> <tr> <label><<checkbox "$hasSeenArachne" false true>><span> hasSeenArachne</span></label> </tr> <tr> <label><<checkbox "$hasSeenGenericUnusual" false true>><span> hasSeenGenericUnusual</span></label> </tr> </table>
<<set $player.isAwareOfFairyTrick to $isAwareOfFairyTrick>> <<unset $isAwareOfFairyTrick>> <<set $player.hasSeenLamia to $hasSeenLamia>> <<unset $hasSeenLamia>> <<set $player.hasSeenArachne to $hasSeenArachne>> <<unset $hasSeenArachne>> <<set $player.hasSeenGenericUnusual to $hasSeenGenericUnusual>> <<unset $hasSeenGenericUnusual>>
<div class="text-display"> <div class="body-text"> MODIFY PLAYER AILMENTS<br> <<include [[Modify Player: Ailments Table]]>> <br> </div> <div class="options-text"> [[Done.->Modify Test Player: After Ailments]] </div> </div>
<div class="text-display"> <div class="body-text"> MODIFY PLAYER CHARMS<br> <<include [[Modify Player: Charms Table]]>> <br> </div> <div class="options-text"> [[Done.->Modify Test Player: After Charms]] </div> </div>
<<include [[Modify Player: Apply Ailments]]>> /* use goto to skip test messages on adding ailments */ <<goto $afterModifyPlayerAilmentsLink>>
<<include [[Modify Player: Apply Charms]]>> /* use goto to skip test messages on adding charms */ <<goto $afterModifyPlayerCharmsLink>>
<div class="text-display"> <div class="body-text"> //Modify player attributes.//<br> <br> <<include [[Print Player]]>> <br> </div> <div class="options-text"> <<set $afterModifyPlayerStatsLink to "Test Player: Player Modifier">> <<set $afterModifyPlayerAilmentsLink to "Test Player: Player Modifier">> <<set $afterModifyPlayerCharmsLink to "Test Player: Player Modifier">> [[Modify Player Stats.->Modify Test Player: Stats]] [[Modify Player Ailments.->Modify Test Player: Ailments]] [[Modify Player Charms.->Modify Test Player: Charms]] <br> [[Reset.->Test Player: Modifying]] </div> </div>
<<set _rsi to $player.roomScores.length - 1>> <<set _scoreObj to $player.roomScores[_rsi]>> //Player Room Score://<br> <<include [[Print Room Score]]>>
''<<print "Number of harlots = " + $allHarlots.length>>'' <br> <<for _i to 0; _i lt $allHarlots.length; _i++>> _i. $allHarlots[_i].name<br> <</for>>
''TESTING HARLOTS''<br> <br> [[Print all harlot names.->Test Harlots: Print Harlots]]<br> [[Print all harlot gifts.->Test Harlots: Print Harlot Gifts]]<br> [[Print harlots by faction.->Test Harlots: Print Harlots by Faction]]
''<<print "Number of harlots = " + $allHarlots.length>>'' <br> <<for _i to 0; _i lt $allHarlots.length; _i++>> <<print $allHarlots[_i].name + "'s">> gifts: <<set _gis to $allHarlots[_i].gifts>> <<for _g to 0; _g lt _gis.length; _g++>> <<set _gi to _gis[_g]>> <<print $allGifts[_gi].name + ", ">> <</for>> <br> <</for>>
/* Generic code to include at end of harlot scenario (assuming player survives) */ <<if $allHarlots[$hi].faction neq 0 and $isFactionIncrease eq true>> <<if $allHarlots[$hi].isFiller>> /* Do nothing */ <<else>> <<set $player.factionAffinities[$allHarlots[$hi].faction] += 1>> <</if>> <</if>> /* Have to change it within allHarlots as otherwise we're just modifying a clone of the harlot object and the change won't be saved. */ <<set $allHarlots[$hi].hasBeenVisited to true>> [[You leave the room.->$afterLeaveHarlotLink]]
-ROOM SCORE------------------------------<br> <<include [[Player: Print Room Score]]>> <br> Is Faction Affinity Increase: <<print $isFactionIncrease>><br> Harlot.HasBeenVisited: <<print $allHarlots[$hi].hasBeenVisited>><br> Harlot.IsRepeatable: <<print $allHarlots[$hi].isRepeatable>><br> <br> <<include [[Player: Print Faction Affinities]]>> ---------------------------------------<br>
/* Generic Harlot (the dummies) */ /* Set $hi and name externally */ /* prereqs: $hi, $mockHarlotName, $mockHarlotFaction, $mockHarlotGifts $mockPortraitSrc, $mockPinupSrc */ <<set $allHarlots[$hi] to { number: $hi, name: $mockHarlotName, shortDescription: "", portraitSrc: $mockPortraitSrc, pinupSrc: $mockPinupSrc, faction: $mockHarlotFaction, factionIncrease: [false], minRound: 1, maxRound: 12, isRepeatable: false, hasBeenVisited: false, gifts: $mockHarlotGifts, affection: 0, preIntroductionLink: "Mock Harlot: Pre-Introduction", introductionLink: "Mock Harlot: Introduction", ifNotChosenLink: "Default Harlot: If Not Chosen", ifMulligannedLink: "Default Harlot: If Mulliganned", socialisingLink: "Mock Harlot: Socialising", npcGossipLink: "Mock Harlot: NPC Gossip", gossipGossip: [], popNpcGossipLink: "Mock Harlot: Populate Gossip Gossip", harlotGossip: [], popHarlotGossipLink: "Default Harlot: Populate Harlot Gossip", scenarioLink: "Mock Harlot: Scenario", sellExpLink: "Default Harlot: Sell Exp", sellExpIntroLink: "Mock Harlot: Sell Exp Intro", sellExpBodyLink: "Mock Harlot: Sell Exp Body", sellExpFeedbackLink: "Mock Harlot: Sell Exp Feedback" }>> <<include [[$allHarlots[$hi].popNpcGossipLink]]>> <<include [[$allHarlots[$hi].popHarlotGossipLink]]>>
/* Print out all values for a harlot. (A test to make sure I haven't buggered up the init passage) */ ''Harlot:'' $allHarlots[$hi].number<br> ''Name:'' $allHarlots[$hi].name<br> ''Short Description:'' $allHarlots[$hi].shortDescription<br> <br> ''Faction:'' $allHarlots[$hi].faction<br> ''Min Round:'' $allHarlots[$hi].minRound<br> ''Max Round:'' $allHarlots[$hi].maxRound<br> <br> ''Is Repeatable:'' $allHarlots[$hi].isRepeatable<br> ''Has Been Visited:'' $allHarlots[$hi].hasBeenVisited<br> <br> ''Gifts:'' <<for _g to 0; _g lt $allHarlots[$hi].gifts.length; _g++>> <<set _gi to $allHarlots[$hi].gifts[_g]>> <<print " " + $allGifts[_gi].name>>, <</for>><br> <br> ''Affection:'' $allHarlots[$hi].affection<br> <br>
/* TODO - old is deprecated */ /* Test to see all harlot properties have initialised correctly */ <div class="text-display"> <div class="body-text"> <<include [[Harlot: Print]]>> <br> </div> <div class="options-text"> Checking Links...<br> [[Introduction->$allHarlots[$hi].introductionLink]] [[If Not Chosen->$allHarlots[$hi].ifNotChosenLink]] [[If Mulliganned->$allHarlots[$hi].ifMulligannedLink]] [[Socialising->$allHarlots[$hi].socialisingLink]] [[NPC Gossip->$allHarlots[$hi].npcGossipLink]] [[Scenario->$allHarlots[$hi].scenarioLink]] [[Sell Experiences->$allHarlots[$hi].sellExpLink]] <br> [[More Testing->Harlot Tester]] </div> </div>
/* Each harlot may have some random gossip about other harlots. This is a short passage to inject that gossip in at random (each harlot might have multiple hints - but only a random one is displayed) */ <<if $allHarlots[$hi].harlotGossip.length gt 0>> <<set _index to random(0, $allHarlots[$hi].harlotGossip.length - 1)>> <<print $allHarlots[$hi].harlotGossip[_index]>> <</if>>
/* Handle harlot affection changes in one place in case we need to make changes (eg items that modify the change or triggers off changes) prereq: $affectionChange, _affectionChangeReason */ <<set _txtStr to "Affection Change: " + _affectionChangeReason>> <<if $player.charms.includes(17) and $affectionChange lt 0>> <<if $isTesting>> ''_txtStr (Cancelled - $allCharms[17].name)''<br> <br> <</if>> <<else>> <<set $allHarlots[$hi].affection += $affectionChange>> <<if $affectionChange gt 0>> <<set _valStr to "+" + $affectionChange>> <<else>> <<set _valStr to "" + $affectionChange>> <</if>> <<if $isTesting eq true>> ''_txtStr (_valStr)''<br> <br> <</if>> <</if>>
<br> <br> $allHarlots[$hi].name shouts angrily at you for wasting her time. She storms back to the presentation area.<br> <br> <<include [[No Money While Socialising Affection Change]]>>
<div class="text-display"> <div class="body-text"> The waitress returns with a $socialisingDrinks[$sdi].name for you and a glass of 'milk' for <<print $allHarlots[$hi].name + ".">> You talk for a while.<br> <br> <<set $allHarlots[$hi].hasSocialised to true>> </div> <div class="options-text"> [["You return to " + $npcMadam.name + "."->$returnFromSocialisingLink]] </div> </div>
/* default behaviour if harlot not picked */ <<set $affectionChange to -1>> <<set _affectionChangeReason to $allHarlots[$hi].name + " Not Picked">> <<include [[Harlot Affection Change]]>>
/* default behaviour if harlot not picked */ <<set $affectionChange to -1>> <<set _affectionChangeReason to $allHarlots[$hi].name + " Mulliganed">> <<include [[Harlot Affection Change]]>>
<<set $player.location to 9>> <<include [[Set Background Image]]>> <<set $npcsForArt to [$hi + 100]>> /* Main Harlot Tester. Prereqs: $player created, $hi (harlot number) set and all scenario-specific variables. */ <div class="text-display"> <div class="body-text"> ''Testing <<print $allHarlots[$hi].name + "...">>''<br> <br> Current Round: $player.currentRound<br> <br> <<include [[Test Harlot: Populate Room Scores]]>> Gift: $allGifts[$cgi].name<br> <br> </div> <div class="options-text"> /* [[TEST INIT->Test Harlot: Init]] */ [[TEST INTRO->Test Harlot: Introduction]] [[TEST SOCIALISING->Test Harlot: Socialising]] [[TEST GOSSIP GOSSIP->Test Harlot: Gossip Gossip]] [[TEST HARLOT SCENARIO->Test Harlot: Scenario]] <br> [[RESET PARAMS->Test Harlot: Init Params]] </div> </div>
/* We run this through Socialising path */ <<set $returnFromSocialisingLink to "Harlot Tester">> <<include [[Socialising Container]]>>
<<set $isPostRoom to false>> <<if $allHarlots[$hi].gossipGossip.length eq 0>> <<include [[$allHarlots[$hi].popNpcGossipLink]]>> <</if>> <<set $afterGossipHarlotLinks to "Test Harlot: After Gossip Harlot Links">> <<include [[Gossip on Harlot Container]]>>
<<set $gameOverLink to "Test Harlot: Game Over">> <<set $afterLeaveHarlotLink to "Test Harlot: Scenario End">> <<include [[Harlot: Scenario Container]]>>
<<set $player.location to 9>> <<include [[Set Background Image]]>> <<set $npcsForArt to [0, $hi + 100]>> <div class="text-display"> <div class="body-text"> /* Testing Pre-Intro */ ''SHORT DESCRIPTION:''<br> <<if def $allHarlots[$hi].preIntroductionLink>> <<set _hi to $hi>> <<include [[$allHarlots[$hi].preIntroductionLink]]>> <</if>> $allHarlots[$hi].shortDescription <br> <br> /* Testing Intro */ <<include [[$allHarlots[$hi].introductionLink]]>> <br> </div> <div class="options-text"> [[Other Testing.->Harlot Tester]] </div> </div>
/* Testing Scoring */ /* include this to make sure .isMultipleVisits gets set correctly. */ <<include [[NPC Money: Get Unscored Room Scores]]>> <<set $rsi to $player.currentRound - 1>> <<set $returnToMoneyHubLink to "Test Harlot: Next Round">> <<include [[NPC Money: Sell Experiences Container]]>>
''THIS IS PLACEHOLDER TEXT.''<br> <br> /* Madam intro */ "This is <<print $allHarlots[$hi].name + ",\"">> $npcMadam.name says. <br> <br> /* Long description */ $allHarlots[$hi].name is $allHarlots[$hi].shortDescription <br> <br> /* Harlot intro */ $allHarlots[$hi].name smiles at you. "Hello," she says. <br>
/* Dummy Harlot */ <<set $player.roomScores[$player.currentRound - 1] to { round: $player.currentRound, harlotNumber: $hi, scoreArray: [ [1,false,false] /* Only a single point for dummies */ ] }>> <<include [[Mock Harlot: Enter Room]]>>
''THIS IS PLACEHOLDER TEXT.''<br> <br> "I can't tell you anything interesting about $allHarlots[$hi].name, $npcGossip.name says. "They're just a dummy. They might not even be in the final game. Oh well, if we're testing."<br> <br> She puffs out a cloud of smoke.
''THIS IS PLACEHOLDER TEXT.''<br> <br> You take $allHarlots[$hi].name out into the bar area and find a table. <<set $socNoMoneyLink to "Mock Harlot: Socialising: No Money">> <<set $socDrinkLink to "Mock Harlot: Socialising: Drinking">>
<<set $allHarlots[$hi].gossipGossip[0] to { isLie: false, text: "\"Some of these dummy harlots might get a real scenario in the finished game.\""}>> <<set $allHarlots[$hi].gossipGossip[1] to { isLie: false, text: "\"Even though they're dummies, they still take semen. Don't die to a dummy, that would be pathetic.\""}>> <<set $allHarlots[$hi].gossipGossip[2] to { isLie: false, text: "\"Why pick an inflatable sex doll dummy when you can have a real, hot-blooded succubus?\""}>>
<<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $player.semenCount to 10>> <<set $player.money to 3>> <<set $player.charms.push(14)>> /* <<set $player.currStr to x>> */ /* <<set $player.currDex to x>> */ /* <<set $player.currAgi to x>> */ /* <<set $player.currConst to x>> */ /* <<set $player.currWill to x>> */ /* <<set $player.currInt to x>> */ /* <<set $player.currIsSubmissive to false>> */ /* <<set $player.currIsSlutty to false>> */ /* <<set $player.currIsSerious to false>> */ /* <<set $player.currIsCautious to false>> */ /* <<set $player.currIsBlunt to false>> */ /* <<set $player.currIsGloomy to false>> */ /* <<set _ailment to X>> */ /* <<include [[Add Player Hidden Ailment]]>> */ <<set $hi to 0>> /* <<set $allHarlots[$hi].<property> to <value>>> */ /* <<set $cgi to $allHarlots[$hi].gifts[0]>> */ <<set $cgi to 1>> <<include [[Harlot Tester: Intro]]>>
/* Default for harlots that have no gossip - they populate the array with nothing */
/* For harlots that don't have any additional gossip with NPC_Gossip */ /* We need to place a filler to avoid NPC_Gossip jumping straight to she has no more gossip */ <<set $allHarlots[$hi].gossipGossip[0] to { isLie: false, text: "" }>>
/* moved code to here and encapsulated to make test code easier to track */ <<set $player.location to 13>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<set $harlotForArt to 0>> <div class="text-display"> <div class="body-text"> Left room: Testing scenario over.<br> <br> <<set _scoreObj to $player.roomScores[$player.currentRound - 1]>> <<include [[Room Score: Print]]>><br> <br> <<include [[Player: Print Hidden Ailments]]>><br> <br> </div> <div class="options-text"> [[Test Scoring->Test Harlot: Scoring]] [[Next Round->Test Harlot: Next Round]] </div> </div>
<<set $player.location to 8>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<set $harlotForArt to 0>> <div class="text-display"> <div class="body-text"> <<set $player.currentRound += 1>> You return to the bar.<br> <br> </div> <div class="options-text"> <<if $allHarlots[$hi].isRepeatable>> [[Test repeat visit with same harlot.->Test Harlot: Modify Params]] <</if>> [[Visit another harlot.->Test Harlot: Visit Another Harlot]] //Retains data from previous harlot visits.//<br> <br> [[Reset and test same harlot.->Test Harlot: Init Params]] [[Reset and test another harlot.->Test Harlot]] </div> </div>
/* Standard faction increase check Relevant for repeat visit harlots Makes sure faction increase only happens once */ /* Check which index we're updating */ <<set _vi to $visitNumberForFactionIncrease>> <<if $allHarlots[$hi].factionIncrease[_vi] eq false>> <<set $isFactionIncrease to true>> <<set $allHarlots[$hi].factionIncrease[_vi] to true>> <</if>> /* Reset to 0 afterwards as this is the default value for harlots with no repeat visits */ <<set $visitNumberForFactionIncrease to 0>>
/* pre-req _round */ <<set $player.roomScores[_round] to { round: _round, harlotNumber: 0, scoreArray: [ [1,true,true] /* dummy */ ] }>>
/* populate previous round room scores with dummy data to stop tests crashing every time $player.currentRound > 1 */ <<set _max to $player.currentRound - 1>> <<for _round to 0; _round lt _max; _round++>> <<set _roundTxt to _round + 1>> <<if not $player.roomScores[_round]>> <<include [[Test Harlot: Set Dummy Room Score]]>> //Adding dummy room score data for Round _roundTxt//<br> <<else>> //Existing room score data found for Round _roundTxt//<br> <</if>> <</for>> <<if _max gt 0>><br><</if>>
<<set $affectionChange to -1>> <<set _affectionChangeReason to "No Money While Socialising">> <<include [[Harlot Affection Change]]>>
/* Schedule the harlot to show up in a future round pre-req: $targetRound, $hi */ /* skip special rounds */ <<if $nonOverridableRounds.includes($targetRound)>> <<set $targetRound++>> <</if>> <<set $overrideHarlotPicks.push([$targetRound, $hi])>> <<if $isTesting>> ''Future Harlot Override Table:''<br> <<include [[Test Selection Algorithm: Print Harlot Overrides]]>> <br> <</if>>
<<for _f to 0; _f lt 6; _f++>> <<print "FACTION: " + _f>><br> <<set _regHarlots to []>> <<set _fillerHarlots to []>> <<for _h to 0; _h lt $allHarlots.length; _h++>> <<if $allHarlots[_h].faction eq _f>> <<if $allHarlots[_h].isFiller>> <<set _fillerHarlots.push(_h)>> <<else>> <<set _regHarlots.push(_h)>> <</if>> <</if>> <</for>> <<print "REGULAR">><br> <<for _i to 0; _i lt _regHarlots.length; _i++>> <<set _h to _regHarlots[_i]>> <<print $allHarlots[_h].name>><br> <</for>> <<print "FILLER">><br> <<for _i to 0; _i lt _fillerHarlots.length; _i++>> <<set _h to _fillerHarlots[_i]>> <<print $allHarlots[_h].name>><br> <</for>> <br> <</for>>
<<set $allHarlots[_hi].shortDescription to "a mock succubus.">>
<<set $isFactionIncrease to false>> <<if $allHarlots[$hi].hasBeenVisited eq false>> <<include [[Mock Harlot: First-Time Scenario]]>> <<else>> <<include [[Mock Harlot: Repeat Scenario]]>> <</if>>
<<include [[Mock Harlot: First-Time Scenario]]>>
<div class="text-display"> <div class="body-text"> ''THIS IS PLACEHOLDER TEXT.''<br> <br> You meet $allHarlots[$hi].name in her room. She takes you to the bed and gives you a good hard fucking.<br> <br> <<set $semenChange to -1>> <<set $isOutOfSemen to false>> <<include [[Checked Semen Change]]>> <<if $isOutOfSemen>> <<set $isGameOver to true>> You want to come, but it's been a long night in the House and you're completely spent. <<print $allHarlots[$hi].name + "'s">> vagina grips you tighter and sucks out your soul instead.<br> <br> You've been killed... by a dummy...<br> <br> ''BAD END'' <<else>> You boil up and fill her with a satisfying ejaculation. Afterwards you lay on the bed for a while to get your breath back. Then you get up, put your clothes back on and head to the exit.<br> <br> <<set $isFactionIncrease to true>> <<set $player.roomScores[$player.currentRound - 1].scoreArray[0][1] to true>> <</if>><br> <br> </div> <div class="options-text"> <<if $isOutOfSemen>> [[Game Over.->$gameOverLink]] <<else>> <<include[[Harlot: Scenario End]]>> <</if>> </div> </div>
"Go on," he says. "Tell me of your experiences with <<print $allHarlots[$hi].name + ".\"">> <br> <br>
<br> <br> "Hmm..." $npcMoney.name says.<br> <br>
"Thank you for the information on $allHarlots[$hi].name," $npcMoney.name says.
<<include [[Print All Harlot Names]]>> <br> [[More Testing.->Test Harlots]]
<<include [[Print All Harlot Gifts]]>> <br> [[More Testing.->Test Harlots]]
<<include [[Print Harlots by Faction]]>> <br> [[More Testing.->Test Harlots]]
<<set $allHarlotNames to [ "Sorpresa Ombra", "Suffocatrix Mamilla", "Suffocatrix Assphyxia", "Pori, the Love Sponge", "Va-kyuuma", "Couchelaxia", "Sapoonismenee Nerei", "Khanara Anandanum", "Queen Colubridis", "Alsharajea Hira", "Vête Piège", "Panta Prota", "Atómica", "Kiki Sumoppai", "Huntress Levka" ]>> <<set $allHarlotGifts to [ [7], [1,28], [28,1], [11,22], [17,18], [], [12,4], [4,12], [7,8], [19], [], [15], [], [30,22], [31,2] ]>> <<set $allHarlotFactions to [ 1,1,1, 2,2,2, 3,3,3, 4,4,4, 5,5,5 ]>> <<set $allPortraitSrcs to [ "P_SorpresaOmbra", "P_Placeholder3", "P_Placeholder3", "P_Pori", "P_Placeholder5", "P_Placeholder5", "P_Sapoonis", "P_KhanaraAnandanum", "P_QueenColubridis", "P_AlsharajeaHira", "P_VetePiege", "P_Placeholder4", "P_Placeholder2", "P_Placeholder1", "P_Placeholder2" ]>> <<set $allPinupSrcs to [ "HA_SorpresaOmbra", "HA_Placeholder3", "HA_Placeholder3", "HA_Pori", "HA_Placeholder5", "HA_Placeholder5", "HA_Sapoonis", "HA_KhanaraAnandanum", "HA_QueenColubridis", "HA_AlsharajeaHira", "HA_VetePiege", "HA_Placeholder4", "HA_Placeholder2", "HA_Placeholder1", "HA_Placeholder2" ]>>
<<include [[Init Mock Harlot Data]]>> <<set $harlotCount to 15>> <<set $allHarlots = []>> <<for _hi to 0; _hi lt $harlotCount; _hi++>> <<set $hi to _hi>> <<set $mockHarlotName to $allHarlotNames[_hi]>> <<set $mockHarlotGifts to $allHarlotGifts[_hi]>> <<set $mockHarlotFaction to $allHarlotFactions[_hi]>> <<set $mockPortraitSrc to $allPortraitSrcs[_hi]>> <<set $mockPinupSrc to $allPinupSrcs[_hi]>> <<include [[Mock Harlot: Init Template]]>> <</for>> <<set $hcCount to 3>> <<set $hci = []>> <<set $currentHarlotIndex to 0>> <<set $hapi = []>> <<set $madamOverrideHarlotPick to -1>> <<set $overrideHarlotPicks = []>> <<set $nonOverridableRounds = [5,9,13]>> /* Init this as 0 for all harlots */ <<set $visitNumberForFactionIncrease to 0>>
<<set $player.location to 9>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <div class="text-display"> <div class="body-text"> Select Harlot to test:<br> <br> </div> <div class="options-text"> <<set $afterHarlotSelectionLink to "Test Harlot: Init Params">> <<include [[Select From All Harlots]]>> </div> </div>
/* preserve selected $hi over reset */ <<set $selectedHi to $hi>> /* reset House */ <<include [[AllInit]]>> /* get selected $hi back */ <<set $hi to $selectedHi>> <<unset $selectedHi>> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $player.money to 3>> <<set $cgi to 1>> <<include [[Test Harlot: Modify Params]]>>
<<set $isTesting to true>> <<set $isHarlotTesting to true>> /* reset House */ <<include [[AllInit]]>> <<include [[Test Harlot: Select Harlot]]>>
/* Select a harlot from list of all harlots $afterHarlotSelectionLink: where to go after selecting harlot. */ <<for _hi to 0; _hi lt $allHarlots.length; _hi++>> <<capture _hi>> <<set _name to $allHarlots[_hi].name>> [[_name->$afterHarlotSelectionLink][$hi to _hi]] <</capture>> <</for>>
<<set $player.location to 9>> <<include [[Set Background Image]]>> <<set $npcsForArt to [$hi + 100]>> <div class="text-display"> <div class="body-text"> ''Testing: $allHarlots[$hi].name''<br> /* list harlot-specific variables here */ Current Round: $player.currentRound<br> <br> <<include [[Print Player]]>> <br> /* list other player stats if relevant for this harlot */ Gift: $allGifts[$cgi].name<br> <br> </div> <div class="options-text"> <<set $afterModifyPlayerStatsLink to "Test Harlot: Modify Params">> <<set $afterModifyPlayerAilmentsLink to "Test Harlot: Modify Params">> <<set $afterModifyPlayerCharmsLink to "Test Harlot: Modify Params">> <<set $afterGiftSelectionLink to "Test Harlot: Modify Params">> [[Modify Player Stats.->Modify Test Player: Stats]] /* use modify harlots if needed for the harlot */ [[Modify Player Ailments->Modify Test Player: Ailments]] [[Modify Player Charms->Modify Test Player: Charms]] [[Change Gift->Test Harlot: Change Gift]] <br> [[Test Harlot.->Harlot Tester]] <br> [[Test another Harlot.->Test Harlot]] </div> </div>
<div class="text-display"> <div class="body-text"> Change Gift to:<br> <br> </div> <div class="options-text"> <<include [[Select From All Gifts]]>> </div> </div>
[[More Gossip->NPC Gossip: More Harlot Gossip]] [[Other Testing->Harlot Tester]]
<<set $player.location to 10>> <<include [[Set Background Image]]>> <<set $harlotForArt to $hi + 100>> <<include [[$allHarlots[$hi].scenarioLink]]>>
<<set $player.location to 15>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<set $harlotForArt to 0>> <div class="text-display"> <div class="body-text"> The House of Hellish Harlots has claimed another victim.<br> <br> </div> <div class="options-text"> [[Continue testing this harlot.->Test Harlot: Init Params]] [[Test another harlot.->Test Harlot]] </div> </div>
<<set $player.location to 9>> <<include [[Set Background Image]]>> <div class="text-display"> <div class="body-text"> Select Harlot to test this time:<br> <br> </div> <div class="options-text"> <<set $afterHarlotSelectionLink to "Test Harlot: Modify Params">> <<include [[Select From All Harlots]]>> </div> </div>
<<set $isNpcTesting to true>> <<set $isTesting to true>> <div class="text-display"> <div class="body-text"> <<include [[Testing: Create New Player]]>> <<set $player.money to 4>> <<set $player.currentRound to 2>> <<include [[NPC Barman: Init]]>> <<set $returnToHubLink to "Test NPC Barman: After Leaving">> <<set $isPostRoom to false>> <<set $npcBarman.isUnavailable to false>> <<include [[NPC Barman: Print]]>> </div> <div class="options-text"> [[Begin Tests...->NPC Barman: Intro 1]] </div> </div>
--NPC Barman--------------------------------------<br> ''name'' = <<print $npcBarman.name>><br> ''altName1'' = <<print $npcBarman.altName1>><br> ''altName2'' = <<print $npcBarman.altName2>><br> <br> ''isAvailable'' = <<print $npcBarman.isAvailable>><br> ''isUnavailable'' = <<print $npcBarman.isUnavailable>><br> ''hasBeenVisited'' = <<print $npcBarman.hasBeenVisited>><br> <br> ''hasToldNeedToBuyDrink'' = <<print $npcBarman.hasToldNeedToBuyDrink>><br> <br> ''RunAwayInfo'' = <<print $npcBarman.hasToldConsequencesOfRunningAway>><br> ''hasIntroducedGossip'' = <<print $npcGossip.hasBeenIntroduced>><br> ''hasIntroducedPotion'' = <<print $npcPotion.hasBeenIntroduced>><br> ''hasIntroducedCharm'' = <<print $npcCharm.hasBeenIntroduced>><br> ''hasIntroducedNurse'' = <<print $npcNurse.hasBeenIntroduced>><br> ''hasIntroducedBarman'' = <<print $npcBarman.hasIntroducedBarman>><br> <br> <<include [[NPC Barman: Check Has Info]]>> ''hasInfo'' = _hasInfo<br> ---------------------------------------------------<br>
<<set $player.location to 1>> <<include [[Set Background Image]]>> <<set $npcsForArt to [1]>> <<include [[Player: Pay NPC Action]]>> <div class="text-display"> <div class="body-text"> With his blond curls, blue eyes and strong jawline, $npcBarman.name is extremely good-looking. He also looks far sadder than anyone gifted with those movie-idol looks has a right to be. What you initially took to be derisive pity at the lesser men 'paying for it' now reveals itself to be flickers of genuine concern.<br> <br> "You seem different to the others," he says.<br> <br> In what way, you query.<br> <br> "You don't look like you're here of your own volition," he says.<br> <br> You tell him how you ended up here. He nods sympathetically.<br> <br> "That would explain it," he says. "It means you might have a chance."<br> <br> //Chance?//<br> <br> "Most of the others are here of their own choice. They're blinded by their excitement at the pleasures available to them. I can't get through to them to warn them what this place really is."<br> <br> Which is?<br> <br> "A trap."<br> <br> </div> <div class="options-text"> [[Continue.->NPC Barman: Intro 2]] </div> </div>
<div class="text-display"> <div class="body-text"> For all the melodrama of his comment, you've seen enough weirdness in the House already to think him worth hearing out.<br> <br> He points to one of the waitresses taking orders at a nearby table. Just like the others, she's stunningly attractive. Her skimpy devil-girl uniform perfectly shows off her exquisite curves and lush flesh.<br> <br> "See those horns," $npcBarman.name says.<br> <br> As part of her costume, the waitress has a pair of little red devil horns sticking up out of her silky black hair.<br> <br> "They're real," $npcBarman.name says. "She's a succubus, a daemon from the Dominion of Lust. Nearly all the women in here are. They feed off sex, taking energy, sometimes even lives and souls. This house exists to lure prey."<br> <br> You think again of Temptacia and her too-perfect costume. You also remember Temptacia's perfect ass. The waitress is pretty damn hot as well. A little bit of energy for that doesn't seem that bad of a deal, especially if succubi are as good in the bed as the legends say.<br> <br> Life and soul, maybe not so much...<br> <br> So, if I go up to one of their rooms, I'm going to get eaten?<br> <br> "Not right away, unless you're unlucky," $npcBarman.name says. "You will even find it enjoyable. As sinful as they are, lust daemons are capable of inducing intense sensual pleasure in humans. You will enjoy your first visit, and the second, and the third... but eventually your luck will run out. You will run out of energy or run into a harlot that doesn't like you, or likes you too much. And then she will kill you and take your soul."<br> <br> </div> <div class="options-text"> [[How can I avoid this?->NPC Barman: Intro 3]] </div> </div>
<div class="text-display"> <div class="body-text"> "This house is an extrusion of the Dominion of Lust into your reality," $npcBarman.name continues. "God cannot enter here, so He cannot save you. The only person who can save your soul is you."<br> <br> <<if $player.currIsGloomy>>Not exactly reassuring.<<else>>God?<</if>><br><br> "One factor in your favour is that $npcMadam.name, uncommonly for her kind, has a twisted sense of fair play. She is very old and like all long-lived entities, suffers from boredom. She made this into a game for her amusement. And to her, the sport is only interesting if the prey has a chance to escape."<br> <br> <<if $player.currIsGloomy>>You feel like a fox in a hunt. Again, not reassuring.<<else>>So that means there's a chance.<</if>><br><br> "Her harlots have rules. They're not allowed to kill indiscriminately. They must let some patrons escape. How they determine this is up to the harlot, but they must be consistent. Some harlots value physical attributes. Some value personality. Others have to be appeased with the right gift."<br> <br> <<if $player.currIsGloomy>>Be the right thing or die. Very not reassuring.<<else>>That doesn't seem so bad. Figure out what she likes, then have supernaturally amazing sex //and// walk out afterwards.<</if>><br><br> "Unfortunately, not every harlot shares $npcMadam.name's desire for fair play. Daemons are daemons. You will not survive a visit to those particular harlots without additional protection."<br> <br> <<if $player.currIsGloomy>>It gets worse and worse.<<else>>Okay, that's not so good.<</if>><br><br> "Also, you must not run out of semen. This is $npcMadam.name's allowance for her 'girls'. If the man becomes so tired or depleted he cannot perform, if the harlot cannot bring him to ejaculation, then she is free to do with him as she wishes."<br> <br> <<if $player.currIsGloomy>>You've never had a problem performing before, but on hearing all this...<<else>>Don’t be shit in bed, okay. You're young... healthy. That shouldn't be a problem, right...<</if>><br><br> </div> <div class="options-text"> [[Continue.->NPC Barman: Intro 4]] </div> </div>
<div class="text-display"> <div class="body-text"> This is all so weird. A brothel, but all the whores are sex demons from hell that might take your life and soul. Really super-hot sex demons as well, you think, remembering Temptacia and the other harlots you've seen.<br> <br> This has to be a dream. Whether it's a wet dream or a nightmare is still to be determined.<br> <br> Feels too real to be a dream, you think, knocking on the top of the wooden bar. And if it's real, you should find out as much about the harlots and House as you can.<br> <br> //You can continue talking with $npcBarman.name. Bear in mind he might be called away at any moment to serve another patron. You can continue talking with him again afterwards, but it will cost another Action.//<br> <br> What will you ask $npcBarman.name?<br> <br> <<set $numberOfQuestions to random(2,5)>> <<if $isNpcTesting>> //Number of Questions left = $numberOfQuestions.//<br> <br> <</if>> </div> <div class="options-text"> <<include [[NPC Barman: Hub Options]]>> </div> </div>
<<include [[NPC Barman: Hub Options: Rnd 0]]>> <<if $player.currentRound gt 1>> <<include [[NPC Barman: Hub Options: Rnd 2]]>> <</if>> <<if $player.currentRound gt 4>> <<include [[NPC Barman: Hub Options: Rnd 5]]>> <</if>> <<include [[NPC Barman: Check Has Info]]>> <<if not _hasInfo>> //$npcBarman.name has no advice left to give you.//<br> <</if>> <<if $npcBarman.hasBeenVisited>> <br> [[End the conversation.->NPC Barman: Leave]] <</if>>
<<set $npcBarman.hasToldConsequencesOfRunningAway to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> What's to stop you from walking out of the front door right now and never coming back? Then you wouldn't have to worry about picking the right harlot and keeping her happy.<br> <br> But then you would miss out on having fun with Temptacia and girls like her, you think ruefully.<br> <br> $npcBarman.name shakes his head.<br> <br> "If you don't turn up to the presentation stage at the appointed time, $npcMadam.name will send her hounds after you. They are from the further reaches of the Dominion of Lust, where pleasure and pain intertwine. Your death at their hands will not be pleasant. Or quick."<br> <br> You figured it wouldn't be that easy.<br> <br> On the other hand, it does remove any guilt for joining a sexy harlot in her perfumed room. You had to do it or be chased down by an eldritch hound from hell overcomes a lot of reservations.<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<set $npcGossip.hasBeenIntroduced to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "Do I know anything about the individual harlots? No, I'm afraid I can't help you there."<br> <br> $npcBarman.name gives you an apologetic smile.<br> <br> "My kind and their kind don't exactly mix. Hmm, but I do know someone that does. Her."<br> <br> He points to an elegant woman at the other end of the bar. She is tall and slender. She has a long aristocratic face with high cheekbones. She wears a thick fur stole over a sheer, sky-blue dress. A mass of silver-grey curls spill out from beneath a chic, sky-blue hat. She wears an ostentatious string of pearls around her neck. She smokes a cigarette in a long cigarette holder and her face is wreathed in clouds of smoke. Despite her anachronistic appearance, her age appears indeterminate. She is certainly no less attractive for it.<br> <br> "She knows everything about everyone, or so she claims," $npcBarman.name says, although he doesn't give you her name.<br> <br> //You can now visit// ''$npcGossip.name''.<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<set $npcPotion.hasBeenIntroduced to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "Then she'll take your soul and you'll die," $npcBarman.name says, completely deadpan.<br> <br> Well, ain't that just cheery.<br> <br> "There is a daemon that can help. She's known as $npcPotion.name. She is prodigiously talented, although it's a blasphemous talent. Only the Lord should be able to create life. Unfortunately, or maybe fortunately, that talent is held back by a petty, avaricious nature. She sells potions to patrons. For a brief period of time they can turn you into someone else – different personality, stronger, smarter. They can make you into whatever you think the harlot will like."<br> <br> $npcBarman.name pulls a face.<br> <br> "Don't become reliant on them. $npcPotion.name has an avaricious nature and she's not helping you out of the goodness of her heart. As in the world outside, relying on the bottom of a bottle to solve problems only creates more."<br> <br> He points over to the far side of the room, where it extends around a corner.<br> <br> "She has a room over there. You'll normally find her sitting at a table outside it."<br> <br> //You can now visit// ''$npcPotion.name''.<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<set $npcCharm.hasBeenIntroduced to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "For additional protection you'll need to visit $npcCharm.name. Despite her appearance, she's an old witch and very experienced in the art of flesh runes. It's a heathen art, far inferior to the Lord's protection, but in here it's all you have."<br> <br> He points over to a narrow corridor leading away from the main lounge.<br> <br> "She normally sits at a table down that corridor. She'll look younger than you expect. Look for the girl laying cards out on a table."<br> <br> He turns back to you.<br> <br> "Her flesh runes have other effects than protection. You'll find them a great help towards your goal of escaping the house. Unfortunately, it will take some practise to determine their exact function. $npcCharm.name won't tell you and will instead only give cryptic hints as to their use. I think she does it out of petty rebellion at $npcMadam.name for forcing her to take this role."<br> <br> //You can now visit// ''$npcCharm.name''.<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<set $npcNurse.hasBeenIntroduced to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "The house has a nurse's office. If you were to ask $npcMadam.name, she'd tell you it's there to keep the house 'clean' and both her girls and patrons healthy. I think it's there to prolong the game. It's less fun for $npcMadam.name if her 'toys' run out of fluids and dry up and die after a couple of rounds with her succubi."<br> <br> He points across the lounge.<br> <br> "Her office is at the end of that corridor, on the left. The door is clearly marked. You can't miss it. She sells tonics that will restore your energy. She'll also diagnose and cure any ailments you'll pick up inside the house."<br> <br> He turns back to you.<br> <br> "The nurse used to be a cow girl lust daemon. Their breast milk has strong restorative properties. Then she disappeared. The new nurse is called $npcNurse.name. I don't know much about her."<br> <br> A troubled look passes across his face.<br> <br> "I think she's more than she claims to be."<br> <br> //You can now visit// ''$npcNurse.name''.<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<set $npcBarman.hasIntroducedBarman to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "The Lord sent me into this house of sin to try and rescue some of the poor souls snared by it."<br> <br> His glum expression implies he hasn't been very successful in that task.<br> <br> You look at his appearance and something clicks. You normally wouldn't even consider it, but in a house of other succubi and sex demons...<br> <br> You ask him if he's an angel.<br> <br> $npcBarman.name nods. "That's the word humanity uses for my kind. Unfortunately, I have no power in here. All I can do is offer advice to any that will listen."<br> <br> <<if not $npcGossip.hasGossipedAboutBarman>> <<set $npcBarman.name to $npcBarman.altName1>> <</if>> Does $npcMadam.name know this? Surely she wouldn't be happy with an angel trying to save souls in her house of sin.<br> <br> "She knows," $npcBarman.name says with a wry smile.<br> <br> You turn and look over at the presentation stage. $npcMadam.name sees you and $npcBarman.name and gives you a cheery wave. $npcBarman.name waves back.<br> <br> "She's always known. I think my presence in here amuses her. I used to think it was because she saw me as a worthy adversary, but I was deluding myself. She's made me into another game piece, same as the others."<br> <br> There is a weary resignation to him. You wonder just how long he's been in here.<br> <br> "Still, you have to keep faith," he says, suddenly brightening up. "You're different, I can sense it. You didn't come here of your own choice. You'll be the one to escape her silk-lined trap. I'm sure of it."<br> <br> Angels and demons. It seems scarcely believable. Maybe $npcBarman.name is just nuts. Or winding you up.<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<if $numberOfQuestions lt 1>> <<include [[NPC Barman: Time Up]]>> <<else>> <<include [[NPC Barman: Continue Conversation]]>> <</if>>
<<set $npcBarman.hasBeenVisited to true>> <<include [[NPC Barman: Clean-Up]]>> <<include $returnToHubLink>>
<<unset $numberOfQuestions>>
<div class="text-display"> <div class="body-text"> <<include [[NPC Barman: Print]]>> </div> <div class="options-text"> [[Continue...->NPC Barman: Visit]] </div> </div>
<div class="text-display"> <div class="body-text"> Before you can talk with $npcBarman.name further, he's drawn away by another patron.<br> <br> "I'm sorry," he says to you. "There's someone else waiting to be served. I'll speak to you later."<br> <br> He goes over to the other side of the bar.<br> <br> ''TESTING: $returnToHubLink''<br> <br> </div> <div class="options-text"> [[The conversation ends.->NPC Barman: Leave]] </div> </div>
<div class="text-display"> <div class="body-text"> <<if $isNpcTesting>> //Number of Questions left = $numberOfQuestions.//<br> <br> <</if>> //You're free to talk with $npcBarman.name until he is called away to serve another patron.//<br> <br> What else would you like to ask $npcBarman.name?<br> <br> </div> <div class="options-text"> <<include [[NPC Barman: Hub Options]]>> </div> </div>
<<set $player.location to 1>> <<include [[Set Background Image]]>> <<set $npcsForArt to [1]>> <<include [[Player: Pay NPC Action]]>> <div class="text-display"> <div class="body-text"> You raise your hand to get $npcBarman.name's attention. He comes over.<br> <br> "What can I get you?" he asks.<br> <br> </div> <div class="options-text"> <<if $player.money gt 0>> [[Buy a drink.->NPC Barman: Buy Drink]] <<if $npcBarman.hasToldNeedToBuyDrink>> [[Never mind.->NPC Barman: Leave]] <<else>> [[You just want to talk.->NPC Barman: Just Talk]] <</if>> <<else>> <<if $npcBarman.hasToldNeedToBuyDrink>> [["You don't have any " + $currencyName + "s."->NPC Barman: No Money To Talk]] [[Never mind.->NPC Barman: Leave]] <<else>> [[You just want to talk.->NPC Barman: Just Talk]] <</if>> <</if>> </div> </div>
<div class="text-display"> <div class="body-text"> <<set $player.money -= 1>> You give $npcBarman.name a $currencyName. He returns with your drink.<br> <br> "What advice can I give you?" he asks.<br> <br> //You're free to talk with $npcBarman.name until he is called away to serve another patron.//<br> <br> What will you ask him?<br> <br> <<set $numberOfQuestions to random(2,5)>> <<if $isNpcTesting>> //Number of Questions left = $numberOfQuestions.//<br> <br> <</if>> </div> <div class="options-text"> <<include [[NPC Barman: Hub Options]]>> </div> </div>
<div class="text-display"> <div class="body-text"> $npcBarman.name shrugs apologetically. His attention is drawn by another patron on the other side of the bar and he moves over to serve them.<br> <br> </div> <div class="options-text"> [[Continue.->NPC Barman: Leave]] </div> </div>
<<set $npcBarman.hasToldNeedToBuyDrink to true>> <div class="text-display"> <div class="body-text"> "You'll have to buy a drink first," he says.<br> <br> He glances nervously over to where $npcMadam.name is standing at her usual spot by the presentation stage.<br> <br> "Her rules."<br> <br> </div> <div class="options-text"> <<if $player.money gt 0>> [[Buy a drink.->NPC Barman: Buy Drink]] <<else>> [["You don't have any " + $currencyName + "s."->NPC Barman: No Money To Talk]] <</if>> [[Never mind.->NPC Barman: Leave]] </div> </div>
<<set _hasInfo to false>> <<include [[NPC Barman: Check Has Info: Rnd 0]]>> <<if $player.currentRound gt 1>> <<include [[NPC Barman: Check Has Info: Rnd 2]]>> <</if>> <<if $player.currentRound gt 4>> <<include [[NPC Barman: Check Has Info: Rnd 5]]>> <</if>>
<<include [[Player: Pay NPC Action]]>> <<include [[Player: Pay NPC Action]]>> $npcBarman.name gives you a cautionary introduction to the House and makes you aware of some people who might be able to help you in your quest to escape.<br> <br> <<set $npcGossip.hasBeenIntroduced to true>> //You can now visit// ''$npcGossip.name''.<br> <<set $npcPotion.hasBeenIntroduced to true>> //You can now visit// ''$npcPotion.name''.<br> <<set $npcCharm.hasBeenIntroduced to true>> //You can now visit// ''$npcCharm.name''.<br> <<set $npcNurse.hasBeenIntroduced to true>> //You can now visit// ''$npcNurse.name''.<br> <<set $npcBarman.hasIntroducedBarman to true>> <<set $npcBarman.name to $npcBarman.altName1>> <br> //This cost 2 Actions.//<br> <br> <<set $npcBarman.hasBeenVisited to true>> <<include [[NPC Barman: Clean-Up]]>>
<<if not $npcBarman.hasToldConsequencesOfRunningAway>> <<set _hasInfo to true>> <</if>> <<if not $npcBarman.hasIntroducedBarman>> <<set _hasInfo to true>> <</if>> <<if not $npcGossip.hasBeenIntroduced>> <<set _hasInfo to true>> <</if>> <<if not $npcPotion.hasBeenIntroduced>> <<set _hasInfo to true>> <</if>> <<if not $npcCharm.hasBeenIntroduced>> <<set _hasInfo to true>> <</if>> <<if not $npcNurse.hasBeenIntroduced>> <<set _hasInfo to true>> <</if>>
<<if not $npcBarman.hasToldConsequencesOfRunningAway>> [[What's to stop me running away?->NPC Barman: Introduce Run Away]] <</if>> <<if not $npcGossip.hasBeenIntroduced>> [[How do I find out a harlot's likes and dislikes?->NPC Barman: Introduce Gossip]] <</if>> <<if not $npcPotion.hasBeenIntroduced>> [[What if I'm the wrong type of person for a particular harlot?->NPC Barman: Introduce Potion]] <</if>> <<if not $npcCharm.hasBeenIntroduced>> [[Where do I find 'additional protection'?->NPC Barman: Introduce Charm]] <</if>> <<if not $npcNurse.hasBeenIntroduced>> [[Where can I find... ahem... performance enhancers in case I start to feel depleted?->NPC Barman: Introduce Nurse]] <</if>> <<if not $npcBarman.hasIntroducedBarman>> [["What is " + $npcBarman.name + " doing here?"->NPC Barman: Introduce Barman]] <</if>>
<<if not $npcBarman.hasToldNumberOfRounds>> <<set _hasInfo to true>> <</if>> <<if not $npcBarman.hasTalkedTier1Harlots>> <<set _hasInfo to true>> <</if>> <<if not $npcBarman.hasTalkedTier2Harlots>> <<set _hasInfo to true>> <</if>> <<if not $npcBarman.hasTalkedTier3Harlots>> <<set _hasInfo to true>> <</if>>
<<if not $npcBarman.hasGivenHarlotDifficultiesIntro>> [[What did he mean by 'the harlots will only get harder and harder to survive'?->NPC Barman: Harlot Difficulties Intro]] <<else>> <<if not $npcBarman.hasToldNumberOfRounds>> [["How many rounds is " + $npcMadam.name + "'s game?"->NPC Barman: Talk: Round Count]] <</if>> <<if not $npcBarman.hasTalkedTier1Harlots>> [[Ask about Tier 1 harlots.->NPC Barman: Talk: Tier 1 Harlots]] <</if>> <<if not $npcBarman.hasTalkedTier2Harlots>> [[Ask about Tier 2 harlots.->NPC Barman: Talk: Tier 2 Harlots]] <</if>> <<if not $npcBarman.hasTalkedTier3Harlots>> [[Ask about Tier 3 harlots.->NPC Barman: Talk: Tier 3 Harlots]] <</if>> <</if>>
<<set $npcBarman.hasGivenHarlotDifficultiesIntro to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "$npcMadam.name has a strange – for a daemon – obsession with fairness. That applies not just to the visitors to her house, but also the daemons that work under its roof. She presents her weaker and more obedient harlots first and lets the stronger and more rebellious harlots come in later. She'll tell patrons it's to give them more of a chance to survive, but it's more to keep her own daemons happy. If they didn't have first 'bite' at the weak and hopeless, the weaker daemons would struggle to feed at all, and $npcMadam.name would have a harder time keeping them in line."<br> <br> He glances over at the stage where $npcMadam.name is introducing three new harlots to another patron.<br> <br> "In power level, $npcMadam.name's harlots can be broadly separated into three tiers. $npcMadam.name will only show the Tier 1 harlots in the early rounds, Tier 2 in the middle rounds, and Tier 3 in the later rounds."<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<set $npcBarman.hasToldNumberOfRounds to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "13," $npcBarman.name replies. "It's a number of some significance. You will need to visit and return from the harlots' rooms 13 times if you wish to escape $npcMadam.name's house."<br> <br> You look aghast. 13? In one night? Is that even possible?<br> <br> $npcBarman.name reads your face well. "Time works differently in here. Even with that, you will likely need to seek the help of the nurse multiple times to replenish both your energy and testicles."<br> <br> He glances aside and seems strangely fearful.<br> <br> "That too also comes with costs," he adds cryptically.<br> <br> ''DEV'S NOTE – This is the early access demo version. Currently, only the first 5 rounds can be played.''<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<set $npcBarman.hasTalkedTier1Harlots to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "The Tier 1 harlots are the easiest to return from," $npcBarman.name says. "They are usually weak, low-level lust daemons, with seductive arts that are easy to resist. Or, if they have power, they are either benign and not interested in killing humans – some daemons prefer to milk rather than butcher – or are totally obedient to $npcMadam.name and willing to bind themselves with rigid conditions.<br> <br> "These Tier 1 harlots take only the weakest minds and bodies. They see many men, but take very few. $npcMadam.name uses them as openers to prolong the game. Don't be fooled. While they might be easy to survive, the later choices $npcMadam.name gives you... will not."<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<set $npcBarman.hasTalkedTier2Harlots to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "Tier 2 harlots are more dangerous. $npcMadam.name starts introducing them in the middle rounds. Their seductive arts are more powerful. A player will need a stronger mind or body to resist. You should start considering your strengths and weaknesses, and choose harlots that align with your strengths.<br> <br> "You'll also need to consider other aspects than your physical and mental capabilities. These lust daemons still follow $npcMadam.name's rules, but more loosely. They might claim a man if they find his personality disagreeable, or his offering not to their liking. Fewer men survive visits to their rooms."<br> <br> ''DEV'S NOTE – While the current demo consists of only the first 5 rounds, all harlots are currently accessible. This might mean you encounter a Tier 2 harlot a little earlier than you should. Have fun!''<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<set $npcBarman.hasTalkedTier3Harlots to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> "These are the most dangerous and powerful of $npcMadam.name's rank-and-file harlots. Not all lust daemons share $npcMadam.name's desire for fair play. Oh, they might claim to follow $npcMadam.name's rules, but daemons are duplicitous creatures.<br> <br> "Returning alive from these harlots will require the strongest physical or mental attributes. And in some cases, even that might not be enough. These lust daemons lie and cheat. They will test players with seductive abilities no man can resist. $npcMadam.name is aware of this. It's why she only introduces them in the later rounds.<br> <br> "It's also why she drafted in the help of $npcCharm.name. $npcMadam.name is a wily one. Rather than upbraid her most powerful harlots and risk revolt, she goes behind them and has $npcCharm.name craft protective charms to nullify her harlots' most potent abilities. It returns balance to the game... provided the player can find the right protective charm in time.<br> <br> "Even with that, very few players return from these harlot's rooms."<br> <br> ''DEV'S NOTE – Yep, there are also some Tier 3 harlots floating around in the current demo. They're mostly confined to Round 5. Consider them a temporary boss guarding the end of the demo.''<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<<if not $npcBarman.hasTalkedMiniBosses>> <<set _hasInfo to true>> <</if>>
<<if not $npcBarman.hasTalkedMiniBosses>> [[What did he mean by 'she will be more demanding than anything you've faced so far'?->NPC Barman: Talk: Mini Bosses]] <</if>>
<<set $npcBarman.hasTalkedMiniBosses to true>> <<set $numberOfQuestions -= 1>> <div class="text-display"> <div class="body-text"> //DEV'S NOTE – Round 5 is planned to be a special round where the player will encounter a 'mini-boss' harlot with a much more detailed (and trickier) scenario. Those aren't implemented yet, but in the meantime I've populated this with Tier 3 harlots. They'll give a rough indication of what the final experience will be like. Enjoy!//<br> <br> </div> <div class="options-text"> [["Back to " + $npcBarman.name + " options."->NPC Barman: Check If Called Away]] </div> </div>
<div class="text-display"> <div class="body-text"> //TESTING: Returning after visiting NPC Barman.//<br> <br> </div> <div class="options-text"> <<if $player.clubActivityUnits lt 1>> //Out of Actions for this Round.//<br> <<else>> [[Continue.->Test NPC Barman: Continue]] <</if>> [[Next Round.->Test NPC Barman: Next Round]] [[Restart Testing.->Test NPC Barman]] </div> </div>
<<set $npcMadam to { name: "The Madam" }>> <<set $npcGossip to { name: "The Elegant Woman", hasGossipedAboutBarman: false, hasBeenIntroduced: false }>> <<set $npcPotion to { name: "The Doctoress", hasBeenIntroduced: false }>> <<set $npcCharm to { name: "The Buxom Lolibaba", hasBeenIntroduced: false }>> <<set $npcNurse to { name: "Nurse Honey", hasBeenIntroduced: false }>>
<div class="text-display"> <div class="body-text"> ''Next Round''<br> <br> <<set $player.currentRound += 1>> [[Player: Reset Activity Units]] <<include [[NPC Barman: Print]]>> </div> <div class="options-text"> [[Next Round.->NPC Barman: Visit]] </div> </div>
/* This is where the player selects the gift to take up to the room */ /* INPUTS: $cgi (list of gifts) _revealBestGift (true/false whether to show best gift) _revealGiftCategories (show gift categories) _bestGiftId (Id of favored gift) _afterGiftSelectionLink (where to go after selecting gift) */ <table style="width:100%;margin:0px"> <<for _i to 0; _i lt $gci.length; _i++>> <tr> <<set _gi to $gci[_i]>> <<if _revealBestGift and _bestGiftId eq _gi and _gi neq 0>> <<set _name to "* " + $allGifts[_gi].name + " *">> <<else>> <<set _name to $allGifts[_gi].name>> <</if>> <<capture _i>> <td style="text-align:left">[[_name->_afterGiftSelectionLink][$cgi to $gci[_i]]]</td> <</capture>> <<if _revealGiftCategories>> <<set _giftCategories to $allGifts[_gi].categories>> <<include [[Gifts: Create Categories String]]>> <td style="text-align:left">//( _catString )//</td> <</if>> </tr> <</for>> </table>
/* Black Rose. This is the death gift - give it to any harlot to get the sexy Bad End */ <<set $gift to { number: 0, name: "Black Rose", isSingular: true, description: "a rose with black petals on a plump red cushion", categories: [2, 3] }>>
/* Chocolates */ <<set $gift to { number: 1, name: "Chocolates", isSingular: false, description: "a box of fancy chocolates", categories: [0, 4] }>>
/* Wine */ <<set $gift to { number: 2, name: "Wine", isSingular: true, description: "a bottle of wine", categories: [1, 4] }>>
/* Perfume */ <<set $gift to { number: 3, name: "Perfume", isSingular: true, description: "a bottle of exotic perfume", categories: [2, 4, 5, 8] }>>
/* Flask of Scented Oil */ <<set $gift to { number: 4, name: "Flask of Scented Oil", isSingular: true, description: "a fluted gold flask of scented oil", categories: [2, 5, 7] }>>
/* Ribbon */ <<set $gift to { number: 5, name: "Ribbon", isSingular: true, description: "a pretty white ribbon", categories: [3, 9] }>>
/* Vial of Blood */ <<set $gift to { number: 6, name: "Vial of Blood", isSingular: true, description: "a vial of red liquid that looks suspiciously like blood", categories: [12,13] }>>
/* Small fluffy thing */ <<set $gift to { number: 7, name: "Small Fluffy Thing", isSingular: true, description: "a small fluffy creature of indeterminate species in a glass jar", categories: [9, 11] }>>
/* Grapes */ <<set $gift to { number: 8, name: "Grapes", isSingular: false, description: "a bunch of deliciously ripe grapes", categories: [0] }>>
/* Eyeball */ <<set $gift to { number: 9, name: "Eyeball", isSingular: true, description: "a single eyeball on a small metal tray", categories: [12,13,14] }>>
/* Fish */ <<set $gift to { number: 10, name: "Fish", isSingular: true, description: "a raw fish on a plate", categories: [11] }>>
/* Heart */ <<set $gift to { number: 11, name: "Bleeding Heart", isSingular: true, description: "a bloody heart on a plate", categories: [12,13,14] }>>
<<print "Number of gifts = " + $allGifts.length>> <br><br> <<for _i, _gift range $allGifts>> <<print _i>>. <<print _gift.name + ". ">> <<print _gift.isSingular + ". ">> <<set _giftCategories to _gift.categories>> <<include [[Gifts: Print Gift Categories]]>> <br> <</for>>
<<include [[GiftsInit]]>> ''TESTING GIFTS'' <<include [[Test Gifts: Print All Gifts]]>> <br> <br> <<include [[Test Gifts: Print All Descriptions]]>>
/* Code for selecting 8 gifts to put before the player */ /* INPUT: _harlotGifts (list of gifts -as ids - relevant to selected harlot) */ /* OUTPUT: $gci (list of 8 gifts - as ids) */ <<set $gcCount to 8>> /* Gift 0 is always present */ <<set $gci to [0]>> /* Add harlot gifts */ <<for _i to 0; _i lt _harlotGifts.length; _i++>> <<set _gi to _harlotGifts[_i]>> <<set $gci.push(_gi)>> <</for>> /* copy gifts array */ <<set _tempGifts to Array.from($allGifts)>> /* remove already selected gifts */ <<for _i to 0; _i lt $gci.length; _i++>> <<set _gi to $gci[_i]>> <<set _tempGifts.deleteWith(function (val) { return val.number == _gi })>> <</for>> /* add enough random gifts to make the number up to 8 */ <<for _i to $gci.length; _i lt $gcCount; _i++>> <<set _gi to _tempGifts.pluck().number>> <<set $gci.push(_gi)>> <</for>> /* random order */ <<set $gci.shuffle()>>
<<for _i to 0; _i lt $gci.length; _i++>> <<set _cgi to $gci[_i]>> <<print _i>>. <<print $allGifts[_cgi].name>><br> <</for>>
<<include [[GiftsInit]]>> <<set _harlotGifts to [32]>> TEST HARLOT CHOICES:<br> <<for _i to 0; _i lt _harlotGifts.length; _i++>> <<set _gi to _harlotGifts[_i]>> $allGifts[_gi].name<br> <</for>> <br> ''TEST: RUNNING GIFT SELECTION ALGORITHM''<br> <<include [[Gift Selection: Selection Algorithm]]>> Total of All Gifts = $allGifts.length<br> <<include [[Test Gift Selection: Print Gift Choices]]>>
<<set $gift to { number: , name: "", description: "", categories: }>>
/* Soap */ <<set $gift to { number: 12, name: "Exotic Bottle of Soap", isSingular: true, description: "an exotic green bottle of soap with a pump", categories: [5, 7] }>>
/* Mug of Coffee */ <<set $gift to { number: 13, name: "Mug of Coffee", isSingular: true, description: "a piping hot mug of fresh coffee", categories: [1] }>>
/* Twig Fetish */ <<set $gift to { number: 14, name: "Twig Fetish", isSingular: true, description: "a collection of twigs and fluff bound together by rough twine to form a vaguely humanoid shape", categories: [10, 11] }>>
/* Yellow Tulip */ <<set $gift to { number: 15, name: "Yellow Tulip", isSingular: true, description: "a bright yellow tulip", categories: [2, 3] }>>
/* Pearl Necklace */ <<set $gift to { number: 16, name: "Pearl Necklace", isSingular: true, description: "a string of pearls", categories: [3, 8] }>>
/* Bottle of Lube */ <<set $gift to { number: 17, name: "Bottle of Lube", isSingular: true, description: "a bottle of clear lubricant", categories: [5, 6] }>>
/* Screwdriver */ <<set $gift to { number: 18, name: "Screwdriver", isSingular: true, description: "an incongruous red-handled screwdriver", categories: [11] }>>
/* array storing all gift category names */ <<set $giftCategoryNames to [ "EDIBLE", "DRINKABLE", "SCENTED", "PRETTY", "ROMANTIC", "SENSUAL", "SMUTTY", "BODYCARE", "BLINGY", "CUTE", "ARTY", "WEIRD", "GROSS", "MACABRE", "BODYPARTS", "SEX TOY" ] >>
/* Print gift categories. pre-req: _giftCategories */ <<include [[Gifts: Create Categories String]]>> <<print _catString>>
<<print "Number of gifts = " + $allGifts.length>> <br><br> <<for _i, _gift range $allGifts>> <<print _i>>. <<print _gift.name + ". ">> <<print _gift.description + ".">> <br> <</for>>
<<set $gift to { number: 19, name: "Butt Plug", isSingular: true, description: "a medium-sized butt plug made out of black rubber", categories: [6,15] }>>
/* Print gift categories. pre-req: _giftCategories output: _catString */ <<set _catString to "">> <<for _cat to 0; _cat lt _giftCategories.length; _cat++>> <<set _catId to _giftCategories[_cat]>> <<if _cat eq (_giftCategories.length - 1)>> <<set _catString += $giftCategoryNames[_catId] + ".">> <<else>> <<set _catString += $giftCategoryNames[_catId] + ", ">> <</if>> <</for>>
/* Entrails */ <<set $gift to { number: 20, name: "Entrails", isSingular: false, description: "a plate of steaming entrails", categories: [12,14] }>>
/* INPUT: _giftSelectionString to build */ <<for _i to 0; _i lt $gci.length; _i++>> <<set _gi to $gci[_i]>> <<if _i eq $gci.length - 1>> <<set _giftSelectionString += "and ">> <</if>> <<set _giftSelectionString += $allGifts[_gi].description>> <<if _i lt $gci.length - 1>> <<set _giftSelectionString += ", ">> <<else>> <<set _giftSelectionString += ".">> <</if>> <</for>>
/* Pinwheel */ <<set $gift to { number: 21, name: "Pinwheel", isSingular: true, description: "a brightly-coloured pinwheel", categories: [3,10] }>>
/* Bottle of Milk? */ <<set $gift to { number: 22, name: "Bottle of Milk?", isSingular: true, description: "a fancy bottle filled with what you hope is just milk", categories: [1] }>>
/* Ornate Lipstick */ <<set $gift to { number: 23, name: "Ornate Lipstick", isSingular: true, description: "vivid red lipstick in an ornate case", categories: [7,8] }>>
/* Jewels */ <<set $gift to { number: 24, name: "Jewels", isSingular: false, description: "a handful of glittering jewels", categories: [3,8] }>>
/* Anal Beads */ <<set $gift to { number: 25, name: "Anal Beads", isSingular: false, description: "a string of anal beads", categories: [6,15] }>>
/* Large Steel Dildo */ <<set $gift to { number: 26, name: "Large Steel Dildo", isSingular: true, description: "a large steel dildo", categories: [6,15] }>>
/* Fluffy Handcuffs */ <<set $gift to { number: 27, name: "Fluffy Handcuffs", isSingular: false, description: "a pair of handcuffs covered in fake pink fur", categories: [9,15] }>>
/* Ripe Peach */ <<set $gift to { number: 28, name: "Ripe Peach", isSingular: true, description: "a lusciously ripe peach", categories: [0] }>>
/* Antique Fan */ <<set $gift to { number: 29, name: "Antique Fan", isSingular: true, description: "a stylish antique fan", categories: [3,8,10] }>>
/* Romance Novel */ <<set $gift to { number: 30, name: "Romance Novel", isSingular: true, description: "a trashy romance novel", categories: [4,10] }>>
/* Vodka */ <<set $gift to { number: 31, name: "Vodka", isSingular: true, description: "a bottle of vodka", categories: [1] }>>
/* Carrot */ <<set $gift to { number: 32, name: "Carrot", isSingular: true, description: "a fresh carrot", categories: [0,11] }>>
<<set $isTesting to true>> <<set $player.location to 13>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<set $player.currentRound to 1>> <<include [[Test Gift Selection: Run Test]]>>
<div class="text-display"> <div class="body-text"> Selected Gift: $allGifts[$cgi].name </div> <div class="options-text"> [[Test again.->Test Gift Selection: Run Test]] [[Next round.->Test Gift Selection: Next Round]] </div> </div>
/* Select a gift from list of all gifts $afterGiftSelectionLink: where to go after selecting gift. */ <<for _cgi to 0; _cgi lt $allGifts.length; _cgi++>> <<capture _cgi>> <<set _name to $allGifts[_cgi].name>> [[_name->$afterGiftSelectionLink][$cgi to _cgi]] <</capture>> <</for>>
/* This is where the player selects the gift to take up to the room */ <<set $player.location to 13>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <div class="text-display"> <div class="body-text"> <<set $gci to []>> <<include [[Gift Selection: Selection Algorithm]]>> <<set _giftSelectionString to "You see ">> <<include [[Create Gift Selection String]]>> <<if $player.currentRound eq 1>> Ah, the gift. You turn to the table on the right. There is an assortment of items on it. Some look like conventional gifts. Others less so. _giftSelectionString <<else>> _giftSelectionString <</if>><br> <br> What will you take?<br> <br> </div> <div class="options-text"> <<include [[Gift Selection Options]]>> </div> </div>
<<set $player.currentRound += 1>> <<include [[Test Gift Selection: Run Test]]>>
<<set _harlotGifts to [18,32]>> <<set _revealBestGift to true>> <<set _revealGiftCategories to true>> <<set _bestGiftId to 18>> <<set _afterGiftSelectionLink to "Test Gift Selection: Choice Made">> <<include [[Gift Selection]]>>
<<for _i to 0; _i lt $hci.length; _i++>> <<capture _i>> <<set _name to $allHarlots[$hci[_i]].name>> [[_name->Harlot Selection: Choice Made][$hi to $hci[_i]]] <</capture>> <</for>>
/* Leave the room. Do all the post-room clean-up here */ <<set $player.location to 13>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<set $harlotForArt to 0>> <div class="text-display"> <div class="body-text"> <<if $isCoreTesting>> <<include [[Player: Print Faction Affinities]]>><br> <<include [[Player: Print Room Score]]>><br> <</if>> /* This is where we update all the harlots that have been presented to the player so far. This update is also done whenever the [mulligan_token] is used to give the player 3 fresh choices */ <<include [[All Presented Harlots: Update]]>> <<if $isCoreTesting>> <<include[[Print All Presented Harlots]]>> <</if>> <<if def $allHarlots[$hi].customLeaveText>> <<include [[$allHarlots[$hi].customLeaveText]]>> <<else>> <<include [[Harlot Room: Leave Text]]>> <</if>> </div> <div class="options-text"> [[Continue.->$afterHarlotRoomLink]] </div> </div>
<<set $player.location to 9>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <div class="text-display"> <div class="body-text"> /* Run Selection Algorithm */ <<include [[Selection Algorithm]]>> <<set _isMultiplePeople to false>> <<for _i to 0; _i lt $hci.length; _i++>> <<set _hi to $hci[_i]>> <<if $allHarlots[_hi].isMultiplePeople>> <<set _isMultiplePeople to true>> <</if>> <</for>> /* Text */ <<include [[Harlot Presentation: Intro Text]]>> <<for _i to 0; _i lt 3; _i++>> <<set _hi to $hci[_i]>> /* pre-introduction for each harlot */ <<if def $allHarlots[_hi].preIntroductionLink>> <<include $allHarlots[_hi].preIntroductionLink>> <</if>> <<switch _i>> <<case 0>> The first is <<case 1>> The second is <<case 2>> And the third is <</switch>> <<print " " + $allHarlots[_hi].shortDescription>><br> <br> /* add portrait */ <<set $npcsForArt.push(_hi + 100)>> <</for>> "Now let me introduce you to each in turn," $npcMadam.name says.<br> <br> <<set $currentHarlotIndex to 0>> </div> <div class="options-text"> [[Time for some introductions.->Harlot Presentation: Harlot Introductions]] </div> </div>
<<set $isCoreTesting to true>> <<set $isTesting to true>> <<set $afterHarlotPresentationLink to "Test: Harlot Presentation: After">> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<include [[Test: Harlot Presentation: New Round]]>>
/* Detailed introductions of each harlot go here */ <<set $hi to $hci[$currentHarlotIndex]>> <<set $npcsForArt to [0, $hi + 100]>> <div class="text-display"> <div class="body-text"> <<include [[$allHarlots[$hi].introductionLink]]>> <br> <<set $currentHarlotIndex += 1>> </div> <div class="options-text"> <<if $currentHarlotIndex lt $hcCount>> [[You move on to the next girl.->Harlot Presentation: Harlot Introductions]] <<else>> [[That's the introductions done.->Harlot Presentation: End]] <</if>> </div> </div>
<<set $npcsForArt to []>> <div class="text-display"> <div class="body-text"> Here are your choices:<br> <br> <<for _i to 0; _i lt $hcCount; _i++>> <<set _hi to $hci[_i]>> <<print $allHarlots[_hi].name + ", ">> <<print $allHarlots[_hi].shortDescription>><br><br> <<set $npcsForArt.push(_hi + 100)>> <</for>> <<if $player.currentRound eq 1 and not $hasUsedMulliganToken>> "You don't have to choose right away, dear," $npcMadam.name reminds you. "We know how difficult it can be. Go and have a quiet drink and think it over. I'll let you know when it's time to come back and make a decision."<br> <br> She holds up her pager, her elegant finger on the red button.<br> <br> "Just don't dawdle when you're summoned. We are busy tonight. Dawdling throws everything off schedule and that will not do."<br> <br> $npcMadam.name suddenly seems less doddering and eccentric. You have the weird impression of being in the presence of something ancient, alien and extremely powerful. You don't know what would happen should you not show up, but you have the intuition it would be very bad for you, very bad indeed.<br> <br> "Off you pop," $npcMadam.name says, her face once again bright and cheerfully eccentric. "Enjoy yourself. Indulge yourself. This is a House of pleasure."<br> <br> <<else>> "I'll leave you to make up your mind, dear," $npcMadam.name says.<br> <br> <</if>> </div> <div class="options-text"> [[Continue.->$afterHarlotPresentationLink]] </div> </div>
<div class="text-display"> <div class="body-text"> <<if $player.currentRound eq 1>> You sit at the bar. Sometime soon $npcMadam.name is going to summon you to pick one of her harlots. You feel both excitement and trepidation at the prospect. <<else>> You sit at the bar and consider your next action. <</if>><br> <br> //You have time for $player.clubActivityUnits Actions before $npcMadam.name summons you back to the presentation stage to choose a harlot.//<br> <br> What will you do?<br> <br> </div> <div class="options-text"> <<include [[Club Activities: Hub Options]]>> </div> </div>
/* transition to club activities */ /* set max number of activities */ <<set $isPostRoom to false>> <<include [[Player: Reset Activity Units]]>> <<set $returnToHubLink to "Club Activities: Return to Hub">> <<include [[Club Activities: Prelim: Round]]>>
/* Transition to harlot selection. */ <<set $player.location to 9>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<for _i to 0; _i lt $hci.length; _i++>> <<set _hi to $hci[_i]>> <<set $npcsForArt.push(_hi + 100)>> <</for>> <div class="text-display"> <div class="body-text"> You return to the presentation stage. $npcMadam.name is already waiting with her harlots. It's time to make a choice. Who will you pick?<br> <br> <<if $isTesting>> <<set _hasNoAilment to true>> <<for _ailment to 0; _ailment lt 12; _ailment++>> <<include [[Check if Player Has Given Ailment]]>> <<if _hasAilment>> ''Player has $allAilments[_ailment].name ailment.''<br><br> <</if>> <<set _hasNoAilment to false>> <</for>> <<if _hasNoAilment>> ''Player has no ailment.''<br><br> <</if>> <</if>> <<set _hasSelectionPoolBeenFinalised to false>> <<set _canChoose to true>> <<set _cannotChooseReason to "">> <<set _cannotMulliganReason to "">> /* Is selection modified by enslavement */ <<if _hasSelectionPoolBeenFinalised eq false>> <<include [[Harlot Selection: Forced By Enslavement]]>> <</if>> /* Is selection modified by fetishes? */ <<if _hasSelectionPoolBeenFinalised eq false>> <<include [[Harlot Selection: Forced By Fetish]]>> <</if>> </div> <div class="options-text"> <<if not _canChoose>> _cannotChooseReason<br> <br> <</if>> <<include[[Harlot Selection: Create Options List]]>> <<include [[Harlot Selection: Mulligan Options]]>> </div> </div>
<<set $npcsForArt to [0]>> <div class="text-display"> <div class="body-text"> /* for the unchosen */ <<set _chosenHarlotId to $hi>> <<for _h to 0; _h lt $hci.length; _h++>> <<set $hi to $hci[_h]>> <<if $hi neq _chosenHarlotId>> <<include [[$allHarlots[$hi].ifNotChosenLink]]>> <</if>> <</for>> <<set $hi to _chosenHarlotId>> <<include [[Harlot Selection: Post-Choice Text]]>> </div> <div class="options-text"> /* TODO: clean up alternate pathway */ /* <<if def $allHarlots[$hi].customPathToRoomBeforeGift>> <<include [[$allHarlots[$hi].customPathToRoomBeforeGift]]>> <<else>> <<include [[Gift Selection Container]]>> <</if>> */ [[Choose a gift.->$afterHarlotSelectionLink]] </div> </div>
/* This is where the player selects the gift to take up to the room */ <<set _harlotGifts to $allHarlots[$hi].gifts>> <<set _revealBestGift to $player.charms.includes(15)>> <<set _revealGiftCategories to $player.charms.includes(16)>> <<if _harlotGifts.length gt 1>> <<set _bestGiftId to _harlotGifts[0]>> <<else>> <<set _bestGiftId to 0>> <</if>> <<set _afterGiftSelectionLink to "Gift Selection: Choice Made">> <<include [[Gift Selection]]>>
<div class="text-display"> <div class="body-text"> <<set _isMultiplePeople to $allHarlots[$hi].isMultiplePeople>> <<if $player.currentRound eq 1>> You pick up the $allGifts[$cgi].name and carry on down the corridor. Your heart thumps in your chest. You remember $npcBarman.name's warnings, but you also know you're going to have sex with <<if _isMultiplePeople>>some<<else>>a<</if>> stunningly beautiful <<if _isMultiplePeople>>women<<else>>woman<</if>> and that has your heart aflutter a different way.<br> <br> Okay, lust <<if _isMultiplePeople>>demons, but they look like some<<else>>demon, but she looks like one<</if>> of the hottest women you've ever seen. You try to remember what you know about succubus myths. Isn't having sex with them bad?<br> <br> But if that's the case, why are there so many men down in the bar? They all seem happy to be here as well. Surely word would have got around if people kept disappearing.<br> <br> There is also another, slightly scarier, reason for not chickening out and running away.<br> <br> Ever since entering the corridor you've been conscious of someone's – or //some thing's// – gaze on you. You can't see them, but you know they're there, watching you from hidden angles between the wall and ceiling that should not be there, making sure you go to the right room and don't do anything silly like try to run away.<br> <br> You get the feeling they'd really like for you to run away, as then they'd have a reason to run you down and catch you. And once they catch you...<br> <br> You find $allHarlots[$hi].name's room and then, after taking a deep breath to compose yourself, you raise your hand, knock on the door and enter. <<else>> You pick up the $allGifts[$cgi].name and carry on down the corridor. Again, you're conscious of being watched all the way. Your heart beats loudly in your chest. You find $allHarlots[$hi].name's door and pause to compose yourself.<br> <br> You knock on the door and enter. <</if>><br> <br> </div> <div class="options-text"> [[Enter room.->$afterGiftSelectionLink]] </div> </div>
<<set $playerSemenCountBeforeRoom to $player.semenCount>> /* Play the chosen harlot's scenario when the player enters the room */ <<set $afterLeaveHarlotLink to "Harlot Room: Leave">> <<set $gameOverLink to "TODO">> <<include [[Harlot: Scenario Container]]>>
/* transition to activities between harlot room and next harlot selection. These will include money guy. Maybe some random events. Definitely crowd eavesdropping. Possibly talk with bartender. Fix bad statuses. Not sure on overlap. */ /* set max number of activities */ <<set $isPostRoom to true>> <<include [[Player: Reset Activity Units]]>> <<set $returnToHubLink to "Post-Room Activities: Return to Hub">> <<set $hasRolledOnFindMoneyTable to false>> /* NPC Money Introduces himself here */ <<if $npcMoney.hasBeenIntroduced eq false>> <<include [[NPC Money: Hails Player]]>> <<else>> <<set $player.location to 8>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<include [[Post-Room Activities: Hub]]>> <</if>>
<div class="text-display"> <div class="body-text"> /* Check find money table here */ <<if not $hasRolledOnFindMoneyTable and $player.charms.includes(11)>> <<include [[Roll on Find Money Table]]>> <<set $hasRolledOnFindMoneyTable to true>> <</if>> <<if $player.currentRound eq 1>> You return to your place at the bar. You know $npcMadam.name is going to summon you again for another round. That's the rules of her 'game'. But you don't know how long that will be.<br> <br> //This is the Post-Room phase. You have time to carry out a certain number of Actions before $npcMadam.name summons you back to the presentation stage for the next round. Currently you have $player.postroomActivityUnits <<if $player.postroomActivityUnits eq 1>>Action<<else>>Actions<</if>> remaining.//<br> <br> What will you do while you wait? <<else>> You sit down at your usual place at the bar and contemplate your next move. You know it won't be long before $npcMadam.name summons you again for the next round.<br> <br> //You have time for $player.postroomActivityUnits <<if $player.postroomActivityUnits eq 1>>Action<<else>>Actions<</if>> before $npcMadam.name summons you back to the presentation stage for the next round.//<br> <br> What will you do? <</if>><br> <br> </div> <div class="options-text"> <<include [[Post-Room Activities: Hub Options]]>> </div> </div>
<<set $isTesting to true>> <<set $isCoreTesting to true>> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $afterGiftSelectionLink to "Test: Gift Selection: After">> <<include [[Test: Gift Selection: New Round]]>>
<br> <<for _i to 0; _i lt $hci.length; _i++>> <<set _hi to $hci[_i]>> <<print _i>>. <<print $allHarlots[_hi].name>><br> <</for>>
/* This is set a little above Harlot Presentation: Intro to allow us to update the round (otherwise mulliganning would advance rounds incorrectly). Maybe do any other required clean-up as well. */ <<set $player.currentRound += 1>> <<if $player.currentRound gt 5>> <<include [[Outro: End of Demo]]>> <<else>> /* Set everything relevant to next round here includes: */ <<set $hasUsedMulliganToken to false>> /* TEST CODE TO REMOVE NPC Availabilities */ <<if $isCoreTesting>> <<include [[Mock: Determine NPC Availabilities]]>> <<else>> <<include [[Determine NPC Availabilities]]>> <</if>> /* potion and charm stock */ <<include [[Determine Item Stock]]>> /* Potion effects and addiction */ <<include [[Potions: Beginning of Round Actions]]>> <<set $allAilments[9].hasSatisfied to false>> /* Turn on/off vision charm */ <<if $player.charms.includes(13)>> <<set $player.hasVision to true>> <<else>> <<set $player.hasVision to false>> <</if>> <<include [[Harlot Presentation: Intro]]>> <</if>>
//Faction Harlots://<br> <<for _fh to 0; _fh lt $factionPool.length; _fh++>> <<set _hi to $factionPool[_fh]>> // $allHarlots[_hi].name//<br> <</for>>
//General Harlots://<br> <<for _gh to 0; _gh lt $generalPool.length; _gh++>> <<set _hi to $generalPool[_gh]>> // $allHarlots[_hi].name//<br> <</for>>
//Visited Harlots://<br> <<for _vh to 0; _vh lt $visitedPool.length; _vh++>> <<set _hi to $visitedPool[_vh]>> // $allHarlots[_hi].name//<br> <</for>>
<div class="text-display"> <div class="body-text"> "Are none of the girls to your liking?" $npcMadam.name asks. "That is a shame. They work so hard to be pleasing. Never mind. It is what it is. We have plenty of girls here. I can find three new ones for you to choose from."<br> <br> She holds out a hand.<br> <br> "You do remember the cost?"<br> <br> //Changing the harlots on offer will cost 1 $mulliganToken.name.//<br> <br> Will you:<br> <br> </div> <div class="options-text"> [["Hand over a " + $mulliganToken.name + " and have " + $npcMadam.name + " present you with three new harlots?"->Harlot Selection: Pay Mulligan]] <br> Or, change your mind and pick one of the harlots currently on offer? <br> <<include [[Harlot Selection: Create Options List]]>> </div> </div>
<div class="text-display"> <div class="body-text"> You hand over the $mulliganToken.name.<br> <br> "Thank you, my dear," $npcMadam.name says.<br> <br> She shoos the girls away from the presentation stage. Some of them give you dirty looks before the curtain swishes back across.<br> <br> "Now, if you'll just give me a moment," $npcMadam.name says. "I'll go and find three new girls for you. Maybe one of these will be more to your liking."<br> <br> She slips behind the curtain and enters the back area. You don't have long to wait before she returns.<br> <br> "Yes, I think one of these will be just perfect for you," she says.<br> <br> <<set $player.mulliganTokens -= 1>> <<set $hasUsedMulliganToken to true>> /* We also need to mark that the girls have been seen for NPC_Gossip and also to trigger any events on being selected, but not chosen */ <<include [[All Presented Harlots: Update]]>> <<if $isTesting>> <<include[[Print All Presented Harlots]]>><br> <</if>> /* Being mulliganned might affect future behaviour */ <<for _h to 0; _h lt $hci.length; _h++>> <<set $hi to $hci[_h]>> <<include [[$allHarlots[$hi].ifMulligannedLink]]>> <</for>> </div> <div class="options-text"> [["What does " + $npcMadam.name + " have for you this time?"->Harlot Presentation: Intro]] </div> </div>
/* Determine availability of NPCs here */ <<include [[NPC Madam: Determine Availability]]>> <<include [[NPC Gossip: Determine Availability]]>> <<include [[NPC Money: Determine Availability]]>> <<include [[NPC Nurse: Determine Availability]]>> <<include [[NPC Potion: Determine Availability]]>> <<include [[NPC Charm: Determine Availability]]>>
/* Update table of all harlots shown to player Used to determine who Gossip can gossip about */ <<for _i to 0; _i lt $hci.length; _i++>> <<set _hi to $hci[_i]>> <<set $hapi.pushUnique(_hi)>> <</for>>
/* print names of all harlots that have been presented to player */ //Presented Harlots://<br> <<for _ph to 0; _ph lt $hapi.length; _ph++>> <<set _hi to $hapi[_ph]>> // $allHarlots[_hi].name//<br> <</for>> <br>
<div class="text-display"> <div class="body-text"> You return to the bar just in time to feel the buzzer vibrate once in your pocket. It's time to go to the presentation stage. What will $npcMadam.name have for you this time?<br> <br> </div> <div class="options-text"> [[Go to the Harlot Presentation stage.->$afterPostroomActivitiesLink]] </div> </div>
<div class="text-display"> <div class="body-text"> You return to the bar just in time to feel the buzzer vibrate twice in your pocket. Time's up. You need to go to the presentation stage and make a choice. </div> <div class="options-text"> [[Go and choose a harlot.->$afterClubActivitiesLink]] </div> </div>
/* Selection forced by a player having the Enslavement ailment a player can only be enslaved to one harlot at a time. */ <<set _ailment to 0>> <<include [[Check if Player Has Given Ailment]]>> <<if _hasAilment>> <<set _mistressId to $allAilments[0].harlot>> <<for _i to 0; _i lt $hci.length; _i++>> <<if $hci[_i] eq _mistressId>> <<set _isMistressPresent to true>> <</if>> <</for>> <<if _isMistressPresent>> <<set $hci to [_mistressId]>> <<set _hasSelectionPoolBeenFinalised to true>> <<set _canChoose to false>> <<set _cannotChooseReason to "Your Mistress is here. You couldn't possibly select anyone else.">> <<set _cannotMulliganReason to "It would be unthinkable to use a " + $mulliganToken.name + " to send Mistress away.">> <</if>> <</if>>
/* list of force selection fetishes */ <<set _fetishList to [1,2,3,4,5]>> /* new harlot selections */ <<set _newHci to []>> /* for each fetish */ <<for _fi to 0; _fi lt _fetishList.length; _fi++>> <<set _ailment to _fetishList[_fi]>> /* check if player has that fetish */ <<include [[Check if Player Has Given Ailment]]>> <<if _hasAilment>> /* Need to check if any harlots are irresistible to ailment */ <<for _i to 0; _i lt $hci.length; _i++>> <<set _hid to $hci[_i]>> <<if def $allHarlots[_hid].isIrresistibleToAilment>> <<if $allHarlots[_hid].isIrresistibleToAilment eq _ailment>> /* add to new harlot list */ <<set _newHci.pushUnique(_hid)>> <</if>> <</if>> <</for>> <</if>> <</for>> <<if _newHci.length gt 0 and _newHci.length lt 3>> /* forced picks string */ <<set _picksStr to "">> <<for _i to 0; _i lt _newHci.length; _i++>> <<if _i neq 0>> <<set _picksStr += " and ">> <</if>> <<set _hid to _newHci[_i]>> <<set _picksStr += $allHarlots[_hid].name>> <</for>> /* rejects */ <<set $hci.delete(_newHci)>> <<set _rejStr to "">> <<for _i to 0; _i lt $hci.length; _i++>> <<if _i neq 0>> <<set _rejStr += " or ">> <</if>> <<set _hid to $hci[_i]>> <<set _rejStr += $allHarlots[_hid].name>> <</for>> <<set $hci to _newHci>> <<set _hasSelectionPoolBeenFinalised to true>> <<set _canChoose to false>> <<if _newHci.length eq 1>> <<set _text to "has">> <<else>> <<set _text to "have">> <</if>> <<set _cannotChooseReason to "You're not interested in " + _rejStr + ". Only " + _picksStr + " " + _text + " the attributes that turn you on.">> <<if _newHci.length eq 1>> <<set _text to "This girl is">> <<else>> <<set _text to "These girls are">> <</if>> <<set _cannotMulliganReason to "You don't wish to use a " + $mulliganToken.name + ". " + _text + " exactly what you're after.">> <</if>>
<<set $isTesting to true>> <<set $player.mulliganTokens to 1>> <<set _ailment to 0>> <<set $allAilments[0].harlot to 5>> <<include [[Add Player Hidden Ailment]]>> <<set _ailment to 1>> <<include [[Add Player Hidden Ailment]]>> <<set $hci to [10, 18, 20]>> [[Begin Test->Summon to Harlot Choice]]
/* determine what items NPC Potion and NPC Charm has in stock this round */ <<include [[Potions: Update Stock]]>> <<include [[Charms: Update Stock]]>> <<if not $npcCharm.hasExplainedFixedSelection>> <<set $hasSeenCharmSelection to false>> <</if>>
<div class="text-display"> <div class="body-text"> <<if $npcPotion.addictionLevel gt 0>> That powerful craving for one of $npcPotion.name's potions returns. It's no good. It won't go away until you've drunk one. You have to satisfy it. <<else>> You're hit with a strange and powerful unspecified craving. You remember the taste of $npcPotion.name's potions and realise that's what it is. You feel a strong urge to drink another one of them. The craving is powerful enough to make it impossible to concentrate on anything else. You realise you need to take care of it before you can do anything else. <</if>><br> <br> </div> <div class="options-text"> [["You head over to " + $npcPotion.name + "."->$npcPotion.lookForLink]] </div> </div>
<<if $hasUsedMulliganToken>> You wait on the stage as the curtain on the right swishes and a new set of harlots walk out and present themselves to you. <<else>> <<switch $player.currentRound>> <<case 1>> You take your place on the presentation stage. It looks like you're doing this after all. You feel some trepidation and – you can't deny it – a little bit of arousal and anticipation. The curtain on the right swishes and<<if _isMultiplePeople>> a group of beautiful women<<else>> three beautiful women<</if>> walk out on stage, turn to face you and then strike seductive poses. <<case 2>> You return to the presentation stage. A second time, so soon. Is your body up for it? Judging by the hard-on in your pants, you think you're up for it. Once again, you take your place on the stage and wait. The curtain on the right swishes and your choices for this round walk out and present themselves to you. <<default>> You return to the presentation stage and take your place on the stage. The curtain on the right swishes and your choices for this round walk out and present themselves to you. <</switch>> <</if>><br> <br>
<<if $player.currentRound eq 1>> <<include [[Harlot Room: Leave Text: 1st Time]]>> <<else>> <<include [[Harlot Room: Leave Text: Subsequent]]>> <</if>>
You close the door behind you. You survived.<br> <br> <<if $player.semenCount lt $playerSemenCountBeforeRoom>> You wonder if $npcBarman.name was exaggerating the dangers.<br> <br> That wasn't so bad. Was rather pleasant, in fact. Really damn pleasant, in fact. Lust demons definitely know a lot about lust. A whole night of fucking them suddenly seems very appealing.<br> <br> If your body can stand up to it.<br> <br> If you're careful.<br> <br> This night might even end up being an incredible experience. <<else>> Okay, you didn't actually do anything, but you walked out alive, and that's the most important thing. You still don't know how seriously to take $npcBarman.name's warnings. You suppose, if – like he said – they're succubi that drain energy through sex, they can't do that if you don't let them screw you. <</if>><br> <br> You leave the bedroom area and return to the main lounge.<br> <br>
You close the door behind you.<br> <br> <<if $player.semenCount lt 4>> That was nice. Really nice. You do feel a little weak at the knees, though. That session, or maybe the cumulative effects of the ones before it, have left you feeling drained. $npcBarman.name's warnings come back to you. He said lust demons drained energy through sex. As good as it was, you do feel like you've been //sucked//. <<elseif $player.semenCount lt $playerSemenCountBeforeRoom>> That was nice. Really nice. You're quite happy to go again... after giving your body a chance to recover. <<else>> It didn't work out this time, but who knows, maybe you dodged a dangerous situation. <</if>><br> <br> You leave the bedroom area and return to the main lounge.<br> <br>
<<include [[NPC Barman: Check Has Info]]>> <<if _hasInfo>> [["Talk to " + $npcBarman.name + "."->NPC Barman: Visit]] <<else>> //$npcBarman.name has no new advice to give you.//<br> <</if>> [["Talk to " + $npcMadam.name + "."->$npcMadam.lookForLink]] <<if $npcGossip.hasBeenIntroduced>> [["Talk to " + $npcGossip.name + "."->$npcGossip.lookForLink]] <</if>> <<if $npcPotion.hasBeenIntroduced>> [["Talk to " + $npcPotion.name + "."->$npcPotion.lookForLink]] <</if>> <<if $npcCharm.hasBeenIntroduced>> [["Talk to " + $npcCharm.name + "."->$npcCharm.lookForLink]] <</if>> <<if $npcNurse.hasBeenIntroduced>> [["Talk to " + $npcNurse.name + "."->$npcNurse.lookForLink]] <</if>> <br>[[Sit quietly and wait to be summoned back to the presentation stage to make a choice?->$afterClubActivitiesLink]]
<<if $npcGossip.hasBeenIntroduced is true>> [["Talk to " + $npcGossip.name + "?"->$npcGossip.lookForLink]] <</if>> <<if $npcMoney.hasBeenIntroduced is true>> [["Talk to " + $npcMoney.name + "?"->$npcMoney.lookForLink]] <</if>> <br>[[Sit quietly and wait for the pager to go off to announce the beginning of the next round?->$afterPostroomActivitiesLink]]
<<if $hasUsedMulliganToken>> <<set $player.location to 8>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<include [[Default Transition to Club Activities]]>> <<else>> <<set $player.location to 1>> <<include [[Set Background Image]]>> <<set $npcsForArt to [1]>> <<switch $player.currentRound>> <<case 1>> <<if $isAcceleratedStart>> <<include [[Club Activities: Accelerated Start]]>> <<else>> <<include [[Club Activities: Prelim: Round 1]]>> <</if>> <<case 2>> <<include [[Club Activities: Prelim: Round 2]]>> <<case 5>> <<include [[Club Activities: Prelim: Round 5]]>> <<default>> <<include [[Default Transition to Club Activities]]>> <</switch>> <</if>>
<div class="text-display"> <div class="body-text"> You return to your place at the bar to consider your options.<br> <br> </div> <div class="options-text"> [[Continue.->Club Activities: Prelim: Pot Addiction]] </div> </div>
<div class="text-display"> <div class="body-text"> <<include [[Club Activites: Prelim: Round 1 Text]]>> </div> <div class="options-text"> [[Continue.->NPC Barman: Intro 1]] //Receive the full intro from $npcBarman.name. (Recommended for first-time playthroughs.)//<br> <br> [[Continue (Accelerated Start).->Club Activities: Accelerated Start]] //Receive the summary version of $npcBarman.name's introduction and $npcMadam.name's explanation of <<print $mulliganToken.name + "s.">> (You've already read them in a previous playthrough and don't need to read them again.)// </div> </div>
<div class="text-display"> <div class="body-text"> $npcBarman.name is at the bar when you return.<br> <br> "Have you visited four of $npcMadam.name's harlots now?" he asks.<br> <br> You nod.<br> <br> "Be careful with the next one. She will be more demanding than anything you've faced so far."<br> <br> What does he mean by that?<br> <br> </div> <div class="options-text"> [[Continue.->Club Activities: Prelim: Pot Addiction]] </div> </div>
/* Addiction check */ <<set _ailment to 9>> <<include [[Check if Player Has Given Ailment]]>> <<if _hasAilment>> <<include [[Club Activities: If Potion Addicted]]>> <<else>> <<include [[Club Activities: Return to Hub]]>> <</if>>
<div class="text-display"> <div class="body-text"> <<if $isAcceleratedStart>> <<include [[Club Activites: Prelim: Round 1 Text]]>> <</if>> <<include [[NPC Barman: Accelerated Intro]]>> <<include [[Accelerated Intro From Madam]]>> </div> <div class="options-text"> [[Continue.->Club Activities: Prelim: Pot Addiction]] </div> </div>
/* Top level selection algorithm */ /* 1. Create selection pool */ <<set $harlotSelectionPool to [-1, -1, -1]>> /* 2. Round switch */ <<switch $player.currentRound>> <<case 5 9>> <<include [[Selection Algorithm: Special Rounds]]>> <<default>> <<include [[Selection Algorithm: Normal Rounds]]>> <</switch>>
/* Madam Override */ <<include [[Selection Algorithm: Madam Override]]>> /* No Harlot Override for these rounds (yet!) */ /* Regular Selection */ <<include [[Selection Algorithm: Special]]>>
/* Madam Override */ <<include [[Selection Algorithm: Madam Override]]>> /* Harlot Override */ <<include [[Selection Algorithm: Harlot Override]]>> /* Regular Selection */ <<include [[Selection Algorithm: Regular]]>>
/* Check if the Player has requested a harlot with the Madam */ <<if $madamOverrideHarlotPick neq -1>> <<if $isTesting>> //Adding $npcMadam.name Override Pick: $allHarlots[$madamOverrideHarlotPick].name.//<br> <</if>> <<set $harlotSelectionPool[2] to $madamOverrideHarlotPick>> <<set $madamOverrideHarlotPick to -1>> <<else>> <<if $isTesting>> //No Madam override for this round.//<br> <</if>> <</if>>
/* Check if a Harlot has forced an override for the round */ <<if $isCoreTesting>> //Future Harlot Override Table: Before//<br> <<include [[Test Selection Algorithm: Print Harlot Overrides]]>> <</if>> <<set _overrides to []>> <<for _oi to 0; _oi lt $overrideHarlotPicks.length; _oi++>> <<if $overrideHarlotPicks[_oi][0] eq $player.currentRound>> <<set _overrides.push($overrideHarlotPicks[_oi][1])>> <<set $overrideHarlotPicks.deleteAt(_oi)>> <<set _oi-->> <</if>> <</for>> <<if $isTesting>> <<if _overrides.length gt 0>> //Harlot overrides for this round://<br> <<for _oi to 0; _oi lt _overrides.length; _oi++>> <<set _harlot to _overrides[_oi]>> //$allHarlots[_harlot].name.//<br> <</for>> <<else>> //No harlot overrides for this round.//<br> <</if>> <</if>> <<if $isCoreTesting>> //Future Harlot Override Table: Mid//<br> <<include [[Test Selection Algorithm: Print Harlot Overrides]]>> <</if>> /* check if already has madam override */ <<if $harlotSelectionPool[2] eq -1>> <<set _nOfO to 2>> <<else>> <<set _nOfO to 1>> /* Also remove harlot from overrides to prevent duplicate addition */ <<set _hi to $harlotSelectionPool[2]>> <<set _overrides.delete(_hi)>> <<if $isTesting>> //Removing $allHarlots[_hi].name from overrides: Already added to selection pool.//<br> <</if>> <</if>> <<for _oi to _nOfO; _oi gte 0; _oi-->> <<if _overrides.length gt 0>> <<set _harlot to _overrides.pluck()>> <<set $harlotSelectionPool[_oi] to _harlot>> <<if $isTesting>> //Adding Override Pick: $allHarlots[_harlot].name.//<br> <</if>> <</if>> <</for>> /* Any overrides that didn't fit this round are moved to subsequent rounds */ <<set _targetRound to $player.currentRound + 1>> /* skip special rounds */ <<if $nonOverridableRounds.includes(_targetRound)>> <<set _targetRound++>> <</if>> <<for _oi to 0; _oi lt _overrides.length; _oi++>> <<set $overrideHarlotPicks.push([_targetRound, _overrides[_oi]])>> <</for>> <<if $isCoreTesting>> //Future Harlot Override Table: After//<br> <<include [[Test Selection Algorithm: Print Harlot Overrides]]>> <</if>>
/* regular selection */ <<if $isCoreTesting>> <br>''SELECTION ALGORITHM: REGULAR SELECTION''<br> <</if>> /* 1. Establish Pools */ <<set $visitedPool to []>> <<set $factionPool to []>> <<set $generalPool to []>> /* 2. Establish which faction player currently has the highest affinity with. */ <<include [[Player: Determine Max Faction Affinities]]>> <<if $isCoreTesting>> <<include [[Player: Print Max Affinities]]>> <br> <</if>> /* 3. Sort through all harlots. Pull out any that can appear on the current round. Then put them in 3 groups - A. Has been visited before and not plot relevant B. Belong to faction(s) player has affinity C. The rest. */ <<for _hn to 0; _hn lt $allHarlots.length; _hn++>> <<if $harlotSelectionPool.includes(_hn)>> <<if $isTesting>> //Skipping $allHarlots[_hn].name : Has already been added//<br> <</if>> <<else>> <<set _harlot to $allHarlots[_hn]>> /* availability check */ <<set _isFirstTime to not _harlot.hasBeenVisited>> <<set _isValidRepeat to _harlot.hasBeenVisited and _harlot.isRepeatable>> <<set _isAvailable to _isFirstTime or _isValidRepeat>> <<set _isRightRound to $player.currentRound gte _harlot.minRound and $player.currentRound lte _harlot.maxRound>> <<if _isAvailable and _isRightRound>> <<if _harlot.hasBeenVisited and not _harlot.hasPlotRepeatVisits eq true>> <<set $visitedPool.push(_harlot.number)>> <<else>> <<set _isInFaction to false>> <<set _mfc to $player.maxFactionAffinities.length>> <<for _fin to 0; _fin lt _mfc; _fin++>> <<set _mfa to $player.maxFactionAffinities[_fin]>> <<if _harlot.faction eq _mfa>> <<set _isInFaction to true>> <</if>> <</for>> <<if _isInFaction eq true>> <<set $factionPool.push(_harlot.number)>> <<else>> <<set $generalPool.push(_harlot.number)>> <</if>> <</if>> <</if>> <</if>> <</for>> <<if $isCoreTesting eq true>> <<include [[Test Harlot Selection: Print Faction Harlots]]>> <<include [[Test Harlot Selection: Print General Harlots]]>> <<include [[Test Harlot Selection: Print Visited Harlots]]>> <br> <</if>> /* Need this test code in place to stop unseemly crashes of the test versions TODO: Make this a random selection */ <<if $factionPool.length eq 0>> ''NO GIRLS''<br><br> /* <<goto [[No Girls End]]>> */ <</if>> <<if $factionPool.length + $generalPool.length lt 2>> ''NO GIRLS''<br><br> /* <<goto [[No Girls End]]>> */ <</if>> /* 4. Select 1st harlot from [Faction] */ <<if $harlotSelectionPool[0] eq -1>> <<set _hi to $factionPool.pluck()>> <<set $harlotSelectionPool[0] to _hi>> <<if $isTesting eq true>> //Faction Harlot: <<print $allHarlots[_hi].name>>//<br> <</if>> <</if>> /* 5. Select 2nd Harlot from [All but repeats] */ <<if $harlotSelectionPool[1] eq -1>> /* Add Pool C to Pool B. */ <<for _i to 0; _i lt $generalPool.length; _i++>> <<set $factionPool.push($generalPool[_i])>> <</for>> /* selection from pool */ <<set _hi to $factionPool.pluck()>> <<set $harlotSelectionPool[1] to _hi>> <<if $isTesting eq true>> //Regular Harlot: <<print $allHarlots[_hi].name>>//<br> <</if>> <</if>> /* 6. Select 3rd harlot from [All] */ <<if $harlotSelectionPool[2] eq -1>> /* Add Pool A to Pool B */ <<for _i to 0; _i lt $visitedPool.length; _i++>> <<set $factionPool.push($visitedPool[_i])>> <</for>> /* selection from pool */ <<set _hi to $factionPool.pluck()>> <<set $harlotSelectionPool[2] to _hi>> <<if $isTesting eq true>> //Repeat Harlot: <<print $allHarlots[_hi].name>>//<br> <</if>> <</if>> <<if $isTesting eq true>> <br> <</if>> /* 7. Transfer to harlot choices (to randomise order) */ <<set $hci to []>> <<for _i to 0; _i lt $hcCount; _i++>> <<set $hci[_i] to $harlotSelectionPool.pluck()>> <</for>>
<<for _oi to 0; _oi lt $overrideHarlotPicks.length; _oi++>> <<set _round to $overrideHarlotPicks[_oi][0]>> <<set _harlotNum to $overrideHarlotPicks[_oi][1]>> // Round _round: $allHarlots[_harlotNum].name//<br> <</for>>
/* special selection for mini-boss rounds */ <<if $isCoreTesting>> <br>''SELECTION ALGORITHM: SPECIAL SELECTION''<br> <br> <</if>> /* 1. Establish Pools */ <<set $factionPool to []>> <<set $generalPool to []>> /* 2. Establish which faction player currently has the highest affinity with. */ <<include [[Player: Determine Max Faction Affinities]]>> <<if $isCoreTesting>> <<include [[Player: Print Max Affinities]]>> <br> <</if>> /* 3. Sort harlots */ <<for _hn to 0; _hn lt $allHarlots.length; _hn++>> <<if $harlotSelectionPool.includes(_hn)>> <<if $isTesting>> //Skipping $allHarlots[_hn].name : Has already been added//<br> <</if>> <<else>> <<set _harlot to $allHarlots[_hn]>> /* availability check */ <<set _isFirstTime to not _harlot.hasBeenVisited>> <<set _isValidRepeat to _harlot.hasBeenVisited and _harlot.isRepeatable>> <<set _isAvailable to _isFirstTime or _isValidRepeat>> /* Only select harlots that can appear in this specific round (allows overlapping ranges for regular harlots and keeps them out of selection.) */ <<set _isRightRound to $player.currentRound eq _harlot.minRound and $player.currentRound eq _harlot.maxRound>> <<if _isAvailable and _isRightRound>> <<set _isInFaction to false>> <<set _mfc to $player.maxFactionAffinities.length>> <<for _fin to 0; _fin lt _mfc; _fin++>> <<set _mfa to $player.maxFactionAffinities[_fin]>> <<if _harlot.faction eq _mfa>> <<set _isInFaction to true>> <</if>> <</for>> <<if _isInFaction eq true>> <<set $factionPool.push(_harlot.number)>> <<else>> <<set $generalPool.push(_harlot.number)>> <</if>> <</if>> <</if>> <</for>> <<if $isCoreTesting eq true>> <<include [[Test Harlot Selection: Print Faction Harlots]]>> <<include [[Test Harlot Selection: Print General Harlots]]>> <br> <</if>> /* 4. Faction harlots (fill Slot A and B depending on how many) */ <<set _nOS to $factionPool.length>> /* always leave room for one random harlot */ <<if _nOS gt 2>><<set _nOS to 2>><</if>> <<for _hspi to 0; _hspi lt _nOS; _hspi++>> <<set _harlot to $factionPool.pluck()>> <<set $harlotSelectionPool[_hspi] to _harlot>> <</for>> /* 5. General pool harlots (check if slot is occupied first - allows Madam overrides) */ /* Add GeneralPool to FactionPool. */ <<for _i to 0; _i lt $generalPool.length; _i++>> <<set $factionPool.push($generalPool[_i])>> <</for>> <<for _hspi to 0; _hspi lt 3; _hspi++>> <<if $harlotSelectionPool[_hspi] eq -1>> <<set _harlot to $factionPool.pluck()>> <<set $harlotSelectionPool[_hspi] to _harlot>> <</if>> <</for>> /* 6. Transfer to harlot choices (to randomise order) */ <<set $hci to []>> <<for _i to 0; _i lt $hcCount; _i++>> <<set $hci[_i] to $harlotSelectionPool.pluck()>> <</for>>
<<set $isCoreTesting to true>> <<set $isTesting to true>> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $player.location to 9>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <div class="text-display"> <div class="body-text"> <<set $player.factionAffinities[1] to 1>> /* <<set $player.factionAffinities[2] to 1>> */ Testing Selection Algorithm...<br> <br> </div> <div class="options-text"> [[Normal Rounds.->Test Selection Algorithm: Use Cases][$player.currentRound to 2]] [[Special Rounds.->Test Selection Algorithm: Use Cases][$player.currentRound to 5]] </div> </div>
<div class="text-display"> <div class="body-text"> ''TEST SELECTION ALGORITHM''<br> Current Round: $player.currentRound<br> <br> </div> <div class="options-text"> [[No Overrides.->Test Selection Algorithm: w No Overrides]] [[Madam Override.->Test Selection Algorithm: w Madam Override]] [[Harlot Override.->Test Selection Algorithm: w Harlot Override]] [[Both Override.->Test Selection Algorithm: w Both Override]] [[Repeats Override.->Test Selection Algorithm: w Repeats Override]] </div> </div>
<<include [[Test Selection Algorithm: Run Test]]>>
<<set $madamOverrideHarlotPick to 4>> <<include [[Test Selection Algorithm: Run Test]]>>
<<set $overrideHarlotPicks = [ [2, 6], [2, 7] ]>> <<include [[Test Selection Algorithm: Run Test]]>>
<<set $madamOverrideHarlotPick to 4>> <<set $overrideHarlotPicks = [ [2, 6], [2, 7] ]>> <<include [[Test Selection Algorithm: Run Test]]>>
<<set $allHarlots[2].hasBeenVisited to true>> <<set $allHarlots[4].hasBeenVisited to true>> <<set $allHarlots[10].hasBeenVisited to true>> <<set $allHarlots[5].hasBeenVisited to true>> <<set $allHarlots[5].isRepeatable to false>> <<set $allHarlots[12].hasBeenVisited to true>> <<set $allHarlots[8].isRepeatable to true>> <<set $allHarlots[8].hasBeenVisited to true>> <<include [[Test Selection Algorithm: Run Test]]>>
<div class="text-display"> <div class="body-text"> <<include [[Selection Algorithm]]>> <<include [[Test Harlot Selection: Print Harlot Choices]]>> <br> </div> <div class="options-text"> [[More Testing.->Test Selection Algorithm]] </div> </div>
//Congratulations. You've survived the first 5 rounds of// The House of Hellish Harlots! //This is the end of the current demo version. For the final game I'm hoping to have 13 rounds and multiple factions of harlots, each with their own specialties and lore.//<br> <br> //If you enjoyed this and would like to help support development. I have a Patreon here://<br> <br> https://www.patreon.com/manyeyedhydra<br> <br> //Patrons get releases earlier and other benefits. I put a new release out with around 3 new harlots every month.//<br> <br> //In the meantime, as you might have noticed, there are considerably more than 5 harlots in the House. Feel free to play again. Experiment with different starting stats and different dispositions. Pick different harlots. They will all love to play with you!// <br> <br> [[Play again?->Intro: Begin New Game]]
<div class="text-display"> <div class="body-text"> $npcBarman.name is at the bar when you return.<br> <br> "$npcMadam.name has already shown you the second round of harlots?"<br> <br> You nod.<br> <br> "That's how it works in here. You'll be forced to visit sex daemon after sex daemon until one eventually claims you."<br> <br> He mournfully pours a drink for another patron.<br> <br> "The harlots will only get harder and harder to survive," he says to you.<br> <br> </div> <div class="options-text"> [[Continue.->Club Activities: Prelim: Pot Addiction]] </div> </div>
<<set $npcMadam.isAvailable to true>> <<set $npcGossip.isAvailable to true>> <<set $npcPotion.isAvailable to true>> <<set $npcCharm.isAvailable to true>> <<set $npcNurse.isAvailable to true>> <<set $npcMoney.isAvailable to true>>
''No Girls''
/* One of the charms is lucky - the player rolls on this once per post-room phase */ /* TABLE 1-5: nothing 6-15: 1 coin 16-18: 2 coin 19: 5 coin 20: token */ <<set _rng to random(1,20)>> <<if _rng gt 19>> /* mulligan token */ <<if $npcMadam.hasGivenComplementaryMulliganToken>> <<set _mtText to $mulliganToken.name>> <<else>> <<set _mtText to "strange silver disc">> <</if>> <<if $npcMoney.hasBeenIntroduced>> <<set _npcText to $npcMoney.name>> <<else>> <<set _npcText to "someone">> <</if>> On the way back you find a _mtText on the floor. That might be useful. Or you can always sell it to _npcText for <<print $currencyName + "s.">><br> <br> <<set $player.mulliganTokens += 1>> <<elseif _rng gt 18>> /* lost wallet */ On the way back you find someone's wallet dropped on the floor. There is no ID. You go to hand it in to $npcBarman.name and he pushes it back.<br> <br> "I doubt the last owner has much use for it now," he says.<br> <br> Inside you find 5 <<print $currencyName + "s.">> Yours now.<br> <br> <<set $player.money += 5>> <<elseif _rng gt 15>> /* 2 coins */ On the way back you find a couple of <<print $currencyName + "s">> someone has dropped on the floor.<br> <br> <<set $player.money += 2>> <<elseif _rng gt 5>> /* 1 coin */ On the way back you find a $currencyName on the floor.<br> <br> <<set $player.money += 1>> <</if>>
Your feelings are mixed as you wander over to the bar. You've no sooner sat down than a glass of beer is placed in front of you.<br> <br> "Complements of the house," the barman says. "The first drink is free."<br> <br>
<<set $player.location to 8>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<set $hasUsedActionWithNpc to false>> <<if $player.clubActivityUnits lt 1>> <<include [[Summon to Harlot Choice]]>> <<else>> <<include [[Club Activities: Hub]]>> <</if>>
<<if $player.mulliganTokens gt 0>> <br> <<if not _canChoose>> _cannotMulliganReason <<elseif $hasUsedMulliganToken eq true>> //You've already used a $mulliganToken.name this round.// <<else>> [["Use a " + $mulliganToken.name + " to change the harlots on offer this round?"->Harlot Selection: Use Mulligan]] <</if>> <</if>>
<<set $isCoreTesting to true>> <<set $isNpcTesting to true>> <<set $isTesting to true>> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $hci to [1,4,7]>> <<include [[Create Mock NPC Links]]>> <<set $returnToHubLink to "Club Activities: Return to Hub">> <<set $afterClubActivitiesLink to "Test: Club Activities: After">> <<include [[Test: Club Activities: New Round]]>>
<<set $npcMadam.lookForLink to "Mock Madam: Look For">> <<set $npcBarman.lookForLink to "Mock Barman: Look For">> <<set $npcGossip.lookForLink to "Mock Gossip: Look For">> <<set $npcPotion.lookForLink to "Mock Potion: Look For">> <<set $npcCharm.lookForLink to "Mock Charm: Look For">> <<set $npcNurse.lookForLink to "Mock Nurse: Look For">> <<set $npcMoney.lookForLink to "Mock Money: Look For">>
<<set $mockNpc to 1>> <<include [[Mock NPC: Visit]]>>
<<set $player.location to $mockNpc>> <<include [[Set Background Image]]>> <<set $npcsForArt to [$mockNpc]>> <div class="text-display"> <div class="body-text"> <<include [[Player: Pay NPC Action]]>> ''PLACEHOLDER TEXT''<br> <br> You visit $allNpcs[$mockNpc].name.<br> <br> You do the stuff with the NPC.<br> <br> </div> <div class="options-text"> [[Return to the bar.->$returnToHubLink]] </div> </div>
<<set $mockNpc to 0>> <<include [[Mock NPC: Visit]]>>
<<set $mockNpc to 2>> <<include [[Mock NPC: Visit]]>>
<<set $mockNpc to 3>> <<include [[Mock NPC: Visit]]>>
<<set $mockNpc to 4>> <<include [[Mock NPC: Visit]]>>
<<set $mockNpc to 5>> <<include [[Mock NPC: Visit]]>>
<<set $mockNpc to 6>> <<include [[Mock NPC: Visit]]>>
<<include [[Player: Pay NPC Action]]>> <<set $npcMadam.hasBeenAskedToMulliganHarlots to true>> <<set $npcMadam.hasGivenComplementaryMulliganToken to true>> <<set $npcMadam.hasToldHowNotToMulliganHarlots to true>> <<set $npcMadam.hasToldHowToBuyMulliganTokens to true>> <<set $npcMadam.hasToldHowToAddHarlot to true>> <<set $player.mulliganTokens += 1>> You talk to $npcMadam.name and she explains her various functions as well as remembering to give you your complementary $mulliganToken.name.<br> <br> //This cost 1 Action.//<br> <br>
<<set $isCoreTesting to true>> <<set $isNpcTesting to true>> <<set $isTesting to true>> <div class="text-display"> <div class="body-text"> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $hci to [1,4,7]>> <<set $afterHarlotSelectionLink to "Test: Harlot Selection: After">> ''TESTING HARLOT SELECTION''<br> <br> </div> <div class="options-text"> [[Test Regular Selection.->Test: Harlot Selection: New Round]] </div> </div>
<<include [[Harlot Selection: Intro]]>>
<<set _isMultiplePeople to $allHarlots[$hi].isMultiplePeople>> You selected $allHarlots[$hi].name. <<if _isMultiplePeople>>They seem<<else>>She seems<</if>> pleased with your choice and <<if _isMultiplePeople>>exit<<else>>exits<</if>> the stage through the curtain on the left. The others return to the backstage area to your right.<br> <br> /* TODO: Alternate paths for harlots like Eve Satana */ <<if $player.currentRound eq 1>> "No need to be nervous, dear," $npcMadam.name says. <<if _isMultiplePeople>>"They'll<<else>>"She'll<</if>> take good care of you. Maybe <<if _isMultiplePeople>>they<<else>>she<</if>> will even show you some new things," she adds with a bawdy wink.<br> <br> She puts an arm around you and guides you to the left hallway.<br> <br> "It'll take <<if _isMultiplePeople>>them<<else>>her<</if>> a little while to prep <<if _isMultiplePeople>>their<<else>>her<</if>> room, so why don't you freshen up first."<br> <br> You do that, using the washrooms on the left. Afterwards you return to the corridor. Your heart is pumping fast in your chest – mostly from excitement, but also with a little trepidation.<br> <br> "Don't forget to bring <<if _isMultiplePeople>>them<<else>>her<</if>> a gift," $npcMadam.name calls out to you from the curtained entrance. <<else>> You take a deep breath and push through the curtains of the left corridor. After freshening up in the washrooms, you walk to the gift table. As before, there is a varied assortment of gifts laid out on the antique table. <</if>><br> <br>
<div class="text-display"> <div class="body-text"> Gift selected: $allGifts[$cgi].name<br> <br> </div> <div class="options-text"> [[Reset and rerun test.->Test: Gift Selection: New Round]] [[Next round.->Test: Gift Selection: Next Round]] <br> [[Other tests.->Test: CoreGameLoop]] </div> </div>
<div class="text-display"> <div class="body-text"> <<set $hi to 9>> <<set $hci to [0, 9, 4]>> TESTING GIFT SELECTION<br> <br> </div> <div class="options-text"> [[Run test.->Gift Selection Container]] </div> </div>
<<set $player.currentRound += 1>> <<include [[Test: Gift Selection: New Round]]>>
<div class="text-display"> <div class="body-text"> Return from $allHarlots[$hi].name room.<br> <br> </div> <div class="options-text"> [[Reset and test.->Test: Harlot Room]] [[Next round.->Test: Harlot Room: Next Round]] <br> [[Other tests.->Test: CoreGameLoop]] </div> </div>
<<set $isCoreTesting to true>> <<set $isTesting to true>> <div class="text-display"> <div class="body-text"> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $afterHarlotRoomLink to "Test: Harlot Room: After">> ''TESTING HARLOT ROOM''<br> <br> <<include [[Create Mock Harlot Room Links]]>> <<set $hi to 7>> <<set $hci to [0, 7, 4]>> </div> <div class="options-text"> [[Begin Test.->Test: Harlot Room: New Round]] </div> </div>
<<for _hi to 0; _hi lt $allHarlots.length; _hi++>> <<set $allHarlots[_hi].scenarioLink to "Mock Harlot: Scenario">> <</for>>
<<include [[Harlot Room]]>>
<<set $player.currentRound += 1>> <<include [[Test: Harlot Room: New Round]]>>
<<set $isCoreTesting to true>> <<set $isNpcTesting to true>> <<set $isTesting to true>> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $player.charms.push(11)>> <<include [[Create Mock NPC Links]]>> <<set $npcMoney.hasBeenIntroduced to true>> <<set $npcGossip.hasBeenIntroduced to true>> <<set $returnToHubLink to "Post-Room Activities: Return to Hub">> <<set $afterPostroomActivitiesLink to "Test: Post-Room Activities: After">> <<include [[Test: Post-Room Activities: New Round]]>>
<<set $player.location to 8>> <<include [[Set Background Image]]>> <<set $npcsForArt to []>> <<set $hasUsedActionWithNpc to false>> <<if $player.postroomActivityUnits lt 1>> <<include [[Summon to Harlot Presentation]]>> <<else>> <<include [[Post-Room Activities: Hub]]>> <</if>>
<div class="text-display"> <div class="body-text"> //Testing Post-Room Activities: End of round.//<br> <br> </div> <div class="options-text"> [[Reset and rerun test.->Test: Post-Room Activities]] [[Next round.->Test: Post-Room Activities: Next Round]] <br> [[Other tests.->Test: CoreGameLoop]] </div> </div>
<div class="text-display"> <div class="body-text"> ''TESTNG POSTROOM ACTIVITIES''<br> <br> returnToHubLink: $returnToHubLink<br> <br> </div> <div class="options-text"> [[Begin Test.->Post-Room Activities: Intro]] </div> </div>
<<include [[Default CoreGameLoop Links]]>> <<include [[Next Round]]>>
<<set $afterHarlotPresentationLink to "Club Activities: Intro">> <<set $afterClubActivitiesLink to "Harlot Selection: Intro">> <<set $afterHarlotSelectionLink to "Gift Selection Container">> <<set $afterGiftSelectionLink to "Harlot Room">> <<set $afterHarlotRoomLink to "Post-Room Activities: Intro">> <<set $afterPostroomActivitiesLink to "Next Round">>
<div class="text-display"> <div class="body-text"> <<include [[Roll on Find Money Table]]>> </div> <div class="options-text"> [[Roll Again.->Test: Roll on Find Money Table]] </div> </div>
<div class="text-display"> <div class="body-text"> Harlot selected: $allHarlots[$hi].name<br> <br> </div> <div class="options-text"> [[Reset and rerun test.->Test: Harlot Selection]] [[Next round.->Test: Harlot Selection: Next Round]] <br> [[Other tests.->Test: CoreGameLoop]] </div> </div>
<<set $player.currentRound += 1>> <<include [[Test: Harlot Selection: New Round]]>>
<div class="text-display"> <div class="body-text"> //Testing Club Activities: End of round.//<br> <br> </div> <div class="options-text"> [[Reset and rerun test.->Test: Club Activities]] [[Next round.->Test: Club Activities: Next Round]] <br> [[Other tests.->Test: CoreGameLoop]] </div> </div>
<<include [[Club Activities: Intro]]>>
<<set $player.currentRound += 1>> <<include [[Player: Reset Activity Units]]>> <<include [[Test: Post-Room Activities: New Round]]
<<set $player.currentRound += 1>> <<include [[Player: Reset Activity Units]]>> <<include [[Test: Club Activities: New Round]]>>
<<include [[Harlot Presentation: Intro]]>>
<div class="text-display"> <div class="body-text"> Testing Harlot Presentation: After round<br> <br> </div> <div class="options-text"> [[Reset and rerun test.->Test: Harlot Presentation]] [[Next round.->Test: Harlot Presentation: Next Round]] <br> [[Other tests.->Test: CoreGameLoop]] </div> </div>
<<set $player.currentRound += 1>> <<include [[Test: Harlot Presentation: New Round]]>>
<<set $isCoreTesting to false>> <<set $isNpcTesting to false>> <<set $isTesting to false>> <<include [[AllInit]]>> <<include [[Testing: Create New Player]]>> <<set $player.currentRound to 1>> <<set $player.mulliganTokens to 2>> <<include [[Create Mock NPC Links]]>> <<set $npcMoney.hasBeenIntroduced to true>> <<include [[Create Mock Harlot Room Links]]>> <<include [[Default CoreGameLoop Links]]>> <<set $afterPostroomActivitiesLink to "Test: CoreGameLoop: Demo After">> <<include [[Harlot Presentation: Intro]]>>
/* Test Next Round link with some external links removed (item stock etc) */ <<set $player.currentRound += 1>> <<set $hasUsedMulliganToken to false>> <<include [[Harlot Presentation: Intro]]>>
<<include [[AllInit]]>> <div class="text-display"> <div class="body-text"> Testing Core Game Loop...<br> <br> </div> <div class="options-text"> [[Test full game loop.->Test: Full CoreGameLoop]] <br> [[Test harlot presentation.->Test: Harlot Presentation]] [[Test club activities.->Test: Club Activities]] [[Test harlot selection.->Test: Harlot Selection]] [[Test gift selection.->Test: Gift Selection Container]] [[Test harlot room.->Test: Harlot Room]] [[Test post-room activities.->Test: Post-Room Activities]] </div> </div>
<div class="text-display"> <div class="body-text"> Testing: After a game loop<br> <br> <<if $player.currentRound gt 3>> <<include [[End of Demo Text]]>> <</if>> </div> <div class="options-text"> [[Reset and start new test.->Test: Full CoreGameLoop]] <<if $player.currentRound gt 3>> //Reached maximum round allowed by demo.//<br> <<else>> [[Next round.->Test: CoreGameLoop: Next Round]] <</if>> <br> [[Other tests.->Test: CoreGameLoop]] </div> </div>
//This rough demo is just the 1st 3 rounds at the moment. You can restart and run through again.//<br> <br>
<<if $player.currentRound eq 3>> <<include [[Test: CoreGameLoop: End of Demo]]>> <<else>> <<include [[Test: CoreGameLoop: Next Round]]>> <</if>>
<div class="text-display"> <div class="body-text"> <<include [[End of Demo Text]]>> </div> <div class="options-text"> [[Go again.->Test: Full CoreGameLoop]] </div> </div>